5 Commits

Author SHA1 Message Date
Pol Henarejos
113e720fca Merge remote-tracking branch 'origin/main' 2025-06-22 19:58:17 +02:00
Pol Henarejos
c45c97ee1f Fix Pico Keys SDK build.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
2025-06-22 19:57:15 +02:00
Pol Henarejos
d66d1c85b9 Add missing header.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
2025-06-22 19:52:36 +02:00
Pol Henarejos
f01aca5518 Flash size is obtained dynamically rather than in build time. It will allow to reduce dramatically the number of builds.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
2025-05-30 12:06:26 +02:00
Pol Henarejos
da3a7f25d0 Fix bool build.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
2025-05-25 19:20:04 +02:00
5 changed files with 38 additions and 31 deletions

View File

@@ -237,7 +237,7 @@ if (ENABLE_EDDSA)
) )
endif() endif()
set(SOURCES ${SOURCES} set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/src/main.c ${CMAKE_CURRENT_LIST_DIR}/src/main.c
${CMAKE_CURRENT_LIST_DIR}/src/usb/usb.c ${CMAKE_CURRENT_LIST_DIR}/src/usb/usb.c
${CMAKE_CURRENT_LIST_DIR}/src/fs/file.c ${CMAKE_CURRENT_LIST_DIR}/src/fs/file.c
@@ -260,7 +260,7 @@ set(SOURCES ${SOURCES}
) )
if(ESP_PLATFORM) if(ESP_PLATFORM)
set(SOURCES ${SOURCES} ${CMAKE_CURRENT_LIST_DIR}/src/led/led_neopixel.c) set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/src/led/led_neopixel.c)
endif() endif()
## mbedTLS reports an stringop overflow for cmac.c ## mbedTLS reports an stringop overflow for cmac.c
@@ -331,7 +331,7 @@ function(add_impl_library target)
endfunction() endfunction()
if(USB_ITF_HID) if(USB_ITF_HID)
set(SOURCES ${SOURCES} set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/src/usb/hid/hid.c ${CMAKE_CURRENT_LIST_DIR}/src/usb/hid/hid.c
) )
set(INCLUDES ${INCLUDES} set(INCLUDES ${INCLUDES}
@@ -340,7 +340,7 @@ if(USB_ITF_HID)
endif() endif()
if(USB_ITF_CCID) if(USB_ITF_CCID)
set(SOURCES ${SOURCES} set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid/ccid.c ${CMAKE_CURRENT_LIST_DIR}/src/usb/ccid/ccid.c
) )
set(INCLUDES ${INCLUDES} set(INCLUDES ${INCLUDES}
@@ -354,12 +354,12 @@ if(ENABLE_EMULATION)
if(APPLE) if(APPLE)
add_definitions("-Wno-deprecated-declarations") add_definitions("-Wno-deprecated-declarations")
elseif(MSVC) elseif(MSVC)
set(SOURCES ${SOURCES} set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/src/fs/mman.c ${CMAKE_CURRENT_LIST_DIR}/src/fs/mman.c
) )
endif() endif()
add_definitions(-DENABLE_EMULATION) add_definitions(-DENABLE_EMULATION)
set(SOURCES ${SOURCES} set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/src/usb/emulation/emulation.c ${CMAKE_CURRENT_LIST_DIR}/src/usb/emulation/emulation.c
) )
set(MBEDTLS_SOURCES ${MBEDTLS_SOURCES} set(MBEDTLS_SOURCES ${MBEDTLS_SOURCES}
@@ -369,7 +369,7 @@ if(ENABLE_EMULATION)
${CMAKE_CURRENT_LIST_DIR}/src/usb/emulation ${CMAKE_CURRENT_LIST_DIR}/src/usb/emulation
) )
else() else()
set(SOURCES ${SOURCES} set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/src/usb/usb_descriptors.c ${CMAKE_CURRENT_LIST_DIR}/src/usb/usb_descriptors.c
) )
endif() endif()
@@ -415,13 +415,13 @@ if(PICO_RP2350)
set(INCLUDES ${INCLUDES} set(INCLUDES ${INCLUDES}
${CMAKE_CURRENT_LIST_DIR}/config/rp2350/alt ${CMAKE_CURRENT_LIST_DIR}/config/rp2350/alt
) )
set(SOURCES ${SOURCES} set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/config/rp2350/alt/sha256_alt.c ${CMAKE_CURRENT_LIST_DIR}/config/rp2350/alt/sha256_alt.c
) )
set(LIBRARIES ${LIBRARIES} pico_sha256) set(LIBRARIES ${LIBRARIES} pico_sha256)
endif() endif()
set(INTERNAL_SOURCES ${SOURCES}) set(INTERNAL_SOURCES ${PICO_KEYS_SOURCES})
set(SOURCES ${SOURCES} ${EXTERNAL_SOURCES}) set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES} ${EXTERNAL_SOURCES})
if(NOT TARGET pico_keys_sdk) if(NOT TARGET pico_keys_sdk)
if(ENABLE_EMULATION OR ESP_PLATFORM) if(ENABLE_EMULATION OR ESP_PLATFORM)
add_impl_library(pico_keys_sdk) add_impl_library(pico_keys_sdk)
@@ -430,7 +430,7 @@ if(NOT TARGET pico_keys_sdk)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${LIBRARIES}) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${LIBRARIES})
endif() endif()
target_sources(pico_keys_sdk INTERFACE ${SOURCES}) target_sources(pico_keys_sdk INTERFACE ${PICO_KEYS_SOURCES})
target_include_directories(pico_keys_sdk INTERFACE ${INCLUDES}) target_include_directories(pico_keys_sdk INTERFACE ${INCLUDES})
target_link_libraries(pico_keys_sdk INTERFACE ${LIBRARIES}) target_link_libraries(pico_keys_sdk INTERFACE ${LIBRARIES})
endif() endif()

