Протокол сетевого обмена

From r-wiki
Jump to: navigation, search

Общая информация

Ряд устройств оборудования R-CALL оснащен интерфейсом Ethernet. К таким устройства относятся беспроводной адаптер (БПА-Е) и новые пульты серии ПА (в стадии разработки). Обмен данными между программным обеспечением R-CALL (напрмер, R-Monitor, Сервер БПА, плагин IIKO SousChefBell и др.) и этими устройствами происходит в проприетарном протоколе R-NP. Помимо оборудования, оснащенного Ethernet интерфейсом, обмен по сети возможен с пультами ПА и БПА, имеющими USB-интерфейс, для этого применяется ПО "Сервер БПА", выполняющий роль моста между сетью и оборудованием, подключенным по USB. Ниже представлена информация, необходимая для разработки приложений для оборудования R-CALL с взаимодейтсвием через сеть.

Сообщения протокола обмена между программным обеспечением и оборудованием R-CALL можно разделить на две группы. Одна группа сообщений предполагает обмен данными только между приложением-клиентом и приложением/оборудованием-сервером без задействования обмена по радиосети. В этом случае процедура обмена выглядит так:

Приложение -->-- NP_MSG_XXX (REQ) -->-- ПО/БПА-Е
    |                                      |                                       
     ------<---- NP_MSG_XXX (ACK) ----<----  

Т.е., на каждый запрос от клиента сервер возвращает ответ. Пример таких сообщений - NP_MSG_GET_DEVINFO, NP_MSG_PING, NP_MSG_GET_IPCONFIG и т.д.

Другая группа сообщений предназначена для взаимодействия с удаленными устройствами (кнопками, пейджерами и т.д.) посредством трансляции сообщения из сети Ethernet в радиосеть и обратно. Механизм обмена здесь можно представить на примере сообщения NP_MSG_SET_CALL, применяемого для посылки сообщения на пейджер или формируемого при поступлении вызова от кнопки вызова в виде следующих диаграмм:

Передача вызова от приложения на пейджер через пульт ПА или БПА-Е

Приложение --> NP_MSG_CALL_SET (REQ) -->-- ПА/БПА-Е -->-- RF_MSG_SET (REQ) --> Пейджер
    |                                         |                                   |
     ----<---- NP_MSG_CALL_SET (ACK) ----<----                                    | 
                                              |                                   |
                                               ------<--- RF_MSG_SET (ACK) ---<---                                

Передача вызова от кнопок к приложению через пульт или БПА

Кнопка вызова -->-- RF_MSG_SET_CALL (REQ) -->-- ПА/БПА-Е -->-- NP_MSG_SET_CALL -->-- Приложение
         |                                         |                                 
          ----<---- RF_MSG_SET_CALL (ACK) ----<----  

Взаимодействие между приложением и оборудованием предполагает наличие контроля доставки сообщений по радиоэфиру, т.е., устройство в радиосети, инициировавшее попытку передачи сообщения другому устройству (пульт ПА или БПА), предпринимает несколько попыток передачи до тех пор, пока количество попыток не достигнет максимального значения или не будет получен ответ от устройства. С другой стороны, в случае получения


 мевшее  если программа-приложение посылает БПА сообщение MSG_CALL_SET, адресованное пейджеру, то БПА предпримет несколько попыток передачи этого сообщения, пока не получит ответ от пейджера о приеме.

При таком механизме обмена приложение-клиент получает ответ от сервера о получении сообщения, в то время, как ответ от удаленного устройства (пейджера) получает только сервер. В дальнейшем планируется реализовать дополнительный ответ от сервера о подтверждении доставки сообщения к удаленному устройству.


