void heartrate_adapter_unregister(struct btd_adapter *adapter) { struct heartrate_adapter *hradapter; hradapter = find_heartrate_adapter(adapter); if (hradapter == NULL) return; heartrate_adapters = g_slist_remove(heartrate_adapters, hradapter); g_dbus_unregister_interface(btd_get_dbus_connection(), adapter_get_path(hradapter->adapter), HEART_RATE_MANAGER_INTERFACE); }
static int heartrate_device_register(struct btd_device *device, struct gatt_primary *prim) { struct btd_adapter *adapter; struct heartrate_adapter *hradapter; struct heartrate *hr; adapter = device_get_adapter(device); hradapter = find_heartrate_adapter(adapter); if (hradapter == NULL) return -1; hr = g_new0(struct heartrate, 1); hr->dev = btd_device_ref(device); hr->hradapter = hradapter; if (!g_dbus_register_interface(btd_get_dbus_connection(), device_get_path(device), HEART_RATE_INTERFACE, heartrate_device_methods, NULL, heartrate_device_properties, hr, destroy_heartrate)) { error("D-Bus failed to register %s interface", HEART_RATE_INTERFACE); destroy_heartrate(hr); return -EIO; } hr->svc_range = g_new0(struct att_range, 1); hr->svc_range->start = prim->range.start; hr->svc_range->end = prim->range.end; hradapter->devices = g_slist_prepend(hradapter->devices, hr); hr->attioid = btd_device_add_attio_callback(device, attio_connected_cb, attio_disconnected_cb, hr); return 0; }
void heartrate_device_unregister(struct btd_device *device) { struct btd_adapter *adapter; struct heartrate_adapter *hradapter; struct heartrate *hr; GSList *l; adapter = device_get_adapter(device); hradapter = find_heartrate_adapter(adapter); if (hradapter == NULL) return; l = g_slist_find_custom(hradapter->devices, device, cmp_device); if (l == NULL) return; hr = l->data; hradapter->devices = g_slist_remove(hradapter->devices, hr); g_dbus_unregister_interface(btd_get_dbus_connection(), device_get_path(device), HEART_RATE_INTERFACE); }