Fix writing of multiple words to charge controller
This commit is contained in:
parent
71919fc406
commit
3aa6b13615
1 changed files with 20 additions and 3 deletions
|
@ -153,8 +153,8 @@ def readMemory(fh: BaseInterface, address: int, words: int = 1) -> Optional[byte
|
||||||
|
|
||||||
|
|
||||||
def writeMemory(fh: BaseInterface, address: int, data: bytes):
|
def writeMemory(fh: BaseInterface, address: int, data: bytes):
|
||||||
if len(data) % 2:
|
if len(data) != 2:
|
||||||
raise ValueError(f"Data must consist of two-byte words, got {len(data)} bytes")
|
raise ValueError(f"Data must consist of a two-byte word, got {len(data)} bytes")
|
||||||
|
|
||||||
header = construct_write_request(address)
|
header = construct_write_request(address)
|
||||||
write(fh, header + data)
|
write(fh, header + data)
|
||||||
|
@ -166,7 +166,11 @@ def writeMemory(fh: BaseInterface, address: int, data: bytes):
|
||||||
header = fh.read(3)
|
header = fh.read(3)
|
||||||
if header and len(header) == 3:
|
if header and len(header) == 3:
|
||||||
operation, size, address = header
|
operation, size, address = header
|
||||||
rdata = fh.read(size * 2)
|
log(header)
|
||||||
|
# size field is zero when writing device name for whatever reason
|
||||||
|
# write command seems to only accept a single word, so this is fine;
|
||||||
|
# we just hardcode the number of bytes read to two here.
|
||||||
|
rdata = fh.read(2)
|
||||||
_crc = fh.read(2)
|
_crc = fh.read(2)
|
||||||
if rdata and _crc:
|
if rdata and _crc:
|
||||||
try:
|
try:
|
||||||
|
@ -183,6 +187,19 @@ def writeMemory(fh: BaseInterface, address: int, data: bytes):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def writeMemoryMultiple(fh: BaseInterface, address: int, data: bytes):
|
||||||
|
if len(data) % 2:
|
||||||
|
raise ValueError(f"Data must consist of two-byte words, got {len(data)} bytes")
|
||||||
|
res = bytearray()
|
||||||
|
for i in range(len(data) // 2):
|
||||||
|
d = data[i * 2 : (i + 1) * 2]
|
||||||
|
log(address + i, d)
|
||||||
|
r = writeMemory(fh, address + i, d)
|
||||||
|
if r:
|
||||||
|
res.extend(r)
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
def try_read_parse(
|
def try_read_parse(
|
||||||
dev: BaseInterface,
|
dev: BaseInterface,
|
||||||
address: int,
|
address: int,
|
||||||
|
|
Loading…
Reference in a new issue