reformat code with androidstudio

live-sensor-data
Andreas Shimokawa 2015-04-19 11:28:03 +02:00
parent 09914e6da0
commit dd12bb11b2
16 changed files with 153 additions and 140 deletions

View File

@ -7,10 +7,10 @@ import android.content.Context;
* Provides support for a specific device. Has hooks to manage the life cycle
* of a device: instances of this interface will be created, initialized, and disposed
* as needed.
*
* <p/>
* Implementations need to act accordingly, in order to establish, reestablish or close
* the connection to the device.
*
* <p/>
* This interface is agnostic to the kind transport, i.e. whether the device is connected
* via Bluetooth, Bluetooth LE, Wifi or something else.
*/

View File

@ -1,5 +1,10 @@
package nodomain.freeyourgadget.gadgetbridge.btle;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.util.Log;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
@ -8,13 +13,8 @@ import java.util.Set;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.AbstractDeviceSupport;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.util.Log;
/**
*
* @see TransactionBuilder
* @see BtLEQueue
*/
@ -35,6 +35,7 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
/**
* Subclasses should populate the given builder to initialize the device (if necessary).
*
* @param builder
* @return the same builder as passed as the argument
*/
@ -55,6 +56,7 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
* <code>perform("sms notification").write(someCharacteristic, someByteArray).queue(getQueue());</code>
* </p>
* TODO: support orchestration of multiple reads and writes depending on returned values
*
* @see #performConnected(Transaction)
* @see #initializeDevice(TransactionBuilder)
*/
@ -73,7 +75,6 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
}
/**
*
* @param transaction
* @throws IOException
* @see {@link #performInitialized(String)}
@ -94,6 +95,7 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
/**
* Subclasses should call this method to add services they support.
* Only supported services will be queried for characteristics.
*
* @param aSupportedService
* @see #getCharacteristic(UUID)
*/
@ -104,6 +106,7 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
/**
* Returns the characteristic matching the given UUID. Only characteristics
* are returned whose service is marked as supported.
*
* @param uuid
* @return the characteristic for the given UUID or <code>null</code>
* @see #addSupportedService(UUID)
@ -154,17 +157,17 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status) {
BluetoothGattCharacteristic characteristic, int status) {
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status) {
BluetoothGattCharacteristic characteristic, int status) {
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic) {
BluetoothGattCharacteristic characteristic) {
}
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {

View File

@ -7,7 +7,7 @@ import android.bluetooth.BluetoothGattCharacteristic;
* The Bluedroid implementation only allows performing one GATT request at a time.
* As they are asynchronous anyway, we encapsulate every GATT request (read and write)
* inside a runnable action.
*
* <p/>
* These actions are then executed one after another, ensuring that every action's result
* has been posted before invoking the next action.
*/
@ -23,8 +23,10 @@ public abstract class BtLEAction {
}
public abstract boolean run(BluetoothGatt gatt);
/**
* Returns the GATT characteristic being read/written/...
*
* @return the GATT characteristic, or <code>null</code>
*/
public BluetoothGattCharacteristic getCharacteristic() {

View File

@ -1,5 +1,15 @@
package nodomain.freeyourgadget.gadgetbridge.btle;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.util.Log;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.BlockingQueue;
@ -9,15 +19,6 @@ import java.util.concurrent.LinkedBlockingQueue;
import nodomain.freeyourgadget.gadgetbridge.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.GBDevice.State;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.util.Log;
/**
* One queue/thread per connectable device.
@ -41,47 +42,47 @@ public final class BtLEQueue {
private Thread dispatchThread = new Thread("Bluetooth GATT Dispatcher") {
public void run() {
while (!mDisposed) {
try {
Transaction transaction = mTransactions.take();
if (!isConnected()) {
// TODO: request connection and initialization from the outside and wait until finished
while (!mDisposed) {
try {
Transaction transaction = mTransactions.take();
if (!isConnected()) {
// TODO: request connection and initialization from the outside and wait until finished
// wait until the connection succeeds before running the actions
// Note that no automatic connection is performed. This has to be triggered
// on the outside typically by the DeviceSupport. The reason is that
// devices have different kinds of initializations and this class has no
// idea about them.
mConnectionLatch = new CountDownLatch(1);
mConnectionLatch.await();
mConnectionLatch = null;
}
// wait until the connection succeeds before running the actions
// Note that no automatic connection is performed. This has to be triggered
// on the outside typically by the DeviceSupport. The reason is that
// devices have different kinds of initializations and this class has no
// idea about them.
mConnectionLatch = new CountDownLatch(1);
mConnectionLatch.await();
mConnectionLatch = null;
}
mAbortTransaction = false;
// Run all actions of the transaction until one doesn't succeed
for (BtLEAction action : transaction.getActions()) {
mWaitCharacteristic = action.getCharacteristic();
if (action.run(mBluetoothGatt)) {
mWaitForActionResultLatch = new CountDownLatch(1);
mWaitForActionResultLatch.await();
mWaitForActionResultLatch = null;
if (mAbortTransaction) {
break;
}
} else {
Log.e(TAG, "Action returned false: " + action);
break; // abort the transaction
}
}
} catch (InterruptedException ignored) {
mWaitForActionResultLatch = null;
mConnectionLatch = null;
} finally {
mWaitCharacteristic = null;
}
}
Log.i(TAG, "Queue Dispatch Thread terminated.");
}
mAbortTransaction = false;
// Run all actions of the transaction until one doesn't succeed
for (BtLEAction action : transaction.getActions()) {
mWaitCharacteristic = action.getCharacteristic();
if (action.run(mBluetoothGatt)) {
mWaitForActionResultLatch = new CountDownLatch(1);
mWaitForActionResultLatch.await();
mWaitForActionResultLatch = null;
if (mAbortTransaction) {
break;
}
} else {
Log.e(TAG, "Action returned false: " + action);
break; // abort the transaction
}
}
} catch (InterruptedException ignored) {
mWaitForActionResultLatch = null;
mConnectionLatch = null;
} finally {
mWaitCharacteristic = null;
}
}
Log.i(TAG, "Queue Dispatch Thread terminated.");
}
};
public BtLEQueue(BluetoothAdapter bluetoothAdapter, GBDevice gbDevice, GattCallback externalGattCallback, Context context) {
@ -146,9 +147,9 @@ public final class BtLEQueue {
}
mDisposed = true;
// try {
disconnect();
dispatchThread.interrupt();
dispatchThread = null;
disconnect();
dispatchThread.interrupt();
dispatchThread = null;
// dispatchThread.join();
// } catch (InterruptedException ex) {
// Log.e(TAG, "Exception while disposing BtLEQueue", ex);
@ -157,6 +158,7 @@ public final class BtLEQueue {
/**
* Adds a transaction to the end of the queue.
*
* @param transaction
*/
public void add(Transaction transaction) {
@ -188,21 +190,21 @@ public final class BtLEQueue {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
Log.i(TAG, "Connected to GATT server.");
setDeviceConnectionState(State.CONNECTED);
// Attempts to discover services after successful connection.
Log.i(TAG, "Attempting to start service discovery:" +
mBluetoothGatt.discoverServices());
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.i(TAG, "Disconnected from GATT server.");
handleDisconnected();
break;
case BluetoothProfile.STATE_CONNECTING:
Log.i(TAG, "Connecting to GATT server...");
setDeviceConnectionState(State.CONNECTING);
break;
case BluetoothProfile.STATE_CONNECTED:
Log.i(TAG, "Connected to GATT server.");
setDeviceConnectionState(State.CONNECTED);
// Attempts to discover services after successful connection.
Log.i(TAG, "Attempting to start service discovery:" +
mBluetoothGatt.discoverServices());
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.i(TAG, "Disconnected from GATT server.");
handleDisconnected();
break;
case BluetoothProfile.STATE_CONNECTING:
Log.i(TAG, "Connecting to GATT server...");
setDeviceConnectionState(State.CONNECTING);
break;
}
}
@ -223,7 +225,7 @@ public final class BtLEQueue {
if (status == BluetoothGatt.GATT_SUCCESS) {
Log.e(TAG, "Writing characteristic " + characteristic.getUuid() + " succeeded.");
} else {
Log.e(TAG, "Writing characteristic " + characteristic.getUuid() + " failed: "+ status);
Log.e(TAG, "Writing characteristic " + characteristic.getUuid() + " failed: " + status);
}
if (mExternalGattCallback != null) {
mExternalGattCallback.onCharacteristicWrite(gatt, characteristic, status);

View File

@ -28,40 +28,40 @@ import android.bluetooth.BluetoothGattCharacteristic;
public interface GattCallback {
/**
* @see BluetoothGattCallback#onConnectionStateChange(BluetoothGatt, int, int)
* @param gatt
* @param status
* @param newState
* @see BluetoothGattCallback#onConnectionStateChange(BluetoothGatt, int, int)
*/
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState);
/**
* @see BluetoothGattCallback#onServicesDiscovered(BluetoothGatt, int)
* @param gatt
* @see BluetoothGattCallback#onServicesDiscovered(BluetoothGatt, int)
*/
public void onServicesDiscovered(BluetoothGatt gatt);
/**
* @see BluetoothGattCallback#onCharacteristicRead(BluetoothGatt, BluetoothGattCharacteristic, int)
* @param gatt
* @param characteristic
* @param status
* @see BluetoothGattCallback#onCharacteristicRead(BluetoothGatt, BluetoothGattCharacteristic, int)
*/
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status);
/**
* @see BluetoothGattCallback#onCharacteristicWrite(BluetoothGatt, BluetoothGattCharacteristic, int)
* @param gatt
* @param characteristic
* @param status
* @see BluetoothGattCallback#onCharacteristicWrite(BluetoothGatt, BluetoothGattCharacteristic, int)
*/
public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status);
/**
* @see BluetoothGattCallback#onCharacteristicChanged(BluetoothGatt, BluetoothGattCharacteristic)
* @param gatt
* @param characteristic
* @see BluetoothGattCallback#onCharacteristicChanged(BluetoothGatt, BluetoothGattCharacteristic)
*/
public void onCharacteristicChanged(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic);
@ -92,10 +92,10 @@ public interface GattCallback {
// public void onReliableWriteCompleted(BluetoothGatt gatt, int status);
/**
* @see BluetoothGattCallback#onReadRemoteRssi(BluetoothGatt, int, int)
* @param gatt
* @param rssi
* @param status
* @see BluetoothGattCallback#onReadRemoteRssi(BluetoothGatt, int, int)
*/
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status);

View File

@ -42,6 +42,7 @@ public class TransactionBuilder {
/**
* To be used as the final step to execute the transaction by the given queue.
*
* @param queue
*/
public void queue(BtLEQueue queue) {

View File

@ -184,7 +184,7 @@ public class MiBandService {
*/
private static Map<UUID,String> MIBAND_DEBUG;
private static Map<UUID, String> MIBAND_DEBUG;
static {
MIBAND_DEBUG = new HashMap<>();

View File

@ -1,14 +1,15 @@
package nodomain.freeyourgadget.gadgetbridge.miband;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.util.Log;
import java.io.IOException;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.GBCommand;
import nodomain.freeyourgadget.gadgetbridge.btle.AbstractBTLEDeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.btle.TransactionBuilder;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.util.Log;
public class MiBandSupport extends AbstractBTLEDeviceSupport {
@ -47,7 +48,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
}
private byte[] getNotification(long vibrateDuration, int vibrateTimes, int flashTimes, int flashColour, int originalColour, long flashDuration) {
byte[] vibrate = new byte[]{ (byte) 8, (byte) 1 };
byte[] vibrate = new byte[]{(byte) 8, (byte) 1};
byte r = 6;
byte g = 0;
byte b = 6;
@ -72,6 +73,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
/**
* Part of device initialization process. Do not call manually.
*
* @param builder
* @return
*/
@ -84,6 +86,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
/**
* Part of device initialization process. Do not call manually.
*
* @param builder
* @return
*/
@ -161,7 +164,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status) {
BluetoothGattCharacteristic characteristic, int status) {
UUID characteristicUUID = characteristic.getUuid();
if (MiBandService.UUID_CHARACTERISTIC_PAIR.equals(characteristicUUID)) {
handlePairResult(characteristic.getValue(), status);

View File

@ -17,6 +17,7 @@ public class UserInfo {
/**
* Creates a default user info.
*
* @param btAddress the address of the MI Band to connect to.
*/
public static UserInfo getDefault(String btAddress) {
@ -25,6 +26,7 @@ public class UserInfo {
/**
* Creates a user info with the given data
*
* @param address the address of the MI Band to connect to.
*/
public UserInfo(String address, String alias, int gender, int age, int height, int weight, int type) {
@ -53,7 +55,7 @@ public class UserInfo {
sequence[8] = (byte) (type & 0xff);
for (int u = 9; u < 19; u++)
sequence[u] = alias.getBytes()[u-9];
sequence[u] = alias.getBytes()[u - 9];
byte[] crcSequence = new byte[19];
for (int u = 0; u < crcSequence.length; u++)
@ -80,7 +82,7 @@ public class UserInfo {
sum = (byte) ((sum & 0xff) & 0x01);
crc = (byte) ((crc & 0xff) >>> 1);
if (sum != 0) {
crc = (byte)((crc & 0xff) ^ 0x8c);
crc = (byte) ((crc & 0xff) ^ 0x8c);
}
extract = (byte) ((extract & 0xff) >>> 1);
}