yincheng.zhong
2025-02-24 f08d7f7203a757602e720126d2fc0d90560bc434
Src/application/dw_mbx_tag.c
@@ -37,11 +37,11 @@
#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];
@@ -67,7 +67,7 @@
    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;
@@ -93,6 +93,7 @@
        if(current_time>=end_time&&current_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);
@@ -131,7 +132,9 @@
#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)
{
@@ -174,13 +177,13 @@
        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);
@@ -188,7 +191,7 @@
//                {
//                    break;
//                }
                recnum[2]++;
                recnum[1]++;
                frame_seq_nb2 = rx_buffer[SEQUENCE_IDX];
                battary = rx_buffer[BATTARY_IDX];
                button = rx_buffer[BUTTON_IDX];
@@ -200,20 +203,18 @@
                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进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况
@@ -329,6 +330,7 @@
                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;
@@ -350,6 +352,8 @@
    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);
@@ -361,7 +365,15 @@
    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);
@@ -370,7 +382,7 @@
    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;
}
@@ -426,20 +438,20 @@
            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个小组中最近距离最大的小组,上传报文后切换到这个小组,因为上传报文会时间占用。
@@ -452,7 +464,7 @@
//                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;