Commit Graph

70 Commits

Author SHA1 Message Date
Nick Pelly
52cde7279b Fix docs builds. 2009-10-06 16:10:02 +02:00
Nick Pelly
24bb9b8af4 Provide an API for apps to use a dynamic RFCOMM channel and SDP record.
Hide listenUsingRfcommOn(int channel)
Add listenUsingRfcomm(String name, ParcelUuid uuid)

The new API automatically finds a free RFCOMM channel and registers an SDP
record with the given uuid and name. The SDP record is automatically
removed when the socket is closed, or if the application dies.

Apps are prevented from registering SDP records with the uuid of system
Bluetooth profiles, such as A2DP, HFP and OPP.

Apps are prevented from removing SDP records that they did not create. This is
tracked by pid.

TODO: Provide an API for the connecting app to look up an SDP record.

Bug: 2158900
DrNo: eastham
Joke: "What did the dog say to the tree? bark."
Change-Id: Ia92f51c34615a7270a403255ad2b8faa98c4a3f5
2009-10-06 05:57:50 -07:00
Android (Google) Code Review
5a463a693c Merge change Ic2a16d4f into eclair
* changes:
  b/2148252 Fix emulator
2009-10-01 10:52:01 -04:00
Michael Chan
081f58abb7 b/2148252 Fix emulator
Change-Id: Ic2a16d4fac2a2a12a209c83ad2049829255cb31f
2009-09-30 18:14:08 -07:00
Jaikumar Ganesh
54172d92af Try to reconnect twice when the rfcomm error code is Connection Refused.
This happens when the the remote headset is in a bad state or is
not accepting connections. Try twice before giving up.

Change-Id: I55e15bad6b72904b8e4ccbca89e17e9bd3ddb61e
2009-09-30 17:46:17 -07:00
Nick Pelly
e766eae938 Fix broken build.
Should be bool not int. Forgot to roll in local changes to last commit.

Change-Id: I28bad88238e5b715a5033b0d5a897d924ef8b538
2009-09-30 12:06:28 -07:00
Zhu Lan
f9bbe1e71a Bluetooth A2DP suspend/resume functionality
Change-Id: I8366852fa9b6ff9dacf18db00ea1c2be0c00ff34
2009-09-29 20:50:02 -07:00
Nick Pelly
aef439e6f8 Move android.bluetooth.ParcelUuid to android.os.ParcelUuid
Change-Id: I564429d5c5b6a5372b6ff26a53b0d7e518b53631
2009-09-28 13:06:22 -07:00
Nick Pelly
1acdcc1a50 Add an API to request a system activity to turn on Bluetooth.
Change-Id: I2fca33ad27017ea4e2ecba37854b749682d07672
2009-09-28 11:04:00 -07:00
Nick Pelly
12835478ee Handle expiration of discovery mode in system server.
Change-Id: I58fd199b40ffdf8168a5489be8eedb5d25d56722
2009-09-25 15:00:29 -07:00
Brad Fitzpatrick
3219ab4de2 Fix typo in Bluetooth docs. 2009-09-25 20:28:02 +04:00
Nick Pelly
18b1e79a12 Bluetooth API: Do not allow apps to programmatically make BT discoverable.
Instead add ACTION_REQUEST_DISCOVERABLE for the system to show a dialog to
adjust discoverable mode.

Also remove createBond(), removeBond() and cancelBondProcess(). The Settings
App already handles these automatically when connections require bonding.

Change-Id: I216154cd1b6de410de64ba91b07d7263ac03e8df
2009-09-24 19:34:54 -07:00
Jaikumar Ganesh
10eac971b3 Cache the remote device's service channel.
Bluez Device implementation is such that when a device
is unpaired, we removes the device and hence there is no
way to interact with it unless you pair again. Remote service
channel call is used to get the rfcomm channel number which
will be used in profiles like OPP which don't require pairing.

Change-Id: I868a6cdfdb1b7d3591dd8b66cd0320f41a9c1b92
2009-09-21 15:58:08 -07:00
Android (Google) Code Review
163be61ce5 Merge change 25412 into eclair
* changes:
  Make ParcelUuid helper functions consistent.
2009-09-21 15:37:21 -04:00
Android (Google) Code Review
ac810e53b7 Merge change 25779 into eclair
* changes:
  Add new API for fetching UUIDs using SDP.
2009-09-19 14:30:37 -04:00
Jaikumar Ganesh
1caa6d111e Add new API for fetching UUIDs using SDP.
Add new API which clients can use to force an SDP query.
The result is broadcast using an intent having the UUIDs.
The intent is broadcast after a timeout, in case of an error.
This timeout is greater than the page timeout.

