Skip to content
Merged

1.15 #2473

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
545fc1b
Add read() method to SerialDevice and BLESerialService
emericklaw Feb 28, 2026
e523f0b
feat(iButton): enhance UI/UX and add file save/load support
Mar 16, 2026
0b94414
Add new board nm-cyd-c5, tested with nm-rf-hat.
RockBase-iot Mar 18, 2026
6c3c921
Improvements
wcd6 Mar 22, 2026
3c6bd6d
Bigger Apps Icon
wcd6 Mar 22, 2026
e9f9078
Better NRF24 and RF
wcd6 Mar 23, 2026
eea886b
Better Icons TAB
wcd6 Mar 23, 2026
6978d09
Fixed Only Text WIFI UI
wcd6 Mar 23, 2026
87a6b2f
Change of Apps Icon
wcd6 Mar 23, 2026
7e47015
Upgraded App Store with config destination of files, chage Apps icon …
wcd6 Mar 23, 2026
37e0ee7
Organized menu sections & merged connect in files section
wcd6 Mar 23, 2026
1538a55
Changes in WebUI
wcd6 Mar 23, 2026
d3e579e
Delete icons.txt
wcd6 Mar 23, 2026
4c1921a
Delete build_out.txt
wcd6 Mar 23, 2026
566003e
Changed Ethernet Icon
wcd6 Mar 23, 2026
a942cf1
Changed Ethernet Icon
wcd6 Mar 23, 2026
0fb02d0
Refactor EthernetMenu::drawIcon for clarity and structure
wcd6 Mar 23, 2026
4f54a6f
Moved Ethernet Icon
wcd6 Mar 23, 2026
c92040c
Merge pull request #2290 from RockBase-iot/nm-cyd-c5
pr3y Mar 23, 2026
fa0c477
Merge pull request #2288 from delfer/ibutton-files
bmorcelli Mar 25, 2026
a4193bf
Update main_menu.h
wcd6 Mar 27, 2026
8586994
Remove appStoreMenu from main menu in non-lite builds
wcd6 Mar 27, 2026
618bf33
Delete src/core/menu_items/AppStoreMenu.cpp
wcd6 Mar 27, 2026
48faf16
Delete src/core/menu_items/AppStoreMenu.h
wcd6 Mar 27, 2026
33a944d
Add USB file transfer support
emericklaw Mar 27, 2026
a8c2cd5
add function that checks if folder exists
Gosheto1234 Mar 31, 2026
f91afa4
revert small spaces
Gosheto1234 Mar 31, 2026
d2ee2ff
Add folderExists function declaration
Gosheto1234 Mar 31, 2026
227c2f8
🫡 fix overloaded bulk upload
lshaf Apr 1, 2026
4f9680b
Merge pull request #2333 from lshaf/dev
pr3y Apr 1, 2026
1e8adac
Merge pull request #2324 from emericklaw/app-store-serial
pr3y Apr 1, 2026
5960b93
BUILD] Add -include Arduino.h and patch library conflicts for dev bui…
ninja-jr-2 Apr 4, 2026
2795ad2
Merge branch 'main' into dev
bmorcelli Apr 4, 2026
4115825
Made the keyboard more intuitive (#2352)
Epickitrolaz Apr 4, 2026
7d736d3
fix(ui): auto-scale title font and fix wifi recover layout on small s…
pfefferle Apr 4, 2026
8f41d9d
fix NimBLE version to 2.5
bmorcelli Apr 5, 2026
3f7a341
Merge pull request #2332 from Gosheto1234/patch-10
pr3y Apr 5, 2026
467a49a
feat: add WDGoWars upload support for wardriving CSV files
Apr 9, 2026
a4fd5f7
feat: add API key hint in bruce.conf and validate key length
Apr 9, 2026
8187af4
update README.md to use new wiki
WERKuPL Apr 11, 2026
79695b7
Merge pull request #2376 from WERKuPL/WERKuPL-patch-1
pr3y Apr 12, 2026
dbfc282
Merge pull request #2369 from LOCOSP/feat/wdgwars-upload
bmorcelli Apr 16, 2026
ca10c73
Fix/m5sticks3 psram audio gif button (#2374)
PavelKivy Apr 16, 2026
2bdbe3b
remove Launcher CPlus1.1 from build
bmorcelli Apr 16, 2026
4293ebd
Add nm-cyd-c5 environment to build workflow
bmorcelli Apr 16, 2026
2702f38
Merge pull request #2312 from wcd6/dev
pr3y May 1, 2026
0306b74
config pins add pn532
May 1, 2026
69c1d01
Merge pull request #2417 from WERKuPL/pn532
pr3y May 2, 2026
72e752d
Add NetCut ARP Module for device management
ryocuy May 3, 2026
533579d
Create netcut.h for ARP poisoning and management
ryocuy May 3, 2026
71870be
Add NetCut option to WifiMenu
ryocuy May 3, 2026
7766abc
Simplify device restoration logic on exit
ryocuy May 3, 2026
2d11be1
fix(netcut): optimize bulk restoration for instant recovery
ryocuy May 3, 2026
1ffcf67
Merge pull request #2421 from ryocuy/main
pr3y May 4, 2026
033bee0
flto build
bmorcelli May 12, 2026
136ba22
elecrow boards
pr3y May 12, 2026
770fa72
elecrow boards on envs
pr3y May 12, 2026
5f7827f
elecrow to build
pr3y May 12, 2026
d632b6b
Fix boot loop caused by no scripts being found
emericklaw May 15, 2026
5f78c7c
Reinstate App Store download
emericklaw May 15, 2026
4ff2cd3
Formatting
emericklaw May 15, 2026
cf8fe76
Remove Apps Menu - duplicate of the existing JS Interpreter menu
emericklaw May 15, 2026
ee0f2cd
Reorder LED Effects to menu selection works
emericklaw May 15, 2026
991985d
Reduce potential buffer overflow situations
paazmaya May 15, 2026
ed76b05
Merge pull request #2446 from paazmaya/main
pr3y May 20, 2026
c5a6b31
re-enable deactivated builds
bmorcelli May 21, 2026
f827825
Adds DinMeter and Arduino-Nesso-N1
bmorcelli May 22, 2026
0927228
TCA8418 keyboard response improve
bmorcelli May 22, 2026
0411520
Fixed encoder overpolling
bmorcelli May 22, 2026
a985be3
SSH Client
bmorcelli May 23, 2026
f26eea4
Logging
bmorcelli May 23, 2026
f1aeb04
isDelPressed
bmorcelli May 23, 2026
a11db23
fix build
bmorcelli May 23, 2026
ec0dcc3
Fix autocomplete and log optout option
bmorcelli May 23, 2026
8e7121d
keyboard exit guards
bmorcelli May 23, 2026
92cde9f
Add IP Config for Evilportal
bmorcelli May 23, 2026
e9807ed
1.15
pr3y May 25, 2026
f439867
Add speed control to fire and disco
emericklaw May 25, 2026
65030e5
Merge pull request #2472 from emericklaw/misc-fixes
pr3y May 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .codex_tmp/LilyGoLib
Submodule LilyGoLib added at a64fc6
1 change: 1 addition & 0 deletions .codex_tmp/NFC-RFAL-fork
Submodule NFC-RFAL-fork added at 7bde45
1 change: 1 addition & 0 deletions .codex_tmp/ST25R3916-fork
Submodule ST25R3916-fork added at 0c8e00
7 changes: 6 additions & 1 deletion .github/workflows/buil_parallel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
fail-fast: false
matrix:
board:
- { env: "arduino-nesso-n1", family: "ESP32-C6",}
- { env: "m5stack-cardputer", family: "ESP32-S3",}
- { env: "m5stack-sticks3", family: "ESP32-S3",}
- { env: "m5stack-cplus2", family: "ESP32",}
Expand All @@ -26,9 +27,11 @@ jobs:
- { env: "m5stack-core16mb", family: "ESP32",}
- { env: "m5stack-core4mb", family: "ESP32",}
- { env: "m5stack-cores3", family: "ESP32-S3",}
- { env: "m5stack-dinmeter", family: "ESP32-S3",}
- { env: "esp32-s3-devkitc-1", family: "ESP32-S3",}
- { env: "esp32-c5", family: "ESP32-C5",}
- { env: "esp32-c5-tft", family: "ESP32-C5",}
- { env: "nm-cyd-c5", family: "ESP32-C5",}
- { env: "CYD-2432S028", family: "ESP32",}
- { env: "CYD-2USB", family: "ESP32",}
- { env: "CYD-2432W328C", family: "ESP32",}
Expand All @@ -41,7 +44,7 @@ jobs:
- { env: "LAUNCHER_CYD-2USB", family: "ESP32",}
- { env: "LAUNCHER_CYD-2432W328C", family: "ESP32",}
- { env: "LAUNCHER_CYD-3248S035R", family: "ESP32",}
# - { env: "LAUNCHER_CYD-3248S035C", family: "ESP32",}
- { env: "LAUNCHER_CYD-3248S035C", family: "ESP32",}
- { env: "lilygo-t-embed-cc1101", family: "ESP32-S3",}
- { env: "lilygo-t-embed", family: "ESP32-S3",}
- { env: "lilygo-t-deck", family: "ESP32-S3",}
Expand All @@ -55,6 +58,8 @@ jobs:
- { env: "lilygo-t-display-ttgo", family: "ESP32",}
- { env: "lilygo-t-hmi", family: "ESP32-S3",}
- { env: "lilygo-t-lora-pager", family: "ESP32-S3",}
- { env: "elecrow-24B", family: "ESP32",}
- { env: "elecrow-28B", family: "ESP32",}
- { env: "smoochiee-board", family: "ESP32-S3",}
- { env: "reaper", family: "ESP32-S3",}
- { env: "Phantom_S024R", family: "ESP32",}
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@ docker-logs
lib/mquickjs_headers/mqjs_stdlib_generator
lib/mquickjs_headers/mqjs_stdlib_generator.exe
.github/agents/Bruce-AI.agent.md
.idea
.ai
217 changes: 108 additions & 109 deletions README.md

Large diffs are not rendered by default.

34 changes: 34 additions & 0 deletions boards/_boards_json/arduino-nesso-n1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"build": {
"core": "esp32",
"f_cpu": "160000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"mcu": "esp32c6",
"variant": "pinouts",
"extra_flags": [
"-DARDUINO_NESSO_N1"
]
},
"connectivity": [
"bluetooth",
"wifi"
],
"debug": {
"openocd_target": "esp32c6.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "Arduino Nesso-N1",
"upload": {
"flash_size": "16MB",
"maximum_ram_size": 327680,
"maximum_size": 16777216,
"require_upload_port": true,
"speed": 460800
},
"url": "https://store.arduino.cc/products/nesso-n1",
"vendor": "Arduino"
}
39 changes: 39 additions & 0 deletions boards/_boards_json/elecrow-esp32-24B.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"build": {
"arduino":{
"ldscript": "esp32_out.ld"
},
"core": "esp32",
"extra_flags": [
"-DELECROW_WROOM32",
"-DBOARD_HAS_PSRAM",
"-mfix-esp32-psram-cache-issue",
"-mfix-esp32-psram-cache-strategy=memw"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
"mcu": "esp32",
"variant": "pinouts"
},
"connectivity": [
"wifi",
"bluetooth",
"ethernet",
"can"
],
"frameworks": [
"arduino",
"espidf"
],
"name": "ELECROW 2.4R",
"upload": {
"flash_size": "4MB",
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
},
"url": "https://en.wikipedia.org/wiki/ESP32",
"vendor": "ELECROW"
}
49 changes: 49 additions & 0 deletions boards/_boards_json/m5stack-dinmeter.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"build": {
"arduino": {
"ldscript": "esp32s3_out.ld",
"partitions": "default_8MB.csv"
},
"core": "esp32",
"extra_flags": [
"-DARDUINO_M5STACK_DINMETER",
"-DARDUINO_USB_CDC_ON_BOOT",
"-DM5STACK",
"-DARDUINO_USB_MODE=1",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "pinouts"
},
"connectivity": [
"bluetooth",
"wifi"
],
"debug": {
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "M5Stack StickS3",
"upload": {
"flash_size": "8MB",
"maximum_ram_size": 327680,
"maximum_size": 8388608,
"require_upload_port": true,
"speed": 460800
},
"url": "https://docs.m5stack.com/en/core/StampS3",
"vendor": "M5Stack"
}
3 changes: 2 additions & 1 deletion boards/_boards_json/m5stack-sticks3.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
"build": {
"arduino": {
"ldscript": "esp32s3_out.ld",
"partitions": "default_8MB.csv"
"partitions": "default_8MB.csv",
"memory_type": "qio_opi"
},
"core": "esp32",
"extra_flags": [
Expand Down
113 changes: 113 additions & 0 deletions boards/arduino-nesso-n1/interface.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#include "core/powerSave.h"
#include "core/utils.h"
#include <M5Unified.h>
#include <interface.h>

constexpr uint32_t kBtnBDoublePressWindowMs = 270;
constexpr uint32_t kBtnBLongPressMs = 500;

/***************************************************************************************
** Function name: _setup_gpio()
** Location: main.cpp
** Description: initial setup for the device
***************************************************************************************/
void _setup_gpio() {
M5.begin(); // Need to test if SDCard inits with the new setup
bruceConfig.colorInverted = 0;
M5.BtnA.setDebounceThresh(8);
M5.BtnB.setDebounceThresh(8);
M5.BtnB.setHoldThresh(kBtnBLongPressMs);
}

/***************************************************************************************
** Function name: getBattery()
** location: display.cpp
** Description: Delivers the battery value from 1-100
***************************************************************************************/
int getBattery() {
int percent = 0;
percent = M5.Power.getBatteryLevel();
return (percent < 0) ? 0 : (percent >= 100) ? 100 : percent;
}

/*********************************************************************
** Function: setBrightness
** location: settings.cpp
** set brightness value
**********************************************************************/
void _setBrightness(uint8_t brightval) { M5.Display.setBrightness(brightval); }

/*********************************************************************
** Function: InputHandler
** Handles the variables PrevPress, NextPress, SelPress, AnyKeyPress and EscPress
**********************************************************************/
void InputHandler(void) {
static unsigned long tm = 0;
static uint32_t btnBFirstReleaseMs = 0;
static bool btnBWaitingSecondClick = false;
static bool btnBLongPressFired = false;
if (millis() - tm < 200 && !LongPress) return;
M5.update();

bool emitNext = false;
bool emitPrev = false;
bool emitEsc = false;
uint32_t now = millis();

auto t = M5.Touch.getDetail();
if (t.isPressed() || t.isHolding()) {
tm = millis();
if (wakeUpScreen()) return;

touchPoint.x = t.x;
touchPoint.y = t.y;
touchPoint.pressed = true;
touchHeatMap(touchPoint);
} else touchPoint.pressed = false;

bool btnAActive = M5.BtnA.isPressed() || M5.BtnA.isHolding();
bool btnBActive = M5.BtnB.isPressed() || M5.BtnB.isHolding();

if (M5.BtnB.wasPressed()) btnBLongPressFired = false;

if (btnBActive && !btnBLongPressFired && M5.BtnB.pressedFor(kBtnBLongPressMs)) {
btnBLongPressFired = true;
btnBWaitingSecondClick = false;
emitEsc = true;
}

if (M5.BtnB.wasReleased()) {
if (btnBLongPressFired) {
btnBLongPressFired = false;
} else if (btnBWaitingSecondClick && now - btnBFirstReleaseMs <= kBtnBDoublePressWindowMs) {
btnBWaitingSecondClick = false;
emitPrev = true;
} else {
btnBWaitingSecondClick = true;
btnBFirstReleaseMs = now;
}
}

if (btnBWaitingSecondClick && !btnBActive && now - btnBFirstReleaseMs > kBtnBDoublePressWindowMs) {
btnBWaitingSecondClick = false;
emitNext = true;
}

AnyKeyPress = btnAActive || btnBActive || btnBWaitingSecondClick || M5.BtnA.wasClicked() || emitNext ||
emitPrev || emitEsc;
if (!AnyKeyPress) return;

if ((btnAActive || btnBActive) && wakeUpScreen()) return;

if (M5.BtnA.wasClicked()) SelPress = true;
if (emitNext) NextPress = true;
if (emitPrev) PrevPress = true;
if (emitEsc) EscPress = true;
}

/*********************************************************************
** Function: powerOff
** location: mykeyboard.cpp
** Turns off the device (or try to)
**********************************************************************/
void powerOff() { M5.Power.powerOff(); }
30 changes: 30 additions & 0 deletions boards/arduino-nesso-n1/pins_arduino.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#ifndef Pins_Arduino_h
#define Pins_Arduino_h

#include "soc/soc_caps.h"
#include <stdint.h>
static const uint8_t TX = 16;
static const uint8_t RX = 17;

static const uint8_t SDA = 23;
static const uint8_t SCL = 22;

static const uint8_t SS = 18;
static const uint8_t MOSI = 19;
static const uint8_t MISO = 20;
static const uint8_t SCK = 21;

static const uint8_t A0 = 0;
static const uint8_t A1 = 1;
static const uint8_t A2 = 2;
static const uint8_t A3 = 3;
static const uint8_t A4 = 4;
static const uint8_t A5 = 5;
static const uint8_t A6 = 6;

// LP I2C Pins are fixed on ESP32-C6
#define WIRE1_PIN_DEFINED
static const uint8_t SDA1 = 6;
static const uint8_t SCL1 = 7;

#endif /* Pins_Arduino_h */
Loading
Loading