He estado leyendo mucho sobre comunicación USB por un tiempo. Ya hice dos proyectos con PIC18F4550 usando USB y todo funciona perfectamente. Pero todavía tengo una pregunta sin respuesta en mi mente. ¿Cómo sabe la pila USB si hay datos nuevos o no?
Quiero decir, estoy usando los ejemplos HID USB de Microchip para guiarme. Así que mi chip está trabajando en modo de sondeo. Mi dispositivo recibirá datos constantemente y los transmitirá a la computadora a través de USB. Pero la computadora también devolverá algunos datos. La cosa es que los datos de salida de la computadora solo sucederán a veces. Aquí está parte del código:
void QueryPCData(void)
{
if (!HIDRxHandleBusy(lastReceived))
{
lastReceived = HIDRxPacket(HID_EP,(BYTE*)&hid_out, HID_OUT_LEN);
if ((hid_out[0]==0xEF)&&(hid_out[1]==0xEF)&&(hid_out[2]==0xEF))
LED_ON;
else
LED_OFF;
}
//If the last transmision is complete
if(!HIDTxHandleBusy(lastTransmission))
{
lastTransmission = HIDTxPacket(HID_EP, (BYTE*)&hid_in, HID_IN_LEN);
}
return;
}
Mirando el código, parece que en cada ciclo intenta actualizar todos los datos (TX y RX). ¿Pero qué pasa si no envié ningún dato de la computadora? ¿Mi matriz hid_out mantendrá el último valor hasta que reciba datos nuevos?
Si deseo enviar un solo comando a través de USB, debería enviarlo una vez y luego enviar espacios en blanco o algo para evitar repetir el último comando (enviarlo dos veces).