参照甜甜的大香瓜的博客文章增加特征值6只成功一半

我参考甜甜的大香瓜的博客文章给沁恒579增加特征值6,只成功了一半。

icon_jpg.gif1.jpg

其中我感觉有两个地方可能有问题:

博客中第9步:

9、增加 char6 的发送通知数据的函数 1)定义 char6 的发送通知数据的函数(simpleGATTprofile.c 中)  //****************************************************************************** 

 //name: GUA_SimpleGATTprofile_Char6_Notify  

//introduce: 发送 char6 通道的数据  

//parameter: nGUA_ConnHandle: 连接句柄

// npGUA_Value: 要通知的数据,范围为 0~SIMPLEPROFILE_CHAR6,最多 20 个字节

// nGUA_Len: 要通知的数据的长度  

//return: none  

//author: 甜甜的大香瓜  

//email: 个人信息保护,已隐藏  

//QQ group 香瓜 BLE 之 CC2541(127442605) 

 //changetime: 2016.12.29  

//****************************************************************************** 

 void GUA_SimpleGATTprofile_Char6_Notify(uint16 nGUA_ConnHandle, uint8 *pGUA_Value, uint8  nGUA_Len) 

{   

    attHandleValueNoti_t stGUA_Noti;   

    uint16 nGUA_Return;   //读出 CCC 的值 

    nGUA_Return = GATTServApp_ReadCharCfg(nGUA_ConnHandle, simpleProfileChar6Config);   //判断是否打开通知开关,打开了则发送数据  

    if (nGUA_Return & GATT_CLIENT_CFG_NOTIFY)   

    {   

            //填充数据 

            stGUA_Noti.handle = simpleProfileAttrTbl[GUA_ATTRTBL_CHAR6_VALUE_IDX].handle;   

            stGUA_Noti.len = nGUA_Len;   

            osal_memcpy(stGUA_Noti.value, pGUA_Value, nGUA_Len); //发送数据 

            GATT_Notification(nGUA_ConnHandle, &stGUA_Noti, FALSE);   

    }  

注意,本函数仅适用于协议栈 1.3.2 和 1.4.0 版本。

1.4.2 版本的 attHandleValueNoti_t 结构体发生变化,需要多一条分配发送数据缓冲区的 代码。可以参考《CC2640 之自定义服务》的 notify 代码(不一定完全一样): 

 //分配发送数据缓冲区  stGUA_Noti.pValue = GATT_bm_alloc(nGUA_ConnHandle, ATT_HANDLE_VALUE_NOTI, GUAPROFILE_CHAR6_LEN, NULL);

我改的沁恒代码如下:

void GUA_SimpleGATTprofile_Char6_Notify(uint16 nGUA_ConnHandle, uint8 *pGUA_Value, uint8 nGUA_Len) 

 attHandleValueNoti_t stGUA_Noti; 

 uint16 nGUA_Return; 

 

 //读出 CCC 的值

 nGUA_Return = GATTServApp_ReadCharCfg(nGUA_ConnHandle, simpleProfileChar6Config); 

 

 //判断是否打开通知开关,打开了则发送数据 

 if (nGUA_Return & GATT_CLIENT_CFG_NOTIFY) 

 { 

 //填充数据

 stGUA_Noti.handle = simpleProfileAttrTbl[GUA_ATTRTBL_CHAR6_VALUE_IDX].handle; 

 stGUA_Noti.len = nGUA_Len; 


 //分配发送数据缓冲区 

stGUA_Noti.pValue = GATT_bm_alloc(nGUA_ConnHandle, ATT_HANDLE_VALUE_NOTI, SIMPLEPROFILE_CHAR6_LEN, NULL,0);


 tmos_memcpy(stGUA_Noti.pValue, pGUA_Value, nGUA_Len);

 //发送数据


if( simpleProfile_Notify( nGUA_ConnHandle, &stGUA_Noti ) != SUCCESS )

  {

    GATT_bm_free( (gattMsg_t *)&stGUA_Noti, ATT_HANDLE_VALUE_NOTI );

  }

 } 

}

另一个地方:

香瓜博客为:

2)修改应用层的回调函数(simpleBLEPeripheral.c 的 simpleProfileChangeCB 函数中)

static void simpleProfileChangeCB( uint8 paramID ) 

    uint16 nGUA_ConnHandle; 

    uint8 nbGUA_Char6[20] = {0};   

    switch( paramID ) { //char1 case SIMPLEPROFILE_CHAR1:

    以下从略。。。。。


//char6 

    case SIMPLEPROFILE_CHAR6:  

    { 

        //获取连接句柄 

        GAPRole_GetParameter(GAPROLE_CONNHANDLE, &nGUA_ConnHandle); 

        //读取 char6 的数值 

        SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6, &nbGUA_Char6);

        //发送数据   

        GUA_SimpleGATTprofile_Char6_Notify(nGUA_ConnHandle, nbGUA_Char6, 20); 

        break;   

    }

。。。。。。。。。。。。。。。

我改的沁恒代码:

//char6

case SIMPLEPROFILE_CHAR6: 

{

//获取连接句柄

GAPRole_GetParameter(paramID, &nGUA_ConnHandle);

//读取 char6 的数值

SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6, &nbGUA_Char6);

//发送数据 

GUA_SimpleGATTprofile_Char6_Notify(nGUA_ConnHandle, nbGUA_Char6, 20);

 

break; 

}

下面说说实际效果

icon_jpg.gif2.jpg

①红框为 app 主动读取到的数值,为默认的 1~20(hex 显示)。

②蓝框为 app 主动写入 cc2541 的数值。 

③紫框为cc2541接收到app的数值后,再将char6的数值通过通知发送出来,可见当前char6 的数值已被 app 改变。

上述3步,第一步已实现。

第二步可以主动写入,但是第三步没实现。

用CC2541试验,主动写入后,很快就能收到数据,不用手动读取。

用沁恒板子,主动写入后,收不到数据。需要手动读取。

请大神给看看,哪里出错了?谢谢

GAPRole_GetParameter(paramID, &nGUA_ConnHandle);

这一句貌似有问题

打不开通知开关。

我直接:

nGUA_ConnHandle=1;

就可以打开通使能了。

可是还是不能自动回复。


大佬帮我,谢谢


附件,你可以直接先烧录hex 文件,

使用的是128bit的uuid,可以write, 可以read,可以notify

write 会有打印,

read 没有做处理

notify 手机会有 提示,手机要先使能对应的cccd 才会notify,


编译的话丢到官网ch579 EVT 1.9里面对应的ble的exmaple 路径下编译,

使用的keil5的工程,

icon_rar.gifPeripheral_add_char6_use_128bit_uuid.zip



谢谢!我试试


写有了。

notify 手机会有 提示,手机要先使能对应的cccd 才会notify,

请问手机有什么提示?手机如何使能对应的ccid?具体如何操作?谢谢


看到了,那个123456789就是notify


搞好了


只有登录才能回复,可以选择微信账号登录