Wireless Uart 例程修改说明

  • 概述

在使用 NXP 的 BLE 芯片时,客户经常会有一些提问:我们应该使用那一个例程来进行开发?我们要怎么样修改代码?能否用其他的 APP 来进行通信?在针对这些问题,我们今天就来解析一个比较常用的例程—— Wireless Uart。

  • 例程分析

首先,我们先对该例程的功能进行分析,Wireless Uart 顾名思义就是无线串口的功能,设备接收串口的数据然后通过 BLE 传输到另外一台设备中。这个例程功能符合现在市面上很多需要到功能要求。主机与从机是通过两个 profile 来进行通讯的,具体数据流程如下图所示,

可以看到,在这个例程中是有两个 Profile 来进行通讯的,主机与从机分别向对方的 Profile 进行写数据的操作。这种方式就需要到主机跟从机都有对应的 Profile 以供对方进行写数据的操作。这个方式与我们另外的数据流程有所不同,如下图所示:

可以看到,这种数据流程只有一个 Profile 在进行通讯,主机也是通过写数据的操作,但是从机这边就通过本身的 Profile Notify 操作通知主机数据。这种方式就不需要主机有对应的 Profile,只需要在从机的 Profile处有两个特征值来进行上诉的数据收发即可。由于这个例程的数据流程不同,导致在初次使用 Wireless Uart 时会发现只能与原厂的 APP 进行通讯 demo,无法与市面上其他的 APP 进行连接通讯。所以针对这个情况,我们需要对例程进行一定的修改。

  • 修改内容

在修改方向中主要有两种方向:

  1. 通过修改 APP,添加符合例程需求的 Profile。例如我们在使用其他 APP 时,可以添加如下的 Profile。

    在添加了这个自定义的 Service 之后就能与设备连接并且进行数据收发,这种改动一般会比较少一点,但是需要修改 APP,而且还要用到两个 Profile。所以一般可以采取第二种修改方式。

  2. 直接修改例程中代码,将数据流程修改为第二种。
    1. 在例程中,我们先找到连接后的回调函数

      找到对应的连接事件

      可以看到在连接之后,设备会去设置对应的状态机事件

      可以看到在连接之后,设备回去寻找主机的写数据 Profile。在对应回调函数BleApp_ServiceDiscoveryCallback中看到如果没有找到对应的 profile 的话,就会进入状态机中执行断连的操作

      就是因为这个搜索服务以及断连的操作,导致很多 APP 在连接设备时就会出现连接不上的情况。我们可以通过修改状态机的逻辑,屏蔽掉状态机中断连的代码,或者直接屏蔽掉搜索服务的函数。

    2. 我们可以看到在接收完串口数据后处理函数为 BleApp_FlushUartStream ,在里面我们可以在添加自动的处理逻辑,其中可以看到发送函数 BleApp_SendUartStream,如果我们用第二种数据流程的话,需要将里面的函数进行替换

      需要替换成 GattServer_SendInstantValueNotification具体函数可以参考之前关于 HID 的博文。

    3. 相同地,如果使用第二种数据流程的话就需要在 h 文件中对 Profile 进行修改,添加一个用 notify 的特征值。具体修改方式可以参考之前关于 HID 的博文,或者 QPPS 例程。

      下图为 QPPS 例程

      • 结语

      在本文中我们对 Wireless Uart 例程进行了流程分析以及一些通用的修改内容。通过本文能够进一步加深大家对 NXP BLE 例程的理解。此外针对其他的例程,我们可以通过举一反三地对其流程进行修改从而达到我们想要功能。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论