#include <zigbee_types.h>
+/* -----------------------------------------------------------------------------
+ * For Requests
+ * ---------------------------------------------------------------------------*/
+
/**
* @brief Definition for ZDO Dev control network address request structure.
* @since_tizen 3.0
*/
typedef struct {
- char eui64[ZIGBEE_EUI64_SIZE]; /**< EUI64 (an IEEE address) */
- char request_type; /**< Request type */
- char start_index; /**< Start index */
+ unsigned char eui64[ZIGBEE_EUI64_SIZE]; /**< EUI64 (an IEEE address) */
+ unsigned char request_type; /**< Request type */
+ unsigned char start_index; /**< Start index */
} ZigbeeZdoDevControlNwkAddrReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
- short profile_id; /**< Profile ID */
- char num_in_cl; /**< Number of int CL */
- char *in_cl; /**< In CL */
- char num_out_cl; /**< Number of out CL */
- char *out_cl; /**< Out CL */
+ unsigned short node_id; /**< Node ID */
+ unsigned short profile_id; /**< Profile ID */
+ unsigned char num_in_cl; /**< Number of int CL */
+ unsigned short *in_cl; /**< In CL */
+ unsigned char num_out_cl; /**< Number of out CL */
+ unsigned short *out_cl; /**< Out CL */
} ZigbeeZdoDevControlMatchedDescriptorReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
} ZigbeeZdoDevControlIeeeAddrReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
} ZigbeeZdoDevControlActiveEpReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
} ZigbeeZdoDevControlNodeDescriptorReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
} ZigbeeZdoDevControlPowerDescriptorReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
} ZigbeeZdoDevControlComplexDescriptorReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
} ZigbeeZdoDevControlUserDescriptorReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
- char user_descriptor_len; /**< User descriptor length */
- char user_descriptor[ZIGBEE_ZDODEV_CONTROL_USER_DECRIPTOR_MAX_LEN];
+ unsigned short node_id; /**< Node ID */
+ unsigned char user_descriptor_len; /**< User descriptor length */
+ unsigned char user_descriptor[ZIGBEE_ZDODEV_CONTROL_USER_DECRIPTOR_MAX_LEN];
/**< User descriptor */
} ZigbeeZdoDevControlUserDescriptorSetReq_t;
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
- char mac_addr[ZIGBEE_EUI64_SIZE]; /**< MAC address */
- char capability; /**< Capability */
+ unsigned short node_id; /**< Node ID */
+ unsigned char mac_addr[ZIGBEE_EUI64_SIZE]; /**< MAC address */
+ unsigned char capability; /**< Capability */
} ZigbeeZdoDevControlDeviceAnnounce_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
- char endpoint; /**< Endpoint */
+ unsigned short node_id; /**< Node ID */
+ unsigned char endpoint; /**< Endpoint */
} ZigbeeZdoDevControlSimpleDescriptorReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
- char start_index; /**< Start index */
+ unsigned short node_id; /**< Node ID */
+ unsigned char start_index; /**< Start index */
} ZigbeeZdoDevControlMgmtLqiReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
- char start_index; /**< Start index */
+ unsigned short node_id; /**< Node ID */
+ unsigned char start_index; /**< Start index */
} ZigbeeZdoDevControlMgmtRtgReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
- char start_index; /**< Start index */
+ unsigned short node_id; /**< Node ID */
+ unsigned char start_index; /**< Start index */
} ZigbeeZdoDevControlMgmtBindReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short addr; /**< Address */
- char duration; /**< Duration */
- char tc_significance; /**< TC significance */
+ unsigned short node_id; /**< Node ID */
+ unsigned char duration; /**< Duration */
+ unsigned char tc_significance; /**< TC significance */
} ZigbeeZdoDevControlMgmtPermitJoinReq_t;
/**
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
unsigned int scan_channel; /**< Scan channel */
- char scan_duration; /**< Scan duration */
- char scan_count; /**< Scan count */
- char network_update_id; /**< Network update ID */
+ unsigned char scan_duration; /**< Scan duration */
+ unsigned char scan_count; /**< Scan count */
+ unsigned char network_update_id; /**< Network update ID */
} ZigbeeZdoDevControlNwkUpdateReq_t;
/**
- * @brief Definition for ZDO Dev control network descriptor request structure.
+ * @brief Definition for ZDO Dev control network discovery request structure.
* @since_tizen 3.0
*/
typedef struct {
- short node_id; /**< Node ID */
+ unsigned short node_id; /**< Node ID */
unsigned int scan_channel; /**< Scan channel */
- char scan_duration; /**< Scan duration */
- short scan_count; /**< Scan count */
- char start_index; /**< Start index */
-} ZigbeeZdoDevControlNwkDescriptorReq_t;
+ unsigned char scan_duration; /**< Scan duration */
+ unsigned short scan_count; /**< Scan count */
+ unsigned char start_index; /**< Start index */
+} ZigbeeZdoDevControlNwkDiscoveryReq_t;
+
+/* -----------------------------------------------------------------------------
+ * For Notifications
+ * ---------------------------------------------------------------------------*/
+
+/**
+ * @brief Definition for ZDO Dev control network address response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned char eui64[ZIGBEE_EUI64_SIZE]; /**< EUI64 (an IEEE address) */
+ unsigned short node_id; /**< Node ID */
+ unsigned char associated_count; /**< The number of assoc */
+ unsigned char start_index; /**< Start index */
+} ZigbeeZdoDevControlNwkAddrResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control extended network address response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned char eui64[ZIGBEE_EUI64_SIZE]; /**< EUI64 (an IEEE address) */
+ unsigned short node_id; /**< Node ID */
+ unsigned char associated_count; /**< The number of assoc */
+ unsigned char start_index; /**< Start index */
+ unsigned short *associated_addr_list; /**< Associated network addresses */
+} ZigbeeZdoDevControlNwkAddrExtResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control matched descriptor response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned short node_id; /**< Node ID */
+ unsigned char list_count; /**< The number of matched descriptors */
+ unsigned char *match_list; /**< List of matched descriptors */
+} ZigbeeZdoDevControlMatchedDescriptorResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control active endpoint response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned short node_id; /**< Node ID */
+ unsigned char endpoint_count; /**< The number of endpoints */
+ unsigned char *endpoint_list; /**< List of endpoints */
+} ZigbeeZdoDevControlActiveEpResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control simple descriptor response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned short node_id; /**< Node ID */
+ int length; /**< Length of message */
+ unsigned char device_version; /**< Device version */
+ unsigned char endpoint; /**< Endpoint */
+ unsigned short profile_id; /**< Profile ID */
+ unsigned short device_id; /**< Device ID */
+ unsigned char in_cluster_count; /**< The number of in cluster */
+ unsigned char out_cluster_count; /**< The number of out cluster */
+ unsigned short in_cluster[ZIGBEE_MAX_ENDPOINT_CLUSTER]; /**< In cluster */
+ unsigned short out_cluster[ZIGBEE_MAX_ENDPOINT_CLUSTER]; /**< Out cluster */
+} ZigbeeZdoDevControlSimpleDescriptorResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management bind entry structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char eui64[ZIGBEE_EUI64_SIZE]; /**< EUI64 (an IEEE address) */
+ unsigned char source_endpoint; /**< Source endpoint */
+ unsigned short cluster_id; /**< Cluster ID */
+ unsigned char dest_addr_mode; /**< Destination address mode */
+ unsigned short dest_addr; /**< Destination network address */
+ unsigned char dest_eui64[ZIGBEE_EUI64_SIZE]; /**< Destination EUI64 (an IEEE address) */
+ unsigned char dest_endpoint; /**< Destination endpoint */
+} ZigbeeZdoDevControlMgmtBindEntry_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management bind response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned char table_entries; /**< Total number of Binding Table entries */
+ unsigned char start_index; /**< Start index */
+ unsigned char table_list_count; /**< The number of binding table list */
+ ZigbeeZdoDevControlMgmtBindEntry_t *table_list; /**< Binding table list */
+} ZigbeeZdoDevControlMgmtBindResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management LQI entry structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char extended_pan_id[ZIGBEE_EUI64_SIZE]; /**< Extended PAN ID */
+ unsigned char eui64[ZIGBEE_EUI64_SIZE]; /**< EUI64 (an IEEE address) */
+ unsigned short node_id;
+ unsigned char device_type; /**< Device Type */
+ unsigned char rx_on_when_idle; /**< Can Receive on Idle State */
+ unsigned char relationship; /**< Relationship (i.e. parent, children or sibling) */
+ unsigned char permit_joining; /**< Can handle join request */
+ unsigned char depth; /**< Depth from parent */
+ unsigned char lqi; /**< Link Quality Indicator */
+} ZigbeeZdoDevControlMgmtLqiEntry_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management LQI response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned char table_entries; /**< Total number of LQI Table entries */
+ unsigned char start_index; /**< Start index */
+ unsigned char table_list_count; /**< The number of LQI table list */
+ ZigbeeZdoDevControlMgmtLqiEntry_t *table_list; /**< LQI table list */
+} ZigbeeZdoDevControlMgmtLqiResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Network discovery entry structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ char extended_pan_id[ZIGBEE_EUI64_SIZE]; /**< Extended PAN ID */
+ unsigned char logical_channel; /**< Logical channel number */
+ unsigned char stack_profile; /**< Stack profile version */
+ unsigned char zigbee_version; /**< Supported ZigBee protocol version */
+ unsigned char beacon_order; /**< Beacon order */
+ unsigned char superframe_order; /**< Superframe order */
+ unsigned char permit_joining; /**< Permit joining flag */
+} ZigbeeZdoDevControlNwkDiscoveryEntry_t;
+
+/**
+ * @brief Definition for ZDO Dev control Network discovery response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned char network_count; /**< Total number of network */
+ unsigned char start_index; /**< Start index */
+ unsigned char table_list_count; /**< The number of network table entry */
+ ZigbeeZdoDevControlNwkDiscoveryEntry_t *table_list; /**< Network table list */
+} ZigbeeZdoDevControlNwkDiscoveryResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management routing entry structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned short dest_addr; /**< Network Address */
+ unsigned char status; /**< Status */
+ unsigned char memory_constrained; /* Is memory constrained device */
+ unsigned char many_to_one; /* Can support many-to-one endpoint routing */
+ unsigned char route_record_required; /* Route record required */
+ unsigned short next_hop_addr; /* Next hop address */
+} ZigbeeZdoDevControlMgmtRtgEntry_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management routing response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned char table_entries; /**< Total number of Routing Table entries */
+ unsigned char start_index; /**< Start index */
+ unsigned char table_list_count; /**< The number of Routing table list */
+ ZigbeeZdoDevControlMgmtRtgEntry_t *table_list; /**< Routing table list */
+} ZigbeeZdoDevControlMgmtRtgResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management permit join response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+} ZigbeeZdoDevControlMgmtPermitJoinResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Management left response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+} ZigbeeZdoDevControlMgmtLeftResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Node descriptor response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned short node_id; /**< Node ID */
+ unsigned char logical_type; /**< Logical Role */
+ unsigned char complex_desciptor_available; /**< Complex Descriptor Available */
+ unsigned char user_descriptor_available; /**< User Descriptor Available */
+ unsigned char aps_flags; /**< APS Flags */
+ unsigned char frequency_band; /**< Frequency Band */
+ unsigned char mac_capability_flags; /**< MAC Capability Flags */
+ unsigned short manufacturer_code; /**< Manufacturer Code */
+ unsigned char max_buffer_size; /**< Maximum Buffer Size */
+ unsigned short max_incoming_transfer_size; /**< Maximum Incoming Transfer Size */
+ unsigned short server_mask; /**< Server Mask */
+ unsigned short max_outgoing_transfer_size; /**< Maximum Outgoing Transfer Size */
+ unsigned char descriptor_capability_field; /**< Descriptor Capability Field */
+} ZigbeeZdoDevControlNodeDescriptorResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Power descriptor response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned short node_id; /**< Node ID */
+ unsigned char current_power_mode; /**< Current power mode */
+ unsigned char available_power_sources; /**< Available power sources */
+ unsigned char current_power_source; /**< Current power source */
+ unsigned char current_power_source_level; /**< Current power source level */
+} ZigbeeZdoDevControlPowerDescriptorResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control Complex descriptor response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned short node_id; /**< Node ID */
+ unsigned char list_count; /**< The count of descriptor list */
+ unsigned char *complex_descriptor_list; /**< Complex descriptor list */
+} ZigbeeZdoDevControlComplexDescriptorResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control User descriptor response structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+ unsigned short node_id; /**< Node ID */
+ unsigned char list_count; /**< The count of descriptor list */
+ unsigned char *user_descriptor_list; /**< User descriptor list */
+} ZigbeeZdoDevControlUserDescriptorResp_t;
+
+/**
+ * @brief Definition for ZDO Dev control User descriptor confirm structure.
+ * @since_tizen 3.0
+ */
+typedef struct {
+ unsigned char status; /**< Status */
+} ZigbeeZdoDevControlUserDescriptorConfirm_t;
#endif /* __ZIGBEE_ZDO_DEV_CONTROL_TYPE_H__ */
#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;
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)
{
- if (NULL == service_interface) {
- Z_LOGE("service_interface is NULL");
+ 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;
}
- NOT_USED(noti_id);
- NOT_USED(noti_data);
- NOT_USED(noti_data_len);
+ 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, 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,