#include "dw_app_anchor.h"
|
#include "stdint.h"
|
#include <string.h>
|
#if defined (MK_SS_TWR_DW_INIT)
|
static float clockOffsetRatio;
|
static double rtd_init, rtd_resp;
|
static double tof,distance;
|
#define SPEED_OF_LIGHT 299702547
|
#define DWT_TIME_UNITS (1.0/499.2e6/128.0) //!< = 15.65e-12 s
|
static uint32_t anc_pollrx[MAX_NEARBASE_NUM],anc_resptx[MAX_NEARBASE_NUM],tag_resprx[MAX_NEARBASE_NUM],tag_polltx[MAX_NEARBASE_NUM];
|
static int32_t anc_clockoffset[MAX_NEARBASE_NUM];
|
static int16_t anc_distoffset[MAX_NEARBASE_NUM];
|
extern uint8_t taglist_keeptime[MAX_TAG_LIST_NUM]; //ÿ¸ö±êÇ©´æ»îʱ¼ä
|
extern uint16_t taglist_id[MAX_TAG_LIST_NUM],taglist_dist[MAX_TAG_LIST_NUM]; //±êÇ©¾àÀëºÍ±êÇ©µÄID
|
extern uint16_t taglist_total_num,taglist_current_index;
|
|
extern uint8_t exsistbase_list[MAX_NEARBASE_NUM];
|
extern int32_t nearbase_distlist[MAX_NEARBASE_NUM];
|
void SetANCTimestap(uint8_t i,uint8_t* pollrx,uint8_t* resptx,uint32_t resprx,uint8_t* distoffset,int32_t anc_clockoffset_from_MK) //дÈëʱ¼ä´ÁÐÅÏ¢
|
{
|
memcpy(&anc_pollrx[i],pollrx,4);
|
memcpy(&anc_resptx[i],resptx,4);
|
memcpy(&tag_resprx[i],&resprx,4);
|
memcpy(&anc_distoffset[i],distoffset,2);
|
anc_clockoffset[i] = anc_clockoffset_from_MK;//MK8000ÐÞ¸Ä
|
}
|
void CalculateDists(int64_t poll_tx_ts)
|
{
|
for(int i=0;i<MAX_NEARBASE_NUM;i++)
|
{
|
//rec_anc_signalpower[i] = exsistbase_list[i];
|
if(exsistbase_list[i]==KEEP_TIMES)
|
{
|
// exsistbase_list[i]--;
|
#ifdef _UWB_4G
|
clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_2 / 1.0e6) ;
|
#else
|
clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_5 / 1.0e6) ;//MK8000ÐÞ¸Ä
|
#endif
|
rtd_init = tag_resprx[i] - (uint32_t)poll_tx_ts;
|
rtd_resp = anc_resptx[i] - anc_pollrx[i];
|
tof = ((rtd_init - rtd_resp * (1 - clockOffsetRatio)) / 2.0) * DWT_TIME_UNITS;
|
distance = tof * SPEED_OF_LIGHT;
|
if(distance>-10&&distance<1000)
|
{
|
nearbase_distlist[i] = distance*100+anc_distoffset[i];
|
}
|
}else{
|
// nearbase_distlist[i] = 0x1ffff;
|
}
|
|
}
|
|
}
|
#endif
|