Пример #1
0
class PacketSender:
    def __init__(self, name_serial, nop):
        '''
        :param nameSerial: name of serial port exp. 'COM10' or '/tty/ttyUSB'
        :param nop: number of packet in frame
        '''
        self.frame = Frame(nop)
        self.serial = serial.Serial(port=name_serial,
                                    baudrate=115200,
                                    parity=serial.PARITY_NONE,
                                    stopbits=serial.STOPBITS_ONE,
                                    bytesize=serial.EIGHTBITS,
                                    timeout=1)
        if self.serial.isOpen():
            print('[{}]: {} is open..'.format(__name__, name_serial))

    def log(self, text):
        print('[{}]: {}'.format(__name__, text))

    def add_packet(self, command, data):
        packet = Packet(command, data)
        if self.frame.is_full():
            self.send_frame()
            self.frame.clear()
        self.log('Add packet ({}, {})'.format(packet.command, packet.data))
        self.frame.add_packet(packet)

    def send_frame(self):
        max_size = self.frame.get_max_size()
        actual_size = self.frame.get_actual_size()

        if actual_size > 0:
            for i in range(actual_size):
                command = self.frame[i].command
                data = self.frame[i].data
                self.log('Send ({}, {})'.format(command, data))
                command = command.to_bytes(2, byteorder='little')
                data = data.to_bytes(2, byteorder='little')
                self.serial.write([command[0], command[1], data[0], data[1]])
            for l in range(max_size - actual_size):
                self.log('Send ({}, {})'.format(0, 0))
                self.serial.write([0, 0, 0, 0])
            self.frame.clear()