51uwb.cn

标题: 关于BP50 代码中Anthordistance答疑 [打印本页]

作者: 蓝点无限    时间: 2022-10-20 08:37
标题: 关于BP50 代码中Anthordistance答疑
有个客户在阅读代码过程中对于BP50 数据传输过程中的消息结构有些疑问,这里给出解释。

首先,BP50是我们早期开发的一个多基站多标签代码,并未适配 蓝点无限架构,所以这里梳理的代码并不适用于BP30和BP400.

首先,客户疑问是如下rx_buffer数据内部如何存储的?
Anthordistance[rx_buffer[12]] +=(rx_buffer[10]*1000 + rx_buffer[11]*10);


回答这个问题,首先要知道,BP50这个代码传输的数据包,符合decawave提供的sample code代码结构,每个数据包有一定的格式,例如下面
  1. static uint8 rx_poll_msg[] =  {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0x21, 0, 0};
  2. static uint8 tx_resp_msg[] =  {0x41, 0x88, 0, 0x0, 0xDE, 'V', 'E', 'W', 'A', 0x10, 0x02, 0, 0, 0, 0};
  3. 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};
  4. static uint8 distance_msg[] = {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xAA, 0, 0,0, 0, 0};
  5. static uint8 tx_poll_msg[] =  {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0x21, 0, 0};
  6. static uint8 rx_resp_msg[] =  {0x41, 0x88, 0, 0x0, 0xDE, 'V', 'E', 'W', 'A', 0x10, 0x02, 0, 0, 0, 0};
  7. 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};
  8. 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};
  9. static uint8 Semaphore_Release[] =    {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE0, 0, 0, 0};
  10. static uint8 Tag_Statistics[] =                      {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE1, 0, 0, 0};
  11. static uint8 Master_Release_Semaphore[] =            {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE2, 0, 0, 0};
  12. static uint8 Tag_Statistics_response[] =             {0x41, 0x88, 0, 0x0, 0xDE, 'W', 'A', 'V', 'E', 0xE3, 0, 0, 0};
  13. 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是什么数据包
  1. if (memcmp(rx_buffer, distance_msg, ALL_MSG_COMMON_LEN) == 0)
  2.                     {
复制代码


而distance数据包后面的4bit 具体如何定义,由代码实现这自己定义,确保发送和接受端一致即可。
在我们的代码中,第一个‘0’被替换成基站的短地址,而后面的两个‘0’被替换成测得的距离


举一反三,可理解BP50 代码中其他传输数据结构相关信息了








欢迎光临 51uwb.cn (http://51uwb.cn/) Powered by Discuz! X3.3