Для ряда приложений возникла необходимость прозрачного прямого обмена сообщениями между приложением и конечными устройствами (кнопками, пейджерами и т.д.) без функции контроля доставки, поэтому в версии БПА 4.1.1 был введен, так называемый, прозрачный режим работы. В этом режиме БПА-Е является транслятором сообщений между радиосетью и интерфейсом Ethernet без проверки факта доставки сообщений получателю, эта функция ложится на приложение. Для связи сообщения, отправленного приложением и ответа, полученного от удаленного устройства в сообщениях, предполагающих обмен по радиоканалу, присутствует поле PID (packet ID), которое соответствует номеру пакета в структуре TRFPacket, передаваемой в радиосети. Таким образом, в прозрачном режиме приложение обязано добавлять поле PID в сообщения, предназначенные для передачи в эфир. Каждое последующее переданное сообщение должно иметь отличный от предыдущего PID в диапазоне 0..7. При работе БПА-Е в обычном режиме это поле не используется.


Обмен происходит сообщениями. Каждое сообщение имеет маркер начала, длину, данные и контрольную сумму.

Поле Длина Описание
HEADRER 1 Маркер начала (0x00)
LEN 2 Длина всего сообщения (от маркера начала до CRC)
RESERVED 1 Зарезервировано
MSGDATA Len Данные сообщения
CRC16 2 Контрольная сумма

Поле данных (собственно само сообщение) представляет собой объект (структуру) JSON. Набор полей структуры определяются версией встроенного ПО и типом сообщения.

Протокол R-NP 1.0

Общая информация

Применяемые в протоколе текстовые названия полей JSON приведены в разделе констант и определений. В том случае, ели источником сообщения (запроса) является клиент, то сервер всегда должен передать ответ на это сообщение, содержащий поле JSTR_RESULT, по которому можно судить о результате выполнения команды. Любой ответ сервера так же содержит поле "MID", копируемое сервером из запроса. Клиент должен изменять (увеличивать) это значения при каждом запросе, это дает возможность клиенту, сравнивая значение, MID в запросе и ответе, судить об актуальности ответа. Клиент может устанавливать MID в диапазоне 0..0xFFF. Если источником сообщения является сервер, то он последовательно изменяет MID от 0x1000 до 0x1FFF.

Список поддерживаемых сообщений

Сообщение Код Описание БПА-E Сервер БПА
NP_MSG_SET_CALL 0x01 Посылка вызова X X
NP_MSG_RST_CALL 0x02 Сброс вызова X X
NP_MSG_SET_CALL_TBL 0x04 Посылка вызова с номером стола X X
NP_MSG_RST_CALL_TBL 0x05 Сброс вызова с номером стола X X
NP_MSG_GET_DEVINFO 0x10 Запрос информации об устройстве/службе X X
NP_MSG_FIND 0x11 Поиск устройства/службы (запрос по UDP) X X
NP_MSG_PING 0x1A Проверка связи X X
NP_MSG_SET_DEFAULTS 0x30 Установка параметров по-умолчанию X
NP_MSG_SET_IPCONFIG 0x31 Установка сетевых настроек X
NP_MSG_GET_IPCONFIG 0x32 Запрос сетевых настроек X
NP_MSG_SET_DATETIME 0x35 Установка даты/времени X X
NP_MSG_GET_DATETIME 0x36 Чтение даты/времени X X
NP_MSG_CLEAR_LOG 0x40 Сброс архива событий X X
NP_MSG_GET_LOG_INFO 0x41 Запрос параметров архива событий X X
NP_MSG_GET_LOG_ITEM 0x42 Запрос элемента архива событий X X

Сообщения

NP_MSG_FIND (in work)

Сообщение предназначено для поиска в локальной сети сервисов и устройств R-CALL. Передача запроса и ответа производится широковещательно по UDP. Запрос:

{
"PRTCL": "1.0", 
"MSG": 0x11, // 
"MID": <msg_id>
}

Ответ:

{
"PRTCL": "1.0", 
"MSG": 0x11,
"MID": <msg_id>
......
}

NP_MSG_PING

Запрос:

{
"PRTCL": "1.0", 
"MSG": 0x1A,
"MSG_ID": <msg_id> // (uint16_t)
}

Ответ:

