51uwb.cn

 找回密码
 立即注册
查看: 2462|回复: 0
打印 上一主题 下一主题

关于BP50 代码中Anthordistance答疑

[复制链接]

35

主题

1053

帖子

4523

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4523
跳转到指定楼层
楼主
发表于 2022-10-20 08:37:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个客户在阅读代码过程中对于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 代码中其他传输数据结构相关信息了



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-11-22 15:26 , Processed in 0.011897 second(s), 3 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表