Ссылка на топик P2P_protocol_group Пакет p2p имеет следующую структуру: p2p_high_level_port_header, после которой следует package_size байт данных.
Пример пакета 0xe0 0x02 0x00 0x01 0x00 0x5e 0x03 0x01
Описание header
- bridge | request_type | waiting_answer | port(reserve) - это bitmask из 3 1-битовых флагов и 5 битового резерва
Обрати внимание, что биты в структуре начниаются с младших, так что port - это port - 5 младших бит, waiting_answer - 6 бит (или 0x20), request_type - 7 бит (или 0x40) и bridge - 8 бит (или 0x80)
- bridge = 1 - обратится к subdevice напрямую. В этом случае мастер обратится с запросом и вернет ответ.
Если bridge = 0, то мастер вернет состояние параметра на мастере (которое большую часть времени должно быть актуально)
- request_type = 1 - работа с параметром. request_type = 0 работа с командами
- waiting_answer = 1 - на данный запрос ожидается ответ
- package_code - , он же Код запроса.
Если request_type = PARAMETER, то это локальный ID параметра, а если request_type = COMMAND, то это номер комманды.
- package_id - (!not used) идентификатор пакета. По нему можно определить, к какому пакету относится ответ.
- package_size - Размер данных (data после p2p_high_level_port_header, сам header не считаем)
- crc - реализация CRC на языке C
- address - адрес девайса, к которому обращаемся
- data[package_size] - байты данных
Примеры пакетов
Считываем значение параметра
todo
Записываем значение в параметр
todo
Вычитываем данные о параметрах
todo