You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.7 KiB
50 lines
1.7 KiB
import serial
|
|
from serial import STOPBITS_TWO
|
|
|
|
|
|
class IdiBusSerialLine(serial.Serial):
|
|
|
|
def __init__(self, port="", baudrate=0, **kwargs):
|
|
if not port or not baudrate:
|
|
pass
|
|
else:
|
|
self.maxPacketSize = 256 + 2 + 5 # From defines in Slave
|
|
self.defaultTimeout = 0.025
|
|
|
|
super().__init__(
|
|
port=port,
|
|
baudrate=baudrate,
|
|
timeout=kwargs.get('timeout', self.defaultTimeout),
|
|
parity=kwargs.get('parity', serial.PARITY_NONE),
|
|
stopbits=kwargs.get('stopbits', STOPBITS_TWO),
|
|
**{k: v for k, v in kwargs.items()
|
|
if k not in ['timeout', 'parity', 'stopbits']}
|
|
)
|
|
|
|
#print(f"Serial port opened at {self.port}")
|
|
|
|
def __del__(self):
|
|
if hasattr(self, 'is_open') and self.is_open:
|
|
self.close()
|
|
#print(f"Serial port closed at {self.port}")
|
|
|
|
def writeData(self, msg):
|
|
"""Отправка данных"""
|
|
return self.write(msg) # Возвращаем количество байт
|
|
|
|
def readData(self, await_bytes=0):
|
|
"""Чтение данных"""
|
|
if await_bytes == 0:
|
|
await_bytes = self.maxPacketSize
|
|
return self.read(await_bytes)
|
|
|
|
# Дополнительные полезные методы
|
|
def write_read(self, msg, response_bytes=0):
|
|
"""Отправить и прочитать ответ"""
|
|
self.writeData(msg)
|
|
return self.readData(response_bytes)
|
|
|
|
def flush_buffers(self):
|
|
"""Очистить буферы"""
|
|
self.reset_input_buffer()
|
|
self.reset_output_buffer() |