keil/uwb_app.c
@@ -8,7 +8,13 @@
#include "dw_app_anchor.h"
#include "global_param.h"
#include "board.h"
#include "lora_3029.h"
#define TAG_KEEPTIMES           30
#define REPORT_TAG_KEEPTIMES     1
#define GROUP_NUM   3
uint16_t group_min_dist[GROUP_NUM+1];
extern int simple_main(void);
extern int temp_main(void);
@@ -25,7 +31,7 @@
//resp变量
static uint8_t frame_seq_nb2,battary,button,rec_nearbase_num,ancidlist_num;
static uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS];
uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS];
static int16_t rec_ancdistlist[TAG_NUM_IN_SYS];
extern uint8_t group_id;
static uint16_t anc_id_recv,tag_id_recv;
@@ -245,6 +251,7 @@
        temp_count= phy_timer_count_get();
        temp_internal=temp_count;
        resp_tx_num++;
           //gpio_pin_clr(IO_PIN_5);
        //LOG_INFO(TRACE_MODULE_APP, "poll_rx_num is %d,resp_tx_num is %d\r\n",poll_rx_num,resp_tx_num);
    }
}
@@ -301,20 +308,51 @@
        ts2 >>= 8;
    }
}
uint8_t report_ancnum;
uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM];
void TagListUpdate(void)
{
    uint8_t i,j=0;
    for(i=0; i<anchordata_num; i++)
    uint16_t i,j=0,k=0,temp[TAG_NUM_IN_SYS];
    for(i=0; i<taglist_num; i++)
    {
        if(tagofflinetime[i]++<QUIT_SLOT_TIME)
        if(tagofflinetime[i]++<REPORT_TAG_KEEPTIMES)
        {
            anchordata_id[j]=anchordata_id[i];
            report_ancid[k]=tagid_list[i];
            report_ancdist[k++]=tagdist_list[i];
        }
        if(tagofflinetime[i]++<TAG_KEEPTIMES)
        {
            tagid_list[j]=tagid_list[i];
            tagdist_list[j] = tagdist_list[i];
            tagofflinetime[j++]=tagofflinetime[i];
        }
    }
    anchordata_num=j;
    report_ancnum = k;
    taglist_num=j;
}
//void TagListUpdate(void)
//{
//    uint8_t i,j=0,k=0;
//    for(i=0; i<anchordata_num; i++)
//    {
//        if(tagofflinetime[i]++<QUIT_SLOT_TIME)
//        {
//            anchordata_id[j]=anchordata_id[i];
//            tagofflinetime[j++]=tagofflinetime[i];
//        }
//            //标签存活时间
//            if(tagofflinetime[i]++<TAG_KEEPTIMES)
//        {
//            tagid_list[k]=tagid_list[i];
//            tagdist_list[k] = tagdist_list[i];
//            tagofflinetime[k++]=tagofflinetime[i];
//        }
//    }
//    anchordata_num=j;
//      taglist_num=k;
//}
//static uint8_t tagofflinetime[ANC_MAX_NUM];
int flag1=0;
uint32_t temp_count7;
uint32_t timeceshi1;
@@ -356,9 +394,10 @@
//    temp_count1=phy_timer_count_get();
                
    while(mac_is_busy());
      tagofflinetime[taglist_pos] = 0;
    gpio_pin_clr(SCL_PIN);
}
uint16_t uwb_searchcount,range_timeout_us = 2000;
uint16_t uwb_searchcount,range_timeout_us = 2000000;
uint8_t flag_recsuccess;
extern uint8_t g_start_send_flag,search_open_flag = 1,link_success_flag;
@@ -373,51 +412,16 @@
uint32_t UWB_1003_count,UWB_6666_count=0;
int UwbRange(void)
{
    uint8_t i;
    uint16_t tempid;
    // The following peripherals will be initialized in the uwb_open function
    // phy/mac/aes/lsp/phy timers initialized
//    uwb_open();
////    // Set calibration parameters
//    uwb_calibration_params_set(config.phy_cfg.ch_num);
//    // set advanced parameters
//    struct PHY_ADV_CONFIG_T adv_config = {
//        .thres_fap_detect = 40,
//        .nth_scale_factor = 4,
//        .ranging_performance_mode = 0,
//        .skip_weakest_port_en = 0,
//    };
//    phy_adv_params_configure(&adv_config);
//    // uwb configure
//    uwb_configure(config.phy_work_mode, board_param.tx_power_fcc[CALIB_CH(config.phy_cfg.ch_num)], &config.phy_cfg);
//    ranging_frame_type_set(config.phy_cfg.sts_pkt_cfg);
    // Register rx interrupt callback function
//    mac_register_process_handler(tx_int_callback, rx_int_callback);
    mac_register_process_handler(tx_int_callback, rx_int_callback);
    receive_flag = 0;
      flag_recsuccess = 0;
//    temp_count3=phy_timer_count_get();
    //gpio_pin_set(SCL_PIN);
      time_count_dkjs=phy_timer_count_get();
//      gpio_pin_set(IO_PIN_5);//测试
//      gpio_pin_clr(IO_PIN_5);
    uwb_rxflag=uwb_rx(0, 0, range_timeout_us);//开启接收
//      gpio_pin_clr(IO_PIN_5);//测试
      #ifdef DEBUG_BOXING
//      gpio_pin_clr(IO_PIN_5);//测试
//      gpio_pin_set(IO_PIN_5);//测试
      #endif
//      #ifdef DEBUG_BOXING
//      gpio_pin_set(IO_PIN_5);//测试
//     #endif
//     #ifdef DEBUG_BOXING
//      gpio_pin_set(IO_PIN_5);//测试
//      #endif
    uwb_rxflag_num1++;
  //  while(mac_is_busy());
  //  temp_count2=phy_timer_count_get();
@@ -440,8 +444,8 @@
    if(receive_flag==1)//成功接收
    {
      time_count_sdsj=phy_timer_count_get();
         UWB_shoudao_count++;
//               gpio_pin_set(IO_PIN_5);//测试
//          gpio_pin_set(IO_PIN_5);
//      gpio_pin_clr(IO_PIN_5);
      #ifdef DEBUG_BOXING
//      gpio_pin_set(IO_PIN_5);//测试
@@ -450,9 +454,9 @@
//            timeceshi1=phy_timer_count_get();
//            temp_count7=poll_rx_en_start_u32;
        receive_flag=0;
        if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL/*&&!memcmp(&rx_buf[TAG_ID_IDX],&g_com_map[BIND_DEV_ID],2)*/)//判断是否是和自己是同一组通讯的且为poll包
        if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)/*&&!memcmp(&rx_buf[TAG_ID_IDX],&g_com_map[BIND_DEV_ID],2)*///判断是否是和自己是同一组通讯的且为poll包
        {  
//                  UWB_shoudao_count++;
                  flag_recsuccess = 1;
//                 temp_count2=phy_timer_count_get();
            frame_seq_nb2 = rx_buf[SEQUENCE_IDX];//获取包序
@@ -462,26 +466,19 @@
                 //rec_nearbase_num=25;  
               
            memcpy(&tag_id_recv,&rx_buf[TAG_ID_IDX],2);
            memcpy(rec_ancidlist,&rx_buf[FZ_NEARBASEID_INDEX],2*rec_nearbase_num);
            memcpy(rec_ancdistlist,&rx_buf[FZ_NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num);
            memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2);
            // memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2);
//            timeceshi1=phy_timer_count_get();
//            temp_count7=poll_rx_en_start_u32;
                 taglist_pos=CmpTagInList(tag_id_recv);
            for(i=0; i<rec_nearbase_num; i++)
            {
                if(rec_ancidlist[i] == dev_id)
                {
                    rec_ancdistlist[i]+=(int16_t)g_com_map[DIST_OFFSET];
                    PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],battary);
                              if(tag_id_recv==0x1003)
                              {
                                 UWB_1003_count++;
                              }
                              else if(tag_id_recv==0x6666)
                              {
                              UWB_6666_count++;
                              }
                             UWB_fachu_count++;
//      #ifdef DEBUG_BOXING
////      gpio_pin_clr(IO_PIN_5);//测试
@@ -491,14 +488,22 @@
            }
            for(i=0; i<rec_nearbase_num; i++)
            {
                memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2);
                if(tempid==dev_id)//也是比id如果有就更新没有就抢占
                {
                    seize_anchor=0;  //非抢占。已存在列表中
                    Anchor_RecNearPoll(i);
                             UWB_qiangzhanfachu_count++;
                    break;
                }
                         memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2);
                    if(tempid==dev_id)
                    {
                        Anchor_RecNearPoll(i);
                               tagdist_list[taglist_pos]=rec_ancdistlist[i];
                        if(group_min_dist[group_id]>rec_ancdistlist[i])
                        {
                            group_min_dist[group_id] = rec_ancdistlist[i];
                        }
                        if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中
                        {   //tempid==dev_id 说明基站下发测距报文有这个标签的信息
                            taglist_num++;          //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况
                            tagid_list[taglist_pos] = tag_id_recv;
                        }
                        break;
                              }
            }
            if(i==rec_nearbase_num)
@@ -510,6 +515,7 @@
            }
                  recev_error_num=0;
//            sleep_timer_start(__MS_TO_32K_CNT(UWB_DELAY_TIME_US));//测试
//            LOG_INFO(TRACE_MODULE_APP,"标签ID:%X,距离: %d 信号强度:%d.\r\n",g_com_map[BIND_DEV_ID],distance,rssi);
       
@@ -523,6 +529,7 @@
   
    delay_us(1);
    uwb_rx_force_off(1);
//      gpio_pin_clr(IO_PIN_5);
//      #ifdef DEBUG_BOXING
//      gpio_pin_clr(IO_PIN_5);//测试.
//      #endif