61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
|
|
import socket,struct,time
|
||
|
|
|
||
|
|
DUT=("192.168.68.200",31772)
|
||
|
|
UID=bytes.fromhex("7fff0ae09229")
|
||
|
|
SRC=bytes.fromhex("0107340000aa")
|
||
|
|
|
||
|
|
def build(dest,cc,pid,pd):
|
||
|
|
f=bytearray(1084)
|
||
|
|
f[0:4]=b"ENet"
|
||
|
|
f[4]=4
|
||
|
|
f[0x0A]=0x1c; f[0x0B]=0x7c
|
||
|
|
f[0x12]=1
|
||
|
|
struct.pack_into("<H",f,0x14,1084)
|
||
|
|
f[0x18]=1
|
||
|
|
f[0x20]=2
|
||
|
|
f[0x2A]=0xCC
|
||
|
|
f[0x2E]=1
|
||
|
|
f[0x30]=0
|
||
|
|
msg_len=24+len(pd)
|
||
|
|
struct.pack_into("<I",f,0x34,msg_len+1)
|
||
|
|
f[0x38]=1
|
||
|
|
f[0x3C]=1
|
||
|
|
f[0x3D]=msg_len
|
||
|
|
f[0x3E:0x44]=dest
|
||
|
|
f[0x44:0x4A]=SRC
|
||
|
|
f[0x4A]=1
|
||
|
|
f[0x4F]=cc
|
||
|
|
struct.pack_into(">H",f,0x50,pid)
|
||
|
|
f[0x52]=len(pd)
|
||
|
|
f[0x53:0x53+len(pd)]=pd
|
||
|
|
s=0xCC+sum(f[0x3C:0x53+len(pd)])
|
||
|
|
struct.pack_into(">H",f,0x53+len(pd),s&0xFFFF)
|
||
|
|
return bytes(f)
|
||
|
|
|
||
|
|
def uid64(b): return int.from_bytes(b,"big")
|
||
|
|
v=uid64(UID)
|
||
|
|
branch_pd=(v-1).to_bytes(6,"big")+(v+1).to_bytes(6,"big")
|
||
|
|
|
||
|
|
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
|
||
|
|
s.settimeout(1.5)
|
||
|
|
s.bind(("192.168.68.1",0))
|
||
|
|
|
||
|
|
def probe(tag,frame,n=6):
|
||
|
|
ok=0
|
||
|
|
for i in range(n):
|
||
|
|
s.sendto(frame,DUT)
|
||
|
|
try:
|
||
|
|
d,a=s.recvfrom(2048)
|
||
|
|
rl=struct.unpack_from("<H",d,0x28)[0]
|
||
|
|
print("%s #%d reply %dB rlen=%d d0=%02x"%(tag,i,len(d),rl,d[0x2A]))
|
||
|
|
ok+=1
|
||
|
|
except socket.timeout:
|
||
|
|
print("%s #%d TIMEOUT"%(tag,i))
|
||
|
|
time.sleep(0.3)
|
||
|
|
print("%s: %d/%d replied"%(tag,ok,n))
|
||
|
|
|
||
|
|
probe("UNMUTE",build(b"\xff"*6,0x10,0x0003,b""))
|
||
|
|
probe("BRANCH",build(b"\xff"*6,0x10,0x0001,branch_pd))
|
||
|
|
probe("GET_DI",build(UID,0x20,0x0060,b""))
|
||
|
|
probe("BRANCH2",build(b"\xff"*6,0x10,0x0001,branch_pd))
|