mirror of
https://github.com/markqvist/Reticulum.git
synced 2025-05-11 10:55:39 -04:00
Serial interface implemented
This commit is contained in:
parent
9a9630cfd2
commit
be8fa4f7bb
15 changed files with 2789 additions and 30 deletions
76
FPE/Interfaces/SerialInterface.py
Normal file
76
FPE/Interfaces/SerialInterface.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
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)
|
||||
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue