Add files via upload
This commit is contained in:
70
test-ping.py
Normal file
70
test-ping.py
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import serial
|
||||
import serial.rs485
|
||||
import time
|
||||
import packet
|
||||
import crc
|
||||
import RPi.GPIO as GPIO
|
||||
|
||||
def read_reply(sport):
|
||||
return sport.read(13)
|
||||
|
||||
def print_echo(s, count, before, after):
|
||||
barr = bytearray(s)
|
||||
print('Rx: %s' % (('STGT','xxxx', 'ARM ', 'GO ', 'PING')[barr[6]]) ),
|
||||
for b in barr:
|
||||
print(" %02x" % b),
|
||||
print(" [%d src=%04x %1.3fms]" % (count, (ord(s[8])<<8)|ord(s[7]), (after-before)*1000))
|
||||
|
||||
|
||||
def ping_packet(address):
|
||||
return packet.ping(address)
|
||||
|
||||
def send_packet(sport, s):
|
||||
sport.rts = False # Set high... logic inverted
|
||||
sport.write([s[0]])
|
||||
for c in s[1:]:
|
||||
if c == 0xfe or c == 0xff:
|
||||
print('escape')
|
||||
sport.write([0xfe])
|
||||
sport.write([c])
|
||||
time.sleep(.01) # Delay
|
||||
sport.rts = True # Set low... logic inverted
|
||||
|
||||
def main():
|
||||
|
||||
count = 0
|
||||
|
||||
#for b in packet_build(0x0001, 0x42, [0x04, 0xaa, 0x55]):
|
||||
# print("%02x" % b)
|
||||
#return
|
||||
|
||||
with serial.Serial('/dev/ttyAMA0', 38400) as ser:
|
||||
ser.rts = False # setting it to high. The logic is negated. What a mess.
|
||||
# ser.rs485_mode = serial.rs485.RS485Settings(rts_level_for_tx=True, rts_level_for_rx=False, loopback=False)
|
||||
while True:
|
||||
count += 1
|
||||
# 22 col instead of 23 now
|
||||
# XXX
|
||||
for addr in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]:
|
||||
#for addr in [1, 2, 3, 4, 5, 6, 7, 8]:
|
||||
before = time.clock()
|
||||
packet.send(ser, ping_packet(addr))
|
||||
s = read_reply(ser)
|
||||
after = time.clock()
|
||||
print_echo(s, count, before, after)
|
||||
barr = bytearray(s)
|
||||
crc_data = crc.CRC32(barr, len(barr)-4)
|
||||
#for b in barr:
|
||||
# print(" %02x" % b),
|
||||
crc_rcvd = (barr[len(barr)-1] << 24) |(barr[len(barr)-2] << 16) | (barr[len(barr)-3] << 8) | (barr[len(barr)-4] << 0);
|
||||
if (crc_rcvd != crc_data):
|
||||
print(" [!CRC]"),
|
||||
print("")
|
||||
ser.flush()
|
||||
time.sleep(.250)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user