Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
cf6d72f
Add board JSON configs for ESP-WROOM-32 and ESP32-S3
Aryann019x Apr 1, 2026
3690398
Add esp-wroom32-ili9341 config
Aryann019x Apr 1, 2026
7b567a3
Add esp-wroom32-ili9341 interface
Aryann019x Apr 1, 2026
36dbb04
Add esp-wroom32-ili9341 pin definitions
Aryann019x Apr 1, 2026
98c77a3
Add esp-wroom32-st7789 board config
Aryann019x Apr 1, 2026
2047f59
Add esp-wroom32-st7789 interface
Aryann019x Apr 1, 2026
71d188b
Add esp-wroom32-st7789 pin definitions
Aryann019x Apr 1, 2026
cf9125c
Add esp32s3-st7789 board config
Aryann019x Apr 1, 2026
3b0480f
Add esp32s3-st7789 interface
Aryann019x Apr 1, 2026
b4be243
Add esp32s3-st7789 pin definitions
Aryann019x Apr 1, 2026
b44d8a3
Add includes for new boards
Aryann019x Apr 1, 2026
1b776a4
Add includes for new board definitions
Aryann019x Apr 1, 2026
58e92a6
Add new board environments
Aryann019x Apr 1, 2026
b5442b1
Merge branch 'main' into new-board-support
Aryann019x Apr 4, 2026
0363545
Merge branch 'dev' into new-board-support
bmorcelli Apr 16, 2026
43572f9
Add pins_arduino.h for ESP32S3 ILI9341 board
Aryann019x May 3, 2026
0a9df55
Add GPIO and touchscreen initialization functions
Aryann019x May 3, 2026
b5960ba
Add PlatformIO configuration for ESP32S3 ILI9341
Aryann019x May 3, 2026
1fa6bc2
Create esp32s3_ili9341_wiring.png
Aryann019x May 3, 2026
a96780a
Add wiring diagram for ESP32-S3 ILI9341
Aryann019x May 3, 2026
c0fb463
Add wiring guide for ESP32-S3 and ILI9341 display
Aryann019x May 3, 2026
6cf83f3
Add ESP32-S3 ILI9341 board configuration
Aryann019x May 3, 2026
a3b517a
Add includes for ESP32S3 display pinout headers
Aryann019x May 3, 2026
c5497d2
Add wiring guide for ESP32-S3 and ST7789 display
Aryann019x May 3, 2026
2fb82ed
Create esp32s3_st7789_wiring.png
Aryann019x May 3, 2026
396d524
Add wiring diagram for ESP32-S3 ST7789 board
Aryann019x May 3, 2026
d99617c
Add wiring guide for ESP-WROOM32 and ST7789 display
Aryann019x May 3, 2026
840d500
Create diagrams
Aryann019x May 3, 2026
523b676
Delete boards/esp-wroom32-st7789/diagrams
Aryann019x May 3, 2026
1bf5baf
Create espwroom32_st7789_wiring.png
Aryann019x May 3, 2026
c19dd4c
Add wiring diagram for ESP-WROOM-32 ST7789
Aryann019x May 3, 2026
5f8a837
Add wiring guide for ESP-WROOM32 and ILI9341 display
Aryann019x May 3, 2026
7124d42
Create espwroom32_ili9341_wiring.png
Aryann019x May 3, 2026
1917c34
Add wiring diagram for ESP-WROOM-32 ILI9341
Aryann019x May 3, 2026
915b14d
Add configuration for ST7789 display and peripherals
Aryann019x May 3, 2026
645cc89
Improve BLE Spam module
Doominator1 May 14, 2026
8f118e7
Improve BLE Spam module - Apple
Doominator1 May 14, 2026
925ad35
Improve BLE Spam module - Apple
Doominator1 May 14, 2026
bd44b47
Fix footer height adjustments in BLE spam module
Doominator1 May 14, 2026
ef35ef8
Re-add iOS 17 crash, add BLE beacon spam, add Custom Swift Pair naming
Doominator1 May 15, 2026
3b67e30
Add better Advertisement packets (feat. @MarlinSchuck)
Doominator1 May 15, 2026
a2827a0
Slight adjustment to BLE beacon presets
Doominator1 May 15, 2026
9d0398e
Adjust Maximum Packet size for BLE Beacon names
Doominator1 May 15, 2026
c55931b
Fix text width causing build failures on esp32-c5
Doominator1 May 16, 2026
264b255
fix(HeavyButter): upgrade App Store from HTTP to HTTPS
Jun 8, 2026
f35163d
Merge branch 'main' into new-board-support
Aryann019x Jun 8, 2026
22a103c
Merge pull request #2518 from r13xr13/fix/https-appstore
pr3y Jun 11, 2026
7d49f04
Add Elecrow CrowPanel Advance 3.5" (ESP32-S3) board support
firch43-cyber Jun 12, 2026
651980d
Merge pull request #2533 from firch43-cyber/add-elecrow-advance-35-s3
pr3y Jun 12, 2026
a496d77
fix(rf): prevent crash when opening options after Scan/Copy capture
augustoamaro Jun 12, 2026
eef00e2
NRF24 Not working fixed
Jun 13, 2026
762423f
fixed power-cycle radio on every mode switch
Jun 13, 2026
700807b
fix CH Hopper speed and display
Jun 13, 2026
db98317
fix power-cycle radio after config edit save
Jun 13, 2026
3949ac8
drive CE low on exit to fix NRF24 not found on re-entry
Jun 13, 2026
4393c05
Added an jam methods on CH hopper.
Jun 13, 2026
aafba19
apply configured PA level across CW jammer paths
Jun 13, 2026
be0cbb3
Merge pull request #2537 from 0xhim4ri-81x/main
pr3y Jun 13, 2026
e8547ef
Merge pull request #2535 from augustoamaro/fix/2477-rf-scan-rcswitch-…
pr3y Jun 13, 2026
538592e
elecrow-advance-35-s3 board add
pr3y Jun 13, 2026
3867eee
Merge pull request #2444 from Doominator1/dev
pr3y Jun 15, 2026
c72e9c2
fix build ble pr 2444
pr3y Jun 15, 2026
7839a7c
Fix nrf24, rollback to origins
bmorcelli Jun 21, 2026
86eb576
Restablish RF Jammer Limits, we are not Black hats
bmorcelli Jun 21, 2026
0bbd5c8
fix(webui): responsive layout for narrow screens (#2573)
Yoursel71 Jun 22, 2026
504e87b
fix(ethernet): make host port scan cancellable and bound per-port con…
Jun 23, 2026
5f55617
Enhanced BLE Spam (Apple iCloud Spoofing + Samsung Detection)Ble spam…
Ninja-jr Jun 23, 2026
f47a29e
fix(t-deck): correct swapped I2S BCLK/WCLK pins + enable NS4168 speak…
parsazolfaghar Jun 23, 2026
ece6f64
Merge pull request #2581 from Yoursel71/fix/hostinfo-portscan-cancel
bmorcelli Jun 23, 2026
473c325
Rf refactor (#2586)
bmorcelli Jun 23, 2026
61a6446
Deduplicated ir codes list (#2583)
Ninja-jr Jun 23, 2026
45e1ea8
feat(clock): persist software clock to NVS on boards without an RTC (…
parsazolfaghar Jun 26, 2026
c963e3a
ST25R pins setup
bmorcelli Jun 26, 2026
5518ecc
Reading tags
bmorcelli Jun 27, 2026
045171a
exit read
bmorcelli Jun 27, 2026
9ff0ef5
nonblocking mode
bmorcelli Jun 27, 2026
65e18d3
primeira etapa
bmorcelli Jun 28, 2026
2e81c90
Device type: NTAG215
bmorcelli Jun 28, 2026
fe0c152
fix apple packets in ble_spam.cpp
Doominator1 Jun 28, 2026
1996b41
remove dead code/legacy ble packets from ble_spam.cpp
Doominator1 Jun 28, 2026
35f6b38
Amiibo emu!
bmorcelli Jun 28, 2026
347669a
Fix ble_spam.cpp
Doominator1 Jun 29, 2026
1f94c13
other emulations
bmorcelli Jun 29, 2026
1edd514
Merge pull request #2598 from Doominator1/dev
bmorcelli Jun 29, 2026
56065a8
Ble sniffer and ble suite improvements (#2589)
Ninja-jr Jun 29, 2026
79a5cd4
fix(nrf24): don't error "NRF24 pins undefined" when SPI+UART pins bot…
stonervpn-design Jun 29, 2026
708c5c8
feat(wifi): add Channel Analyzer and Jam Detect modules (#2578)
stonervpn-design Jun 29, 2026
412ef7e
Reverse Shell: WebSocket rework with real-time output (#2584)
Ninja-jr Jun 29, 2026
77e0a92
finish
bmorcelli Jun 29, 2026
ebe459e
Merge pull request #2599 from bmorcelli/support_ST25R3916
bmorcelli Jun 29, 2026
65d8435
fix build
bmorcelli Jun 29, 2026
9c94e72
Grrrr
bmorcelli Jun 29, 2026
284ae69
Merge branch 'main' into dev
bmorcelli Jun 30, 2026
babf422
Merge branch 'dev' into new-board-support
Aryann019x Jun 30, 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: 0 additions & 1 deletion .codex_tmp/LilyGoLib
Submodule LilyGoLib deleted from a64fc6
1 change: 0 additions & 1 deletion .codex_tmp/NFC-RFAL-fork
Submodule NFC-RFAL-fork deleted from 7bde45
1 change: 0 additions & 1 deletion .codex_tmp/ST25R3916-fork
Submodule ST25R3916-fork deleted from 0c8e00
1 change: 1 addition & 0 deletions .github/workflows/buil_parallel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ jobs:
- { env: "lilygo-t-lora-pager", family: "ESP32-S3",}
- { env: "elecrow-24B", family: "ESP32",}
- { env: "elecrow-28B", family: "ESP32",}
- { env: "elecrow-advance-35-s3", family: "ESP32-S3",}
- { env: "smoochiee-board", family: "ESP32-S3",}
- { env: "reaper", family: "ESP32-S3",}
- { env: "Phantom_S024R", family: "ESP32",}
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
.vscode/launch.json
.vscode/extensions.json
.vscode/ipch
.codex_tmp
.claude
Bruce3_*.bin
bruce.conf
_*.sh
Expand All @@ -20,4 +22,4 @@ lib/mquickjs_headers/mqjs_stdlib_generator
lib/mquickjs_headers/mqjs_stdlib_generator.exe
.github/agents/Bruce-AI.agent.md
.idea
.ai
.ai
6 changes: 3 additions & 3 deletions 2.0_road_path.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ the objective of 2.0 is changing the Framework to Arduino-ESP32 v3.+, to be able

### RF
- [] Rolljam
- Decode/Encode Protocols
- [x] Decode/Encode Protocols

### NRF24
- [] mouse jacking
- [] keyboard jacking
- [x] mouse jacking
- [x] keyboard jacking

### Interpreter
- Possibility to access I2C, SPI, UART buses
Expand Down
100 changes: 100 additions & 0 deletions THIRD_PARTY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Third-party code and attribution

Bruce is licensed under the **GNU Affero General Public License v3.0 or later**
(AGPL-3.0-or-later); see [`LICENSE`](LICENSE).

Parts of Bruce's RF / sub-GHz module (`src/modules/rf/`) are **derived from**
other free-software projects. Those portions were modified to fit Bruce's native
RMT engine, data model and UI, but remain the work of their original authors and
are used under their respective licenses. Each affected source file carries a
header pointing back to this document.

> This file documents attribution for copyleft compliance. It is not legal
> advice; if you redistribute Bruce, review these obligations yourself.

## Sub-GHz protocols / KeeLoq

### Flipper Zero firmware — GPL-3.0-or-later
- Upstream: <https://github.com/flipperdevices/flipperzero-firmware>
- License: GNU General Public License v3.0
- Copyright (C) Flipper Devices Inc. and the flipperzero-firmware contributors.
- Used by: the KeeLoq block cipher, the manufacturer "learning" key-derivation
schemes, the KeeLoq frame decoder/encoder framing, the `.sub` keystore format
and protocol identities.
Files: `src/modules/rf/protocols/rf_keeloq.{h,cpp}`,
`src/modules/rf/protocols/rf_decoder.{h,cpp}`,
`src/modules/rf/protocols/rf_encoder.{h,cpp}`.

### Momentum firmware — GPL-3.0-or-later
- Upstream: <https://github.com/Next-Flip/Momentum-Firmware>
- License: GNU General Public License v3.0
- Copyright (C) the Momentum Firmware contributors.
- Used by: the extended KeeLoq manufacturer list and the model for the
encrypted built-in keystore (`keeloq_mfcodes`), which Bruce mirrors by
shipping an AES-encrypted keystore decrypted at runtime as a fallback.
Files: `src/modules/rf/protocols/rf_keeloq.cpp`,
`src/modules/rf/protocols/rf_keeloq_mfcodes_data.h` (generated),
`tools/gen_mfcodes.py`.

> Note: the KeeLoq manufacturer keys themselves originate from the respective
> device manufacturers. They are proprietary key material; their redistribution
> is a separate concern from the GPL attribution above and is the redistributor's
> responsibility to evaluate.

### rc-switch (RCSwitch) — LGPL-2.1-or-later
- Upstream: <https://github.com/sui77/rc-switch>
- License: GNU Lesser General Public License v2.1
- Copyright (C) 2011 Suat Özgür and the rc-switch contributors.
- Used by: the classic OOK protocol timing table (the numbered `RcSwitch_N`
protocols and the factor-based `{high,low}×te` model) and the
capture/decode and send state machines that Bruce re-implemented over its
native RMT engine.
Files: `src/modules/rf/protocols/rf_registry.{h,cpp}`,
`src/modules/rf/protocols/rf_decoder.{h,cpp}`,
`src/modules/rf/protocols/rf_encoder.{h,cpp}`.

## NFC / RFID (ST25R3916)

The ST25R3916 NFC front-end driver (`src/modules/rfid/ST25R3916.{h,cpp}`) is a
native re-implementation over a fork of ST's RFAL stack, but several parts —
particularly the card-emulation (listen / passive-target) path — were **derived
from** the Momentum firmware, itself a fork of the Flipper Zero firmware. Those
portions were rewritten to drive the ST25R3916 register interface directly
(the RFAL fork's high-level `rfalListenStart` is a stub), but the register
sequences and protocol state machines follow the upstream NFC HAL/stack.

### Momentum firmware (Flipper Zero NFC stack) — GPL-3.0-or-later
- Upstream: <https://github.com/Next-Flip/Momentum-Firmware>
- Based on: <https://github.com/flipperdevices/flipperzero-firmware>
- License: GNU General Public License v3.0
- Copyright (C) the Momentum Firmware and flipperzero-firmware contributors.
- Used by:
- The NFC-A listen / passive-target register configuration (MODE.targ +
`om_targ_nfca`, PT memory load of UID/ATQA/SAK, OP_CONTROL / PASSIVE_TARGET
/ MASK_RX_TIMER setup and the target-mode IRQ mask), which follows the
Flipper `furi_hal_nfc` sequence on the same ST25R chip family.
- The MIFARE Classic listener-side Crypto1 emulation: authentication
handshake, manual-parity TX/RX handling and the encrypted READ/WRITE
service from the loaded dump.
- The MIFARE Ultralight / NTAG21x listener command handling — `GET_VERSION`,
`READ_SIG` (ECC signature), `READ_CNT`, `PWD_AUTH`/`PACK` and the amiibo
(NTAG215, UID-derived password, `80 80` PACK) behaviour.
- The FeliCa (NFC-F) and Type 4 Tag (ISO-DEP / NDEF) emulation responders.
Files: `src/modules/rfid/ST25R3916.cpp`.

### Crypto1 cipher (Crapto1 / Proxmark lineage) — public reimplementation
- References: "Dismantling MIFARE Classic" (Garcia et al., 2008) and the public
Crapto1 reference; the same algorithm is used by the Flipper / Momentum and
Proxmark NFC stacks.
- Used by: the compact Crypto1 stream cipher that backs both reader-side
MIFARE Classic auth/read/write and the listener-side emulation, since the
RFAL fork has no native Crypto1 support.
Files: `src/modules/rfid/crypto1.{h,cpp}`.

## Bundled libraries (linked dependencies)

Fetched via PlatformIO `lib_deps` (see `platformio.ini`); each keeps its own
license. Notably the CC1101 radio driver:

- **SmartRC-CC1101-Driver-Lib** (ELECHOUSE driver fork) —
<https://github.com/bmorcelli/SmartRC-CC1101-Driver-Lib>
6 changes: 5 additions & 1 deletion boards/ESP32-C5-tft/interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,12 @@ void InputHandler(void) {
if (anyPressed && wakeUpScreen()) return;

AnyKeyPress = anyPressed;
if (upPressed && dwPressed) {
EscPress = true;
return;
}
PrevPress = upPressed;
EscPress = upPressed && dwPressed;

NextPress = dwPressed;
SelPress = selPressed;
#endif
Expand Down
42 changes: 42 additions & 0 deletions boards/_boards_json/esp-wroom32-ili9341.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"build": {
"arduino": {
"ldscript": "esp32_out.ld"
},
"core": "esp32",
"extra_flags": [
"-DESP_WROOM32_ILI9341",
"-DARDUINO_ESP32_DEV",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1"
],
"f_cpu": "240000000L",
"f_flash": "40000000L",
"flash_mode": "dio",
"mcu": "esp32",
"variant": "pinouts"
},
"connectivity": [
"wifi",
"bluetooth",
"ethernet",
"can"
],
"debug": {
"openocd_board": "esp-wroom-32.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "ESP-WROOM-32 with ILI9341 2.4 TFT",
"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": "Espressif"
}
42 changes: 42 additions & 0 deletions boards/_boards_json/esp-wroom32-st7789.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"build": {
"arduino": {
"ldscript": "esp32_out.ld"
},
"core": "esp32",
"extra_flags": [
"-DESP_WROOM32_ST7789",
"-DARDUINO_ESP32_DEV",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1"
],
"f_cpu": "240000000L",
"f_flash": "40000000L",
"flash_mode": "dio",
"mcu": "esp32",
"variant": "pinouts"
},
"connectivity": [
"wifi",
"bluetooth",
"ethernet",
"can"
],
"debug": {
"openocd_board": "esp-wroom-32.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "ESP-WROOM-32 with ST7789 2.8 TFT Touch",
"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": "Espressif"
}
52 changes: 52 additions & 0 deletions boards/_boards_json/esp32s3-ili9341.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"build": {
"arduino": {
"ldscript": "esp32s3_out.ld",
"partitions": "default_8MB.csv"
},
"core": "esp32",
"extra_flags": [
"-DESP32S3_ILI9341",
"-DARDUINO_USB_MODE=1",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1",
"-DARDUINO_USB_CDC_ON_BOOT"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "pinouts"
},
"connectivity": [
"bluetooth",
"wifi"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "ESP32-S3 ILI9341 Touchscreen (8MB Flash)",
"upload": {
"flash_size": "8MB",
"maximum_ram_size": 327680,
"maximum_size": 8388608,
"require_upload_port": true,
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html",
"vendor": "Espressif"
}
52 changes: 52 additions & 0 deletions boards/_boards_json/esp32s3-st7789.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"build": {
"arduino": {
"ldscript": "esp32s3_out.ld",
"partitions": "default_8MB.csv"
},
"core": "esp32",
"extra_flags": [
"-DESP32S3_ST7789",
"-DARDUINO_USB_MODE=1",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1",
"-DARDUINO_USB_CDC_ON_BOOT"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "pinouts"
},
"connectivity": [
"bluetooth",
"wifi"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "ESP32-S3 ST7789 Touchscreen (8MB Flash)",
"upload": {
"flash_size": "8MB",
"maximum_ram_size": 327680,
"maximum_size": 8388608,
"require_upload_port": true,
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html",
"vendor": "Espressif"
}
Loading