forked from mfulz_github/qmk_firmware
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
|
@ -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)
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#define INCLUDE_FROM_BLUETOOTHHCICOMMANDS_C
|
||||
#include "BluetoothHCICommands.h"
|
||||
|
||||
/** Temporary Bluetooth Device Address, for HCI responses which much include the destination address */
|
||||
/** Temporary Bluetooth Device Address, for HCI responses which must include the destination address */
|
||||
static uint8_t Bluetooth_TempDeviceAddress[6];
|
||||
|
||||
/** Bluetooth HCI processing task. This task should be called repeatedly the main Bluetooth
|
||||
|
|
|
@ -84,14 +84,14 @@
|
|||
*
|
||||
* \note This macro is not available for all architectures.
|
||||
*/
|
||||
#define JTAG_DEBUG_POINT() __asm__ __volatile__ ("NOP" ::)
|
||||
#define JTAG_DEBUG_POINT() __asm__ __volatile__ ("nop" ::)
|
||||
|
||||
/** Defines an explicit JTAG break point in the resulting binary via the assembly \c BREAK statement. When
|
||||
* a JTAG is used, this causes the program execution to halt when reached until manually resumed.
|
||||
*
|
||||
* \note This macro is not available for all architectures.
|
||||
*/
|
||||
#define JTAG_DEBUG_BREAK() __asm__ __volatile__ ("BREAK" ::)
|
||||
#define JTAG_DEBUG_BREAK() __asm__ __volatile__ ("break" ::)
|
||||
|
||||
/** Macro for testing condition "x" and breaking via \ref JTAG_DEBUG_BREAK() if the condition is false.
|
||||
*
|
||||
|
@ -99,7 +99,7 @@
|
|||
*
|
||||
* \param[in] Condition Condition that will be evaluated.
|
||||
*/
|
||||
#define JTAG_DEBUG_ASSERT(Condition) MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
|
||||
#define JTAG_ASSERT(Condition) MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
|
||||
|
||||
/** Macro for testing condition \c "x" and writing debug data to the stdout stream if \c false. The stdout stream
|
||||
* must be pre-initialized before this macro is run and linked to an output device, such as the microcontroller's
|
||||
|
|
|
@ -117,7 +117,7 @@ uint8_t TWI_ReadPacket(const uint8_t SlaveAddress,
|
|||
{
|
||||
while (Length--)
|
||||
{
|
||||
if (!(TWI_ReceiveByte(Buffer++, (Length == 0))))
|
||||
if (!(TWI_ReceiveByte(Buffer++, (Length == 1))))
|
||||
{
|
||||
ErrorCode = TWI_ERROR_SlaveNAK;
|
||||
break;
|
||||
|
|
|
@ -143,12 +143,12 @@
|
|||
/** TWI slave device address mask for a read session. Mask with a slave device base address to obtain
|
||||
* the correct TWI bus address for the slave device when reading data from it.
|
||||
*/
|
||||
#define TWI_ADDRESS_READ 0x00
|
||||
#define TWI_ADDRESS_READ 0x01
|
||||
|
||||
/** TWI slave device address mask for a write session. Mask with a slave device base address to obtain
|
||||
* the correct TWI bus address for the slave device when writing data to it.
|
||||
*/
|
||||
#define TWI_ADDRESS_WRITE 0x01
|
||||
#define TWI_ADDRESS_WRITE 0x00
|
||||
|
||||
/** Mask to retrieve the base address for a TWI device, which can then be ORed with \ref TWI_ADDRESS_READ
|
||||
* or \ref TWI_ADDRESS_WRITE to obtain the device's read and write address respectively.
|
||||
|
|
|
@ -56,10 +56,12 @@
|
|||
* USB_Host_ConfigurationNumber global as required
|
||||
* - Added endian correcting code to the library USB class drivers for multiple architecture support
|
||||
* - Removed the ENDPOINT_DESCRIPTOR_DIR_* macros, replaced by ENDPOINT_DIR_* instead
|
||||
* - Renamed the JTAG_DEBUG_ASSERT() macro to JTAG_ASSERT()
|
||||
* - Library Applications:
|
||||
* - Modified the Low Level and Class Driver AudioInput and AudioOutput demos to support multiple audio sample rates
|
||||
* - Updated all host mode demos and projects to use the EVENT_USB_Host_DeviceEnumerationComplete() event callback for device configuration
|
||||
* instead of manual host state machine manipulations in the main application task
|
||||
* - Changed the reports in the GenericHID device demos to control the board LEDs, to reduce user confusion over the callback routines
|
||||
*
|
||||
* <b>Fixed:</b>
|
||||
* - Core:
|
||||
|
@ -71,6 +73,8 @@
|
|||
* - Fixed lack of C++ compatibility in some internal header files causing compile errors when using LUFA in C++ projects
|
||||
* - Fixed error in the pipe unordered allocation algorithm for the AVR8 devices breaking compatibility with some devices
|
||||
* - Fixed USB_USBTask not being called internally in stream transfers between packets when Partial Stream Transfers are used
|
||||
* - Fixed swapped TWI_ADDRESS_READ and TWI_ADDRESS_WRITE values
|
||||
* - Fixed TWI_ReadPacket() not releasing the TWI bus on read completion
|
||||
* - Library Applications:
|
||||
* - Fixed incorrect signature in the CDC and DFU class bootloaders for the ATMEGA8U2
|
||||
* - Fixed KeyboardHost and KeyboardHostWithParser demos displaying incorrect values when numerical keys were pressed
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
* - Generic HID Device Creator: http://generichid.sourceforge.net/
|
||||
* - Ghetto Drum, a MIDI drum controller: http://noisybox.net/art/gdrum/
|
||||
* - Hiduino, a USB-MIDI replacement firmware for the Arduino Uno: http://code.google.com/p/hiduino/
|
||||
* - Ikea RGB LED USB modification: http://slashhome.se/p/projects/id/ikea_dioder_usb/#project
|
||||
* - IR Remote to Keyboard decoder: http://netzhansa.blogspot.com/2010/04/our-living-room-hi-fi-setup-needs-mp3.html
|
||||
* - LED Panel controller: http://projects.peterpolidoro.net/caltech/panelscontroller/panelscontroller.htm
|
||||
* - LUFA powered DDR dance mat (French): http://logicien-parfait.fr/dokuwiki/doku.php?id=projet:ddr_repair
|
||||
|
|
Loading…
Reference in New Issue