有个客户在阅读代码过程中对于BP50 数据传输过程中的消息结构有些疑问,这里给出解释。
首先,BP50是我们早期开发的一个多基站多标签代码,并未适配 蓝点无限架构,所以这里梳理的代码并不适用于BP30和BP400.
首先,客户疑问是如下rx_buffer数据内部如何存储的?
Anthordistance[rx_buffer[12]] +=(rx_buffer[10]*1000 + rx_buffer[11]*10);
回答这个问题,首先要知道,BP50这个代码传输的数据包,符合decawave提供的sample code代码结构,每个数据包有一定的格式,例如下面
- static uint8 rx_poll_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0x21, 0, 0};
- static uint8 tx_resp_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'V', 'E', 'W', 'A', 0x10, 0x02, 0, 0, 0, 0};
- static uint8 rx_final_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- static uint8 distance_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xAA, 0, 0,0, 0, 0};
- static uint8 tx_poll_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0x21, 0, 0};
- static uint8 rx_resp_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'V', 'E', 'W', 'A', 0x10, 0x02, 0, 0, 0, 0};
- static uint8 tx_final_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- static uint8 angle_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xFE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- static uint8 Semaphore_Release[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE0, 0, 0, 0};
- static uint8 Tag_Statistics[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE1, 0, 0, 0};
- static uint8 Master_Release_Semaphore[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE2, 0, 0, 0};
- static uint8 Tag_Statistics_response[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE3, 0, 0, 0};
- static uint8 Master_Release_Semaphore_comfirm[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE4, 0, 0, 0};
复制代码 对于要传输的各个数据包有一定的预定义,例如我们现在在看的是distance数据包
static uint8 distance_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xAA, 0, 0,0, 0, 0};
从0x41 到0xAA,这10位都是预定义的,可以理解为数据头,或者预定,后面的4个0,是用户可以修改的用来存放要传输的数据。
在 Anthordistance[rx_buffer[12]] +=(rx_buffer[10]*1000 + rx_buffer[11]*10);代码往上一点就可以看到一个比较函数,判断目前接收来的buffer是什么数据包
- if (memcmp(rx_buffer, distance_msg, ALL_MSG_COMMON_LEN) == 0)
- {
复制代码
而distance数据包后面的4bit 具体如何定义,由代码实现这自己定义,确保发送和接受端一致即可。
在我们的代码中,第一个‘0’被替换成基站的短地址,而后面的两个‘0’被替换成测得的距离
举一反三,可理解BP50 代码中其他传输数据结构相关信息了
|