¶Ô±ÈÐÂÎļþ |
| | |
| | | #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 |
| | | |
| | | |