#include "zbl-dbus.h"
#include "zigbee.h"
-API int zb_aps_send(zigbee_h handle, nwk_addr addr16,
- unsigned char aps_frame_ctl, unsigned char src_ep, unsigned char dst_ep,
- unsigned short cluster_id, unsigned short profile_id,
- unsigned char zcl_frame_ctl, unsigned short mfg_code,
- unsigned short payload_len, unsigned char *payload,
+API int zb_aps_send(zigbee_h handle, nwk_addr addr16, unsigned char aps_frame_ctl,
+ unsigned char src_ep, unsigned char dst_ep, unsigned short cluster_id,
+ unsigned short profile_id, unsigned char zcl_frame_ctl, unsigned short mfg_code,
+ unsigned char cmd_id, unsigned short payload_len, unsigned char *payload,
zb_aps_send_rsp cb, void *user_data)
{
int ret = ZIGBEE_ERROR_NONE;
RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
- ret = zbl_aps_send(addr16, aps_frame_ctl, src_ep, dst_ep,
- cluster_id, profile_id, zcl_frame_ctl, mfg_code,
- payload_len, payload, cb, user_data);
+ ret = zbl_aps_send(addr16, aps_frame_ctl, src_ep, dst_ep, cluster_id, profile_id,
+ zcl_frame_ctl, mfg_code, cmd_id, payload_len, payload, cb, user_data);
DBG("zbl_aps_send()=0x%X", ret);
return ret;
}
-API int zb_zcl_send(zigbee_h handle, nwk_addr addr16,
- unsigned char src_ep, unsigned char dst_ep,
- unsigned short cluster_id, unsigned char zcl_frame_ctl, unsigned char cmd,
- unsigned short payload_len, unsigned char *payload,
+API int zb_zcl_send(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
+ unsigned char dst_ep, unsigned short cluster_id, unsigned char zcl_frame_ctl,
+ unsigned char cmd, unsigned short payload_len, unsigned char *payload,
zb_zcl_send_rsp cb, void *user_data)
{
int ret = ZIGBEE_ERROR_NONE;
unsigned short addr16;
unsigned char src_ep;
unsigned char dst_ep;
- unsigned char cluster_id;
- unsigned char profile_id;
- unsigned char *payload = NULL;
+ unsigned short cluster_id;
+ unsigned short profile_id;
unsigned short payload_len = 0;
+ unsigned char *payload = NULL;
+
unsigned char value;
GVariantIter *payload_iter = NULL;
int i = 0;
- g_variant_get(parameters, "(qyyqqayq)", &addr16, &src_ep, &dst_ep,
- &cluster_id, &profile_id, &payload_iter, &payload_len);
+ g_variant_get(parameters, "(qyyqqqa(y))", &addr16, &src_ep, &dst_ep,
+ &cluster_id, &profile_id, &payload_len, &payload_iter);
if (payload_len > 0) {
- payload = calloc(payload_len, sizeof(unsigned char));
- while (g_variant_iter_loop(payload_iter, "y", &value)) {
+ payload = calloc(payload_len+1, sizeof(unsigned char));
+ while (g_variant_iter_loop(payload_iter, "(y)", &value)) {
payload[i++] = value;
}
if (NULL != payload_iter)
unsigned short addr16;
unsigned char src_ep;
unsigned char dst_ep;
- unsigned char cluster_id;
- unsigned char profile_id;
- unsigned char *payload = NULL;
+ unsigned short cluster_id;
+ unsigned short profile_id;
unsigned short payload_len = 0;
+ unsigned char *payload = NULL;
+
unsigned char value;
GVariantIter *payload_iter = NULL;
int i = 0;
- g_variant_get(parameters, "(qyyqqayq)", &addr16, &src_ep, &dst_ep,
- &cluster_id, &profile_id, &payload_iter, &payload_len);
+ g_variant_get(parameters, "(qyyqqqa(y))", &addr16, &src_ep, &dst_ep,
+ &cluster_id, &profile_id, &payload_len, &payload_iter);
if (payload_len > 0) {
- payload = calloc(payload_len, sizeof(unsigned char));
- while (g_variant_iter_loop(payload_iter, "y", &value)) {
+ payload = calloc(payload_len + 1, sizeof(unsigned char));
+ while (g_variant_iter_loop(payload_iter, "(y)", &value)) {
payload[i++] = value;
}
if (NULL != payload_iter)
GVariantIter *payload_iter = NULL;
int i = 0;
- g_variant_get(parameters, "(ayq)", &payload_iter, &length);
+ g_variant_get(parameters, "(qa(y))", &length, &payload_iter);
if (length > 0) {
data = calloc(length, sizeof(unsigned char));
- while (g_variant_iter_loop(payload_iter, "y", &value)) {
+ while (g_variant_iter_loop(payload_iter, "(y)", &value)) {
data[i++] = value;
}
if (NULL != payload_iter)
return ZIGBEE_ERROR_NONE;
}
-int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl,
- unsigned char src_ep, unsigned char dst_ep,
- unsigned short cluster_id, unsigned short profile_id,
- unsigned char zcl_frame_ctl, unsigned short mfg_code,
- unsigned short payload_len, unsigned char *payload,
- zb_aps_send_rsp cb, void *user_data)
+int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, unsigned char src_ep,
+ unsigned char dst_ep, unsigned short cluster_id, unsigned short profile_id,
+ unsigned char zcl_frame_ctl, unsigned short mfg_code, unsigned char cmd_id,
+ unsigned short payload_len, unsigned char *payload, zb_aps_send_rsp cb, void *user_data)
{
int sub_id, to, i;
zbl_req_cb_s *container;
+ int result = ZIGBEE_ERROR_NONE;
+ GVariant *variant = NULL;
+ GError *dbus_err = NULL;
+
GVariantBuilder *payload_builder = NULL;
GVariant *payload_variant = NULL;
container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
container->userdata = user_data;
- payload_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ payload_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)"));
if (payload_len > 0) {
for (i = payload_len - 1; i >= 0 ; i--) {
- g_variant_builder_add(payload_builder, "y", payload[i]);
+ g_variant_builder_add(payload_builder, "(y)", payload[i]);
}
}
payload_variant = g_variant_builder_end(payload_builder);
g_variant_builder_unref(payload_builder);
- g_dbus_proxy_call(custom_gproxy, "aps_send",
- g_variant_new("(qyyyqqyq@ay)", addr16, aps_frame_ctl, src_ep, dst_ep, cluster_id,
- profile_id, zcl_frame_ctl, mfg_code, payload_variant),
- G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+ variant = g_dbus_proxy_call_sync(custom_gproxy, "aps_send",
+ g_variant_new("(qyyyqqyqyq@a(y))", addr16, aps_frame_ctl, src_ep, dst_ep, cluster_id,
+ profile_id, zcl_frame_ctl, mfg_code, cmd_id, payload_len, payload_variant),
+ 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 run 'aps_send' [%s]", dbus_err->message);
+ g_error_free(dbus_err);
+ return ZIGBEE_ERROR_IO_ERROR;
+ }
+
+ return result;
}
int zbl_zcl_send(nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
int sub_id, to, i;
zbl_req_cb_s *container;
+ int result = ZIGBEE_ERROR_NONE;
+ GVariant *variant = NULL;
+ GError *dbus_err = NULL;
+
GVariantBuilder *payload_builder = NULL;
GVariant *payload_variant = NULL;
container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
container->userdata = user_data;
- payload_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ payload_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)"));
if (payload_len > 0) {
for (i = payload_len - 1; i >= 0 ; i--) {
- g_variant_builder_add(payload_builder, "y", payload[i]);
+ g_variant_builder_add(payload_builder, "(y)", payload[i]);
}
}
payload_variant = g_variant_builder_end(payload_builder);
g_variant_builder_unref(payload_builder);
- g_dbus_proxy_call(custom_gproxy, "zcl_send",
- g_variant_new("(qyyqyy@ay)", addr16, src_ep, dst_ep, cluster_id, zcl_frame_ctl,
- cmd, payload_variant), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+ variant = g_dbus_proxy_call_sync(custom_gproxy, "zcl_send",
+ g_variant_new("(qyyqyyq@a(y))", addr16, src_ep, dst_ep, cluster_id, zcl_frame_ctl,
+ cmd, payload_len, payload_variant), 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 run 'zcl_send' [%s]", dbus_err->message);
+ g_error_free(dbus_err);
+ return ZIGBEE_ERROR_IO_ERROR;
+ }
+
+ return result;
}
int zbl_send_to_local(unsigned short length, unsigned char *data,
int sub_id, to, i;
zbl_req_cb_s *container;
+ int result = ZIGBEE_ERROR_NONE;
+ GVariant *variant = NULL;
+ GError *dbus_err = NULL;
+
GVariantBuilder *payload_builder = NULL;
GVariant *payload_variant = NULL;
container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
container->userdata = user_data;
- payload_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ payload_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)"));
if (length > 0) {
for (i = length - 1; i >= 0 ; i--) {
- g_variant_builder_add(payload_builder, "y", data[i]);
+ g_variant_builder_add(payload_builder, "(y)", data[i]);
}
}
payload_variant = g_variant_builder_end(payload_builder);
g_variant_builder_unref(payload_builder);
- g_dbus_proxy_call(custom_gproxy, "send_to_local",
- g_variant_new("(@ay)", payload_variant),
- G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+ variant = g_dbus_proxy_call_sync(custom_gproxy, "send_to_local",
+ g_variant_new("(q@a(y))", length, payload_variant),
+ 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 run 'send_to_local' [%s]", dbus_err->message);
+ g_error_free(dbus_err);
+ return ZIGBEE_ERROR_IO_ERROR;
+ }
+
+ return result;
}
int zbl_read_attr_req(zigbee_h handle, unsigned short addr16, unsigned char dest_ep,