py9b/command/regio: fix write command on ninebot > 0301
Somewhere between ESC 0301 and 0401 response format for write command has changed and is much more similar to that of xiaomi - arg contains register address and single response data byte is a write result. This is behaviour that matches description in nbdocs.pdf on scooterhacking wiki.legit-fork
parent
d81cec2ee7
commit
f8ba5ef4ee
|
@ -50,14 +50,25 @@ class WriteRegs(BaseCommand):
|
||||||
"WriteRegs {0:X}:{1:X}".format(self.dev, self.reg)
|
"WriteRegs {0:X}:{1:X}".format(self.dev, self.reg)
|
||||||
)
|
)
|
||||||
elif response.cmd == 0x05: # ninebot style
|
elif response.cmd == 0x05: # ninebot style
|
||||||
if len(response.data) != 0:
|
if len(response.data) == 0:
|
||||||
raise InvalidResponse(
|
# firmware < 0401
|
||||||
"WriteRegs {0:X}:{1:X}".format(self.dev, self.reg)
|
|
||||||
)
|
|
||||||
if response.arg != 0:
|
if response.arg != 0:
|
||||||
raise WriteProtectError(
|
raise WriteProtectError(
|
||||||
"WriteRegs {0:X}:{1:X}".format(self.dev, self.reg)
|
"WriteRegs {0:X}:{1:X}".format(self.dev, self.reg)
|
||||||
)
|
)
|
||||||
|
elif len(response.data) == 1:
|
||||||
|
# firmware >= 0401
|
||||||
|
if response.arg != self.reg:
|
||||||
|
raise InvalidResponse(
|
||||||
|
"WriteRegs {0:X}:{1:X}".format(self.dev, self.reg)
|
||||||
|
)
|
||||||
|
if response.data[0] != 0:
|
||||||
|
raise WriteProtectError(
|
||||||
|
"WriteRegs {0:X}:{1:X}".format(self.dev, self.reg)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise InvalidResponse("WriteRegs {0:X}:{1:X}".format(self.dev, self.reg))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise InvalidResponse("WriteRegs {0:X}:{1:X}".format(self.dev, self.reg))
|
raise InvalidResponse("WriteRegs {0:X}:{1:X}".format(self.dev, self.reg))
|
||||||
return True
|
return True
|
||||||
|
|
Loading…
Reference in New Issue