21 Commits

Author SHA1 Message Date
user
2e4fa30b84 ci: Remove deploy job (deploy locally instead)
All checks were successful
Lint & Build / Security Flaw Analysis (push) Successful in 16s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 28s
Lint & Build / Build Firmware (push) Successful in 2m58s
2026-02-05 23:46:37 +01:00
user
89e05bbb7e ci: Use absolute path for ESP-IDF on host runner
Some checks failed
Lint & Build / Security Flaw Analysis (push) Successful in 15s
Lint & Build / Secret Scanning (push) Successful in 6s
Lint & Build / C/C++ Static Analysis (push) Successful in 28s
Lint & Build / Deploy to ESP Fleet (push) Failing after 1s
Lint & Build / Build Firmware (push) Has been cancelled
2026-02-05 23:43:59 +01:00
user
f9d22cbe39 ci: Use curl/tar for deploy checkout (host has no git)
Some checks failed
Lint & Build / Security Flaw Analysis (push) Successful in 16s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 28s
Lint & Build / Build Firmware (push) Has been skipped
Lint & Build / Deploy to ESP Fleet (push) Failing after 1s
2026-02-05 23:29:52 +01:00
user
12fa03a2d5 feat: Default LED to quiet mode (off, solid on motion)
All checks were successful
Lint & Build / Security Flaw Analysis (push) Successful in 16s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 27s
Lint & Build / Build Firmware (push) Successful in 1m53s
Lint & Build / Deploy to ESP Fleet (push) Has been skipped
2026-02-05 23:27:13 +01:00
user
9e3038e85f ci: Run deploy on host with local HTTP server for OTA
All checks were successful
Lint & Build / Security Flaw Analysis (push) Successful in 16s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 28s
Lint & Build / Build Firmware (push) Successful in 1m53s
Lint & Build / Deploy to ESP Fleet (push) Has been skipped
2026-02-05 23:23:45 +01:00
user
de3e120c7e ci: Use Gitea release URL for OTA instead of local HTTP server
All checks were successful
Lint & Build / Security Flaw Analysis (push) Successful in 15s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 27s
Lint & Build / Build Firmware (push) Has been skipped
Lint & Build / Deploy to ESP Fleet (push) Successful in 4m24s
2026-02-05 23:14:06 +01:00
user
b65256fa45 feat: Add LED quiet mode (off normally, solid on motion)
LED command: LED [QUIET|AUTO]
- QUIET: LED off, turns solid on motion/presence detection, blinks on OTA
- AUTO: Original behavior (constant blink)

