mirror of
https://github.com/polhenarejos/pico-keys-sdk
synced 2026-06-11 04:48:15 +02:00
Add support for PHY read.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
@@ -112,16 +112,34 @@ void led_init() {
|
|||||||
led_driver = &led_driver_dummy;
|
led_driver = &led_driver_dummy;
|
||||||
#if defined(PICO_PLATFORM) || defined(ESP_PLATFORM)
|
#if defined(PICO_PLATFORM) || defined(ESP_PLATFORM)
|
||||||
// Guess default driver
|
// Guess default driver
|
||||||
#ifdef PICO_DEFAULT_LED_PIN
|
#if defined(PIMORONI_TINY2040) || defined(PIMORONI_TINY2350)
|
||||||
led_driver = &led_driver_pico;
|
led_driver = &led_driver_pimoroni;
|
||||||
|
phy_data.led_driver = phy_data.led_driver_present ? phy_data.led_driver : PHY_LED_DRIVER_PIMORONI;
|
||||||
#elif defined(CYW43_WL_GPIO_LED_PIN)
|
#elif defined(CYW43_WL_GPIO_LED_PIN)
|
||||||
led_driver = &led_driver_cyw43;
|
led_driver = &led_driver_cyw43;
|
||||||
|
phy_data.led_driver = phy_data.led_driver_present ? phy_data.led_driver : PHY_LED_DRIVER_CYW43;
|
||||||
|
phy_data.led_gpio = phy_data.led_gpio_present ? phy_data.led_gpio : CYW43_WL_GPIO_LED_PIN;
|
||||||
#elif defined(PICO_DEFAULT_WS2812_PIN)
|
#elif defined(PICO_DEFAULT_WS2812_PIN)
|
||||||
led_driver = &led_driver_ws2812;
|
led_driver = &led_driver_ws2812;
|
||||||
|
phy_data.led_driver = phy_data.led_driver_present ? phy_data.led_driver : PHY_LED_DRIVER_WS2812;
|
||||||
|
phy_data.led_gpio = phy_data.led_gpio_present ? phy_data.led_gpio : PICO_DEFAULT_WS2812_PIN;
|
||||||
#elif defined(ESP_PLATFORM)
|
#elif defined(ESP_PLATFORM)
|
||||||
|
#if defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
|
#define NEOPIXEL_PIN GPIO_NUM_48
|
||||||
|
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||||
|
#define NEOPIXEL_PIN GPIO_NUM_15
|
||||||
|
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||||
|
#define NEOPIXEL_PIN GPIO_NUM_8
|
||||||
|
#else
|
||||||
|
#define NEOPIXEL_PIN GPIO_NUM_27
|
||||||
|
#endif
|
||||||
led_driver = &led_driver_neopixel;
|
led_driver = &led_driver_neopixel;
|
||||||
#elif defined(PIMORONI_TINY2040) || defined(PIMORONI_TINY2350)
|
phy_data.led_driver = phy_data.led_driver_present ? phy_data.led_driver : PHY_LED_DRIVER_NEOPIXEL;
|
||||||
led_driver = &led_driver_pimoroni;
|
phy_data.led_gpio = phy_data.led_gpio_present ? phy_data.led_gpio : NEOPIXEL_PIN;
|
||||||
|
#elif defined(PICO_DEFAULT_LED_PIN)
|
||||||
|
led_driver = &led_driver_pico;
|
||||||
|
phy_data.led_driver = phy_data.led_driver_present ? phy_data.led_driver : PHY_LED_DRIVER_PICO;
|
||||||
|
phy_data.led_gpio = phy_data.led_gpio_present ? phy_data.led_gpio : PICO_DEFAULT_LED_PIN;
|
||||||
#endif
|
#endif
|
||||||
if (phy_data.led_driver_present) {
|
if (phy_data.led_driver_present) {
|
||||||
switch (phy_data.led_driver) {
|
switch (phy_data.led_driver) {
|
||||||
@@ -149,6 +167,8 @@ void led_init() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
phy_data.led_driver_present = true;
|
||||||
|
phy_data.led_gpio_present = true;
|
||||||
led_driver->init();
|
led_driver->init();
|
||||||
led_set_mode(MODE_NOT_MOUNTED);
|
led_set_mode(MODE_NOT_MOUNTED);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
26
src/rescue.c
26
src/rescue.c
@@ -39,6 +39,8 @@ const uint8_t rescue_aid[] = {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern uint8_t PICO_PRODUCT;
|
extern uint8_t PICO_PRODUCT;
|
||||||
|
extern uint8_t PICO_VERSION_MAJOR;
|
||||||
|
extern uint8_t PICO_VERSION_MINOR;
|
||||||
|
|
||||||
int rescue_select(app_t *a, uint8_t force) {
|
int rescue_select(app_t *a, uint8_t force) {
|
||||||
a->process_apdu = rescue_process_apdu;
|
a->process_apdu = rescue_process_apdu;
|
||||||
@@ -46,8 +48,8 @@ int rescue_select(app_t *a, uint8_t force) {
|
|||||||
res_APDU_size = 0;
|
res_APDU_size = 0;
|
||||||
res_APDU[res_APDU_size++] = PICO_MCU;
|
res_APDU[res_APDU_size++] = PICO_MCU;
|
||||||
res_APDU[res_APDU_size++] = PICO_PRODUCT;
|
res_APDU[res_APDU_size++] = PICO_PRODUCT;
|
||||||
res_APDU[res_APDU_size++] = PICO_KEYS_SDK_VERSION_MAJOR;
|
res_APDU[res_APDU_size++] = PICO_VERSION_MAJOR;
|
||||||
res_APDU[res_APDU_size++] = PICO_KEYS_SDK_VERSION_MINOR;
|
res_APDU[res_APDU_size++] = PICO_VERSION_MINOR;
|
||||||
apdu.ne = res_APDU_size;
|
apdu.ne = res_APDU_size;
|
||||||
if (force) {
|
if (force) {
|
||||||
scan_flash();
|
scan_flash();
|
||||||
@@ -81,6 +83,24 @@ int cmd_write() {
|
|||||||
return SW_OK();
|
return SW_OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cmd_read() {
|
||||||
|
if (apdu.nc != 0) {
|
||||||
|
return SW_WRONG_LENGTH();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (P1(apdu) == 0x1) { // PHY
|
||||||
|
#ifndef ENABLE_EMULATION
|
||||||
|
uint16_t len = 0;
|
||||||
|
int ret = phy_serialize_data(&phy_data, apdu.rdata, &len);
|
||||||
|
if (ret != PICOKEY_OK) {
|
||||||
|
return SW_EXEC_ERROR();
|
||||||
|
}
|
||||||
|
res_APDU_size = len;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return SW_OK();
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(PICO_RP2350) || defined(ESP_PLATFORM)
|
#if defined(PICO_RP2350) || defined(ESP_PLATFORM)
|
||||||
int cmd_secure() {
|
int cmd_secure() {
|
||||||
if (apdu.nc != 0) {
|
if (apdu.nc != 0) {
|
||||||
@@ -100,12 +120,14 @@ int cmd_secure() {
|
|||||||
|
|
||||||
#define INS_WRITE 0x1C
|
#define INS_WRITE 0x1C
|
||||||
#define INS_SECURE 0x1D
|
#define INS_SECURE 0x1D
|
||||||
|
#define INS_READ 0x1E
|
||||||
|
|
||||||
static const cmd_t cmds[] = {
|
static const cmd_t cmds[] = {
|
||||||
{ INS_WRITE, cmd_write },
|
{ INS_WRITE, cmd_write },
|
||||||
#if defined(PICO_RP2350) || defined(ESP_PLATFORM)
|
#if defined(PICO_RP2350) || defined(ESP_PLATFORM)
|
||||||
{ INS_SECURE, cmd_secure },
|
{ INS_SECURE, cmd_secure },
|
||||||
#endif
|
#endif
|
||||||
|
{ INS_READ, cmd_read },
|
||||||
{ 0x00, 0x0 }
|
{ 0x00, 0x0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user