Протокол обмена по UART
Contents
Общая информация
В документе приведено описание протокола обмена с оборудованием R-CALL по последовательному интерфейсу. В частности, приведено описание протокола для пультов серии ПА и беспроводного адаптера БПА, оснащенных USB интерфейсом. Основные характеристики интерфейса:
- физический и канальный интерфейс – USB;
- логический интерфейс – Virtual COM Port;
- скорость обмена по UART – 56700, режим 8N1.
В устройствах с платой МРК (модуль радиоканала) версии до 4.0 установлен преобразователь USB-UART FT323BM (FTDI Chip), свежие версии драйверы под различные ОС доступны на сайте производителя.
Начиная с версии PCB 4.0 в МРК устанавливается конвертер USB-COM CP2102 (Silicon Labs). Драйверы доступны на сайте производителя.
После установки необходимых драйверов при подключении устройства к компьютеру в системе будет появляться дополнительный последовательный порт, по которому производится обмен данными с устройством.
Поле | размер, байт) | Описание |
HEADRER0 | 1 | Маркер начала (0xAF) |
HEADRER1 | 1 | Маркер начала (0xFA) |
LEN | 2 (uint16_t) | Длина всего пакета (от маркера начала до CRC) |
MSGDATA | LEN-6 | Данные сообщения |
CRC16 | 2 | Контрольная сумма |
Обмен с пультами серии ПА/ПВ в версией ПО МРК до 4.0 происходит по протоколу версии 1.0. Начиная с ПО версии 4.0 поддерживается команды протокола версии 2.0. Узнать версию ПО можно с помощью команды SP_GET_DEV_INFO.
Разделение на версии 1.0 и 2.0 протокола сделано для того, что бы обеспечить совместимость разрабатываемого нового ПО с ранее выпущенным оборудованием и, одновременно, ввести новые функции, т.к. простое добавление новых команд в протокол делает невозможным создание "прозрачного" серверного ПО для оборудования с унифицированным сетевым интерфейсом (есть вариант с проверкой версии оборудования самим серверным ПО).
Команда | Код | Описание | БПА | ПА-1/2/5/10-И | ПП-5/10 |
Команды протокола R-SP 1.0 | |||||
SP_GET_DEV_INFO | 0x10 | Проверка подключения и определение типа устройства | X | X | X |
SP_SET_DEFAULTS | 0x30 | Установка параметров по умолчанию | X | X | X |
SP_DATETIME | 0x31 | Установка/чтение даты и времени | X | X | |
SP_RF_NET_PARAMS | 0x32 | Установка/чтение группы и номера устр-ва | X | X | |
SP_CFG | 0x33 | Установка/чтение настроек | X | X | |
SP_LOG_CTRL | 0x40 | Чтение параметров архива событий и его сброс (начиная с версии ПО МРК 2.4.0) | X | X | |
SP_GET_LOG_ITEM | 0x41 | Чтение элемента архива (начиная с версии ПО МРК 2.4.0) | X | X | |
SP_SEND_PGR_CALL | 0x51 | Передача вызова на пейджер | X | X | X |
SP_EVENT | 0x48 | Вывод принятого сообщения | X | X | |
SP_FREQ_CTRL | 0xF1 | Установка/чтение коэффициента коррекции частоты (только для производителя!) | X | X | |
Команды, поддерживаемые начиная с версии протокола R-SP 2.0 | |||||
SP_SEND_ADV_CALL | 0x52 | Расширенная передача сообщения | X | X | X |
Описание команд
SP_SETDEFAULTS
Направление: хост -> устройство. Команда устанавливает настройки устройства в значения по умолчанию (список настроек и их значения зависят от устройства). Запрос: в запросе передается один байт, равный значению кода команды - 0x30.
Поле | Размер, байт | Описание |
Cmd | 1 | Код сообщения (0x30) |
Ответ: в ответ устройство должно вернуть такую же команду.
SP_DATETIME
Направление: хост <-> устройство. Команда предназначена для установки и чтения времени/даты устройства.
Запрос:
Поле | Размер, байт | Описание |
Cmd | 1 | Код команды (0x31) |
Ctrl | 1 | Бит 0: 0 - чтение; 1 - запись |
YearMonth | 1 | Биты 7..4 - год; биты 3..0 - месяц |
Day | 1 | День месяца |
Hour | 1 | Часы |
Min | 1 | Минуты |
Sec | 1 | Секунды |
Ответ устройства: в ответ устройство посылает такую же команду, как и в запросе; в ответе содержится прочитанное из устройства дата и время.
SP_LOG_CTRL (формат команды с версии МРК 2.4.0)
Направление: хост <-> устройство.
Запрос:
Поле | Размер, байт (тип) | Описание |
Cmd | 1 | Код команды (0x40) |
Ctrl | 1 | Бит 1: 1 – сброс архива |
LogLen | 2 (uint16_t) | Кол-во записей в архиве |
LogMaxLen | 2 (uint16_t) | Максимально хранимое кол-во записей в архиве |
CurPos | 2 (uint16_t) | Индекс последней записи в архиве |
Для сброса архива необходимо установить 1-й бит поля Ctrtl, в результате происходит обнуление счетчика LogLen, а текущий индекс записи CurPos становится равен -1. При добавлении каждой записи значения LogLen и CurPos увеличиваются на 1. После достижения максимального адреса происходит проворачивание индекса CurPos и запись начинается с индекса 0. Значение LogLen не обнуляется и продолжает увеличиваться. По сути, архив событий представляет собой кольцевой буфер размером LogMaxLen.
Ответ: в ответ на эту команду устройство возвращает такую же команду, как и в запросе, но с заполненными полями LogLen, LogMaxLen и CurPos.
SP_GET_LOG_ITEM (формат команды с версии МРК 2.4.0)
Направление: хост <-> устройство.
Команда чтения записи из архива событий устройства с указанным индексом.
Запрос:
Поле | Размер, байт (тип) | Описание |
Cmd | 1 | Код команды (0x41) |
RecIdx | 2 (uint16_t) | Индекс запрашиваемого события |
Ответ:
Поле | Размер, байт (тип) | Описание |
Cmd | 1 | Код команды (0x41) |
RecIdx | 2 (uint16_t) | Индекс запрашиваемого события |
Event | sizeof(TEvent) | Событие |
В ответе передается хранящаяся в архиве запись события по индексу RecIdx
в виде структуры TEvent
, содержащей в своем поле Data
структуру TEvData_RFMsg
.
Начиная с версии ПО МРК 4.0 в ответе на команду SP_GET_LOG_ITEM
для каждого события в поле Status
структуры Event
передается поле data
из структуры TMsg
. В сообщениях посылки вызова и сброса c кодами 0x4 и 0x5 в этом поле содержится номер стола.
SP_EVENT
Направление: хост <- устройство.
Команда формируется при получении сообщения из эфира и в поле Event
содержит данные из принятого сообщения, включая классы и адреса устройств.
Поле | Размер, байт (тип) | Описание |
Cmd | 1 | Код команды (0x48) |
RecNum | 2 (uint16_t) | 0x0000 |
Event | (TEvent) | Событие |
Начиная с версии ПО МРК 4.0 в поле Status
структуры Event
передается значение data
из принятого сообщения TMsg
.
SP_SEND_ADV_CALL
Направление: хост -> устройство (БПА/ПА).
При получении команды устройство формирует и передает в эфир сообщение с заданными в команде в структуре TEvData_RFMsg
и в поле data
реквизитами.
Поле | Размер, байт (тип) | Описание |
Cmd | 1 | Код команды (0x52) |
RecNum | (TEvData_RFMsg) | Данные передаваемого в эфир сообщения TMsg |
data | 1 (uint8_t) | Поле data передаваемого сообщения TMsg
|
Структуры, типы и определения
typedef struct { TDateTime dt; U8 Code; U8 Status; U8 Data[4]; } TEvent;
class TEvData_RFMsg { public: U8 dev_info; // Grp (2), DestDevClass (3), SrcDevClass (3) U8 dest_addr; // U8 src_addr; // U8 msg; // Msg (8) }