| | |
| | | #define FZ_NEARBASEID_INDEX 11 |
| | | #define TAG_NUM_IN_SYS 25 |
| | | |
| | | #define TAG_KEEPTIMES 30 |
| | | #define TAG_KEEPTIMES 15 |
| | | #define REPORT_TAG_KEEPTIMES 1 |
| | | static uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS],rec_ancdistlist[TAG_NUM_IN_SYS]; |
| | | static u8 frame_seq_nb2,battary,button,uwb_losttimer,taglist_pos; |
| | | |
| | | uint16_t recnum[5]; |
| | | static u8 tagofflinetime[ANC_MAX_NUM]; |
| | | u8 taglist_num; |
| | | uint16_t tagid_list[ANC_MAX_NUM],tagdist_list[ANC_MAX_NUM]; |
| | |
| | | memcpy(&send_buffer[RESP_MSG_ANC_DISTOFFSET],&g_com_map[DIST_OFFSET],2); |
| | | |
| | | |
| | | send_buffer[GROUP_ID_IDX] = group_id; |
| | | send_buffer[GROUP_ID_IDX] = rx_buffer[GROUP_ID_IDX]; |
| | | // send_buffer[MAINBASE_INDEX]=flag_syncbase; |
| | | send_buffer[MESSAGE_TYPE_IDX]=MBX_RESPONSE; |
| | | send_buffer[MOTORSTATE_INDEX]=motorstate;//(remotesend_state<<4)|motorstate; |
| | |
| | | if(current_time>=end_time&¤t_time<end_time+15000) |
| | | break; |
| | | }; |
| | | recnum[3]++; |
| | | tagofflinetime[taglist_pos] = 0; |
| | | // printf("测距成功,序号%d,距离%d\r\n",frame_seq_nb2,tagdist_list[taglist_pos]); |
| | | // delay_ms(10); |
| | |
| | | #define GROUP_NUM 3 |
| | | uint16_t group_min_dist[GROUP_NUM+1]; |
| | | uint32_t temp231; |
| | | uint16_t recnum[3]; |
| | | |
| | | |
| | | extern int8_t RssiValue; |
| | | void MbxTagUwbRec(void) |
| | | { |
| | | |
| | |
| | | memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2); |
| | | //将收到的tag_id分别写入各次通讯的包中,为多标签通讯服务,防止一次通讯中接收到不同ID标签的数据 |
| | | memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2); |
| | | recnum[1]++; |
| | | |
| | | switch(rx_buffer[MESSAGE_TYPE_IDX]) |
| | | { uint8_t target_tagi; |
| | | case MBX_REG: |
| | | break; |
| | | case MBX_POLL: |
| | | if(group_id==rx_buffer[GROUP_ID_IDX]) |
| | | // if(group_id==rx_buffer[GROUP_ID_IDX]) |
| | | { |
| | | // dwt_readdiagnostics(&d1); |
| | | // LOS(&d1); |
| | |
| | | // { |
| | | // break; |
| | | // } |
| | | recnum[2]++; |
| | | recnum[1]++; |
| | | frame_seq_nb2 = rx_buffer[SEQUENCE_IDX]; |
| | | battary = rx_buffer[BATTARY_IDX]; |
| | | button = rx_buffer[BUTTON_IDX]; |
| | |
| | | uwb_losttimer = 0; |
| | | |
| | | taglist_pos=CmpTagInList(tag_id_recv); |
| | | if(taglist_num>=ANC_MAX_NUM) |
| | | if(taglist_pos>=ANC_MAX_NUM) |
| | | break; |
| | | |
| | | recnum[2]++; |
| | | |
| | | for(i=0; i<rec_nearbase_num; i++) |
| | | { |
| | | memcpy(&tempid,&rx_buffer[FZ_NEARBASEID_INDEX+i*2],2); |
| | | if(tempid==dev_id) |
| | | { |
| | | // recnum[2]++; |
| | | Anchor_RecNearPoll(i); |
| | | tagdist_list[taglist_pos]=rec_ancdistlist[i]; |
| | | if(group_min_dist[group_id]>rec_ancdistlist[i]) |
| | | { |
| | | group_min_dist[group_id] = rec_ancdistlist[i]; |
| | | } |
| | | if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中 |
| | | { //tempid==dev_id 说明基站下发测距报文有这个标签的信息 |
| | | taglist_num++; //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况 |
| | |
| | | u8 bat; |
| | | id = report_ancid[j]; |
| | | dist = report_ancdist[j]; |
| | | |
| | | report_ancid[j] = report_ancid[j+1]; |
| | | report_ancdist[j] = report_ancdist[j+1]; |
| | | report_ancid[j+1] = id; |
| | |
| | | memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2); |
| | | lora_sendbuffer[SEQNUM_IDX] = seq_num++; |
| | | lora_sendbuffer[BAT_IDX] = bat_percent; |
| | | lora_sendbuffer[BAT_IDX] = recnum[0]; |
| | | // lora_sendbuffer[SEQNUM_IDX] = recnum[1]; |
| | | lora_sendbuffer[STATE_IDX] = !GET_USERKEY|stationary_flag<<1; |
| | | #ifdef USE_GPS |
| | | memcpy(&lora_sendbuffer[GPS_JINGDU_IDX],&gps_jingdu,8); |
| | |
| | | lora_sendbuffer[GPS_CHAFENLINGQI] = gps_chafenlingqi; |
| | | #endif |
| | | // memcpy(&lora_sendbuffer[BAR_HEIGHT_IDX],&bar_height,2); |
| | | // report_ancdist[4] = report_ancnum; |
| | | // report_ancnum = 6; |
| | | // report_ancdist[0] = recnum[0]; |
| | | // report_ancdist[1] = recnum[1]; |
| | | // report_ancdist[2] = recnum[2]; |
| | | // report_ancdist[3] = recnum[3]; |
| | | // report_ancdist[5] = taglist_num; |
| | | lora_sendbuffer[ANCNUM_IDX] = report_ancnum; |
| | | |
| | | memcpy(&lora_sendbuffer[ANCID_IDX],report_ancid,report_ancnum*2); |
| | | memcpy(&lora_sendbuffer[ANCID_IDX+report_ancnum*2],report_ancdist,report_ancnum*2); |
| | | checksum = Checksum_u16(lora_sendbuffer,4*report_ancnum+ANCID_IDX); |
| | |
| | | LED_TB_ON; |
| | | bat_percent=Get_Battary(); |
| | | |
| | | for(uint8_t i=0;i<3;i++) |
| | | for(uint8_t i=0;i<5;i++) |
| | | recnum[i] = 0; |
| | | |
| | | } |
| | |
| | | if(rec_secdelay>0) |
| | | { |
| | | rec_secdelay--; |
| | | // if(lora_jianting_flag) |
| | | // { |
| | | // if(++group_id>GROUP_NUM) |
| | | // { |
| | | // group_id = 1; |
| | | // } |
| | | // t22[ti++] = group_id; |
| | | // if(ti>=20) |
| | | // ti=0; |
| | | // group_min_dist[group_id] = 0xffff; |
| | | // Radio.Standby(); |
| | | // SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); |
| | | // Radio.Rx(0); |
| | | // } |
| | | if(lora_jianting_flag) |
| | | { |
| | | if(++group_id>GROUP_NUM) |
| | | { |
| | | group_id = 1; |
| | | } |
| | | t22[ti++] = group_id; |
| | | if(ti>=20) |
| | | ti=0; |
| | | group_min_dist[group_id] = 0xffff; |
| | | Radio.Standby(); |
| | | SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); |
| | | Radio.Rx(0); |
| | | } |
| | | return; |
| | | } |
| | | // //找3个小组中最近距离最大的小组,上传报文后切换到这个小组,因为上传报文会时间占用。 |
| | |
| | | // group_maxdist_index = group_min_dist[2]>group_min_dist[3]?2:3; //取 2和3 最大值 |
| | | // group_mindist_index = group_min_dist[1]<group_min_dist[3]?1:3;//取 1和3 最小值 |
| | | // } |
| | | //// group_id = 1; |
| | | group_id = 1; |
| | | // group_id = group_maxdist_index; |
| | | #endif |
| | | t22[ti++] = group_id; |