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

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

发布
问题