mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	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. */ | /** 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 false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** 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); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -36,9 +36,6 @@ | |||||||
| 
 | 
 | ||||||
| #include "GenericHID.h" | #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
 | /** Main program entry point. This routine configures the hardware required by the application, then
 | ||||||
|  *  enters a loop to run the application tasks in sequence. |  *  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) | void ProcessGenericHIDReport(uint8_t* DataArray) | ||||||
| { | { | ||||||
| 	/*
 | 	/*
 | ||||||
| 		This is where you need to process the reports being sent from the host to the device. | 		This is where you need to process reports sent from the host to the device. This | ||||||
| 		DataArray is an array holding the last report from the host. This function is called | 		function is called each time the host has sent a new report. DataArray is an array | ||||||
| 		each time the host has sent a report to the device. | 		holding the report sent from the host. | ||||||
| 	*/ | 	*/ | ||||||
| 
 | 
 | ||||||
| 	for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++) | 	uint8_t NewLEDMask = LEDS_NO_LEDS;	 | ||||||
| 	  LastReceived[i] = DataArray[i]; | 
 | ||||||
|  | 	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.
 | /** 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. | 		an array to hold the report to the host. | ||||||
| 	*/ | 	*/ | ||||||
| 
 | 
 | ||||||
| 	for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++) | 	uint8_t CurrLEDMask = LEDs_GetLEDs(); | ||||||
| 	  DataArray[i] = LastReceived[i]; | 		 | ||||||
|  | 	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) | void HID_Task(void) | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ | |||||||
| #define  INCLUDE_FROM_BLUETOOTHHCICOMMANDS_C | #define  INCLUDE_FROM_BLUETOOTHHCICOMMANDS_C | ||||||
| #include "BluetoothHCICommands.h" | #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]; | static uint8_t Bluetooth_TempDeviceAddress[6]; | ||||||
| 
 | 
 | ||||||
| /** Bluetooth HCI processing task. This task should be called repeatedly the main Bluetooth
 | /** 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. | 				 *  \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
 | 				/** 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. | 				 *  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. | 				 *  \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.
 | 				/** 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. | 				 *  \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
 | 				/** 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 | 				 *  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--) | 		while (Length--) | ||||||
| 		{ | 		{ | ||||||
| 			if (!(TWI_ReceiveByte(Buffer++, (Length == 0)))) | 			if (!(TWI_ReceiveByte(Buffer++, (Length == 1)))) | ||||||
| 			{ | 			{ | ||||||
| 				ErrorCode = TWI_ERROR_SlaveNAK; | 				ErrorCode = TWI_ERROR_SlaveNAK; | ||||||
| 				break; | 				break; | ||||||
|  | |||||||
| @ -143,12 +143,12 @@ | |||||||
| 			/** TWI slave device address mask for a read session. Mask with a slave device base address to obtain
 | 			/** 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. | 			 *  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
 | 			/** 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. | 			 *  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
 | 			/** 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. | 			 *  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 |   *     USB_Host_ConfigurationNumber global as required | ||||||
|   *   - Added endian correcting code to the library USB class drivers for multiple architecture support |   *   - 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 |   *   - Removed the ENDPOINT_DESCRIPTOR_DIR_* macros, replaced by ENDPOINT_DIR_* instead | ||||||
|  |   *   - Renamed the JTAG_DEBUG_ASSERT() macro to JTAG_ASSERT() | ||||||
|   *  - Library Applications: |   *  - Library Applications: | ||||||
|   *   - Modified the Low Level and Class Driver AudioInput and AudioOutput demos to support multiple audio sample rates |   *   - 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 |   *   - 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 |   *     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> |   *  <b>Fixed:</b> | ||||||
|   *  - Core: |   *  - 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 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 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 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: |   *  - Library Applications: | ||||||
|   *   - Fixed incorrect signature in the CDC and DFU class bootloaders for the ATMEGA8U2 |   *   - 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 |   *   - 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/ |  *  - Generic HID Device Creator: http://generichid.sourceforge.net/ | ||||||
|  *  - Ghetto Drum, a MIDI drum controller: http://noisybox.net/art/gdrum/ |  *  - 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/ |  *  - 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 |  *  - 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 |  *  - 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 |  *  - LUFA powered DDR dance mat (French): http://logicien-parfait.fr/dokuwiki/doku.php?id=projet:ddr_repair | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera