glue layer

This commit is contained in:
SG 2022-11-28 18:26:56 +03:00
parent f808e891af
commit 28324b104f
3 changed files with 40 additions and 7 deletions

View File

@ -55,7 +55,7 @@ target_sources(${COMPONENT_TARGET} INTERFACE
"${COMPONENT_DIR}/tinyusb/src/host/usbh.c"
"${COMPONENT_DIR}/tinyusb/src/host/usbh_control.c"
"${COMPONENT_DIR}/drivers/driver-glue.c"
"${COMPONENT_DIR}/drivers/usb-glue.c"
"${COMPONENT_DIR}/drivers/dual-cdc/dual-cdc-driver.c"
"${COMPONENT_DIR}/drivers/dual-cdc/dual-cdc-descriptors.c"

View File

@ -1,12 +1,39 @@
#include <tusb.h>
#include "dap-link/dap-link-descriptors.h"
#include "dual-cdc/dual-cdc-descriptors.h"
#include "usb-glue.h"
typedef struct {
uint8_t const* desc_device;
uint8_t const* desc_config;
uint16_t const* (*desc_string_cb)(uint8_t, uint16_t);
} USBDevice;
const USBDevice usb_device[] = {
[USBDeviceTypeDapLink] =
{
.desc_device = (uint8_t const*)&dap_link_desc_device,
.desc_config = dap_link_desc_configuration,
.desc_string_cb = dap_link_descriptor_string_cb,
},
[USBDeviceTypeDualCDC] =
{
.desc_device = (uint8_t const*)&blackmagic_desc_device,
.desc_config = blackmagic_desc_fs_configuration,
.desc_string_cb = blackmagic_descriptor_string_cb,
},
};
static USBDeviceType usb_device_type = USBDeviceTypeDapLink;
void usb_glue_init(USBDeviceType device_type) {
usb_device_type = device_type;
}
// Invoked when received GET DEVICE DESCRIPTOR
// Application return pointer to descriptor
uint8_t const* tud_descriptor_device_cb(void) {
// return (uint8_t const*)&blackmagic_desc_device;
return (uint8_t const*)&dap_link_desc_device;
return usb_device[usb_device_type].desc_device;
}
// Invoked when received GET CONFIGURATION DESCRIPTOR
@ -14,13 +41,11 @@ uint8_t const* tud_descriptor_device_cb(void) {
// Descriptor contents must exist long enough for transfer to complete
uint8_t const* tud_descriptor_configuration_cb(uint8_t index) {
(void)index; // for multiple configurations
// return blackmagic_desc_fs_configuration;
return dap_link_desc_configuration;
return usb_device[usb_device_type].desc_config;
}
uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
// return blackmagic_descriptor_string_cb(index, langid);
return dap_link_descriptor_string_cb(index, langid);
return usb_device[usb_device_type].desc_string_cb(index, langid);
}
uint8_t const* tud_descriptor_bos_cb(void) {

View File

@ -0,0 +1,8 @@
#pragma once
typedef enum {
USBDeviceTypeDapLink,
USBDeviceTypeDualCDC,
} USBDeviceType;
void usb_glue_init(USBDeviceType device_type);