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

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()