#!/usr/bin/env python import serial import time def main(): simple_test() def simple_test(): dongle = Dongle() try: dongle.connect() print "Connected. Writing to foo... Hit ^C to stop." dongle.write_everything_to_file_from_now_on(open('foo', 'wb')) except KeyboardInterrupt: dongle.disconnect() def print_buffer(buf, num_bytes): print "buffer:", for i in range(num_bytes): print "%02x" % buf[i], print class Dongle: cmd_auto_connect = bytearray([0xc2]) cmd_disconnect = bytearray([0xc1]) start_of_connected_status_packet = [ 0xaa, 0xaa, 0x04, 0xd0 ] def __init__(self): self.buffer = [] self.is_connected = False self.index_into_connection_packet = 0 self.open() def open(self): baudrate = 115200 port = '/dev/ttyUSB0' timeout = 0.1 self.ser = serial.Serial(port=port, baudrate=baudrate, timeout=timeout) def read(self): buffer = bytearray(256) num_bytes_read = self.ser.readinto(buffer) print_buffer(buffer, num_bytes_read) # parse it, and set flags for i in range(num_bytes_read): b = buffer[i] if b == Dongle.start_of_connected_status_packet[self.index_into_connection_packet]: self.index_into_connection_packet += 1 if self.index_into_connection_packet >= len(Dongle.start_of_connected_status_packet): self.is_connected = True self.index_into_connection_packet = 0 else: self.index_into_connection_packet = 0 def write(self, byte): self.ser.write(byte) def connect(self): toggle = True while True: self.read() if self.is_connected: return if toggle: self.write(Dongle.cmd_disconnect) else: self.write(Dongle.cmd_auto_connect) toggle = not toggle time.sleep(2) def write_everything_to_file_from_now_on(self, f): while True: f.write(self.ser.read()) def disconnect(self): self.write(Dongle.cmd_disconnect) self.is_connected = False if __name__ == '__main__': main()