Skip to content

Commit 3e54421

Browse files
authored
Disable skip_bootloader when the config is set to False (#249)
* Skip bootloader when the config is set to skip On SMLIGHT SLZB-06 devices in USB mode the skip bootloader sequence causes the esp32 in these devices to reset. While there is a config option to disable skip bootloader, it is not hooked up. Ensure that it is possible to disable skip bootloader. * Add test for config to disable skip bootloader
1 parent 92eef38 commit 3e54421

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

tests/api/test_connect.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,27 @@ async def test_connect_skip_bootloader_rts_dtr_pins(make_znp_server, mocker):
115115
znp.close()
116116

117117

118+
async def test_connect_skip_bootloader_config(make_znp_server, mocker):
119+
znp_server = make_znp_server(server_cls=BaseServerZNP)
120+
znp = ZNP(config_for_port_path(znp_server.port_path))
121+
znp._znp_config["skip_bootloader"] = False
122+
123+
mocker.patch.object(znp.nvram, "determine_alignment", new=CoroutineMock())
124+
mocker.patch.object(znp, "detect_zstack_version", new=CoroutineMock())
125+
126+
znp_server.reply_to(
127+
c.SYS.Ping.Req(), responses=[c.SYS.Ping.Rsp(Capabilities=t.MTCapabilities.SYS)]
128+
)
129+
130+
await znp.connect(test_port=True)
131+
132+
serial = znp._uart._transport
133+
assert serial._mock_dtr_prop.called is False
134+
assert serial._mock_rts_prop.called is False
135+
136+
znp.close()
137+
138+
118139
async def test_api_close(connected_znp, mocker):
119140
znp, znp_server = connected_znp
120141
uart = znp._uart

zigpy_znp/api.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,12 @@ async def connect(self, *, test_port=True) -> None:
734734
# prevent any data from being sent
735735
if test_port:
736736
# The reset indication callback is sent when some sticks start up
737-
self.capabilities = (await self._skip_bootloader()).Capabilities
737+
if self._znp_config[conf.CONF_SKIP_BOOTLOADER]:
738+
self.capabilities = (await self._skip_bootloader()).Capabilities
739+
else:
740+
self.capabilities = (
741+
await self.request(c.SYS.Ping.Req())
742+
).Capabilities
738743

739744
# We need to know how structs are packed to deserialize frames correctly
740745
await self.nvram.determine_alignment()

0 commit comments

Comments
 (0)