Persisted via NVS key 'led_quiet'.
2026-02-05 23:13:32 +01:00
user
a84abf03ca ci: Add security checks (secrets scan, config validation) 2026-02-05 23:02:46 +01:00
user
4da0679d4e ci: Skip build job on tag pushes (deploy rebuilds) 2026-02-05 23:00:10 +01:00
user
da9859571b ci: Remove shellcheck, run deploy in container with host network
Some checks failed
Lint & Build / Security Flaw Analysis (push) Successful in 16s
Lint & Build / Secret Scanning (push) Successful in 4s
Lint & Build / C/C++ Static Analysis (push) Successful in 27s
Lint & Build / Build Firmware (push) Successful in 2m41s
Lint & Build / Deploy to ESP Fleet (push) Has been cancelled
- Remove shellcheck job (no shell scripts)
- Deploy job now uses espressif/idf container with --network=host
- Install git, curl, jq, netcat in deploy container
2026-02-05 22:54:16 +01:00
user
52603fb097 fix: Use git clone instead of curl for deploy checkout
Some checks failed
Lint & Build / Security Flaw Analysis (push) Successful in 15s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 28s
Lint & Build / Shell Script Analysis (push) Successful in 7s
Lint & Build / Build Firmware (push) Successful in 2m52s
Lint & Build / Deploy to ESP Fleet (push) Failing after 0s
2026-02-05 22:47:51 +01:00
user
974ffadb1c ci: Add firmware size check and version tag validation
Some checks failed
Lint & Build / Security Flaw Analysis (push) Successful in 15s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 28s
Lint & Build / Shell Script Analysis (push) Successful in 7s
Lint & Build / Build Firmware (push) Successful in 1m51s
Lint & Build / Deploy to ESP Fleet (push) Failing after 1s
- Fail build if binary exceeds 1920 KB partition
- Warn at 85% capacity
- Warn if git tag differs from embedded version
2026-02-05 22:42:49 +01:00
user
eb4c3d1657 feat: Add build metadata to STATUS, enable size optimization
STATUS now includes built=, idf=, chip= fields for diagnostics.
Switch to -Os compiler optimization (saves ~75 KB).
2026-02-05 22:42:45 +01:00
user
456b4f0b9a ci: Run build after checks pass, fix deploy checkout
All checks were successful
Lint & Build / Security Flaw Analysis (push) Successful in 15s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / C/C++ Static Analysis (push) Successful in 27s
Lint & Build / Shell Script Analysis (push) Successful in 7s
Lint & Build / Build Firmware (push) Successful in 1m53s
Lint & Build / Deploy to ESP Fleet (push) Has been skipped
2026-02-05 22:24:38 +01:00
user
a338c9f65f ci: Fix multiline command syntax for host runner
Some checks failed
Lint & Build / C/C++ Static Analysis (push) Successful in 29s
Lint & Build / Security Flaw Analysis (push) Successful in 20s
Lint & Build / Secret Scanning (push) Successful in 8s
Lint & Build / Shell Script Analysis (push) Successful in 9s
Lint & Build / Build Firmware (push) Successful in 2m4s
Lint & Build / Deploy to ESP Fleet (push) Failing after 1s
2026-02-05 22:18:50 +01:00
user
fbf2e9a7c1 ci: Add OTA progress monitoring with version checks
Some checks are pending
Lint & Build / C/C++ Static Analysis (push) Successful in 29s
Lint & Build / Deploy to ESP Fleet (push) Blocked by required conditions
Lint & Build / Security Flaw Analysis (push) Successful in 21s
Lint & Build / Secret Scanning (push) Successful in 8s
Lint & Build / Shell Script Analysis (push) Successful in 9s
Lint & Build / Build Firmware (push) Successful in 2m24s
2026-02-05 22:11:13 +01:00
user
1377abe248 ci: Run deploy on host instead of container for network access
Some checks failed
Lint & Build / Deploy to ESP Fleet (push) Has been cancelled
Lint & Build / Security Flaw Analysis (push) Has been cancelled
Lint & Build / Secret Scanning (push) Has been cancelled
Lint & Build / Shell Script Analysis (push) Has been cancelled
Lint & Build / C/C++ Static Analysis (push) Has been cancelled
Lint & Build / Build Firmware (push) Has been cancelled
2026-02-05 22:09:47 +01:00
user
551225d308 fix: Remove unused app_size variable (cppcheck)
All checks were successful
Lint & Build / C/C++ Static Analysis (push) Successful in 29s
Lint & Build / Security Flaw Analysis (push) Successful in 22s
Lint & Build / Secret Scanning (push) Successful in 8s
Lint & Build / Shell Script Analysis (push) Successful in 10s
Lint & Build / Build Firmware (push) Successful in 2m21s
Lint & Build / Deploy to ESP Fleet (push) Successful in 3m20s
2026-02-05 22:08:30 +01:00
user
7f2e3f6dad ci: Add ccache for faster builds + parallel OTA deployment
Some checks failed
Lint & Build / C/C++ Static Analysis (push) Failing after 32s
Lint & Build / Security Flaw Analysis (push) Successful in 21s
Lint & Build / Secret Scanning (push) Successful in 8s
Lint & Build / Shell Script Analysis (push) Successful in 10s
Lint & Build / Build Firmware (push) Successful in 2m7s
Lint & Build / Deploy to ESP Fleet (push) Successful in 3m0s
Build improvements:
- Enable ccache via IDF_CCACHE_ENABLE=1
- Mount /var/cache/ccache volume for persistent cache
- Show ccache stats after build

Deployment improvements:
- Deploy to all sensors in parallel (max 3)
- Reduced total deploy time from ~2.5min to ~1min

