Fixed the ClassDriver GenericHID demo so that it echoes back reports as indicated...
[pub/USBasp.git] / Demos / Device / ClassDriver / GenericHID / GenericHID.c
index 9db30ce..323d693 100644 (file)
 /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */\r
 uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE];\r
 \r
+/** Structure to contain reports from the host, so that they can be echoed back upon request */\r
+struct\r
+{\r
+       uint8_t ReportID;\r
+       uint16_t ReportSize;\r
+       uint8_t ReportData[GENERIC_REPORT_SIZE];\r
+} HIDReportEcho;\r
+\r
 /** LUFA HID Class driver interface configuration and state information. This structure is\r
  *  passed to all HID Class driver functions, so that multiple instances of the same class\r
  *  within a device can be differentiated from one another.\r
@@ -139,9 +147,12 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
                                          void* ReportData, uint16_t* ReportSize)\r
 {\r
-       // Create generic HID report here\r
+       if (HIDReportEcho.ReportID)\r
+         *ReportID = HIDReportEcho.ReportID;\r
+\r
+       memcpy(ReportData, HIDReportEcho.ReportData, HIDReportEcho.ReportSize);\r
        \r
-       *ReportSize = 0;\r
+       *ReportSize = HIDReportEcho.ReportSize;\r
        return true;\r
 }\r
 \r
@@ -155,5 +166,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,\r
                                           const void* ReportData, const uint16_t ReportSize)\r
 {\r
-       // Process received generic HID report here\r
+       HIDReportEcho.ReportID   = ReportID;\r
+       HIDReportEcho.ReportSize = ReportSize;\r
+       memcpy(HIDReportEcho.ReportData, ReportData, ReportSize);\r
 }\r