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) -> void: self.name = nm
    func _to_string() -> String:
        return String('Unit(\"%s\", %s)' % [self.name, 'на связи' if online else 'отключен'])
