From d4582508879bb7d6022bcf0dd03f823e29c5db30 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Wed, 19 Jun 2024 22:00:55 +0200 Subject: [PATCH] Add PHY options and PHY_WCID. Signed-off-by: Pol Henarejos --- src/fs/file.h | 5 ++++- src/usb/usb.c | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/fs/file.h b/src/fs/file.h index 2fe438d..fd04a40 100644 --- a/src/fs/file.h +++ b/src/fs/file.h @@ -73,8 +73,11 @@ #define PHY_PID 0x2 #define PHY_LED_GPIO 0x4 #define PHY_LED_MODE 0x5 +#define PHY_OPTS 0x6 -#define PHY_MAX_SIZE 6 +#define PHY_OPT_WCID 0x1 + +#define PHY_MAX_SIZE 8 #define MAX_DEPTH 4 diff --git a/src/usb/usb.c b/src/usb/usb.c index b0d2972..702fe12 100644 --- a/src/usb/usb.c +++ b/src/usb/usb.c @@ -163,14 +163,23 @@ queue_t card_to_usb_q; #ifndef ENABLE_EMULATION extern tusb_desc_device_t desc_device; +bool enable_wcid = false; #endif void usb_init() { #ifndef ENABLE_EMULATION uint16_t usb_vid = USB_VID, usb_pid = USB_PID; - if (file_has_data(ef_phy) && file_get_size(ef_phy) >= 4) { + if (file_has_data(ef_phy)) { uint8_t *data = file_get_data(ef_phy); - usb_vid = (data[PHY_VID] << 8) | data[PHY_VID+1]; - usb_pid = (data[PHY_PID] << 8) | data[PHY_PID+1]; + if (file_get_size(ef_phy) >= 4) { + usb_vid = (data[PHY_VID] << 8) | data[PHY_VID+1]; + usb_pid = (data[PHY_PID] << 8) | data[PHY_PID+1]; + } + if (file_get_size(ef_phy) >= 8) { + uint16_t opts = (data[PHY_OPTS] << 8) | data[PHY_OPTS+1]; + if (opts & PHY_OPT_WCID) { + enable_wcid = true; + } + } } desc_device.idVendor = usb_vid; desc_device.idProduct = usb_pid;