/**
 * ==============================================================================
 * La funcion MAIN
 * ------------------------------------------------------------------------------
 * Inicializa las variables y todo lo necesario para que el RCX reciba mensajes
 * Cicla esperando un evento, el cual puede ser que se haya apretado la tecla
 * Program o que haya recibido un mensaje del command server.
 * Luego actua en consecuencia:
 * - Si se apreto la tecla Program, entonces incrementa su Id.
 * - Si se recibi un mensaje llama al procedimiento que interpreta los mensajes.
 * En cualquiera de los casos anteriores, si se estaba ejecutando un proceso,
 * es decir, si todavia estaba ejecutando un mensaje previo, lo cancela.
 * ==============================================================================
 */
int main(int argc,char *argv[]) 

/**
 * ==============================================================================
 * Funcin rx_msg
 * ------------------------------------------------------------------------------
 * Cada vez que el RCX recibe un mensaje, lo copia a la variable global gdata
 * ==============================================================================
 */
void rx_msg( const unsigned char * data, unsigned char len );

/**
 * ==============================================================================
 * Funcin prgmKeyCheck
 * ------------------------------------------------------------------------------
 * devuelve 1 si la tecla Program fue presionada
 * ==============================================================================
 */
wakeup_t prgmKeyCheck(wakeup_t data);

/**
 * ==============================================================================
 * Funcin cmdReceived
 * ------------------------------------------------------------------------------
 * devuelve 1 si el RCX recibi un mensaje, esto se logra mirando el flag rv.
 * ==============================================================================
 */
wakeup_t cmdReceived(wakeup_t data);

/**
 * ==============================================================================
 * Funcin cmdOrKey
 * ------------------------------------------------------------------------------
 * devuelve 1 si se recibi un Mensaje o si se presiono la tecla Program.
 * ==============================================================================
 */
wakeup_t cmdOrKey(wakeup_t dummy);

/**
 * ==============================================================================
 * Funcin motor_drive
 * ------------------------------------------------------------------------------
 * Esta funcin interpreta el mensaje recibido y acta en consecuencia:
 * del mensaje recibido, el dgito menos significativo es el tiempo del sleep,
 * luego, los digitos restantes son usados para determinar el comando a ejecutar.
 * El sleep va de 20 a 200 ms cuando el digito va de 0 a 9.
 * Los comandos a ejecutar van de 0 a 11
 * Ejemplo: 	09 - ejecuta el comando 0 con un sleep de 200 ms.
 * 		101 - ejecuta el comando 10 con un sleep de 40 ms.
 * ==============================================================================
 */
void motor_drive();