View File

@@ -1,5 +1,5 @@
idf_component_register( idf_component_register(
SRCS ${INTERNAL_SOURCES} SRCS ${PICO_KEYS_SOURCES}
INCLUDE_DIRS . fs rng usb led ../mbedtls/include ../tinycbor/src INCLUDE_DIRS . fs rng usb led ../tinycbor/src
REQUIRES bootloader_support esp_partition esp_tinyusb efuse REQUIRES bootloader_support esp_partition esp_tinyusb efuse mbedtls
) )

View File

@@ -25,6 +25,7 @@
#include "compat.h" #include "compat.h"
#include <stdio.h> #include <stdio.h>
#include <inttypes.h> #include <inttypes.h>
#include <stdbool.h>
typedef struct app { typedef struct app {
const uint8_t *aid; const uint8_t *aid;

View File

@@ -23,11 +23,12 @@
#define XIP_BASE 0 #define XIP_BASE 0
#define FLASH_SECTOR_SIZE 4096 #define FLASH_SECTOR_SIZE 4096
#ifdef ESP_PLATFORM #ifdef ESP_PLATFORM
uint32_t PICO_FLASH_SIZE_BYTES = (1 * 1024 * 1024); uint32_t FLASH_SIZE_BYTES = (1 * 1024 * 1024);
#else #else
#define PICO_FLASH_SIZE_BYTES (8 * 1024 * 1024) #define FLASH_SIZE_BYTES (8 * 1024 * 1024)
#endif #endif
#else #else
uint32_t FLASH_SIZE_BYTES = (2 * 1024 * 1024);
#include "pico/stdlib.h" #include "pico/stdlib.h"
#include "hardware/flash.h" #include "hardware/flash.h"
#endif #endif
@@ -210,5 +211,5 @@ uint32_t flash_num_files() {
} }
uint32_t flash_size() { uint32_t flash_size() {
return PICO_FLASH_SIZE_BYTES; return FLASH_SIZE_BYTES;
} }

View File

@@ -58,16 +58,16 @@
#endif #endif
#endif #endif
#define FLASH_SECTOR_SIZE 4096 #define FLASH_SECTOR_SIZE 4096
#ifdef ESP_PLATFORM
extern uint32_t PICO_FLASH_SIZE_BYTES;
#else
#define PICO_FLASH_SIZE_BYTES (8 * 1024 * 1024)
#endif
#define XIP_BASE 0 #define XIP_BASE 0
int fd_map = 0; int fd_map = 0;
uint8_t *map = NULL; uint8_t *map = NULL;
#include <fcntl.h> #include <fcntl.h>
#endif #endif
#ifndef ENABLE_EMULATION
extern uint32_t FLASH_SIZE_BYTES;
#else
#define FLASH_SIZE_BYTES (8 * 1024 * 1024)
#endif
#define TOTAL_FLASH_PAGES 6 #define TOTAL_FLASH_PAGES 6
@@ -145,7 +145,7 @@ void do_flash() {
} }
} }
#ifdef ENABLE_EMULATION #ifdef ENABLE_EMULATION
msync(map, PICO_FLASH_SIZE_BYTES, MS_SYNC); msync(map, FLASH_SIZE_BYTES, MS_SYNC);
#endif #endif
if (ready_pages != 0) { if (ready_pages != 0) {
printf("ERROR: DO FLASH DOES NOT HAVE ZERO PAGES\n"); printf("ERROR: DO FLASH DOES NOT HAVE ZERO PAGES\n");
@@ -171,18 +171,23 @@ void low_flash_init() {
uint32_t data_end_addr; uint32_t data_end_addr;
#if defined(ENABLE_EMULATION) #if defined(ENABLE_EMULATION)
fd_map = open("memory.flash", O_RDWR | O_CREAT, (mode_t) 0600); fd_map = open("memory.flash", O_RDWR | O_CREAT, (mode_t) 0600);
lseek(fd_map, PICO_FLASH_SIZE_BYTES - 1, SEEK_SET); lseek(fd_map, FLASH_SIZE_BYTES - 1, SEEK_SET);
write(fd_map, "", 1); write(fd_map, "", 1);
map = mmap(0, PICO_FLASH_SIZE_BYTES, PROT_READ | PROT_WRITE, MAP_SHARED, fd_map, 0); map = mmap(0, FLASH_SIZE_BYTES, PROT_READ | PROT_WRITE, MAP_SHARED, fd_map, 0);
data_start_addr = 0; data_start_addr = 0;
data_end_addr = PICO_FLASH_SIZE_BYTES; data_end_addr = FLASH_SIZE_BYTES;
#elif defined(ESP_PLATFORM) #elif defined(ESP_PLATFORM)
part0 = esp_partition_find_first(0x40, 0x1, "part0"); part0 = esp_partition_find_first(0x40, 0x1, "part0");
esp_partition_mmap(part0, 0, part0->size, ESP_PARTITION_MMAP_DATA, (const void **)&map, (esp_partition_mmap_handle_t *)&fd_map); esp_partition_mmap(part0, 0, part0->size, ESP_PARTITION_MMAP_DATA, (const void **)&map, (esp_partition_mmap_handle_t *)&fd_map);
data_start_addr = 0; data_start_addr = 0;
data_end_addr = part0->size; data_end_addr = part0->size;
PICO_FLASH_SIZE_BYTES = part0->size; FLASH_SIZE_BYTES = part0->size;
#elif defined(PICO_PLATFORM) #elif defined(PICO_PLATFORM)
uint8_t txbuf[6] = {0x9f};
uint8_t rxbuf[6] = {0};
flash_do_cmd(txbuf, rxbuf, 4);
FLASH_SIZE_BYTES = (1 << rxbuf[3]);
#ifdef PICO_RP2350 #ifdef PICO_RP2350
__attribute__((aligned(4))) uint8_t workarea[4 * 1024]; __attribute__((aligned(4))) uint8_t workarea[4 * 1024];
int rc = rom_load_partition_table(workarea, sizeof(workarea), false); int rc = rom_load_partition_table(workarea, sizeof(workarea), false);
@@ -194,8 +199,8 @@ void low_flash_init() {
rc = rom_get_partition_table_info((uint32_t*)workarea, 0x8, PT_INFO_PARTITION_LOCATION_AND_FLAGS | PT_INFO_SINGLE_PARTITION | (boot_partition << 24)); rc = rom_get_partition_table_info((uint32_t*)workarea, 0x8, PT_INFO_PARTITION_LOCATION_AND_FLAGS | PT_INFO_SINGLE_PARTITION | (boot_partition << 24));
if (rc != 3) { if (rc != 3) {
data_start_addr = (PICO_FLASH_SIZE_BYTES >> 1); data_start_addr = (FLASH_SIZE_BYTES >> 1);
data_end_addr = PICO_FLASH_SIZE_BYTES; data_end_addr = FLASH_SIZE_BYTES;
} else { } else {
uint16_t first_sector_number = (((uint32_t*)workarea)[1] & PICOBIN_PARTITION_LOCATION_FIRST_SECTOR_BITS) >> PICOBIN_PARTITION_LOCATION_FIRST_SECTOR_LSB; uint16_t first_sector_number = (((uint32_t*)workarea)[1] & PICOBIN_PARTITION_LOCATION_FIRST_SECTOR_BITS) >> PICOBIN_PARTITION_LOCATION_FIRST_SECTOR_LSB;
uint16_t last_sector_number = (((uint32_t*)workarea)[1] & PICOBIN_PARTITION_LOCATION_LAST_SECTOR_BITS) >> PICOBIN_PARTITION_LOCATION_LAST_SECTOR_LSB; uint16_t last_sector_number = (((uint32_t*)workarea)[1] & PICOBIN_PARTITION_LOCATION_LAST_SECTOR_BITS) >> PICOBIN_PARTITION_LOCATION_LAST_SECTOR_LSB;
@@ -204,8 +209,8 @@ void low_flash_init() {
} }
data_end_addr -= 2 * FLASH_SECTOR_SIZE; data_end_addr -= 2 * FLASH_SECTOR_SIZE;
#else #else
data_start_addr = (PICO_FLASH_SIZE_BYTES >> 1); data_start_addr = (FLASH_SIZE_BYTES >> 1);
data_end_addr = PICO_FLASH_SIZE_BYTES; data_end_addr = FLASH_SIZE_BYTES;
#endif #endif
data_start_addr += XIP_BASE; data_start_addr += XIP_BASE;