嗨,我正在尝试为运行Tizen 4.0.0.4的Gear S3手表开发一个应用程序 简短地说,问题就像我不知道如何启用特征通知一样。当我尝试通常的方法时,即将x01 x00写入0x2902描述符 我得到-1错误,并且在日志中得到:
bt-gatt-client.c: __bluetooth_get_att_error_code(901) > Error : GDBus.Error:org.bluez.Error.NotPermitted: Write not permitted [/dev_4C_65_A8_DC_A1_F7/service002d/char002e/desc0030]
我试图在blueZ中查看一下,以了解出了什么问题,但是我才刚开始。
svc,char和desc看起来像这样(它们是小米的Temp&Hum传感器中的自定义字符):
SRVC:(1/7) uuid: [0000fe95-0000-1000-8000-00805f9b34fb]
CHAR: (1/6) uuid: [00000001-0000-1000-8000-00805f9b34fb]
DESC: (1/1) uuid: [00002902-0000-1000-8000-00805f9b34fb]
(CHAR的权限为写通知) 我做了通常的工作(在连接等等之后,我没有进行绑定,因为它似乎对于设备来说不是必需的,除非Tizen的堆栈在进行绑定的引擎盖下用blueZ做某种魔术……)。所以我或多或少这样做: 在connect回调中,创建客户端后,我称呼三重奏
bt_gatt_client_get_service()
bt_gatt_service_get_characteristic()
bt_gatt_characteristic_get_descriptor()
然后使用
将0x01 0x00的值设置为char数组bt_gatt_set_value()
然后最终致电
bt_gatt_client_write_value()
在bt_gatt_client_write_value()回调中,我收到写入失败,错误代码为 -1 并在日志中从 bluez
我必须承认我被卡住了……除了将x01 x00写入CCCD描述符外,Tizen中还有其他方法可以启用特征通知吗? 也许我缺少一些前提条件或类似的东西。老实说,我只是遵循了Sammys页面上的教程,因此我认为它应该可以工作…… 仅提及使用rpi0和python即可正常工作... 谢谢。 更新: 我忘了提一下,基本上,我可以写其他我没有尝试设置它们的通知的特性,但是总的来说,唯一的问题是现在的CCCD描述符。 权限已设置。
答案 0 :(得分:2)
可以使用“ bt_gatt_client_set_characteristic_value_changed_cb”功能吗? 即使您没有在描述符中写入值0x01,也可以监视已更改的值以用于特征。
示例是
bt_gatt_client_h客户端= NULL; // grobal变量(客户端句柄)
功能 { char * svc_uuid = NULL; 在此处输入代码
char *chr_uuid = NULL;
bt_gatt_h svc = NULL;
bt_gatt_h chr = NULL;
svc_uuid = g_test_param.params[0];
chr_uuid = g_test_param.params[1];
ret = bt_gatt_client_get_service(client, svc_uuid, &svc);
if (ret != BT_ERROR_NONE) {
TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
__bt_free_test_param(&g_test_param);
break;
}
ret = bt_gatt_service_get_characteristic(svc,
chr_uuid, &chr);
if (ret != BT_ERROR_NONE) {
TC_PRT("bt_gatt_service_get_characteristic is failed : %d", ret);
__bt_free_test_param(&g_test_param);
break;
}
ret = bt_gatt_client_set_characteristic_value_changed_cb(chr,
__bt_gatt_client_value_changed_cb, NULL);
if (ret != BT_ERROR_NONE)
TC_PRT("bt_gatt_client_set_characteristic_value_changed_cb is failed : %d", ret);
}