Note: Runner needs /var/cache/ccache directory with write permissions
2026-02-05 22:02:29 +01:00
user
a85a2d776b ci: Use host network for deploy container
Some checks failed
Lint & Build / C/C++ Static Analysis (push) Failing after 34s
Lint & Build / Security Flaw Analysis (push) Successful in 21s
Lint & Build / Secret Scanning (push) Successful in 7s
Lint & Build / Shell Script Analysis (push) Successful in 10s
Lint & Build / Build Firmware (push) Successful in 1m56s
Lint & Build / Deploy to ESP Fleet (push) Successful in 4m18s
2026-02-05 21:55:21 +01:00
user
6dbab23329 ci: Serve firmware from runner for OTA deployment
Some checks failed
Lint & Build / C/C++ Static Analysis (push) Failing after 37s
Lint & Build / Security Flaw Analysis (push) Successful in 21s
Lint & Build / Secret Scanning (push) Successful in 5s
Lint & Build / Shell Script Analysis (push) Successful in 6s
Lint & Build / Build Firmware (push) Successful in 2m12s
Lint & Build / Deploy to ESP Fleet (push) Successful in 4m19s
Instead of having ESP devices download from Gitea (TLS cert issues),
the runner now serves firmware via local HTTP server and triggers
OTA with the local URL.
2026-02-05 21:48:53 +01:00
3 changed files with 125 additions and 135 deletions

View File

