@@ -608,9 +608,10 @@ def getMetadata(self):
608608 p .get_device_metadata_request = True
609609 logging .info (f"Requesting device metadata" )
610610
611- return self ._sendAdmin (
611+ self ._sendAdmin (
612612 p , wantResponse = True , onResponse = self .onRequestGetMetadata
613613 )
614+ self .iface .waitForAckNak ()
614615
615616 def factoryReset (self ):
616617 """Tell the node to factory reset."""
@@ -713,24 +714,30 @@ def onRequestGetMetadata(self, p):
713714 """Handle the response packet for requesting device metadata getMetadata()"""
714715 logging .debug (f"onRequestGetMetadata() p:{ p } " )
715716
716- if p ["decoded" ]["portnum" ] == portnums_pb2 .PortNum .Name (
717- portnums_pb2 .PortNum .ROUTING_APP
718- ):
717+ if "routing" in p ["decoded" ]:
719718 if p ["decoded" ]["routing" ]["errorReason" ] != "NONE" :
720- logging .warning (
721- f'Metadata request failed, error reason: { p ["decoded" ]["routing" ]["errorReason" ]} '
722- )
723- self ._timeout .expireTime = time .time () # Do not wait any longer
724- return # Don't try to parse this routing message
725- logging .debug (f"Retrying metadata request." )
726- self .getMetadata ()
727- return
719+ print (f'Error on response: { p ["decoded" ]["routing" ]["errorReason" ]} ' )
720+ self .iface ._acknowledgment .receivedNak = True
721+ else :
722+ self .iface ._acknowledgment .receivedAck = True
723+ if p ["decoded" ]["portnum" ] == portnums_pb2 .PortNum .Name (
724+ portnums_pb2 .PortNum .ROUTING_APP
725+ ):
726+ if p ["decoded" ]["routing" ]["errorReason" ] != "NONE" :
727+ logging .warning (
728+ f'Metadata request failed, error reason: { p ["decoded" ]["routing" ]["errorReason" ]} '
729+ )
730+ self ._timeout .expireTime = time .time () # Do not wait any longer
731+ return # Don't try to parse this routing message
732+ logging .debug (f"Retrying metadata request." )
733+ self .getMetadata ()
734+ return
728735
729- c = p ["decoded" ]["admin" ]["raw" ].get_device_metadata_response
730- self ._timeout .reset () # We made forward progress
731- logging .debug (f"Received metadata { stripnl (c )} " )
732- print (f"\n firmware_version: { c .firmware_version } " )
733- print (f"device_state_version: { c .device_state_version } " )
736+ c = p ["decoded" ]["admin" ]["raw" ].get_device_metadata_response
737+ self ._timeout .reset () # We made forward progress
738+ logging .debug (f"Received metadata { stripnl (c )} " )
739+ print (f"\n firmware_version: { c .firmware_version } " )
740+ print (f"device_state_version: { c .device_state_version } " )
734741
735742 def onResponseRequestChannel (self , p ):
736743 """Handle the response packet for requesting a channel _requestChannel()"""
0 commit comments