mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	Add API support signature to the CDC and DFU class bootloaders, so that the application can detect the bootloader's API support.
This commit is contained in:
		
							parent
							
								
									3dacb73af3
								
							
						
					
					
						commit
						43a3350981
					
				| @ -71,4 +71,3 @@ void BootloaderAPI_WriteLock(const uint8_t LockBits) | |||||||
| { | { | ||||||
| 	boot_lock_bits_set_safe(LockBits); | 	boot_lock_bits_set_safe(LockBits); | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -32,12 +32,17 @@ | |||||||
| .section .apitable, "ax" | .section .apitable, "ax" | ||||||
| .org 0
 | .org 0
 | ||||||
| 
 | 
 | ||||||
|  | ; API function jump table
 | ||||||
| .global BootloaderAPI_JumpTable
 | .global BootloaderAPI_JumpTable
 | ||||||
| BootloaderAPI_JumpTable: | BootloaderAPI_JumpTable: | ||||||
| 	jmp BootloaderAPI_ErasePage | 	rjmp BootloaderAPI_ErasePage | ||||||
| 	jmp BootloaderAPI_WritePage | 	rjmp BootloaderAPI_WritePage | ||||||
| 	jmp BootloaderAPI_FillWord | 	rjmp BootloaderAPI_FillWord | ||||||
| 	jmp BootloaderAPI_ReadSignature | 	rjmp BootloaderAPI_ReadSignature | ||||||
| 	jmp BootloaderAPI_ReadFuse | 	rjmp BootloaderAPI_ReadFuse | ||||||
| 	jmp BootloaderAPI_ReadLock | 	rjmp BootloaderAPI_ReadLock | ||||||
| 	jmp BootloaderAPI_WriteLock | 	rjmp BootloaderAPI_WriteLock | ||||||
|  | 
 | ||||||
|  | ; Bootloader table signature
 | ||||||
|  | .org 30
 | ||||||
|  | 	.word 0xDCFB
 | ||||||
|  | |||||||
| @ -103,8 +103,15 @@ | |||||||
|  *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_START(4); |  *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_START(4); | ||||||
|  *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_START(5); |  *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_START(5); | ||||||
|  *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_START(6); |  *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_START(6); | ||||||
|  |  * | ||||||
|  |  *  #define BOOTLOADER_SIG_START               (FLASHEND - 32) | ||||||
|  |  *  #define BOOTLOADER_SIGNATURE               0xDCFB | ||||||
|  *  \endcode |  *  \endcode | ||||||
|  * |  * | ||||||
|  |  *  Bootloaders reporting a device release revision number of 1.00 or greater are bootloader API enabled. From the application | ||||||
|  |  *  the API support of the bootloader can be detected by reading the FLASH memory bytes located at address \c BOOTLOADER_SIG_START | ||||||
|  |  *  and comparing them to the value \c BOOTLOADER_SIGNATURE. | ||||||
|  |  * | ||||||
|  *  \section Sec_Options Project Options |  *  \section Sec_Options Project Options | ||||||
|  * |  * | ||||||
|  *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. |  *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. | ||||||
|  | |||||||
| @ -55,7 +55,7 @@ const USB_Descriptor_Device_t DeviceDescriptor = | |||||||
| 
 | 
 | ||||||
| 	.VendorID               = 0x03EB, | 	.VendorID               = 0x03EB, | ||||||
| 	.ProductID              = 0x204A, | 	.ProductID              = 0x204A, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(01.00), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = NO_DESCRIPTOR, | 	.ManufacturerStrIndex   = NO_DESCRIPTOR, | ||||||
| 	.ProductStrIndex        = 0x01, | 	.ProductStrIndex        = 0x01, | ||||||
|  | |||||||
| @ -32,12 +32,17 @@ | |||||||
| .section .apitable, "ax" | .section .apitable, "ax" | ||||||
| .org 0
 | .org 0
 | ||||||
| 
 | 
 | ||||||
|  | ; API function jump table
 | ||||||
| .global BootloaderAPI_JumpTable
 | .global BootloaderAPI_JumpTable
 | ||||||
| BootloaderAPI_JumpTable: | BootloaderAPI_JumpTable: | ||||||
| 	jmp BootloaderAPI_ErasePage | 	rjmp BootloaderAPI_ErasePage | ||||||
| 	jmp BootloaderAPI_WritePage | 	rjmp BootloaderAPI_WritePage | ||||||
| 	jmp BootloaderAPI_FillWord | 	rjmp BootloaderAPI_FillWord | ||||||
| 	jmp BootloaderAPI_ReadSignature | 	rjmp BootloaderAPI_ReadSignature | ||||||
| 	jmp BootloaderAPI_ReadFuse | 	rjmp BootloaderAPI_ReadFuse | ||||||
| 	jmp BootloaderAPI_ReadLock | 	rjmp BootloaderAPI_ReadLock | ||||||
| 	jmp BootloaderAPI_WriteLock | 	rjmp BootloaderAPI_WriteLock | ||||||
|  | 
 | ||||||
|  | ; Bootloader table signature
 | ||||||
|  | .org 30
 | ||||||
|  | 	.word 0xDCFB
 | ||||||
|  | |||||||
| @ -108,8 +108,14 @@ | |||||||
|  *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_START(4); |  *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_START(4); | ||||||
|  *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_START(5); |  *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_START(5); | ||||||
|  *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_START(6); |  *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_START(6); | ||||||
|  |  * | ||||||
|  |  *  #define BOOTLOADER_SIG_START               (FLASHEND - 32) | ||||||
|  |  *  #define BOOTLOADER_SIGNATURE               0xDCFB | ||||||
|  *  \endcode |  *  \endcode | ||||||
|  * |  * | ||||||
|  |  *  From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address | ||||||
|  |  *  \c BOOTLOADER_SIG_START and comparing them to the value \c BOOTLOADER_SIGNATURE. | ||||||
|  |  * | ||||||
|  *  \section Sec_Options Project Options |  *  \section Sec_Options Project Options | ||||||
|  * |  * | ||||||
|  *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. |  *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. | ||||||
|  | |||||||
| @ -31,6 +31,7 @@ | |||||||
|   *   - Altered the Mass Storage Host class driver so that SCSI data STALLs from the attached device can be recovered from automatically without |   *   - Altered the Mass Storage Host class driver so that SCSI data STALLs from the attached device can be recovered from automatically without | ||||||
|   *     having to reset the Mass Storage interface |   *     having to reset the Mass Storage interface | ||||||
|   *   - USB_CONFIG_ATTR_BUSPOWERED constant renamed to USB_CONFIG_ATTR_RESERVED, as this was misnamed (thanks to NXP Semiconductors) |   *   - USB_CONFIG_ATTR_BUSPOWERED constant renamed to USB_CONFIG_ATTR_RESERVED, as this was misnamed (thanks to NXP Semiconductors) | ||||||
|  |   *   - Reordered board name definition indexes so that a mispelled BOARD compile option will default to BOARD_USER rather than BOARD_USBKEY | ||||||
|   *  - Library Applications: |   *  - Library Applications: | ||||||
|   *   - Altered the Mass Storage Host LowLevel demo so that SCSI data STALLs from the attached device can be recovered from automatically without |   *   - Altered the Mass Storage Host LowLevel demo so that SCSI data STALLs from the attached device can be recovered from automatically without | ||||||
|   *     having to reset the Mass Storage interface |   *     having to reset the Mass Storage interface | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera