hshiping
hshiping
這家夥很懶,什麼也沒寫!

注冊於 2年前

回答
6
文章
0
關注者
1

問題中所提的btapp,即是使用傳統藍牙的庫,傳統藍牙的庫也是支持BLE的。使用測試如下:
1.使用的SDK是V1.0.4版本--wm_sdk_w800_20211203.rar。
2.換SDK的藍牙庫:
a.在lib目錄下需要把libbtcontroller_br_edr.a和libbthost_br_edr.a改為libbtcontroller.a(替換

掉舊的庫)和libbthost.a

b.toolsw800.config屏蔽這行CONFIG_W800_USE_NIMBLE---#CONFIG_W800_USE_NIMBLE=y
c.ldw800gcc_csky.ld連接文件加大代碼區---LENGTH = 0x120000改為0x140000
d.includewm_config.h配置使用傳統BT庫同時支持BLE:

#define TLS_CONFIG_BR_EDR    CFG_ON
#define TLS_CONFIG_BLE      CFG_ON

e.demowm_demo.h把DEMO_CONSOLE宏打開DEMO_ON,把藍牙DEMO打開DEMO_BT宏

#define DEMO_CONSOLE                DEMO_ON
#define DEMO_BT                     (DEMO_ON && DEMO_CONSOLE)

f.修改以上地方後,先編譯庫---make lib,再make.

代碼修改參考截圖:
image.png

image.png

image.png

3.生成固件後燒錄測試log如下:
a.複位後,使用串口控制臺指令測試發廣播:循序執行截圖中的兩條命令---成功後手機nrf connectAPP能搜索到設備
image.png

image.png

b.複位後,使用串口控制臺指令測試SERVER設備:循序執行截圖中的兩條命令---成功後手機APP能連上SERVER設備,發送通訊數據。
image.png

image.png

image.png

1.這個ble_gap_evt_cb回調函數的參考ble_gap_event *event,是一個union共同體的結構變量,對應不同事件,對應的內容定義是不同的解析。event->disc.rssi 只有BLE_GAP_EVENT_DISC事件才有效。

2.t-ble-server-on在W800作為SERVER slave角色時,ble_gap_evt_cb回調沒有也不會有BLE_GAP_EVENT_DISC事件來到這個回調的。

3.參考下代碼的解釋說明,如下
image.png

1.參考最新的SDK---W800_SDK_v1.00.08
2.截圖中紅框是W800的READ 屬性UUID的回調接口,在這裡給BLE棧下層傳數據。image.png

3.這是配置回調入口的結構體:
image.png

希望能解決你的問題。

請參考這個DEMO wm_sdk_w800_20211203srcappbtappwm_ble_server_api_demo.c

原理是BLE協議棧的底層會通過初始化注冊的回調接口,返回這個連接的句柄,應用層保存後,使用這個全局參數來執行其他API。
image.png

1.現在W800的BLE 配置的是256,參考這裡syscfg.h #define MYNEWT_VAL_BLE_ATT_PREFERRED_MTU (256)

2.如果想要在沒交換MTU前打印值,可以在這個BLE_GAP_EVENT_CONNECT處理時,調用uint16_t ble_att_preferred_mtu(void)獲取。

image.png

希望以上回答能解決你的問題。

發布
問題