Skip to content

Commit

Permalink
Support GET_BUILD_STRING_REQ
Browse files Browse the repository at this point in the history
  • Loading branch information
puddly committed Aug 13, 2024
1 parent 4b659b4 commit 7f85c8f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
14 changes: 14 additions & 0 deletions bellows/ezsp/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,15 @@ async def get_board_info(
special, ver_info_bytes = t.uint8_t.deserialize(ver_info_bytes)
version = f"{major}.{minor}.{patch}.{special} build {build}"

if xncp.FirmwareFeatures.BUILD_STRING in self._xncp_features:
try:
build_string = await self.xncp_get_build_string()
except InvalidCommandError:
build_string = None

if build_string:
version = f"{version} ({build_string})"

return (
tokens[t.EzspMfgTokenId.MFG_STRING],
tokens[t.EzspMfgTokenId.MFG_BOARD_NAME],
Expand Down Expand Up @@ -726,3 +735,8 @@ async def xncp_get_mfg_token_override(self, token: t.EzspMfgTokenId) -> bytes:
"""Get manufacturing token override."""
rsp = await self.send_xncp_frame(xncp.GetMfgTokenOverrideReq(token=token))
return rsp.value

async def xncp_get_build_string(self) -> bytes:
"""Get build string."""
rsp = await self.send_xncp_frame(xncp.GetBuildStringReq())
return rsp.build_string.decode("utf-8")
15 changes: 15 additions & 0 deletions bellows/ezsp/xncp.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,12 @@ class XncpCommandId(t.enum16):
GET_SUPPORTED_FEATURES_REQ = 0x0000
SET_SOURCE_ROUTE_REQ = 0x0001
GET_MFG_TOKEN_OVERRIDE_REQ = 0x0002
GET_BUILD_STRING_REQ = 0x0003

GET_SUPPORTED_FEATURES_RSP = GET_SUPPORTED_FEATURES_REQ | 0x8000
SET_SOURCE_ROUTE_RSP = SET_SOURCE_ROUTE_REQ | 0x8000
GET_MFG_TOKEN_OVERRIDE_RSP = GET_MFG_TOKEN_OVERRIDE_REQ | 0x8000
GET_BUILD_STRING_RSP = GET_BUILD_STRING_REQ | 0x8000

UNKNOWN = 0xFFFF

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

# The firmware contains a free-form build string
BUILD_STRING = 1 << 3


class XncpCommandPayload(t.Struct):
pass
Expand Down Expand Up @@ -133,3 +138,13 @@ class GetMfgTokenOverrideReq(XncpCommandPayload):
@register_command(XncpCommandId.GET_MFG_TOKEN_OVERRIDE_RSP)
class GetMfgTokenOverrideRsp(XncpCommandPayload):
value: Bytes


@register_command(XncpCommandId.GET_BUILD_STRING_REQ)
class GetBuildStringReq(XncpCommandPayload):
pass


@register_command(XncpCommandId.GET_BUILD_STRING_RSP)
class GetBuildStringRsp(XncpCommandPayload):
build_string: Bytes

0 comments on commit 7f85c8f

Please sign in to comment.