TI中文支持网
TI专业的中文技术问题搜集分享网站

关于仿写通知特征值simpleGATTprofile中Characteristic4的问题

有两个问题:

1. notify的数据长度最长有多少?是20字节么?在程序里体现了么?

2. Characteristic 4里是单字节的notify,如果改成多字节的,只要把和数据相关的地方参照characterristic5(多字节的特征)来改就可以了么?具体有哪些呢?

……小白跪谢!

Michael Cao:

我修改的地方有:

1. simpleBLEPeripheral.c 中 void SimpleBLEPeripheral_Init( uint8 task_id )里

    初始化:uint8 charValue4[SIMPLEPROFILE_CHAR4_LEN] = { 1, 2, 3, 4, 5};

2. simpleGATTprofile.h 中定义#define SIMPLEPROFILE_CHAR4_LEN           5

3. simpleGATTprofile.c 中:

3.1 定义 static uint8 simpleProfileChar4[SIMPLEPROFILE_CHAR4_LEN] = { 1, 2, 3, 4, 5};

3.2 属性表里 把simpleProfileChar4 之前的&去掉了

// Characteristic Value 4 { { ATT_BT_UUID_SIZE, simpleProfilechar4UUID }, 0, 0, simpleProfileChar4 },

3.3 在bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )里修改

case SIMPLEPROFILE_CHAR4: if ( len == SIMPLEPROFILE_CHAR4_LEN ) { VOID osal_memcpy( simpleProfileChar4, value, SIMPLEPROFILE_CHAR4_LEN ); // See if Notification has been enabled GATTServApp_ProcessCharCfg( simpleProfileChar4Config, simpleProfileChar4, FALSE, simpleProfileAttrTbl, GATT_NUM_ATTRS( simpleProfileAttrTbl ), INVALID_TASK_ID ); }3.4 在bStatus_t SimpleProfile_GetParameter( uint8 param, void *value )里修改:

case SIMPLEPROFILE_CHAR4: VOID osal_memcpy( value, simpleProfileChar4, SIMPLEPROFILE_CHAR4_LEN ); break;

3.5 在 static uint8 simpleProfile_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr, uint8 *pValue, uint8 *pLen, uint16 offset, uint8 maxLen )里修改:

case SIMPLEPROFILE_CHAR4_UUID: *pLen = SIMPLEPROFILE_CHAR4_LEN; VOID osal_memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR4_LEN );

结果是手持端开始notification以后没反应,修改的地方漏了什么么?

Michael Cao:

回复 Yan:

1. 谢谢~

2. 我改了以上的地方,编译通过但是手持端没有数据发出来,不知道漏改了什么……

li kun1:

回复 Yan:

Yan

      你说notify最大可以是20个字节,为何我把这样定义

       SIMPLEPROFILE_CHAR1_LEN           20

       用btool调试会出现 ATTR_NOT_FOUND

而定义为    SIMPLEPROFILE_CHAR1_LEN          19   

就正常。能否解释一下,困扰了两天了。

赞(0)
未经允许不得转载:TI中文支持网 » 关于仿写通知特征值simpleGATTprofile中Characteristic4的问题
分享到: 更多 (0)