Src/application/dw_app.c
@@ -94,7 +94,7 @@
static uint8_t tx_final_msg[60] = {0};
static uint8_t tx_resp_msg[22] = {0};
uint8_t tx_near_msg[80] = {0};
extern uint8_t tx_near_test_msg[80];
static uint32_t frame_seq_nb = 0;
static uint32_t status_reg = 0;
static uint8_t rx_buffer[100];
@@ -287,6 +287,7 @@
}
int32_t mainbase_dist,nearbase_distlist[MAX_NEARBASE_NUM],true_nearbase_distlist[MAX_NEARBASE_NUM],true_exsistbase_list[MAX_NEARBASE_NUM],ancsync_time,nextpoll_delaytime,offsettimeus;
uint16_t u16_nearbase_distlist[MAX_NEARBASE_NUM];//转换距离数组
u8 anclost_times=0 , mainbase_lost_count=0;
u8 exsistbase_list[MAX_NEARBASE_NUM],report_num,get_newbase=0;
u8 flag_finalsend,flag_getresponse,flag_rxon;
@@ -383,6 +384,8 @@
      sync_anc_id = ancid;   
   }
}
uint32_t frame_seq_nb_final;
uint8_t resp_num,final_num;
void NearPoll(void)
{
@@ -412,12 +415,18 @@
    tx_near_msg[BATTARY_IDX] = bat_percent;
    tx_near_msg[BUTTON_IDX] = !GET_USERKEY|stationary_flag<<1;
    tx_near_msg[SEQUENCE_IDX] = frame_seq_nb++;
      frame_seq_nb_final=frame_seq_nb;//复制该包包序到final包中
    tx_near_msg[NEARBASENUM_INDEX] = nearbase_num;
    memcpy(&tx_near_msg[NEARBASEID_INDEX],&nearbaseid_list,nearbase_num*2);
    tx_near_msg[MESSAGE_TYPE_IDX] = NEAR_POLL;
//   for(uint8_t i=0;i<nearbase_num;i++)   //标签距离32位转成16位
//{
//    u16_nearbase_distlist[i] = nearbase_distlist[i];
//}
//      memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*2],&nearbase_distlist,nearbase_num*2);
    memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*4],&g_commap_antdelay,2);
    memcpy(&tx_near_msg[ANCHOR_ID_IDX],&mainbase_id,2);
//      tx_near_msg[ANCHOR_ID_IDX]=tag_frequency
    dwt_writetxdata(15+4*nearbase_num, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
    dwt_writetxfctrl(15+4*nearbase_num, 0);//设置超宽带发送数据长度
      
@@ -478,6 +487,7 @@
        }
        if (status_reg & SYS_STATUS_RXFCG)//如果成功接收
        {
               resp_num++;
            dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚寄存器标志位
            frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;   //获得接收到的数据长度
            dwt_readrxdata(rx_buffer, frame_len, 0);   //读取接收数据
@@ -522,10 +532,11 @@
                    exsistbase_list[rec_nearbasepos]=KEEP_TIMES;
                    memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
                    nearbase_distlist[rec_nearbasepos]=temp_dist;
                              u16_nearbase_distlist[rec_nearbasepos]=temp_dist;
                    if((rx_buffer[MOTORSTATE_INDEX]&0xf)!=3)
                        motor_state=rx_buffer[MOTORSTATE_INDEX]&0xf;
                    rec_remotepara_state=rx_buffer[MOTORSTATE_INDEX]>>4;
                    mainbase_lost_count=0;
                    flag_finalsend=1;
                    memcpy(&mainbase_dist,&rx_buffer[DIST_IDX],4);
@@ -533,15 +544,27 @@
                    temp1=final_tx_time-((850*UUS_TO_DWT_TIME)>>8);
                    temp2=final_tx_time+((100*UUS_TO_DWT_TIME)>>8);
                    //   dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5
                    final_tx_ts = (((uint64_t)(final_tx_time & 0xFFFFFFFE)) << 8) + TX_ANT_DLY;//final包实际发送时间是计算时间加上发送天线delay
                    final_msg_set_ts(&tx_near_msg[FINAL_MSG_POLL_TX_TS_IDX], poll_tx_ts);//将T1,T4,T5写入发送数据
                    final_msg_set_ts(&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX], resp_rx_ts);
                    final_msg_set_ts(&tx_near_msg[FINAL_MSG_FINAL_TX_TS_IDX], final_tx_ts);
                    tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL;
                              //u16_nearbase_distlist[0]=0;//测试
                    tx_near_msg[GROUP_ID_IDX] = group_id;
                    dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//将发送数据写入DW1000
                    dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
                              tx_near_msg[ANCHOR_SEQ]=frame_seq_nb_final;//新增将已测距基站列表放入以及包序
                              tx_near_msg[ANCHOR_NUM]=nearbase_num;
                              memcpy(&tx_near_msg[28+nearbase_num*4],nearbaseid_list,2*nearbase_num);
                              memcpy(&tx_near_msg[28+nearbase_num*4+2*nearbase_num],u16_nearbase_distlist,2*nearbase_num);
                              tx_near_msg[28+nearbase_num*4+4*nearbase_num]=tag_frequency;//hz放入
                              //memcpy(&tx_near_msg[36],tx_near_test_msg,40);//测试
   //                           tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL;//测试
//                               tx_near_msg[GROUP_ID_IDX] = group_id;//测试
                    dwt_writetxdata(28+nearbase_num*4+4*nearbase_num+4, tx_near_msg, 0);//将发送数据写入DW1000
                    dwt_writetxfctrl(28+nearbase_num*4+4*nearbase_num+4, 0);//设定发送数据长度
//                    dwt_writetxdata(45, tx_near_msg, 0);//将发送数据写入DW1000
//                    dwt_writetxfctrl(45, 0);//设定发送数据长度
                              final_num++;
                    flag_getresponse=1;
                    memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
@@ -596,15 +619,14 @@
                    exsistbase_list[rec_nearbasepos]=KEEP_TIMES;
                    memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
                    nearbase_distlist[rec_nearbasepos]=temp_dist;
                              u16_nearbase_distlist[rec_nearbasepos]=temp_dist;
                    if(motor_state<(rx_buffer[MOTORSTATE_INDEX]&0xf)&&(rx_buffer[MOTORSTATE_INDEX]&0xf)!=3)
                    {
                        motor_state=rx_buffer[MOTORSTATE_INDEX];
                    }
                    final_msg_set_ts(&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos)*4], resp_rx_ts);
                    dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//将发送数据写入DW1000
                    dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
                        dwt_writetxdata(28+nearbase_num*4+4*nearbase_num+4, tx_near_msg, 0);//将发送数据写入DW1000
                    dwt_writetxfctrl(28+nearbase_num*4+4*nearbase_num+4, 0);//设定发送数据长度
                    //dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5
                    //   result=dwt_starttx(DWT_START_TX_DELAYED);//设定为延迟发送
@@ -675,6 +697,7 @@
    {
        nearbaseid_list[i]=true_nearbase_idlist[i];
        nearbase_distlist[i]=true_nearbase_distlist[i];
            u16_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);