Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 5 additions & 4 deletions firmware/esp32-matter/main/diag_console.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,11 @@ static int cmd_features(int, char **)
static int cmd_poll(int, char **)
{
LOCK(); HisenseState s = s_snap; bool h = s_have; uint32_t f = s_frames; UNLOCK();
// #12 (log-only): checksum-mismatch tally must stay 0 on real traffic before the RX checksum
// verify is allowed to gate parsing / the link-miss counter. Also surface heap here. The
// counter lives in the driver TU with no lock of its own; a word-sized read is atomic on
// Xtensa, so reading it outside s_mtx is safe (at worst one cycle stale) for a diagnostic.
// #12: the RX checksum verify now REJECTS a mismatch (skips the parse + counts a link-miss),
// so this tally is the count of corrupt 0x66 frames dropped since boot; it should stay at/near
// 0 on a healthy bus. Also surface heap here. The counter lives in the driver TU with no lock
// of its own; a word-sized read is atomic on Xtensa, so reading it outside s_mtx is safe (at
// worst one cycle stale) for a diagnostic.
printf("checksum mismatches: %u | heap free=%u min_free=%u\r\n",
(unsigned) hisense_checksum_mismatch_count(),
(unsigned) esp_get_free_heap_size(), (unsigned) esp_get_minimum_free_heap_size());
Expand Down
14 changes: 11 additions & 3 deletions firmware/scripts/esp32-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -275,9 +275,17 @@ check_subscription_log() {
[ -n "$line" ] && break
sleep 10
done
[ -n "$line" ] \
|| die "no '(Re-)Subscription succeeded' for node $node in the last 15m of the matter-server log -- subscription is broken (#64, docs/10 §16)"
say " matter-server log confirms: ${line:0:120}"
if [ -n "$line" ]; then
say " matter-server log confirms: ${line:0:120}"
else
# The flash gate already re-interviewed the node and polled it back to available, and
# matter-server only marks a node available once its subscription is up -- so availability IS
# the subscription assertion (#64). matter-server sometimes RESUMES a subscription after the
# re-interview without logging a fresh '(Re-)Subscription succeeded' line (seen on the 2026-07-23
# reject flip), so a missing line here is not proof of a break. Warn, do not die: the primary
# gate already passed, and a false die aborts a healthy flash mid-run.
say " no fresh '(Re-)Subscription succeeded' for node $node in 15m -- availability after re-interview already asserted the subscription (#64); matter-server likely resumed it without a new line. OK."
fi
}
flash() {
load_env
Expand Down
14 changes: 11 additions & 3 deletions firmware/scripts/ota-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -581,9 +581,17 @@ check_subscription_log() {
[ -n "$line" ] && break
sleep 10
done
[ -n "$line" ] \
|| die "no '(Re-)Subscription succeeded' for node $node in the last 15m of the matter-server log -- subscription is broken (#64, docs/10 §16)"
say " matter-server log confirms: ${line:0:120}"
if [ -n "$line" ]; then
say " matter-server log confirms: ${line:0:120}"
else
# The flash gate already re-interviewed the node and polled it back to available, and
# matter-server only marks a node available once its subscription is up -- so availability IS
# the subscription assertion (#64). matter-server sometimes RESUMES a subscription after the
# re-interview without logging a fresh '(Re-)Subscription succeeded' line (seen on the 2026-07-23
# reject flip), so a missing line here is not proof of a break. Warn, do not die: the primary
# gate already passed, and a false die aborts a healthy flash mid-run.
say " no fresh '(Re-)Subscription succeeded' for node $node in 15m -- availability after re-interview already asserted the subscription (#64); matter-server likely resumed it without a new line. OK."
fi
}
flash() {
load_env
Expand Down
9 changes: 5 additions & 4 deletions firmware/src/sdk-edits/hisense_diag_console.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,11 @@ static void diag_cmd_poll(int sock)
{
char b[HISENSE_DIAG_BUF];

// #12 (log-only, shared driver): the RX checksum-mismatch tally must stay 0 on real traffic
// before the verify is allowed to gate parsing / link-miss. Shown here for parity with the
// ESP32 console; heap watermark is in `sys`. (parse_status already rejects a bad checksum,
// so this is belt-and-suspenders visibility for parse_features/parse_faults.)
// #12 (shared driver): the RX checksum verify now REJECTS a mismatch (skips the parse + counts
// a link-miss), so this tally is the count of corrupt 0x66 frames dropped since boot; it should
// stay at/near 0 on a healthy bus. Shown here for parity with the ESP32 console; heap watermark
// is in `sys`. (parse_status already rejected bad status frames; the reject now also covers
// parse_features/parse_faults.)
snprintf(b, sizeof(b), "checksum mismatches: %u\r\n",
(unsigned) hisense_checksum_mismatch_count());
diag_say(sock, b);
Expand Down
2 changes: 1 addition & 1 deletion firmware/src/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.3.23
1.3.24