{
"PRTCL": "1.0", 
"MSG": 0x1A,
"MSG_ID": <msg_id>, // (uint_16), из запроса 
}

NP_MSG_GET_DEV_INFO

Запрос:

{
"PRTCL": "1.0", 
"MSG": MSG_GET_DEVINFO
"MSG_ID": <msg_id>
}

Ответ:

{
"PRTCL": "1.0", 
"MSG": 0x10,
"MID": <msg_id>,
"DEV_TYPE": "WLA-E", // Зависит от сервера или устройства
"DEV_VER": "4.1.3 (08.07.15)", // Версия устройства
"WLA_TRANSP_MODE": "0" // Прозрачный режим или режим с квитированием (только для БПА, отображается начиная с версии 4.1.3)
}

Если сервером является программа, допускающая совместную работу с оборудованием (БПА, пульты ПА/ПВ), то сервер возвращает второй ответ, содержащий информацию о подключенном устройстве и дублирующем данные о сервере.

{
"PRTCL": "1.0", 
"MSG": 0x10,
"MID": <msg_id>,
"DEV_TYPE": "R-CALL WLA Server", // Зависит от сервера или устройства
"DEV_VER": "1.0", // Версия устройства
"HRD_TYPE": "WLA", // Тип подключенного устройства
"HRD_VER": "4.0.2" // Версия подключенного устройства
}

NP_MSG_SET_CALL

Посылка вызова указанному в сообщении устройству с указанной радиогруппой, номером и классом устройства. Источником сообщения может быть как клиент, так и сервер (при трансляции в сеть входящего эфирного сообщения). Если сообщение сформировано клиентом - то сервер должен вернуть ответ. Запрос:

{
"PRTCL": "1.0", 
"MSG": 1, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t  - используется только в "прозрачном" режиме БПА
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"DAT": <data>, // uint8_t  
}

Ответ сервера:

{
"PRTCL": "1.0", 
"MSG": 1, // 
"MID": <msg_id> , // uint16_t 
"RES": [str_res] // ["OK", "BUSY", "ERR",...>, 
}

NP_MSG_RST_CALL

Сброс вызова для указанного устройства. Сообщение аналогично сообщению NP_MSG_CALL_SET, за исключением поля "MSG", которое равно 2.

NP_MSG_SET_CALL_TBL

Посылка вызова заданному в сообщении устройству с передачей дополнительного поля данных. Пейджеры, начиная с версии 4.3 отображают это значение одновременно с названием объекта-источника вызова. Как вариант, это сообщение можно использовать для отображения на пейджере номера другого объекта (стола) при получении вызова с пульта вызова (или ПО). Так же, как и в случае сообщения MSG_SET_CALL источником сообщения может быть как клиент, так и сервер (при трансляции в сеть входящего эфирного сообщения). Если сообщение сформировано клиентом - то сервер должен вернуть ответ. Запрос:

{
"PRTCL": "1.0", 
"MSG": 4, // 
"MID": <msg_id> , // uint16_t 
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"DAT": <data>, // uint8_t  
}

Ответ сервера:

{
"PRTCL": "1.0", 
"MSG": 4, // 
"MID": <msg_id> , // uint16_t 
"RES": [str_res] // ["OK", "BUSY", "ERR",...>, 
}

NP_MSG_RST_CALL_TBL

Сброс сброса для выбранного устройства с указание дополнительного поля данных. Команда аналогична команде вызова MSG_RST_CALL_TBL за исключением того, что значение поля "MSG" равно 5.

NP_MSG_SET_IPCONFIG

Установка сетевых настроек, включая IP адрес, маску подсети и адрес шлюза. Запрос:

{
"PRTCL": "1.0", 
"MSG": 0x31,  
"MID": <msg_id>,
"SRC_IP": <ip_addres>,
"GTW_IP": <gateway_ip>
"N_MSK": <subnet_mask>
}

Адреса задаются в виде "192.168.1.144" (разделитель - точка). Ответ сервера:

