Skip to content

Commit a786681

Browse files
authored
Merge pull request #2 from JPHutchins/feature/complete-image-management
Feature/complete image management
2 parents 9be7009 + ed1366f commit a786681

File tree

3 files changed

+72
-1
lines changed

3 files changed

+72
-1
lines changed

pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
name = "smp"
33
version = "0"
44
description = "Simple Management Protocol (SMP) for remotely managing MCU firmware"
5-
authors = ["J.P. Hutchins <jphutchins@gmail.com>"]
5+
authors = [
6+
"J.P. Hutchins <jphutchins@gmail.com>",
7+
"J.P. Hutchins <jp@intercreate.io>"
8+
]
69
readme = "README.md"
710
license = "Apache-2.0"
811
packages = [

smp/image_management.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@ class ImageUploadFinalWriteResponse(_ImageManagementGroup, message.WriteResponse
8787
match: bool | None = None
8888

8989

90+
class ImageEraseRequest(_ImageManagementGroup, message.WriteRequest):
91+
_COMMAND_ID = header.CommandId.ImageManagement.ERASE
92+
93+
slot: int | None = None
94+
"""The slot to erase. If not provided, slot 1 will be erased."""
95+
96+
97+
class ImageEraseResponse(_ImageManagementGroup, message.WriteResponse):
98+
_COMMAND_ID = header.CommandId.ImageManagement.ERASE
99+
100+
90101
@unique
91102
class IMG_MGMT_ERR(IntEnum):
92103
OK = 0

tests/test_image_management.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,60 @@ def assert_response(r: smpimg.ImageStatesReadResponse) -> None:
120120
)
121121
assert_header(r3)
122122
assert_response(r3)
123+
124+
125+
def test_ImageEraseRequest() -> None:
126+
assert_header = make_assert_header(
127+
smpheader.GroupId.IMAGE_MANAGEMENT,
128+
smpheader.OP.WRITE,
129+
smpheader.CommandId.ImageManagement.ERASE,
130+
1, # empty map
131+
)
132+
r = smpimg.ImageEraseRequest()
133+
134+
assert_header(r)
135+
assert smpheader.Header.SIZE + 1 == len(r.BYTES)
136+
137+
r = smpimg.ImageEraseRequest.loads(r.BYTES)
138+
assert_header(r)
139+
assert smpheader.Header.SIZE + 1 == len(r.BYTES)
140+
141+
r = smpimg.ImageEraseRequest.load(cast(smpheader.Header, r.header), {})
142+
assert_header(r)
143+
assert smpheader.Header.SIZE + 1 == len(r.BYTES)
144+
145+
assert_header = make_assert_header(
146+
smpheader.GroupId.IMAGE_MANAGEMENT,
147+
smpheader.OP.WRITE,
148+
smpheader.CommandId.ImageManagement.ERASE,
149+
None,
150+
)
151+
r = smpimg.ImageEraseRequest(slot=0)
152+
153+
assert_header(r)
154+
assert r.slot == 0
155+
156+
r = smpimg.ImageEraseRequest.loads(r.BYTES)
157+
assert_header(r)
158+
assert r.slot == 0
159+
160+
161+
def test_ImageEraseResponse() -> None:
162+
assert_header = make_assert_header(
163+
smpheader.GroupId.IMAGE_MANAGEMENT,
164+
smpheader.OP.WRITE_RSP,
165+
smpheader.CommandId.ImageManagement.ERASE,
166+
1, # empty map
167+
)
168+
r = smpimg.ImageEraseResponse()
169+
170+
assert_header(r)
171+
assert smpheader.Header.SIZE + 1 == len(r.BYTES)
172+
173+
r = smpimg.ImageEraseResponse.loads(r.BYTES)
174+
assert_header(r)
175+
assert smpheader.Header.SIZE + 1 == len(r.BYTES)
176+
177+
r = smpimg.ImageEraseResponse.load(cast(smpheader.Header, r.header), {})
178+
assert_header(r)
179+
assert smpheader.Header.SIZE + 1 == len(r.BYTES)

0 commit comments

Comments
 (0)