Недавно "допиливал" данный код. У меня это выглядит так:
hiduser.c
CODE
#define HID_INPUT_REPORT_BYTES 33 /* size of report in Bytes */
#define HID_OUTPUT_REPORT_BYTES 33 /* size of report in Bytes */
#define HID_FEATURE_REPORT_BYTES 2 /* size of report in Bytes */
/* HID Demo Variables */
extern U8 InReport[HID_INPUT_REPORT_BYTES];
extern U8 OutReport[HID_OUTPUT_REPORT_BYTES];
extern U8 SetupReport[HID_FEATURE_REPORT_BYTES];
/* HID Demo Functions */
extern void GetInReport (void);
extern void SetOutReport (void);
extern void SetupFuture (void);
BOOL HID_GetReport (void) {
/* ReportID = SetupPacket.wValue.WB.L; */
switch (SetupPacket.wValue.WB.H) {
case HID_REPORT_INPUT:
GetInReport();
memcpy(EP0Buf, InReport, HID_INPUT_REPORT_BYTES);
//m_DEBUG("Packet(Get)= 0x%02x bytes\n", InReport[0]);
memset(InReport, 0, HID_INPUT_REPORT_BYTES);
break;
case HID_REPORT_OUTPUT:
return (__FALSE); /* Not Supported */
case HID_REPORT_FEATURE:
/* EP0Buf[] = ...; */
/* break; */
return (__FALSE); /* Not Supported */
}
return (__TRUE);
}
BOOL HID_SetReport (void) {
/* ReportID = SetupPacket.wValue.WB.L; */
m_DEBUG("Packet= 0x%02x\n", SetupPacket.wValue.WB.H);
switch (SetupPacket.wValue.WB.H) {
case HID_REPORT_INPUT:
return (__FALSE); /* Not Supported */
case HID_REPORT_OUTPUT:
memcpy(OutReport, EP0Buf, HID_OUTPUT_REPORT_BYTES);
SetOutReport();
break;
case HID_REPORT_FEATURE:
memcpy(SetupReport, EP0Buf, HID_FEATURE_REPORT_BYTES);
SetupFuture();
break;
}
return (__TRUE);
}
usbdesc.c
CODE
const U8 HID_ReportDescriptor[] = {
HID_UsagePageVendor( 0x00 ),
HID_Usage ( 0x01 ),
HID_Collection ( HID_Application ),
HID_LogicalMin ( 0 ),
HID_LogicalMaxS ( 0xFF ),
HID_ReportSize ( 8 ),
HID_ReportCount ( HID_INPUT_REPORT_BYTES ),
HID_Usage ( 0x01 ),
HID_Input ( HID_Data | HID_Variable | HID_Absolute ),
HID_ReportCount ( HID_OUTPUT_REPORT_BYTES ),
HID_Usage ( 0x01 ),
HID_Output ( HID_Data | HID_Variable | HID_Absolute ),
HID_ReportCount ( HID_FEATURE_REPORT_BYTES ),
HID_Usage ( 0x01 ),
HID_Feature ( HID_Data | HID_Variable | HID_Absolute ),
HID_EndCollection,
};
Для понимания того, как заполняется дескриптор, рекомендую почитать документ "HID Usage Tables".
Сообщение отредактировал IgorKossak - Jul 28 2011, 19:46
Причина редактирования: [codebox]