| | |
| | | #include "board.h" |
| | | #include "lib_aoa.h" |
| | | #include "WS2812.h" |
| | | #include "TCPClient.h" |
| | | |
| | | extern int simple_main(void); |
| | | extern int temp_main(void); |
| | | void Calibration_Time(void); |
| | |
| | | int16_t elevation = 0; |
| | | int16_t azimuth = 0; |
| | | uint8_t fom = 0; |
| | | extern CountState_t current_state; |
| | | int32_t distance; |
| | | uint8_t taglist_num; |
| | | float *sts_rssi=NULL; |
| | |
| | | CLOSE, |
| | | RANGE, |
| | | }enumwltagstate; |
| | | #define TAGFREQ_IDX 7 |
| | | |
| | | /* Ranging period */ |
| | | #define RANGING_PERIOD_MS (1000) |
| | | |
| | | /* This is the delay from Frame RX POLL frame to send RESP Frame */ |
| | | #define POLL_RX_TO_RESP_TX_DLY_US 550U //yuan550极限 |
| | | //#define POLL_RX_TO_RESP_TX_DLY_US 550U //yuan550极限 |
| | | |
| | | #define RESP_TX_TO_FINAL_RX_DLY_US 500U |
| | | |
| | | //#define RESP_TX_TO_FINAL_RX_DLY_US 500U |
| | | /* RX sync window size 50 ms*/ |
| | | #define RX_SYNC_WIN_US 5000U //yuan1000 7000success |
| | | |
| | |
| | | #define RX_WIN_IN_ADVANCE_US (150) |
| | | |
| | | #define DELAY_BETWEEN_TWO_FRAME_UUS 500 //yuan1400 |
| | | //#define DELAY_BETWEEN_TWO_FRAME_UUS 500 //yuan1400 |
| | | |
| | | /* Field index in frame */ |
| | | #define MSG_SEQ_NUM_IDX 2 |
| | |
| | | #define MSG_COMMON_LEN 10 |
| | | |
| | | #define UWB_DELAY_TIME_US 496 |
| | | |
| | | |
| | | |
| | | uint8_t receive_flag=0; |
| | | struct mk_uwb_configure |
| | | { |
| | |
| | | // .phy_cfg.sts_seglen = STS_SEGLEN_BPRF_64, /* Number of symbols in an STS segment */ |
| | | // .phy_cfg.rx_ant_id = UWB_RX_ANT_3, /* UWB RX antenna port */ |
| | | //}; |
| | | #ifdef DW1000 |
| | | #ifdef UWB_MK8000_XB |
| | | static struct mk_uwb_configure config = { |
| | | .phy_work_mode = (uint8_t)(PHY_TX | PHY_RX), |
| | | .phy_cfg.ch_num = 5, /* Channel number. */ |
| | |
| | | .phy_cfg.sts_seglen = STS_SEGLEN_BPRF_64, /* Number of symbols in an STS segment */ |
| | | .phy_cfg.rx_ant_id = UWB_RX_ANT_3, /* UWB RX antenna port */ |
| | | }; |
| | | #endif |
| | | #ifdef UWB_DW1000_MBXJZ_OLD |
| | | static struct mk_uwb_configure config = { |
| | | .phy_work_mode = (uint8_t)(PHY_TX | PHY_RX), |
| | | .phy_cfg.ch_num = 5, /* Channel number. */ |
| | | .phy_cfg.code_index = 9, /* TRX preamble code */ |
| | | .phy_cfg.mean_prf = MEAN_PRF_64M, /* Mean prf 64/128/256M */ |
| | | .phy_cfg.data_bit_rate = DATA_BR_6M8, /* Data rate 6.8M */ |
| | | .phy_cfg.sync_sym = PREAM_LEN_64, /* Preamble duration, length of preamble 128 */ |
| | | .phy_cfg.sfd_sym = NON_STD_NSFD5_8, /* Identifier for SFD sequence */ |
| | | .phy_cfg.ranging_bit = 1, /* ranging bit set 1 */ |
| | | .phy_cfg.trx_mode = TRX_MODE_15_4A, /* IEEE802.15.4z - BPRF mode */ |
| | | .phy_cfg.sts_pkt_cfg = STS_PKT_CFG_0, /* SP0 Frame */ |
| | | .phy_cfg.sts_segnum = STS_SEGNUM_BPRF_1, /* Number of STS segments in the frame */ |
| | | .phy_cfg.sts_seglen = STS_SEGLEN_BPRF_64, /* Number of symbols in an STS segment */ |
| | | .phy_cfg.rx_ant_id = UWB_RX_ANT_3, /* UWB RX antenna port */ |
| | | }; |
| | | #endif |
| | | |
| | | #ifdef DW1000 |
| | | |
| | | //static struct mk_uwb_configure config = { |
| | | // .phy_work_mode = (uint8_t)(PHY_TX | PHY_RX), |
| | | // .phy_cfg.ch_num = 5, /* Channel number. */ |
| | | // .phy_cfg.code_index = 9, /* TRX preamble code */ |
| | | // .phy_cfg.mean_prf = MEAN_PRF_64M, /* Mean prf 64/128/256M */ |
| | | // .phy_cfg.data_bit_rate = DATA_BR_6M8, /* Data rate 6.8M */ |
| | | // .phy_cfg.sync_sym = PREAM_LEN_64, /* Preamble duration, length of preamble 128 */ |
| | | // .phy_cfg.sfd_sym = NON_STD_NSFD5_8, /* Identifier for SFD sequence */ |
| | | // .phy_cfg.ranging_bit = 1, /* ranging bit set 1 */ |
| | | // .phy_cfg.trx_mode = TRX_MODE_15_4A, /* IEEE802.15.4z - BPRF mode */ |
| | | // .phy_cfg.sts_pkt_cfg = STS_PKT_CFG_0, /* SP0 Frame */ |
| | | // .phy_cfg.sts_segnum = STS_SEGNUM_BPRF_1, /* Number of STS segments in the frame */ |
| | | // .phy_cfg.sts_seglen = STS_SEGLEN_BPRF_64, /* Number of symbols in an STS segment */ |
| | | // .phy_cfg.rx_ant_id = UWB_RX_ANT_3, /* UWB RX antenna port */ |
| | | //}; |
| | | |
| | | #elif defined STS_MODE |
| | | static struct mk_uwb_configure config = { |
| | | .phy_work_mode = (uint8_t)(PHY_TX | PHY_RX), |
| | |
| | | poll_rx_num++; |
| | | rssi = rx_report->rssi; |
| | | receive_flag=1; |
| | | Anchor_App(); |
| | | Anchor_App(); |
| | | if(resp_tx_flag==0) |
| | | { |
| | | OpenUWB(); |
| | | OpenUWB(); |
| | | } |
| | | // #ifdef STS_MODE |
| | | // valid_sts= sts_valid_check(); |
| | |
| | | memcpy(&rx_rpt, rx_report, sizeof(struct MAC_HW_REPORT_T)); |
| | | rx_length = 0; |
| | | receive_error_flag=1; |
| | | OpenUWB();//再次开启UWB接收 |
| | | |
| | | OpenUWB(); |
| | | |
| | | // OpenUWB();//再次开启UWB接收 |
| | | } |
| | | // CloseUWB(); |
| | | // OpenUWB();//再次开启UWB接收 |
| | |
| | | temp_count= phy_timer_count_get(); |
| | | temp_internal=temp_count; |
| | | resp_tx_num++; |
| | | // OpenUWB();//再次开启UWB接收 |
| | | |
| | | OpenUWB(); |
| | | |
| | | // OpenUWB();//再次开启UWB接收 |
| | | //LOG_INFO(TRACE_MODULE_APP, "poll_rx_num is %d,resp_tx_num is %d\r\n",poll_rx_num,resp_tx_num); |
| | | } |
| | | OpenUWB();//再次开启UWB接收 |
| | | // OpenUWB();//再次开启UWB接收 |
| | | } |
| | | uint32_t start_receive_count,end_receive_count,poll_timeout,current_count,temp_resp; |
| | | uint16_t anchordata_id[TAG_NUM_IN_SYS],anchordata_dist[TAG_NUM_IN_SYS]; |
| | |
| | | memcpy(&send_buffer[ANCHOR_ID_IDX],&dev_id,2);//自身id |
| | | memcpy(&send_buffer[TAG_ID_IDX],&tag_id_recv,2);//接受者id |
| | | send_buffer[MESSAGE_TYPE_IDX]=MBX_RESPONSE; |
| | | memcpy(&send_buffer[TAGFREQ_IDX],&tag_frequency,2); |
| | | |
| | | position=ancrec_nearbasepos; |
| | | resp_tx_en_start_u32 = poll_rx_en_start_u32+US_TO_PHY_TIMER_COUNT(POLL_RX_TO_RESP_TX_DLY_US)+ancrec_nearbasepos*US_TO_PHY_TIMER_COUNT(DELAY_BETWEEN_TWO_FRAME_UUS);//加入帧间隔 |
| | |
| | | // } |
| | | // Set4LEDColor(uwbled,rtkled,led4g,powerled); |
| | | |
| | | if(taglist_num>20) //最多上传20个基站数据,距离最近的20个 |
| | | taglist_num = 20; |
| | | if(taglist_num>14) //最多上传20个基站数据,距离最近的20个 |
| | | taglist_num = 14; |
| | | usart_send[0]= 0x55; |
| | | usart_send[1]= 0xaa; |
| | | usart_send[2] = 0x12;//正常模式 |
| | |
| | | checksum = Checksum_u16(&usart_send[2],15+5*taglist_num); |
| | | memcpy(&usart_send[17+5*taglist_num],&checksum,2); |
| | | HexToAsciiSendUDP(usart_send,19+5*taglist_num); |
| | | taglist_num = 0; |
| | | // taglist_num = 0; |
| | | // rxnum=0; |
| | | } |
| | | extern uint32_t step_count; |
| | | void UWBIdleTask(void) |
| | | { |
| | | // if(receive_flag) |
| | |
| | | // } |
| | | if(HIDO_TimerGetTick()-uwbtasktimer >=1) |
| | | { |
| | | step_count = mir3da_get_step(); // 获取步数 |
| | | uwbtasktimer = HIDO_TimerGetTick(); |
| | | UWBOneSecondTask(); |
| | | UWBSendUDPTask(); |
| | | if(g_com_map[UWBFrequency]==1) |
| | | { |
| | | UWBSendUDPTask(); |
| | | } |
| | | } |
| | | } |
| | | int uwb_app_poll(void) |
| | | { |
| | | UWBIdleTask(); |
| | | } |
| | | extern uint8_t uwb_offtime_count; |
| | | int Anchor_App(void) |
| | | { |
| | | uint8_t i; |
| | | uint16_t tempid; |
| | | uwb_offtime_count=0; |
| | | #ifdef CEJU_ZIUMIAN |
| | | current_state = STATE_NORMAL; |
| | | #endif |
| | | if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)//判断是否是和自己是同一组通讯的且为poll包 |
| | | { flag_recsuccess = 1; |
| | | wltag_state=RANGE;//成功后从search切换为range |
| | |
| | | memcpy(rec_ancdistlist,&rx_buf[FZ_NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num); |
| | | memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2); |
| | | uwbled=BLUE; |
| | | |
| | | |
| | | // for(i=0; i<rec_nearbase_num; i++) |
| | | // { |
| | | // if(rec_ancidlist[i] == dev_id) |
| | |
| | | Anchor_RecNearPoll(i); |
| | | tagdist_list[taglist_pos]=rec_ancdistlist[i]; |
| | | anchordata_bat[taglist_pos] = battary;//保存该基站电量 |
| | | anchor_rssi[taglist_pos]=rssi; |
| | | anchor_rssi[taglist_pos]=rssi; |
| | | if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中 |
| | | { //tempid==dev_id 说明基站下发测距报文有这个标签的信息 |
| | | taglist_num++; //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况 |