return 0;
}
+static pa_tz_device* _load_forwarding_device(pa_device_manager *dm) {
+ pa_tz_device_new_data data;
+ pa_tz_device *spk_device, *forwarding_device;
+ pa_sink *spk_sink;
+
+ pa_assert(dm);
+
+ pa_log_info("Load forwarding device");
+
+ if ((forwarding_device = _device_list_get_device(dm, DEVICE_TYPE_FORWARDING, NULL))) {
+ pa_log_info("Forwarding device already exists");
+ return forwarding_device;
+ }
+
+ if ((spk_device = _device_list_get_device(dm, DEVICE_TYPE_SPEAKER, NULL)) == NULL) {
+ pa_log_error("Get speaker device failed");
+ return NULL;
+ }
+
+ if ((spk_sink = pa_tz_device_get_sink(spk_device, DEVICE_ROLE_NORMAL)) == NULL) {
+ pa_log_error("Get speaker sink failed");
+ return NULL;
+ }
+
+ pa_tz_device_new_data_init(&data, dm->device_list, dm->comm, NULL);
+ _fill_new_data_basic(&data, DEVICE_TYPE_FORWARDING, DM_DEVICE_DIRECTION_BOTH, true, dm);
+ pa_tz_device_new_data_add_sink(&data, DEVICE_ROLE_NORMAL, spk_sink);
+ pa_tz_device_new_data_add_source(&data, DEVICE_ROLE_NORMAL, spk_sink->monitor_source);
+
+ if ((forwarding_device = pa_tz_device_new(&data)) == NULL)
+ pa_log_error("Failed to create forwarding device");
+
+ pa_tz_device_new_data_done(&data);
+
+ return forwarding_device;
+}
+
/*
Handle device connection detected through dbus.
First, update device-status hashmap.
pa_tz_device_new(&data);
pa_tz_device_new_data_done(&data);
} else if (device_type_is_equal(type, device_profile, DEVICE_TYPE_FORWARDING, NULL)) {
- pa_tz_device *spk_device;
- pa_sink *spk_sink;
-
- if (!(spk_device = _device_list_get_device(dm, DEVICE_TYPE_SPEAKER, NULL))) {
- pa_log_error("Get speaker device failed");
- return;
- }
- if (!(spk_sink = pa_tz_device_get_sink(spk_device, DEVICE_ROLE_NORMAL))) {
- pa_log_error("Get speaker sink failed");
- return;
- }
-
- pa_tz_device_new_data_init(&data, dm->device_list, dm->comm, NULL);
- _fill_new_data_basic(&data, DEVICE_TYPE_FORWARDING, DM_DEVICE_DIRECTION_BOTH, true, dm);
- pa_tz_device_new_data_add_sink(&data, DEVICE_ROLE_NORMAL, spk_sink);
- pa_tz_device_new_data_add_source(&data, DEVICE_ROLE_NORMAL, spk_sink->monitor_source);
-
- pa_tz_device_new(&data);
- pa_tz_device_new_data_done(&data);
+ _load_forwarding_device(dm);
} else {
dm_device_direction_t direction;
return source->device_item;
}
+pa_tz_device* pa_device_manager_load_forwarding(pa_device_manager *dm) {
+ return _load_forwarding_device(dm);
+}
+
+void pa_device_manager_unload_forwarding(pa_device_manager *dm) {
+ pa_tz_device *forwarding_device;
+
+ forwarding_device = _device_list_get_device(dm, DEVICE_TYPE_FORWARDING, NULL);
+ if (forwarding_device)
+ pa_tz_device_free(forwarding_device);
+ else
+ pa_log_warn("There is no forwarding device");
+}
+
int pa_device_manager_load_sink(pa_device_manager *dm, const char *type, const char *device_profile, const char *role) {
const char *device_string, *params;
struct device_type_info *type_info;