From 1059b6d24c634e20aa8d63412792239b607b4020 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期四, 09 四月 2020 23:07:28 +0800 Subject: [PATCH] 完善标签功能 --- Src/application/dw_app.c | 26 ++++++++++++++++++++------ 1 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c index ab18984..57cba0a 100644 --- a/Src/application/dw_app.c +++ b/Src/application/dw_app.c @@ -46,7 +46,7 @@ #define POLL_TX_TO_RESP_RX_DLY_UUS 150 /* This is the delay from Frame RX timestamp to TX reply timestamp used for calculating/setting the DW1000's delayed TX function. This includes the * frame length of approximately 2.66 ms with above configuration. */ -#define RESP_RX_TO_FINAL_TX_DLY_UUS 800 +#define RESP_RX_TO_FINAL_TX_DLY_UUS 850 /* Receive response timeout. See NOTE 5 below. */ #define RESP_RX_TIMEOUT_UUS 600 @@ -65,20 +65,22 @@ #define FINAL_MSG_TS_LEN 4 #define SYNC_SEQ_IDX 5 - +//common #define GROUP_ID_IDX 0 #define ANCHOR_ID_IDX 1 #define TAG_ID_IDX 5 #define MESSAGE_TYPE_IDX 9 -#define DIST_IDX 10 + //Poll #define ANC_TYPE_IDX 14 #define BATTARY_IDX 15 #define BUTTON_IDX 16 #define SEQUENCE_IDX 17 //respose +#define DIST_IDX 10 #define ANCTIMEMS 14 #define ANCTIMEUS 16 +#define ANCSEND_INTERVAL 18 #define POLL 0x01 #define RESPONSE 0x02 @@ -107,7 +109,7 @@ static uint8_t tx_final_msg[24] = {0}; //static uint8_t rx_poll_msg[] = {0x00, 0x88, 0, 0xCA, 0xDE, 'W', 'A', 'V', 'E', 0x21, 0, 0}; -static uint8_t tx_resp_msg[20] = {0}; +static uint8_t tx_resp_msg[22] = {0}; //static uint8_t rx_final_msg[] = {0x41, 0x88, 0, 0xCA, 0xDE, 'W', 'A', 'V', 'E', 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* Frame sequence number, incremented after each transmission. */ @@ -277,6 +279,10 @@ tx_final_msg[MESSAGE_TYPE_IDX]=FINAL; tx_sync_msg[MESSAGE_TYPE_IDX]=SYNC; + memcpy(&tx_poll_msg[GROUP_ID_IDX], &group_id, 1); + memcpy(&tx_final_msg[GROUP_ID_IDX], &group_id, 1); + memcpy(&tx_resp_msg[GROUP_ID_IDX], &group_id, 1); + memcpy(&tx_poll_msg[TAG_ID_IDX], &dev_id, 4); memcpy(&tx_final_msg[TAG_ID_IDX], &dev_id, 4); memcpy(&tx_resp_msg[ANCHOR_ID_IDX], &dev_id, 4); @@ -387,8 +393,8 @@ /* Check that the frame is the expected response from the companion "DS TWR responder" example. * As the sequence number field of the frame is not relevant, it is cleared to simplify the validation of the frame. */ - if (rx_buffer[MESSAGE_TYPE_IDX] == RESPONSE&&!memcmp(&rx_buffer[TAG_ID_IDX],&dev_id,4)) //判断接收到的数据是否是response数据 - { uint16_t anc_id_recv,current_count; + if (rx_buffer[GROUP_ID_IDX] == group_id&&rx_buffer[MESSAGE_TYPE_IDX] == RESPONSE&&!memcmp(&rx_buffer[TAG_ID_IDX],&dev_id,4)) //判断接收到的数据是否是response数据 + { uint16_t anc_id_recv,current_count,rec_com_interval; /* Retrieve poll transmission and response reception timestamp. */ poll_tx_ts = get_tx_timestamp_u64(); //获得POLL发送时间T1 resp_rx_ts = get_rx_timestamp_u64(); //获得RESPONSE接收时间T4 @@ -412,6 +418,14 @@ } memcpy(&hex_dist2, &rx_buffer[DIST_IDX], 4); memcpy(&tx_final_msg[ANCHOR_ID_IDX], &rx_buffer[ANCHOR_ID_IDX], 4); + memcpy(&rec_com_interval,&rx_buffer[ANCSEND_INTERVAL], 2); + if(rec_com_interval>4&&rec_com_interval!=g_com_map[COM_INTERVAL]) + { + g_com_map[COM_INTERVAL]=rec_com_interval; + save_com_map_to_flash(); + delay_ms(100); + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader + } /* Compute final message transmission time. See NOTE 9 below. */ final_tx_time = (resp_rx_ts + (RESP_RX_TO_FINAL_TX_DLY_UUS * UUS_TO_DWT_TIME)) >> 8;//计算final包发送时间,T5=T4+Treply2 dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5 -- Gitblit v1.9.3