【WCH蓝牙系列芯片】-基于CH582开发板—从机主动使能通知(notify)

-------------------------------------------------------------------------------------------------------------------------------------

在EVT例程BLE-UART蓝牙透传功能中,通过串口发送数据至蓝牙时,每次需要开启notify,才能接受新的数据。

当串口向蓝牙发送数据后,再打开notify,APP并不会读取到任何数据。
针对这个问题,可以进行改变。一般都是主机使能通知,再开始接受数据。

现在可以添加一个函数,让从机自己主动使能通知(notify),这样串口发送数据至蓝牙就可以直接读取数据。

在BLE-UART例程中,在ble_uart_service.c中添加使能通知的函数:

//定义使能通知函数(connection_handle连接句柄,表示要进行操作的连接)
uint8 enable_notify(uint16 connection_handle, uint8 enable)
{
    uint16 cccd = 0;   //定义一个变量cccd,特征的配置值
    //判断是否使能通知
    if(enable)   //使能
    {
        cccd |= GATT_CLIENT_CFG_NOTIFY;  //将cccd置为使能通知的值
    }

    else
    {
        cccd &= ~GATT_CLIENT_CFG_NOTIFY;  //不使能,将cccd置为禁止通知的值
    }
    return GATTServApp_WriteCharCfg( connection_handle, ble_uart_TxCCCD, cccd );  //将特征配置值写入到连接句柄,以实现通知的使能或禁用
}

 在ble_uart_service.h中声明这个函数,extern uint8 enable_notify(uint16 connection_handle,uint8 enable);

 在连接后此函数(Peripheral_LinkEstablished)调用使能通知函数,就可以了。

此时,当串口发送数据给蓝牙时,不需要手动开启通知,直接就可以读取数据。

 

二、在蓝牙的从机程序中进行添加主动使能notify的函数,在从机程序的gattprofile.c文件中添加。

//定义使能通知函数(connection_handle连接句柄,表示要进行操作的连接)
uint8_t enable_notify(uint16_t connection_handle, uint8_t enable)
{
    uint16_t cccd = 0;   //定义一个变量cccd,特征的配置值
    //判断是否使能通知
    if(enable)   //使能
    {
        cccd |= GATT_CLIENT_CFG_NOTIFY;  //将cccd置为使能通知的值
    }

    else
    {
        cccd &= ~GATT_CLIENT_CFG_NOTIFY;  //不使能,将cccd置为禁止通知的值
    }
    return GATTServApp_WriteCharCfg( connection_handle, simpleProfileChar4Config, cccd );  //将特征配置值写入到连接句柄,以实现通知的使能或禁用
}

 

 

posted on 2023-10-12 11:39  凡仕  阅读(438)  评论(0编辑  收藏  举报