hola, pues este como dices es HID, en la carpeta llamada GenericHID-Firmware, en el archivo principal main, en el método main, se encuentra el llamado al método ProcessIO(), el cual a su vez contiene la identificación de los códigos. El funcionamiento es sencillo, dentro de un "case" se pregunta que caso se trata, el pic envia un codigo y la computadora le responde, haciendose un eco,
/****************************************************************** ******************************************************************/
case 0x80: //Toggle LEDs command
if(contLed1 == 0){
mLED_1_On();
contLed1 = 1;
} else{
mLED_1_Off();
contLed1 = 0;
}
break;
/****************************************************************** ******************************************************************/
case 0x81: //Get push button state
ToSendDataBuffer[0] = 0x81; //Echo back to the host PC the command we are fulfilling in the first byte. In this case, the Get Pushbutton State command.
if(sw3 == 1) //pushbutton not pressed, pull up resistor on circuit board is pulling the PORT pin high
{
ToSendDataBuffer[1] = 0x01;
}
else //sw3 must be == 0, pushbutton is pressed and overpowering the pull up resistor
{
ToSendDataBuffer[1] = 0x00;
}
if(!HIDTxHandleBusy(USBInHandle))
{
USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
}
break;
/****************************************************************** ******************************************************************/
la computadora hace lo mismo, todos los datos se almacenan en dos variables principales
ReceivedDataBuffer[64]; //buffer de recepcion
ToSendDataBuffer[64]; //buffer de envio
los cuales solo se utilzan las 2 primeras posiciones, una el caso, otro el dato, pero se pueden utilizar los 64 posiciones,
en la interfaz grafica, en la pc, el envio y recepcion es casi igual
/****************************************************************** ******************************************************************/
//Encendido-Apagado General
if(OnOffBotonPresionado == TRUE)
{
OUTBuffer[0] = 0;
OUTBuffer[1] = 0x80;
for(unsigned char i = 2; i <65; i++)
OUTBuffer = 0xFF;
WriteFile(WriteHandleToUSBDevice, &OUTBuffer, 65, &BytesWritten, 0);
OnOffBotonPresionado = FALSE;
}
/****************************************************************** ******************************************************************/
envia el caso, y el dato,
espero que haya servido la explicacion, es sencillo, los otros casos como el CDC no me llama la atencion
saludos