| | |
| | | // change_base_count=0; |
| | | // } |
| | | //} |
| | | u8 GetRandomSlotPos(uint32_t emptyslot) |
| | | { |
| | | u8 i; |
| | | for(i=dev_id%32;i<max_slotpos;i++) |
| | | { |
| | | if(((emptyslot>>i)&0x1)==0) |
| | | { |
| | | return i; |
| | | } |
| | | } |
| | | |
| | | for(i=1;i<max_slotpos;i++) |
| | | { |
| | | if(((emptyslot>>i)&0x1)==0) |
| | | { |
| | | return i; |
| | | } |
| | | } |
| | | return max_slotpos-1; |
| | | } |
| | | u8 test=0; |
| | | u8 anclost_times=0; |
| | | u8 exsistbase_list[MAX_NEARBASE_NUM],report_num,get_newbase=0;; |
| | | u16 temp_sync_timer1,temp_sync_timer2; |
| | | u32 rec_tagpos_binary; |
| | | void NearPoll(void) |
| | | { |
| | | static u8 mainbase_lost_count=0,flag_finalsend,flag_rxon; |
| | |
| | | tx_nearfinal_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL; |
| | | dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//å°åéæ°æ®åå
¥DW1000 |
| | | dwt_writetxfctrl(28+nearbase_num*4, 0);//设å®åéæ°æ®é¿åº¦ |
| | | memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4); |
| | | tagslotpos=GetRandomSlotPos(rec_tagpos_binary); |
| | | |
| | | if(temp_dist!=0x1ffff) |
| | | { |
| | | #ifndef USART_INTEGRATE_OUTPUT |
| | |
| | | j=0; |
| | | if(exsistbase_list[0]==0) |
| | | { |
| | | u8 temp_adc,random_value; |
| | | random_value=0; |
| | | for(i=0;i<8;i++) |
| | | { |
| | | temp_adc=Get_ADC_Value(); |
| | | random_value=random_value|((temp_adc&0x01)<<i); |
| | | } |
| | | tyncpoll_time=(random_value%max_slotpos)*slottime; |
| | | // u8 temp_adc,random_value; |
| | | // random_value=0; |
| | | // for(i=0;i<8;i++) |
| | | // { |
| | | // temp_adc=Get_ADC_Value(); |
| | | // random_value=random_value|((temp_adc&0x01)<<i); |
| | | // } |
| | | tyncpoll_time = (tagslotpos%max_slotpos)*slottime; |
| | | } |
| | | // tyncpoll_time=0; |
| | | next_nearbase_num=0; |
| | |
| | | { |
| | | if(exsistbase_list[i]>0) |
| | | { |
| | | |
| | | next_nearbase_num++; |
| | | true_exsistbase_list[j]=exsistbase_list[i]; |
| | | true_nearbase_idlist[j]=nearbaseid_list[i]; |
| | |
| | | |
| | | |
| | | } |
| | | u8 nearmsg_mainbase=0; |
| | | u32 rec_tagpos_binary; |
| | | u8 nearmsg_mainbase=0,rec_tagpos_emptylist[32]; |
| | | void GetNearMsg(void) |
| | | { |
| | | u32 start_poll,frame_len; |
| | |
| | | { |
| | | next_nearbase_num=rx_buffer[NEARBASENUM_INDEX]; |
| | | memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4); |
| | | tagslotpos=rx_buffer[TAGSLOTPOS]; |
| | | tagslotpos=GetRandomSlotPos(rec_tagpos_binary); |
| | | //tagslotpos=rx_buffer[TAGSLOTPOS]; |
| | | memcpy(nearbaseid_list,&rx_buffer[NEARBASEID_INDEX],next_nearbase_num*2); |
| | | slottime=ceil((nearbase_num+2)*0.3)+1; |
| | | tyncpoll_time=tagslotpos*slottime; |
| | | tag_state=NEARPOLL; |
| | | } |
| | |
| | | case NEARPOLL: |
| | | NearPoll(); |
| | | break; |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | }else{ |
| | | //printf("%x/n",status_reg); |
| | | dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); |
| | | } |
| | | |
| | | } |
| | | uint32_t current_syncid=0xffffffff,synclost_timer; |
| | | extern u8 flag_syncbase; |
| | |
| | | dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//æ¸
餿 å¿ä½ |
| | | frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//è·å¾æ¥æ¶æ°æ®é¿åº¦ |
| | | dwt_readrxdata(rx_buffer, frame_len, 0);//è¯»åæ¥æ¶æ°æ® |
| | | memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2); |
| | | //å°æ¶å°çtag_idåå«åå
¥å次é讯çå
ä¸ï¼ä¸ºå¤æ ç¾é讯æå¡ï¼é²æ¢ä¸æ¬¡éè®¯ä¸æ¥æ¶å°ä¸åIDæ ç¾çæ°æ® |
| | | //tag_id_recv = rx_buffer[TAG_ID_IDX]; |
| | | tag_id_recv = rx_buffer[TAG_ID_IDX]; |
| | | switch(rx_buffer[MESSAGE_TYPE_IDX]) |
| | | { |
| | | // case POLL: |
| | |
| | | // Anchor_RecPoll(); |
| | | // break; |
| | | case SYNC: |
| | | |
| | | memcpy(&rec_syncid,&rx_buffer[ANCHOR_ID_IDX],4); |
| | | if(rec_syncid<current_syncid) |
| | | { |
| | |
| | | break; |
| | | |
| | | 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) |
| | | { |
| | |
| | | temp_tagpos=round((float)(sync_timer%g_com_map[COM_INTERVAL])/slottime); |
| | | tagpos_rec[(u8)temp_tagpos]=1; |
| | | rec_nearbase_num=rx_buffer[NEARBASENUM_INDEX]; |
| | | |
| | | if(rec_nearbase_num>ancidlist_num) |
| | | { |
| | | ancidlist_num=rec_nearbase_num; |
| | | memcpy(ancidlist_rec,&rx_buffer[NEARBASEID_INDEX],rec_nearbase_num*2); |
| | | } |
| | | |
| | | for(i=0;i<rec_nearbase_num;i++) |
| | | { |
| | |
| | | seize_anchor=1; //æ¢å anchor |
| | | Anchor_RecNearPoll(i); |
| | | } |
| | | if(rec_nearbase_num>ancidlist_num) |
| | | { |
| | | ancidlist_num=rec_nearbase_num; |
| | | memcpy(ancidlist_rec,&rx_buffer[NEARBASEID_INDEX],rec_nearbase_num*2); |
| | | } |
| | | |
| | | |
| | | break; |
| | | |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | }else{ |
| | | dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); |
| | | } |
| | | } |