Renamed the JTAG_DEBUG_ASSERT() macro to JTAG_ASSERT().
Changed the reports in the GenericHID device demos to control the board LEDs, to reduce user confusion over the callback routines. Fixed swapped TWI_ADDRESS_READ and TWI_ADDRESS_WRITE values. Fixed TWI_ReadPacket() not releasing the TWI bus on read completion.
This commit is contained in:
parent
40946a5704
commit
d0ac8e46f9
8 changed files with 61 additions and 34 deletions
|
@ -39,14 +39,6 @@
|
|||
/** 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.
|
||||
|
@ -151,13 +143,16 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
|
|||
void* ReportData,
|
||||
uint16_t* const ReportSize)
|
||||
{
|
||||
if (HIDReportEcho.ReportID)
|
||||
*ReportID = HIDReportEcho.ReportID;
|
||||
uint8_t* Data = (uint8_t*)ReportData;
|
||||
uint8_t CurrLEDMask = LEDs_GetLEDs();
|
||||
|
||||
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);
|
||||
|
||||
memcpy(ReportData, HIDReportEcho.ReportData, HIDReportEcho.ReportSize);
|
||||
|
||||
*ReportSize = HIDReportEcho.ReportSize;
|
||||
return true;
|
||||
*ReportSize = sizeof(GENERIC_REPORT_SIZE);
|
||||
return false;
|
||||
}
|
||||
|
||||
/** 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 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -36,9 +36,6 @@
|
|||
|
||||
#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.
|
||||
|
@ -155,13 +152,26 @@ void EVENT_USB_Device_ControlRequest(void)
|
|||
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.
|
||||
|
@ -176,8 +186,12 @@ void CreateGenericHIDReport(uint8_t* DataArray)
|
|||
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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue