tools/remote/comm_udp: probe Etherbone server on open().

This commit is contained in:
Florent Kermarrec 2020-11-26 09:06:46 +01:00
parent f390161baa
commit c3660379db
1 changed files with 19 additions and 0 deletions

View File

@ -26,6 +26,8 @@ class CommUDP(CSRBuilder):
return return
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.socket.bind(("", self.port)) self.socket.bind(("", self.port))
self.socket.settimeout(1)
self.probe()
def close(self): def close(self):
if not hasattr(self, "socket"): if not hasattr(self, "socket"):
@ -33,6 +35,23 @@ class CommUDP(CSRBuilder):
self.socket.close() self.socket.close()
del self.socket del self.socket
def probe(self):
# Send probe request to server...
packet = EtherbonePacket()
packet.pf = 1
packet.encode()
self.socket.sendto(packet.bytes, (self.server, self.port))
# ...and get/check server's response.
try:
datas, dummy = self.socket.recvfrom(8192)
packet = EtherbonePacket(datas)
packet.decode()
assert packet.pr == 1
except:
self.close()
raise Exception(f"Unable to probe Etherbone server at {self.server}.")
def read(self, addr, length=None, burst="incr"): def read(self, addr, length=None, burst="incr"):
assert burst == "incr" assert burst == "incr"
length_int = 1 if length is None else length length_int = 1 if length is None else length