GATTServApp_ProcessCharCfg()无法输出
各位:
我修改了 uart2ble这个例程,想实现一个数据的回环,修改了SPPBLEServer的部分代码。
通过设置断点观察,可以判断pMsg里面的数据是正确的;
但是客户端(手机)没法接收到数据,使用USB dongle 观察,也确认没有数据;能观察到用于保持连接的空报文。
相同的硬件,烧写 sensortag 可以获取到相应的特征值,因此我觉得硬件应该没有问题。
请问各位有没有遇到类似的问题,麻烦帮忙解答一下
case SBP_UART_DATA_EVT:
{
//Send the notification
retVal = SerialPortService_SetParameter(SERIALPORTSERVICE_CHAR_DATA, pMsg->length, pMsg->data);
if(retVal != SUCCESS)
{
}
/*SerialPortService_SetParameter定义*/
bStatus_t SerialPortService_SetParameter( uint8 param, uint8 len, void *value )
{
bStatus_t ret = SUCCESS;
switch ( param )
{
case SERIALPORTSERVICE_CHAR_DATA:
if( len <= SERIALPORTSERVICE_DATA_LEN )
{
memset(SerialPortServiceData, 0, SERIALPORTSERVICE_DATA_LEN);
VOID memcpy( SerialPortServiceData, value, len );
charDataValueLen = len;
// See if Notification has been enabled
ret = GATTServApp_ProcessCharCfg( SerialPortServiceDataConfig, SerialPortServiceData, FALSE,
SerialPortServiceAttrTbl, GATT_NUM_ATTRS( SerialPortServiceAttrTbl ),
INVALID_TASK_ID, SerialPortService_ReadAttrCB );
}
else
{
ret = bleInvalidRange;
}
break;
考虑到移植的简单易用,ble stack使用的是 2.1版本
可否在最新版上再试一下?
我现在的手机是蓝牙4.0 的,请问blestack2.2 是否在支持上会有问题。
相同的程序在2.2 环境可以找到设备,但是没法连接
定位发现 问题原因是 TI在提供的 主从方案中,设计的方案是server的notification属性是由 client里面的控制字来完成设置的,如果不是与ti对应的client来通信,notification功能应该是没有使能的。
After the client device scans and connects, the client device discovers the serial port service and
configures it to enable notifications of the serial port service data characteristic. The client device may also
discover the device information service for the manufacturing and serial numbers
初始化的代码中,定义了如下一段:如果设置AUTO_NOTIFICATION == TRUE,设备重启以后的第一次连接是可以正常 notification的。
但是二次连接以后还是会出现无法notification的问题。还需要在进一步挖掘一下
#if (defined(AUTO_NOTIFICATION) && (AUTO_NOTIFICATION == TRUE))
//Hardcode to enable notification in GATT table
SerialPortServiceDataConfig[0].connHandle = 0x0000;
SerialPortServiceDataConfig[0].value = 0x01;
#endif