你好. 我这边在看bass_task.c源码时, 发现他gattc_write_cmd_ind_handler函数里要去操作notify的东西. (BAS_IDX_BATT_LVL_NTF_CFG) 这个使能Notify是由手机端传来的, 但是 我这边测试时, 发现在上层已经使能Nofity的时候, 他不会回调gattc_write_cmd_ind_handler函数. 我一开始以为是GATTC_WRITE_CMD_IND这个命令的过, 我换成了其他的WRITE CMD 也是不行. 这个是怎么回事呢? GATTC_WRITE_CMD 和 GATTC_WRITE_CMD_IND 有啥差别的呢?
另外, sdk好像也无法获取read 回调函数. 这个是因为sdk不支持read的吗?
这个BAS_IDX_BATT_LVL_NTF_CFG是用于使能notify的配置属性 --- 我单独请教你这个吧.
1. 在sdk5.0的文件bass_task.c的343行的gattc_write_cmd_ind_handler, 从代码可以看出, 他必须要对BAS_IDX_BATT_LVL_NTF_CFG进行写, 才能使 bass_env.features[i] |= BASS_FLAG_NTF_CFG_BIT; 然后在电池定时轮询中, 也是在bass_task.c的276行的bass_batt_level_upd_req_handler中, 他会去" Check if notifications are enabled" , 代码如下: // Check if notifications are enabled if((bass_env.features[param->bas_instance] & BASS_FLAG_NTF_CFG_BIT) == BASS_FLAG_NTF_CFG_BIT) { // Send notification through GATT prf_server_send_event((prf_env_struct *)&bass_env, false, bass_env.shdl[param->bas_instance] + BAS_IDX_BATT_LVL_VAL); }
2. 所以他必须要收到 GATTC_WRITE_CMD_IND, 并且是对BAS_IDX_BATT_LVL_NTF_CFG的写. 我就是在测试的时候, 发现他无法收到GATTC_WRITE_CMD_IND. 测试方式是: 用TI Sensortag apk在android机上测试, 和用LightBlue app在苹果机上测试, 但是他都没有收到GATTC_WRITE_CMD_IND.