/*
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
#include "GenericHID.h"
-/** Static buffer to hold the last received report from the host, so that it can be echoed back in the next sent report */
-static uint8_t LastReceived[GENERIC_REPORT_SIZE];
-
/** Main program entry point. This routine configures the hardware required by the application, then
* enters a loop to run the application tasks in sequence.
bool ConfigSuccess = true;
/* Setup HID Report Endpoints */
- ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
- GENERIC_EPSIZE, ENDPOINT_BANK_SINGLE);
- ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
- GENERIC_EPSIZE, ENDPOINT_BANK_SINGLE);
+ ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_IN_EPADDR, EP_TYPE_INTERRUPT, GENERIC_EPSIZE, 1);
+ ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_OUT_EPADDR, EP_TYPE_INTERRUPT, GENERIC_EPSIZE, 1);
/* Indicate endpoint configuration success or failure */
LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
void ProcessGenericHIDReport(uint8_t* DataArray)
{
/*
- This is where you need to process the reports being sent from the host to the device.
- DataArray is an array holding the last report from the host. This function is called
- each time the host has sent a report to the device.
+ This is where you need to process reports sent from the host to the device. This
+ function is called each time the host has sent a new report. DataArray is an array
+ holding the report sent from the host.
*/
- for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++)
- LastReceived[i] = DataArray[i];
+ uint8_t NewLEDMask = LEDS_NO_LEDS;
+
+ if (DataArray[0])
+ NewLEDMask |= LEDS_LED1;
+
+ if (DataArray[1])
+ NewLEDMask |= LEDS_LED1;
+
+ if (DataArray[2])
+ NewLEDMask |= LEDS_LED1;
+
+ if (DataArray[3])
+ NewLEDMask |= LEDS_LED1;
+
+ LEDs_SetAllLEDs(NewLEDMask);
}
/** Function to create the next report to send back to the host at the next reporting interval.
an array to hold the report to the host.
*/
- for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++)
- DataArray[i] = LastReceived[i];
+ uint8_t CurrLEDMask = LEDs_GetLEDs();
+
+ DataArray[0] = ((CurrLEDMask & LEDS_LED1) ? 1 : 0);
+ DataArray[1] = ((CurrLEDMask & LEDS_LED2) ? 1 : 0);
+ DataArray[2] = ((CurrLEDMask & LEDS_LED3) ? 1 : 0);
+ DataArray[3] = ((CurrLEDMask & LEDS_LED4) ? 1 : 0);
}
void HID_Task(void)
if (USB_DeviceState != DEVICE_STATE_Configured)
return;
- Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM);
+ Endpoint_SelectEndpoint(GENERIC_OUT_EPADDR);
/* Check to see if a packet has been sent from the host */
if (Endpoint_IsOUTReceived())
Endpoint_ClearOUT();
}
- Endpoint_SelectEndpoint(GENERIC_IN_EPNUM);
+ Endpoint_SelectEndpoint(GENERIC_IN_EPADDR);
/* Check to see if the host is ready to accept another packet */
if (Endpoint_IsINReady())