@@ -7,38 +7,89 @@ on:
pull_request:
branches: [main]
workflow_dispatch:
inputs:
deploy:
description: 'Deploy to ESP fleet after build'
required: false
default: 'false'
type: choice
options:
- 'false'
- 'true'
jobs:
build:
name: Build Firmware
needs: [cppcheck, flawfinder, gitleaks]
runs-on: anvil
container:
image: docker.io/espressif/idf:v5.3
volumes:
- /var/cache/ccache:/ccache
env:
CCACHE_DIR: /ccache
IDF_CCACHE_ENABLE: 1
steps:
- name: Checkout
run: |
git clone --depth=1 --branch=${{ github.ref_name }} \
https://oauth2:${{ github.token }}@git.mymx.me/${{ github.repository }}.git .
- name: Setup ccache
run: |
apt-get update && apt-get install -y --no-install-recommends ccache
ccache --zero-stats
ccache --show-config | grep -E "(cache_dir|max_size)"
- name: Build firmware
run: |
. /opt/esp/idf/export.sh
cd get-started/csi_recv_router
idf.py build
- name: Show ccache stats
run: ccache --show-stats
- name: Show binary size
run: |
ls -lh get-started/csi_recv_router/build/*.bin
- name: Check firmware size
run: |
BIN="get-started/csi_recv_router/build/csi_recv_router.bin"
MAX_SIZE=1966080 # 0x1E0000 = 1920 KB partition
WARN_PERCENT=85
SIZE=$(stat -c%s "$BIN")
PERCENT=$((SIZE * 100 / MAX_SIZE))
echo "Firmware: $((SIZE/1024)) KB / $((MAX_SIZE/1024)) KB ($PERCENT%)"
if [ $SIZE -gt $MAX_SIZE ]; then
echo "::error::Firmware exceeds partition size!"
exit 1
fi
if [ $PERCENT -gt $WARN_PERCENT ]; then
echo "::warning::Firmware using $PERCENT% of partition"
fi
- name: Security checks
run: |
BIN="get-started/csi_recv_router/build/csi_recv_router.bin"
CFG="get-started/csi_recv_router/sdkconfig"
echo "=== Checking for hardcoded secrets ==="
if strings "$BIN" | grep -iqE '(password|secret|api_key|apikey)=[^$]'; then
echo "::error::Potential hardcoded secret found in binary"
exit 1
fi
echo "No hardcoded secrets detected"
echo "=== Checking release configuration ==="
LOG_LEVEL=$(grep 'CONFIG_LOG_DEFAULT_LEVEL=' "$CFG" | cut -d= -f2)
if [ "$LOG_LEVEL" -gt 3 ]; then
echo "::warning::Debug/verbose logging enabled (level $LOG_LEVEL)"
else
echo "Log level OK ($LOG_LEVEL)"
fi
echo "=== Component size breakdown ==="
. /opt/esp/idf/export.sh
cd get-started/csi_recv_router
idf.py size-components 2>/dev/null | head -30
- name: Upload firmware artifact
run: |
mkdir -p /tmp/artifacts
@@ -49,90 +100,6 @@ jobs:
echo "Artifacts ready in /tmp/artifacts"
ls -la /tmp/artifacts/
deploy:
name: Deploy to ESP Fleet
runs-on: anvil
needs: build
if: github.event_name == 'workflow_dispatch' && github.event.inputs.deploy == 'true' || startsWith(github.ref, 'refs/tags/v')
container:
image: docker.io/espressif/idf:v5.3
steps:
- name: Install tools
run: |
apt-get update && apt-get install -y --no-install-recommends netcat-openbsd curl jq
- name: Checkout
run: |
git clone --depth=1 --branch=${{ github.ref_name }} \
https://oauth2:${{ github.token }}@git.mymx.me/${{ github.repository }}.git .
- name: Build firmware
run: |
. /opt/esp/idf/export.sh
cd get-started/csi_recv_router
idf.py build
- name: Create release and upload firmware
env:
GITEA_TOKEN: ${{ github.token }}
run: |
TAG="${{ github.ref_name }}"
REPO="${{ github.repository }}"
API_URL="https://git.mymx.me/api/v1"
echo "Creating release for tag: $TAG"
# Check if release exists
RELEASE=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
"$API_URL/repos/$REPO/releases/tags/$TAG")
RELEASE_ID=$(echo "$RELEASE" | jq -r '.id // empty')
if [ -z "$RELEASE_ID" ]; then
# Create new release
RELEASE=$(curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"tag_name\": \"$TAG\", \"name\": \"$TAG\", \"body\": \"Automated release from CI\"}" \
"$API_URL/repos/$REPO/releases")
RELEASE_ID=$(echo "$RELEASE" | jq -r '.id')
echo "Created release ID: $RELEASE_ID"
else
echo "Release exists with ID: $RELEASE_ID"
fi
# Upload firmware binary
echo "Uploading firmware..."
curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \
-F "attachment=@get-started/csi_recv_router/build/csi_recv_router.bin" \
"$API_URL/repos/$REPO/releases/$RELEASE_ID/assets?name=csi_recv_router.bin"
# Store release URL for OTA
FIRMWARE_URL="https://git.mymx.me/$REPO/releases/download/$TAG/csi_recv_router.bin"
echo "Firmware URL: $FIRMWARE_URL"
echo "$FIRMWARE_URL" > /tmp/firmware_url.txt
- name: Deploy via OTA
run: |
FIRMWARE_URL=$(cat /tmp/firmware_url.txt)
echo "Using firmware URL: $FIRMWARE_URL"
# Deploy to muddy-storm
echo "=== Deploying to muddy-storm (192.168.129.29) ==="
echo "OTA $FIRMWARE_URL" | nc -u -w 2 192.168.129.29 5501 || true
sleep 30
# Deploy to amber-maple
echo "=== Deploying to amber-maple (192.168.129.30) ==="
echo "OTA $FIRMWARE_URL" | nc -u -w 2 192.168.129.30 5501 || true
sleep 30
# Deploy to hollow-acorn
echo "=== Deploying to hollow-acorn (192.168.129.31) ==="
echo "OTA $FIRMWARE_URL" | nc -u -w 2 192.168.129.31 5501 || true
sleep 30
echo "=== Deployment complete ==="
cppcheck:
name: C/C++ Static Analysis
runs-on: anvil
@@ -191,27 +158,3 @@ jobs:
- name: Run gitleaks
run: gitleaks detect --source . --verbose --redact
shellcheck:
name: Shell Script Analysis
runs-on: anvil
container:
image: docker.io/koalaman/shellcheck-alpine:stable
steps:
- name: Install git
run: apk add --no-cache git
- name: Checkout
run: |
git clone --depth=1 --branch=${{ github.ref_name }} \
https://oauth2:${{ github.token }}@git.mymx.me/${{ github.repository }}.git .
- name: Find and check shell scripts
run: |
SCRIPTS=$(find . -name "*.sh" -type f 2>/dev/null || true)
if [ -n "$SCRIPTS" ]; then
echo "Checking: $SCRIPTS"
echo "$SCRIPTS" | xargs shellcheck --severity=warning
else
echo "No shell scripts found, skipping"
fi

View File

@@ -36,6 +36,7 @@
#include "esp_ota_ops.h"
#include "esp_https_ota.h"
#include "esp_partition.h"
#include "esp_chip_info.h"
#include "esp_http_client.h"
#include "driver/gpio.h"
#include "soc/soc_caps.h"
@@ -89,6 +90,7 @@ static int s_send_frequency = CONFIG_SEND_FREQUENCY_DEFAULT;
static int8_t s_tx_power_dbm = 10;
static esp_ping_handle_t s_ping_handle = NULL;
static volatile led_mode_t s_led_mode = LED_OFF;
static bool s_led_quiet = true; /* quiet mode: off normally, solid on motion/presence */
static volatile int64_t s_last_csi_time = 0;
static volatile int64_t s_identify_end_time = 0;
static volatile bool s_ota_in_progress = false;
@@ -300,11 +302,15 @@ static void config_load_nvs(void)
if (nvs_get_i32(h, "chanscan_int", &chanscan_int) == ESP_OK && chanscan_int >= 60 && chanscan_int <= 3600) {
s_chanscan_interval_s = (int)chanscan_int;
}
int8_t led_quiet;
if (nvs_get_i8(h, "led_quiet", &led_quiet) == ESP_OK) {
s_led_quiet = (led_quiet != 0);
}
nvs_close(h);
ESP_LOGI(TAG, "NVS loaded: hostname=%s rate=%d tx_power=%d adaptive=%d threshold=%.6f ble=%d target=%s:%d csi_mode=%d hybrid_n=%d powersave=%d presence=%d pr_thresh=%.4f baseline_nsub=%d",
ESP_LOGI(TAG, "NVS loaded: hostname=%s rate=%d tx_power=%d adaptive=%d threshold=%.6f ble=%d target=%s:%d csi_mode=%d hybrid_n=%d powersave=%d presence=%d pr_thresh=%.4f baseline_nsub=%d led_quiet=%d",
s_hostname, s_send_frequency, s_tx_power_dbm, s_adaptive, s_motion_threshold, s_ble_enabled,
s_target_ip, s_target_port, (int)s_csi_mode, s_hybrid_interval, s_powersave,
s_presence_enabled, s_pr_threshold, s_baseline_nsub);
s_presence_enabled, s_pr_threshold, s_baseline_nsub, s_led_quiet);
} else {
ESP_LOGI(TAG, "NVS: no saved config, using defaults");
}
@@ -400,10 +406,25 @@ static void led_task(void *arg)
if (s_led_mode == LED_SOLID && s_identify_end_time > 0) {
if (esp_timer_get_time() >= s_identify_end_time) {
s_identify_end_time = 0;
s_led_mode = LED_SLOW_BLINK;
s_led_mode = s_led_quiet ? LED_OFF : LED_SLOW_BLINK;
}
}
/* Quiet mode: off normally, solid on motion/presence, OTA pattern during OTA */
if (s_led_quiet && s_led_mode != LED_OTA && s_identify_end_time == 0) {
bool activity = s_motion_detected ||
(s_presence_enabled && s_baseline_nsub > 0 && s_pr_last_score > s_pr_threshold);
if (activity) {
gpio_set_level(LED_GPIO, 1);
led_on = true;
} else {
gpio_set_level(LED_GPIO, 0);
led_on = false;
}
vTaskDelay(pdMS_TO_TICKS(200));
continue;
}
/* Auto-switch between slow/fast blink based on CSI activity */
if (s_led_mode == LED_SLOW_BLINK || s_led_mode == LED_FAST_BLINK) {
int64_t now = esp_timer_get_time();
@@ -1486,6 +1507,30 @@ static int cmd_handle(const char *cmd, char *reply, size_t reply_size)
return strlen(reply);
}
/* LED [QUIET|AUTO] */
if (strncmp(cmd, "LED", 3) == 0) {
if (cmd[3] == '\0' || cmd[3] == '\n') {
snprintf(reply, reply_size, "OK LED %s", s_led_quiet ? "quiet" : "auto");
return strlen(reply);
}
if (strncmp(cmd + 4, "QUIET", 5) == 0) {
s_led_quiet = true;
s_led_mode = LED_OFF;
config_save_i8("led_quiet", 1);
snprintf(reply, reply_size, "OK LED quiet (off, solid on motion)");
return strlen(reply);
}
if (strncmp(cmd + 4, "AUTO", 4) == 0) {
s_led_quiet = false;
s_led_mode = LED_SLOW_BLINK;
config_save_i8("led_quiet", 0);
snprintf(reply, reply_size, "OK LED auto (blink)");
return strlen(reply);
}
snprintf(reply, reply_size, "ERR LED [QUIET|AUTO]");
return strlen(reply);
}
/* STATUS */
if (strncmp(cmd, "STATUS", 6) == 0) {
int64_t up = esp_timer_get_time() / 1000000LL;
@@ -1532,22 +1577,22 @@ static int cmd_handle(const char *cmd, char *reply, size_t reply_size)
/* Partition info */
const esp_partition_t *running = esp_ota_get_running_partition();
uint32_t part_size = running ? running->size : 0;
uint32_t app_size = 0;
if (running) {
esp_app_desc_t desc;
if (esp_ota_get_partition_description(running, &desc) == ESP_OK) {
/* App size not directly available, use partition size */
app_size = part_size;
}
}
/* Chip info */
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
const char *chip_model = (chip_info.model == CHIP_ESP32S3) ? "ESP32S3" :
(chip_info.model == CHIP_ESP32C3) ? "ESP32C3" :
(chip_info.model == CHIP_ESP32) ? "ESP32" : "ESP32xx";
snprintf(reply, reply_size,
"OK STATUS uptime=%s uptime_s=%lld heap=%lu rssi=%d channel=%d tx_power=%d rate=%d csi_rate=%d"
" hostname=%s version=%s adaptive=%s motion=%d ble=%s target=%s:%d"
" temp=%.1f csi_count=%lu boots=%lu rssi_min=%d rssi_max=%d"
" csi_mode=%s hybrid_n=%d auth=%s flood_thresh=%d/%d powersave=%s"
" presence=%s pr_score=%.4f chanscan=%s"
" nvs_used=%lu nvs_free=%lu nvs_total=%lu part_size=%lu",
" presence=%s pr_score=%.4f chanscan=%s led=%s"
" nvs_used=%lu nvs_free=%lu nvs_total=%lu part_size=%lu"
" built=%s_%s idf=%s chip=%sr%dc%d",
uptime_str, (long long)up, (unsigned long)heap, rssi, channel, (int)s_tx_power_dbm,
s_send_frequency, actual_rate,
s_hostname, app_desc->version,
@@ -1560,11 +1605,13 @@ static int cmd_handle(const char *cmd, char *reply, size_t reply_size)
s_flood_thresh, s_flood_window_s,
s_powersave ? "on" : "off",
s_presence_enabled ? "on" : "off", s_pr_last_score,
s_chanscan_enabled ? "on" : "off",
s_chanscan_enabled ? "on" : "off", s_led_quiet ? "quiet" : "auto",
(unsigned long)nvs_stats.used_entries,
(unsigned long)nvs_stats.free_entries,
(unsigned long)nvs_stats.total_entries,
(unsigned long)part_size);
(unsigned long)part_size,
app_desc->date, app_desc->time, app_desc->idf_ver,
chip_model, chip_info.revision, chip_info.cores);
return strlen(reply);
}
@@ -2269,7 +2316,7 @@ void app_main()
ESP_LOGI(TAG, "BLE: NimBLE initialized, scan=%s", s_ble_enabled ? "on" : "off");
s_led_mode = LED_SLOW_BLINK;
s_led_mode = s_led_quiet ? LED_OFF : LED_SLOW_BLINK;
udp_socket_init();
wifi_csi_init();

View File

@@ -27,9 +27,9 @@ CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=
#
# Compiler options
# Compiler options (size optimization saves ~75 KB)
#
CONFIG_COMPILER_OPTIMIZATION_PERF=y
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
#
# FreeRTOS