diff options
Diffstat (limited to 'examples/java/HelloTinyB.java')
-rw-r--r-- | examples/java/HelloTinyB.java | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/examples/java/HelloTinyB.java b/examples/java/HelloTinyB.java new file mode 100644 index 00000000..84656581 --- /dev/null +++ b/examples/java/HelloTinyB.java @@ -0,0 +1,144 @@ +import tinyb.*; +import java.util.*; + +public class HelloTinyB { + private static final float SCALE_LSB = 0.03125f; + + static void printDevice(BluetoothDevice device) { + System.out.print("Address = " + device.getAddress()); + System.out.print("Name = " + device.getName()); + System.out.print("Connected = " + device.getConnected()); + System.out.println(""); + } + + /* + * After discovery is started, new devices will be detected. We can + * get a list of all devices through the manager's getDevices + * method. + * We can the look through the list of devices to find the device + * with the MAC which we provided as a parameter. + * We continue looking until we find it, or we try 15 times (1 minutes). + */ + static BluetoothDevice getDevice(String address) throws InterruptedException { + BluetoothManager manager = BluetoothManager.getBluetoothManager(); + BluetoothDevice sensor = null; + for (int i = 0; i < 15; ++i) { + List<BluetoothDevice> list = manager.getDevices(); + + for (BluetoothDevice device : list) { + printDevice(device); + /* + * Here we check if the address matches. + */ + if (device.getAddress().equals(address)) + sensor = device; + } + + if (sensor != null) { + return sensor; + } + Thread.sleep(4000); + } + return null; + } + + /* + * Our device should expose a temperature service, which has a UUID + * we can find out from the data sheet. + * The service description of the SensorTag can be found here: + * http://processors.wiki.ti.com/images/a/a8/BLE_SensorTag_GATT_Server.pdf + * The service we are looking for has the short UUID AA00 which we insert into + * the TI Base UUID: f000XXXX-0451-4000-b000-000000000000 + */ + static BluetoothGattService getService (BluetoothDevice device, String UUID) throws InterruptedException { + System.out.println("Services exposed by device:"); + BluetoothGattService tempService = null; + List<BluetoothGattService> bluetoothServices = null; + do { + bluetoothServices = device.getServices(); + + for (BluetoothGattService service : bluetoothServices) { + System.out.println("UUID: " + service.getUuid()); + if (service.getUuid().equals(UUID)) + tempService = service; + } + Thread.sleep(4000); + } while (bluetoothServices != null && bluetoothServices.isEmpty()); + return tempService; + } + + /* + * This program connects to a TI SensorTag 2.0 and reads the temperature + * characteristic exposed by the device over Bluetooth Low Energy. + * The parameter provided to the program should be the MAC address of + * the device. + * + * A wiki describing the sensor is found here: + * http://processors.wiki.ti.com/index.php/CC2650_SensorTag_User's_Guide + * + * The API used in this example is based on TinyB v0.3, which only supports + * polling, but v0.4 will introduce a simplied API for discovering devices + * and services. + */ + public static void main(String[] args) throws InterruptedException { + + if (args.length < 1) { + System.err.println("Run with <device_address> argument"); + System.exit(-1); + } + + /* + * To start looking of the device, we first must initialize the TinyB + * library. The way of interacting with the library is through + * the BluetoothManager. There can be only one BluetoothManager at one + * time, and the reference to it is obtained through the + * getBluetoothManager method. + */ + BluetoothManager manager = BluetoothManager.getBluetoothManager(); + + /* + * The manager will try to initialize a BluetoothAdapter if any adapter + * is present in the system. To initialize discovery we can call + * startDiscovery, which will put the default adapter in discovery mode. + */ + boolean discoveryStarted = manager.startDiscovery(); + + System.out.println("The discovery started: " + (discoveryStarted ? "true" : "false")); + BluetoothDevice sensor = getDevice(args[0]); + + /* + * After we find the device we can stop looking for other devices. + */ + manager.stopDiscovery(); + + if (sensor == null) { + System.err.println("No sensor found with the provided address."); + System.exit(-1); + } + + System.out.print("Found device: "); + printDevice(sensor); + + if (sensor.connect()) + System.out.println("Sensor with the provided address connected"); + else { + System.out.println("Could not connect device."); + System.exit(-1); + } + + BluetoothGattService tempService = + getService(sensor, "f000aa00-0451-4000-b000-000000000000"); + + if (tempService == null) { + /* + * This device does not have the temperature service we are looking for. + */ + sensor.disconnect(); + System.exit(-1); + } + + List<BluetoothGattCharacteristic> temperatureCharacteristics = + tempService.getCharacteristics(); + + } +} |