#!/usr/bin/env python import sys from collections import namedtuple import struct from more_itertools import partition from serial import Serial from sliplib import ProtocolError import msgpack from coax.serial_interface import SlipSerial, _unpack_receive_data Packet = namedtuple('Packet', ['timestamp', 'words', 'errors']) class TapException(Exception): pass class NewCoaxTap: def __init__(self, serial_port): self.serial = Serial(serial_port, 115200) self.slip_serial = SlipSerial(self.serial) def enable(self): self.serial.write(b'e') self.serial.flush() def read(self): try: message = self.slip_serial.recv_msg() except ProtocolError: raise TapException('SLIP protocol error') if len(message) < 6: raise TapException('Invalid message received, must be at least 6 bytes') if len(message) % 2 != 0: raise TapException('Invalid message received, must be even length') timestamp = struct.unpack('