-
Notifications
You must be signed in to change notification settings - Fork 0
2. Unwired Devices Coordinator Protocol
UDCP — протокол общения, используемый для общения между роутером и координатором сети. Транспортный уровень протокола — обмен данными через последовательный порт на скорости 115200 бод. Уровни напряжений для 1 и 0 — стандартные для логики 3.3в.
UDCP инкапсулирует протокол общения между устройствами — [UDBP](3. Unwired Devices Binary Protocol). Из-за того, что [UDBP](3. Unwired Devices Binary Protocol) — протокол работающий поверх UDP, адресация в нем не предусмотрена. Поэтому UDCP не просто служит оберткой для UDBP, а добавляет к нему адрес устройства для которого отправляется команда, или адрес устройства, приславшего данные.
Протокол UDCP первой версии существуют в двух разных вариантах — для передачи данных от координатора(UDCP-CR) и к координатору(UDCP-RC). Это связано с тем, что для отладки удобнее, если данные посылаемые координатором, можно увидеть в текстовом виде в любой консоли.
Координатор сети отправляет роутеру посылки фиксированной длины 95 символов ASCII вида DAGROOTRAW1fd0000000000000002124b000c473982010101050100008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFRAWEND. Все, что находится между подстроками DAGROOTRAW1 и RAWEND является побайтным представлением бинарных данных в HEX-виде — 39 байтов(каждый байт представлен в виде двух символов ASCII). Все данные, отправленные координатором, не подходящие под шаблон DAGROOTRAW1(78 символов ASCII)RAWEND должны быть игнорированы.
39 байт данных(после конвертации из 78 символов ASCII) представляют из себя следующую структуру данных:
struct udcp-cr-data
{
uint8_t src_ipv6_address[16];
uint8_t payload_data[23];
};
src_ipv6_address является адресом устройства, отправившего данные, payload_data являются пакетом [UDBP](3. Unwired Devices Binary Protocol) без изменений. Описание формата передачи данных между устройствами смотрите на соответствующей странице.
Роутер отправляет координатору сети посылки фиксированной длины 42 байта в бинарном виде(в отличи от UDCP-CR). Каждая посылка начинается с байт 0x01,0x16,0x16,0x16,0x16,0x10
, а заканчивается байтами 0x03,0x16,0x16,0x16,0x17,0x04
.
Эти наборы байт — магические последовательности начала и конца посылки. Все, что находится между ними составляет адрес целевого устройства и данные для устройства.
Все данные, не подходящие под шаблон 0x01,0x16,0x16,0x16,0x16,0x10,(30 байт данных), 0x03,0x16,0x16,0x16,0x17,0x04
игнорируются.
30 байт данных между последовательностями конца и начала представляют собой следующую структуру данных:
struct udcp-rc-data
{
uint8_t UART_PROTOCOL_VERSION_V1;
uint8_t dst_ipv6_address[16];
uint8_t ability_target;
uint8_t ability_number;
uint8_t ability_state;
uint8_t reserved_FF_data[10];
};
В данный момент протокол реализует только тип DATA_TYPE_COMMAND из [UDBP](3. Unwired Devices Binary Protocol).
Поля ability_target, ability_number, ability_state соответствуют таковым из UDBP. В текущей версии protocol_version равен 1. dst_ipv6_address представляет собой полную(16-байтную) запись ipv6 адреса целевого устройства.
Роутер отправляет координатору сети посылки фиксированной длины 256 байт в бинарном виде(в отличи от UDCP-CR). Каждая посылка начинается с байт 0x01,0x16,0x16,0x16,0x16,0x10
— последовательности начала посылки. Следующие 250 байт составляют собой тело посылки следующей структуры:
struct udcp-rc-data
{
uint8_t UART_PROTOCOL_VERSION_V2;
uint8_t checksum;
uint8_t dst_ipv6_address[16];
uint8_t payload[231];
};
checksum представляет собой XOR всех следующих байт до конца посылки. payload - посылку UDBP. Неиспользуемые байты заполняются FF.