【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 ); //将特征配置值写入到连接句柄,以实现通知的使能或禁用 }