RS ble cleanup
This commit is contained in:
parent
080bca6a8a
commit
f14ba554f0
1 changed files with 39 additions and 63 deletions
|
@ -20,8 +20,6 @@ import org.slf4j.LoggerFactory;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
|
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
@ -45,11 +43,11 @@ public class BLEComm {
|
||||||
|
|
||||||
private static final long WRITE_DELAY_MILLIS = 50;
|
private static final long WRITE_DELAY_MILLIS = 50;
|
||||||
|
|
||||||
public static String UART_READ_UUID = "0000fff1-0000-1000-8000-00805f9b34fb";
|
private static String UART_READ_UUID = "0000fff1-0000-1000-8000-00805f9b34fb";
|
||||||
public static String UART_WRITE_UUID = "0000fff2-0000-1000-8000-00805f9b34fb";
|
private static String UART_WRITE_UUID = "0000fff2-0000-1000-8000-00805f9b34fb";
|
||||||
|
|
||||||
private byte PACKET_START_BYTE = (byte) 0xA5;
|
private final byte PACKET_START_BYTE = (byte) 0xA5;
|
||||||
private byte PACKET_END_BYTE = (byte) 0x5A;
|
private final byte PACKET_END_BYTE = (byte) 0x5A;
|
||||||
private static BLEComm instance = null;
|
private static BLEComm instance = null;
|
||||||
|
|
||||||
public static BLEComm getInstance(DanaRSService service) {
|
public static BLEComm getInstance(DanaRSService service) {
|
||||||
|
@ -58,16 +56,13 @@ public class BLEComm {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
|
|
||||||
private ScheduledFuture<?> scheduledDisconnection = null;
|
private ScheduledFuture<?> scheduledDisconnection = null;
|
||||||
|
|
||||||
private DanaRS_Packet processsedMessage = null;
|
private DanaRS_Packet processsedMessage = null;
|
||||||
private ArrayList<byte[]> mSendQueue = new ArrayList<>();
|
private final ArrayList<byte[]> mSendQueue = new ArrayList<>();
|
||||||
|
|
||||||
private BluetoothManager mBluetoothManager = null;
|
private BluetoothManager mBluetoothManager = null;
|
||||||
private BluetoothAdapter mBluetoothAdapter = null;
|
private BluetoothAdapter mBluetoothAdapter = null;
|
||||||
private BluetoothDevice mBluetoothDevice = null;
|
|
||||||
private String mBluetoothDeviceAddress = null;
|
|
||||||
private String mBluetoothDeviceName = null;
|
private String mBluetoothDeviceName = null;
|
||||||
private BluetoothGatt mBluetoothGatt = null;
|
private BluetoothGatt mBluetoothGatt = null;
|
||||||
|
|
||||||
|
@ -79,7 +74,7 @@ public class BLEComm {
|
||||||
|
|
||||||
private DanaRSService service;
|
private DanaRSService service;
|
||||||
|
|
||||||
BLEComm(DanaRSService service) {
|
private BLEComm(DanaRSService service) {
|
||||||
this.service = service;
|
this.service = service;
|
||||||
initialize();
|
initialize();
|
||||||
}
|
}
|
||||||
|
@ -138,15 +133,13 @@ public class BLEComm {
|
||||||
|
|
||||||
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
|
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
|
||||||
if (device == null) {
|
if (device == null) {
|
||||||
log.debug("Device not found. Unable to connect.");
|
log.debug("Device not found. Unable to connect from: " + from);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
log.debug("Trying to create a new connection.");
|
log.debug("Trying to create a new connection from: " + from);
|
||||||
mBluetoothGatt = device.connectGatt(service.getApplicationContext(), false, mGattCallback);
|
mBluetoothGatt = device.connectGatt(service.getApplicationContext(), false, mGattCallback);
|
||||||
setCharacteristicNotification(getUARTReadBTGattChar(), true);
|
setCharacteristicNotification(getUARTReadBTGattChar(), true);
|
||||||
mBluetoothDevice = device;
|
|
||||||
mBluetoothDeviceAddress = address;
|
|
||||||
mBluetoothDeviceName = device.getName();
|
mBluetoothDeviceName = device.getName();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -174,7 +167,7 @@ public class BLEComm {
|
||||||
SystemClock.sleep(2000);
|
SystemClock.sleep(2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() {
|
public synchronized void close() {
|
||||||
log.debug("BluetoothAdapter close");
|
log.debug("BluetoothAdapter close");
|
||||||
if (mBluetoothGatt == null) {
|
if (mBluetoothGatt == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -184,15 +177,8 @@ public class BLEComm {
|
||||||
mBluetoothGatt = null;
|
mBluetoothGatt = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothDevice getConnectDevice() {
|
|
||||||
return mBluetoothDevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getConnectDeviceAddress() {
|
private String getConnectDeviceName() {
|
||||||
return mBluetoothDeviceAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getConnectDeviceName() {
|
|
||||||
return mBluetoothDeviceName;
|
return mBluetoothDeviceName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,33 +215,25 @@ public class BLEComm {
|
||||||
public void onCharacteristicChanged(BluetoothGatt gatt, final BluetoothGattCharacteristic characteristic) {
|
public void onCharacteristicChanged(BluetoothGatt gatt, final BluetoothGattCharacteristic characteristic) {
|
||||||
log.debug("onCharacteristicChanged" + (characteristic != null ? ":" + DanaRS_Packet.toHexString(characteristic.getValue()) : ""));
|
log.debug("onCharacteristicChanged" + (characteristic != null ? ":" + DanaRS_Packet.toHexString(characteristic.getValue()) : ""));
|
||||||
addToReadBuffer(characteristic.getValue());
|
addToReadBuffer(characteristic.getValue());
|
||||||
new Thread(new Runnable() {
|
new Thread(() -> readDataParsing()).start();
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
readDataParsing();
|
|
||||||
}
|
|
||||||
}).start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
|
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
|
||||||
log.debug("onCharacteristicWrite" + (characteristic != null ? ":" + DanaRS_Packet.toHexString(characteristic.getValue()) : ""));
|
log.debug("onCharacteristicWrite" + (characteristic != null ? ":" + DanaRS_Packet.toHexString(characteristic.getValue()) : ""));
|
||||||
new Thread(new Runnable() {
|
new Thread(() -> {
|
||||||
@Override
|
synchronized (mSendQueue) {
|
||||||
public void run() {
|
// after message sent, check if there is the rest of the message waiting and send it
|
||||||
synchronized (mSendQueue) {
|
if (mSendQueue.size() > 0) {
|
||||||
// after message sent, check if there is the rest of the message waiting and send it
|
byte[] bytes = mSendQueue.get(0);
|
||||||
if (mSendQueue.size() > 0) {
|
mSendQueue.remove(0);
|
||||||
byte[] bytes = mSendQueue.get(0);
|
writeCharacteristic_NO_RESPONSE(getUARTWriteBTGattChar(), bytes);
|
||||||
mSendQueue.remove(0);
|
|
||||||
writeCharacteristic_NO_RESPONSE(getUARTWriteBTGattChar(), bytes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) {
|
private synchronized void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) {
|
||||||
log.debug("setCharacteristicNotification");
|
log.debug("setCharacteristicNotification");
|
||||||
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
||||||
log.debug("BluetoothAdapter not initialized_ERROR");
|
log.debug("BluetoothAdapter not initialized_ERROR");
|
||||||
|
@ -266,7 +244,7 @@ public class BLEComm {
|
||||||
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
|
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readCharacteristic(BluetoothGattCharacteristic characteristic) {
|
public synchronized void readCharacteristic(BluetoothGattCharacteristic characteristic) {
|
||||||
log.debug("readCharacteristic");
|
log.debug("readCharacteristic");
|
||||||
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
||||||
log.debug("BluetoothAdapter not initialized_ERROR");
|
log.debug("BluetoothAdapter not initialized_ERROR");
|
||||||
|
@ -277,41 +255,39 @@ public class BLEComm {
|
||||||
mBluetoothGatt.readCharacteristic(characteristic);
|
mBluetoothGatt.readCharacteristic(characteristic);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeCharacteristic_NO_RESPONSE(final BluetoothGattCharacteristic characteristic, final byte[] data) {
|
private synchronized void writeCharacteristic_NO_RESPONSE(final BluetoothGattCharacteristic characteristic, final byte[] data) {
|
||||||
new Thread(new Runnable() {
|
new Thread(() -> {
|
||||||
public void run() {
|
SystemClock.sleep(WRITE_DELAY_MILLIS);
|
||||||
SystemClock.sleep(WRITE_DELAY_MILLIS);
|
|
||||||
|
|
||||||
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
||||||
log.debug("BluetoothAdapter not initialized_ERROR");
|
log.debug("BluetoothAdapter not initialized_ERROR");
|
||||||
isConnecting = false;
|
isConnecting = false;
|
||||||
isConnected = false;
|
isConnected = false;
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
characteristic.setValue(data);
|
|
||||||
characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
|
|
||||||
log.debug("writeCharacteristic:" + DanaRS_Packet.toHexString(data));
|
|
||||||
mBluetoothGatt.writeCharacteristic(characteristic);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
characteristic.setValue(data);
|
||||||
|
characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
|
||||||
|
log.debug("writeCharacteristic:" + DanaRS_Packet.toHexString(data));
|
||||||
|
mBluetoothGatt.writeCharacteristic(characteristic);
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothGattCharacteristic getUARTReadBTGattChar() {
|
private BluetoothGattCharacteristic getUARTReadBTGattChar() {
|
||||||
if (UART_Read == null) {
|
if (UART_Read == null) {
|
||||||
UART_Read = new BluetoothGattCharacteristic(UUID.fromString(UART_READ_UUID), BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_NOTIFY, 0);
|
UART_Read = new BluetoothGattCharacteristic(UUID.fromString(UART_READ_UUID), BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_NOTIFY, 0);
|
||||||
}
|
}
|
||||||
return UART_Read;
|
return UART_Read;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothGattCharacteristic getUARTWriteBTGattChar() {
|
private BluetoothGattCharacteristic getUARTWriteBTGattChar() {
|
||||||
if (UART_Write == null) {
|
if (UART_Write == null) {
|
||||||
UART_Write = new BluetoothGattCharacteristic(UUID.fromString(UART_WRITE_UUID), BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE, 0);
|
UART_Write = new BluetoothGattCharacteristic(UUID.fromString(UART_WRITE_UUID), BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE, 0);
|
||||||
}
|
}
|
||||||
return UART_Write;
|
return UART_Write;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<BluetoothGattService> getSupportedGattServices() {
|
private List<BluetoothGattService> getSupportedGattServices() {
|
||||||
log.debug("getSupportedGattServices");
|
log.debug("getSupportedGattServices");
|
||||||
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
if ((mBluetoothAdapter == null) || (mBluetoothGatt == null)) {
|
||||||
log.debug("BluetoothAdapter not initialized_ERROR");
|
log.debug("BluetoothAdapter not initialized_ERROR");
|
||||||
|
@ -329,7 +305,7 @@ public class BLEComm {
|
||||||
if (gattServices == null) {
|
if (gattServices == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String uuid = null;
|
String uuid;
|
||||||
|
|
||||||
for (BluetoothGattService gattService : gattServices) {
|
for (BluetoothGattService gattService : gattServices) {
|
||||||
List<BluetoothGattCharacteristic> gattCharacteristics = gattService.getCharacteristics();
|
List<BluetoothGattCharacteristic> gattCharacteristics = gattService.getCharacteristics();
|
||||||
|
@ -346,7 +322,7 @@ public class BLEComm {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] readBuffer = new byte[1024];
|
private final byte[] readBuffer = new byte[1024];
|
||||||
private int bufferLength = 0;
|
private int bufferLength = 0;
|
||||||
|
|
||||||
private void addToReadBuffer(byte[] buffer) {
|
private void addToReadBuffer(byte[] buffer) {
|
||||||
|
@ -634,7 +610,7 @@ public class BLEComm {
|
||||||
writeCharacteristic_NO_RESPONSE(getUARTWriteBTGattChar(), bytes);
|
writeCharacteristic_NO_RESPONSE(getUARTWriteBTGattChar(), bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void SendPumpCheck() {
|
private void SendPumpCheck() {
|
||||||
// 1st message sent to pump after connect
|
// 1st message sent to pump after connect
|
||||||
byte[] bytes = BleCommandUtil.getInstance().getEncryptedPacket(BleCommandUtil.DANAR_PACKET__OPCODE_ENCRYPTION__PUMP_CHECK, null, getConnectDeviceName());
|
byte[] bytes = BleCommandUtil.getInstance().getEncryptedPacket(BleCommandUtil.DANAR_PACKET__OPCODE_ENCRYPTION__PUMP_CHECK, null, getConnectDeviceName());
|
||||||
log.debug(">>>>> " + "ENCRYPTION__PUMP_CHECK (0x00)" + " " + DanaRS_Packet.toHexString(bytes));
|
log.debug(">>>>> " + "ENCRYPTION__PUMP_CHECK (0x00)" + " " + DanaRS_Packet.toHexString(bytes));
|
||||||
|
|
Loading…
Reference in a new issue