zhangbo
2025-03-15 be85d5e358df89b9dca87e82fd08804135114e25
keil/uwb_app.c
@@ -11,7 +11,7 @@
#include "lora_1268.h"
#include "PCA9555.h"
#define TAG_KEEPTIMES           30
#define TAG_KEEPTIMES           20
#define REPORT_TAG_KEEPTIMES     1
#define GROUP_NUM   3
@@ -279,6 +279,7 @@
uint16_t REV_POLL_NUM;
uint16_t REPLY_POLL_NUM;
uint16_t ERR_RX_NUM;
uint8_t send_qiangzhan_NUM;
static void rx_int_callback(struct MAC_HW_REPORT_T *rx_report)
{      uint8_t valid_sts=0;
    // Power off radio
@@ -326,19 +327,19 @@
        /* UWB_BD_ERR      Preamble detection error  */
        /* UWB_TO_ERR      Receive timeout           */
        /* UWB_STS_ERR     STS error                 */
                 temp_count= phy_timer_count_get();
           temp_count= phy_timer_count_get();
        memcpy(&rx_rpt, rx_report, sizeof(struct MAC_HW_REPORT_T));
        rx_length = 0;
           ERR_RX_NUM++;
           UWB_STATE=UWB_STATE_IDLE;
            if(UWB_STATE==UWB_STATE_IDLE)
            {
               UWB_STATE=UWB_RX_STATE_BUSY;
               OpenUWB();//再次开启UWB接收
            }
//            if(UWB_STATE==UWB_STATE_IDLE)
//            {
//               UWB_STATE=UWB_RX_STATE_BUSY;
//               OpenUWB();//再次开启UWB接收
//            }
         //   OpenUWB();//再次开启UWB接收
    }
//   OpenUWB();//再次开启UWB接收
   OpenUWB();//再次开启UWB接收
}
uint16_t TX_CALL_POLL_NUM;
/* TX done process handler. */
@@ -353,10 +354,15 @@
         
        temp_count= phy_timer_count_get();
        temp_internal=temp_count;
        resp_tx_num++;
           TX_CALL_POLL_NUM++;
           if(send_qiangzhan_NUM)
            {
            send_qiangzhan_NUM=0;
            resp_tx_num++;
            }
            UWB_STATE=UWB_RX_STATE_BUSY;
           OpenUWB();//再次开启UWB接收
//           OpenUWB();//再次开启UWB接收
           //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);
    }
@@ -447,6 +453,7 @@
//uint32_t timeceshi2;
uint8_t position;
uint16_t response_num;
uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos)//根据自己是否为新基站定制消息去发送,根据是否抢占判断
{
    temp_count2=poll_rx_en_start_u32;
@@ -478,12 +485,11 @@
    memcpy(&send_buffer[RESP_MSG_ANC_DISTOFFSET],&disoffset,2);//差个修正offset,修正有符号但是这个com表为无符号的,传过去直接赋给Int16_t相当于还原了
    temp_resp_i64=resp_tx_ts_i64;
    temp_count3= phy_timer_count_get();
//      temp_rx=uwb_rx(buf_1,0,10);
//      CloseUWB();
//    UWB_STATE==UWB_TX_STATE_BUSY;
//     gpio_pin_set(IO_PIN_1);
//      gpio_pin_clr(IO_PIN_1);
    flag_temp2=uwb_tx(send_buffer, 40,1 ,resp_tx_en_start_u32);//立即发送测试size大小
    UWB_STATE==UWB_TX_STATE_BUSY;
      response_num++;
      flag_temp2=uwb_tx(send_buffer, 40,1 ,resp_tx_en_start_u32);//立即发送测试size大小
      
      tagofflinetime[taglist_pos] = 0;//更新标签通信
    temp_count1=phy_timer_count_get();
@@ -702,7 +708,7 @@
{   uint16_t i;
    for(i=0; i<taglist_num; i++)
    {
        if(memcmp(&tagid,&tagid_list[i],2)==0)
        if(memcmp(&tagid,&tagid_list[i],2)==0)
            return 1;
    }
    return 0;
@@ -772,7 +778,7 @@
//   }
    UWBIdleTask();
}
//uint16_t REV_RX_NUM;
//uint16_t REV_POLL_NUM;
//uint16_t REPLY_POLL_NUM;
int Anchor_App(void)
@@ -801,12 +807,13 @@
                              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(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中
                                    {   //tempid==dev_id 说明基站下发测距报文有这个标签的信息
                                          taglist_num++;          //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况
                                         REPLY_POLL_NUM++;
                                          tagid_list[taglist_pos] = tag_id_recv;
                                    }
                                    break;
@@ -814,15 +821,17 @@
                        }
                         if((i==rec_nearbase_num&&taglist_pos==taglist_num)||(rec_nearbase_num==0&&!ExistInTagList(tag_id_recv)))//当基站不在标签列表中,标签也不在基站列表中时,随机找个时间片回复基站。
                {
                                REPLY_POLL_NUM++;
                                send_qiangzhan_NUM=1;
                       Anchor_RecNearPoll(rec_nearbase_num);
                }
            }
   else{
            if(UWB_STATE==UWB_STATE_IDLE)
            {
            UWB_STATE=UWB_RX_STATE_BUSY;
            OpenUWB();
            }
//            if(UWB_STATE==UWB_STATE_IDLE)
//            {
//            UWB_STATE=UWB_RX_STATE_BUSY;
//            OpenUWB();
//            }
         }