import select from serial import Serial from crcmod import mkCrcFun from struct import pack, unpack_from, calcsize class ModemDiag: def __init__(self): self.serial = self.open_serial() self.pend = b'' def open_serial(self): serial = Serial("/dev/ttyUSB0", baudrate=115200, rtscts=True, dsrdtr=True, timeout=0, exclusive=True) serial.flush() serial.reset_input_buffer() serial.reset_output_buffer() return serial ccitt_crc16 = mkCrcFun(0x11021, initCrc=0, xorOut=0xffff) ESCAPE_CHAR = b'\x7d' TRAILER_CHAR = b'\x7e' def hdlc_encapsulate(self, payload): payload += pack('= 3 assert payload[-1:] == self.TRAILER_CHAR payload = payload[:-1] payload = payload.replace(bytes([self.ESCAPE_CHAR[0], self.TRAILER_CHAR[0] ^ 0x20]), self.TRAILER_CHAR) payload = payload.replace(bytes([self.ESCAPE_CHAR[0], self.ESCAPE_CHAR[0] ^ 0x20]), self.ESCAPE_CHAR) assert payload[-2:] == pack('