/
VladimirP71
/
DIY_EFIS
Обзор
Документация
Войти
/
VladimirP71
/
DIY_EFIS
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
parser
40 строк
1 KB
VladimirP71
create parser
21 апр 2025, 12:42
21 апр 2025, 12:42
c05baa0
Код
Авторство
О чём код?
import serial import threading import re import queue class EFISSerialReader: def __init__(self, port='/dev/ttyUSB0', baud=115200): self.serial_port = serial.Serial(port, baud, timeout=1) self.running = True self.queue = queue.Queue() self.thread = threading.Thread(target=self.read_loop, daemon=True) self.thread.start() def stop(self): self.running = False self.serial_port.close() def read_loop(self): can_regex = re.compile(r'CAN ID: ([0-9A-Fa-f]+) Data: ((?:[0-9A-Fa-f]{1,2} ?)+)') enc_regex = re.compile(r'ENCODER: (-?\d+)') while self.running: try: line = self.serial_port.readline().decode().strip() if not line: continue if (match := can_regex.match(line)): can_id = int(match.group(1), 16) data = [int(b, 16) for b in match.group(2).strip().split()] self.queue.put({'type': 'CAN', 'id': can_id, 'data': data}) continue if (match := enc_regex.match(line)): pos = int(match.group(1)) self.queue.put({'type': 'ENCODER', 'position': pos}) continue except Exception as e: print(f"[Serial Error] {e}")