From 78e84fcf264afd731cd66c807d9fcb690fe12126 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期一, 16 十二月 2024 10:08:16 +0800
Subject: [PATCH] 兼容真趣的基站

---
 01_SDK/nimble/samples/bluetooth/ble_central/src/misc.c |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 51 insertions(+), 8 deletions(-)

diff --git a/01_SDK/nimble/samples/bluetooth/ble_central/src/misc.c b/01_SDK/nimble/samples/bluetooth/ble_central/src/misc.c
index f8f1b9c..91a9d47 100644
--- a/01_SDK/nimble/samples/bluetooth/ble_central/src/misc.c
+++ b/01_SDK/nimble/samples/bluetooth/ble_central/src/misc.c
@@ -110,7 +110,8 @@
 uint16_t u16id[anchor_max_num]; /*u16ID*/    
 }blequeue;
 static char ble_anchor_name[20]="BeeLinker";
-uint16_t u16ble_id_fen[2];
+uint16_t u16ble_id_fen[30];
+uint8_t u16ble_id_fen1[50];
 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];
@@ -120,7 +121,8 @@
     uint16_t    rssi=0;
     uint8_t repeat_flag=0;
     uint8_t ble_id_fen[2];
-    if (fields->name != NULL) {
+    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))
@@ -159,6 +161,8 @@
              blequeue.rssi[blequeue.totalnum]=rssi;//把rssi信息写入队列
              blequeue.totalnum++;
              }    
+          }
+      }
 //        if (fields->uuids16 != NULL) {
 //        printf("    uuids16(%scomplete)=",
 //                    fields->uuids16_is_complete ? "" : "in");
@@ -200,10 +204,49 @@
 //        printf("\n");
 //    }
 
-    if (fields->svc_data_uuid16 != NULL) {
-        printf("    svc_data_uuid16=");
-        print_bytes(fields->svc_data_uuid16, fields->svc_data_uuid16_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) {
@@ -247,7 +290,7 @@
 //        print_bytes(fields->mfg_data, fields->mfg_data_len);
 //        printf("\n");
 //    }
-        }
+//        }
         
-    }
+//    }
 }

--
Gitblit v1.9.3