Reduce BLE stack memory usage from ~68KB to ~52KB by disabling unused NimBLE roles (peripheral, broadcaster), limiting connections to 1, and reducing buffer counts for ACL, HCI events, and ATT entries. Remove unused cloud components (esp_insights, esp_rainmaker) that require unavailable server certificates. These changes prevent stack collision with the render shed, eliminating restart flaps on the reader device.
170 lines
6.6 KiB
INI
170 lines
6.6 KiB
INI
[platformio]
|
|
default_envs = default
|
|
build_cache_dir = .cache
|
|
extra_configs = platformio.local.ini
|
|
|
|
[crosspoint]
|
|
version = 1.4.1
|
|
|
|
[base]
|
|
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.37/platform-espressif32.zip
|
|
board = esp32-c3-devkitm-1
|
|
framework = arduino
|
|
monitor_speed = 115200
|
|
upload_speed = 921600
|
|
check_tool = cppcheck
|
|
check_flags = --enable=all --suppress=missingIncludeSystem --suppress=unusedFunction --suppress=unmatchedSuppression --suppress=*:*/.pio/* --inline-suppr
|
|
check_skip_packages = yes
|
|
|
|
board_upload.flash_size = 16MB
|
|
board_upload.maximum_size = 16777216
|
|
board_upload.offset_address = 0x10000
|
|
|
|
build_flags =
|
|
-DARDUINO_USB_MODE=1
|
|
-DARDUINO_USB_CDC_ON_BOOT=1
|
|
-DEINK_DISPLAY_SINGLE_BUFFER_MODE=1
|
|
-DDISABLE_FS_H_WARNING=1
|
|
-DDESTRUCTOR_CLOSES_FILE=1
|
|
# https://libexpat.github.io/doc/api/latest/#XML_GE
|
|
-DXML_GE=0
|
|
-DXML_CONTEXT_BYTES=1024
|
|
-std=gnu++2a
|
|
# Enable UTF-8 long file names in SdFat
|
|
-DUSE_UTF8_LONG_NAMES=1
|
|
# Increase PNG scanline buffer to support up to 2048px wide images
|
|
# Default is (320*4+1)*2=2562, we need more for larger images
|
|
-DPNG_MAX_BUFFERED_PIXELS=16416
|
|
-DFREEINK_DEVICE_X4=1
|
|
-DFREEINK_DEVICE_X3=1
|
|
-Wno-bidi-chars
|
|
-Wl,--wrap=panic_print_backtrace,--wrap=panic_abort,--wrap=bootloader_common_check_efuse_blk_validity
|
|
-fno-exceptions
|
|
# FreeInk panel profiles: compile both X3 (792x528/UC8253) and X4 (800x480/SSD1677);
|
|
# the firmware picks the active one at runtime via HalDisplay setDisplayX3().
|
|
-DFREEINK_DEVICE_X3=1
|
|
-DFREEINK_DEVICE_X4=1
|
|
# BLE HID page-turner host (BleKeyboardHost). NimBLE role/bond config is baked into
|
|
# the prebuilt arduino-esp32 framework's sdkconfig.h, so we don't redefine it here
|
|
# (doing so only warns and has no effect). The host only compiles when
|
|
# FREEINK_CAP_BLE_HID_HOST is set on the env (below); with the capability off,
|
|
# BleKeyboardHost links stubs and pulls in zero NimBLE code.
|
|
-DFREEINK_BLE_HID_SHOW_UNNAMED_DEVICES=0
|
|
|
|
build_unflags =
|
|
-std=gnu++11
|
|
-fexceptions
|
|
|
|
; Board configuration
|
|
board_build.flash_mode = dio
|
|
board_build.flash_size = 16MB
|
|
board_build.partitions = partitions.csv
|
|
|
|
; Shrink the NimBLE footprint for a 1-connection HID host moving 3-6 byte reports.
|
|
; Field-measured: begin() costs ~52 KB with these trims vs ~68 KB with the prebuilt
|
|
; framework defaults — and that 15 KB is the difference between the stack landing
|
|
; above the reader's render shed floor (stable coexistence) and below it (a
|
|
; guaranteed shed/restart flap). Rebuilds the Arduino core libs on first build
|
|
; (slower once, cached after; needs the CMake pin in platformio.local.ini on macOS).
|
|
custom_sdkconfig =
|
|
CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=n
|
|
CONFIG_BT_NIMBLE_ROLE_BROADCASTER=n
|
|
CONFIG_BT_NIMBLE_MAX_CONNECTIONS=1
|
|
CONFIG_BT_NIMBLE_MAX_CCCDS=2
|
|
CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=23
|
|
CONFIG_BT_NIMBLE_MSYS_1_BLOCK_COUNT=6
|
|
CONFIG_BT_NIMBLE_MSYS_2_BLOCK_COUNT=6 ; was 24 x 320 B
|
|
CONFIG_BT_NIMBLE_ACL_BUF_COUNT=6 ; was 24 x 255 B
|
|
CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=12 ; was 30 x 70 B; only scan bursts need many
|
|
; IDF 5.5 sizes the HCI transport pools under TRANSPORT_* names; pin both spellings.
|
|
CONFIG_BT_NIMBLE_TRANSPORT_ACL_FROM_LL_COUNT=6
|
|
CONFIG_BT_NIMBLE_TRANSPORT_EVT_COUNT=12
|
|
CONFIG_BT_NIMBLE_ATT_MAX_PREP_ENTRIES=4 ; was 64; a HID host never does prepared writes
|
|
CONFIG_BT_CTRL_BLE_MAX_ACT=3 ; was 6; need conn + scan + initiate only
|
|
CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_NUM=50 ; was 100; pairing-time scan only
|
|
CONFIG_BT_CTRL_ADV_DUP_FILT_MAX=10 ; was 30
|
|
; Keep the Arduino wrappers for the removed cloud components (below) out of
|
|
; the core source list; all other bundled libraries default to enabled.
|
|
CONFIG_ARDUINO_SELECTIVE_COMPILATION=y
|
|
CONFIG_ARDUINO_SELECTIVE_RainMaker=n
|
|
CONFIG_ARDUINO_SELECTIVE_Insights=n
|
|
|
|
; Drop unused cloud components from the core rebuild. esp_insights/rainmaker
|
|
; require embedded server certs the lib builder can't generate
|
|
; ("https_server.crt.S not found"); this firmware uses none of them.
|
|
custom_component_remove =
|
|
espressif/esp_insights
|
|
espressif/esp_rainmaker
|
|
espressif/esp_diagnostics
|
|
espressif/esp_diag_data_store
|
|
espressif/esp_schedule
|
|
espressif/esp_rcp_update
|
|
espressif/esp_secure_cert_mgr
|
|
espressif/cbor
|
|
|
|
extra_scripts =
|
|
pre:scripts/build_html.py
|
|
pre:scripts/gen_i18n.py
|
|
pre:scripts/git_branch.py
|
|
pre:scripts/patch_jpegdec.py
|
|
post:scripts/register_unit_tests_target.py
|
|
|
|
; Libraries
|
|
lib_deps =
|
|
BatteryMonitor=symlink://freeink-sdk/libs/hardware/BatteryMonitor
|
|
InputManager=symlink://freeink-sdk/libs/hardware/InputManager
|
|
EInkDisplay=symlink://freeink-sdk/libs/display/FreeInkDisplay
|
|
SDCardManager=symlink://freeink-sdk/libs/hardware/SDCardManager
|
|
; FreeInk HAL support libs the above depend on (BoardConfig pin maps, etc.).
|
|
BoardConfig=symlink://freeink-sdk/libs/hardware/BoardConfig
|
|
PowerManager=symlink://freeink-sdk/libs/hardware/PowerManager
|
|
Rtc=symlink://freeink-sdk/libs/hardware/Rtc
|
|
Imu=symlink://freeink-sdk/libs/hardware/Imu
|
|
FreeInkUI=symlink://freeink-sdk/libs/ui/FreeInkUI
|
|
Icons=symlink://freeink-sdk/libs/assets/Icons
|
|
BleKeyboardHost=symlink://freeink-sdk/libs/network/BleKeyboardHost
|
|
h2zero/NimBLE-Arduino @ ^2.3.8
|
|
bblanchon/ArduinoJson @ 7.4.2
|
|
ricmoo/QRCode @ 0.0.1
|
|
bitbank2/PNGdec @ 1.1.6
|
|
https://github.com/bitbank2/JPEGDEC.git#86282979224c8a32fd51e091ed5a35b0c699a52b
|
|
links2004/WebSockets @ 2.7.3
|
|
|
|
[env:default]
|
|
extends = base
|
|
build_flags =
|
|
${base.build_flags}
|
|
; CROSSPOINT_VERSION is set by scripts/git_branch.py (includes branch + short SHA)
|
|
-DENABLE_SERIAL_LOG
|
|
-DLOG_LEVEL=2 ; Set log level to debug for development builds
|
|
-DFREEINK_CAP_BLE_HID_HOST=1 ; BLE HID page-turner host (NimBLE)
|
|
-DFREEINK_BLE_HID_SCAN_DEBUG=1 ; verbose BLE scan lifecycle/advertisement logs for bring-up
|
|
-DFREEINK_BLE_HID_REPORT_DEBUG=1 ; raw HID report hex dumps + report-map hints (bring-up)
|
|
|
|
|
|
[env:gh_release]
|
|
extends = base
|
|
build_flags =
|
|
${base.build_flags}
|
|
-DCROSSPOINT_VERSION=\"${crosspoint.version}\"
|
|
-DENABLE_SERIAL_LOG
|
|
-DLOG_LEVEL=1 ; Set log level to info for release builds
|
|
-DFREEINK_CAP_BLE_HID_HOST=1 ; BLE HID page-turner host (NimBLE)
|
|
|
|
[env:gh_release_rc]
|
|
extends = base
|
|
build_flags =
|
|
${base.build_flags}
|
|
-DCROSSPOINT_VERSION=\"${crosspoint.version}-rc+${sysenv.CROSSPOINT_RC_HASH}\"
|
|
-DENABLE_SERIAL_LOG
|
|
-DLOG_LEVEL=1 ; Set log level to info for release candidate builds
|
|
-DFREEINK_CAP_BLE_HID_HOST=1 ; BLE HID page-turner host (NimBLE)
|
|
|
|
[env:slim]
|
|
extends = base
|
|
build_flags =
|
|
${base.build_flags}
|
|
-DCROSSPOINT_VERSION=\"${crosspoint.version}-slim\"
|
|
; serial output is disabled in slim builds to save space
|
|
-UENABLE_SERIAL_LOG
|