WXK
2025-01-16 13e0fafc140c16539691d26afafaca417e7e2fbc
01_SDK/nimble/samples/bluetooth/ble_central/src/misc.c
@@ -98,6 +98,7 @@
                desc->sec_state.authenticated,
                desc->sec_state.bonded);
}
struct queue //结构体类型
{
uint8_t totalnum;//基站总数
@@ -109,34 +110,55 @@
uint8_t uwb_tongxun_flag[anchor_max_num];//与uwb通讯成功失败的标志位
uint16_t u16id[anchor_max_num]; /*u16ID*/    
}blequeue;
static char ble_anchor_name[20]="BeeLinker";
static char ble_anchor_name[20]="HFGD_XB";
uint16_t u16ble_id_fen[30];
uint8_t u16ble_id_fen1[50];
uint16_t rssidata;
uint8_t a;
void print_adv_fields(const struct ble_hs_adv_fields *fields,const struct ble_gap_disc_desc *disc)
{
    char s[BLE_HS_ADV_MAX_SZ];
    char mac[100];
    const uint8_t *u8p;
    int i;
    uint16_t ble_id=0;
    uint16_t    rssi=0;
    uint8_t repeat_flag=0;
    uint8_t ble_id_fen[2];
    if (fields->name != NULL) 
        {
        assert(fields->name_len < sizeof s - 1);
        memcpy(s, fields->name, fields->name_len);
        if(!memcmp(s,ble_anchor_name,fields->name_len))
        {
        s[fields->name_len] = '\0';
        printf("    name(complete)=%s\n",
//        memcpy(mac, fields->public_tgt_addr, fields->num_public_tgt_addrs);
//        s[fields->name_len] = '\0';
//        printf("    name(complete)=%s\n",
//                     s);
 /*测试模式
        rssidata=rssidata+abs(disc->rssi);
            a++;
            if(a==10)
            {
                printf("    name(complete)=%s\n",
                     s);
        printf("RSSI:%d\r\n",disc->rssi);
            ble_id_fen[0]=fields->svc_data_uuid16[1];
            ble_id_fen[1]=fields->svc_data_uuid16[0];
            u16ble_id_fen[0]=fields->svc_data_uuid16[1];
            u16ble_id_fen[1]=fields->svc_data_uuid16[0];
            printf("RSSI:%d\r\n",rssidata/10);
                a=0;
                rssidata=0;
            }
 */
//        printf("\n");
//            uart_data_send(&UART0_OBJ, mac,fields->num_public_tgt_addrs);
//            printf("\n");
//            memset(mac,0,100);
//            ble_id_fen[0]=fields->svc_data_uuid16[1];
//            ble_id_fen[1]=fields->svc_data_uuid16[0];
//            u16ble_id_fen[0]=fields->svc_data_uuid16[1];
//            u16ble_id_fen[1]=fields->svc_data_uuid16[0];
            
             memcpy(&ble_id,ble_id_fen,2);//从扫描的数据中拿出id
             memcpy(&ble_id,&disc->addr.val[0],2);//从扫描的数据中拿出id
             rssi=abs(disc->rssi);
          for(i=0;i<anchor_max_num;i++) //校验结构体中是否已经有id信息
          {
@@ -163,134 +185,5 @@
             }    
          }
      }
//        if (fields->uuids16 != NULL) {
//        printf("    uuids16(%scomplete)=",
//                    fields->uuids16_is_complete ? "" : "in");
//        for (i = 0; i < fields->num_uuids16; i++) {
//            print_uuid(&fields->uuids16[i].u);
//            printf(" ");
//        }
//        printf("\n");
//    }
//    if (fields->uuids32 != NULL) {
//        printf("    uuids32(%scomplete)=",
//                    fields->uuids32_is_complete ? "" : "in");
//        for (i = 0; i < fields->num_uuids32; i++) {
//            print_uuid(&fields->uuids32[i].u);
//            printf(" ");
//        }
//        printf("\n");
//    }
//    if (fields->uuids128 != NULL) {
//        printf("    uuids128(%scomplete)=",
//                    fields->uuids128_is_complete ? "" : "in");
//        for (i = 0; i < fields->num_uuids128; i++) {
//            print_uuid(&fields->uuids128[i].u);
//            printf(" ");
//        }
//        printf("\n");
//    }
//    if (fields->tx_pwr_lvl_is_present) {
//        printf("    tx_pwr_lvl=%d\n", fields->tx_pwr_lvl);
//    }
//    if (fields->slave_itvl_range != NULL) {
//        printf("    slave_itvl_range=");
//        print_bytes(fields->slave_itvl_range, BLE_HS_ADV_SLAVE_ITVL_RANGE_LEN);
//        printf("\n");
//    }
    if (fields->mfg_data != NULL) {
        if(fields->mfg_data_len==26-1&&fields->mfg_data[20]==0x4e&&fields->mfg_data[21]==0x64)
        {
//            s[fields->name_len] = '\0';
//            printf("    name(complete)=%s\n",
//                         s);
//            printf("RSSI:%d\r\n",disc->rssi);
            ble_id_fen[0]=fields->mfg_data[23];
            ble_id_fen[1]=fields->mfg_data[22];
            u16ble_id_fen[0]=fields->mfg_data[23];
            u16ble_id_fen[1]=fields->mfg_data[22];
            memcpy(u16ble_id_fen1, fields->mfg_data, fields->mfg_data_len);
             memcpy(&ble_id,ble_id_fen,2);//从扫描的数据中拿出id
             rssi=abs(disc->rssi);
          for(i=0;i<anchor_max_num;i++) //校验结构体中是否已经有id信息
          {
          if(ble_id==blequeue.id[i])
               {
                  repeat_flag=1;//已经有id信息
                        break;
               }
          }
             if(repeat_flag==1)
             {
             blequeue.id[i]=ble_id;
             blequeue.rssi[i]=rssi;
             blequeue.u16id[2*i]=u16ble_id_fen[0];
             blequeue.u16id[2*i+1]=u16ble_id_fen[1];
             }
             if(repeat_flag==0)
             {
             blequeue.id[blequeue.totalnum]=ble_id;//把id信息写入队列
             blequeue.u16id[2*blequeue.totalnum]=u16ble_id_fen[0];
             blequeue.u16id[2*blequeue.totalnum+1]=u16ble_id_fen[1];
             blequeue.rssi[blequeue.totalnum]=rssi;//把rssi信息写入队列
             blequeue.totalnum++;
             }
        }
//        printf("    svc_data_uuid16=");
//        print_bytes(fields->svc_data_uuid16, fields->svc_data_uuid16_len);
//        printf("\n");
    }
//    if (fields->public_tgt_addr != NULL) {
//        printf("    public_tgt_addr=");
//        u8p = fields->public_tgt_addr;
//        for (i = 0; i < fields->num_public_tgt_addrs; i++) {
//            printf("public_tgt_addr=%s ", addr_str(u8p));
//            u8p += BLE_HS_ADV_PUBLIC_TGT_ADDR_ENTRY_LEN;
//        }
//        printf("\n");
//    }
//    if (fields->appearance_is_present) {
//        printf("    appearance=0x%04x\n", fields->appearance);
//    }
//    if (fields->adv_itvl_is_present) {
//        printf("    adv_itvl=0x%04x\n", fields->adv_itvl);
//    }
//    if (fields->svc_data_uuid32 != NULL) {
//        printf("    svc_data_uuid32=");
//        print_bytes(fields->svc_data_uuid32, fields->svc_data_uuid32_len);
//        printf("\n");
//    }
//    if (fields->svc_data_uuid128 != NULL) {
//        printf("    svc_data_uuid128=");
//        print_bytes(fields->svc_data_uuid128, fields->svc_data_uuid128_len);
//        printf("\n");
//    }
//    if (fields->uri != NULL) {
//        printf("    uri=");
//        print_bytes(fields->uri, fields->uri_len);
//        printf("\n");
//    }
//    if (fields->mfg_data != NULL) {
//        printf("    mfg_data=");
//        print_bytes(fields->mfg_data, fields->mfg_data_len);
//        printf("\n");
//    }
//        }
        
//    }
}