return NULL;
}
+static bool is_bt_sco_connected(pa_device_manager *dm) {
+ pa_tz_device *bt_device;
+
+ pa_assert(dm);
+
+ if ((bt_device = _get_sco_connected_device(dm)))
+ return true;
+
+ return false;
+}
+
+static bool is_bt_a2dp_connected(pa_device_manager *dm) {
+ pa_idxset *device_list;
+ pa_tz_device *device;
+ uint32_t device_idx;
+
+ pa_assert(dm);
+
+ device_list = pa_device_manager_get_device_list(dm);
+
+ PA_IDXSET_FOREACH(device, device_list, device_idx) {
+ if (pa_streq(device->type, DEVICE_TYPE_BT_A2DP)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
static bool is_bt_sco_opened(pa_device_manager *dm) {
dm_device_bt_sco_status_t sco_status;
pa_tz_device *bt_device;
pa_assert(device_type);
if (pa_streq(stream_role, STREAM_ROLE_VOICE_INFORMATION) && pa_streq(device_type, DEVICE_TYPE_BT_SCO)) {
+ if (!is_bt_sco_connected(u->device_manager)) {
+ pa_log_warn("It is VOICE_INFORMATION, BT SCO is not connected, skip this device");
+ return true;
+ }
if (is_bt_sco_opened(u->device_manager)) {
/* remove the request of closing SCO */
if (u->time_event_bt_sco_close) {
u->core->mainloop->time_free(u->time_event_bt_sco_close);
u->time_event_bt_sco_close = NULL;
}
- pa_log_info("It is VOICE_INFORMATION, BT SCO is already opened, do not skip this device");
+ pa_log_info("It is VOICE_INFORMATION, BT SCO is already opened, use BT SCO");
+ return false;
+ } else if (!is_bt_a2dp_connected(u->device_manager)) {
+ pa_log_info("It is VOICE_INFORMATION, BT SCO is connected, BT A2DP is not available, use BT SCO");
return false;
} else {
pa_log_info("It is VOICE_INFORMATION, BT SCO is not opened, skip this device");
#define IS_ROLE_AVAILABLE_BT_SCO_OPEN(stream_role) \
(stream_role && (pa_streq(stream_role, STREAM_ROLE_CALL_VOICE) || pa_streq(stream_role, STREAM_ROLE_CALL_VIDEO) || \
pa_streq(stream_role, STREAM_ROLE_VOIP) || pa_streq(stream_role, STREAM_ROLE_RINGBACKTONE_CALL) || \
- pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION) || pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION_SERVICE)))
+ pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION) || pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION_SERVICE) || \
+ pa_streq(stream_role, STREAM_ROLE_VOICE_INFORMATION)))
#define CONVERT_TO_DEVICE_ROLE(x_stream_role, x_device_role) \
do { \