OSDN Git Service
Treehugger Robot [Fri, 11 May 2018 21:53:02 +0000 (21:53 +0000)]
Merge "HFP: Workaround for car kits that do not send AT+BAC command"
Treehugger Robot [Fri, 11 May 2018 21:06:43 +0000 (21:06 +0000)]
Merge "Explicitly restart audio processing when switching active device"
Pavlin Radoslavov [Thu, 10 May 2018 16:52:58 +0000 (09:52 -0700)]
Explicitly restart audio processing when switching active device
* Add internal APIs to restart A2DP session and use them
when switching the A2DP active device:
btif_a2dp_source_restart_session() and btif_a2dp_sink_restart_session() .
* Removed internal A2DP Source APIs that shouldn't be APIs
* Call immediately btif_a2dp_on_stopped() when processing
BTIF_AV_STOP_STREAM_REQ_EVT event to stop sooner the audio
datapath processing and report back to the Audio HAL call.
This eliminates the need for waiting for the BTA_AV_STOP_EVT
upcall event from the remote device.
* Added extra log information when processing events in the BtifAv
state machine.
Bug:
78360113
Test: Manual: streaming A2DP, change active device, change codec setup.
Change-Id: Icb356587af9cfaee7aea9f3f9bc95a0fe000fc52
Jack He [Tue, 1 May 2018 06:59:40 +0000 (23:59 -0700)]
HFP: Workaround for car kits that do not send AT+BAC command
* Some misbehaving HF devices (e.g. some Hyundai car kits) indicate
their support on Wide Band Speech and Codec Negotiation, but do not
send the required AT+BAC command during Service Level Connection
setup. However, such car kits still expect Fluoride to do codec
negotiation during SCO setup.
* This CL adds a workaround so that when HF indicates support for WBS
and codec negotiation, Fluoride will attempt codec negotiation even
though AT+BAC is never received.
* Store the SDP feature locally. If WBS is supported and no AT+BAC is
received, use the SDP features to set the suported codec.
Bug:
77883405
Test: make, connect SCO to and from Hyundai car kits
Change-Id: I2be6007022183cac5b9006f37089a587b4a67372
Treehugger Robot [Thu, 10 May 2018 22:35:02 +0000 (22:35 +0000)]
Merge "Add helper classes to auto indent newlines for ostreams"
Treehugger Robot [Thu, 10 May 2018 21:23:46 +0000 (21:23 +0000)]
Merge "Hearing Aid: Add dumpsys log for audio packet"
Jakub Pawlowski [Thu, 10 May 2018 13:42:43 +0000 (06:42 -0700)]
HearingAid RemoveDevice - don't crash when profile not enabled
Bug:
79468820
Test: Unbond non-hearing aid device when profile not enabled
Change-Id: I2a87f8725447045e7bc5b2a33facf1ce14b47c54
Hansong Zhang [Wed, 9 May 2018 21:39:56 +0000 (14:39 -0700)]
Hearing Aid: Add dumpsys log for audio packet
Add log for audio drops from audio HAL and buffer overflow
Add log for device capabilities and HiSyncId
Sample output:
Hearing Aid Manager:
<device1> connected
binaural right 0x...
Packet counts (enqueued/flushed) : 73557 / 773
Frame counts (enqueued/flushed) : 73557 / 773
<device2> connected
binaural left 0x...
Packet counts (enqueued/flushed) : 74172 / 886
Frame counts (enqueued/flushed) : 74172 / 886
Hearing Aid Audio HAL:
Counts (underflow) : 0
Bytes (underflow) : 0
Last update time ago in ms (underflow) : 0
Test: manual
Bug:
69623109
Change-Id: I5021b9214828b1846506638000f29af7343a3354
Treehugger Robot [Thu, 10 May 2018 00:58:48 +0000 (00:58 +0000)]
Merge "A2DP: Add logging when A2DP fails to open"
Vinit Deshpande [Wed, 9 May 2018 23:58:48 +0000 (23:58 +0000)]
Merge "Fix LE cancel open when physical connection is established but not ready"
Jack He [Wed, 9 May 2018 22:44:09 +0000 (15:44 -0700)]
A2DP: Add logging when A2DP fails to open
* Make sure we output a log line whenever A2DP start request returns a
failure state, namingly:
- A2DP_CTRL_ACK_FAILURE
- A2DP_CTRL_ACK_INCALL_FAILURE
- A2DP_CTRL_ACK_DISCONNECT_IN_PROGRESS
Bug:
74988740
Test: make, logging only change
Change-Id: I63280d6280bf9c3d3ee6c578c1be332f8a9a3be0
WENTAO WANG [Mon, 20 Nov 2017 21:10:07 +0000 (13:10 -0800)]
Fix LE cancel open when physical connection is established but not ready
Issue:
Cancel open does not work when the physical connection is established
but negotiation is not finished.
Fix:
Close the physical connection and release resources when fitting in this
situation.
Bug:
64230040
Test: test_cancel_open_ble_process
Change-Id: Ia23b5f3aab427b333d9d484b97e4cd4ff49f5319
Treehugger Robot [Wed, 9 May 2018 20:23:34 +0000 (20:23 +0000)]
Merge "Fix PTS: TC_GATT_SR_UNS_BI_01_C sends unsupported opcode"
Ajay Panicker [Thu, 3 May 2018 19:58:53 +0000 (12:58 -0700)]
Add helper classes to auto indent newlines for ostreams
Bug:
79167906
Test: adb shell dumpsys bluetooth_manager
Change-Id: I54484181abc438e90ade771fca6943c2b303e4db
Stanley Tng [Wed, 9 May 2018 17:39:37 +0000 (10:39 -0700)]
Fix PTS: TC_GATT_SR_UNS_BI_01_C sends unsupported opcode
In this PTS test, add code to send back an unsupported error response
when an unsupported OpCode is received.
Bug:
79347869
Test: Rerun and pass PTS test
Change-Id: Ibf95dbc18dabbe201850da675c7a1b2739624de9
Jakub Pawlowski [Wed, 9 May 2018 08:06:15 +0000 (08:06 +0000)]
Merge "Handle unbonding in Hearing Aid profile"
Dan Willemsen [Wed, 9 May 2018 05:59:03 +0000 (05:59 +0000)]
Merge "Remove unused `tags` property from Android.bp files"
Pavlin Radoslavov [Wed, 9 May 2018 01:00:24 +0000 (18:00 -0700)]
Fetch the presentation position only if the audio state is STARTED
The audio HAL will fetch the audio presentation position (for the
purpose of delay reporting if the Headset supports it) only if the
audio state is STARTED.
Otherwise, it will use the default value (e.g., the one used
when the Headset does not support delay reporting).
This avoids unnecessary transient re-opening of the HAL control path
between the Audio framework and Bluetooth native stack (e.g., during
shutdown).
Bug:
78360113
Test: Manual - A2DP streaming with Headsets that support delay reporting
Change-Id: I56f7e9373ba27606913c74fa818da40305df85d4
android-build-prod (mdb) [Wed, 9 May 2018 00:25:12 +0000 (00:25 +0000)]
Merge "HFP: Remove parameter to start/stopScoUsingVirtualVoiceCall"
Dan Willemsen [Wed, 9 May 2018 00:08:54 +0000 (17:08 -0700)]
Remove unused `tags` property from Android.bp files
The tags property is (and has always been) unused by Soong. The property has
been defined as a list of strings, and the `androidmk` converted any
LOCAL_MODULE_TAGS entries over to it, but we've never done anything with it.
In preparation for removing the definition from Soong, I'm removing it from all
Android.bp files in the tree.
Since this has never done anything, this is a no-op, but if you really did want
the Android.mk behavior, the proper way to define a module to be installed in
userdebug / eng builds is to use PRODUCT_PACKAGES_DEBUG or PRODUCT_PACKAGES_ENG
in the appropriate product makefile.
Change-Id: I48cba711acbc030a98aea674016a0d53f8b5e4aa
Exempt-From-Owner-Approval: global no-op build change
Test: remove `tags` from Soong, see errors go away.
Jakub Pawlowski [Tue, 8 May 2018 14:44:43 +0000 (07:44 -0700)]
Handle unbonding in Hearing Aid profile
Bug:
69623109
Change-Id: I3b1f778e414511a3748cebd2b0e233d638cd4d43
Fixes:
79207134
Test: unbond from Hearing Aid when connected or disconnected from it
android-build-prod (mdb) [Tue, 8 May 2018 17:37:04 +0000 (17:37 +0000)]
Merge "Return early if vendor-specific command fails"
Ajay Panicker [Tue, 8 May 2018 16:37:15 +0000 (16:37 +0000)]
Merge "Send correct key state and ignore keys from inactive device (1/2)"
Myles Watson [Thu, 3 May 2018 18:15:50 +0000 (11:15 -0700)]
Return early if vendor-specific command fails
Add CHECK() statements to crash if the callback is passed the incorrect
opcode or if there are no parameters.
Bug:
76192234
Bug:
77495521
Test: Start Bluetooth with a BT 3.0 chip (or a simulated one)
Change-Id: Iddd9a8503b2cfd52b16fb1c59f40e108b478e7b6
android-build-prod (mdb) [Tue, 8 May 2018 01:03:03 +0000 (01:03 +0000)]
Merge "Fixed PTS: TC_GATT_SR_GAR_BI_01_C failure"
Stanley Tng [Mon, 7 May 2018 21:58:36 +0000 (14:58 -0700)]
Fixed PTS: TC_GATT_SR_GAR_BI_01_C failure
When the GATT Read Request has bad handle parameters, returns the
GATT_INVALID_HANDLE error code instead of GATT_INVALID_PDU.
Bug:
79340029
Test: Rerun PTS
Change-Id: I9de576076d7f7aece0831ef57b01c07a24209010
Ajay Panicker [Fri, 4 May 2018 21:30:45 +0000 (14:30 -0700)]
Send correct key state and ignore keys from inactive device (1/2)
Also make it clearer whether the key state is pushed or released.
Bug:
79178216
Test: Run host native test net_test_avrcp
Change-Id: I8595ac97718bcb2af8f33643df4b9c8059a1b30b
Jack He [Thu, 3 May 2018 23:37:09 +0000 (16:37 -0700)]
HFP: Remove parameter to start/stopScoUsingVirtualVoiceCall
* Since HFP SCO routing is managed by setActiveDevice, there is no need
for an input parameter to start/stopScoUsingVirtualVoiceCall
Bug:
76114959
Test: build
Change-Id: I2a3f9f7cb1191e2831d30630b2e0c3bee4a0acdb
(cherry picked from commit
426e87e3bada2116580e74815c4e03db78b8105a)
android-build-prod (mdb) [Mon, 7 May 2018 06:43:54 +0000 (06:43 +0000)]
Merge "BTM_BleClearBgConnDev: Return if there is no BLE"
Ajay Panicker [Fri, 27 Apr 2018 13:59:22 +0000 (06:59 -0700)]
Implement GetTotalNumberOfItems response for AVRCP Browsing
Bug:
78636552
Test: run host test net_test_avrcp
Change-Id: Ie05d23874317978eb619d0e56a89f2c880166a52
Merged-In: Ie05d23874317978eb619d0e56a89f2c880166a52
(cherry picked from commit
16aa6a075e5cbb7c97bbc639b876221038212b62)
Myles Watson [Fri, 4 May 2018 17:15:46 +0000 (10:15 -0700)]
BTM_BleClearBgConnDev: Return if there is no BLE
Bug:
77495521
Bug:
76192234
Test: Start Bluetooth with a BT 3.0 chip (or a simulated one)
Change-Id: I718b7532bbba6100dd51c0677a44d41a2db0ce26
Pavlin Radoslavov [Wed, 2 May 2018 22:09:42 +0000 (15:09 -0700)]
Increase the A2DP version from 1.2 to 1.3
Some headsets do not support properly the AVDTP 1.3 Delay Reporting
if the A2DP version is 1.2 .
Bug:
78409461
Test: Manual with Headsets that support AVDTP 1.3 Delay Reporting
TestTracker/161070
Change-Id: Ia1e3afb3b5159101bc65b036ca5bd9f55ed4c431
Myles Watson [Thu, 3 May 2018 18:13:55 +0000 (11:13 -0700)]
bta: Only call get_acl_data_size_ble for LE
Pass 0xFFFF (max uint16_t) to GAP_ConnOpen, which will call
get_acl_data_size_ble() to correct the value, but only when the
connection type is LE.
Bug:
77495521
Bug:
76192234
Test: Start Bluetooth with a BT 3.0 chip (or a simulated one)
Change-Id: If46ea249081fc058faf09bcb5149f21d8baf7aa7
Ajay Panicker [Thu, 3 May 2018 20:08:53 +0000 (20:08 +0000)]
Merge "Add AVRCP native logging to dumpsys"
Hemant Gupta [Fri, 2 Mar 2018 04:59:25 +0000 (10:29 +0530)]
HID: Update state to disconnected in virtual unplug
Usecase:
1.Pair and connect DUT with Remote device
2.Disconnect Remote device from DUT (Settings menu)
3.Connect to Remote device from settings menu when Remote will not be
advertising.
4.With in 30 secs of connect command, delete the stored link key and then pair
and connect again to Remote device from settings menu
(when RD is advertising).
Expected Result:
Remote device should connect successfully.
Observed Result:
Remote device is shown in paired devices(settings menu)but not connected.
Root cause:
When virtual unplug happens device state is not cleared properly. So next
time when we are trying to connect its going to connected state.
Fix:
Update the current device state to BTHH_CONN_STATE_CONNECTING to
BTIF_HH_DEV_DISCONNECTED when virtual unplug happens.
Test: Issue is not seen after above steps
Fixes:
74082929
Change-Id: I8a325987ff5eb0a8e4f8708fc7c76b8a9ade6ccf
Ajay Panicker [Wed, 2 May 2018 00:29:07 +0000 (17:29 -0700)]
Use weak pointers instead of base::Unretained to prevent use after free
Bug:
78517259
Test: Compile and switch users while AVRCP is connected
Change-Id: I9eb4482e4de52fed7750747afdc7cfb5402615a4
Ajay Panicker [Wed, 2 May 2018 23:23:13 +0000 (16:23 -0700)]
Add AVRCP native logging to dumpsys
Example output
AVRCP Target Native Service: 2 devices
d4:90:9c:0a:48:d0
Current Volume: 42
Current Browsed Player ID: -1
Registered Notifications:
Play Status
Last Play State: 2
Last Song Sent ID: ""
Current Folder: ""
MTU Sizes: CTRL=1020 BROWSE=332
Bug:
79167906
Test: adb shell dumpsys bluetooth_manager
Change-Id: I749dc3c568ac7793ac924ab1e46c3fc7ae42a260
android-build-prod (mdb) [Wed, 2 May 2018 19:59:48 +0000 (19:59 +0000)]
Merge "Ignore volume changed events from the non-active device"
android-build-prod (mdb) [Wed, 2 May 2018 18:19:53 +0000 (18:19 +0000)]
Merge "Hearing Aid: leave some radio time for other devices"
Ajay Panicker [Wed, 2 May 2018 17:05:24 +0000 (10:05 -0700)]
Ignore volume changed events from the non-active device
Bug:
78251684
Test: Run host native test net_test_avrcp
Change-Id: I164e9ded88c804da2ce8191c5f58cc053cfa6ecd
Ajay Panicker [Wed, 2 May 2018 17:55:48 +0000 (17:55 +0000)]
Merge "Use weak pointers to prevent callbacks from executing after cleanup"
Ajay Panicker [Wed, 2 May 2018 17:52:37 +0000 (17:52 +0000)]
Merge "Use the wrapped volume interface with the AVRCP conneciton handler"
Jakub Pawlowski [Thu, 15 Mar 2018 18:37:06 +0000 (11:37 -0700)]
Hearing Aid: leave some radio time for other devices
We should send maximum two packets in connection event, and they
should take less than 3.75ms with acknowledgements.
Leaving some radio time should make us able to keep third LE connection
to some less demanding devices.
Bug:
78364114
Bug:
69623109
Test: stream music through Hearing Aid and connect to some LE device
Change-Id: Ie97b9db456a957c11438208448c562435b1b0222
Joseph Pirozzo [Wed, 2 May 2018 15:34:17 +0000 (15:34 +0000)]
Merge "Fix memory leak for BTRC_ITEM_MEDIA."
Ajay Panicker [Thu, 19 Apr 2018 22:17:16 +0000 (15:17 -0700)]
Use weak pointers to prevent callbacks from executing after cleanup
Switch from using the instance directly to using weak pointers to the
instance. This causes any base::Callback objects that are bound to that
weak instance to be cleaned up if the weak pointer becomes invalid.
Bug:
78134184
Test: valgrind ./net_test_avrcp
--gtest_filter=*disconnectAfterCleanupTest* and see that there is an
invalid read before the fix and it is gone after.
Change-Id: I46c3175e62b87be165e468d014155f8d8154c08a
Pavlin Radoslavov [Tue, 1 May 2018 00:57:34 +0000 (17:57 -0700)]
Add a missing call to btif_av_stream_stop() for SetActivePeer(null)
Without this call, the BtifAv state machine could be left in Started
state, while the A2DP media task timer is canceled.
This internal state inconsistency prevents the proper handling
of Audio HAL commands like SUSPEND - no ACK is returned and
the Audio HAL is blocked.
Bug: b/
78901123
Test: Manual - play music to Headset, select "play media to" > This device
resume music, select "play media to" > Bluetooth Headet
Change-Id: I11b280bea76de02f522e61ebb0a9d7eb5b50f993
Pavlin Radoslavov [Mon, 30 Apr 2018 20:39:20 +0000 (13:39 -0700)]
Fix A2DP Suspend related multi-component deadlock
Apparently, the processing of A2DP Suspend from the Audio HAL
could result in a deadlock across multiple components:
A2dpService -> AudioService -> Audio-BT HAL -> BT Native Stack ->
BT JNI upcall -> A2dpService
1) A2dpService -> AudioService:
- Waiting inside setActiveDevice() -> synchronized (mStateMachines) ->
mAudioManager.setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent()
- The mAudioManager call can be blocking: a followup call would wait
for the previous call to complete.
2) AudioService -> Audio-BT HAL
The AudioService is wating on the Audio-BT HAL to complete its request.
In this case the request is SUSPEND
3) Audio-BT HAL -> BT Native Stack
The Audio side of the Audio-BT HAL is waiting for the BT Native stack
to ACK the SUSPEND command.
More specifically, it is retrying few times with timeout of 250ms
each iteration.
4) BT Native Stack -> BT JNI upcall
- In the BT Native Stack the BtifAv FSM (see file btif/src/btif_av.cc)
is in state StateStarted and has received the
BTIF_AV_SUSPEND_STREAM_REQ_EVT because of the SUSPEND command from the
Audio HAL.
- As a result, the LocalSuspendPending flag has been set:
peer_.SetFlags(BtifAvPeer::kFlagLocalSuspendPending);
- Only after the above flag is reset, then the BT Native Stack will
ACK the SUSPEND command from the HAL
- The above flag will be reset when event BTA_AV_SUSPEND_EVT is received
from the underlying stack
- The BtifAv state machine has received the BTA_AV_SUSPEND_EVT event.
However, prior to clearing the pending status, the FSM tries to
report the audio state via JNI to the Java layer:
btif_report_audio_state();
...
peer_.ClearFlags(BtifAvPeer::kFlagLocalSuspendPending);
- Apparently, all the processing inside the BtifAv FSM is done on
the JNI thread, including the btif_report_audio_state() upcall.
5) BT JNI upcall -> A2dpService
- The btif_report_audio_state() upcall calls indirectly
A2dpNativeInterface.onAudioStateChanged() -> sendMessageToService() ->
A2dpService.messageFromNative()
- Within the A2dpService.messageFromNative() processing, there is
"synchronized (mStateMachines) {}" block, and the processing there
blocks because per (1) above A2dpService.setActiveDevice() is
already inside its own "synchronized (mStateMachines) {}" block
The above deadlock is fixed by the following:
- Modified the BTA_AV_SUSPEND_EVT processing such that
the clearing of the kFlagLocalSuspendPending flag is done BEFORE
the btif_report_audio_state()
- Modified the BtifAv FSM such that the internal processing of the FSM
events is done on the BTA thread instead of the JNI thread. Thus,
the FSM processing cannot be blocked by JNI upcalls.
Also:
- Updated the do_in_bta_thread() function to have a return value
so it is more aligned with the corresponding do_in_jni_thread()
implementation
- Updated the reordering of some other btif_report_*() upcalls inside
btif_av.cc so they are after the FSM internal processing in the
current state.
- Added few extra logs to the Audio-BT HAL (file audio_a2dp_hw.cc).
Bug:
72823323
Test: Disconnect/reconnect with Philips SBH7000 Headset
Change-Id: I7ccb558e458a8e90d0414f94463bda8d4b3fdc97
Joseph Pirozzo [Mon, 30 Apr 2018 19:23:18 +0000 (12:23 -0700)]
Fix memory leak for BTRC_ITEM_MEDIA.
Memory is allocated for each media item received from a remote phone for
AVRCP media browsing. Although the media item itself was freed, the
memory for each attribute was not freed. Move the allocation up to
the parent function such that it can be allocated and freed in the same
location.
Bug:
78222934
Test: dumpsys meminfo com.android.bluetooth
Change-Id: I217830441949642cd6ef0f96ac5fde9251452095
Pulkit Bhuwalka [Thu, 22 Mar 2018 21:34:33 +0000 (14:34 -0700)]
Add ability to modify IO capability of Bluetooth device
Redirects all access to Bluetooth IO capability from
macros. This allows it to be config determined but fall back to #define
values to maintain backward compatibility.
There is also the addition of methods to set IO capability properties.
Since these are done at the adapter level, it reuses
set_adapter_property from the bluetooth interface by adding new
property configs.
Bug:
36015413
Test: Created a test activity to modify values using the API and pair
with different settings. Default value is picked up from macro.
Change-Id: I7b80ea70cef4eacab91d20a58e745281aed273cd
(cherry picked from commit
7a5281f7ffe6860f15fcc088c63b1109f98c0e0e)
android-build-prod (mdb) [Fri, 27 Apr 2018 23:58:07 +0000 (23:58 +0000)]
Merge "RFCOMM: Crash on null MCB and PORT in state machine"
Guang Xie [Thu, 15 Feb 2018 20:42:15 +0000 (12:42 -0800)]
Enable HCI Sniff mode and disable subrating for A2DP
Enabling the HCI Sniff mode could help headsets to save power.
Note that subrating is disabled implicitly by NOT sending the
"Sent Sniff Subrating" HCI command to the BT controller,
and effectively using the default Sniff Subrating parameters.
The Headset shouldn't go into Subrating Mode to prevent
potential stuttering if the Headset chooses to use subrating
with the wrong parameters.
NOTE: This should affect only Pixel Buds.
Also:
- Added some extra log messages
- Minor cleanup (argument/variable renaming)
Bug:
74344711
Bug:
74361002
Test: Manual - audio streaming; examine btsnoop logs
Change-Id: Iec5086dba6f9003c21bcb41eddb3bc83ac7dddd1
Jack He [Fri, 27 Apr 2018 19:00:50 +0000 (12:00 -0700)]
RFCOMM: Crash on null MCB and PORT in state machine
* rfc_mx_sm_execute should never receive a NULL mcb
* rfc_port_sm_execute should never receive a NULL port
* If the above happens, we should crash since otherwise we might miss a
state machine event and not knowing that we missed it if we just do a
simple NULL check
Bug:
77224743
Test: StackRfcommTest
Change-Id: I7114e46ae706927cc839c7201c97362710e7a874
Ajay Panicker [Fri, 27 Apr 2018 13:50:42 +0000 (06:50 -0700)]
Use the wrapped volume interface with the AVRCP conneciton handler
Use the wrapped volume interface in connection handler so that JNI calls
are automatically executed on the correct thread when called from the
connection handler.
Bug:
30602783
Test: Connect a device that doesn't support absolute volume and see that
the JNI call doesn't throw an exception.
Change-Id: Ife768c715022e70dd4055270c1d6cf76ba26aea3
Pavlin Radoslavov [Mon, 23 Apr 2018 20:36:33 +0000 (13:36 -0700)]
Save the AVDTP version after SDP discovery and read it on reconnect
* Save the AVDTP version discovered by SDP to the device's local
configuration section with key string of "AvdtpVersion"
* Refactor tBTA_AV_SCB and hide the AVDTP version and peer address
behind get/set methods:
AvdtpVersion() / SetAvdtpVersion() / PeerAddress().
* Added new methods tBTA_AV_SCB::OnConnected() and OnDisconnected().
The former is used to setup some of the internal state when
connected to a peer: the peer address and read the stored AVDTP
version from local configuration section.
The latter is used to reset that state when disconnected
from that peer.
* Removed field tBTA_AV_SDP_RES.avdt_version because it is never
set / used.
* Removed duplicate re-definition of AVDT_VERSION inside avdt_api.h
Bug:
78142165
Test: Manual: connect/reconnect with Sennheiser MOMENTUM M2 AEBT headset
Change-Id: Ib9dcd95dc9899fa81f3cd927f127e5cb0f21ef60
android-build-prod (mdb) [Wed, 25 Apr 2018 21:24:55 +0000 (21:24 +0000)]
Merge changes from topics "bt-hfp-fix-connection-collision-handling", "bt-rfcomm-improve-logging-and-readability", "bt-rfcomm-add-end-to-end-unit-tests"
* changes:
HFP: Fix connection colision handling
RFCOMM: Improve logging and readability
RFCOMM: Add unit tests for connection scenarios
Jack He [Mon, 23 Apr 2018 00:30:14 +0000 (17:30 -0700)]
HFP: Fix connection colision handling
* When there is a connection collison, and remote device is trying to
connect to HFP server channel while we try to connect to remote's
server channel as a client. If the remote device succssfully connect
to us, we should drop our connection request to remote device and
accept remote device's connection request. As result, we will observe
1. Our connection request fails, this propagate up to Java layer and
also clean up any states in these layers
2. Remote connection request succeeds, this propagate up to Java layer
as well as a new incoming connection
* Added BTA_AG_COLLISION_EVT to formally handle AG collision in state
machine
* Modified bta_ag_resume_open to re-send BTA_AG_API_OPEN_EVT instead of
modifying the state machine state directly. State machine states
should only be modified by state machine handler
* Ignore RFCOMM open event if PORT_CheckConnection fails
* Added StackRfcommTest.TestConnectionCollision to reproduce this
scenario with 100% certainty
* Add static checks to HFP BTA state machine to make sure action and
event indices match enum sizes
Bug:
77224743
Test: connect to multiple remote devices with HFP, MAP and PBAP
StackRfcommTest.TestConnectionCollision
btestplans/details/158641/3975
Change-Id: Ib3652784b123abe195e7bd30421ef5f4345b1d4d
android-build-prod (mdb) [Wed, 25 Apr 2018 10:12:25 +0000 (10:12 +0000)]
Merge "Hearing Aid: Keep configuration after disconnect()"
Jack He [Sat, 21 Apr 2018 05:06:11 +0000 (22:06 -0700)]
RFCOMM: Improve logging and readability
Debug Improvements:
* Add more error logging in the following methods:
- rfc_mx_sm_state_idle for L2CA_ConnectReq failure
- rfc_mx_sm_state_configure for RFC_EVENT_TIMEOUT
- rfc_mx_conf_cnf for L2CAP configuration failures
- RFCOMM_RemoveServer
Readability Improvements:
* Refactored logic in the following methods to be more readable
- L2CA_ErtmConnectReq
- RFCOMM_CreateConnection
- port_open_continue
- PORT_StartCnf
- port_allocate_port
- rfc_send_buf_uih
- bta_ag_get_other_idle_scb
* Rename RFCOMM_ParNegReq to RFCOMM_ParameterNegotiationRequest
* Rename RFCOMM_ParNegRsp to RFCOMM_ParameterNegotiationResponse
* Rename RFCOMM_PortNegReq to RFCOMM_PortParameterNegotiationRequest
* Rename RFCOMM_PortNegRsp to RFCOMM_PortParameterNegotiationResponse
Rename using IDE:
* Rename tRFCOMM_CB.last_port to tRFCOMM_CB.last_port_index
* Rename tPORT.inx to tPORT.handle as inx is ready the port handle
indexed from 1
* Rename tRFC_MCB.port_inx to tRFC_MCB.port_handles
NPE Prevention:
* Add error checking in rfc_save_lcid_mcb to avoid accessing beyond
array boundary
Bug:
77224743
Test: StackRfcommTest, connect and disconnect to multiple devices
with PBAP, MAP, PAN, PTS HFP tests
testplans/details/158641/3975
Change-Id: I8de89dfc0cee48fed6ad4e1d4a8cdcde2f960aab
Jack He [Sat, 21 Apr 2018 05:04:21 +0000 (22:04 -0700)]
RFCOMM: Add unit tests for connection scenarios
Unit tests:
* Add net_test_stack_rfcomm
* Use a compiler trick to compile production RFCOMM code against L2CAP
and BTM header, but fake L2CAP and BTM source code so that we can stub
statically defined L2CAP and BTM code using mocks
* Rename net_test_rfcomm to net_test_rfcomm_suite
* Add mocked L2CAP and BTM layer to allow packet replay from L2CAP layer
to RFCOMM layer in order to reproduce time dependent issues such as
connection collision
* Add a number of utility methods that generates RFCOMM packet bytes
using supported parameters
* Add unit test for above utility methods
* Add suite of unit tests named StackRfcommTest, including:
- SingleServerConnectionHelloWorld
- MultiServerPortSameDeviceHelloWorld
- SameServerPortMultiDeviceHelloWorld
- SingleClientConnectionHelloWorld
- SameClientPortMultiDeviceHelloWorld
* These tests supply L2CAP packets and API calls to trigger RFCOMM
connection setup in various scenarios
* Added logging method to output debug log via VLOG(1) logging level and
allow compile time configuration of these logs through a constant flag
Bug:
77224743
Test: ./test/run_unit_tests.sh net_test_stack_rfcomm
testplans/details/158641/3975
Change-Id: I9d59843603cd36394c3736670bcf3c39dea26674
Chenyang Zhang [Mon, 26 Mar 2018 03:21:59 +0000 (11:21 +0800)]
HSP: Keep sending RING message
Two PTS Test failed:
- HSP/AG/IAC/BV-01-I
- HSP/AG/ACR/BV-02-I
Reason:
AG didn't send the "RING" unsolicited result code to HS(PTS),
then HS can't send the "AT+CKPD=200" command to received the call.
After a while, the "FATAL ERROR (MTC): Call establishment timed out"
triggered by PTS.
Solution:
Keep sending RING message for HSP.
Bug:
77507028
Change-Id: If1288a5f7b1b7da8ecba34ed90a85a0af8a91e9a
Hansong Zhang [Mon, 23 Apr 2018 19:26:52 +0000 (12:26 -0700)]
Hearing Aid: Keep configuration after disconnect()
After disconnect(), the Hearing Aid service removes the device from the
white list, but retains the configuration. The Java Hearing Aid service
still knows the hiSyncId and capabilities, so it can connect() to
multiple devices at the same time
Bug:
69623109
Test: manual and unit test for Java service
Change-Id: Ic17b9be7e6a0577baecd520680abffbaf0a0dc47
Logan Chien [Mon, 23 Apr 2018 06:46:28 +0000 (14:46 +0800)]
Rename <cutils/log.h> to <log/log.h>
Bug:
78370064
Test: lunch aosp_walleye-userdebug && cd system/bt && mma
Change-Id: I43448e88c236b72d86206bd652075f35eccca6f6
Petri Gynther [Wed, 18 Apr 2018 01:29:09 +0000 (18:29 -0700)]
A2DP offload: switch to new properties
Bug:
63932139
Bug:
76201991
Test: Manual A2DP testing (A2DP offload enabled and disabled)
Change-Id: Idcc2af40bde09758e060861ac518c06b7551212a
Treehugger Robot [Thu, 19 Apr 2018 23:23:21 +0000 (23:23 +0000)]
Merge "Don't start the authentication when peer device already started it"
Pavlin Radoslavov [Wed, 18 Apr 2018 17:57:22 +0000 (10:57 -0700)]
Reset the A2DP coding parameters when switching codecs
Bug:
77281039
Test: Manual - connect Headset and switch codecs while playing audio
Change-Id: Icb89b0d78195fd654d66bc1334b121cf62c55be1
Jakub Pawlowski [Thu, 12 Apr 2018 12:42:31 +0000 (05:42 -0700)]
GATT: fix 32 bit UUID handling
When writing UUID into stream with gatt_build_uuid_to_stream, we always
use 16bit or 128bit representation. In GATT code returning service UUID,
we were returning 32bit representation lenght, even though 128bit
representation was being returned in the stream. This resulted in
invalid GATT database content being returned, and the service not being
visible.
Bug:
66912853
Test: create GATT database with 32bit UUID, discover from remote device
Change-Id: I791a518ab080bd99db0a8be18d97e865c838fc7e
Treehugger Robot [Wed, 18 Apr 2018 01:42:29 +0000 (01:42 +0000)]
Merge "Add ability to disable wide band speech"
Treehugger Robot [Wed, 18 Apr 2018 01:24:28 +0000 (01:24 +0000)]
Merge "Fix check for device lookup in map"
Treehugger Robot [Wed, 18 Apr 2018 00:44:03 +0000 (00:44 +0000)]
Merge "Fix a memory leak when disabling AVDTP"
Treehugger Robot [Wed, 18 Apr 2018 00:42:45 +0000 (00:42 +0000)]
Merge changes from topics "bt-avdtp-get-basic-capabilities", "bt-a2dp-acceptor-codec-config"
* changes:
Include only the Basic Capability for AVDTP GetCapabilities response
Handle properly AVDTP SetConfig from the A2DP Sink device
Zach Johnson [Fri, 6 Oct 2017 00:47:13 +0000 (17:47 -0700)]
Add ability to disable wide band speech
Some HF android-based devices need to disable
wide band speech due to interop issues.
Test: Pair and test phone calls
Bug:
65053641
Change-Id: Ie8c4a50c40149562d6b52336fba1a61f1abf5198
Pavlin Radoslavov [Sat, 14 Apr 2018 02:57:25 +0000 (19:57 -0700)]
Fix a memory leak when disabling AVDTP
Added new function bta_av_free_scb() to explicitly
free tBTA_AV_SCB struct.
Bug:
78034873
Test: Code compilation
Change-Id: Ic738c64f61fd273bc2988fa98cb7cedebf1c4b76
Ajay Panicker [Tue, 17 Apr 2018 21:15:30 +0000 (14:15 -0700)]
Fix check for device lookup in map
Bug:
78134184
Test: Run host native test net_test_avrcp
Change-Id: I57dd0040aa0e97f623cff97a28dc98e196414559
Jakub Pawlowski [Tue, 17 Apr 2018 17:43:37 +0000 (10:43 -0700)]
New GATT cache storage format
We will need characteristic definition handle, and handle of end of
included service in the future. Store it properly.
Bug:
67056747
Test: GattCacheTest.nv_attr_to_binary_test
Change-Id: I170e1a39d3c055efddd91639f756d74eb4ecc304
Pavlin Radoslavov [Sat, 14 Apr 2018 05:07:30 +0000 (22:07 -0700)]
Include only the Basic Capability for AVDTP GetCapabilities response
AVDTP GetCapabilities request should return only the Basic
Capabilities, as defined in the AVDTP 1.3 spec.
Otherwise, returning a capability such as Delay Reporting would
result in some remote devices droping the AVDTP connection
Also:
* Print SEP protocol service capabilities per Stream Control
Block when dumping the state to a bugreport
* Add extra log messages
Bug:
77668253
Test: Manual: connect with Momentum M2 Headset and examine the
AVDTP GetCapabilities response.
Change-Id: I34f2e8ff586115a38c3436b2b6300514f65346a9
Pavlin Radoslavov [Tue, 10 Apr 2018 01:01:41 +0000 (18:01 -0700)]
Handle properly AVDTP SetConfig from the A2DP Sink device
If the remote device is proactive and sends AVDTP SetConfig after
re-connection before the local device gets the chance to do it, the
internal codec setup state might be inconsistent.
* Fix the internal logic when the local device is Acceptor inside
file bta_av_co.cc, and simplify some of the code.
* Fix the handling of p_scb->sep_info_idx inside bta_av_save_caps()
when receiving capabilities from the remote device.
* Add new A2dpCodecConfig::setPeerCodecCapabilities() method that is
implemented by each codec.
Bug:
77525584
Test: Manual - initiate connection by Momentum 2.0 Wireless Headset.
Connect/disconnect/reconnect multiple headsets.
Change-Id: I456df7c8a2fa0758c0908a4628c4dfae3259dbdb
Jakub Pawlowski [Mon, 16 Apr 2018 14:55:06 +0000 (07:55 -0700)]
GATT: make last service end group handle equal to 0xFFFF
ESR06 (errata 4065) added sentence:
"The End Group Handle of the last service in a device can be 0xFFFF."
It talks about last service, not last primary service. Right now,
secondary service added after last primary service will result in in
last primary service being corrupted - descriptor added to last
characteristic, and some characteristics added.
Bug:
78107486
Change-Id: I6a146fce2c946cdff176ff79f147830e29d3b807
Satish kumar sugasi [Tue, 3 Apr 2018 19:09:41 +0000 (12:09 -0700)]
A2DP Offload: Handle init/deinit as part of start/end session
Bug:
77289942
Test: Manual
Change-Id: I5b7ca6e485788d69f574bb74d2ef423507b183ff
Ajay Panicker [Fri, 13 Apr 2018 18:49:34 +0000 (11:49 -0700)]
AVRCP: Inform upper layer if absolute volume isn't supported
Before, the upper layers would be informed when a device connected that
supported absolute volume. Now even devices that don't support absolute
volume get reported.
Bug:
33962015
Test: Run host native test net-test-avrcp
Change-Id: If083ccbb9ba9a170c5bca359e632585d826c6fa5
Sunny Kapdi [Fri, 23 Mar 2018 06:54:40 +0000 (23:54 -0700)]
A2DP Offload: Fix the default LDAC bitrate
Use LDAC ABR as default option in A2DP Offload mode.
Bug:
77879487
Test: Manual
Change-Id: Iec76691f8a83cd47aa7bf38efc6554139a59bb89
Joseph Pirozzo [Thu, 12 Apr 2018 15:22:19 +0000 (15:22 +0000)]
Merge "AVRCP controller browsing deep copy and get folder range"
Stanley Tng [Thu, 12 Apr 2018 14:36:12 +0000 (14:36 +0000)]
Merge "Pass new LE CoC min_ce/max_ce parameters to native stack"
ilbeom.kim [Wed, 11 Apr 2018 23:26:10 +0000 (08:26 +0900)]
Don't start the authentication when peer device already started it
If host gets link_key_request event from the controller, it means peer
device started the authentication.
In this case, host should not start the authentication because it will
be caused the authentication collision by controller side.
This sequence can be referred at BT 4.2 core specification document,
p.1388, Figure 4.2.
Bug:
74241491
Test: Manual
- Connect Android wear to Android phone
- Turn off BT on Android wear
- Turn on BT on Android wear
- Observe the logcat whether connection time is within 30 seconds
Android Wear Stability Test
Change-Id: I138d45316ea75dd96444c36bde36ce15a64b669a
Stanley Tng [Mon, 19 Mar 2018 19:48:04 +0000 (12:48 -0700)]
Pass new LE CoC min_ce/max_ce parameters to native stack
Add new test connection event (ce) parameters, min_ce and max_ce, to
the SL4A tests for LE Connection-oriented Channel (CoC) feature.
Test: Run cmd: act.py -c $MY_SL4A_CONFIG -tc BleCoc2ConnTest
Bug:
77528723
Change-Id: Ifea040f0eb105f89539e6b74f5c2edc76147a065
Joseph Pirozzo [Wed, 11 Apr 2018 19:40:20 +0000 (12:40 -0700)]
AVRCP controller browsing deep copy and get folder range
AVRCP browsing was unstable on the sink side due to bytes
being used instead of integers for get_folder_items_cmd
and a lack of deep copy in the data buffers. This patch
allows both browse and vendor commands to work correctly.
Bug:
72496280
Test: stream music and browse at the same time.
Change-Id: Id4d34101c918947450923b68e087e6851ce99130
Jack He [Mon, 2 Apr 2018 20:04:58 +0000 (13:04 -0700)]
Metrics: Add metrics item for profile usage
Item A: Add messages to log profile connections
* Add ProfileUsageStats message in bluetooth.proto
* Add BluetoothProfileId enum to represent each profile
* Add num_times_connected item to log how many times a profile is
connected
Item B: Add messages to log headset profile connections for HSP and HFP
* Add HeadsetProfileConnectionStats message in bluetooth.proto
* Add HeadsetProfileType enum to represent each headset profile type
* Add num_times_connected item to log how many times each headset
profile is connected
* Add unit tests in metrics_tests
* Remove "clear" flag in various metrics dumping methods to make sure
that we clean up metrics every time we dump
Bug:
77476285
Test: make, net_test_osi, BtFunhausMetricsTest,
adb shell dumpsys bluetooth_manager --proto-bin
Change-Id: Ib18948c50ddb98ab7472f7b51a9bb98d153071c7
Merged-In: Ib18948c50ddb98ab7472f7b51a9bb98d153071c7
Treehugger Robot [Wed, 11 Apr 2018 03:56:38 +0000 (03:56 +0000)]
Merge "Call AVRC_close when an AVRCP connection is closed"
Treehugger Robot [Wed, 11 Apr 2018 03:14:27 +0000 (03:14 +0000)]
Merge "DM: Add error logs for failed discovery attempt"
Treehugger Robot [Wed, 11 Apr 2018 02:54:40 +0000 (02:54 +0000)]
Merge "Improve A2DP codec run-time debug-abilitity"
Jack He [Wed, 11 Apr 2018 00:44:35 +0000 (17:44 -0700)]
DM: Add error logs for failed discovery attempt
Bug:
72817086
Test: make, no functional change
Change-Id: I0df4efa62de00956eea1b5b5d244f4821bcaf6fc
Ajay Panicker [Wed, 11 Apr 2018 02:24:51 +0000 (19:24 -0700)]
Call AVRC_close when an AVRCP connection is closed
AVRC_Close needs to be called whenever a connection is closed otherwise
the AVCT control block is never cleaned up.
Bug:
77633048
Test: Run host native test net_test_avrcp and connect/disconnect from a
device multiple times.
Change-Id: Ia6a1b2606a87803316aad41ae27db858bf922548
Pavlin Radoslavov [Sat, 7 Apr 2018 00:05:47 +0000 (17:05 -0700)]
Improve A2DP codec run-time debug-abilitity
Rename A2DP_DumpCodecInfo() to A2DP_CodecInfoString() and change
the usage. Previously, A2DP_DumpCodecInfo() would print the
the codec information only if LOG_VERBOSE() was enabled in compile time.
The new A2DP_CodecInfoString() now returns human-readable std::string
with the codec information.
That string can be used in debug log messages that can be enabled
in run-time.
Bug:
77525584
Test: Manual - Examine log messages when A2DP streaming with and
without debug log messages enabled.
Change-Id: Idd440d6c9e908520132feeeb5388d3e6aefa26db
Ajay Panicker [Tue, 10 Apr 2018 23:35:37 +0000 (16:35 -0700)]
Set default AVRCP version to 1.4
Bug:
77874113
Test: Check snoop logs to see that the broadcasted AVRCP version is 1.4
Change-Id: If36bccc58d04dffe46286ee8d18785b680b9de8a
Zach Johnson [Fri, 30 Mar 2018 20:33:54 +0000 (13:33 -0700)]
Allow platforms to override client connection sniff timeout
It is already possible to set server connection sniff timeouts.
Bug:
70309445
Test: inspect timeouts via logs
Change-Id: Ibc19dd4f77aa28388169b2ce70d12200020e6a4d
Jack He [Thu, 5 Apr 2018 22:39:27 +0000 (15:39 -0700)]
HFP: Report AT+BIA command to upper layer
* Report AT+BIA command, AG indicator activation command, to upper layer
so that upper layer can decide on whether or not to subscribe to these
indicators
Bug:
77655992
Test: make
Change-Id: Ic330d6784c5edf20683cbfedda3fa54525878ce8
Treehugger Robot [Fri, 6 Apr 2018 21:54:06 +0000 (21:54 +0000)]
Merge "Add hidden API to get current user of HID Device (2/3)"
Ajay Panicker [Thu, 5 Apr 2018 16:14:51 +0000 (09:14 -0700)]
Check if socket is closed before getting presentation position
Bug:
76456293
Test: Listen to music on a device that supports delay reporting
Change-Id: I4ca1c31819594750a7beb1d11ca5b8d64a7f836c
Treehugger Robot [Thu, 5 Apr 2018 23:36:10 +0000 (23:36 +0000)]
Merge "Disable absolute volume if the remote device rejects registration"
Treehugger Robot [Thu, 5 Apr 2018 19:20:23 +0000 (19:20 +0000)]
Merge "vendor_libs: Allow btlinux service to run from vendor or system/vendor"
Dmitry Shmidt [Thu, 5 Apr 2018 17:35:37 +0000 (10:35 -0700)]
vendor_libs: Allow btlinux service to run from vendor or system/vendor
Bug:
75290651
Test: Manual
Change-Id: I30bda23667ac911bf21da5705d248833f919f8bf
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>