@ -39,14 +39,6 @@
/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
static uint8_t PrevHIDReportBuffer [ GENERIC_REPORT_SIZE ] ;
static uint8_t PrevHIDReportBuffer [ GENERIC_REPORT_SIZE ] ;
/** Structure to contain reports from the host, so that they can be echoed back upon request */
static struct
{
uint8_t ReportID ;
uint16_t ReportSize ;
uint8_t ReportData [ GENERIC_REPORT_SIZE ] ;
} HIDReportEcho ;
/** LUFA HID Class driver interface configuration and state information. This structure is
/** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions , so that multiple instances of the same class
* passed to all HID Class driver functions , so that multiple instances of the same class
* within a device can be differentiated from one another .
* within a device can be differentiated from one another .
@ -151,13 +143,16 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
void * ReportData ,
void * ReportData ,
uint16_t * const ReportSize )
uint16_t * const ReportSize )
{
{
if ( HIDReportEcho . ReportID )
uint8_t * Data = ( uint8_t * ) ReportData ;
* ReportID = HIDReportEcho . ReportID ;
uint8_t CurrLEDMask = LEDs_GetLEDs ( ) ;
memcpy ( ReportData , HIDReportEcho . ReportData , HIDReportEcho . ReportSize ) ;
Data [ 0 ] = ( ( CurrLEDMask & LEDS_LED1 ) ? 1 : 0 ) ;
Data [ 1 ] = ( ( CurrLEDMask & LEDS_LED2 ) ? 1 : 0 ) ;
Data [ 2 ] = ( ( CurrLEDMask & LEDS_LED3 ) ? 1 : 0 ) ;
Data [ 3 ] = ( ( CurrLEDMask & LEDS_LED4 ) ? 1 : 0 ) ;
* ReportSize = HIDReportEcho . ReportSize ;
* ReportSize = sizeof ( GENERIC_REPORT_SIZE ) ;
return true ;
return fals e;
}
}
/** HID class driver callback function for the processing of HID reports from the host.
/** HID class driver callback function for the processing of HID reports from the host.
@ -174,8 +169,21 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
const void * ReportData ,
const void * ReportData ,
const uint16_t ReportSize )
const uint16_t ReportSize )
{
{
HIDReportEcho . ReportID = ReportID ;
uint8_t * Data = ( uint8_t * ) ReportData ;
HIDReportEcho . ReportSize = ReportSize ;
uint8_t NewLEDMask = LEDS_NO_LEDS ;
memcpy ( HIDReportEcho . ReportData , ReportData , ReportSize ) ;
if ( Data [ 0 ] )
NewLEDMask | = LEDS_LED1 ;
if ( Data [ 1 ] )
NewLEDMask | = LEDS_LED1 ;
if ( Data [ 2 ] )
NewLEDMask | = LEDS_LED1 ;
if ( Data [ 3 ] )
NewLEDMask | = LEDS_LED1 ;
LEDs_SetAllLEDs ( NewLEDMask ) ;
}
}