From cf1e0764539f6d3c139233fb63c845548de2fb65 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Wed, 17 Apr 2024 11:40:01 +0200 Subject: [PATCH] Introducing EF_PHY to store PHY (VIDPID and LED no.). Signed-off-by: Pol Henarejos --- src/fs/file.c | 20 ++++++++++---------- src/fs/file.h | 15 ++++++++++++--- src/usb/usb.c | 17 ++++++++++++++++- src/usb/usb_descriptors.c | 4 ++-- 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/fs/file.c b/src/fs/file.c index 3aa0742..6e21340 100644 --- a/src/fs/file.c +++ b/src/fs/file.c @@ -41,6 +41,11 @@ extern uint8_t flash_read_uint8(uintptr_t addr); extern uint8_t *flash_read(uintptr_t addr); extern void low_flash_available(); +#ifndef ENABLE_EMULATION +file_t sef_phy = {.fid = EF_PHY, .parent = 5, .name = NULL, .type = FILE_TYPE_INTERNAL_EF | FILE_DATA_FLASH | FILE_PERSISTENT, .data = NULL, .ef_structure = FILE_EF_TRANSPARENT, .acl = {0xff}}; +file_t *ef_phy = &sef_phy; +#endif + //puts FCI in the RAPDU void process_fci(const file_t *pe, int fmd) { res_APDU_size = 0; @@ -144,7 +149,11 @@ file_t *search_by_name(uint8_t *name, uint16_t namelen) { } file_t *search_by_fid(const uint16_t fid, const file_t *parent, const uint8_t sp) { - +#ifndef ENABLE_EMULATION + if (fid == EF_PHY) { + return ef_phy; + } +#endif for (file_t *p = file_entries; p != file_last; p++) { if (p->fid != 0x0000 && p->fid == fid) { if (!parent || (parent && is_parent(p, parent))) { @@ -263,9 +272,6 @@ void scan_region(bool persistent) { } } void wait_flash_finish(); -#ifndef ENABLE_EMULATION -extern uint16_t usb_vid, usb_pid; -#endif void scan_flash() { initialize_flash(false); //soft initialization if (*(uintptr_t *) flash_read(end_rom_pool) == 0xffffffff && @@ -281,12 +287,6 @@ void scan_flash() { printf("SCAN\n"); scan_region(true); scan_region(false); -#ifndef ENABLE_EMULATION - file_t *ef_vp = search_dynamic_file(EF_VP); - if (file_has_data(ef_vp)) { - - } -#endif } uint8_t *file_read(const uint8_t *addr) { diff --git a/src/fs/file.h b/src/fs/file.h index c3b7478..a74d002 100644 --- a/src/fs/file.h +++ b/src/fs/file.h @@ -67,9 +67,14 @@ #define EF_SKDFS 0x6045 #define EF_META 0xE010 -#ifndef ENABLE_EMULATION -#define EF_VP 0xE020 -#endif +#define EF_PHY 0xE020 + +#define PHY_VID 0x0 +#define PHY_PID 0x2 +#define PHY_LED_GPIO 0x4 +#define PHY_LED_MODE 0x5 + +#define PHY_MAX_SIZE 6 #define MAX_DEPTH 4 @@ -129,4 +134,8 @@ extern int meta_delete(uint16_t fid); extern int meta_add(uint16_t fid, const uint8_t *data, uint16_t len); extern int delete_file(file_t *ef); +#ifndef ENABLE_EMULATION +extern file_t *ef_phy; +#endif + #endif diff --git a/src/usb/usb.c b/src/usb/usb.c index bd0d794..b0d2972 100644 --- a/src/usb/usb.c +++ b/src/usb/usb.c @@ -21,13 +21,16 @@ #ifndef ENABLE_EMULATION #include "pico/stdlib.h" #include "pico/multicore.h" -#include "tusb.h" #include "bsp/board.h" #endif #include "pico_keys.h" #include "usb.h" #include "apdu.h" +#ifndef ENABLE_EMULATION +#include "tusb.h" +#endif + // For memcpy #include #include @@ -158,8 +161,20 @@ queue_t usb_to_card_q; queue_t card_to_usb_q; #endif +#ifndef ENABLE_EMULATION +extern tusb_desc_device_t desc_device; +#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) { + 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]; + } + desc_device.idVendor = usb_vid; + desc_device.idProduct = usb_pid; + queue_init(&card_to_usb_q, sizeof(uint32_t), 64); queue_init(&usb_to_card_q, sizeof(uint32_t), 64); #endif diff --git a/src/usb/usb_descriptors.c b/src/usb/usb_descriptors.c index 92a7cb2..7591607 100644 --- a/src/usb/usb_descriptors.c +++ b/src/usb/usb_descriptors.c @@ -20,6 +20,7 @@ #include "pico/unique_id.h" #include "pico_keys_version.h" #include "usb.h" +#include "pico_keys.h" #ifndef USB_VID #define USB_VID 0xFEFF @@ -34,11 +35,10 @@ #define MAX_USB_POWER 1 - //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { +tusb_desc_device_t desc_device = { .bLength = sizeof(tusb_desc_device_t), .bDescriptorType = TUSB_DESC_DEVICE, .bcdUSB = (USB_BCD),