#!/usr/bin/env python3 import os from fcntl import ioctl from time import sleep import struct from collections import namedtuple import cffi import select import datetime import sys ffi = cffi.FFI() def mkstruct(name, fields, spec): cls = namedtuple(name, fields) def iter_load(bs): return map(cls._make, struct.iter_unpack(spec, bs)) cls.iter_load = iter_load def load(bs): return cls._make(struct.unpack(spec, bs)) cls.load = load def iter_save(items): return b''.join(struct.pack(spec, *item) for item in items) cls.iter_save = iter_save def save(item): return struct.pack(spec, *item) cls.save = save return cls # struct sipc_fmt_hdr, modem_prj.h Packet = mkstruct('Packet', 'len msg_seq ack_seq main_cmd sub_cmd cmd_type', '