/*
LUFA Library
- Copyright (C) Dean Camera, 2011.
+ Copyright (C) Dean Camera, 2012.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
- Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
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
* passed to all HID Class driver functions, so that multiple instances of the same class
* within a device can be differentiated from one another.
.Config =
{
.InterfaceNumber = 0,
-
- .ReportINEndpointNumber = GENERIC_IN_EPNUM,
- .ReportINEndpointSize = GENERIC_EPSIZE,
- .ReportINEndpointDoubleBank = false,
-
+ .ReportINEndpoint =
+ {
+ .Address = GENERIC_IN_EPADDR,
+ .Size = GENERIC_EPSIZE,
+ .Banks = 1,
+ },
.PrevReportINBuffer = PrevHIDReportBuffer,
.PrevReportINBufferSize = sizeof(PrevHIDReportBuffer),
},
* \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
* \param[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature
* \param[out] ReportData Pointer to a buffer where the created report should be stored
- * \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent
+ * \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent)
*
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
*/
void* ReportData,
uint16_t* const ReportSize)
{
- if (HIDReportEcho.ReportID)
- *ReportID = HIDReportEcho.ReportID;
+ uint8_t* Data = (uint8_t*)ReportData;
+ 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;
- return true;
+ *ReportSize = GENERIC_REPORT_SIZE;
+ return false;
}
/** HID class driver callback function for the processing of HID reports from the host.
const void* ReportData,
const uint16_t ReportSize)
{
- HIDReportEcho.ReportID = ReportID;
- HIDReportEcho.ReportSize = ReportSize;
- memcpy(HIDReportEcho.ReportData, ReportData, ReportSize);
+ uint8_t* Data = (uint8_t*)ReportData;
+ uint8_t NewLEDMask = LEDS_NO_LEDS;
+
+ 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);
}