Change-Id: I61e6db4c05b34c42f679a66987e37e2063a793b6
2009-09-19 11:29:24 -07:00
Nick Pelly
55e66f1b73 Reject lowercase characters in checkBluetoothAddress().
This keeps consistency with Bluez which uses upper case string address. It's
important to keep the case the same so that .equals() in BluetoothService.java
work.

Change-Id: I6404ca137d0aec3cc2e6e7cb79763d5305a03547
2009-09-18 11:37:06 -07:00
Nick Pelly
37e0828cf9 Add one line of logging when SCO SOCKET connect starts.
This is to help collect information from Moto QA about delays connecting BT
audio.

Change-Id: I790c65f5b64c85aaffc0e68ebe8b6202f476b39f
http://b/2129464
2009-09-18 10:17:41 -07:00
Nick Pelly
074c11c164 Do not @hide Parcelable implementations in BluetoothClass and BluetoothDevice.
Change-Id: I92389c53a9b99c9507f78898329ff87b631c7aa3
2009-09-17 08:25:30 -07:00
Jaikumar Ganesh
dca2f0fec3 Make ParcelUuid helper functions consistent.
Treat zero length arrays and null arrays to be same.

Change-Id: I8c6c28e5dc3da1f31f6f6abfc747db4c2975a90b
2009-09-16 17:50:52 -07:00
Jaikumar Ganesh
dd0463aef1 Change handling of remoteUuids.
Use the ParcelUuid instead of UUID

Change-Id:Ie05d65a62e8a4df8182a4c737d46c14142bfec43
2009-09-16 17:05:15 -07:00
Jaikumar Ganesh
82c3ef7adc Add a parcelable version of UUID file.
Change-Id:I2582e1c9893292ba35bb5cac90ccd2bd18041d8c
2009-09-16 17:05:09 -07:00
Jaikumar Ganesh
32d8571f50 Changes for BT 2.1
1) Handle incoming 2.1 pairing requests
2) Modify displaying error messages on bond failures.
3) Add delay while accepting incoming pairing for certain 2.1 devices.
When MITM is on, the link key request might come more than once.
Auto accept with a delay.
4) Handle DisplayPasskey callback for pairing a 2.1 keyboard with
a 2.1 device
2009-09-11 14:12:48 -07:00
Nick Pelly
005b228cdf API_CHANGE: Cleanup, javadoc and unhide more Bluetooth API.
This is a large batch, and covers:

-- Bluetooth Device Discovery --
BluetoothAdapter.ACTION_DISCOVERY_STARTED
BluetoothAdapter.ACTION_DISCOVERY_FINISHED
BluetoothAdapter.startDiscovery()
BluetoothAdapter.cancelDiscovery()
BluetoothAdapter.isDiscovering()

-- Bluetooth bonding (pairing) --
BluetoothAdapter.getBondedDevices()
BluetoothDevice.ACTION_BOND_STATE_CHANGED
BluetoothDevice.EXTRA_BOND_STATE
BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE
BluetoothDevice.BOND_NONE
BluetoothDevice.BOND_BONDING
BluetoothDevice.BOND_BONDED
BluetoothDevice.getBondState()
BluetoothDevice.createBond()
BluetoothDevice.cancelBondProcess()
BluetoothDevice.removeBond()

-- BluetoothClass --
BluetoothDevice.ACTION_CLASS_CHANGED
BluetoothDevice.EXTRA_CLASS
BluetoothDevice.getBluetoothClass()
BluetoothClass.Service.*
BluetoothClass.Device.Major.*
BluetoothClass.Device.*
BluetoothClass.getDeviceClass()
BluetoothClass.getMajorDeviceClass()
BluetoothClass.hasService()

-- Misc BluetoothDevice --
BluetoothDevice.ACTION_ACL_CONNECTED
BluetoothDevice.ACTION_ACL_DISCONNECTED_REQUESTED
BluetoothDevice.ACTION_ACL_DISCONNECTED
BluetoothDevice.ACTION_DISCOVERED
BluetoothDevice.ACTION_NAME_CHANGED
BluetoothDevice.EXTRA_DEVICE
BluetoothDevice.EXTRA_NAME
BluetoothDevice.EXTRA_RSSI

-- Misc BluetoothAdapter --
BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED
BluetoothAdapter.EXTRA_LOCAL_NAME
BluetoothAdapter.checkBluetoothAddress()

I deprecated BluetoothIntent and moved each intent into the class it relates
to.

