From 582e6d77861661991cac818f035a1c67a4d92f74 Mon Sep 17 00:00:00 2001 From: jaseg Date: Sun, 10 Dec 2017 15:59:56 +0100 Subject: Add discovery and addressing mechanism --- fw/test.py | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'fw/test.py') diff --git a/fw/test.py b/fw/test.py index 6836072..dab5482 100755 --- a/fw/test.py +++ b/fw/test.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import serial +from itertools import takewhile def chunked(data, chunk_size): for i in range(0, len(data), chunk_size): @@ -29,15 +30,37 @@ def format_packet(data): out += bytes([1, 0, 0, 0]) # global intensity return out +def chariter(ser): + while True: + yield ser.read(1) + +def read_frame(ser): + return b''.join(takewhile(lambda c: c and c[0], chariter(ser))) + +def unstuff(data): + out = b'' + while data: + stuff = data[0] + if out: + out += b'\0' + out += data[1:stuff] + data = data[stuff:] + return out + +def receive_frame(ser): + return unstuff(read_frame(ser)) + if __name__ == '__main__': import argparse import time + import struct + from binascii import hexlify parser = argparse.ArgumentParser() parser.add_argument('serial') args = parser.parse_args() - ser = serial.Serial(args.serial, 2000000) + ser = serial.Serial(args.serial, 2000000, timeout=0.05) frame_len = 4*8*8 black, red = [0]*frame_len, [255]*frame_len @@ -49,10 +72,26 @@ if __name__ == '__main__': #frames = [red, black]*5 #frames = [ x for l in [[([0]*i+[255]+[0]*(7-i))*32]*2 for i in range(8)] for x in l ] + found_macs = set() + while True: + ser.write(b'\0') + frame = receive_frame(ser) + if len(frame) == 4: + mac, = struct.unpack('