Fixed the ClassDriver GenericHID demo so that it echoes back reports as indicated...
authorDean Camera <dean@fourwalledcubicle.com>
Fri, 31 Jul 2009 03:35:24 +0000 (03:35 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Fri, 31 Jul 2009 03:35:24 +0000 (03:35 +0000)
Demos/Device/ClassDriver/GenericHID/GenericHID.c
Demos/Device/ClassDriver/GenericHID/GenericHID.txt
Demos/Device/LowLevel/GenericHID/GenericHID.txt

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
index fc5c136..226b007 100644 (file)
@@ -51,8 +51,8 @@
  *\r
  *  Generic HID device demonstration application. This gives a simple reference application\r
  *  for implementing a generic HID device, using the basic USB HID drivers in all modern\r
- *  OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
- *  and from a USB Host, and by default transmits the last sent report back to the host.\r
+ *  OSes (i.e. no special drivers required). By default it accepts and sends up to 8 byte reports\r
+ *  to and from a USB Host, and transmits the last sent report back to the host.\r
  *  \r
  *  On start-up the system will automatically enumerate and function as a vendor HID device.\r
  *  When controlled by a custom HID class application, reports can be sent and received by\r
index fc5c136..226b007 100644 (file)
@@ -51,8 +51,8 @@
  *\r
  *  Generic HID device demonstration application. This gives a simple reference application\r
  *  for implementing a generic HID device, using the basic USB HID drivers in all modern\r
- *  OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
- *  and from a USB Host, and by default transmits the last sent report back to the host.\r
+ *  OSes (i.e. no special drivers required). By default it accepts and sends up to 8 byte reports\r
+ *  to and from a USB Host, and transmits the last sent report back to the host.\r
  *  \r
  *  On start-up the system will automatically enumerate and function as a vendor HID device.\r
  *  When controlled by a custom HID class application, reports can be sent and received by\r