usb serial setup
This commit is contained in:
parent
8732663f04
commit
9e509c578a
|
@ -23,8 +23,8 @@
|
|||
|
||||
// DAP_CONFIG_PRODUCT_STR must contain "CMSIS-DAP" to be compatible with the standard
|
||||
#define DAP_CONFIG_VENDOR_STR "Flipper Devices"
|
||||
#define DAP_CONFIG_PRODUCT_STR "Generic CMSIS-DAP Adapter"
|
||||
#define DAP_CONFIG_SER_NUM_STR "1234567890"
|
||||
#define DAP_CONFIG_PRODUCT_STR "ESP32S2 CMSIS-DAP Adapter"
|
||||
#define DAP_CONFIG_SER_NUM_STR dap_serial_number
|
||||
#define DAP_CONFIG_CMSIS_DAP_VER_STR "2.0.0"
|
||||
|
||||
// Attribute to use for performance-critical functions
|
||||
|
@ -43,7 +43,7 @@
|
|||
/*- Prototypes --------------------------------------------------------------*/
|
||||
void dap_callback_connect(void);
|
||||
void dap_callback_disconnect(void);
|
||||
|
||||
extern char dap_serial_number[32];
|
||||
/*- Implementations ---------------------------------------------------------*/
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
@ -323,15 +323,21 @@ uint8_t const dap_link_desc_ms_os_20[] = {
|
|||
|
||||
TU_VERIFY_STATIC(sizeof(dap_link_desc_ms_os_20) == MS_OS_20_DESC_LEN, "Incorrect size");
|
||||
|
||||
static char const* string_desc_arr[] = {
|
||||
(const char[]){0x09, 0x04}, // 0: is supported language is English (0x0409)
|
||||
static char* string_desc_arr[] = {
|
||||
(char[]){0x09, 0x04}, // 0: is supported language is English (0x0409)
|
||||
"CMSIS-DAP", // 1: Manufacturer
|
||||
"CMSIS-DAP Device", // 2: Product
|
||||
"dap", // 3: Serials, should use chip ID
|
||||
"CMSIS-DAP ESP32S2 Device", // 2: Product
|
||||
"DAP", // 3: Serials, should use chip ID
|
||||
"CMSIS-DAP CDC", // 4: CDC Interface
|
||||
"CMSIS-DAP DAP" // 5: Vendor Interface
|
||||
};
|
||||
|
||||
void dap_link_set_serial_number(const char* serial_number) {
|
||||
string_desc_arr[3] = malloc(strlen("DAP_") + strlen(serial_number) + 1);
|
||||
strcpy(string_desc_arr[3], "DAP_");
|
||||
strcat(string_desc_arr[3], serial_number);
|
||||
}
|
||||
|
||||
static uint16_t _desc_str[32];
|
||||
|
||||
// Invoked when received GET STRING DESCRIPTOR request
|
||||
|
|
|
@ -6,4 +6,5 @@ extern tusb_desc_device_t const dap_link_desc_device;
|
|||
extern uint8_t const dap_link_desc_configuration[];
|
||||
extern uint8_t const dap_link_desc_bos[];
|
||||
extern uint8_t const dap_link_desc_ms_os_20[];
|
||||
uint16_t const* dap_link_descriptor_string_cb(uint8_t index, uint16_t langid);
|
||||
uint16_t const* dap_link_descriptor_string_cb(uint8_t index, uint16_t langid);
|
||||
void dap_link_set_serial_number(const char* serial_number);
|
|
@ -148,8 +148,8 @@ uint8_t const blackmagic_desc_hs_configuration[] = {
|
|||
//--------------------------------------------------------------------+
|
||||
|
||||
// array of pointer to string descriptors
|
||||
char const* blackmagic_string_desc[] = {
|
||||
(const char[]){0x09, 0x04}, // 0: is supported language is English (0x0409)
|
||||
static char* blackmagic_string_desc[] = {
|
||||
(char[]){0x09, 0x04}, // 0: is supported language is English (0x0409)
|
||||
"Flipper Devices Inc.", // 1: Manufacturer
|
||||
"Blackmagic ESP32", // 2: Product
|
||||
"blackmagic", // 3: Serials, should use chip ID
|
||||
|
@ -158,6 +158,12 @@ char const* blackmagic_string_desc[] = {
|
|||
"", // 6: HIDs
|
||||
};
|
||||
|
||||
void blackmagic_set_serial_number(const char* serial_number) {
|
||||
blackmagic_string_desc[3] = malloc(strlen("blackmagic_") + strlen(serial_number) + 1);
|
||||
strcpy(blackmagic_string_desc[3], "blackmagic_");
|
||||
strcat(blackmagic_string_desc[3], serial_number);
|
||||
}
|
||||
|
||||
#define MAX_DESC_BUF_SIZE 32
|
||||
static uint16_t _desc_str[MAX_DESC_BUF_SIZE];
|
||||
|
||||
|
|
|
@ -2,4 +2,5 @@
|
|||
|
||||
extern tusb_desc_device_t const blackmagic_desc_device;
|
||||
extern uint8_t const blackmagic_desc_fs_configuration[];
|
||||
uint16_t const* blackmagic_descriptor_string_cb(uint8_t index, uint16_t langid);
|
||||
uint16_t const* blackmagic_descriptor_string_cb(uint8_t index, uint16_t langid);
|
||||
void blackmagic_set_serial_number(const char* serial_number);
|
|
@ -296,10 +296,42 @@ static void usb_hal_tusb_device_task(void* arg) {
|
|||
}
|
||||
|
||||
/***** Glue *****/
|
||||
char* serial_desc = NULL;
|
||||
char dap_serial_number[32];
|
||||
|
||||
static void usb_glue_set_serial_number(uint8_t* serial_number, uint8_t length) {
|
||||
if(serial_desc != NULL) {
|
||||
free(serial_desc);
|
||||
}
|
||||
|
||||
serial_desc = malloc(length * 2 + 1);
|
||||
for(uint8_t i = 0; i < length; i++) {
|
||||
uint8_t nibble = serial_number[i] >> 4;
|
||||
serial_desc[i * 2 + 0] = nibble < 10 ? '0' + nibble : 'A' + nibble - 10;
|
||||
nibble = serial_number[i] & 0x0F;
|
||||
serial_desc[i * 2 + 1] = nibble < 10 ? '0' + nibble : 'A' + nibble - 10;
|
||||
}
|
||||
serial_desc[length * 2] = 0;
|
||||
}
|
||||
|
||||
const char* usb_glue_get_serial_number() {
|
||||
return serial_desc;
|
||||
}
|
||||
|
||||
esp_err_t usb_glue_init(USBDeviceType device_type) {
|
||||
usb_device_type = device_type;
|
||||
|
||||
uint8_t mac[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
if(esp_efuse_mac_get_default(mac) == ESP_OK) {
|
||||
usb_glue_set_serial_number(mac, 6);
|
||||
dap_link_set_serial_number(usb_glue_get_serial_number());
|
||||
blackmagic_set_serial_number(usb_glue_get_serial_number());
|
||||
strncpy(dap_serial_number, usb_glue_get_serial_number(), sizeof(dap_serial_number) - 1);
|
||||
dap_serial_number[sizeof(dap_serial_number) - 1] = '\0';
|
||||
ESP_LOGI(TAG, "Serial number: %s", usb_glue_get_serial_number());
|
||||
ESP_LOGI(TAG, "Dap serial number: %s", dap_serial_number);
|
||||
}
|
||||
|
||||
usb_hal_bus_reset();
|
||||
|
||||
// Enable APB CLK to USB peripheral
|
||||
|
|
|
@ -19,6 +19,8 @@ void usb_glue_set_connected_callback(void (*callback)(void* context), void* cont
|
|||
|
||||
void usb_glue_set_disconnected_callback(void (*callback)(void* context), void* context);
|
||||
|
||||
const char* usb_glue_get_serial_number();
|
||||
|
||||
/***** USB-UART *****/
|
||||
|
||||
void usb_glue_cdc_send(const uint8_t* buf, size_t len, bool flush);
|
||||
|
|
Loading…
Reference in New Issue