yincheng.zhong
2022-10-25 ae53ad9142f8092693118eac64a138d050082afa
源码/核心板/Src/application/dw_app.c
@@ -30,6 +30,8 @@
#include "beep.h"
#include "modbus.h"
//#define DEBUG_OUTPUT
//#define TDFILTER
//#define CONSTANT_FILTER
/*------------------------------------ Marcos ------------------------------------------*/
/* Inter-ranging delay period, in milliseconds. */
#define RNG_DELAY_MS 100
@@ -47,7 +49,7 @@
#define POLL_TX_TO_RESP_RX_DLY_UUS 150
/* This is the delay from Frame RX timestamp to TX reply timestamp used for calculating/setting the DW1000's delayed TX function. This includes the
 * frame length of approximately 2.66 ms with above configuration. */
#define RESP_RX_TO_FINAL_TX_DLY_UUS 400
#define RESP_RX_TO_FINAL_TX_DLY_UUS 420
/* Receive response timeout. See NOTE 5 below. */
#define RESP_RX_TIMEOUT_UUS 600
@@ -337,11 +339,38 @@
     C = dia->maxGrowthCIR;
    
    firstpath_power=10* log10((F1*F1+F2*F2+F3*F3)/(N*N))-A;
//    rx_power=10*log10(C*B/(N*N))-A;
    rx_power=10*log10(C*B/(N*N))-A;
 //   min_power =  - 10 * log10((F1 *F1 + F2 * F2 + F3 * F3) / (C *B));
    return min_power;
  }
#define CONSTANT_LEN 50
extern u16 dist_threshold;
int32_t ConstantFilter(int32_t currentdist,u8 channel)
  {
      static int32_t cs_lastdist[10],cs_lastvalid[10];
      static u8 cfstart_flag[10] = {1};
      static u8 constant_count[10] = {100};
      if(cfstart_flag[channel])
      {
        cfstart_flag[channel] = 0;
        cs_lastdist[channel] = currentdist;
      }
      if( abs(currentdist - cs_lastdist[channel])<100)
      {
          if(constant_count[channel]<CONSTANT_LEN)
              constant_count[channel]++;
      }else{
         constant_count[channel] = 0;
      }
      if(constant_count[channel] == CONSTANT_LEN)
      {
        cs_lastvalid[channel] = currentdist;
      }
      cs_lastdist[channel] = currentdist;
      return cs_lastvalid[channel];
  }
uint16_t g_Resttimer;
uint8_t result;
u8 tag_succ_times=0;
@@ -478,7 +507,8 @@
               {   
               g_Tagdist[anc_id_recv]=   hex_dist2;
               g_flag_Taggetdist[anc_id_recv]=0;
                    Modbus_HoldReg[anc_id_recv*2]=hex_dist2>>16;
               Modbus_HoldReg[anc_id_recv*2+1]=hex_dist2;
               if(!g_com_map[MODBUS_MODE])
               {
               hex_dist2 = hex_dist2;      
@@ -495,6 +525,7 @@
               checksum = Checksum_u16(&usart_send[2],17);
               memcpy(&usart_send[19],&checksum,2);
               UART_PushFrame(usart_send,21);
               }
            }
      //         memcpy(&Modbus_HoldReg[anc_id_recv*2],&hex_dist,4);
@@ -540,10 +571,10 @@
int8_t correction_time;
extern uint8_t sync_seq;
#define TDFILTER
//#define CHECK_UID
extern uint8_t UID_ERROR;
extern u16 dist_threshold;
u8 misdist_num[TAG_NUM_IN_SYS];
void Anchor_App(void)
{
@@ -705,9 +736,15 @@
                  #else
                  filter_dist=hex_dist/10;
                  #endif
                        #ifdef  CONSTANT_FILTER
                        filter_dist = ConstantFilter(filter_dist,tag_id_recv-TAG_ID_START);
                        #endif
                  anchor_dist_last_frm[tag_id_recv-TAG_ID_START]=filter_dist;
                  g_Tagdist[tag_id_recv]=   filter_dist;
               
               his_dist[tag_id_recv-TAG_ID_START]=hex_dist;
               g_flag_Taggetdist[tag_id_recv]=0;
               if(!g_com_map[MODBUS_MODE])
@@ -722,6 +759,7 @@
                  usart_send[13] = battary;
                  usart_send[14] = button;
                        usart_send[15] = firstpath_power;
                        usart_send[16] = rx_power;
                  checksum = Checksum_u16(&usart_send[2],17);
                  memcpy(&usart_send[19],&checksum,2);
                  UART_PushFrame(usart_send,21);