Add support for Simplicity SDK 2025.12.3#725
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #725 +/- ##
=======================================
Coverage 99.54% 99.54%
=======================================
Files 61 61
Lines 4147 4181 +34
=======================================
+ Hits 4128 4162 +34
Misses 19 19 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
zigpy-review-bot
left a comment
There was a problem hiding this comment.
LGTM. I independently verified every frame ID and struct layout in this PR against the actual simplicity-sdk/2025.12.3 headers (installed via slt), and cross-checked the pre-2025.12 items against zigbee-herdsman. Everything matches exactly.
Verified against the 2025.12.3 SDK source (ezsp-enum.h, stack/include/sl_zigbee_dhc.h):
- All DHC PA frame IDs
0x0152–0x0169✅ — including the out-of-orderWRITE_RSSI_OFFSET = 0x015Fand the0x0165gap (READ_PA_VERSION = 0x0164→READ_PA_SIGNATURE = 0x0166; there is nowritePaVersion, PA version is read-only). - All five DHC structs match field-for-field (widths + order): descriptor, curve segment, curve, table, metadata. The
maxPowerLevelcamelCase field amid otherwise snake_case names is faithful — the SDK header itself notesfield name 'maxPowerLevel' must match YAML for generated marshal code. setPendingNetworkUpdateChannel = 0x003D✅ — confirmed; the slot was genuinely reclaimed (getFirstBeaconno longer exists in the 2025.12.3 SDK).radioSetSchedulerPriorities = 0x012Bis absent from 2025.12.3'sezsp-enum.h(onlyGET = 0x012AandSLIPTIME 0x012C/0x012Dremain), confirming the in-code note that it was dropped in 2025.12.2 without a version bump. The v14 (3-field) → v16+ (5-field) split is correct;sl_802154_radio_priorities_tmatches the header exactly.
Full test suite passes locally (424) and the new structs round-trip at the expected packed sizes. One optional, non-blocking note inline.
| ), | ||
| # Added in Simplicity SDK 2025.12.0 | ||
| "setPendingNetworkUpdateChannel": ( | ||
| 0x003D, |
There was a problem hiding this comment.
Optional / non-blocking: since the 2025.12.3 SDK reclaimed 0x003D for this command, the inherited getFirstBeacon (at 0x003D since v7) is now a dead opcode in v18 firmware. Harmless as-is — setPendingNetworkUpdateChannel is inserted later so it wins COMMANDS_BY_ID[0x003D], and both stay callable by name — and it mirrors the existing v17 pattern (gpProxyTableRemoveEntry/gpClearProxyTable reusing 0x5D/0x5F). But if you'd like v18 to reflect the firmware exactly, you could drop getFirstBeacon here.
No new commands that we use but I'm adding these for completeness.