Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 29b3e0a

Browse files
authored
feat: complete vendor integration, edge modules, ADR-042 CHCI (ruvnet#110)
feat: complete vendor integration, edge modules, ADR-042 CHCI
2 parents 407b46b + 3b74798 commit 29b3e0a

283 files changed

Lines changed: 91283 additions & 1295 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/firmware-ci.yml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
name: Firmware CI
2+
3+
on:
4+
push:
5+
paths:
6+
- 'firmware/**'
7+
- '.github/workflows/firmware-ci.yml'
8+
pull_request:
9+
paths:
10+
- 'firmware/**'
11+
- '.github/workflows/firmware-ci.yml'
12+
13+
jobs:
14+
build:
15+
name: Build ESP32-S3 Firmware
16+
runs-on: ubuntu-latest
17+
container:
18+
image: espressif/idf:v5.2
19+
20+
steps:
21+
- uses: actions/checkout@v4
22+
23+
- name: Build firmware
24+
working-directory: firmware/esp32-csi-node
25+
run: |
26+
. $IDF_PATH/export.sh
27+
idf.py set-target esp32s3
28+
idf.py build
29+
30+
- name: Verify binary size (< 950 KB gate)
31+
working-directory: firmware/esp32-csi-node
32+
run: |
33+
BIN=build/esp32-csi-node.bin
34+
SIZE=$(stat -c%s "$BIN")
35+
MAX=$((950 * 1024))
36+
echo "Binary size: $SIZE bytes ($(( SIZE / 1024 )) KB)"
37+
echo "Size limit: $MAX bytes (950 KB — includes Tier 3 WASM runtime)"
38+
if [ "$SIZE" -gt "$MAX" ]; then
39+
echo "::error::Firmware binary exceeds 950 KB size gate ($SIZE > $MAX)"
40+
exit 1
41+
fi
42+
echo "Binary size OK: $SIZE <= $MAX"
43+
44+
- name: Verify flash image integrity
45+
working-directory: firmware/esp32-csi-node
46+
run: |
47+
ERRORS=0
48+
BIN=build/esp32-csi-node.bin
49+
50+
# Check binary exists and is non-empty.
51+
if [ ! -s "$BIN" ]; then
52+
echo "::error::Binary not found or empty"
53+
exit 1
54+
fi
55+
56+
# Check partition table magic (0xAA50 at offset 0).
57+
PT=build/partition_table/partition-table.bin
58+
if [ -f "$PT" ]; then
59+
MAGIC=$(xxd -l2 -p "$PT")
60+
if [ "$MAGIC" != "aa50" ]; then
61+
echo "::warning::Partition table magic mismatch: $MAGIC (expected aa50)"
62+
ERRORS=$((ERRORS + 1))
63+
fi
64+
fi
65+
66+
# Check bootloader exists.
67+
BL=build/bootloader/bootloader.bin
68+
if [ ! -s "$BL" ]; then
69+
echo "::warning::Bootloader binary missing or empty"
70+
ERRORS=$((ERRORS + 1))
71+
fi
72+
73+
# Verify non-zero data in binary (not all 0xFF padding).
74+
NONZERO=$(xxd -l 1024 -p "$BIN" | tr -d 'f' | wc -c)
75+
if [ "$NONZERO" -lt 100 ]; then
76+
echo "::error::Binary appears to be mostly padding (non-zero chars: $NONZERO)"
77+
ERRORS=$((ERRORS + 1))
78+
fi
79+
80+
if [ "$ERRORS" -gt 0 ]; then
81+
echo "::warning::Flash image verification completed with $ERRORS warning(s)"
82+
else
83+
echo "Flash image integrity verified"
84+
fi
85+
86+
- name: Check QEMU ESP32-S3 support status
87+
run: |
88+
echo "::notice::ESP32-S3 QEMU support is experimental in ESP-IDF v5.4. "
89+
echo "Full smoke testing requires QEMU 8.2+ with xtensa-esp32s3 target."
90+
echo "See: https://github.com/espressif/qemu/wiki"
91+
92+
- name: Upload firmware artifact
93+
uses: actions/upload-artifact@v4
94+
with:
95+
name: esp32-csi-node-firmware
96+
path: |
97+
firmware/esp32-csi-node/build/esp32-csi-node.bin
98+
firmware/esp32-csi-node/build/bootloader/bootloader.bin
99+
firmware/esp32-csi-node/build/partition_table/partition-table.bin
100+
retention-days: 30

.gitignore

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
1-
# Local machine configuration (not shared)
1+
# Local Claude config (contains WiFi credentials and machine-specific paths)
22
CLAUDE.local.md
33

44
# ESP32 firmware build artifacts and local config (contains WiFi credentials)
55
firmware/esp32-csi-node/build/
66
firmware/esp32-csi-node/sdkconfig
77
firmware/esp32-csi-node/sdkconfig.defaults
88
firmware/esp32-csi-node/sdkconfig.old
9+
# Downloaded WASM3 source (fetched at configure time)
10+
firmware/esp32-csi-node/components/wasm3/wasm3-src/
11+
12+
# NVS partition images and CSVs (contain WiFi credentials)
13+
nvs.bin
14+
nvs_config.csv
15+
nvs_provision.bin
16+
17+
# Working artifacts that should not land in root
18+
/*.wasm
19+
/esp32_*.txt
20+
/serial_error.txt
921

1022
# Byte-compiled / optimized / DLL files
1123
__pycache__/

README.md

Lines changed: 472 additions & 271 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)