From 1066acd3b7e804e453b324be2529349216d4df80 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期四, 10 三月 2022 17:28:40 +0800
Subject: [PATCH] V1.66 增加按键电量信息
---
源码/核心板/Src/application/dw_app.c | 97 +++++++++++++++++++-----------------------------
1 files changed, 38 insertions(+), 59 deletions(-)
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index 8a69306..91c5765 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -9,7 +9,7 @@
NEARPOLL,
}tag_state=NEARPOLL;
static dwt_config_t config = {
- 5, /* Channel number. */
+ 2, /* Channel number. */
DWT_PRF_64M, /* Pulse repetition frequency. */
DWT_PLEN_128, /* Preamble length. */
DWT_PAC8, /* Preamble acquisition chunk size. Used in RX only. */
@@ -128,8 +128,9 @@
/* Configure DW1000. See NOTE 6 below. */
dwt_configure(&config);//配置DW1000
- //dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
-
+
+
+
/* Apply default antenna delay value. See NOTE 1 below. */
dwt_setrxantennadelay(RX_ANT_DLY); //设置接收天线延迟
dwt_settxantennadelay(0); //设置发射天线延迟
@@ -186,7 +187,6 @@
dwt_forcetrxoff(); //关闭接收,以防在RX ON 状态
- tx_sync_msg[GROUP_ID_IDX] = group_id;
tx_sync_msg[SYNC_SEQ_IDX]=sync_seq;
memcpy(&tx_sync_msg[ANCHOR_ID_IDX],&sync_baseid,4);
dwt_writetxdata(sizeof(tx_sync_msg), tx_sync_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
@@ -216,13 +216,13 @@
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],true_exsistbase_list[MAX_NEARBASE_NUM];
uint8_t trygetnearmsg_times;
-u16 current_slotnum,total_slotnum,target_time,last_time,record_time[10],record_i;
+u16 current_slotnum,total_slotnum,target_time,last_time;
u32 rec_tagpos_binary;
extern uint32_t tagpos_binary;
void SetNextPollTime(u16 time)
{
current_slotnum++;
- if(current_slotnum>=total_slotnum)
+ if(current_slotnum==total_slotnum)
current_slotnum-=total_slotnum;
//time=5;
target_time=((current_slotnum*g_com_map[COM_INTERVAL])+time);
@@ -239,11 +239,7 @@
{target_time-=1000;}
if(target_time<0)
{target_time+=1000;}
-record_time[record_i++]=target_time;
- if(record_i>=10)
- {
- record_i=0;
- }
+
}
u8 FindNearBasePos(u16 baseid)
{
@@ -426,7 +422,7 @@
memcpy(&tmp_time,&rx_buffer[ANCTIMEUS],2);
- //if(g_com_map[DEV_ROLE]!=0)
+ if(g_com_map[DEV_ROLE]!=0)
{
sync_timer=temp_sync_timer1;
//// memcpy(&tagslotpos,&rx_buffer[TAGSLOTPOS],2);
@@ -469,10 +465,10 @@
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);
- if(temp_dist!=0x1ffff)
+ if(temp_dist!=0x1ffff&&g_com_map[ALARM_DISTANCE1] == 1)
{
g_Resttimer=0;
- IWDG_Feed();
+ IWDG_Feed();
#ifdef USART_SINGLE_OUTPUT
usart_send[2] = 1;//正常模式
usart_send[3] = 17;//数据段长度
@@ -490,7 +486,6 @@
usart_send[14] = button;
checksum = Checksum_u16(&usart_send[2],17);
memcpy(&usart_send[19],&checksum,2);
- if(g_com_map[MODBUS_MODE]!=1)
UART_PushFrame(usart_send,21);
#endif
@@ -522,7 +517,7 @@
LED0_BLINK;
// memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
// tagslotpos=GetRandomSlotPos(rec_tagpos_binary);
- if(temp_dist!=0x1ffff)
+ if(temp_dist!=0x1ffff&&g_com_map[ALARM_DISTANCE1] == 1)
{
#ifdef USART_SINGLE_OUTPUT
usart_send[2] = 1;//正常模式
@@ -541,7 +536,6 @@
usart_send[14] = button;
checksum = Checksum_u16(&usart_send[2],17);
memcpy(&usart_send[19],&checksum,2);
- if(g_com_map[MODBUS_MODE]!=1)
UART_PushFrame(usart_send,21);
#endif
@@ -723,7 +717,6 @@
{
//LED0_ON;
dwt_forcetrxoff();
- dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0);
GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);
switch(tag_state)
{
@@ -746,7 +739,7 @@
int8_t correction_time,new_tagid=0;
extern uint8_t sync_seq;
u16 taglist_num=0,taglist_pos;
-u16 tagid_list[TAG_NUM_IN_SYS],tagstate_list[TAG_NUM_IN_SYS];
+u16 tagid_list[TAG_NUM_IN_SYS],tagstate_list[TAG_NUM_IN_SYS];;
u8 tagofflinetime[TAG_NUM_IN_SYS];
int32_t tagdist_list[TAG_NUM_IN_SYS];
void TagListUpdate(void)
@@ -890,7 +883,16 @@
dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间
dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间
- if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE1])
+
+ if(new_tagid)
+ {
+ tagdist_list[taglist_pos]=0x1ffff;
+ memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
+ }else{
+ memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
+ }
+
+ if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE1])
{
motorstate =0;
}else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE2])
@@ -902,18 +904,11 @@
}else{
motorstate =0;
}
-
- if(new_tagid)
- {
- tagdist_list[taglist_pos]=0x1ffff;
- memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
- }else{
- memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
- }
+
tx_nearresp_msg[GROUP_ID_IDX] = group_id;
tx_nearresp_msg[MAINBASE_INDEX]=flag_syncbase;
tx_nearresp_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE;
- tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|motorstate;
+ tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|(motorstate&0xf);
if(remotesend_state)
{
memcpy(&tx_nearresp_msg[REMOTEPARA_INDEX],remotetag_para,REMOTEPARA_LEN);
@@ -1008,7 +1003,7 @@
{
g_Tagdist[taglist_pos]=hex_dist/10;
}else{
- g_Tagdist[taglist_pos]= 1;
+ // g_Tagdist[taglist_pos]= 1;
}
#ifdef USART_SINGLE_OUTPUT
usart_send[2] = 1;//正常模式
@@ -1016,8 +1011,8 @@
usart_send[4] = frame_seq_nb2;//数据段长度
memcpy(&usart_send[5],&tag_id_recv,2);
memcpy(&usart_send[7],&dev_id,2);
- if(tagdist_list[taglist_pos]<=0)
- tagdist_list[taglist_pos]=10;
+ if(tagdist_list[taglist_pos]<=0)
+ tagdist_list[taglist_pos]=0x2ffff;
memcpy(&usart_send[9],&tagdist_list[taglist_pos],4);
usart_send[13] = battary;
usart_send[14] = button;
@@ -1027,12 +1022,12 @@
memcpy(&usart_send[19],&checksum,2);
if(g_com_map[MODBUS_MODE]!=1)
UART_PushFrame(usart_send,21);
- tagstate_list[taglist_pos] = button<<8|battary;
#else
memcpy(&usart_send_anc[4+6*anc_report_num],&tag_id_recv,2);
memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4);
anc_report_num++;
#endif
+ tagstate_list[taglist_pos] = (button<<8)|battary;
for(i=0;i<taglist_num-1;i++)
{
if( tagdist_list[i]>tagdist_list[i+1]&&tagdist_list[i+1]!=0)
@@ -1058,7 +1053,6 @@
Modbus_HoldReg[i*4+1] = tagstate_list[i];
memcpy(&Modbus_HoldReg[i*4+2],&tagdist_list[i],4);
}
-
}else{
// printf("%d",hex_dist);
misdist_num[taglist_pos]++;
@@ -1074,19 +1068,6 @@
extern u8 flag_syncbase;
u8 tagpos_rec[50],tagpos_send[50],ancidlist_num;
u16 ancidlist_rec[20],ancidlist_send[20],rec_ancidlist[20],rec_ancdistlist[20];
-void Anchor_Start(void)
-{
-
-dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
- g_start_sync_flag=0;
-dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
- dwt_setrxtimeout(1000);//设定接收超时时间,0位没有超时时间
- dwt_rxenable(0);//打开接收
-// while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
-// {
-// //IdleTask();
-// };
-}
void Anchor_App(void)
{
@@ -1094,19 +1075,17 @@
u16 tempid;
uint32_t rec_syncid;
-// dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
-// g_start_sync_flag=0;
+ dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
+ g_start_sync_flag=0;
-// dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
-// dwt_rxenable(0);//打开接收
-//// GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);
-// while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
-// {
-//
-// IdleTask();
-// };
- dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0);
- status_reg = dwt_read32bitreg(SYS_STATUS_ID);
+ dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
+ dwt_rxenable(0);//打开接收
+// GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);
+ while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
+ {
+
+ IdleTask();
+ };
//GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_RESET);
if (status_reg & SYS_STATUS_RXFCG)//成功接收
{ u16 tag_recv_interval;
--
Gitblit v1.9.3