Add files via upload

This commit is contained in:
Dominic Monette
2020-07-13 06:42:48 -04:00
committed by GitHub
parent db35ee9cff
commit 0ded9cf98b
92 changed files with 13631 additions and 0 deletions

89
packet.py Normal file
View File

@@ -0,0 +1,89 @@
import crc
import serial
import time
OP_SET_TARGETS = 0x01
OP_ARM = 0x02
OP_GO = 0x03
OP_PING = 0x04
OP_REG_WRITE = 0x05
OP_REG_READ = 0x06
REG_INDEX_ADJUST = 0
REG_ROTATE_NOP = 1
REG_ONE_REV_MIN = 2
REG_REV_COUNT_0 = 3
REG_REV_COUNT_1 = 4
REG_REV_COUNT_2 = 5
REG_REV_COUNT_3 = 6
REG_REV_COUNT_4 = 7
REG_REV_COUNT_5 = 8
REG_REV_COUNT_6 = 9
REG_FREQ_D = 10
REG_FREQ_N = 11
REG_CRC_ERRORS = 12
REG_ZERO_NOISE = 13
def build(address, flags, payload, print_it=True):
packet_len = 1+2+1+2+len(payload)+4
b = bytearray(packet_len)
b[0] = 0xff
b[1] = address & 0xff
b[2] = address >> 8
b[3] = flags
b[4] = len(payload) & 0xff
b[5] = len(payload) >> 8
b[6:6+len(payload)] = payload
b[6+len(payload)+0] = 0xff
b[6+len(payload)+1] = 0xff
b[6+len(payload)+2] = 0xff
b[6+len(payload)+3] = 0xff
crc32 = crc.CRC32(b, packet_len - 4);
b[6+len(payload)+0] = (crc32 >> (0*8)) & 0xff
b[6+len(payload)+1] = (crc32 >> (1*8)) & 0xff
b[6+len(payload)+2] = (crc32 >> (2*8)) & 0xff
b[6+len(payload)+3] = (crc32 >> (3*8)) & 0xff
#if print_it:
#print('Tx: %s' % (('xxxx','STGT', 'ARM ', 'GO ', 'PING', 'REGW', 'REGR')[b[6]]) ),
#for bb in b:
#print(" %02x" % bb),
#print('')
return b
def ping(address, print_it=True):
return build(address, 0, [0x04, 0x00, 0x00], print_it)
def set_targets(address, targets, print_it=True):
payload = bytearray(8)
payload[0] = OP_SET_TARGETS
for i in range(len(payload)-1):
if i < len(targets):
payload[i+1] = targets[i]
else:
payload[i+1] = ' '
return build(address, 0, payload, print_it)
def arm(address, print_it=True):
return build(address, 0, [OP_ARM], print_it)
def go(address, print_it=True):
return build(address, 0, [OP_GO], print_it)
def reg_write(address, reg, val, print_it=True):
return build(address, 0, [OP_REG_WRITE, reg & 0xff, ((val>>8)&0xff), val & 0xff], print_it)
def reg_read(address, reg, print_it=True):
return build(address, 0, [OP_REG_READ, reg & 0xff], print_it)
def send(sport, s):
sport.rts = False # Set high... logic is inverted
sport.write([s[0]])
for c in s[1:]:
if c == 0xfe or c == 0xff:
sport.write([0xfe])
sport.write([c])
time.sleep(.01) # Delay
sport.rts = True # Set low... logic is inverted