GDBusMethodInvocation *invocation,
gpointer user_data)
{
+ ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
+ ZigBeeService *service = zblib_service_interface_ref_service(service_interface);
+
NOT_USED(user_data);
zigbee_manager_complete_disable(zigbee_mgr, invocation, TRUE);
+ if (service)
+ zblib_service_exit(service);
+
return TRUE;
}
ZigBeeDriver *zblib_plugin_ref_driver(ZigBeePlugin *plugin, ZblibDriverType_e driver_type);
void zblib_plugin_link_driver(ZigBeePlugin *plugin, ZigBeeDriver *driver);
+void zblib_plugin_unlink_driver(ZigBeePlugin *plugin, ZblibDriverType_e driver_type);
gboolean zblib_plugin_dispatch_request(ZigBeePlugin *plugin,
guint request_id);
if (driver->free_hook_fn)
driver->free_hook_fn(driver);
- Z_LOGI("Freeing Driver - Name [%p]", driver->driver_name);
+ Z_LOGI("Freeing Driver[%p] - Name [%s]", driver, driver->driver_name);
/* Free driver memory */
g_free(driver->driver_name);
ZblibDriverType_e zblib_driver_ref_driver_type(ZigBeeDriver *driver)
{
- zblib_check_null_ret_error("driver",
- driver, ZBLIB_DRIVER_TYPE_NONE);
+ if (NULL == driver) {
+ return ZBLIB_DRIVER_TYPE_NONE;
+ }
return driver->driver_type;
}
Z_LOGD("Driver appended into plugin [%s]", plugin->plugin_name);
}
+void zblib_plugin_unlink_driver(ZigBeePlugin *plugin, ZblibDriverType_e driver_type)
+{
+ ZblibDriverType_e _driver_type;
+ GSList *list = NULL;
+
+ zblib_check_null_ret("plugin", plugin);
+
+ list = plugin->driver_list;
+ while (list) {
+ /* Fetch driver type of driver */
+ _driver_type = zblib_driver_ref_driver_type((ZigBeeDriver *)(list->data));
+ if (_driver_type == driver_type) {
+ /* Driver found */
+ Z_LOGD("Driver[%p] removed from plugin", list->data);
+ list->data = NULL;
+ break;
+ }
+
+ /* Move to next driver */
+ list = g_slist_next(list);
+ }
+}
+
gboolean zblib_plugin_dispatch_request(ZigBeePlugin *plugin,
guint request_id)
{