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

希望以上回答能解决你的问题.

发布
问题