【DWM1000】 code 解密10 一 TAG 發送最後一個消息

         更上面ANCHOR發送信息時的RTLS_DEMO_MSG_ANCH_RESP, 咱們很快就能夠找到以下代碼ui

   case RTLS_DEMO_MSG_ANCH_RESP:spa

        {ci

這裏面一部分是設置重要變量,一部分是保存ANCHOR發送來的TOF,準備顯示出來了,先看這個部分get

inst->canprintinfo = 2;it

inst->tof = 0;io

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

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

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

具體顯示咱們先不關注,看看重要變量,畢竟上面這個保存的數據是上次定位結果(其實咱們分析的纔是第一次,沒有所謂的上次,那麼目前上面的結果應該都是沒有意義的)變量

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!

相關文章
相關標籤/搜索