| | |
| | | u16 ancid_list[TAG_NUM_IN_SYS]; |
| | | u8 nearbase_num=0,last_nearbase_num,next_nearbase_num; |
| | | u16 nearbaseid_list[MAX_NEARBASE_NUM],mainbase_id,true_nearbase_idlist[MAX_NEARBASE_NUM]; |
| | | int32_t mainbase_dist,nearbase_distlist[MAX_NEARBASE_NUM],true_nearbase_distlist[MAX_NEARBASE_NUM]; |
| | | int32_t mainbase_dist,nearbase_distlist[MAX_NEARBASE_NUM],true_nearbase_distlist[MAX_NEARBASE_NUM],true_exsistbase_list[MAX_NEARBASE_NUM]; |
| | | uint8_t trygetnearmsg_times; |
| | | |
| | | u8 FindNearBasePos(u16 baseid) |
| | | { |
| | | u8 i; |
| | | for(i=0;i<=nearbase_num;i++) |
| | | for(i=0;i<last_nearbase_num;i++) |
| | | { |
| | | if(baseid==nearbaseid_list[i]) |
| | | return i; |
| | | } |
| | | return i+1; |
| | | return i; |
| | | } |
| | | u8 recbase_num=0; |
| | | #define CHANGE_BASE_THRESHOLD 5 |
| | |
| | | change_base_count=0; |
| | | } |
| | | } |
| | | u8 test=0; |
| | | u8 anclost_times=0; |
| | | u8 exsistbase_list[MAX_NEARBASE_NUM],report_num; |
| | | u8 exsistbase_list[MAX_NEARBASE_NUM],report_num,get_newbase=0;; |
| | | u16 temp_sync_timer1,temp_sync_timer2; |
| | | void NearPoll(void) |
| | | { |
| | |
| | | } |
| | | //nearbase_num=0; |
| | | last_nearbase_num=next_nearbase_num; |
| | | nearbase_num=next_nearbase_num; |
| | | recbase_num=0; |
| | | tx_nearpoll_msg[BATTARY_IDX] = Get_Battary(); |
| | | tx_nearpoll_msg[BUTTON_IDX] = !READ_KEY0; |
| | |
| | | flag_finalsend=0; |
| | | flag_rxon=1; |
| | | neartimout_timer=0; |
| | | |
| | | get_newbase=0; |
| | | timeout=ceil((float)nearbase_num/4)+2; |
| | | //timeout=5; |
| | | mainbase_dist=100000; |
| | |
| | | resp_rx_ts = get_rx_timestamp_u64(); //è·å¾RESPONSEæ¥æ¶æ¶é´T4 |
| | | recbase_num++; |
| | | memcpy(&rec_nearbaseid,&rx_buffer[ANCHOR_ID_IDX],2); |
| | | if(nearbase_num==0) |
| | | if(last_nearbase_num==0) |
| | | { |
| | | get_newbase=1; |
| | | nearbaseid_list[0]=rec_nearbaseid; |
| | | nearbase_num=1; |
| | | memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2); |
| | |
| | | memcpy(&temp_sync_timer1,&rx_buffer[ANCTIMEMS],2); |
| | | memcpy(&tmp_time,&rx_buffer[ANCTIMEUS],2); |
| | | sync_timer=temp_sync_timer1; |
| | | exsistbase_list[0]=10; |
| | | exsistbase_list[0]=KEEP_TIMES; |
| | | //// memcpy(&tagslotpos,&rx_buffer[TAGSLOTPOS],2); |
| | | // |
| | | tmp_time=tmp_time+450; |
| | | tmp_time=tmp_time+650; |
| | | if(tmp_time>999) |
| | | { |
| | | tmp_time-=999; |
| | | sync_timer++; |
| | | if(sync_timer>=1010) |
| | | if(sync_timer>=1000) |
| | | {sync_timer=0;} |
| | | } |
| | | TIM3->CNT=tmp_time; |
| | |
| | | //result=dwt_starttx(DWT_START_TX_DELAYED);//设å®ä¸ºå»¶è¿åé |
| | | }else{ |
| | | rec_nearbasepos=FindNearBasePos(rec_nearbaseid); |
| | | if(rec_nearbasepos>nearbase_num) //åç°æ°çåºç« |
| | | if(rec_nearbasepos>=last_nearbase_num) //åç°æ°çåºç« |
| | | { |
| | | get_newbase=1; |
| | | nearbase_num++; |
| | | nearbaseid_list[nearbase_num] = rec_nearbaseid; |
| | | nearbaseid_list[rec_nearbasepos] = rec_nearbaseid; |
| | | memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2); |
| | | } |
| | | |
| | | exsistbase_list[rec_nearbasepos]=10; |
| | | exsistbase_list[rec_nearbasepos]=KEEP_TIMES; |
| | | memcpy(&temp_dist,&rx_buffer[DIST_IDX],4); |
| | | nearbase_distlist[rec_nearbasepos]=temp_dist; |
| | | |
| | |
| | | } |
| | | tyncpoll_time=(random_value%max_slotpos)*slottime; |
| | | } |
| | | // tyncpoll_time=0; |
| | | next_nearbase_num=0; |
| | | for(i=0;i<last_nearbase_num;i++) |
| | | for(i=0;i<last_nearbase_num+get_newbase;i++) |
| | | { |
| | | if(exsistbase_list[i]-->0) |
| | | if(exsistbase_list[i]>0) |
| | | { |
| | | |
| | | next_nearbase_num++; |
| | | true_exsistbase_list[j]=exsistbase_list[i]; |
| | | true_nearbase_idlist[j]=nearbaseid_list[i]; |
| | | true_nearbase_distlist[j++]=nearbase_distlist[i]; |
| | | exsistbase_list[i]--; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | if(recbase_num<3) |
| | | {next_nearbase_num=next_nearbase_num;} |
| | | last_nearbase_num = next_nearbase_num; |
| | | for(i=0;i<last_nearbase_num-1;i++) |
| | | { |
| | | for(j=0;j<last_nearbase_num-1;j++) |
| | | { |
| | | if(true_nearbase_distlist[j]>true_nearbase_distlist[j+1]) |
| | | { |
| | | u32 temp_dist,temp_id; |
| | | u32 temp_dist,temp_id,temp_exsis; |
| | | temp_dist=true_nearbase_distlist[j]; |
| | | temp_id = true_nearbase_idlist[j]; |
| | | temp_exsis=true_exsistbase_list[i]; |
| | | true_nearbase_distlist[j]=true_nearbase_distlist[j+1]; |
| | | true_nearbase_idlist[j]=true_nearbase_idlist[j+1]; |
| | | true_exsistbase_list[j]=true_exsistbase_list[j+1]; |
| | | |
| | | true_nearbase_distlist[j+1]=temp_dist; |
| | | true_nearbase_idlist[j+1]=temp_id; |
| | | true_exsistbase_list[j+1]=temp_exsis; |
| | | } |
| | | } |
| | | } |
| | | |
| | | report_num=0; |
| | | for (i=0;i<nearbase_num;i++) |
| | | for (i=0;i<last_nearbase_num;i++) |
| | | { |
| | | nearbaseid_list[i]=true_nearbase_idlist[i]; |
| | | nearbase_distlist[i]=true_nearbase_distlist[i]; |
| | | if(nearbase_distlist[i]!=0x1ffff) |
| | | if(nearbase_distlist[i]!=0x1ffff&&true_exsistbase_list[i]==0xa) |
| | | { |
| | | memcpy(&usart_send[4+6*report_num],&nearbaseid_list[i],2); |
| | | memcpy(&usart_send[6+6*report_num],&nearbase_distlist[i],4); |
| | |
| | | { |
| | | nearbase_distlist[i]=0x1ffff; |
| | | } |
| | | |
| | | // printf("%d,%d",temp_sync_timer2,temp_sync_timer1); |
| | | #ifdef USART_INTEGRATE_OUTPUT |
| | | usart_send[2] = 4;//æ£å¸¸æ¨¡å¼ |
| | |
| | | for(i=0;i<taglist_num;i++) |
| | | { |
| | | if(memcmp(&tagid,&tagid_list[i],2)==0) |
| | | return i+1; |
| | | break; |
| | | } |
| | | return 0; |
| | | return i; |
| | | } |
| | | uint32_t frame_len; |
| | | uint32_t resp_tx_time; |
| | |
| | | }else{ |
| | | memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4); |
| | | } |
| | | |
| | | tx_nearresp_msg[MAINBASE_INDEX]=flag_syncbase; |
| | | tx_nearresp_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE; |
| | | dwt_writetxdata(20, tx_nearresp_msg, 0);//åå
¥åéæ°æ® |
| | | dwt_writetxfctrl(20, 0);//设å®åéé¿åº¦ |
| | | |
| | | dwt_writetxdata(21, tx_nearresp_msg, 0);//åå
¥åéæ°æ® |
| | | dwt_writetxfctrl(21, 0);//设å®åéé¿åº¦ |
| | | result = dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//å»¶è¿åéï¼çå¾
æ¥æ¶ |
| | | |
| | | battary = rx_buffer[BATTARY_IDX]; |
| | |
| | | LED0_BLINK; //æ¯æå䏿¬¡é讯åéªç䏿¬¡ |
| | | dis_after_filter=dist_cm; |
| | | hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET]; |
| | | g_flag_Taggetdist[taglist_pos]=0; |
| | | if(hex_dist>-1000&&hex_dist<100000) |
| | | { |
| | | if(abs(hex_dist-his_dist[taglist_pos])<1500||misdist_num>3) |
| | |
| | | dwt_readrxdata(rx_buffer, frame_len, 0);//è¯»åæ¥æ¶æ°æ® |
| | | //å°æ¶å°çtag_idåå«åå
¥å次é讯çå
ä¸ï¼ä¸ºå¤æ ç¾é讯æå¡ï¼é²æ¢ä¸æ¬¡éè®¯ä¸æ¥æ¶å°ä¸åIDæ ç¾çæ°æ® |
| | | //tag_id_recv = rx_buffer[TAG_ID_IDX]; |
| | | memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2); |
| | | memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2); |
| | | taglist_pos=CmpTagInList(tag_id_recv); |
| | | if(taglist_pos==0) |
| | | { |
| | | synclost_timer=0; |
| | | tagid_list[taglist_num++]=tag_id_recv; |
| | | taglist_pos=taglist_num; |
| | | new_tagid=1; |
| | | }else{ |
| | | new_tagid=0; |
| | | } |
| | | tagofflinetime[taglist_pos-1]=0; |
| | | switch(rx_buffer[MESSAGE_TYPE_IDX]) |
| | | { |
| | | // case POLL: |
| | |
| | | TIM3->CNT = sync_seq*325%1000+15; |
| | | sync_timer = sync_seq*325/1000; |
| | | synclost_timer=0; |
| | | SyncPoll(sync_seq,rec_syncid); |
| | | //SyncPoll(sync_seq,rec_syncid); |
| | | }else if(rec_syncid==current_syncid) |
| | | { |
| | | if(rx_buffer[SYNC_SEQ_IDX]<sync_seq) |
| | | { |
| | | flag_syncbase=0; |
| | | sync_seq=rx_buffer[SYNC_SEQ_IDX]+1; |
| | | TIM3->CNT = sync_seq*325%1000+15; |
| | | sync_timer = sync_seq*325/1000; |
| | | TIM3->CNT = sync_seq*325%1000+5; |
| | | sync_timer = sync_seq*325/1000+995; |
| | | synclost_timer=0; |
| | | SyncPoll(sync_seq,rec_syncid); |
| | | //SyncPoll(sync_seq,rec_syncid); |
| | | } |
| | | |
| | | } |
| | |
| | | // |
| | | case NEAR_POLL: |
| | | |
| | | memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2); |
| | | memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2); |
| | | taglist_pos=CmpTagInList(tag_id_recv); |
| | | if(taglist_pos==taglist_num) |
| | | { |
| | | taglist_pos=taglist_num; |
| | | tagid_list[taglist_num++]=tag_id_recv; |
| | | |
| | | new_tagid=1; |
| | | }else{ |
| | | new_tagid=0; |
| | | } |
| | | tagofflinetime[taglist_pos]=0; |
| | | |
| | | |
| | | rec_nearbase_num=rx_buffer[NEARBASENUM_INDEX]; |
| | | |
| | | for(i=0;i<rec_nearbase_num;i++) |