• 【DWM1000】 code 解密10 一 TAG 发送最后一个消息


             更上面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/CC2431/CC2530) 以及一些随性的技术。博文可以转载,但需要注明出处!
  • 相关阅读:
    Linux bash sh .source exec 的区别比较。
    flink1.10 Linux 集群安装
    有关Spark中FlatMap算子源码理解
    Flink有关于水位线(WaterMark)相关问题
    Flink中并行度相关问题
    关于spark中的ResultStage和ShuffleMapStage
    关于windows10共享WiFi问题
    外网映射
    Druid的问题
    《小学四则运算练习软件软件需求说明》结对项目报告
  • 原文地址:https://www.cnblogs.com/tuzhuke/p/7739475.html
Copyright © 2020-2023  润新知