# Утилита dio

Утилита для управления DIO модулем через демон USPDD

## Описание

Программа `dio` позволяет управлять цифровыми входами и выходами (DIO модулем) через демон USPDD. Утилита может отображать состояние входов, управлять выходами, настраивать конфигурацию каналов и осуществлять мониторинг в реальном времени.

## Использование

```bash
dio [опции]
```

### Опции

* `-i [N]` - Показать состояние входа N (1-8) или всех входов
* `-o [N=V]` - Показать состояние всех выходов или установить выход N в V (0|1)
* `-c CONF` - Конфигурировать канал:
  * `iN=enable,active_level,antibounce_time` - для входов
  * `oN=enable` - для выходов
* `-s` - Показать состояние всех входов и выходов
* `-C` - Показать конфигурацию всех каналов
* `-m` - Мониторинг состояния (Ctrl+C для выхода)
* `-h` - Показать справку

### Примеры использования

#### Просмотр состояния входов

Показать состояние конкретного входа (вывод: `0` или `1`):

```bash
dio -i 1
```

Показать состояние всех входов в виде таблицы:

```bash
dio -i
```

#### Управление выходами

Показать состояние всех выходов:

```bash
dio -o
```

Установить выход 2 в состояние 1:

```bash
dio -o 2=1
```

Установить выход 5 в состояние 0:

```bash
dio -o 5=0
```

#### Конфигурация каналов

Включить вход 1, установить активный высокий уровень, антидребезг 100мс:

```bash
dio -c i1=1,1,100
```

Отключить вход 3:

```bash
dio -c i3=0,0,0
```

Включить выход 4:

```bash
dio -c o4=1
```

#### Просмотр состояния и конфигурации

Показать состояние всех входов и выходов:

```bash
dio -s
```

Показать конфигурацию всех каналов:

```bash
dio -C
```

#### Мониторинг

Непрерывный мониторинг состояния (обновление каждые 100мс):

```bash
dio -m
```

## Параметры конфигурации

### Для входов (DI)

* **enable** - включение канала (0=выключен, 1=включен)
* **active_level** - активный уровень (0=активный низкий, 1=активный высокий)
* **antibounce_time** - время антидребезга в миллисекундах (0-2000)

### Для выходов (DO)

* **enable** - включение канала (0=выключен, 1=включен)

## Формат вывода

### Одиночный вход

При запросе состояния конкретного входа утилита выводит только `0` или `1` для простой интеграции с другими программами.

### Таблица входов/выходов

При запросе состояния всех каналов данные выводятся в табличном формате с временными метками последнего обновления.

**Пример вывода состояния входов:**

```text
Входы DIO модуля (обновлено: 2024-01-15 14:30:25.123456)
CH | State
---|------
 1 | 0
 2 | 1
 3 | 0
 ...
```

**Пример вывода конфигурации:**

```text
Конфигурация DIO модуля (обновлено: 2024-01-15 14:30:25.123456)

Входы (DI):
CH | Enable | IRQ | Active | Antibounce
---|--------|-----|--------|------------
 1 |      1 |   0 |   HIGH |        100 мс
 2 |      1 |   0 |    LOW |         50 мс
 ...

Выходы (DO):
CH | Enable
---|-------
 1 |      1
 2 |      0
 ...
```

## Коды возврата

* **0** - успешное выполнение
* **-1** (255) - любая ошибка (недоступность демона, неверные параметры, и т.д.)

## Требования

* Демон `uspdd` должен быть запущен
* Разделяемая память и очередь сообщений должны быть доступны
* DIO модуль должен быть подключен и сконфигурирован

## Устранение неисправностей

### "Ошибка: не удается открыть разделяемую память"

Демон `uspdd` не запущен или недоступен. Проверьте:

```bash
systemctl status uspdd
```

### "Ошибка: не удается открыть очередь сообщений"

Демон недоступен для записи команд управления. Убедитесь, что демон работает и имеет правильные разрешения.

### "Предупреждение: DIO модуль в состоянии сбоя"

DIO модуль недоступен или неисправен. Проверьте физическое подключение модуля и логи демона:

```bash
journalctll -u uspdd
```
