zhyinch
2020-10-27 b23727c7dab2b34ed778dc6d3918564651843213
Ô´Âë/ºËÐİå/Src/application/dw_app.c
@@ -9,11 +9,11 @@
static dwt_config_t config = {
   2,               /* Channel number. */
   DWT_PRF_64M,     /* Pulse repetition frequency. */
   DWT_PLEN_128,    /* Preamble length. */
   DWT_PLEN_64,    /* Preamble length. */
   DWT_PAC8,        /* Preamble acquisition chunk size. Used in RX only. */
   9,               /* TX preamble code. Used in TX only. */
   9,               /* RX preamble code. Used in RX only. */
   0,               /* Use non-standard SFD (Boolean) */
   1,               /* Use non-standard SFD (Boolean) */
   DWT_BR_6M8,      /* Data rate. */
   DWT_PHRMODE_STD, /* PHY header mode. */
   (129 + 8 - 8)    /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */
@@ -38,7 +38,7 @@
static uint64_t resp_tx_ts;
static uint64_t final_rx_ts;
static double tof;
int32_t anchor_dist_last_frm[TAG_NUM_IN_SYS],his_dist[TAG_NUM_IN_SYS];   ;
int32_t anchor_dist_last_frm[TAG_NUM_IN_SYS],his_dist[TAG_NUM_IN_SYS];
uint32_t tag_id = 0;
uint32_t tag_id_recv = 0;
uint32_t anc_id_recv = 0;
@@ -506,7 +506,7 @@
   flag_rxon=1;
   neartimout_timer=0;
   get_newbase=0;
   timeout=ceil((float)nearbase_num*SLOT_SCALE)+3;
   timeout=ceil((float)nearbase_num*SLOT_SCALE)+2;
   //timeout=5;
   mainbase_dist=100000;
   mainbase_lost_count++;
@@ -551,14 +551,8 @@
                        resp_rx_ts = get_rx_timestamp_u64();                              //获得RESPONSE接收时间T4   
                        recbase_num++;
                        memcpy(&rec_nearbaseid,&rx_buffer[ANCHOR_ID_IDX],2);
                        if(last_nearbase_num==0)
                        {
                           get_newbase=1;
                           nearbaseid_list[0]=rec_nearbaseid;
                           nearbase_num=1;
                           memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
                        }
                        if(rec_nearbaseid==nearbaseid_list[0])
                        if(rec_nearbaseid==mainbase_id)
                        {
                           //////////////////////////////////时间同步
                           temp_sync_timer2=sync_timer;
@@ -593,7 +587,7 @@
                           rec_nearbasepos=0;
                           
                           memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
                           nearbase_distlist[rec_nearbasepos]=temp_dist;
                           mainbase_dist = temp_dist;
                        if(temp_dist!=0x1ffff)
                           exsistbase_list[rec_nearbasepos]=KEEP_TIMES;
                        
@@ -611,35 +605,6 @@
                           dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//将发送数据写入DW1000
                           dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
                           memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
                        if(temp_dist!=0x1ffff)
                           {
                           #ifdef TAG_OUTPUT
                              #ifndef USART_INTEGRATE_OUTPUT
                              usart_send[2] = 1;//正常模式
                              usart_send[3] = 17;//数据段长度
                              usart_send[4] = frame_seq_nb;//数据段长度
                              if(g_com_map[DEV_ROLE])
                              {
                              memcpy(&usart_send[5],&dev_id,2);
                              memcpy(&usart_send[7],&rec_nearbaseid,2);
                              }else{
                              memcpy(&usart_send[5],&rec_nearbaseid,2);
                              memcpy(&usart_send[7],&dev_id,2);
                              }
                              memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4);
                              usart_send[13] = battary;
                              usart_send[14] = button;
                              checksum = Checksum_u16(&usart_send[2],17);
                              memcpy(&usart_send[19],&checksum,2);
                              UART_PushFrame(usart_send,21);
                              #endif
                           #endif
                           //dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5
                        //   result=dwt_starttx(DWT_START_TX_DELAYED);//设定为延迟发送
                           //dwt_writetxdata(4,&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos+1)*4], FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos+1)*4);//将发送数据写入DW1000
                        }
                           
                        }else{
                           rec_nearbasepos=FindNearBasePos(rec_nearbaseid);
@@ -767,17 +732,7 @@
         }
         
         report_num=0;
   for (i=0;i<last_nearbase_num;i++)
         {
            nearbaseid_list[i]=true_nearbase_idlist[i];
            nearbase_distlist[i]=true_nearbase_distlist[i];
            if(nearbase_distlist[i]!=0x1ffff&&true_exsistbase_list[i]==KEEP_TIMES)
            {
               memcpy(&usart_send[4+6*report_num],&nearbaseid_list[i],2);
               memcpy(&usart_send[6+6*report_num],&nearbase_distlist[i],4);
               report_num++;
            }
         }
         for(i=0;i<MAX_NEARBASE_NUM;i++)
         {
            nearbase_distlist[i]=0x1ffff;
@@ -931,7 +886,7 @@
               LED0_BLINK; //每成功一次通讯则闪烁一次
               dis_after_filter=dist_cm;
               hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET];
               if(abs(hex_dist-his_dist[tag_id_recv-TAG_ID_START])<1000)
               if(abs(hex_dist-his_dist[taglist_pos])<1000)
                  {
                     tagdist_list[taglist_pos] = hex_dist;
                        }
@@ -954,7 +909,7 @@
         memcpy(&tx_nearresp_msg[TAG_ID_IDX],&tag_id_recv,2);
         poll_rx_ts = get_rx_timestamp_u64();//获得Poll包接收时间T2
         resp_tx_time = (poll_rx_ts + ((POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。
         resp_tx_time = (poll_rx_ts + ((POLL_RX_TO_RESP_TX_DLY_UUS+(ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。
         dwt_setdelayedtrxtime(resp_tx_time);//设置Response发送时间T3
         dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间
         dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间
@@ -1222,11 +1177,11 @@
            tagpos_rec[(u8)temp_tagpos]=1;
            rec_nearbase_num=rx_buffer[NEARBASENUM_INDEX];
         
            if(rec_nearbase_num>ancidlist_num)
               {
                  ancidlist_num=rec_nearbase_num;
                  memcpy(ancidlist_rec,&rx_buffer[NEARBASEID_INDEX],rec_nearbase_num*2);
               }
         if(anc_id_recv==dev_id)
         {
            Anchor_RecNearPoll(0);
         }else{
               
            for(i=0;i<rec_nearbase_num;i++)
            {
@@ -1234,10 +1189,11 @@
               if(tempid==dev_id)
               {
                  seize_anchor=0;  //非抢占。已存在列表中
                  Anchor_RecNearPoll(i);
                  Anchor_RecNearPoll(i+1);
                  break;
               }                  
            }
         }
            //抢占模式
//               if(i==rec_nearbase_num)
//               {