//Ãâ²¼Ïß»ùÕ¾¶Ë´úÂë #include "dw_app.h" #include "deca_device_api.h" #include "deca_regs.h" #include "dw_driver.h" #include "Spi.h" #include "global_param.h" #define TAG_KEEPTIMES 30 //±êÇ©´æ»îʱ¼ä #define MAX_TAG_LIST_NUM 200 //ͬʱͨѶ±êÇ©×î´óÊýÁ¿ static uint8_t uwb_sendbuffer[150]; static uint8_t rx_buffer[150]; uint16_t taglist_total_num,taglist_current_index; //µ±Ç°Áбí×ÜÊýÁ¿ static uint8_t taglist_keeptime[MAX_TAG_LIST_NUM]; //ÿ¸ö±êÇ©´æ»îʱ¼ä static uint16_t taglist_id[MAX_TAG_LIST_NUM],taglist_dist[MAX_TAG_LIST_NUM]; //±êÇ©¾àÀëºÍ±êÇ©µÄID static u8 frame_seq_nb,frame_len; static uint16_t current_count,poll_startcount,start_count,end_count,poll_timeout; static uint32_t status_reg = 0; extern int32_t dwt_readcarrierintegrator(void); static int32_t test2; static uint64_t poll_tx_ts; static uint64_t resp_rx_ts; static uint64_t get_tx_timestamp_u64(void) { uint8_t ts_tab[5]; uint64_t ts = 0; int i; dwt_readtxtimestamp(ts_tab); for (i = 4; i >= 0; i--) { ts <<= 8; ts |= ts_tab[i]; } return ts; } static uint64_t get_rx_timestamp_u64(void) { uint8_t ts_tab[5]; uint64_t ts = 0; int i; dwt_readrxtimestamp(ts_tab); for (i = 4; i >= 0; i--) { ts <<= 8; ts |= ts_tab[i]; } return ts; } //×¢Ò⣺ÒòΪÐÂ×¢²áµÄ±êÇ©²¢²»ÖªµÀ»ùÕ¾ÒѾ­ÊÕµ½ÁË£¬ËùÒÔÒªÔÚÏÂÒ»°üÁ¢¿Ì½«ÐµıêÇ©ID·¢³ö£¬·ñÔò±êÇ©»áÒ»Ö±ÇÀÕ¼»ùÕ¾µÄpoll°ü¡£ //·½·¨Êǽ«ÐÂ×¢²áµÄ±êÇ©Ìí¼Óµ½Ï´η¢Ë͵ıêÇ©ÁбíÍ·²¿£¬ÆäËû±êÇ©ÒÀ´ÎÏòºóŲ¶¯¡£ uint16_t AddNewTagIntoList(uint16_t tagid) { u16 newindex_cal = taglist_current_index+25; if(newindex_cal>=taglist_total_num) //Èç¹ûµ±Ç°Ë÷ÒýÊÇ×îºóÒ»°ü£¬ÄÇô¾Í¼Óµ½×ÜË÷ÒýµÄºóÃæ£¬Èç¹û²»ÊǾͼӵ½ÏÂÒ»´ÎÆðʼË÷ÒýλÖᣠ{ newindex_cal = taglist_total_num; }else{ for(u16 i=taglist_total_num;i>newindex_cal+1;i--) //´ÓºóÍùǰŲµØ·½ { taglist_id[i]=taglist_id[i-1]; taglist_dist[i]=taglist_dist[i-1]; taglist_keeptime[i]=taglist_keeptime[i-1]; } } taglist_total_num++; taglist_id[newindex_cal] = tagid; taglist_dist[newindex_cal] = 0; taglist_keeptime[newindex_cal] = TAG_KEEPTIMES; return newindex_cal; } uint16_t CmpTagInList(uint16_t tagid) { u16 temp; for(u8 i=0;i-10&&distance<1000) { count2++; taglist_dist[i+taglist_current_index] = distance*100+anc_distoffset[i]; } }else{ // nearbase_distlist[i] = 0x1ffff; } } } void testprogram(void) { // taglist_total_num = 30; // taglist_id[0] = 7; // for(uint8_t i=0;i<30;i++) // { // taglist_keeptime[i] = 100; // } } void TagListUpdate(void) { uint16_t i,j=0,temp[TAG_NUM_IN_SYS]; for(i=0;i0) { taglist_id[j]=taglist_id[i]; taglist_keeptime[j++]=taglist_keeptime[i]; } } taglist_total_num=j; } static u16 rec_nearbaseid,temp_index; static u8 rec_tag_index,tag_num_tosend; void MBXANCPoll(void) //½«Òª·¢µÄ±êÇ©ÐòºÅ£¬ÔÚÁбíÖеÄλÖà { tag_num_tosend = taglist_total_num-taglist_current_index; if(tag_num_tosend>25) { tag_num_tosend = 25; } count1++; memcpy(&uwb_sendbuffer[TAG_ID_IDX],&dev_id,2); uwb_sendbuffer[GROUP_ID_IDX] = group_id; uwb_sendbuffer[BATTARY_IDX] = bat_percent; uwb_sendbuffer[SEQUENCE_IDX] = frame_seq_nb++; uwb_sendbuffer[NEARBASENUM_INDEX] = tag_num_tosend; memcpy(&uwb_sendbuffer[NEARBASEID_INDEX],&taglist_id[taglist_current_index],tag_num_tosend*2); memcpy(&uwb_sendbuffer[NEARBASEID_INDEX+tag_num_tosend*2],&taglist_dist[taglist_current_index],tag_num_tosend*2); uwb_sendbuffer[MESSAGE_TYPE_IDX] = MBX_POLL; dwt_writetxdata(13+4*tag_num_tosend, uwb_sendbuffer, 0);//½«Poll°üÊý¾Ý´«¸øDW1000£¬½«ÔÚ¿ªÆô·¢ËÍʱ´«³öÈ¥ dwt_writetxfctrl(13+4*tag_num_tosend, 0);//ÉèÖó¬¿í´ø·¢ËÍÊý¾Ý³¤¶È // current_count=HAL_LPTIM_ReadCounter(&hlptim1); // while(current_countpoll_startcount+16384) // { // current_count=HAL_LPTIM_ReadCounter(&hlptim1); // if(current_count=32768) {end_count-=32768;} current_count=HAL_LPTIM_ReadCounter(&hlptim1); while(current_countend_count+15000) { current_count=HAL_LPTIM_ReadCounter(&hlptim1); while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//²»¶Ï²éѯоƬ״ֱ̬µ½³É¹¦½ÓÊÕ»òÕß·¢Éú´íÎó { current_count=HAL_LPTIM_ReadCounter(&hlptim1); if(current_count>=end_count&¤t_count=taglist_total_num||taglist_total_num<=25) //Èç¹û±êÇ©µ±Ç°index´óÓÚ×Üindex£¬»òÕß×Ü»ùÕ¾ÊýÁ¿Ð¡ÓÚµÈÓÚ25£¬Ôò´Ó0¿ªÊ¼index¡£ taglist_current_index = 0; }