zhyinch
2021-08-31 d43f5c57427173eba8a2d1ed11bb8da408ec5dfc
Ô´Âë/ºËÐİå/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
@@ -342,6 +344,33 @@
 //   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];
  }
#define CONT_FRAME_PERIOD 124800
uint16_t g_Resttimer;
uint8_t result;
u8 tag_succ_times=0;
@@ -481,6 +510,7 @@
               if(!g_com_map[MODBUS_MODE])
               {
                  u32 devid;
               hex_dist2 = hex_dist2;      
               usart_send[2] = 1;//正常模式
               usart_send[3] = 17;//数据段长度
@@ -491,10 +521,22 @@
               memcpy(&usart_send[9],&hex_dist2,4);
               usart_send[13] = bat_percent;
               usart_send[14] = button;
                    usart_send[15] = rec_firstpath_power;
               checksum = Checksum_u16(&usart_send[2],17);
               memcpy(&usart_send[19],&checksum,2);
               UART_PushFrame(usart_send,21);
                    Spi_ChangePrescaler(SPIx_PRESCALER_SLOW);
                    dwt_configcontinuousframemode(CONT_FRAME_PERIOD);
                    dwt_writetxdata(20, tx_final_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
                    dwt_writetxfctrl(20, 0);
                    dwt_starttx(DWT_START_TX_IMMEDIATE);
                        devid =  dwt_readdevid();
                        LED0_ON;
                    while(devid==DWT_DEVICE_ID )
                    {
                        devid =  dwt_readdevid();
                    }
                    NVIC_SystemReset();
               }
            }
      //         memcpy(&Modbus_HoldReg[anc_id_recv*2],&hex_dist,4);
@@ -540,10 +582,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 +747,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])