implement #19 serial descriptor based on deviceid
This commit is contained in:
		 Submodule lib/tinyusb updated: e07b1acbed...7b35cd0203
									
								
							| @@ -54,6 +54,13 @@ | |||||||
| extern tusb_desc_device_t usb_desc_dev; | extern tusb_desc_device_t usb_desc_dev; | ||||||
| extern usb_desc_cfg_t     usb_desc_cfg; | extern usb_desc_cfg_t     usb_desc_cfg; | ||||||
|  |  | ||||||
|  | /* Serial should be different for Application mode, DFU with UF2, and DFU with CDC only therefore | ||||||
|  |  * - DeviceID     : (Arduino + CircuitPython) | ||||||
|  |  * - DeviceID + 1 : DFU with UF2 | ||||||
|  |  * - DeviceID + 2 : DFU with CDC only | ||||||
|  |  */ | ||||||
|  | extern uint16_t           usb_desc_str_serial[1+16]; | ||||||
|  |  | ||||||
| /* tinyusb function that handles power event (detected, ready, removed) | /* tinyusb function that handles power event (detected, ready, removed) | ||||||
|  * We must call it within SD's SOC event handler, or set it as power event handler if SD is not enabled. */ |  * We must call it within SD's SOC event handler, or set it as power event handler if SD is not enabled. */ | ||||||
| extern void tusb_hal_nrf_power_event(uint32_t event); | extern void tusb_hal_nrf_power_event(uint32_t event); | ||||||
| @@ -100,6 +107,8 @@ void usb_init(bool cdc_only) | |||||||
|     tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_READY); |     tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_READY); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   uint32_t devid_low = NRF_FICR->DEVICEID[0] + 1; // default uf2 | ||||||
|  |  | ||||||
|   if ( cdc_only ) |   if ( cdc_only ) | ||||||
|   { |   { | ||||||
|     // Change PID to CDC only |     // Change PID to CDC only | ||||||
| @@ -108,6 +117,17 @@ void usb_init(bool cdc_only) | |||||||
|     // Remove MSC interface = reduce total interface + adjust config desc length |     // Remove MSC interface = reduce total interface + adjust config desc length | ||||||
|     usb_desc_cfg.config.bNumInterfaces--; |     usb_desc_cfg.config.bNumInterfaces--; | ||||||
|     usb_desc_cfg.config.wTotalLength -= sizeof(usb_desc_cfg.msc); |     usb_desc_cfg.config.wTotalLength -= sizeof(usb_desc_cfg.msc); | ||||||
|  |  | ||||||
|  |     devid_low++; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // Create Serial string descriptor | ||||||
|  |   char tmp_serial[17]; | ||||||
|  |   sprintf(tmp_serial, "%08lX%08lX", NRF_FICR->DEVICEID[1], devid_low); | ||||||
|  |  | ||||||
|  |   for(uint8_t i=0; i<16; i++) | ||||||
|  |   { | ||||||
|  |     usb_desc_str_serial[1+i] = tmp_serial[i]; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Init tusb stack |   // Init tusb stack | ||||||
|   | |||||||
| @@ -77,6 +77,9 @@ enum { | |||||||
| // STRING DESCRIPTORS | // STRING DESCRIPTORS | ||||||
| //--------------------------------------------------------------------+ | //--------------------------------------------------------------------+ | ||||||
|  |  | ||||||
|  | // Serial is 64-bit DeviceID -> 16 chars len | ||||||
|  | uint16_t usb_desc_str_serial[1+16] = { TUD_DESC_STR_HEADER(16) }; | ||||||
|  |  | ||||||
| // array of pointer to string descriptors | // array of pointer to string descriptors | ||||||
| uint16_t const * const string_desc_arr [] = | uint16_t const * const string_desc_arr [] = | ||||||
| { | { | ||||||
| @@ -90,7 +93,7 @@ uint16_t const * const string_desc_arr [] = | |||||||
|     TUD_DESC_STRCONV('B','l','u','e','f','r','u','i','t',' ','n','R','F','5','2','8','4','0', ' ', 'D','F','U'), |     TUD_DESC_STRCONV('B','l','u','e','f','r','u','i','t',' ','n','R','F','5','2','8','4','0', ' ', 'D','F','U'), | ||||||
|  |  | ||||||
|     // 3: Serials TODO use chip ID |     // 3: Serials TODO use chip ID | ||||||
|     TUD_DESC_STRCONV('1', '2', '3', '4'), |     usb_desc_str_serial, | ||||||
|  |  | ||||||
|     // 4: CDC Interface |     // 4: CDC Interface | ||||||
|     TUD_DESC_STRCONV('B','l','u','e','f','r','u','i','t',' ','S','e','r','i','a','l'), |     TUD_DESC_STRCONV('B','l','u','e','f','r','u','i','t',' ','S','e','r','i','a','l'), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user