unsigned char type, nwk_addr group_addr, unsigned char dst_ep,
zb_zdo_bind_rsp cb, void *user_data)
{
+ int i;
int sub_id, to;
zbl_req_cb_s *container;
+
+ int result = ZIGBEE_ERROR_NONE;
+ GError *dbus_err = NULL;
+ GVariant *variant = NULL;
+
GVariantBuilder *src_addr64_builder = NULL;
GVariant* src_addr64_variant = NULL;
GVariantBuilder *dst_addr64_builder = NULL;
container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
container->userdata = user_data;
- src_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ src_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)"));
if (src_addr64) {
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[7]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[6]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[5]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[4]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[3]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[2]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[1]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[0]);
+ for (i = sizeof(ieee_addr) - 1 ; i >= 0; i--)
+ g_variant_builder_add(src_addr64_builder, "(y)", src_addr64[i]);
}
src_addr64_variant = g_variant_builder_end(src_addr64_builder);
g_variant_builder_unref(src_addr64_builder);
- dst_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ dst_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)"));
if (dst_addr64) {
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[7]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[6]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[5]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[4]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[3]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[2]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[1]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[0]);
+ for (i = sizeof(ieee_addr) - 1 ; i >= 0; i--)
+ g_variant_builder_add(dst_addr64_builder, "(y)", dst_addr64[i]);
}
dst_addr64_variant = g_variant_builder_end(dst_addr64_builder);
g_variant_builder_unref(dst_addr64_builder);
- g_dbus_proxy_call(zdo_bind_proxy, "bind_req",
- g_variant_new("(q@ayyq@ayyqy)", dst_addr16, src_addr64_variant, src_ep,
+ variant = g_dbus_proxy_call_sync(zdo_bind_proxy, "bind_req",
+ g_variant_new("(q@a(y)yq@a(y)yqy)", dst_addr16, src_addr64_variant, src_ep,
cluster_id, dst_addr64_variant, type, group_addr, dst_ep),
- G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+ G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
- return ZIGBEE_ERROR_NONE;
+ if (variant) {
+ g_variant_get(variant, "(i)", &result);
+ DBG("ret = [0x%x]", result);
+ g_variant_unref(variant);
+ } else {
+ ERR("Failed to get device_annce [%s]", dbus_err->message);
+ g_error_free(dbus_err);
+ return ZIGBEE_ERROR_IO_ERROR;
+ }
+
+ return result;
}
int zbl_unbind_req(nwk_addr dst_addr16,
ieee_addr dst_addr64, unsigned char type, nwk_addr group_addr,
unsigned char dst_ep, zb_zdo_unbind_rsp cb, void *user_data)
{
+ int i;
int sub_id, to;
zbl_req_cb_s *container;
+
+ int result = ZIGBEE_ERROR_NONE;
+ GError *dbus_err = NULL;
+ GVariant *variant = NULL;
+
GVariantBuilder *src_addr64_builder = NULL;
GVariant* src_addr64_variant = NULL;
GVariantBuilder *dst_addr64_builder = NULL;
container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
container->userdata = user_data;
- src_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ src_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)"));
if (src_addr64) {
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[7]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[6]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[5]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[4]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[3]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[2]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[1]);
- g_variant_builder_add(src_addr64_builder, "y", src_addr64[0]);
+ for (i = sizeof(ieee_addr) - 1 ; i >= 0; i--)
+ g_variant_builder_add(src_addr64_builder, "(y)", src_addr64[i]);
}
src_addr64_variant = g_variant_builder_end(src_addr64_builder);
g_variant_builder_unref(src_addr64_builder);
- dst_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ dst_addr64_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)"));
if (dst_addr64) {
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[7]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[6]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[5]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[4]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[3]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[2]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[1]);
- g_variant_builder_add(dst_addr64_builder, "y", dst_addr64[0]);
+ for (i = sizeof(ieee_addr) - 1 ; i >= 0; i--)
+ g_variant_builder_add(dst_addr64_builder, "(y)", dst_addr64[i]);
}
dst_addr64_variant = g_variant_builder_end(dst_addr64_builder);
g_variant_builder_unref(dst_addr64_builder);
- g_dbus_proxy_call(zdo_bind_proxy, "unbind_req",
- g_variant_new("(q@ayyq@ayyqy)", dst_addr16, src_addr64_variant, src_ep,
+ variant = g_dbus_proxy_call_sync(zdo_bind_proxy, "unbind_req",
+ g_variant_new("(q@a(y)yq@a(y)yqy)", dst_addr16, src_addr64_variant, src_ep,
cluster_id, dst_addr64_variant, type, group_addr, dst_ep),
- G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+ G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
+ if (variant) {
+ g_variant_get(variant, "(i)", &result);
+ DBG("ret = [0x%x]", result);
+ g_variant_unref(variant);
+ } else {
+ ERR("Failed to get device_annce [%s]", dbus_err->message);
+ g_error_free(dbus_err);
+ return ZIGBEE_ERROR_IO_ERROR;
+ }
- return ZIGBEE_ERROR_NONE;
+ return result;
}
int zbl_mgmt_nwk_disc_req(nwk_addr addr16, unsigned int scan_channels,
ERR("Invalid timeout (%d)", timeout);
return ZIGBEE_BROADCAST_TIMEOUT;
}
- return timeout/1000;
+ return timeout;
}