Change-Id: I877b1280428ab46278b2bc25668bb44cda22dc36
2009-09-10 18:52:21 -07:00
Nick Pelly
b24e11baac API_CHANGE
Deprecate BluetoothError.java.

I spent a lot of time experimenting with a class BluetoothError to enumerate
the many error codes returned by the Bluetooth API. But at the end of the day
they were never used. The vast majority of method calls only really need a
true/false error value, and often not even that.

Methods which do need more detailed error enumeration (for example, bonding
failures) can have there own enumerated error codes. But there is no need
for a common set of error codes.

Also change the IPC failed warnings in BluetoothA2dp to Log.e. These indicate
a very serious error.

Introduce BluetoothAdapter.ERROR and BluetoothDevice.ERROR as helper sentinel
values.
2009-09-09 10:52:18 -07:00
Nick Pelly
de893f5503 API_CHANGE
Another round of Bluetooth API clean up, javadoc'ing and unhide'ing.

-- Symbols for getting/setting bluetooth state --
BluetoothAdapter.ACTION_STATE_CHANGED
BluetoothAdapter.EXTRA_STATE
BluetoothAdapter.EXTRA_PREVIOUS_STATE
BluetoothAdapter.STATE_OFF
BluetoothAdapter.STATE_TURNING_ON
BluetoothAdapter.STATE_ON
BluetoothAdapter.STATE_TURNING_OFF
BluetoothAdapter.isEnabled()
BluetoothAdapter.getState()
BluetoothAdapter.enable()
BluetoothAdapter.disable()

-- Symbols for getting/setting scan mode --
BluetoothAdapter.ACTION_SCAN_MODE_CHANGED
BluetoothAdapter.EXTRA_SCAN_MODE
BluetoothAdapter.EXTRA_PREVIOUS_SCAN_MODE
BluetoothAdapter.SCAN_MODE_NONE
BluetoothAdapter.SCAN_MODE_CONNECTABLE
BluetoothAdapter.SCAN_MODE_DISCOVERABLE
BluetoothAdapter.getScanMode()
BluetoothAdapter.setScanMode()

-- Symbols for getting address/names --
BluetoothAdapter.getAddress()
BluetoothAdapter.getName()
BluetoothAdapter.setName()
2009-09-09 10:52:02 -07:00
Nick Pelly
cf44059813 Add javadoc to explain which permissions are required for Public BT API's. 2009-09-08 10:12:06 -07:00
Android (Google) Code Review
d4c1baf937 Merge change 23646 into eclair
* changes:
  Immediately destroy BluetoothSocket's on close().
2009-09-02 16:01:15 -07:00
Nick Pelly
71c3c7806a Immediately destroy BluetoothSocket's on close().
Unfortunatley, shutdown() on the underlying fd does not actually stop a
listening socket from listening. You need to call close() on the fd to
do this. There is no way around it.

So this means the Java BluetoothSocket code has to call destroyNative() during
BluetoothSocket.close().

Since native methods cannot be called after destroyNative(), add a ReadWrite
lock and mClosed field to protect access to native methods.

This fixes the "resource busy" error when Bluetooth OPP and Bluetooth PBAP
tried to resume listening after turning BT off and then on.
2009-09-02 11:51:35 -07:00
Lixin Yue
efa1dd716d Add Bluetooth Device trust 2009-09-01 13:58:31 -07:00
Jackson Fan
9abcf0982e Use correct UUID to authorize AVRCP 2009-08-24 19:02:58 -07:00
Yue Lixin
a4433af5ac Add Bluetooth device picker support
- add Intent and Extra definition
- move profile filter into BluetoothClass
2009-08-19 20:44:21 -07:00
Nick Pelly
45e2704ff5 API CHANGE
Javadoc, and unhide the first pieces of the Bluetooth API.

With this commit there is enough public API to connect and use an RFCOMM
connection between Bluetooth devices.
2009-08-19 20:39:54 -07:00
Nick Pelly
bd022f423a Bluetooth: API change.
Split BluetoothDevice into BluetoothDevice and BluetoothAdapter.

BluetoothAdapter: Represents the local BT adapter. Operations on the local
                  adapter (start a scan, etc).
BluetoothDevice: Represents a remote BT device. Operations on remote devices
                 (pair, connect, etc).

IBluetoothDevice.aidl -> Bluetooth.aidl
BluetoothDeviceService.java -> BluetoothDeviceService.java

TODO:
Javadoc
2009-08-18 08:24:22 -07:00
Android (Google) Code Review
a45c5f07e2 Merge change 9216
* changes:
  Fix UUID typo and allow incoming AVRCP connections.
