3 M]W$ @ s$ d Z ddlZddlZG dd deZG dd deZG dd deZG d d d eZG dd dejZ e d kr ddlZddlZddl Z dZG dd deZejedddZe eeZejd ejd W dQ R X ejedddZe eeZej ej \ZZejd ejd ej dS )z%Support threading with serial ports. Nc @ s( e Zd ZdZdd Zdd Zdd ZdS ) Protocolzq Protocol as used by the ReaderThread. This base class provides empty implementations of all methods. c C s dS )z$Called when reader thread is startedN )self transportr r /usr/lib/python3.6/__init__.pyconnection_made s zProtocol.connection_madec C s dS )z2Called with snippets received from the serial portNr )r datar r r data_received s zProtocol.data_receivedc C s t |tr|dS )zg Called when the serial port is closed or the reader loop terminated otherwise. N) isinstance Exception)r excr r r connection_lost s zProtocol.connection_lostN)__name__ __module____qualname____doc__r r r r r r r r s r c sD e Zd ZdZdZdd Zdd Z fddZd d Zdd Z Z S ) Packetizerz Read binary packets from serial port. Packets are expected to be terminated with a TERMINATOR byte (null byte by default). The class also keeps track of the transport. c C s t | _d | _d S )N) bytearraybufferr )r r r r __init__/ s zPacketizer.__init__c C s || _ dS )zStore transportN)r )r r r r r r 3 s zPacketizer.connection_madec s d| _ tt| j| dS )zForget transportN)r superr r )r r ) __class__r r r 7 s zPacketizer.connection_lostc C sB | j j| x0| j| j kr<| j j| jd\}| _ | j| qW dS )z9Buffer received data, find TERMINATOR, call handle_packet N)r extend TERMINATORsplit handle_packet)r r packetr r r r <