
## Описание протокола CLI (command line interface)

### 1. Назначение и требования

1.1 Назначение

Протокол предназначен для тестирования и диагностики встроенного ПО устройств, подключенных к компьютеру (ПК) через интерфейс UART (COM-порт). Компьютер выступает в роли хоста (мастера), а устройства в роли подчиненных. 

Параметры интерфейса:
- тип: точка-точка или звезда;
- скорость: 115200 бод;
- четность: нет;
- стоп.бит: 1; 
 
1.2 Функциональные требования

| ID  | Требование |
|-----|-----|
| F1 | Мастер должен поддерживать одновременную работу с одним или несколькими устройствами |
| F2 | Устройство должно поддерживать одновременную работу только с одним мастером |
| F3 | Устройства должны ожидать команды от мастера и отправлять ответ (со статусом выполнения или с данными) |
| F4 | Соединение с устройством должно открываться по паролю (опицонально) |
| F5 | Протокол обмена должен быть текстовым (ASCII), с возможностью расширения диапазона команд (в зависимости от специфики устройств) |
| F6 | Протокол должен иметь защиту от неправильного закрытия соединения. Возможные случаи: нет обмена в течение 20с, обрыв сообщения |
| F7 | Размер поля данных для команды или ответа должен быть не более 64 байт  |
| F8 | -  |



### 2. Обзор протокола

Особенности:
- команда кодируется заглавной буквой, ответ на команду строчной буквой;
- все данные передаются в шестнадцатеричном формате (HEX).
- команды завершаются символом carriage return 0x0d (\r); 

| Код команды (ASCII) | Размер данных (в байтах) | Описание |
|---|--|--|
| T[xx] | 1-64 | Отправка команды\данных xx (от 00 до FF) |
| t[xx] | 1-64 | Ответ на команду xx |
| e[xx] | 1    | Ошибка команды xx |
|       |      |  |


Коды ошибок:
| Код (hex) | Описание |
|-----|----------|
| 00  | Нет ошибки |
| 01  | Неизвестная команда |
| 02  | Неверный формат или значение аргумента |
| 03  | Внутренняя ошибка устройства |


Примеры обмена:

ПК -> : T01\r             (открытие соединения);
Устр->: t00\r             (ответ: ОК);

ПК -> : T051234\r        (команда 0x05, аргумент 0x1234);
Устр->: e0502\r          (ответ: ошибка 0х02 на команду 0x05);


### 3. Описание команд

Коды команд от 0 до 31 выделены под базовые для любого устройства команды. Коды от 32 до 255 под специфичные команды, они не будут описаны в данном документе.

todo - сделать описание базовых команд (сделать таблицу с кодами, описанием и ответами)

Список базовых команд:
- открытие соединения;
- закрытие соединения;
- Получение информации об устройстве (имя, серийный номер, версия ПО);
- Чтение памяти
- Запись памяти
- ...


### 4. API библиотеки для ПК

todo    