callmgr_audio_device_e current_device;
callmgr_audio_device_e current_device_list;
+ int device_cb_id;
audio_event_cb cb_fn;
void *user_data;
};
return "Built-in mic";
case SOUND_DEVICE_AUDIO_JACK:
return "Audio jac";
- case SOUND_DEVICE_BLUETOOTH:
- return "Bluetooth";
+ case SOUND_DEVICE_BLUETOOTH_MEDIA:
+ return "Bluetooth Media";
+ case SOUND_DEVICE_BLUETOOTH_VOICE:
+ return "Bluetooth Voice";
case SOUND_DEVICE_HDMI:
return "HDMI";
case SOUND_DEVICE_FORWARDING:
audio_handle->current_device_list |= CALLMGR_AUDIO_DEVICE_EARJACK_E;
else if (audio_handle->current_device_list & CALLMGR_AUDIO_DEVICE_EARJACK_E)
audio_handle->current_device_list -= CALLMGR_AUDIO_DEVICE_EARJACK_E;
- } else if (device_type == SOUND_DEVICE_BLUETOOTH) {
+ } else if (device_type == SOUND_DEVICE_BLUETOOTH_VOICE) {
if (is_connected) {
- int modes;
- sound_manager_get_bt_device_avail_modes(device, &modes);
- if (modes & SOUND_DEVICE_BLUETOOTH_MODE_VOICE) {
- dbg("BT device is connected and BT Voice is enabled.");
- audio_handle->current_device_list |= CALLMGR_AUDIO_DEVICE_BT_E;
- } else {
- dbg("BT device is connected. But, BT Voice is disabled.");
- is_connected = FALSE;
- }
+ audio_handle->current_device_list |= CALLMGR_AUDIO_DEVICE_BT_E;
} else {
if (audio_handle->current_device_list & CALLMGR_AUDIO_DEVICE_BT_E)
audio_handle->current_device_list -= CALLMGR_AUDIO_DEVICE_BT_E;
/* Invoke device changed cb */
if (device_type == SOUND_DEVICE_AUDIO_JACK)
audio_handle->cb_fn(CM_AUDIO_EVENT_EARJACK_CHANGED_E, (void *)is_connected, audio_handle->user_data);
- else if (device_type == SOUND_DEVICE_BLUETOOTH)
- audio_handle->cb_fn(CM_AUDIO_EVENT_BT_CHANGED_E, (void *)is_connected, audio_handle->user_data);
-}
-
-static void __callmgr_audio_device_information_changed_cb(sound_device_h device, sound_device_changed_info_e changed_info, void *user_data)
-{
- CM_RETURN_IF_FAIL(user_data);
- CM_RETURN_IF_FAIL(device);
- callmgr_audio_handle_h audio_handle = (callmgr_audio_handle_h)user_data;
- sound_device_type_e device_type = SOUND_DEVICE_BUILTIN_RECEIVER;
- int ret = SOUND_MANAGER_ERROR_NONE;
-
- ret = sound_manager_get_device_type(device, &device_type);
- if (ret != SOUND_MANAGER_ERROR_NONE) {
- err("sound_manager_get_device_type() get failed with err[0x%x][%s]", ret, get_error_message(ret));
- return;
- }
-
- if (device_type == SOUND_DEVICE_BLUETOOTH) {
- int modes;
- bool is_connected;
- sound_manager_get_bt_device_avail_modes(device, &modes);
-
- /* Set current device list */
- if (modes & SOUND_DEVICE_BLUETOOTH_MODE_VOICE) {
- dbg("BT Voice is enabled");
- audio_handle->current_device_list |= CALLMGR_AUDIO_DEVICE_BT_E;
- is_connected = TRUE;
- } else {
- dbg("BT Voice is disabled");
- if (audio_handle->current_device_list & CALLMGR_AUDIO_DEVICE_BT_E)
- audio_handle->current_device_list -= CALLMGR_AUDIO_DEVICE_BT_E;
- is_connected = FALSE;
- }
-
- /* Invoke device changed cb */
+ else if (device_type == SOUND_DEVICE_BLUETOOTH_VOICE)
audio_handle->cb_fn(CM_AUDIO_EVENT_BT_CHANGED_E, (void *)is_connected, audio_handle->user_data);
- }
}
int _callmgr_audio_init(callmgr_audio_handle_h *audio_handle, audio_event_cb cb_fn, void *user_data)
*audio_handle = handle;
/* Get current device list */
- ret = sound_manager_get_current_device_list(SOUND_DEVICE_ALL_MASK, &device_list);
+ ret = sound_manager_get_device_list(SOUND_DEVICE_ALL_MASK, &device_list);
if (ret != SOUND_MANAGER_ERROR_NONE) {
- err("sound_manager_get_current_device_list() failed. [%d][%s]", ret, get_error_message(ret));
+ err("sound_manager_get_device_list() failed. [%d][%s]", ret, get_error_message(ret));
return -1;
}
sound_manager_get_device_type(device, &device_type);
if (device_type == SOUND_DEVICE_AUDIO_JACK) {
handle->current_device_list |= CALLMGR_AUDIO_DEVICE_EARJACK_E;
- } else if (device_type == SOUND_DEVICE_BLUETOOTH) {
- int modes;
- sound_manager_get_bt_device_avail_modes(device, &modes);
- if (modes & SOUND_DEVICE_BLUETOOTH_MODE_VOICE) {
- dbg("BT device is connected and BT Voice is enabled.");
- handle->current_device_list |= CALLMGR_AUDIO_DEVICE_BT_E;
- } else {
- dbg("BT device is connected. But, BT Voice is disabled.");
- }
+ } else if (device_type == SOUND_DEVICE_BLUETOOTH_VOICE) {
+ handle->current_device_list |= CALLMGR_AUDIO_DEVICE_BT_E;
}
}
dbg("Current device list [0x%x]", handle->current_device_list);
sound_manager_free_device_list(device_list);
/* Set device connected cb */
- ret = sound_manager_set_device_connected_cb(SOUND_DEVICE_ALL_MASK, __callmgr_audio_available_route_changed_cb, handle);
- if (ret != SOUND_MANAGER_ERROR_NONE) {
- err("sound_manager_set_device_connected_cb() failed. [%d][%s]", ret, get_error_message(ret));
- return -1;
- }
-
- /* Set device information changed cb */
- ret = sound_manager_set_device_information_changed_cb(SOUND_DEVICE_ALL_MASK, __callmgr_audio_device_information_changed_cb, handle);
+ ret = sound_manager_add_device_connection_changed_cb(SOUND_DEVICE_ALL_MASK, __callmgr_audio_available_route_changed_cb, handle, &handle->device_cb_id);
if (ret != SOUND_MANAGER_ERROR_NONE) {
- err("sound_manager_set_device_information_changed_cb() failed. [%d][%s]", ret, get_error_message(ret));
+ err("sound_manager_add_device_connection_changed_cb() failed. [%d][%s]", ret, get_error_message(ret));
return -1;
}
/* TODO: Release all handles */
- sound_manager_unset_device_connected_cb();
- sound_manager_unset_device_information_changed_cb();
+ sound_manager_remove_device_connection_changed_cb(audio_handle->device_cb_id);
_callmgr_audio_destroy_call_sound_session(audio_handle);
g_free(audio_handle);
device_type = SOUND_DEVICE_AUDIO_JACK;
break;
case CALLMGR_AUDIO_ROUTE_BT_E:
- device_type = SOUND_DEVICE_BLUETOOTH;
+ device_type = SOUND_DEVICE_BLUETOOTH_VOICE;
break;
default:
err("unhandled route[%d]", route);
case SOUND_DEVICE_AUDIO_JACK:
route = CALLMGR_AUDIO_ROUTE_EARJACK_E;
break;
- case SOUND_DEVICE_BLUETOOTH:
+ case SOUND_DEVICE_BLUETOOTH_VOICE:
route = CALLMGR_AUDIO_ROUTE_BT_E;
break;
default: