mirror of
https://github.com/markqvist/Reticulum.git
synced 2024-11-07 14:50:15 +00:00
77 lines
1.6 KiB
Python
77 lines
1.6 KiB
Python
|
from __future__ import print_function
|
||
|
from Interface import Interface
|
||
|
import sys
|
||
|
import serial
|
||
|
import threading
|
||
|
|
||
|
class SerialInterface(Interface):
|
||
|
MAX_CHUNK = 32768
|
||
|
TIMEOUT_SECONDS = 0.15
|
||
|
|
||
|
owner = None
|
||
|
port = None
|
||
|
speed = None
|
||
|
databits = None
|
||
|
parity = None
|
||
|
stopbits = None
|
||
|
serial = None
|
||
|
|
||
|
def __init__(self, owner, port, speed, databits, parity, stopbits):
|
||
|
self.owner = owner
|
||
|
self.port = port
|
||
|
self.speed = speed
|
||
|
self.databits = databits
|
||
|
self.parity = serial.PARITY_NONE
|
||
|
self.stopbits = stopbits
|
||
|
|
||
|
if parity.lower() == "e" or parity.lower() == "even":
|
||
|
self.parity = serial.PARITY_EVEN
|
||
|
|
||
|
if parity.lower() == "o" or parity.lower() == "odd":
|
||
|
self.parity = serial.PARITY_ODD
|
||
|
|
||
|
try:
|
||
|
self.serial = serial.Serial(
|
||
|
port = self.port,
|
||
|
baudrate = self.speed,
|
||
|
bytesize = self.databits,
|
||
|
parity = self.parity,
|
||
|
stopbits = self.stopbits,
|
||
|
timeout = SerialInterface.TIMEOUT_SECONDS,
|
||
|
xonxoff = False,
|
||
|
rtscts = False,
|
||
|
write_timeout = None,
|
||
|
dsrdtr = False,
|
||
|
)
|
||
|
print(self.serial.inter_byte_timeout)
|
||
|
except Exception as e:
|
||
|
print("Could not create serial port", file=sys.stderr)
|
||
|
raise e
|
||
|
|
||
|
#self.serial.open()
|
||
|
if self.serial.is_open:
|
||
|
thread = threading.Thread(target=self.readLoop)
|
||
|
thread.setDaemon(True)
|
||
|
thread.start()
|
||
|
else:
|
||
|
raise IOError("Could not open serial port")
|
||
|
|
||
|
|
||
|
def processIncoming(self, data):
|
||
|
self.owner.__class__.incoming(data)
|
||
|
|
||
|
|
||
|
def processOutgoing(self,data):
|
||
|
self.serial.write(data)
|
||
|
|
||
|
|
||
|
def readLoop(self):
|
||
|
while self.serial.is_open:
|
||
|
data = self.serial.read(size=self.owner.__class__.MTU)
|
||
|
if not data == "":
|
||
|
self.processIncoming(data)
|
||
|
|
||
|
|
||
|
|
||
|
|