2009-07-31 10:41:27 -07:00
Jaikumar Ganesh
ade40526c8 Fix UUID typo and allow incoming AVRCP connections. 2009-07-31 10:33:47 -07:00
Jackson Fan
c8b04a93a6 Modify BluetoothPbap for a few wrong wordings 2009-07-27 21:28:38 -07:00
Jiafa Liu
3f41673265 frameworks/base: Add PBAP support
- Update according to comments
- Add aidl support in frameworks for Settings to retrieve current
  PBAP transaction status.
- Add status bar support for PBAP
2009-07-26 22:54:35 -07:00
Jaikumar Ganesh
b0eca41de0 Initial support of 2.1 pairing.
Note: Some cases have not been tested yet, as we would need to
get proper UI support.
2009-07-17 17:52:26 -07:00
Jaikumar Ganesh
12cae39747 Revert "Initial support of 2.1 pairing."
This reverts commit 228b2f3a81.
2009-07-17 14:45:22 -07:00
Jaikumar Ganesh
228b2f3a81 Initial support of 2.1 pairing.
Note: Some cases have not been tested yet, as we would need to
get proper UI support.
2009-07-17 14:00:32 -07:00
Jaikumar Ganesh
7f74d534f3 Reconnect to A2DP device only if it supports that profile, fix HF AG UUID. 2009-07-16 23:42:42 -07:00
Android (Google) Code Review
530b7125fa am 03255de3: Merge change 4757 into donut
Merge commit '03255de32d127d17504b6d475e6e79190dd637f8'

* commit '03255de32d127d17504b6d475e6e79190dd637f8':
  Add getBatteryUsageHint() to BluetoothHeadset for power monitoring.
2009-06-19 11:31:37 -07:00
Nick Pelly
6c901db72d Add getBatteryUsageHint() to BluetoothHeadset for power monitoring.
This is a monotonically increasing integer. Wraps to 0 at
Integer.MAX_INT, and at boot.
Current implementation returns the number of AT commands handled since
boot. This is a good indicator for spammy headset/handsfree units that
can keep the device awake by polling for cellular status updates. As a
rule of thumb, each AT command prevents the CPU from sleeping for 500 ms
2009-06-19 10:08:09 -07:00
Nick Pelly
8edae3dfd3 Fix bug in BluetoothInputStream.read().
InputStream.read() must return values in range [0, 255]. But the previous code
would sign extend when casting to int so return [-128, 127]. Bitwise AND with
0xff to remove sign extension.
2009-06-18 16:25:47 -07:00
Jaikumar Ganesh
d5ac1ae36b Framework changes for bluez4.
Changes in the Bluetooth JNI calls and framework functions
for Bluez4.
2009-06-09 17:21:08 -07:00
Nick Pelly
6a669fac38 Implement and expose SCO socket support in BluetoothSocket.java.
Implement L2CAP socket support, but do not expose it (untested).

NEXT: Switch to Builder style constructor instead of factory method.
2009-06-02 16:05:09 -07:00
Nick Pelly
47e82dee6b Implement bulk read and writes for Bluetooth sockets.
Before: 0.1 kB/s
After: 100 kB/s
(in my java BT speed test app)
2009-06-02 12:35:48 -07:00
Nick Pelly
0b6955a48b New BluetoothSocket API.
Modeled on blocking java.net.Socket and java.net.ServerSocket library.

Public interface is:

public final class BluetoothSocket implements Closeable {
   public static BluetoothSocket createRfcommSocket(String address, int port) throws IOException;
   public static BluetoothSocket createInsecureRfcommSocket(String address, int port) throws IOException;

   public void connect() throws IOException;
   public void close() throws IOException;

   public String getAddress();
   public InputStream getInputStream() throws IOException;
   public OutputStream getOutputStream() throws IOException;
}

public final class BluetoothServerSocket implements Closeable {
   public static BluetoothServerSocket listenUsingRfcommOn(int port) throws IOException;
   public static BluetoothServerSocket listenUsingUnsecureRfcommOn(int port) throws IOException;

   public BluetoothSocket accept() throws IOException;
   public BluetoothSocket accept(int timeout) throws IOException;
   public void close() throws IOException;

}
2009-05-26 19:39:21 -07:00
Nick Pelly
f5e17310d1 Remove Database.java API.
This provided SDP functionality to Java, but is not currently used by any Apps.

I will shortly be providing SDP functionality in a new API, but it will be
quite different to this one, and in the mean-time keeping this stale code
updated with other API changes is a pain.
2009-05-20 15:24:14 -07:00