Added support for enable/disable Web CCID on the fly.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
parent
a0e55ebfae
commit
218441a45a
3 changed files with 37 additions and 8 deletions
|
|
@ -364,7 +364,9 @@ pico_unique_board_id_t pico_serial;
|
|||
#include "tinyusb.h"
|
||||
#include "esp_efuse.h"
|
||||
#define pico_get_unique_board_id(a) do { uint32_t value; esp_efuse_read_block(EFUSE_BLK1, &value, 0, 32); memcpy((uint8_t *)(a), &value, sizeof(uint32_t)); esp_efuse_read_block(EFUSE_BLK1, &value, 32, 32); memcpy((uint8_t *)(a)+4, &value, sizeof(uint32_t)); } while(0)
|
||||
extern const tinyusb_config_t tusb_cfg;
|
||||
extern tinyusb_config_t tusb_cfg;
|
||||
extern bool enable_wcid;
|
||||
extern const uint8_t desc_config[];
|
||||
TaskHandle_t hcore0 = NULL, hcore1 = NULL;
|
||||
int app_main() {
|
||||
#else
|
||||
|
|
@ -417,6 +419,9 @@ int main(void) {
|
|||
usb_init();
|
||||
#ifdef ESP_PLATFORM
|
||||
tusb_cfg.string_descriptor[3] = pico_serial_str;
|
||||
if (enable_wcid) {
|
||||
tusb_cfg.configuration_descriptor = desc_config;
|
||||
}
|
||||
tinyusb_driver_install(&tusb_cfg);
|
||||
#else
|
||||
tusb_init();
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ queue_t card_to_usb_q;
|
|||
|
||||
#ifndef ENABLE_EMULATION
|
||||
extern tusb_desc_device_t desc_device;
|
||||
bool enable_wcid = false;
|
||||
extern bool enable_wcid;
|
||||
#endif
|
||||
void usb_init() {
|
||||
#ifndef ENABLE_EMULATION
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@
|
|||
|
||||
#define MAX_USB_POWER 1
|
||||
|
||||
bool enable_wcid = false;
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Device Descriptors
|
||||
//--------------------------------------------------------------------+
|
||||
|
|
@ -80,12 +82,18 @@ uint8_t const *tud_descriptor_device_cb(void) {
|
|||
#define TUSB_SMARTCARD_WCID_DESC_LEN (TUD_INTERFACE_DESC_LEN + TUSB_SMARTCARD_LEN + 2 * TUD_ENDPOINT_DESC_LEN)
|
||||
|
||||
enum {
|
||||
TUSB_DESC_TOTAL_LEN = TUD_CONFIG_DESC_LEN
|
||||
TUSB_DESC_TOTAL_LEN_NOWCID = TUD_CONFIG_DESC_LEN
|
||||
#ifdef USB_ITF_HID
|
||||
+ TUD_HID_INOUT_DESC_LEN + TUD_HID_DESC_LEN
|
||||
#endif
|
||||
#ifdef USB_ITF_CCID
|
||||
+ TUSB_SMARTCARD_CCID_DESC_LEN
|
||||
#endif
|
||||
};
|
||||
|
||||
enum {
|
||||
TUSB_DESC_TOTAL_LEN = TUSB_DESC_TOTAL_LEN_NOWCID
|
||||
#ifdef USB_ITF_CCID
|
||||
#ifdef USB_ITF_WCID
|
||||
+ TUSB_SMARTCARD_WCID_DESC_LEN
|
||||
#endif
|
||||
|
|
@ -118,6 +126,17 @@ uint8_t const desc_hid_report_kb[] = {
|
|||
7, TUSB_DESC_ENDPOINT, _epint, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), 0
|
||||
#endif
|
||||
|
||||
const uint8_t desc_config_nowcid[] = {
|
||||
TUD_CONFIG_DESCRIPTOR(1, ITF_TOTAL-1, 4, TUSB_DESC_TOTAL_LEN_NOWCID, USB_CONFIG_ATT_ONE | TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100),
|
||||
#ifdef USB_ITF_HID
|
||||
TUD_HID_INOUT_DESCRIPTOR(ITF_HID, ITF_HID + 5, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, TUSB_DIR_IN_MASK | EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10),
|
||||
TUD_HID_DESCRIPTOR(ITF_KEYBOARD, ITF_KEYBOARD + 5, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report_kb), TUSB_DIR_IN_MASK | (EPNUM_HID + 1), 16, 5),
|
||||
#endif
|
||||
#ifdef USB_ITF_CCID
|
||||
TUD_SMARTCARD_DESCRIPTOR(ITF_CCID, ITF_CCID+5, 1, TUSB_DIR_IN_MASK | 1, TUSB_DIR_IN_MASK | 2, 64),
|
||||
#endif
|
||||
};
|
||||
|
||||
const uint8_t desc_config[] = {
|
||||
TUD_CONFIG_DESCRIPTOR(1, ITF_TOTAL, 4, TUSB_DESC_TOTAL_LEN, USB_CONFIG_ATT_ONE | TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100),
|
||||
#ifdef USB_ITF_HID
|
||||
|
|
@ -149,8 +168,10 @@ uint8_t const *tud_hid_descriptor_report_cb(uint8_t itf) {
|
|||
#ifndef ESP_PLATFORM
|
||||
uint8_t const *tud_descriptor_configuration_cb(uint8_t index) {
|
||||
(void) index; // for multiple configurations
|
||||
printf("tud_descriptor_configuration_cb %d\n",index);
|
||||
return desc_config;
|
||||
if (enable_wcid) {
|
||||
return desc_config;
|
||||
}
|
||||
return desc_config_nowcid;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -254,7 +275,10 @@ uint8_t const desc_bos[] = {
|
|||
};
|
||||
|
||||
uint8_t const *tud_descriptor_bos_cb(void) {
|
||||
return desc_bos;
|
||||
if (enable_wcid) {
|
||||
return desc_bos;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
//--------------------------------------------------------------------+
|
||||
|
|
@ -281,12 +305,12 @@ char const *string_desc_arr [] = {
|
|||
};
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
const tinyusb_config_t tusb_cfg = {
|
||||
tinyusb_config_t tusb_cfg = {
|
||||
.device_descriptor = &desc_device,
|
||||
.string_descriptor = string_desc_arr,
|
||||
.string_descriptor_count = sizeof(string_desc_arr) / sizeof(string_desc_arr[0]),
|
||||
.external_phy = false,
|
||||
.configuration_descriptor = desc_config,
|
||||
.configuration_descriptor = desc_config_nowcid,
|
||||
};
|
||||
#else
|
||||
static uint16_t _desc_str[32];
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue