@@ -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