更上面ANCHOR发送信息时的RTLS_DEMO_MSG_ANCH_RESP, 我们很快就可以找到如下代码

case RTLS_DEMO_MSG_ANCH_RESP:

{

这里面一部分是设置重要变量,一部分是保存ANCHOR发送来的TOF,准备显示出来了,先看这个部分

inst->canprintinfo = 2;

inst->tof = 0;

memcpy(&inst->tof, &(messageData[TOFR]), 5);

inst->newrangeancaddress = srcAddr[0] + ((uint16) srcAddr[1] << 8);

inst->newrangetagaddress = inst->eui64[0] + ((uint16) inst->eui64[1] << 8);

具体显示我们先不关注,看看重要变量,毕竟上面这个保存的数据是上次定位结果(其实我们分析的才是第一次,没有所谓的上次,那么目前上面的结果应该都是没有意义的)

inst->anchorRespRxTime = dw_event->timeStamp ; //Response's Rx time

inst->testAppState = TA_TXFINAL_WAIT_SEND ; // send our response / the final

其中anchorRespRxTime 保存了接收到ANCHOR 这个信号的时间, 后面又是那个非常重要的变量,break后,我们直接找吧。

case TA_TXFINAL_WAIT_SEND :  //TAG:sent final message

{

memcpy(&(inst->msg.messageData[RRXT]), (uint8 *)&inst->anchorRespRxTime, 5);

setupmacframedata(inst, RTLS_DEMO_MSG_TAG_FINAL);

后面是我们比较熟悉的发送数据代码

dwt_writetxdata(inst->psduLength, (uint8 *)  &inst->msg, 0) ;  // write the frame data

instancesendpacket(inst->psduLength, DWT_START_TX_DELAYED, inst->delayedReplyTime)

之前分析过DWM1000 的逻辑问题

#define DWT_SUCCESS (0)

#define DWT_ERROR   (-1)

所以,我们假定它发送成功,那么后面的变量设定应该是

inst->testAppState = TA_TX_WAIT_CONF;

inst->previousState = TA_TXFINAL_WAIT_SEND;

inst->done = INST_DONE_WAIT_FOR_NEXT_EVENT; //will use RX FWTO to time out  (set below)

inst->timeofTx = portGetTickCnt();

inst->monitor = 1;

变量timeofTX是我们第一次遇到,先记录,看后面怎么用。 根据其它三个重要变量,我们再找代码, case TA_TX_WAIT_CONF; 分析过很多次了,前面等待发送完成的部分就部分析了,直接找后的if。

if(inst->previousState == TA_TXFINAL_WAIT_SEND)

{

inst->testAppState = TA_TXE_WAIT ;

inst->nextState = TA_TXPOLL_WAIT_SEND ;

break;

}

前面还有个重要变量

inst->done = INST_NOT_DONE_YET;

我们先分析if 里面的代码,将testAppState 设置为TA_TXE_WAIT 下一步就是等数据,也就意味着TAG分析又告一段落,看似去找ANCHOR了。

但是发现nextState是TA_TXPOLL_WAIT_SEND,我们这个state 好早之前就遇到过了,是的,没错, 这里是轮回,TAG发完这个数据又重新开始,但又不至于需要重新发blink找ANCHOR,所以回到了TAG收到blink response 后的状态了。 定位分析到这里对TAG代码来说已经完事了。Oyeah!

【DWM1000】 code 解密10 一 TAG 发送最后一个消息的更多相关文章

  1. 【DWM1000】 code 解密8一 TAG接收blink response 信号

    在分析这个部分前,目前我看到DWM1000 的资料,data可以分为blink和一般无线数据,后面有内容我们再扩充, 上面我们已经看到接收到blink触发的事件为 case SIG_RX_BLINK ...

  2. 【DWM1000】 code 解密6一TAG 状态机第一步

    我们前面分析过,不论ANCHOR 还是TAG,前面变量的初始化基本都是一样的,只是状态机必须明确区分不同的设备类型.我们从开始看TAG.由于初始化TAG的 testAppState一样初始化为TA_I ...

  3. 【DWM1000】 code 解密7一ANCHOR接收到BLINK

    接着之前ANCHOR的代码分析,但接收到无线数据,应该执行如下代码 case TA_RX_WAIT_DATA :   //already recive a message                ...

  4. 【DWM1000】 code 解密9一 ANCHOR response poll message

    根据上面TAG发送的代码,我直接找到如下代码 case RTLS_DEMO_MSG_TAG_POLL: { if(inst->mode == LISTENER)                  ...

  5. 【DWM1000】 code 解密5一ACHOR 第一次回家Main 函数

    instance_run(); if((instance_data[0].monitor == 1) && ((portGetTickCnt() - instance_data[0]. ...

  6. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

  7. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  8. 使用Python发送、订阅消息

    使用Python发送.订阅消息 使用插件 paho-mqtt 官方文档:http://shaocheng.li/post/blog/2017-05-23 Paho 是一个开源的 MQTT 客户端项目, ...

  9. 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案

    第一次调用webapi出错如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// ...

随机推荐

  1. Nginx详解十三:Nginx场景实践篇之防盗链

    防盗链: 目的:防止资源被盗用 防盗链设置思路 首要方式:区别哪些请求是非正常的用户请求 基于http_refer防盗链配置模块(判断refer(上一步的链接)信息是否为允许访问的网站) 配置语法:v ...

  2. fastJson常用方法总结

    1.了解json json就是一串字符串 只不过元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "" 双引号内是属性或值 : 冒号表示后者是前者的值(这个值 ...

  3. 微信公众号开发调用自带地图 不显示(openLocation)

    1.需要在wx.config中声明需要使用的功能(openLocation) 例如: wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端aler ...

  4. less 写关键帧动画

    @keyframes 关键帧动画写在less里的时候,务必要写在所有的{}之外,不能被{}包裹 甚至务必写在代码的最后 不然报错 Compilation resulted in incorrect C ...

  5. 如果拷贝项目出现各种找不到文件的时候,基本就是没有标记,或者文件名的问题,Could not find resource mybatis.xml,解决方法

    Could not find resource mybatis.xml

  6. Python深度学习案例1--电影评论分类(二分类问题)

    我觉得把课本上的案例先自己抄一遍,然后将书看一遍.最后再写一篇博客记录自己所学过程的感悟.虽然与课本有很多相似之处.但自己写一遍感悟会更深 电影评论分类(二分类问题) 本节使用的是IMDB数据集,使用 ...

  7. 最短路径问题---Dijkstra算法详解

    侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...

  8. 微信JSAPI分享朋友圈调试经验:invalid signature签名错误排查

    .invalid signature签名错误.建议按如下顺序检查: 1.确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapi ...

  9. (Access denied for user 'root'@'slaver1' (using password: YES))

    1.问题描述,启动azkaban的时候报如下所示的错误.之前使用azkaban是root用户,今天使用hadoop用户进行配置和使用,报这个错,说是root连接mysql拒绝了. [hadoop@sl ...

  10. .net core2.1 - ef core数据库迁移,初始化种子数据

    起因:早上偶然看见一篇文章说是ef core(2.x)使用种子数据,主表子表迁移时候,正常情况下说是无法迁移成功,索性就试试,结果是和ef6的一样,没感觉有什么大的区别.一切OK,见下面内容. 1.首 ...