config: add generic Jade/v1/v2 config items
What changed, and why it matters
This commit is a straightforward internal cleanup of how the firmware identifies different Jade hardware versions. It introduces broader 'any Jade v1/v2' configuration flags and replaces many scattered checks with simpler ones. There is no user-facing change, no bug fix, and no security alteration visible in the code.
No security action needed; treat as normal refactoring. Reviewers may optionally verify that the new Kconfig selects produce identical generated sdkconfig values for each supported board.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change adds three new Kconfig symbols—BOARD_TYPE_JADE_ANY, BOARD_TYPE_JADE_V1_ANY, and BOARD_TYPE_JADE_V2_ANY—and updates existing board-specific selects so these aggregate symbols are set automatically. It then refactors C preprocessor conditions, CMake logo-file lists, and Kconfig defaults to use the aggregate symbols instead of enumerating individual board variants. A compile-time consistency check is added in main.c to ensure the aggregate symbols match the concrete board selection. No cryptographic, boot, authentication, or access-control logic is modified.
Changed components
Kconfig board-type definitionsCMake build logo inclusionDisplay and I2C pin defaultsSplash screen and legal-certifications UIAttestation reboot logic gatingPower board include selectionInspect captured patch +103 / −71
diff --git a/bootloader_components/main/Kconfig b/bootloader_components/main/Kconfig
index 9e19626..d1a80a2 100644
--- a/bootloader_components/main/Kconfig
+++ b/bootloader_components/main/Kconfig
@@ -2,7 +2,7 @@ menu "2nd stage bootloader/ota minimum signatures"
config JADE_MINIMUM_SIGNATURES
int "bootloader 2nd stage and ota verifies minimum signatures"
range 1 3
- default 2 if BOARD_TYPE_JADE_V2
+ default 2 if BOARD_TYPE_JADE_V2_ANY
default 1
help
Number of signatures required for app-images from 2nd stage and ota
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index 0f2c5be..f7b87a7 100755
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -9,12 +9,11 @@ if(CONFIG_ETH_USE_OPENETH)
endif()
endif()
-if (CONFIG_BOARD_TYPE_JADE OR CONFIG_BOARD_TYPE_JADE_V1_1 OR CONFIG_BOARD_TYPE_JADE_V2)
+if (CONFIG_BOARD_TYPE_JADE_ANY)
list(APPEND logo_files ${PROJECT_DIR}/logo/splash.bin.gz ${PROJECT_DIR}/logo/ce.bin.gz ${PROJECT_DIR}/logo/fcc.bin.gz ${PROJECT_DIR}/logo/weee.bin.gz)
-endif()
-
-if (CONFIG_BOARD_TYPE_JADE_V1_1 OR CONFIG_BOARD_TYPE_JADE_V2)
- list(APPEND logo_files ${PROJECT_DIR}/logo/telec.bin.gz)
+ if (CONFIG_BOARD_TYPE_JADE_V1_1 OR CONFIG_BOARD_TYPE_JADE_V2_ANY)
+ list(APPEND logo_files ${PROJECT_DIR}/logo/telec.bin.gz)
+ endif()
endif()
if (CONFIG_DISPLAY_HEIGHT GREATER_EQUAL 170)
diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild
index e080b81..c88d257 100644
--- a/main/Kconfig.projbuild
+++ b/main/Kconfig.projbuild
@@ -26,6 +26,24 @@ menu "Blockstream Jade"
help
Enable amagamated build, compiling all files as a single translation unit. Should create a smaller/faster binary.
+ config BOARD_TYPE_JADE_ANY
+ # Board is a Jade v1 or v2 device of any flavor
+ # No prompt: this is internal config meant to be selected automatically
+ bool
+ default n
+
+ config BOARD_TYPE_JADE_V1_ANY
+ # Board is a Jade v1 device of any flavor
+ # No prompt: this is internal config meant to be selected automatically
+ bool
+ default n
+
+ config BOARD_TYPE_JADE_V2_ANY
+ # Board is a Jade v2 device of any flavor
+ # No prompt: this is internal config meant to be selected automatically
+ bool
+ default n
+
choice
prompt "Board type"
default BOARD_TYPE_JADE
@@ -34,16 +52,22 @@ menu "Blockstream Jade"
select HAS_AXP
select HAS_CAMERA
select HAS_BATTERY
+ select BOARD_TYPE_JADE_ANY
+ select BOARD_TYPE_JADE_V1_ANY
config BOARD_TYPE_JADE_V1_1
bool "Blockstream Jade v1.1 (rocker)"
select HAS_AXP
select HAS_CAMERA
select HAS_BATTERY
+ select BOARD_TYPE_JADE_ANY
+ select BOARD_TYPE_JADE_V1_ANY
config BOARD_TYPE_JADE_V2
bool "Blockstream Jade v2 (esp32s3)"
select HAS_AXP
select HAS_CAMERA
select HAS_BATTERY
+ select BOARD_TYPE_JADE_ANY
+ select BOARD_TYPE_JADE_V2_ANY
config BOARD_TYPE_M5_FIRE
bool "M5Stack Fire"
select HAS_IP5306
@@ -137,17 +161,17 @@ menu "Blockstream Jade"
config DISPLAY_SPI_CLOCK
int "SPI Clock"
- default 40000000 if BOARD_TYPE_JADE_V2 || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TWATCHS3
+ default 40000000 if BOARD_TYPE_JADE_V2_ANY || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TWATCHS3
default 32000000
config DISPLAY_SPI_HOST
int "SPI host"
- default 2 if BOARD_TYPE_JADE_V2 || BOARD_TYPE_M5_CORES3
+ default 2 if BOARD_TYPE_JADE_V2_ANY || BOARD_TYPE_M5_CORES3
default 1
config DISPLAY_INVERT
bool "Invert colors"
- default y if BOARD_TYPE_JADE || BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_JADE_V2 || \
+ default y if BOARD_TYPE_JADE_ANY || \
BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2 || \
BOARD_TYPE_M5_FIRE || BOARD_TYPE_TTGO_TDISPLAYS3 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA || \
BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_TTGO_TWATCHS3 || BOARD_TYPE_WS_TOUCH_LCD2
@@ -173,10 +197,10 @@ menu "Blockstream Jade"
config I2C_SDA
int "I2C SDA Pin"
- default 4 if BOARD_TYPE_JADE || BOARD_TYPE_JADE_V1_1
+ default 4 if BOARD_TYPE_JADE_V1_ANY
default 12 if BOARD_TYPE_M5_CORES3
default 21 if BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY
- default 42 if BOARD_TYPE_JADE_V2
+ default 42 if BOARD_TYPE_JADE_V2_ANY
default 10 if BOARD_TYPE_TTGO_TWATCHS3
default -1
config I2C_SCL
@@ -185,11 +209,11 @@ menu "Blockstream Jade"
default 11 if BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TWATCHS3
default 14 if BOARD_TYPE_JADE_V1_1
default 22 if BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY
- default 41 if BOARD_TYPE_JADE_V2
+ default 41 if BOARD_TYPE_JADE_V2_ANY
default -1
config I2C_MASTER_CLK
int "I2C Master Clock Speed"
- default 10000 if BOARD_TYPE_JADE_V2 || BOARD_TYPE_M5_CORES3
+ default 10000 if BOARD_TYPE_JADE_V2_ANY || BOARD_TYPE_M5_CORES3
default 40000
config I2C_TOUCH_SDA
depends on DISPLAY_TOUCHSCREEN
@@ -246,7 +270,7 @@ menu "Blockstream Jade"
config INPUT_BTN_A
int "BTN A"
default 37 if BOARD_TYPE_JADE_V1_1
- default 38 if BOARD_TYPE_JADE_V2
+ default 38 if BOARD_TYPE_JADE_V2_ANY
default 39 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2
default 35 if BOARD_TYPE_TTGO_TDISPLAY
default 14 if BOARD_TYPE_TTGO_TDISPLAYS3
@@ -254,7 +278,7 @@ menu "Blockstream Jade"
default -1
config INPUT_BTN_B
int "BTN B"
- default 39 if BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_JADE_V2
+ default 39 if BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_JADE_V2_ANY
default 37 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_STICKC_PLUS
default 35 if BOARD_TYPE_M5_STICKC_PLUS_2
default 0 if BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_TTGO_TDISPLAYS3
@@ -272,7 +296,7 @@ menu "Blockstream Jade"
int "Front switch"
default 21 if BOARD_TYPE_JADE
default 33 if BOARD_TYPE_JADE_V1_1
- default 40 if BOARD_TYPE_JADE_V2
+ default 40 if BOARD_TYPE_JADE_V2_ANY
default 38 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY
default 37 if BOARD_TYPE_M5_STICKC_PLUS_2
default 0 if BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA
@@ -290,13 +314,13 @@ menu "Blockstream Jade"
bool "Enable Battery Functions"
help
Enables battery functionality
- default y if BOARD_TYPE_JADE_V2 || BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_JADE || BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2
+ default y if BOARD_TYPE_JADE_V1_ANY || BOARD_TYPE_JADE_V2 || BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2
config HAS_CAMERA
bool "Enable Camera Functions"
help
Enables camera functionality
- default y if BOARD_TYPE_JADE_V2 || BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_JADE || (ETH_USE_OPENETH && HTTPD_WS_SUPPORT) || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA || BOARD_TYPE_WS_TOUCH_LCD2
+ default y if BOARD_TYPE_JADE_V1_ANY || BOARD_TYPE_JADE_V2 || (ETH_USE_OPENETH && HTTPD_WS_SUPPORT) || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA || BOARD_TYPE_WS_TOUCH_LCD2
menu "Camera Orientation"
visible if HAS_CAMERA && BOARD_TYPE_CUSTOM
@@ -455,15 +479,15 @@ menu "Blockstream Jade"
config DISPLAY_WIDTH
int "Display width in pixels"
range 0 640
- default 320 if BOARD_TYPE_QEMU_LARGER || BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_TTGO_TDISPLAYS3 || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_JADE_V2
+ default 320 if BOARD_TYPE_JADE_V2_ANY || BOARD_TYPE_QEMU_LARGER || BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_TTGO_TDISPLAYS3 || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_M5_CORE2
default 480 if BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA
default 240
config DISPLAY_HEIGHT
int "Display height in pixels"
range 0 640
- default 135 if BOARD_TYPE_JADE || BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2
+ default 135 if BOARD_TYPE_JADE_V1_ANY || BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2
default 240 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORE2
- default 170 if BOARD_TYPE_JADE_V2 || BOARD_TYPE_QEMU_LARGER || BOARD_TYPE_TTGO_TDISPLAYS3
+ default 170 if BOARD_TYPE_JADE_V2_ANY || BOARD_TYPE_QEMU_LARGER || BOARD_TYPE_TTGO_TDISPLAYS3
default 200 if BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TWATCHS3
default 222 if BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA
default 280 if BOARD_TYPE_WS_TOUCH_LCD2
@@ -473,7 +497,7 @@ menu "Blockstream Jade"
default y if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA
config DCS_ADDRESS_MODE_MIRROR_X_SELECTED
bool "Mirror X"
- default y if BOARD_TYPE_JADE || BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_JADE_V2 || \
+ default y if BOARD_TYPE_JADE_ANY || \
BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2 || BOARD_TYPE_TTGO_TDISPLAYS3 || BOARD_TYPE_TTGO_TWATCHS3
default n if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA || BOARD_TYPE_WS_TOUCH_LCD2
config DCS_ADDRESS_MODE_MIRROR_Y_SELECTED
@@ -482,12 +506,12 @@ menu "Blockstream Jade"
default n
config DCS_ADDRESS_MODE_SWAP_XY_SELECTED
bool "Swap X and Y"
- default y if BOARD_TYPE_JADE || BOARD_TYPE_JADE_V1_1 || BOARD_TYPE_JADE_V2
+ default y if BOARD_TYPE_JADE_ANY
default y if BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2 || BOARD_TYPE_TTGO_TDISPLAYS3 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA
default n if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_TTGO_TWATCHS3 || BOARD_TYPE_WS_TOUCH_LCD2
config DISPLAY_OFFSET_X
int "X offset"
- default 0 if BOARD_TYPE_JADE_V2
+ default 0 if BOARD_TYPE_JADE_V2_ANY
default 0 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_TTGO_TDISPLAYS3 || BOARD_TYPE_TTGO_TWATCHS3
default 0 if BOARD_TYPE_M5_CORES3 || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA || BOARD_TYPE_WS_TOUCH_LCD2
default 40
@@ -496,7 +520,7 @@ menu "Blockstream Jade"
config DISPLAY_OFFSET_Y
int "Y offset"
default 0 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORES3 || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_WS_TOUCH_LCD2
- default 35 if BOARD_TYPE_JADE_V2 || BOARD_TYPE_TTGO_TDISPLAYS3
+ default 35 if BOARD_TYPE_JADE_V2_ANY || BOARD_TYPE_TTGO_TDISPLAYS3
default 49 if BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA
default 80 if BOARD_TYPE_TTGO_TWATCHS3
default 53
@@ -514,7 +538,7 @@ menu "Blockstream Jade"
config DISPLAY_PIN_MOSI
int "MOSI pin number"
default 2 if BOARD_TYPE_JADE_V1_1
- default 17 if BOARD_TYPE_JADE_V2
+ default 17 if BOARD_TYPE_JADE_V2_ANY
default 15 if BOARD_TYPE_JADE || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2
default 19 if BOARD_TYPE_TTGO_TDISPLAY
default 23 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_M5_CORE2
@@ -527,7 +551,7 @@ menu "Blockstream Jade"
int "CLK pin number"
default 14 if BOARD_TYPE_JADE
default 12 if BOARD_TYPE_JADE_V1_1
- default 47 if BOARD_TYPE_JADE_V2
+ default 47 if BOARD_TYPE_JADE_V2_ANY
default 13 if BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2
default 18 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY || BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_M5_CORE2 || BOARD_TYPE_TTGO_TDISPLAYS3PROCAMERA || BOARD_TYPE_TTGO_TWATCHS3
default 36 if BOARD_TYPE_M5_CORES3
@@ -537,7 +561,7 @@ menu "Blockstream Jade"
int "CS pin number"
default 13 if BOARD_TYPE_JADE
default 0 if BOARD_TYPE_JADE_V1_1
- default 21 if BOARD_TYPE_JADE_V2
+ default 21 if BOARD_TYPE_JADE_V2_ANY
default 3 if BOARD_TYPE_M5_CORES3
default 5 if BOARD_TYPE_TTGO_TDISPLAY || BOARD_TYPE_M5_STICKC_PLUS || BOARD_TYPE_M5_STICKC_PLUS_2 || BOARD_TYPE_M5_CORE2
default 14 if BOARD_TYPE_M5_FIRE || BOARD_TYPE_M5_BLACK_GRAY
@@ -549,7 +573,7 @@ menu "Blockstream Jade"
int "DC pin number"
default 12 if BOARD_TYPE_JADE
default 13 if BOARD_TYPE_JADE_V1_1
- default 48 if BOARD_TYPE_JADE_V2
+ default 48 if BOARD_TYPE_JADE_V2_ANY
default 15 if BOARD_TYPE_M5_CORE2
default 16 if BOARD_TYPE_TTGO_TDISPLAY
default 23 if BOARD_TYPE_M5_STICKC_PLUS
@@ -563,7 +587,7 @@ menu "Blockstream Jade"
config DISPLAY_PIN_RST
int "RST pin number"
default 21 if BOARD_TYPE_JADE
- default 46 if BOARD_TYPE_JADE_V2
+ default 46 if BOARD_TYPE_JADE_V2_ANY
default 18 if BOARD_TYPE_M5_STICKC_PLUS
default 12 if BOARD_TYPE_M5_STICKC_PLUS_2
default 23 if BOARD_TYPE_TTGO_TDISPLAY
diff --git a/main/gui.c b/main/gui.c
index a33bffb..dab375d 100644
--- a/main/gui.c
+++ b/main/gui.c
@@ -25,7 +25,7 @@
#include "utils/util.h"
// A genuine production v2 Jade may be awaiting mandatory attestation data
-#if defined(CONFIG_BOARD_TYPE_JADE_V2) && defined(CONFIG_SECURE_BOOT) \
+#if defined(CONFIG_BOARD_TYPE_JADE_V2_ANY) && defined(CONFIG_SECURE_BOOT) \
&& defined(CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS)
#include "attestation/attestation.h"
static inline bool gui_awaiting_attestation_data(void) { return !attestation_initialised(); }
@@ -2081,7 +2081,7 @@ static void render_qrguide(gui_view_node_t* node, const dispWin_t cs, const uint
const uint16_t width = cs.x2 - cs.x1;
const uint16_t height = cs.y2 - cs.y1;
const uint16_t square_size = min_u16(width, height);
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1)
+#if defined(CONFIG_BOARD_TYPE_JADE_V1_ANY)
// guides 9% inset
const uint16_t inset = square_size / 11;
#else
@@ -2740,7 +2740,7 @@ void gui_set_activity_title(gui_activity_t* activity, const char* title)
gui_activity_t* gui_current_activity(void) { return current_activity; }
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
extern const uint8_t splashstart[] asm("_binary_splash_bin_gz_start");
extern const uint8_t splashend[] asm("_binary_splash_bin_gz_end");
#endif
@@ -2752,7 +2752,7 @@ gui_activity_t* gui_display_splash(void)
// Blank screen while awaiting attestation data upload
if (!gui_awaiting_attestation_data()) {
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
Picture* const pic = get_picture(splashstart, splashend);
gui_make_picture(&splash_node, pic);
#else
diff --git a/main/main.c b/main/main.c
index fd8ea4f..38904b9 100644
--- a/main/main.c
+++ b/main/main.c
@@ -53,6 +53,19 @@ esp_app_desc_t running_app_info;
esp_chip_info_t chip_info;
uint8_t macid[6];
+#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1)
+#if !defined(CONFIG_BOARD_TYPE_JADE_ANY) || !defined(CONFIG_BOARD_TYPE_JADE_V1_ANY)
+#error "JADE/JADE_V1_1 requires JADE_ANY and JADE_V1_ANY"
+#endif
+#elif defined(CONFIG_BOARD_TYPE_JADE_V2)
+#if !defined(CONFIG_BOARD_TYPE_JADE_ANY) || !defined(CONFIG_BOARD_TYPE_JADE_V2_ANY)
+#error "JADE_V2 requires JADE_ANY and JADE_V2_ANY"
+#endif
+#elif defined(CONFIG_BOARD_TYPE_JADE_ANY) || defined(CONFIG_BOARD_TYPE_JADE_V1_ANY) \
+ || defined(CONFIG_BOARD_TYPE_JADE_V2_ANY)
+#error "JADE_ANY/JADE_V1_ANY/JADE_V2_ANY require a Jade board config"
+#endif
+
#if defined(CONFIG_LOG_DEFAULT_LEVEL_NONE) && (defined(CONFIG_LOG_CBOR) || defined(CONFIG_LOG_WIFI))
#error "CONFIG_LOG_CBOR/CONFIG_LOG_WIFI requires logging to be enabled"
#endif
@@ -82,7 +95,7 @@ void temp_stack_init(void);
// any further efuses as un-readable.])
// See: https://docs.espressif.com/projects/esp-idf/en/v5.3.1/esp32s3/security/secure-boot-v2.html
// #restrictions-after-secure-boot-is-enabled
-#if defined(CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS) && !defined(CONFIG_BOARD_TYPE_JADE_V2)
+#if defined(CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS) && !defined(CONFIG_BOARD_TYPE_JADE_V2_ANY)
#error "Error, insecure flag CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS set"
#endif
diff --git a/main/power.c b/main/power.c
index f965c6e..1dd7624 100644
--- a/main/power.c
+++ b/main/power.c
@@ -9,7 +9,7 @@
#include "power/jadev10.inc"
#elif defined(CONFIG_BOARD_TYPE_JADE_V1_1)
#include "power/jadev11.inc"
-#elif defined(CONFIG_BOARD_TYPE_JADE_V2)
+#elif defined(CONFIG_BOARD_TYPE_JADE_V2_ANY)
#include "power/jadev20.inc"
#elif defined(CONFIG_BOARD_TYPE_M5_STICKC_PLUS) || defined(CONFIG_BOARD_TYPE_M5_CORE2)
// These have AXP192 but configured differently from the Jade
diff --git a/main/process/dashboard.c b/main/process/dashboard.c
index d8dda2b..5e91b2d 100644
--- a/main/process/dashboard.c
+++ b/main/process/dashboard.c
@@ -32,7 +32,7 @@
#include <esp_system.h>
// A genuine production v2 Jade may be awaiting mandatory attestation data
-#if defined(CONFIG_BOARD_TYPE_JADE_V2) && defined(CONFIG_SECURE_BOOT) \
+#if defined(CONFIG_BOARD_TYPE_JADE_V2_ANY) && defined(CONFIG_SECURE_BOOT) \
&& defined(CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS)
#include "attestation/attestation.h"
static inline bool awaiting_attestation_data(void) { return !attestation_initialised(); }
@@ -188,7 +188,7 @@ gui_activity_t* make_display_settings_activity(void);
gui_activity_t* make_info_activity(const char* fw_version);
gui_activity_t* make_device_info_activity(void);
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
gui_activity_t* make_legal_certifications_activity(void);
#endif
gui_activity_t* make_storage_stats_activity(size_t entries_used, size_t entries_free);
@@ -881,7 +881,7 @@ static bool offer_temporary_wallet_login(void)
return true;
}
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
static void handle_legal(void)
{
gui_activity_t* const first_activity = make_legal_certifications_activity();
@@ -1686,7 +1686,7 @@ static void handle_view_otps(void)
}
// NOTE: Only Jade v1.1's and v2's have brightness controls
-#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2) \
+#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2_ANY) \
|| defined(CONFIG_BOARD_TYPE_WS_TOUCH_LCD2)
static void handle_screen_brightness(void)
{
@@ -2266,7 +2266,7 @@ static void handle_settings(const bool startup_menu)
#endif
// NOTE: Only Jade v1.1's and v2's have brightness controls
-#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2) \
+#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2_ANY) \
|| defined(CONFIG_BOARD_TYPE_WS_TOUCH_LCD2)
case BTN_SETTINGS_DISPLAY_BRIGHTNESS:
handle_screen_brightness();
@@ -2392,7 +2392,7 @@ static void handle_settings(const bool startup_menu)
handle_pinserver_reset();
break;
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
case BTN_SETTINGS_LEGAL:
handle_legal();
break;
diff --git a/main/process/register_attestation.c b/main/process/register_attestation.c
index 52547f8..b622eae 100644
--- a/main/process/register_attestation.c
+++ b/main/process/register_attestation.c
@@ -69,7 +69,7 @@ void register_attestation_process(void* process_ptr)
sign_attestation_and_send_reply(process, ext_signature, ext_signature_len); // sends reply
JADE_LOGI("Success");
-#if defined(CONFIG_BOARD_TYPE_JADE_V2) && !defined(CONFIG_DEBUG_MODE)
+#if defined(CONFIG_BOARD_TYPE_JADE_V2_ANY) && !defined(CONFIG_DEBUG_MODE)
// A production jade unit should reboot after attestation parameters set
const char* message[] = { "Attestation initialised" };
display_message_activity(message, 1);
diff --git a/main/ui/dashboard.c b/main/ui/dashboard.c
index b0905a2..b437b5d 100644
--- a/main/ui/dashboard.c
+++ b/main/ui/dashboard.c
@@ -6,19 +6,18 @@
#include "process.h"
#include "utils/malloc_ext.h"
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
extern const uint8_t fccstart[] asm("_binary_fcc_bin_gz_start");
extern const uint8_t fccend[] asm("_binary_fcc_bin_gz_end");
extern const uint8_t cestart[] asm("_binary_ce_bin_gz_start");
extern const uint8_t ceend[] asm("_binary_ce_bin_gz_end");
extern const uint8_t weeestart[] asm("_binary_weee_bin_gz_start");
extern const uint8_t weeeend[] asm("_binary_weee_bin_gz_end");
-#endif
-
-#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2_ANY)
extern const uint8_t telecstart[] asm("_binary_telec_bin_gz_start");
extern const uint8_t telecend[] asm("_binary_telec_bin_gz_end");
#endif
+#endif
static gui_view_node_t* make_home_screen_panel_item(const color_t color, home_menu_entry_t* entry)
{
@@ -266,17 +265,15 @@ gui_activity_t* make_startup_options_activity(void)
{ .txt = NULL, .font = GUI_DEFAULT_FONT, .ev_id = GUI_BUTTON_EVENT_NONE } };
btn_data_t menubtns[] = { { .txt = "Factory Reset", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_RESET },
- { .txt = "Blind Oracle", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_PINSERVER },
- { .txt = "Legal", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_LEGAL } };
-
- // Legal screens only apply to proper jade hw
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
- const size_t num_menubtns = 3;
-#else
- const size_t num_menubtns = 2;
+ { .txt = "Blind Oracle", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_PINSERVER }
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
+ // Legal screens only apply to official Jade hw
+ ,
+ { .txt = "Legal", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_LEGAL }
#endif
+ };
- return make_menu_activity("Boot Menu", hdrbtns, 2, menubtns, num_menubtns);
+ return make_menu_activity("Boot Menu", hdrbtns, 2, menubtns, sizeof(menubtns) / sizeof(btn_data_t));
}
gui_activity_t* make_uninitialised_settings_activity(void)
@@ -399,7 +396,7 @@ gui_activity_t* make_display_settings_activity(void)
// NOTE: Only Jade v1.1's and v2's have brightness controls
// NOTE: Jade v1.1's do not support Flip Orientation because of issues with screen offsets
-#if defined(CONFIG_BOARD_TYPE_JADE_V2) || defined(CONFIG_BOARD_TYPE_WS_TOUCH_LCD2)
+#if defined(CONFIG_BOARD_TYPE_JADE_V2_ANY) || defined(CONFIG_BOARD_TYPE_WS_TOUCH_LCD2)
btn_data_t menubtns[]
= { { .txt = "Display Brightness", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_DISPLAY_BRIGHTNESS },
{ .txt = "Flip Orientation", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_DISPLAY_ORIENTATION },
@@ -616,15 +613,14 @@ gui_activity_t* make_info_activity(const char* fw_version)
gui_set_align(fwver, GUI_ALIGN_LEFT, GUI_ALIGN_MIDDLE);
gui_set_parent(fwver, splitfw);
- btn_data_t menubtns[]
- = { { .content = splitfw, .ev_id = BTN_SETTINGS_INFO_FWVERSION },
- { .txt = "Device Info", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_DEVICE_INFO }
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
- // Legal screens only apply to proper jade hw
- ,
- { .txt = "Legal", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_LEGAL }
+ btn_data_t menubtns[] = { { .content = splitfw, .ev_id = BTN_SETTINGS_INFO_FWVERSION },
+ { .txt = "Device Info", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_DEVICE_INFO }
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
+ // Legal screens only apply to official Jade hw
+ ,
+ { .txt = "Legal", .font = GUI_DEFAULT_FONT, .ev_id = BTN_SETTINGS_LEGAL }
#endif
- };
+ };
gui_activity_t* const act = make_menu_activity("Info", hdrbtns, 2, menubtns, sizeof(menubtns) / sizeof(btn_data_t));
@@ -648,14 +644,14 @@ gui_activity_t* make_device_info_activity(void)
return make_menu_activity("Device Info", hdrbtns, 2, menubtns, sizeof(menubtns) / sizeof(btn_data_t));
}
-#if defined(CONFIG_BOARD_TYPE_JADE) || defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#ifdef CONFIG_BOARD_TYPE_JADE_ANY
-#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
-#define JADE_FCC_ID "2AWI3BLOCK\n STREAMJD2"
-#define MAX_LEGAL_PAGE 6
-#else
+#ifdef CONFIG_BOARD_TYPE_JADE
#define JADE_FCC_ID "2AWI3BLOCK\n STREAMJD1"
#define MAX_LEGAL_PAGE 5
+#else
+#define JADE_FCC_ID "2AWI3BLOCK\n STREAMJD2"
+#define MAX_LEGAL_PAGE 6
#endif
static void make_legal_page(link_activity_t* page_act, int legal_page)
@@ -754,7 +750,7 @@ static void make_legal_page(link_activity_t* page_act, int legal_page)
gui_set_padding(node, GUI_MARGIN_ALL_EQUAL, 12);
break;
}
-#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2)
+#if defined(CONFIG_BOARD_TYPE_JADE_V1_1) || defined(CONFIG_BOARD_TYPE_JADE_V2_ANY)
case 6: {
gui_view_node_t* hsplit;
gui_make_hsplit(&hsplit, GUI_SPLIT_RELATIVE, 3, 36, 10, 54);
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.