Skip to content

Commit 05b0dba

Browse files
committed
Add rejected reply for bad space info request (FIXME: Is this the right error reply?). Add more logging, move some to INFO level.
1 parent 6507756 commit 05b0dba

1 file changed

Lines changed: 25 additions & 3 deletions

File tree

openlcb/memoryservice.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,8 @@ def parseReplyDatagram(memo: Union[MemoryReadMemo, MemoryWriteMemo],
339339
"fromMC2ndByte should not set customSpace in this case"
340340
memo.error = None
341341
memo.errorCode = None
342-
print(f"reply datagram: {mcHeader.spaceIndex} customSpace={mcHeader.customSpace}")
342+
logger.info(f"reply datagram: {mcHeader.spaceIndex}"
343+
f" customSpace={mcHeader.customSpace}")
343344
if (dmemo.data[1] & 0x08 == 0):
344345
# ok reply
345346
return
@@ -559,9 +560,12 @@ def datagramReceivedListener(self, dmemo: DatagramReadMemo) -> bool:
559560
# 0x84 (A node sent us a command requesting space info)
560561
# assert mcOp is MCOp.Get_Address_Space_Info_Command, \
561562
# "self-test failed (bad constant(s))"
563+
logger.info("[MemoryService datagramReceivedListener]"
564+
" Get_Address_Space_Info_Command")
562565
space = dmemo.data[2]
563566
last = self.memory.getLast(space)
564567
if last is not None:
568+
logger.info("Found populated segment...")
565569
first = self.memory.getFirst(space)
566570
assert isinstance(first, int)
567571
assert last - first >= 0, \
@@ -605,9 +609,27 @@ def datagramReceivedListener(self, dmemo: DatagramReadMemo) -> bool:
605609
replyData
606610
)
607611
self.service.sendDatagram(spaceInfoReplyMemo)
612+
logger.info("- added extended info")
613+
else:
614+
logger.info("- skipping simple reply")
608615
else:
609-
# TODO: rejected
610-
pass
616+
error = (f"- rejected (No last address for space"
617+
f" {hex(space)}): {Convert.toHex(dmemo.data)}")
618+
logger.info(error)
619+
if isinstance(self.memory, MemoryManager):
620+
if space == 0xFF:
621+
logger.warning(
622+
"MemoryManager does not have CDI by default."
623+
" Use its subclass LocalNode to load CDI XML.")
624+
errorCode = 1
625+
address = 0
626+
# FIXME: Is this the right error reply? If not make memo here
627+
failedMemo = MemoryService.failedMemo(
628+
MCOp.Read_Reply_Failure, dmemo.srcID, address, space,
629+
errorCode, error)
630+
self.service.sendDatagram(failedMemo)
631+
return True # handled (early, in error case)
632+
611633
elif dmemo.data[1] in (0x86, 0x87): # Address Space Information Reply
612634
# assert mcOp is MCOp.Get_Address_Space_Info_Command, \
613635
# "self-test failed (bad constant(s))"

0 commit comments

Comments
 (0)