class_name base_unit extends Node ## Базовый класс для управления подключаемыми устройствами class Unit extends Object: ## Состояние автомата выполнения команды. enum CmdState { UNCK, ## Номер команды не ининциирован. SEND, ## Буфер готов для отправки. WAIT, ## Ожидание выполнения. DONE, ## Команда выполнена. FAIL ## Команда не выполнена. } signal line_changed(unit) ## Вызывается при изменении состояния связи signal command_done(unit) ## Вызывается после успешного выполнения команды. signal command_fail(unit) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена. signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных signal data_received(data) ## Вызывается по приёму данных var cmd_state: = CmdState.UNCK ## Состояние выполнения команды var tx_data: = PackedByteArray() ## Буфер для отправки. var tx_len: int = 0 ## Длина последнего отправленного пакета. var tx_tick: int = 0 ## Тик-время отправки буфера var rx_tick: int = 0 ## Тик-время последнего приёма данных var online: bool = false ## Состояние подключения устройства var name: StringName = '<без имени>' ## Уникальное имя устройства func _init(nm: StringName) -> void: self.name = nm func _to_string() -> String: return String('Unit(\"%s\", %s)' % [self.name, 'на связи' if online else 'отключен'])