WXK
2025-03-14 63bf8ea65ca11349d5fae93580f91a87d3633dba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#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