| | |
| | | u8 nearbase_num; |
| | | u16 nearbaseid_list[10],mainbase_id; |
| | | int32_t mainbase_dist,nearbase_distlist[10]; |
| | | uint8_t trygetnearmsg_times; |
| | | void Poll(void) |
| | | { |
| | | uint32_t frame_len; |
| | |
| | | { |
| | | memcpy(&minid, &rx_buffer[ANCHOR_ID_IDX], 4); |
| | | tag_state=GETNEARMSG; |
| | | trygetnearmsg_times=5; |
| | | mindist=temp_dist; |
| | | } |
| | | if(result==0) |
| | | {while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS))//䏿æ¥è¯¢è¯çç¶æç´å°åé宿 |
| | |
| | | } |
| | | tyncpoll_time=(tagslotpos-1)*slottime; |
| | | } |
| | | mainbase_id=0;//minid; |
| | | mainbase_id=minid; |
| | | } |
| | | |
| | | u8 FindNearBasePos(u16 baseid) |
| | |
| | | return i; |
| | | } |
| | | } |
| | | u8 recbase_num=0; |
| | | #define CHANGE_BASE_THRESHOLD 5 |
| | | void NearAncSelect(void) |
| | | {static u16 last_mainbase_id,change_base_count; |
| | | int32_t nearbase_mindist=99999, nearbase_minpos; |
| | | u8 i; |
| | | for(i=0;i<nearbase_num;i++) |
| | | for(i=0;i<recbase_num-1;i++) |
| | | { |
| | | if(nearbase_mindist<nearbase_distlist[i]) |
| | | if(nearbase_mindist>nearbase_distlist[i]) |
| | | { |
| | | nearbase_mindist=nearbase_distlist[i]; |
| | | nearbase_minpos=i; |
| | |
| | | uint32_t frame_len; |
| | | uint32_t final_tx_time; |
| | | u32 start_poll; |
| | | u8 i,getsync_flag=0,recbase_num,timeout; |
| | | u8 i,getsync_flag=0,timeout; |
| | | dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS); //设置åéåå¼å¯æ¥æ¶ï¼å¹¶è®¾å®å»¶è¿æ¶é´ |
| | | dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS); |
| | | tag_succ_times = 0; |
| | |
| | | dwt_writetxfctrl(13+2*nearbase_num, 0);//设置è¶
宽带åéæ°æ®é¿åº¦ |
| | | dwt_starttx(DWT_START_TX_IMMEDIATE | DWT_RESPONSE_EXPECTED);//å¼å¯åéï¼åé宿åçå¾
䏿®µæ¶é´å¼å¯æ¥æ¶ï¼çå¾
æ¶é´å¨dwt_setrxaftertxdelayä¸è®¾ç½® |
| | | |
| | | for(i=0;i<nearbase_num;i++) |
| | | nearbase_distlist[i]=0xffff; |
| | | |
| | | flag_finalsend=0; |
| | | neartimout_timer=0; |
| | | recbase_num=0; |
| | | timeout=nearbase_num/4+12; |
| | | timeout=nearbase_num/4+2; |
| | | mainbase_dist=100000; |
| | | mainbase_lost_count++; |
| | | while(neartimout_timer<timeout) |
| | |
| | | dwt_forcetrxoff(); |
| | | dwt_setdelayedtrxtime(final_tx_time); |
| | | result=dwt_starttx(DWT_START_TX_DELAYED);//设å®ä¸ºå»¶è¿åé |
| | | break; |
| | | } |
| | | } |
| | | if(neartimout_timer>timeout) |
| | |
| | | tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL; |
| | | dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//å°åéæ°æ®åå
¥DW1000 |
| | | dwt_writetxfctrl(28+nearbase_num*4, 0);//设å®åéæ°æ®é¿åº¦ |
| | | usart_send[2] = 1;//æ£å¸¸æ¨¡å¼ |
| | | usart_send[3] = 17;//æ°æ®æ®µé¿åº¦ |
| | | usart_send[4] = frame_seq_nb;//æ°æ®æ®µé¿åº¦ |
| | | memcpy(&usart_send[5],&dev_id,2); |
| | | memcpy(&usart_send[7],&rec_nearbaseid,2); |
| | | memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4); |
| | | usart_send[13] = battary; |
| | | usart_send[14] = button; |
| | | checksum = Checksum_u16(&usart_send[2],17); |
| | | memcpy(&usart_send[19],&checksum,2); |
| | | UART_PushFrame(usart_send,21); |
| | | //result=dwt_starttx(DWT_START_TX_DELAYED);//设å®ä¸ºå»¶è¿åé |
| | | }else{ |
| | | rec_nearbasepos=FindNearBasePos(rec_nearbaseid); |
| | |
| | | dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//å°åéæ°æ®åå
¥DW1000 |
| | | dwt_writetxfctrl(28+nearbase_num*4, 0);//设å®åéæ°æ®é¿åº¦ |
| | | LED0_BLINK; |
| | | usart_send[2] = 1;//æ£å¸¸æ¨¡å¼ |
| | | usart_send[3] = 17;//æ°æ®æ®µé¿åº¦ |
| | | usart_send[4] = frame_seq_nb;//æ°æ®æ®µé¿åº¦ |
| | | memcpy(&usart_send[5],&dev_id,2); |
| | | memcpy(&usart_send[7],&rec_nearbaseid,2); |
| | | memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4); |
| | | usart_send[13] = battary; |
| | | usart_send[14] = button; |
| | | checksum = Checksum_u16(&usart_send[2],17); |
| | | memcpy(&usart_send[19],&checksum,2); |
| | | UART_PushFrame(usart_send,21); |
| | | |
| | | //dwt_setdelayedtrxtime(final_tx_time);//设置finalå
åéæ¶é´T5 |
| | | // result=dwt_starttx(DWT_START_TX_DELAYED);//设å®ä¸ºå»¶è¿åé |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | void Tag_App(void)//å鿍¡å¼(TAGæ ç¾) |
| | | { |
| | | //LED0_ON; |
| | |
| | | Poll(); |
| | | break; |
| | | case GETNEARMSG: |
| | | GetNearMsg(); |
| | | // if(trygetnearmsg_times--!=0) |
| | | {GetNearMsg(); |
| | | } |
| | | // else{ |
| | | // tag_state=DISCPOLL; |
| | | // } |
| | | |
| | | break; |
| | | case NEARPOLL: |
| | | GPIO_WriteBit(EU_TX_GPIO, EU_RX_PIN, Bit_SET); |
| | | NearPoll(); |
| | | GPIO_WriteBit(EU_TX_GPIO, EU_RX_PIN, Bit_RESET); |
| | | break; |
| | | } |
| | | } |
| | |
| | | |
| | | resp_tx_time = (poll_rx_ts + ((POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计ç®Responseåéæ¶é´T3ã |
| | | dwt_setdelayedtrxtime(resp_tx_time);//设置Responseåéæ¶é´T3 |
| | | dwt_setrxaftertxdelay(0);//RESP_TX_TO_FINAL_RX_DLY_UUS+(nearbase_num-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置åé宿åå¼å¯æ¥æ¶å»¶è¿æ¶é´ |
| | | dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(nearbase_num-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置åé宿åå¼å¯æ¥æ¶å»¶è¿æ¶é´ |
| | | dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//æ¥æ¶è¶
æ¶æ¶é´ |
| | | |
| | | memcpy(&tx_near_msg[DIST_IDX], &tagdist_list[taglist_pos], 4); |
| | | tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE; |
| | | dwt_writetxdata(17, tx_near_msg, 0);//åå
¥åéæ°æ® |
| | | dwt_writetxfctrl(17, 0);//设å®åéé¿åº¦ |
| | | dwt_writetxdata(20, tx_near_msg, 0);//åå
¥åéæ°æ® |
| | | dwt_writetxfctrl(20, 0);//设å®åéé¿åº¦ |
| | | result = dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//å»¶è¿åéï¼çå¾
æ¥æ¶ |
| | | |
| | | battary = rx_buffer[BATTARY_IDX]; |