Tizen 启用特征通知
Tizen enable notifications for characteristic
您好,我正在尝试为 Gear S3 手表开发一个应用程序,它是 运行 Tizen 4.0.0.4
简而言之,问题是我不知道如何启用特性的通知。当我尝试通常的方法时,即将 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的权限是write notify)
我做了通常的事情(在连接等之后,我没有绑定,因为它似乎对设备来说不是必需的,除非 Tizen 的堆栈在绑定的引擎盖下用 blueZ 做了某种魔法......)。所以我或多或少是这样做的:
在连接回调中,在创建客户端后,我调用了 trio
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()
in bt_gatt_client_write_value() callback 我得到 write fail with err code -1
并在日志中出现来自 bluez
的上述错误
我必须承认我被卡住了...除了将 x01 x00 写入 CCCD 描述符之外,Tizen 中还有其他方法可以启用特征的通知吗?
也许我缺少一些先决条件或类似的东西。老实说,我只是按照 Sammys 页面上的教程进行操作,我认为它应该可以工作……就像那样……
只是提到使用 rpi0 和 python 它正在工作......
谢谢。
更新:
我忘了说,基本上,我可以写入其他特性,我还没有尝试设置它们的通知,但一般来说,现在唯一的问题是 CCCD 描述符。
权限已设置。
可以使用"bt_gatt_client_set_characteristic_value_changed_cb"功能吗?
即使您不在描述符中写入值 0x01,您也可以监视特性的变化值。
例子是,
bt_gatt_client_h 客户端 = NULL; // 全局变量(客户端句柄)
函数
{
字符 *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);
}
您好,我正在尝试为 Gear S3 手表开发一个应用程序,它是 运行 Tizen 4.0.0.4 简而言之,问题是我不知道如何启用特性的通知。当我尝试通常的方法时,即将 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的权限是write notify) 我做了通常的事情(在连接等之后,我没有绑定,因为它似乎对设备来说不是必需的,除非 Tizen 的堆栈在绑定的引擎盖下用 blueZ 做了某种魔法......)。所以我或多或少是这样做的: 在连接回调中,在创建客户端后,我调用了 trio
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()
in bt_gatt_client_write_value() callback 我得到 write fail with err code -1 并在日志中出现来自 bluez
的上述错误我必须承认我被卡住了...除了将 x01 x00 写入 CCCD 描述符之外,Tizen 中还有其他方法可以启用特征的通知吗? 也许我缺少一些先决条件或类似的东西。老实说,我只是按照 Sammys 页面上的教程进行操作,我认为它应该可以工作……就像那样…… 只是提到使用 rpi0 和 python 它正在工作...... 谢谢。 更新: 我忘了说,基本上,我可以写入其他特性,我还没有尝试设置它们的通知,但一般来说,现在唯一的问题是 CCCD 描述符。 权限已设置。
可以使用"bt_gatt_client_set_characteristic_value_changed_cb"功能吗? 即使您不在描述符中写入值 0x01,您也可以监视特性的变化值。
例子是,
bt_gatt_client_h 客户端 = NULL; // 全局变量(客户端句柄)
函数 { 字符 *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);
}