Loading system/blueberry/facade/topshim/facade.proto +2 −2 Original line number Original line Diff line number Diff line Loading @@ -208,7 +208,7 @@ message StopSlcResponse { message ConnectAudioRequest { message ConnectAudioRequest { Connection connection = 1; Connection connection = 1; bool is_sco_offload_enabled = 2; bool is_sco_offload_enabled = 2; bool force_cvsd = 3; int32 disabled_codecs = 3; } } message ConnectAudioResponse { message ConnectAudioResponse { Loading system/blueberry/tests/topshim/lib/hfp_client.py +2 −2 Original line number Original line Diff line number Diff line Loading @@ -63,13 +63,13 @@ class HfpClient(AsyncClosable): facade_pb2.StopSlcRequest(connection=facade_pb2.Connection(cookie=address.encode()))) facade_pb2.StopSlcRequest(connection=facade_pb2.Connection(cookie=address.encode()))) return await self._listen_for_event(facade_pb2.EventType.HFP_CONNECTION_STATE) return await self._listen_for_event(facade_pb2.EventType.HFP_CONNECTION_STATE) async def connect_audio(self, address, is_sco_offload_enabled=False, force_cvsd=False): async def connect_audio(self, address, is_sco_offload_enabled=False, disabled_codecs=0): """ """ """ """ await self.__hfp_stub.ConnectAudio( await self.__hfp_stub.ConnectAudio( facade_pb2.ConnectAudioRequest(connection=facade_pb2.Connection(cookie=address.encode()), facade_pb2.ConnectAudioRequest(connection=facade_pb2.Connection(cookie=address.encode()), is_sco_offload_enabled=is_sco_offload_enabled, is_sco_offload_enabled=is_sco_offload_enabled, force_cvsd=force_cvsd)) disabled_codecs=disabled_codecs)) async def disconnect_audio(self, address): async def disconnect_audio(self, address): """ """ Loading system/bta/ag/bta_ag_api.cc +6 −4 Original line number Original line Diff line number Diff line Loading @@ -159,16 +159,18 @@ void BTA_AgClose(uint16_t handle) { * Function BTA_AgAudioOpen * Function BTA_AgAudioOpen * * * Description Opens an audio connection to the currently connected * Description Opens an audio connection to the currently connected * headset or handsfree. Specifying force_cvsd to true to * headset or handsfree. Specify `disabled_codecs` to * force the stack to use CVSD even if mSBC is supported. * force the stack to avoid using certain codecs. * * Note that CVSD is a mandatory codec and cannot be disabled. * * * * * Returns void * Returns void * * ******************************************************************************/ ******************************************************************************/ void BTA_AgAudioOpen(uint16_t handle, bool force_cvsd) { void BTA_AgAudioOpen(uint16_t handle, tBTA_AG_PEER_CODEC disabled_codecs) { tBTA_AG_DATA data = {}; tBTA_AG_DATA data = {}; data.api_audio_open.force_cvsd = force_cvsd; data.api_audio_open.disabled_codecs = disabled_codecs; do_in_main_thread(FROM_HERE, base::Bind(&bta_ag_sm_execute_by_handle, handle, do_in_main_thread(FROM_HERE, base::Bind(&bta_ag_sm_execute_by_handle, handle, BTA_AG_API_AUDIO_OPEN_EVT, data)); BTA_AG_API_AUDIO_OPEN_EVT, data)); } } Loading system/bta/ag/bta_ag_cmd.cc +4 −2 Original line number Original line Diff line number Diff line Loading @@ -1260,10 +1260,12 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type, bool swb_supported = hfp_hal_interface::get_swb_supported(); bool swb_supported = hfp_hal_interface::get_swb_supported(); if ((p_scb->peer_codecs & BTM_SCO_CODEC_LC3) && swb_supported) { if (swb_supported && (p_scb->peer_codecs & BTM_SCO_CODEC_LC3) && !(p_scb->disabled_codecs & BTM_SCO_CODEC_LC3)) { p_scb->sco_codec = BTM_SCO_CODEC_LC3; p_scb->sco_codec = BTM_SCO_CODEC_LC3; APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to LC3"); APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to LC3"); } else if (p_scb->peer_codecs & BTM_SCO_CODEC_MSBC) { } else if ((p_scb->peer_codecs & BTM_SCO_CODEC_MSBC) && !(p_scb->disabled_codecs & BTM_SCO_CODEC_MSBC)) { p_scb->sco_codec = BTM_SCO_CODEC_MSBC; p_scb->sco_codec = BTM_SCO_CODEC_MSBC; APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to MSBC"); APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to MSBC"); } else { } else { Loading system/bta/ag/bta_ag_int.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -136,7 +136,7 @@ typedef struct { /* data type for BTA_AG_API_AUDIO_OPEN_EVT */ /* data type for BTA_AG_API_AUDIO_OPEN_EVT */ typedef struct { typedef struct { bool force_cvsd; tBTA_AG_PEER_CODEC disabled_codecs; } tBTA_AG_API_AUDIO_OPEN; } tBTA_AG_API_AUDIO_OPEN; /* data type for BTA_AG_API_RESULT_EVT */ /* data type for BTA_AG_API_RESULT_EVT */ Loading Loading @@ -252,6 +252,8 @@ struct tBTA_AG_SCB { alarm_t* ring_timer; alarm_t* ring_timer; alarm_t* codec_negotiation_timer; alarm_t* codec_negotiation_timer; bool received_at_bac; /* indicate AT+BAC is received at least once */ bool received_at_bac; /* indicate AT+BAC is received at least once */ tBTA_AG_PEER_CODEC disabled_codecs; /* set by app to block certain codecs from being used */ tBTA_AG_PEER_CODEC peer_codecs; /* codecs for eSCO supported by the peer */ tBTA_AG_PEER_CODEC peer_codecs; /* codecs for eSCO supported by the peer */ tBTA_AG_PEER_CODEC sco_codec; /* codec to be used for eSCO connection */ tBTA_AG_PEER_CODEC sco_codec; /* codec to be used for eSCO connection */ tBTA_AG_PEER_CODEC tBTA_AG_PEER_CODEC Loading Loading
system/blueberry/facade/topshim/facade.proto +2 −2 Original line number Original line Diff line number Diff line Loading @@ -208,7 +208,7 @@ message StopSlcResponse { message ConnectAudioRequest { message ConnectAudioRequest { Connection connection = 1; Connection connection = 1; bool is_sco_offload_enabled = 2; bool is_sco_offload_enabled = 2; bool force_cvsd = 3; int32 disabled_codecs = 3; } } message ConnectAudioResponse { message ConnectAudioResponse { Loading
system/blueberry/tests/topshim/lib/hfp_client.py +2 −2 Original line number Original line Diff line number Diff line Loading @@ -63,13 +63,13 @@ class HfpClient(AsyncClosable): facade_pb2.StopSlcRequest(connection=facade_pb2.Connection(cookie=address.encode()))) facade_pb2.StopSlcRequest(connection=facade_pb2.Connection(cookie=address.encode()))) return await self._listen_for_event(facade_pb2.EventType.HFP_CONNECTION_STATE) return await self._listen_for_event(facade_pb2.EventType.HFP_CONNECTION_STATE) async def connect_audio(self, address, is_sco_offload_enabled=False, force_cvsd=False): async def connect_audio(self, address, is_sco_offload_enabled=False, disabled_codecs=0): """ """ """ """ await self.__hfp_stub.ConnectAudio( await self.__hfp_stub.ConnectAudio( facade_pb2.ConnectAudioRequest(connection=facade_pb2.Connection(cookie=address.encode()), facade_pb2.ConnectAudioRequest(connection=facade_pb2.Connection(cookie=address.encode()), is_sco_offload_enabled=is_sco_offload_enabled, is_sco_offload_enabled=is_sco_offload_enabled, force_cvsd=force_cvsd)) disabled_codecs=disabled_codecs)) async def disconnect_audio(self, address): async def disconnect_audio(self, address): """ """ Loading
system/bta/ag/bta_ag_api.cc +6 −4 Original line number Original line Diff line number Diff line Loading @@ -159,16 +159,18 @@ void BTA_AgClose(uint16_t handle) { * Function BTA_AgAudioOpen * Function BTA_AgAudioOpen * * * Description Opens an audio connection to the currently connected * Description Opens an audio connection to the currently connected * headset or handsfree. Specifying force_cvsd to true to * headset or handsfree. Specify `disabled_codecs` to * force the stack to use CVSD even if mSBC is supported. * force the stack to avoid using certain codecs. * * Note that CVSD is a mandatory codec and cannot be disabled. * * * * * Returns void * Returns void * * ******************************************************************************/ ******************************************************************************/ void BTA_AgAudioOpen(uint16_t handle, bool force_cvsd) { void BTA_AgAudioOpen(uint16_t handle, tBTA_AG_PEER_CODEC disabled_codecs) { tBTA_AG_DATA data = {}; tBTA_AG_DATA data = {}; data.api_audio_open.force_cvsd = force_cvsd; data.api_audio_open.disabled_codecs = disabled_codecs; do_in_main_thread(FROM_HERE, base::Bind(&bta_ag_sm_execute_by_handle, handle, do_in_main_thread(FROM_HERE, base::Bind(&bta_ag_sm_execute_by_handle, handle, BTA_AG_API_AUDIO_OPEN_EVT, data)); BTA_AG_API_AUDIO_OPEN_EVT, data)); } } Loading
system/bta/ag/bta_ag_cmd.cc +4 −2 Original line number Original line Diff line number Diff line Loading @@ -1260,10 +1260,12 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type, bool swb_supported = hfp_hal_interface::get_swb_supported(); bool swb_supported = hfp_hal_interface::get_swb_supported(); if ((p_scb->peer_codecs & BTM_SCO_CODEC_LC3) && swb_supported) { if (swb_supported && (p_scb->peer_codecs & BTM_SCO_CODEC_LC3) && !(p_scb->disabled_codecs & BTM_SCO_CODEC_LC3)) { p_scb->sco_codec = BTM_SCO_CODEC_LC3; p_scb->sco_codec = BTM_SCO_CODEC_LC3; APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to LC3"); APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to LC3"); } else if (p_scb->peer_codecs & BTM_SCO_CODEC_MSBC) { } else if ((p_scb->peer_codecs & BTM_SCO_CODEC_MSBC) && !(p_scb->disabled_codecs & BTM_SCO_CODEC_MSBC)) { p_scb->sco_codec = BTM_SCO_CODEC_MSBC; p_scb->sco_codec = BTM_SCO_CODEC_MSBC; APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to MSBC"); APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to MSBC"); } else { } else { Loading
system/bta/ag/bta_ag_int.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -136,7 +136,7 @@ typedef struct { /* data type for BTA_AG_API_AUDIO_OPEN_EVT */ /* data type for BTA_AG_API_AUDIO_OPEN_EVT */ typedef struct { typedef struct { bool force_cvsd; tBTA_AG_PEER_CODEC disabled_codecs; } tBTA_AG_API_AUDIO_OPEN; } tBTA_AG_API_AUDIO_OPEN; /* data type for BTA_AG_API_RESULT_EVT */ /* data type for BTA_AG_API_RESULT_EVT */ Loading Loading @@ -252,6 +252,8 @@ struct tBTA_AG_SCB { alarm_t* ring_timer; alarm_t* ring_timer; alarm_t* codec_negotiation_timer; alarm_t* codec_negotiation_timer; bool received_at_bac; /* indicate AT+BAC is received at least once */ bool received_at_bac; /* indicate AT+BAC is received at least once */ tBTA_AG_PEER_CODEC disabled_codecs; /* set by app to block certain codecs from being used */ tBTA_AG_PEER_CODEC peer_codecs; /* codecs for eSCO supported by the peer */ tBTA_AG_PEER_CODEC peer_codecs; /* codecs for eSCO supported by the peer */ tBTA_AG_PEER_CODEC sco_codec; /* codec to be used for eSCO connection */ tBTA_AG_PEER_CODEC sco_codec; /* codec to be used for eSCO connection */ tBTA_AG_PEER_CODEC tBTA_AG_PEER_CODEC Loading