{
"PRTCL": "1.0", 
"MSG": 0x31,  
"MID": <msg_id>,
"RES": ["OK", "ERR"]
}

NP_MSG_GET_IPCONFIG

Чтение сетевых настроек. Запрос:

{
"PRTCL": "1.0", 
"MSG": 0x32,  
"MID": <msg_id>,
}

Ответ сервера:

{
"PRTCL": "1.0", 
"MSG": 0x32,  
"MID": <msg_id>,
"SRC_IP": <ip_addres>,
"GTW_IP": <gateway_ip>
"N_MSK": <subnet_mask>
}

NP_MSG_SET_DATETIME

Установка даты и времени. Запрос:

{
"PRTCL": "1.0", 
"MSG": 0x35
"MID": <msg_id>, 
"YR": <year>,   
"MON": <moth>,   
"DAY": <day_of_month>,  
"HR": <hour>,  
"MIN": <min>,  
"SEC": <sec>   
}

Ответ:

{
"PRTCL": "1.0", 
"MID": <mid>, 
"RESULT": ["OK", "ERROR"]
}

NP_MSG_GET_DATETIME

запрос

{
"PRTCL": "1.0",
"MSG": 0x36,
"MID": <mid>
}

Ответ:

{
"PRTCL": "1.0", 
"MSG": 0x36
"MID": <mid>,
"YR": <year>,   
"MON": <moth>,   
"DAY": <day_of_month>,   
"HR": <hour>,  
"MIN": <min>,   
"SEC": <sec>  
}

NP_MSG_CLEAR_LOG

Обнуление счетчика событий архива. Запрос:

{
"PRTCL": "1.0", 
"MSG": 0x40,
"MID": <msg_id>
}

Ответ сервера:

{
"PRTCL": "1.0", 
"MSG": 0x40,
"MID": <msg_id>,
"RESULT": ["OK", "ERROR"]
}

После выполнения команды счетчик накопленных событий log_len принимает значение 0, а текущий указатель последней записи в архив устанавливается в значение (1-mem_size).

NP_MSG_GET_LOG_INFO

Запрос данных о параметрах архива событий. Запрос:

{
"PRTCL": "1.0", 
"MSG": 0x41,
"MID": <mid>
}

Ответ сервера:

{
"PRTCL": "1.0", 
"MSG": 0x41,
"MID": <mid>,
"L_LEN": <log_len>, // Количество сохраненных событий  
"L_POS": <cur_log_pos>, // Индекс последней сохраненной записи 
"L_SZ": <mem_size>  // Объем памяти (в количестве хранимых событий) 
}

NP_MSG_GET_LOG_ITEM

Запрос одного события из архива:

{
"PRTCL": "1.0", 
"MSG": 0x42,
"MID": <msg_id>,
"L_POS": <idx> // Индекс (адрес) запрашиваемого события  
}

Ответ сервера:

{
"PRTCL": "1.0", 
"MSG": 0x42,
"MID": <msg_id>,
"L_MSG": <msg>, // Код сообщения в архиве 
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t
"DAT": <msg_data>,
"MID": <mid>,
"YR": <year>,   
"MON": <moth>,   
"DAY": <day_of_month>,   
"HR": <hour>,  
"MIN": <min>,   
"SEC": <sec>  
}

Протокол R-NP 1.1, прозрачный режим БПА

Общая информация

Сервер -->-- NP_MSG_XXX (REQ) -->-- БПА-Е
   |                                 |                                       
   |----<--- NP_MSG_XXX (ACK) ---<----  

Взаимодействие между приложением и оборудованием в протоколе R-NP 1.0 предполагает наличие контроля доставки сообщений по радиоэфиру, т.е., если программа-приложение посылает БПА сообщение MSG_CALL_SET, адресованное пейджеру, то БПА предпримет несколько попыток передачи этого сообщения, пока не получит ответ от пейджера о приеме.

Для ряда приложений возникла необходимость прозрачного прямого обмена сообщениями между приложением и конечными устройствами (кнопками, пейджерами и т.д.) без функции контроля доставки, поэтому в версии БПА 4.1.1 был введен, так называемый, прозрачный режим работы. В этом режиме БПА-Е является транслятором сообщений между радиосетью и интерфейсом Ethernet без проверки факта доставки сообщений получателю, эта функция ложится на приложение. Для связи сообщения, отправленного приложением и ответа, полученного от удаленного устройства в сообщениях, предполагающих обмен по радиоканалу, присутствует поле PID (packet ID), которое соответствует номеру пакета в структуре TRFPacket, передаваемой в радиосети. Таким образом, в прозрачном режиме приложение обязано добавлять поле PID в сообщения, предназначенные для передачи в эфир. Каждое последующее переданное сообщение должно иметь отличный от предыдущего PID в диапазоне 0..7. При работе БПА-Е в обычном режиме это поле не используется.


Вызов с кнопки вызова

Кнопка вызова -->-- RF_MSG_SET_CALL(REQ) -->-- БПА-Е -->-- NP_MSG_SET_CALL -->-- Сервер

        |                                                                          |
         ----<---- RF_MSG_SET_CALL(ACK) --<-- БПА-Е ---<--- NP_MSG_ACK -----<------


Посылка вызова на пейджер в прозрачном режиме


Приложение --> NP_MSG_SET_DATA (REQ) -->-- БПА-Е -->-- RF_MSG_SET_DATA (REQ) --> Пейджер

    |                                       |                                       |
    |----<--- NP_MSG_SET_DATA (ACK) ---<----                                        | 
    |                                                                               |
     -----<---- NP_MSG_ACK (ACK) ----<--- БПА-Е --<-- RF_MSG_SET_DATA (ACK) ---<----


Поле "PRTCL", присутствующее в примерах сообщений в версии протокола R-NP 1.0 - необязательно.

Термины и сокращения

Клиент

Клиентское ПО для работы с оборудованием

Сервер

БПА-Е или сервер БПА (WLAServer).

Список поддерживаемых сообщений

Сообщение Код Описание БПА-E Сервер БПА
NP_MSG_ACK 0x1F Подтверждение доставки по эфиру (используется в прозрачном режиме) X
NP_MSG_LOWBAT 0x21 Сообщение о разряде элемента питания X
NP_MSG_SET_DATA 0x07 Посылка вызова с дополнительным полем данных X
NP_MSG_RST_DATA 0x08 Сброс вызова с дополнительным полем данных X
NP_MSG_PGR_STATE 0x61 Сообщение с состоянием пейджера X
NP_MSG_PGR_SET_DATETIME 0x62 Установка даты/времени пейджера X
NP_MSG_PGR_OFF 0x64 Выключение пейджера X
NP_MSG_PGR_ON 0x65 Включение пейджера X

NP_MSG_ACK

Сообщение должно быть сформировано в ответ на любое входящее сообщение, принятое от удаленного устройства. Сообщение используется при работе БПА-Е в прозрачном режиме, т.е., когда БПА-Е не выполняет функции контроля доставки (повторы передачи и ожидание подтверждения) и эти функции должно обеспечивать клиентское ПО. При формировании сообщения значения полей DST_CL и DST_AD берутся из входящего сообщения, на которое необходимо отправить подтверждение ACK.

Источником сообщения может быть как клиент, так и сервер (при трансляции в сеть входящего эфирного сообщения). Если сообщение сформировано клиентом - то сервер должен вернуть ответ.

Запрос (БПА-Е, клиент):

{
"PRTCL": "1.1", 
"MSG": 0x1F, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id> , // uint16_t 
"ACK_MSG" : <ack_msg>,
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr> // uint16_t  
}

Ответ (БПА-Е):

{
"PRTCL": "1.1", 
"MSG": 0x1F, // 
"MID": <msg_id> , // uint16_t 
"RES": [str_res] // ["OK", "BUSY", "ERR",...>, 
}

NP_MSG_LOWBAT

