usb serial setup

This commit is contained in:
SG 2022-12-06 17:33:04 +03:00
parent 8732663f04
commit 9e509c578a
7 changed files with 59 additions and 11 deletions

View File

@ -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 ---------------------------------------------------------*/
//-----------------------------------------------------------------------------

View File

@ -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

View File

@ -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);

View File

@ -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];

View File

@ -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);

View File

@ -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

View File

@ -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);