summaryrefslogtreecommitdiffstats
path: root/examples/java/HelloTinyB.java
diff options
context:
space:
mode:
Diffstat (limited to 'examples/java/HelloTinyB.java')
-rw-r--r--examples/java/HelloTinyB.java144
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();
+
+ }
+}