Сообщение о снижении уровня заряда источника питания устройства. Источником сообщения могут быть кнопки и пейджера, сообщение транслируется через БПА-Е.

{
"PRTCL": "1.1", 
"MSG": 0x21, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t - номер пакета из структуры TRFPacket принятого сообщения
"R_GRP": <grp>, // uint8_t
"DST_CL": CLASS_ANY, // uint8_t
"DST_AD": 0, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"B_TYPE": <type>, // uint8_t  
"B_LEV": <val> // uint16_t  
}

NP_MSG_SET_DATA

Посылка вызова заданному в сообщении устройству с передачей дополнительного поля данных (строки). Источником сообщения может быть как клиент, так и сервер (при трансляции в Ethernet входящего эфирного сообщения). Если сообщение сформировано клиентом - то сервер должен вернуть ответ.

Запрос (БПА-Е, клиент):

{
"PRTCL": "1.1", 
"MSG": 0x07, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t 
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"DAT": <str_data> // char[], maxlen = 24
}

Ответ (БПА-Е):

{
"PRTCL": "1.1", 
"MSG": 0x07, // 
"MID": <msg_id> , // uint16_t 
"RES": [str_res] // ["OK", "BUSY", "ERR",...>, 
}

NP_MSG_RST_DATA

Сброс вызова заданному в сообщении устройству с передачей дополнительного поля данных (строки). Источником сообщения может быть как клиент, так и сервер (при трансляции в Ethernet входящего эфирного сообщения). Если сообщение сформировано клиентом - то сервер должен вернуть ответ.

Запрос (БПА-Е, клиент):

{
"PRTCL": "1.1", 
"MSG": 0x08, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t 
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"DAT": <str_data> // char[], maxlen = 24
}

Ответ (БПА-Е):

{
"PRTCL": "1.1", 
"MSG": 0x08, // 
"MID": <msg_id> , // uint16_t 
"RES": [str_res] // ["OK", "BUSY", "ERR",...>, 
}

NP_MSG_PGR_STATE

Запрос состояния пейджера. В некоторых случаях (например, включение/выключение пейджера) сообщение может генерироваться пейджером самостоятельно и транслироваться через БПА-Е на клиент.

Источником сообщения может быть как клиент, так и БПА-Е (при трансляции в сеть входящего эфирного сообщения). Если сообщение сформировано клиентом - то сервер (БПА-Е) должен вернуть ответ. После получения ответа от пейджера БПА-Е транслирует принятые данные клиенту. Отличить ответ от БПА-Е и транслируемый ответ от пейджера возможно по MID, в случает ответа от БПА-Е MID должен быть такой же, как и в запросе.

Запрос (БПА-Е, клиент):

{
"PRTCL": "1.1", 
"MSG": 0x61, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t 
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr> // uint16_t  
}

Ответ БПА-Е:

{
"PRTCL": "1.1", 
"MSG": 0x61, // 
"MID": <msg_id> , // uint16_t 
"RES": [str_res] // ["OK", "BUSY", "ERR",...>, 
}

Ответ БПА-Е при получении ответа от пейджера:

{
"PRTCL": "1.1", 
"MSG": 0x61, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t  
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"UB": <bat_lev>, // uint16_t, напряжение на АКБ: U = bat_lev/100 В
}

NP_MSG_PGR_SET_DATETIME

Установка даты/времени в пейджере. Запрос (клиент):

{
"PRTCL": "1.1", 
"MSG": 0x62, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t  
"R_GRP": <grp>, // uint8_t
"DST_CL": CLASS_PGR, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"YR": <year>,   
"MON": <moth>,   
"DAY": <day_of_month>,   
"HR": <hour>,  
"MIN": <min>,   
"SEC": <sec>  
}

Ответ БПА-Е

{
"PRTCL": "1.1", 
"MSG": 0x62, // 
"MID": <msg_id> , // uint16_t 
"RES": [str_res] // ["OK", "BUSY", "ERR",...>, 
}

Протокол R-NP 1.2 (в разработке)

