From d09a525b8600593eeb13a8059bfba785885c4729 Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 20:04:04 +0100 Subject: [PATCH 01/12] added ESP32 vanilla handling (very buggy as serial is not finished) --- .../BeamStalker/boards/sdkconfig.M5Cardputer | 4 +-- .../boards/sdkconfig.esp32-vanilla | 9 +++++++ .../main/BeamStalker-cardputer.cpp | 9 +------ .../BeamStalker/main/firmware/interface.cpp | 20 ++++++++++---- .../BeamStalker/main/firmware/interface.h | 26 +++++++++++++++++++ Firmware/BeamStalker/partitions-4MB.csv | 5 ++++ .../{partitions.csv => partitions-8MB.csv} | 0 7 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 Firmware/BeamStalker/boards/sdkconfig.esp32-vanilla create mode 100644 Firmware/BeamStalker/partitions-4MB.csv rename Firmware/BeamStalker/{partitions.csv => partitions-8MB.csv} (100%) diff --git a/Firmware/BeamStalker/boards/sdkconfig.M5Cardputer b/Firmware/BeamStalker/boards/sdkconfig.M5Cardputer index 7acc68e..fc73746 100644 --- a/Firmware/BeamStalker/boards/sdkconfig.M5Cardputer +++ b/Firmware/BeamStalker/boards/sdkconfig.M5Cardputer @@ -2,8 +2,8 @@ CONFIG_IDF_TARGET="esp32s3" CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y CONFIG_ESPTOOLPY_FLASHSIZE="8MB" CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MB.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions-8MB.csv" CONFIG_BT_ENABLED=y CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y diff --git a/Firmware/BeamStalker/boards/sdkconfig.esp32-vanilla b/Firmware/BeamStalker/boards/sdkconfig.esp32-vanilla new file mode 100644 index 0000000..07b397b --- /dev/null +++ b/Firmware/BeamStalker/boards/sdkconfig.esp32-vanilla @@ -0,0 +1,9 @@ +CONFIG_IDF_TARGET="esp32" +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_ESPTOOLPY_FLASHSIZE="4MB" +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-4MB.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions-4MB.csv" +CONFIG_BT_ENABLED=y +CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y + diff --git a/Firmware/BeamStalker/main/BeamStalker-cardputer.cpp b/Firmware/BeamStalker/main/BeamStalker-cardputer.cpp index 110bd13..fbdca8e 100644 --- a/Firmware/BeamStalker/main/BeamStalker-cardputer.cpp +++ b/Firmware/BeamStalker/main/BeamStalker-cardputer.cpp @@ -3,18 +3,11 @@ extern "C" { #include #include } -#include "esp_wifi.h" -#include "esp_event.h" -#include "esp_task_wdt.h" -#include "nvs_flash.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/timers.h" -#include "time.h" #include "firmware/helper.h" #include "firmware/bitmaps.h" #include "firmware/menu.h" +#include "firmware/interface.h" #include "firmware/apps/options.h" #include "firmware/apps/Wifi/wifi_main.h" diff --git a/Firmware/BeamStalker/main/firmware/interface.cpp b/Firmware/BeamStalker/main/firmware/interface.cpp index 573ccf6..a28c4ea 100644 --- a/Firmware/BeamStalker/main/firmware/interface.cpp +++ b/Firmware/BeamStalker/main/firmware/interface.cpp @@ -62,10 +62,12 @@ int handleDefaultButton() { // Need to be enhanced a lot bool upPressed() { #ifdef CONFIG_M5_BOARD return M5Cardputer.Keyboard.isKeyPressed(';'); + #else + return false; #endif } bool downPressed() { - bool default_btn, custom_btn, serial_btn = false; + bool default_btn = false, custom_btn = false, serial_btn = false; default_btn = DEFAULT_BTN_DOUBLE_PRESS; @@ -78,10 +80,12 @@ bool downPressed() { bool leftPressed() { #ifdef CONFIG_M5_BOARD return M5Cardputer.Keyboard.isKeyPressed(','); + #else + return false; #endif } bool rightPressed() { - bool default_btn, custom_btn, serial_btn = false; + bool default_btn = false, custom_btn = false, serial_btn = false; default_btn = DEFAULT_BTN_FAST_LONG_PRESS; @@ -92,7 +96,7 @@ bool rightPressed() { return (bool)(default_btn||custom_btn||serial_btn); } bool selectPressed() { - bool default_btn, custom_btn, serial_btn = false; + bool default_btn = false, custom_btn = false, serial_btn = false; default_btn = DEFAULT_BTN_FAST_PRESS; @@ -103,7 +107,7 @@ bool selectPressed() { return (bool)(default_btn||custom_btn||serial_btn); } bool returnPressed() { - bool default_btn, custom_btn, serial_btn = false; + bool default_btn = false, custom_btn = false, serial_btn = false; default_btn = DEFAULT_BTN_LONG_PRESS; @@ -115,7 +119,7 @@ bool returnPressed() { } bool anyPressed() { - bool default_btn, custom_btn, serial_btn = false; + bool default_btn = false, custom_btn = false, serial_btn = false; default_btn = DEFAULT_BTN_PRESSED; @@ -156,18 +160,24 @@ void initBoard() { int getBatteryLevel() { #ifdef CONFIG_M5_BOARD return M5Cardputer.Power.getBatteryLevel(); + #else + return -1; #endif } int16_t getBatteryVoltage() { #ifdef CONFIG_M5_BOARD return M5Cardputer.Power.getBatteryVoltage(); + #else + return -1; #endif } int isCharging() { #ifdef CONFIG_M5_BOARD return M5Cardputer.Power.isCharging(); + #else + return -1; #endif } diff --git a/Firmware/BeamStalker/main/firmware/interface.h b/Firmware/BeamStalker/main/firmware/interface.h index 0f5f343..00219f6 100644 --- a/Firmware/BeamStalker/main/firmware/interface.h +++ b/Firmware/BeamStalker/main/firmware/interface.h @@ -1,15 +1,38 @@ #ifndef INTERFACE_H #define INTERFACE_H + +#include "esp_event.h" +#include "esp_task_wdt.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/timers.h" +#include "time.h" #include "driver/gpio.h" + #include +#ifndef CONFIG_M5_BOARD +#include "string.h" +#endif + #include "menu.h" #ifdef CONFIG_M5_BOARD #include #endif +// Temp fix for missing M5Cardputer.h +#ifndef CONFIG_M5_BOARD +#undef TFT_WHITE +#undef TFT_BLACK +#undef TFT_RED +static constexpr int TFT_WHITE = 0xFFFF; +static constexpr int TFT_BLACK = 0x0000; +static constexpr int TFT_RED = 0x0101; +static constexpr int TFT_CYAN = 0x0101; +#endif + #define DEFAULT_BTN GPIO_NUM_0 bool upPressed(); @@ -35,6 +58,9 @@ M5GFX display; M5Canvas canvas(&display); #define DISPLAY_WIDTH M5.Display.width() #define DISPLAY_HEIGHT M5.Display.height() +#else +#define DISPLAY_WIDTH 13 +#define DISPLAY_HEIGHT 37 #endif #endif \ No newline at end of file diff --git a/Firmware/BeamStalker/partitions-4MB.csv b/Firmware/BeamStalker/partitions-4MB.csv new file mode 100644 index 0000000..b10a05d --- /dev/null +++ b/Firmware/BeamStalker/partitions-4MB.csv @@ -0,0 +1,5 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, 0x10000, 3M, diff --git a/Firmware/BeamStalker/partitions.csv b/Firmware/BeamStalker/partitions-8MB.csv similarity index 100% rename from Firmware/BeamStalker/partitions.csv rename to Firmware/BeamStalker/partitions-8MB.csv From 22010d5609d4376b1826fff7a735e163e2a2e80f Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 20:20:04 +0100 Subject: [PATCH 02/12] fixed menu in serial console. --- Firmware/BeamStalker/main/firmware/helper.h | 2 +- Firmware/BeamStalker/main/firmware/menu.cpp | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Firmware/BeamStalker/main/firmware/helper.h b/Firmware/BeamStalker/main/firmware/helper.h index 19e5dad..e560536 100644 --- a/Firmware/BeamStalker/main/firmware/helper.h +++ b/Firmware/BeamStalker/main/firmware/helper.h @@ -1,7 +1,7 @@ #ifndef HELPER_H #define HELPER_H -#define VERSION "v0.2.7.15" +#define VERSION "v0.2.7.16" #define ROW_SIZE 7 #define COLUMN_SIZE 7 #define SCREEN_WIDTH 128 diff --git a/Firmware/BeamStalker/main/firmware/menu.cpp b/Firmware/BeamStalker/main/firmware/menu.cpp index 8d4ad7e..d91c1b1 100644 --- a/Firmware/BeamStalker/main/firmware/menu.cpp +++ b/Firmware/BeamStalker/main/firmware/menu.cpp @@ -58,21 +58,23 @@ char *createHeaderLine(const char *menu_name) { return final; } -void serialMenu(struct menu Menu) { +void serialMenu(struct menu Menu, int selector) { printf ("-=%s=-\n",Menu.name); for (int i = 0; i < Menu.length; i++) { + if (selector == i) {printf (">");} + if (selector == i) {printf (" ");} printf ("%d - %s\n", i, Menu.elements[i].name); if (Menu.elements[i].type == 1) { for (int j = 0; j < Menu.elements[i].length; j++) { - printf (" - %d%d: %s\n",i,j, Menu.elements[i].options[j]); + printf (" -< %d%d: %s\n",i,j, Menu.elements[i].options[j]); } } } } void drawMenu(struct menu Menu, int selector) { - serialMenu(Menu); + serialMenu(Menu, selector); char fullMenuName[50]; sprintf(fullMenuName, "%s",createHeaderLine(Menu.name)); From ada161ae8ff59d04d5e797d2b2f32d05643ff412 Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 20:32:12 +0100 Subject: [PATCH 03/12] fixed build.sh copy sdkconfig location --- Firmware/BeamStalker/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Firmware/BeamStalker/build.sh b/Firmware/BeamStalker/build.sh index 88935ec..afaddad 100755 --- a/Firmware/BeamStalker/build.sh +++ b/Firmware/BeamStalker/build.sh @@ -10,6 +10,8 @@ for board in $(ls ./boards); version=$(grep VERSION main/firmware/helper.h | awk -F'"' '{print $2}') cp ./boards/$config_file sdkconfig + cp ./boards/$config_file sdkconfig.defaults + idf.py build mv ./build/BeamStalker.bin ./bin/BeamStalker-$version-$board_name.bin idf.py fullclean From fd82c76a97dd6a1a8378d6dc58fd332912397dab Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 20:39:59 +0100 Subject: [PATCH 04/12] fixed build.sh set target mcu --- Firmware/BeamStalker/build.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Firmware/BeamStalker/build.sh b/Firmware/BeamStalker/build.sh index afaddad..6f929fd 100755 --- a/Firmware/BeamStalker/build.sh +++ b/Firmware/BeamStalker/build.sh @@ -8,6 +8,9 @@ for board in $(ls ./boards); config_file=$board board_name=${board##*.} version=$(grep VERSION main/firmware/helper.h | awk -F'"' '{print $2}') + mcu=$(grep "CONFIG_IDF_TARGET" boards/sdkconfig.M5Cardputer | awk -F'"' '{print $2}') + + idf.py set-target $mcu cp ./boards/$config_file sdkconfig cp ./boards/$config_file sdkconfig.defaults From 119e6fa2065ddd43f5aea6179fa8496082fef902 Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 20:52:06 +0100 Subject: [PATCH 05/12] updated action to use matrix for cross compile --- .github/workflows/build-firmware.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-firmware.yml b/.github/workflows/build-firmware.yml index 34096bc..2628edf 100644 --- a/.github/workflows/build-firmware.yml +++ b/.github/workflows/build-firmware.yml @@ -7,8 +7,14 @@ on: jobs: build: - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + idf_target: + - esp32 + - esp32s3 + runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 @@ -20,5 +26,5 @@ jobs: with: command: /app/${{ github.repository }}/patch-esp-idf.sh && /app/${{ github.repository }}/Firmware/BeamStalker/build.sh esp_idf_version: v4.4 - target: esp32s3 # Currently we only build for M5Cardputer (so esp32s3) + target: ${{ matrix.idf_target }} path: 'Firmware/BeamStalker' From dcf14fb6065687cc53055e0c910ce5f7970957c7 Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 20:55:31 +0100 Subject: [PATCH 06/12] updated action to use matrix for cross compile --- .github/workflows/build-firmware.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-firmware.yml b/.github/workflows/build-firmware.yml index 2628edf..46436a1 100644 --- a/.github/workflows/build-firmware.yml +++ b/.github/workflows/build-firmware.yml @@ -28,3 +28,4 @@ jobs: esp_idf_version: v4.4 target: ${{ matrix.idf_target }} path: 'Firmware/BeamStalker' + continue-on-error: true From 28dfb828919b170ccd9ff08daaf7cbcb7017ea9b Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 20:58:32 +0100 Subject: [PATCH 07/12] got rid of set -e in build sh to not exit on fail --- Firmware/BeamStalker/build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Firmware/BeamStalker/build.sh b/Firmware/BeamStalker/build.sh index 6f929fd..032cfb9 100755 --- a/Firmware/BeamStalker/build.sh +++ b/Firmware/BeamStalker/build.sh @@ -1,8 +1,9 @@ #!/bin/bash -set -e set -x +ls /AAAAAAAAA/DDLSM + for board in $(ls ./boards); do config_file=$board From 466c0c5fcb78b5f9130f07d5c770dc5df8a1c1ee Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 21:10:44 +0100 Subject: [PATCH 08/12] got the -e back cause, it's good to know when breaking, but added check for $ESP_TARGET --- Firmware/BeamStalker/build.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Firmware/BeamStalker/build.sh b/Firmware/BeamStalker/build.sh index 032cfb9..c93c160 100755 --- a/Firmware/BeamStalker/build.sh +++ b/Firmware/BeamStalker/build.sh @@ -1,8 +1,7 @@ #!/bin/bash set -x - -ls /AAAAAAAAA/DDLSM +set -e for board in $(ls ./boards); do @@ -11,6 +10,13 @@ for board in $(ls ./boards); version=$(grep VERSION main/firmware/helper.h | awk -F'"' '{print $2}') mcu=$(grep "CONFIG_IDF_TARGET" boards/sdkconfig.M5Cardputer | awk -F'"' '{print $2}') + if [ -z "$IDF_TARGET" ]; then + echo "IDF_TARGET is not set. Compiling anyway..." + elif [ "$IDF_TARGET" != "$mcu" ]; then + echo "IDF_TARGET ($IDF_TARGET) does not match MCU ($mcu). Next candidate" + break + fi + idf.py set-target $mcu cp ./boards/$config_file sdkconfig From bc605b4c30204338cfa9087c6c6aa9414d9fd77f Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 21:16:05 +0100 Subject: [PATCH 09/12] break to continue --- Firmware/BeamStalker/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/BeamStalker/build.sh b/Firmware/BeamStalker/build.sh index c93c160..53a18ad 100755 --- a/Firmware/BeamStalker/build.sh +++ b/Firmware/BeamStalker/build.sh @@ -14,7 +14,7 @@ for board in $(ls ./boards); echo "IDF_TARGET is not set. Compiling anyway..." elif [ "$IDF_TARGET" != "$mcu" ]; then echo "IDF_TARGET ($IDF_TARGET) does not match MCU ($mcu). Next candidate" - break + continue fi idf.py set-target $mcu From 7be74eecca21d9f17991fad8a2442d2199a8670d Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 21:24:25 +0100 Subject: [PATCH 10/12] fix dumb hardcoded file link --- Firmware/BeamStalker/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/BeamStalker/build.sh b/Firmware/BeamStalker/build.sh index 53a18ad..4a73390 100755 --- a/Firmware/BeamStalker/build.sh +++ b/Firmware/BeamStalker/build.sh @@ -8,7 +8,7 @@ for board in $(ls ./boards); config_file=$board board_name=${board##*.} version=$(grep VERSION main/firmware/helper.h | awk -F'"' '{print $2}') - mcu=$(grep "CONFIG_IDF_TARGET" boards/sdkconfig.M5Cardputer | awk -F'"' '{print $2}') + mcu=$(grep "CONFIG_IDF_TARGET" boards/$board | awk -F'"' '{print $2}') if [ -z "$IDF_TARGET" ]; then echo "IDF_TARGET is not set. Compiling anyway..." From ebf93fe8d50797ae3816402729a59d75795856d9 Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 21:27:42 +0100 Subject: [PATCH 11/12] added back error failing to action --- .github/workflows/build-firmware.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-firmware.yml b/.github/workflows/build-firmware.yml index 46436a1..2628edf 100644 --- a/.github/workflows/build-firmware.yml +++ b/.github/workflows/build-firmware.yml @@ -28,4 +28,3 @@ jobs: esp_idf_version: v4.4 target: ${{ matrix.idf_target }} path: 'Firmware/BeamStalker' - continue-on-error: true From 421b1efcb7f22911e6dc5dbf0646ba5256e0194f Mon Sep 17 00:00:00 2001 From: Rick Astley Date: Wed, 8 Jan 2025 21:31:28 +0100 Subject: [PATCH 12/12] hoping the hell out of it --- .github/workflows/build-and-release.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 1fd12b0..476e07b 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -7,6 +7,13 @@ on: jobs: build-and-release: + strategy: + fail-fast: false + matrix: + idf_target: + - esp32 + - esp32s3 + runs-on: ubuntu-latest steps: @@ -20,7 +27,7 @@ jobs: with: command: /app/${{ github.repository }}/patch-esp-idf.sh && /app/${{ github.repository }}/Firmware/BeamStalker/build.sh esp_idf_version: v4.4 - target: esp32s3 # Currently we only build for M5Cardputer (so esp32s3) + target: ${{ matrix.idf_target }} path: 'Firmware/BeamStalker' - name: Set name and tag_name