Skip to content

Commit f391150

Browse files
committed
Support GET_BUILD_STRING_REQ
1 parent 0f6ad34 commit f391150

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

bellows/ezsp/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,15 @@ async def get_board_info(
381381
special, ver_info_bytes = t.uint8_t.deserialize(ver_info_bytes)
382382
version = f"{major}.{minor}.{patch}.{special} build {build}"
383383

384+
if xncp.FirmwareFeatures.BUILD_STRING in self._xncp_features:
385+
try:
386+
build_string = await self.xncp_get_build_string()
387+
except InvalidCommandError:
388+
build_string = None
389+
390+
if build_string:
391+
version = f"{version} ({build_string})"
392+
384393
return (
385394
tokens[t.EzspMfgTokenId.MFG_STRING],
386395
tokens[t.EzspMfgTokenId.MFG_BOARD_NAME],
@@ -702,3 +711,8 @@ async def xncp_get_mfg_token_override(self, token: t.EzspMfgTokenId) -> bytes:
702711
"""Get manufacturing token override."""
703712
rsp = await self.send_xncp_frame(xncp.GetMfgTokenOverrideReq(token=token))
704713
return rsp.value
714+
715+
async def xncp_get_build_string(self) -> bytes:
716+
"""Get build string."""
717+
rsp = await self.send_xncp_frame(xncp.GetBuildStringReq())
718+
return rsp.build_string.decode("utf-8")

bellows/ezsp/xncp.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,12 @@ class XncpCommandId(t.enum16):
4646
GET_SUPPORTED_FEATURES_REQ = 0x0000
4747
SET_SOURCE_ROUTE_REQ = 0x0001
4848
GET_MFG_TOKEN_OVERRIDE_REQ = 0x0002
49+
GET_BUILD_STRING_REQ = 0x0003
4950

5051
GET_SUPPORTED_FEATURES_RSP = GET_SUPPORTED_FEATURES_REQ | 0x8000
5152
SET_SOURCE_ROUTE_RSP = SET_SOURCE_ROUTE_REQ | 0x8000
5253
GET_MFG_TOKEN_OVERRIDE_RSP = GET_MFG_TOKEN_OVERRIDE_REQ | 0x8000
54+
GET_BUILD_STRING_RSP = GET_BUILD_STRING_REQ | 0x8000
5355

5456
UNKNOWN = 0xFFFF
5557

@@ -99,6 +101,9 @@ class FirmwareFeatures(t.bitmap32):
99101
# The firmware supports overriding some manufacturing tokens
100102
MFG_TOKEN_OVERRIDES = 1 << 2
101103

104+
# The firmware contains a free-form build string
105+
BUILD_STRING = 1 << 3
106+
102107

103108
class XncpCommandPayload(t.Struct):
104109
pass
@@ -133,3 +138,13 @@ class GetMfgTokenOverrideReq(XncpCommandPayload):
133138
@register_command(XncpCommandId.GET_MFG_TOKEN_OVERRIDE_RSP)
134139
class GetMfgTokenOverrideRsp(XncpCommandPayload):
135140
value: Bytes
141+
142+
143+
@register_command(XncpCommandId.GET_BUILD_STRING_REQ)
144+
class GetBuildStringReq(XncpCommandPayload):
145+
pass
146+
147+
148+
@register_command(XncpCommandId.GET_BUILD_STRING_RSP)
149+
class GetBuildStringRsp(XncpCommandPayload):
150+
build_string: Bytes

0 commit comments

Comments
 (0)