Общая информация

Сообщения поддерживаются начиная с версии МРК 4.1.3.

Список поддерживаемых сообщений

Сообщение Код Описание БПА-E Сервер БПА
NP_MSG_SET_CALL 0x1 Посылка вызова с датой/временем X
NP_MSG_RST_CALL 0x2 Посылка вызова с датой/временем X

NP_MSG_SET_CALL

Если источником сообщения является БПА-Е или пульт ПА, в обновленном сообщении дополнительно передается его дата/время. Это необходимо для корректной синхронизации загружаемых из архива сообщений с уже накопленными сообщениями в ПО. Формат сообщения в этом случае:

{
"PRTCL": "1.2", 
"MSG": 1, // 
"MID": <msg_id> , // uint16_t 
"PID": <pkt_id>, // uint16_t  - используется только в "прозрачном" режиме БПА
"R_GRP": <grp>, // uint8_t
"DST_CL": <dst_class>, // uint8_t
"DST_AD": <dest_addr>, // uint16_t
"SRC_CL": <src_class>, // uint8_t  
"SRC_AD": <src_addr>, // uint16_t  
"DAT": <data>, // uint8_t  
"YR": <year>,   
"MON": <moth>,   
"DAY": <day_of_month>,   
"HR": <hour>,  
"MIN": <min>,   
"SEC": <sec>
}

NP_MSG_RST_CALL

Сообщение дополнено полями даты/времени аналогично NP_MSG_SET_CALL.

Константы и определения

Классы устройств

Используемые значения полей SRC_CLASS, DEST_CLASS :

#define CLASS_BTN         1
#define CLASS_PGR         2
#define CLASS_CS          3
#define CLASS_AS          4
#define CLASS_RT          5
#define CLASS_ANY         0

Коды сообщений

#define NP_MSG_SET_CALL         0x1
#define NP_MSG_RST_CALL         0x2
#define NP_MSG_SET_CALL_TBL     0x4
#define NP_MSG_RST_CALL_TBL     0x5

#define NP_MSG_GET_DEV_INFO     0x10
#define NP_MSG_PING             0x1A

#define NP_MSG_SET_IPCONFIG     0x31
#define NP_MSG_GET_IPCONFIG     0x32
#define NP_MSG_SET_DATETIME     0x35
#define NP_MSG_GET_DATETIME     0x36

#define NP_MSG_CLEAR_LOG        0x40
#define NP_MSG_GET_LOG_INFO     0x41
#define NP_MSG_GET_LOG_ITEM     0x42

Определения текстовых полей JSON

#define JSTR_PROTOCOL           "PRTKL"
#define JSTR_DEV_TYPE           "DEV_TYPE"
#define JSTR_DEV_VERSION        "DEV_VER"

#define JSTR_MSG                "MSG"
#define JSTR_MSG_ID             "MID"

#define JSTR_SRC_IP             "SRC_IP"
#define JSTR_GATEWAY_IP         "GTW_IP"
#define JSTR_SUBNET_MASK        "N_MSK"

#define JSTR_RADIO_GROUP        "R_GRP"
#define JSTR_DEST_CLASS         "DST_CL"
#define JSTR_DEST_ADDR          "DST_AD"
#define JSTR_SRC_CLASS          "SRC_CL"
#define JSTR_SRC_ADDR           "SRC_AD"
#define JSTR_DATA               "DAT"

#define JSTR_YEAR               "YR"
#define JSTR_MON                "MON"
#define JSTR_DAY                "DAY"
#define JSTR_HOUR               "HR"
#define JSTR_MIN                "MIN"
#define JSTR_SEC                "SEC"

#define JSTR_RESULT             "RES"
#define JSTR_OK                 "OK"
#define JSTR_BUSY               "BUSY"

#define JSTR_LOG_MSG            "L_MSG"
#define JSTR_LOG_LEN            "L_LEN"
#define JSTR_LOG_POS            "L_POS"
#define JSTR_LOG_SIZE           "L_SZ"