diff --git a/src/fs/file.h b/src/fs/file.h index fed98bc..e6244b3 100644 --- a/src/fs/file.h +++ b/src/fs/file.h @@ -76,6 +76,11 @@ #define PHY_OPTS 0x6 #define PHY_OPT_WCID 0x1 +#define PHY_OPT_VPID 0x2 +#define PHY_OPT_GPIO 0x4 +#define PHY_OPT_LED 0x8 + +#define PHY_OPT_MASK 0x1 #define PHY_MAX_SIZE 8 diff --git a/src/main.c b/src/main.c index 30eb76c..90dc0e5 100644 --- a/src/main.c +++ b/src/main.c @@ -432,7 +432,9 @@ int main(void) { #ifdef ESP_PLATFORM uint8_t gpio = GPIO_NUM_48; if (file_has_data(ef_phy)) { - gpio = file_get_data(ef_phy)[PHY_LED_GPIO]; + if (file_read_uint8_offset(ef_phy, PHY_OPTS + 1) & PHY_OPT_GPIO) { + gpio = file_get_data(ef_phy)[PHY_LED_GPIO]; + } } neopixel = neopixel_Init(1, gpio); #endif diff --git a/src/usb/usb.c b/src/usb/usb.c index bd7e236..9a2cc63 100644 --- a/src/usb/usb.c +++ b/src/usb/usb.c @@ -169,16 +169,17 @@ void usb_init() { uint16_t usb_vid = USB_VID, usb_pid = USB_PID; if (file_has_data(ef_phy)) { uint8_t *data = file_get_data(ef_phy); - 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]; - } + uint16_t opts = 0; if (file_get_size(ef_phy) >= 8) { - uint16_t opts = (data[PHY_OPTS] << 8) | data[PHY_OPTS+1]; + opts = (data[PHY_OPTS] << 8) | data[PHY_OPTS+1]; if (opts & PHY_OPT_WCID) { enable_wcid = true; } } + if (file_get_size(ef_phy) >= 4 && opts & PHY_OPT_VPID) { + 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;