#include <zblib_driver_zdo_dev_control.h>
+static void *_service_interface_ref_zigbee_zdo_dev_control(ZigBeeServiceInterface *service_interface)
+{
+ ZigbeeObjectSkeleton *zigbee_object = NULL;
+ ZigbeeCustomData_t *custom_data = NULL;
+ ZigbeeZdo_dev_control *dev_control_object = NULL;
+
+ custom_data = (ZigbeeCustomData_t *)zblib_service_interface_ref_user_data(service_interface);
+ if (NULL == custom_data) {
+ Z_LOGE("D-BUS service interface custom_data is NULL!");
+ return NULL;
+ }
+
+ /* Get zigbee object */
+ zigbee_object = g_hash_table_lookup(custom_data->objects, ZIGBEE_SERVICE_PATH);
+ if (NULL == zigbee_object) {
+ Z_LOGW("Cannot find ZigBee D-BUS interface object!", zigbee_object);
+ return NULL;
+ }
+
+ dev_control_object = zigbee_object_get_zdo_dev_control(ZIGBEE_OBJECT(zigbee_object));
+ return dev_control_object;
+}
+
static void on_zdodev_control_nwk_addr_req_resp(ZigBeeServiceInterface *service_interface,
guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
{
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_nwk_addr_req(dev_control_object, invocation,
+ payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_nwk_addr_req(ZigbeeZdo_dev_control *zdodev_control_object,
memset(&req, 0x0, sizeof(ZigbeeZdoDevControlNwkAddrReq_t));
/* Update request structure */
- g_variant_get(eui64, "ay", &iter);
- while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
+ g_variant_get(eui64, "a(y)", &iter);
+ while (g_variant_iter_loop(iter, "(y)", &(req.eui64[i]))) {
i++;
if (i >= ZIGBEE_EUI64_SIZE)
break;
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_matched_descriptor_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_matched_descriptor_req(ZigbeeZdo_dev_control *zdodev_control_object,
req.node_id = node_id;
req.profile_id = profile_id;
req.num_in_cl = num_in_cl;
- req.in_cl = g_malloc0(sizeof(num_in_cl));
- g_variant_get(in_cl, "ay", &iter);
- while (g_variant_iter_loop(iter, "y", req.in_cl[i])) {
- i++;
- if (i >= num_in_cl)
- break;
+ if (num_in_cl > 0) {
+ req.in_cl = g_malloc0_n(num_in_cl, sizeof(unsigned short));
+ g_variant_get(in_cl, "aq", &iter);
+ while (g_variant_iter_loop(iter, "q", &(req.in_cl[i]))) {
+ i++;
+ if (i >= num_in_cl)
+ break;
+ }
+ } else {
+ req.in_cl = NULL;
}
i = 0;
req.num_out_cl = num_out_cl;
- req.out_cl = g_malloc0(sizeof(num_out_cl));
- g_variant_get(out_cl, "ay", &iter);
- while (g_variant_iter_loop(iter, "y", req.out_cl[i])) {
- i++;
- if (i >= num_out_cl)
- break;
+ if (num_out_cl > 0) {
+ req.out_cl = g_malloc0_n(num_out_cl, sizeof(unsigned short));
+ g_variant_get(out_cl, "aq", &iter);
+ while (g_variant_iter_loop(iter, "q", &(req.out_cl[i]))) {
+ i++;
+ if (i >= num_out_cl)
+ break;
+ }
+ } else {
+ req.out_cl = NULL;
}
/* Allocate response callback data */
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_ieee_addr_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_ieee_addr_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_active_ep_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_active_ep_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_node_desc_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_node_desc_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_power_desc_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_power_desc_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_complex_desc_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_complex_desc_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_user_desc_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_user_desc_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_user_desc_set_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_user_desc_set_req(ZigbeeZdo_dev_control *zdodev_control_object,
/* Update request structure */
req.node_id = node_id;
req.user_descriptor_len = length;
- g_variant_get(user_desc, "ay", &iter);
- while (g_variant_iter_loop(iter, "y", req.user_descriptor[i])) {
+ g_variant_get(user_desc, "a(y)", &iter);
+ while (g_variant_iter_loop(iter, "(y)", &(req.user_descriptor[i]))) {
i++;
if (i >= ZIGBEE_ZDODEV_CONTROL_USER_DECRIPTOR_MAX_LEN)
break;
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_device_announce(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_device_announce(ZigbeeZdo_dev_control *zdodev_control_object,
/* Update request structure */
req.node_id = node_id;
- g_variant_get(mac_addr, "ay", &iter);
- while (g_variant_iter_loop(iter, "y", req.mac_addr[i])) {
+ g_variant_get(mac_addr, "a(y)", &iter);
+ while (g_variant_iter_loop(iter, "(y)", &(req.mac_addr[i]))) {
i++;
if (i >= ZIGBEE_EUI64_SIZE)
break;
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_simple_desc_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_simple_desc_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_mgmt_lqi_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_mgmt_lqi_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_mgmt_rtg_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_mgmt_rtg_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_mgmt_bind_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_mgmt_bind_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_mgmt_permit_join_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_mgmt_permit_join_req(ZigbeeZdo_dev_control *zdodev_control_object,
GDBusMethodInvocation *invocation,
- gshort addr16,
+ gshort node_id,
gchar duration,
gchar tc_significance,
gpointer user_data)
memset(&req, 0x0, sizeof(ZigbeeZdoDevControlMgmtPermitJoinReq_t));
/* Update request structure */
- req.addr = addr16;
+ req.node_id = node_id;
req.duration = duration;
req.tc_significance = tc_significance;
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_nwk_update_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_nwk_update_req(ZigbeeZdo_dev_control *zdodev_control_object,
ZigbeeServiceInterfaceRespCbData_t *cb_data =
(ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
- NOT_USED(cb_data);
+ ZigbeeZdo_dev_control *dev_control_object;
+ GDBusMethodInvocation *invocation;
+
+ ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
+
NOT_USED(service_interface);
NOT_USED(request_id);
- NOT_USED(resp_data);
- NOT_USED(resp_data_len);
+
+ if (NULL == resp_data || 0 == resp_data_len) {
+ Z_LOGE("resp_data=%p or resp_data_len=%d is null", resp_data, resp_data_len);
+ g_free(cb_data);
+ return;
+ }
+
+ dev_control_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
+ zblib_check_null_free_and_ret("dev_control_object", dev_control_object, cb_data);
+
+ invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
+ zblib_check_null_free_and_ret("invocation", invocation, cb_data);
+
+ zigbee_zdo_dev_control_complete_nwk_disc_req(dev_control_object,
+ invocation, payload->result);
+
+ g_free(cb_data);
}
static gboolean on_zdodev_control_nwk_disc_req(ZigbeeZdo_dev_control *zdodev_control_object,
gpointer user_data)
{
ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
- ZigbeeZdoDevControlNwkDescriptorReq_t req;
+ ZigbeeZdoDevControlNwkDiscoveryReq_t req;
ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
gboolean ret;
- memset(&req, 0x0, sizeof(ZigbeeZdoDevControlNwkDescriptorReq_t));
+ memset(&req, 0x0, sizeof(ZigbeeZdoDevControlNwkDiscoveryReq_t));
/* Update request structure */
req.node_id = node_id;
return TRUE;
}
+void zigbee_service_dbus_interface_zdo_dev_control_notification(ZigBeeServiceInterface *service_interface,
+ guint noti_id, gpointer noti_data, guint noti_data_len, gpointer noti_cb_data)
+{
+ ZigbeeZdo_dev_control *dev_control_object = NULL;
+
+ zblib_check_null_ret("service_interface", service_interface);
+
+ if (NULL == noti_data || 0 == noti_data_len) {
+ Z_LOGE("noti_data is NULL");
+ return;
+ }
+
+ dev_control_object = _service_interface_ref_zigbee_zdo_dev_control(service_interface);
+ zblib_check_null_ret("dev_control_object", dev_control_object);
+
+ NOT_USED(noti_cb_data);
+
+ switch(noti_id) {
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_NWK_ADDR_RSP: {
+ ZigbeeZdoDevControlNwkAddrResp_t *nwk_addr_t =
+ (ZigbeeZdoDevControlNwkAddrResp_t*)noti_data;
+
+ GVariant *v_eui64 = NULL;
+ v_eui64 = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+ nwk_addr_t->eui64, ZIGBEE_EUI64_SIZE, TRUE, NULL, NULL);
+ if (NULL == v_eui64) {
+ Z_LOGE("Failed to create variant!");
+ } else {
+ Z_LOGD("nwk addr rsp : [0x%X]", nwk_addr_t->status);
+ zigbee_zdo_dev_control_emit_nwk_addr_rsp(dev_control_object,
+ nwk_addr_t->status, v_eui64, nwk_addr_t->node_id,
+ nwk_addr_t->associated_count, nwk_addr_t->start_index);
+ }
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_NWK_ADDR_EXT_RSP: {
+ ZigbeeZdoDevControlNwkAddrExtResp_t *nwk_addr_t =
+ (ZigbeeZdoDevControlNwkAddrExtResp_t*)noti_data;
+
+ GVariant *v_eui64 = NULL;
+ GVariant *v_associated = NULL;
+ v_eui64 = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+ nwk_addr_t->eui64, ZIGBEE_EUI64_SIZE, TRUE, NULL, NULL);
+ v_associated = g_variant_new_from_data(G_VARIANT_TYPE("aq"),
+ nwk_addr_t->associated_addr_list,
+ (sizeof(gushort) * nwk_addr_t->associated_count), TRUE, NULL, NULL);
+ if (NULL == v_eui64 || NULL == v_associated) {
+ Z_LOGE("Failed to create variant!");
+ if (v_eui64)
+ g_variant_unref(v_eui64);
+ if (v_associated)
+ g_variant_unref(v_associated);
+ } else {
+ Z_LOGD("nwk addr ext rsp : [0x%X]", nwk_addr_t->status);
+ zigbee_zdo_dev_control_emit_nwk_addr_ext_rsp(dev_control_object,
+ nwk_addr_t->status, v_eui64, nwk_addr_t->node_id,
+ nwk_addr_t->associated_count, nwk_addr_t->start_index, v_associated);
+ }
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_ACTIVE_EP_RSP: {
+ ZigbeeZdoDevControlActiveEpResp_t *active_t =
+ (ZigbeeZdoDevControlActiveEpResp_t *)noti_data;
+
+ GVariant *v_ep_list = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+ active_t->endpoint_list, active_t->endpoint_count, TRUE, NULL, NULL);
+ if (NULL == v_ep_list) {
+ Z_LOGE("Failed to create variant!");
+ } else {
+ Z_LOGD("Active endpoint rsp : [0x%X]", active_t->status);
+ zigbee_zdo_dev_control_emit_active_ep_rsp(dev_control_object,
+ active_t->status, active_t->node_id,
+ v_ep_list, active_t->endpoint_count);
+ }
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_SIMPLE_DESC_RSP: {
+ ZigbeeZdoDevControlSimpleDescriptorResp_t *desc_t =
+ (ZigbeeZdoDevControlSimpleDescriptorResp_t *)noti_data;
+
+ GVariant *v_in_cluster = NULL;
+ GVariant *v_out_cluster = NULL;
+ v_in_cluster = g_variant_new_from_data(G_VARIANT_TYPE("aq"),
+ desc_t->in_cluster, (sizeof(gushort) * desc_t->in_cluster_count),
+ TRUE, NULL, NULL);
+ v_out_cluster = g_variant_new_from_data(G_VARIANT_TYPE("aq"),
+ desc_t->out_cluster, (sizeof(gushort) * desc_t->out_cluster_count),
+ TRUE, NULL, NULL);
+ if (NULL == v_in_cluster || NULL == v_out_cluster) {
+ Z_LOGE("Failed to create variant!");
+ if (v_in_cluster)
+ g_variant_unref(v_in_cluster);
+ if (v_out_cluster)
+ g_variant_unref(v_out_cluster);
+ } else {
+ Z_LOGD("Simple descriptor rsp");
+ zigbee_zdo_dev_control_emit_simple_desc_rsp(dev_control_object,
+ desc_t->node_id, desc_t->length, desc_t->device_version,
+ desc_t->endpoint, desc_t->profile_id, desc_t->device_id,
+ desc_t->in_cluster_count, desc_t->out_cluster_count,
+ v_in_cluster, v_out_cluster);
+ }
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_MATCHED_DESC_RSP: {
+ ZigbeeZdoDevControlMatchedDescriptorResp_t *desc_t =
+ (ZigbeeZdoDevControlMatchedDescriptorResp_t *)noti_data;
+
+ GVariant *v_match_list = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+ desc_t->match_list, desc_t->list_count, TRUE, NULL, NULL);
+ if (NULL == v_match_list) {
+ Z_LOGE("Failed to create variant!");
+ } else {
+ Z_LOGD("matched descriptor rsp : [0x%X]", desc_t->status);
+ zigbee_zdo_dev_control_emit_matched_descriptor_rsp(dev_control_object,
+ desc_t->status, desc_t->node_id, desc_t->list_count, v_match_list);
+ }
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_MGMT_BIND_RSP: {
+ ZigbeeZdoDevControlMgmtBindResp_t *desc_t =
+ (ZigbeeZdoDevControlMgmtBindResp_t *)noti_data;
+ int i = 0;
+ int v = 0;
+
+ GVariant *v_entries = NULL;
+ GVariantBuilder *entry_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("a(ayyqyqayy)"));
+ if (NULL == entry_builder) {
+ Z_LOGE("Failed to create variant builder!");
+ break;
+ }
+
+ for(i = 0; i < desc_t->table_list_count ; i++) {
+ GVariantBuilder *eui64_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+ GVariantBuilder *dest_eui64_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+
+ if (NULL == eui64_builder || NULL == dest_eui64_builder) {
+ Z_LOGE("Failed to create variant builder!");
+ if (eui64_builder)
+ g_variant_builder_unref(eui64_builder);
+ if (dest_eui64_builder)
+ g_variant_builder_unref(dest_eui64_builder);
+ g_variant_builder_unref(entry_builder);
+ break;
+ }
+
+ for (v = 0; v < ZIGBEE_EUI64_SIZE; v++) {
+ g_variant_builder_add (eui64_builder, "y",
+ desc_t->table_list[i].eui64[v]);
+ g_variant_builder_add (dest_eui64_builder, "y",
+ desc_t->table_list[i].dest_eui64[v]);
+ }
+
+ g_variant_builder_add (entry_builder, "(ayyqyqayy)",
+ eui64_builder,
+ desc_t->table_list[i].source_endpoint,
+ desc_t->table_list[i].cluster_id,
+ desc_t->table_list[i].dest_addr_mode,
+ desc_t->table_list[i].dest_addr,
+ dest_eui64_builder,
+ desc_t->table_list[i].dest_endpoint);
+
+ g_variant_builder_unref(eui64_builder);
+ g_variant_builder_unref(dest_eui64_builder);
+ }
+ v_entries = g_variant_builder_end(entry_builder);
+
+ Z_LOGD("management bind rsp : [0x%X]", desc_t->status);
+ zigbee_zdo_dev_control_emit_mgmt_bind_rsp(dev_control_object,
+ desc_t->status, desc_t->table_entries,
+ desc_t->start_index, desc_t->table_list_count,
+ v_entries);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_MGMT_LQI_RSP: {
+ ZigbeeZdoDevControlMgmtLqiResp_t *desc_t =
+ (ZigbeeZdoDevControlMgmtLqiResp_t *)noti_data;
+ int i = 0;
+ int v = 0;
+
+ GVariant *v_entries = NULL;
+ GVariantBuilder *entry_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("a(ayayyqyyyyy)"));
+ if (NULL == entry_builder) {
+ Z_LOGE("Failed to create variant builder!");
+ break;
+ }
+
+ for(i = 0; i < desc_t->table_list_count ; i++) {
+ GVariantBuilder *ext_pan_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+ GVariantBuilder *eui64_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+
+ if (NULL == ext_pan_builder || NULL == eui64_builder) {
+ Z_LOGE("Failed to create variant builder!");
+ if (ext_pan_builder)
+ g_variant_builder_unref(ext_pan_builder);
+ if (eui64_builder)
+ g_variant_builder_unref(eui64_builder);
+ g_variant_builder_unref(entry_builder);
+ break;
+ }
+
+ for (v = 0; v < ZIGBEE_EUI64_SIZE; v++) {
+ g_variant_builder_add (ext_pan_builder, "y",
+ desc_t->table_list[i].extended_pan_id[v]);
+ g_variant_builder_add (eui64_builder, "y",
+ desc_t->table_list[i].eui64[v]);
+ }
+
+ g_variant_builder_add (entry_builder, "(ayayyqyyyyy)",
+ ext_pan_builder,
+ eui64_builder,
+ desc_t->table_list[i].node_id,
+ desc_t->table_list[i].device_type,
+ desc_t->table_list[i].rx_on_when_idle,
+ desc_t->table_list[i].relationship,
+ desc_t->table_list[i].permit_joining,
+ desc_t->table_list[i].depth,
+ desc_t->table_list[i].lqi);
+
+ g_variant_builder_unref(ext_pan_builder);
+ g_variant_builder_unref(eui64_builder);
+ }
+ v_entries = g_variant_builder_end(entry_builder);
+
+ Z_LOGD("management LQI rsp : [0x%X]", desc_t->status);
+ zigbee_zdo_dev_control_emit_mgmt_lqi_rsp(dev_control_object,
+ desc_t->status, desc_t->table_entries,
+ desc_t->start_index, desc_t->table_list_count,
+ v_entries);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_MGMT_RTG_RSP: {
+ ZigbeeZdoDevControlMgmtRtgResp_t *desc_t =
+ (ZigbeeZdoDevControlMgmtRtgResp_t *)noti_data;
+ int i = 0;
+
+ GVariant *v_entries = NULL;
+ GVariantBuilder *entry_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("a(qyyyyq)"));
+ if (NULL == entry_builder) {
+ Z_LOGE("Failed to create variant builder!");
+ break;
+ }
+
+ for(i = 0; i < desc_t->table_list_count ; i++) {
+ g_variant_builder_add (entry_builder, "(qyyyyq)",
+ desc_t->table_list[i].dest_addr,
+ desc_t->table_list[i].status,
+ desc_t->table_list[i].memory_constrained,
+ desc_t->table_list[i].many_to_one,
+ desc_t->table_list[i].route_record_required,
+ desc_t->table_list[i].next_hop_addr);
+ }
+ v_entries = g_variant_builder_end(entry_builder);
+
+ Z_LOGD("management routing rsp : [0x%X]", desc_t->status);
+ zigbee_zdo_dev_control_emit_mgmt_rtg_rsp(dev_control_object,
+ desc_t->status, desc_t->table_entries,
+ desc_t->start_index, desc_t->table_list_count,
+ v_entries);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_MGMT_PERMIT_JOIN_RSP: {
+ ZigbeeZdoDevControlMgmtPermitJoinResp_t *resp_t =
+ (ZigbeeZdoDevControlMgmtPermitJoinResp_t *)noti_data;
+
+ zigbee_zdo_dev_control_emit_mgmt_permit_join_rsp(dev_control_object,
+ resp_t->status);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_MGMT_LEFT_RSP: {
+ ZigbeeZdoDevControlMgmtLeftResp_t *resp_t =
+ (ZigbeeZdoDevControlMgmtLeftResp_t *)noti_data;
+
+ zigbee_zdo_dev_control_emit_mgmt_left_rsp(dev_control_object,
+ resp_t->status);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_NWK_DISC_RSP: {
+ ZigbeeZdoDevControlNwkDiscoveryResp_t *nwk_disc_t =
+ (ZigbeeZdoDevControlNwkDiscoveryResp_t *)noti_data;
+ int i = 0;
+ int v = 0;
+
+ GVariant *v_entries = NULL;
+ GVariantBuilder *entry_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("a(ayyyyyyy)"));
+ if (NULL == entry_builder) {
+ Z_LOGE("Failed to create variant builder!");
+ break;
+ }
+
+ for(i = 0; i < nwk_disc_t->table_list_count ; i++) {
+ GVariantBuilder *ext_pan_builder =
+ g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+ if (NULL == ext_pan_builder) {
+ Z_LOGE("Failed to create variant builder!");
+ g_variant_builder_unref(entry_builder);
+ break;
+ }
+
+ for (v = 0; v < ZIGBEE_EUI64_SIZE; v++) {
+ g_variant_builder_add (ext_pan_builder, "y",
+ nwk_disc_t->table_list[i].extended_pan_id[v]);
+ }
+
+ g_variant_builder_add (entry_builder, "(ayyyyyyy)",
+ ext_pan_builder,
+ nwk_disc_t->table_list[i].logical_channel,
+ nwk_disc_t->table_list[i].stack_profile,
+ nwk_disc_t->table_list[i].zigbee_version,
+ nwk_disc_t->table_list[i].beacon_order,
+ nwk_disc_t->table_list[i].superframe_order,
+ nwk_disc_t->table_list[i].permit_joining);
+
+ g_variant_builder_unref(ext_pan_builder);
+ }
+ v_entries = g_variant_builder_end(entry_builder);
+
+ Z_LOGD("Network discovery rsp : [0x%X]", nwk_disc_t->status);
+ zigbee_zdo_dev_control_emit_nwk_disc_rsp(dev_control_object,
+ nwk_disc_t->status, nwk_disc_t->network_count,
+ nwk_disc_t->start_index, nwk_disc_t->table_list_count,
+ v_entries);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_NODE_DESC_RSP: {
+ ZigbeeZdoDevControlNodeDescriptorResp_t *desc_t =
+ (ZigbeeZdoDevControlNodeDescriptorResp_t *)noti_data;
+
+ zigbee_zdo_dev_control_emit_node_desc_rsp(dev_control_object,
+ desc_t->status, desc_t->node_id, desc_t->logical_type,
+ desc_t->complex_desciptor_available,
+ desc_t->user_descriptor_available,
+ desc_t->aps_flags, desc_t->frequency_band,
+ desc_t->mac_capability_flags, desc_t->manufacturer_code,
+ desc_t->max_buffer_size, desc_t->max_incoming_transfer_size,
+ desc_t->server_mask, desc_t->max_outgoing_transfer_size,
+ desc_t->descriptor_capability_field);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_POWER_DESC_RSP: {
+ ZigbeeZdoDevControlPowerDescriptorResp_t *desc_t =
+ (ZigbeeZdoDevControlPowerDescriptorResp_t *)noti_data;
+
+ zigbee_zdo_dev_control_emit_power_desc_rsp(dev_control_object,
+ desc_t->status, desc_t->node_id,
+ desc_t->current_power_mode,
+ desc_t->available_power_sources,
+ desc_t->current_power_source,
+ desc_t->current_power_source_level);
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_COMPLEX_DESC_RSP: {
+ ZigbeeZdoDevControlComplexDescriptorResp_t *desc_t =
+ (ZigbeeZdoDevControlComplexDescriptorResp_t *)noti_data;
+
+ GVariant *v_desc_list = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+ desc_t->complex_descriptor_list, desc_t->list_count,
+ TRUE, NULL, NULL);
+ if (NULL == v_desc_list) {
+ Z_LOGE("Failed to create variant!");
+ } else {
+ Z_LOGD("Complex descriptor rsp : [0x%X]", desc_t->status);
+ zigbee_zdo_dev_control_emit_complex_desc_rsp(dev_control_object,
+ desc_t->status, desc_t->node_id, desc_t->list_count, v_desc_list);
+ }
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_USER_DESC_RSP: {
+ ZigbeeZdoDevControlUserDescriptorResp_t *desc_t =
+ (ZigbeeZdoDevControlUserDescriptorResp_t *)noti_data;
+
+ GVariant *v_desc_list = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+ desc_t->user_descriptor_list, desc_t->list_count,
+ TRUE, NULL, NULL);
+ if (NULL == v_desc_list) {
+ Z_LOGE("Failed to create variant!");
+ } else {
+ Z_LOGD("User descriptor rsp : [0x%X]", desc_t->status);
+ zigbee_zdo_dev_control_emit_user_desc_rsp(dev_control_object,
+ desc_t->status, desc_t->node_id, desc_t->list_count, v_desc_list);
+ }
+ break;
+ }
+ case ZBLIB_ZDO_DEV_CONTROL_NOTI_USER_DESC_CONFIRM: {
+ ZigbeeZdoDevControlUserDescriptorConfirm_t *resp_t =
+ (ZigbeeZdoDevControlUserDescriptorConfirm_t *)noti_data;
+
+ zigbee_zdo_dev_control_emit_user_desc_confirm(dev_control_object,
+ resp_t->status);
+ break;
+ }
+ default:
+ Z_LOGE("Unexpected notification [%x]", noti_id);
+ break;
+ }
+
+ /* ZigbeeZdo_dev_control should be dereferenced */
+ g_object_unref(dev_control_object);
+}
+
gboolean zigbee_service_dbus_interface_zdo_dev_control_init(ZigBeeServiceInterface *service_interface,
ZigbeeObjectSkeleton *zigbee_object)
{