mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-29 13:26:50 +01:00
Added device information and reworked notifications
This commit is contained in:
parent
8775255d69
commit
8f996e04cd
@ -4,6 +4,8 @@ import android.app.AlarmManager;
|
|||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.bluetooth.BluetoothGatt;
|
import android.bluetooth.BluetoothGatt;
|
||||||
import android.bluetooth.BluetoothGattCharacteristic;
|
import android.bluetooth.BluetoothGattCharacteristic;
|
||||||
|
import android.bluetooth.BluetoothGattServer;
|
||||||
|
import android.bluetooth.BluetoothGattService;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -25,6 +27,7 @@ import java.nio.ByteBuffer;
|
|||||||
import java.util.ArrayDeque;
|
import java.util.ArrayDeque;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -58,6 +61,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.Pla
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.ReleaseHandsControlRequest;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.ReleaseHandsControlRequest;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.Request;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.Request;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.RequestHandControlRequest;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.RequestHandControlRequest;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.SetCountdownSettings;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.SetCurrentTimeServiceRequest;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.SetCurrentTimeServiceRequest;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.SetStepGoalRequest;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.SetStepGoalRequest;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.SetVibrationStrengthRequest;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.SetVibrationStrengthRequest;
|
||||||
@ -111,6 +115,9 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
|
|
||||||
Queue<Request> requestQueue = new ArrayDeque<>();
|
Queue<Request> requestQueue = new ArrayDeque<>();
|
||||||
|
|
||||||
|
|
||||||
|
private String modelNumber;
|
||||||
|
|
||||||
public QHybridSupport() {
|
public QHybridSupport() {
|
||||||
super(logger);
|
super(logger);
|
||||||
addSupportedService(UUID.fromString("3dda0001-957f-7d4a-34a6-74696673696d"));
|
addSupportedService(UUID.fromString("3dda0001-957f-7d4a-34a6-74696673696d"));
|
||||||
@ -127,7 +134,6 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void fillResponseList() {
|
private void fillResponseList() {
|
||||||
|
|
||||||
Class<? extends Request>[] classes = new Class[]{
|
Class<? extends Request>[] classes = new Class[]{
|
||||||
BatteryLevelRequest.class,
|
BatteryLevelRequest.class,
|
||||||
GetStepGoalRequest.class,
|
GetStepGoalRequest.class,
|
||||||
@ -194,9 +200,6 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
protected TransactionBuilder initializeDevice(TransactionBuilder builder) {
|
protected TransactionBuilder initializeDevice(TransactionBuilder builder) {
|
||||||
builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZING, getContext()));
|
builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZING, getContext()));
|
||||||
|
|
||||||
for (int i = 2; i <= 7; i++)
|
|
||||||
builder.notify(getCharacteristic(UUID.fromString("3dda000" + i + "-957f-7d4a-34a6-74696673696d")), true);
|
|
||||||
|
|
||||||
|
|
||||||
helper = new PackageConfigHelper(getContext());
|
helper = new PackageConfigHelper(getContext());
|
||||||
|
|
||||||
@ -212,6 +215,7 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
getTimeOffset();
|
getTimeOffset();
|
||||||
|
|
||||||
builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZED, getContext()));
|
builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZED, getContext()));
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,20 +223,19 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
public void onServicesDiscovered(BluetoothGatt gatt) {
|
public void onServicesDiscovered(BluetoothGatt gatt) {
|
||||||
super.onServicesDiscovered(gatt);
|
super.onServicesDiscovered(gatt);
|
||||||
|
|
||||||
playAnimation();
|
|
||||||
requestQueue.add(new GetStepGoalRequest());
|
|
||||||
requestQueue.add(new GetCurrentStepCountRequest());
|
for (int i = 2; i <= 7; i++)
|
||||||
requestQueue.add(new GetVibrationStrengthRequest());
|
gatt.setCharacteristicNotification(getCharacteristic(UUID.fromString("3dda000" + i + "-957f-7d4a-34a6-74696673696d")), true);
|
||||||
requestQueue.add(new ActivityPointGetRequest());
|
|
||||||
queueWrite(new BatteryLevelRequest());
|
BluetoothGattService deviceInfo = gatt.getService(UUID.fromString("0000180a-0000-1000-8000-00805f9b34fb"));
|
||||||
|
BluetoothGattCharacteristic modelNumber = deviceInfo.getCharacteristic(UUID.fromString("00002a24-0000-1000-8000-00805f9b34fb"));
|
||||||
|
|
||||||
|
gatt.readCharacteristic(modelNumber);
|
||||||
|
|
||||||
logger.debug("onServicesDiscovered");
|
logger.debug("onServicesDiscovered");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void playAnimation() {
|
|
||||||
queueWrite(new AnimationRequest());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNotification(NotificationSpec notificationSpec) {
|
public void onNotification(NotificationSpec notificationSpec) {
|
||||||
Log.d("Service", "notif from " + notificationSpec.sourceAppId + " " + notificationSpec.sender + " " + notificationSpec.phoneNumber);
|
Log.d("Service", "notif from " + notificationSpec.sourceAppId + " " + notificationSpec.sender + " " + notificationSpec.phoneNumber);
|
||||||
@ -305,6 +308,9 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
// queueWrite(new OTAResetRequest());
|
// queueWrite(new OTAResetRequest());
|
||||||
// new UploadFileRequest((short)00, new byte[]{0x01, 0x00, 0x08, 0x01, 0x01, 0x0C, 0x00, (byte)0xBD, 0x01, 0x30, 0x71, (byte)0xFF, 0x05, 0x00, 0x01, 0x00});
|
// new UploadFileRequest((short)00, new byte[]{0x01, 0x00, 0x08, 0x01, 0x01, 0x0C, 0x00, (byte)0xBD, 0x01, 0x30, 0x71, (byte)0xFF, 0x05, 0x00, 0x01, 0x00});
|
||||||
// queueWrite(new ActivityPointGetRequest());
|
// queueWrite(new ActivityPointGetRequest());
|
||||||
|
long millis = System.currentTimeMillis();
|
||||||
|
int secs = (int)(millis / 1000 * 60);
|
||||||
|
queueWrite(new SetCountdownSettings(secs, secs + 10, (short)120));
|
||||||
queueWrite(new GetCountdownSettingsRequest());
|
queueWrite(new GetCountdownSettingsRequest());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,6 +358,48 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
|
||||||
|
switch (characteristic.getUuid().toString()){
|
||||||
|
case "00002a24-0000-1000-8000-00805f9b34fb":{
|
||||||
|
modelNumber = characteristic.getStringValue(0);
|
||||||
|
gbDevice.setModel(modelNumber);
|
||||||
|
|
||||||
|
BluetoothGattService genericAccess = gatt.getService(UUID.fromString("00001800-0000-1000-8000-00805f9b34fb"));
|
||||||
|
BluetoothGattCharacteristic deviceName = genericAccess.getCharacteristic(UUID.fromString("00002a00-0000-1000-8000-00805f9b34fb"));
|
||||||
|
|
||||||
|
gatt.readCharacteristic(deviceName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "00002a00-0000-1000-8000-00805f9b34fb":{
|
||||||
|
String deviceName = characteristic.getStringValue(0);
|
||||||
|
gbDevice.setName(deviceName);
|
||||||
|
|
||||||
|
BluetoothGattService genericAccess = gatt.getService(UUID.fromString("0000180a-0000-1000-8000-00805f9b34fb"));
|
||||||
|
BluetoothGattCharacteristic firmwareVersion = genericAccess.getCharacteristic(UUID.fromString("00002a26-0000-1000-8000-00805f9b34fb"));
|
||||||
|
|
||||||
|
gatt.readCharacteristic(firmwareVersion);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "00002a26-0000-1000-8000-00805f9b34fb":{
|
||||||
|
String firmwareVersion = characteristic.getStringValue(0);
|
||||||
|
gbDevice.setFirmwareVersion(firmwareVersion);
|
||||||
|
|
||||||
|
requestQueue.add(new GetStepGoalRequest());
|
||||||
|
requestQueue.add(new GetCurrentStepCountRequest());
|
||||||
|
requestQueue.add(new GetVibrationStrengthRequest());
|
||||||
|
requestQueue.add(new ActivityPointGetRequest());
|
||||||
|
requestQueue.add(new AnimationRequest());
|
||||||
|
queueWrite(new BatteryLevelRequest());
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
|
public boolean onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
|
||||||
switch (characteristic.getUuid().toString()) {
|
switch (characteristic.getUuid().toString()) {
|
||||||
@ -464,6 +512,7 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
|
|
||||||
if (request instanceof BatteryLevelRequest) {
|
if (request instanceof BatteryLevelRequest) {
|
||||||
gbDevice.setBatteryLevel(((BatteryLevelRequest) request).level);
|
gbDevice.setBatteryLevel(((BatteryLevelRequest) request).level);
|
||||||
|
gbDevice.setBatteryThresholdPercent((short)25);
|
||||||
} else if (request instanceof GetStepGoalRequest) {
|
} else if (request instanceof GetStepGoalRequest) {
|
||||||
gbDevice.addDeviceInfo(new GenericItem(ITEM_STEP_GOAL, String.valueOf(((GetStepGoalRequest) request).stepGoal)));
|
gbDevice.addDeviceInfo(new GenericItem(ITEM_STEP_GOAL, String.valueOf(((GetStepGoalRequest) request).stepGoal)));
|
||||||
} else if (request instanceof GetVibrationStrengthRequest) {
|
} else if (request instanceof GetVibrationStrengthRequest) {
|
||||||
@ -507,10 +556,9 @@ public class QHybridSupport extends QHybridBaseSupport {
|
|||||||
} else if (request instanceof ActivityPointGetRequest) {
|
} else if (request instanceof ActivityPointGetRequest) {
|
||||||
gbDevice.addDeviceInfo(new GenericItem(ITEM_ACTIVITY_POINT, String.valueOf(((ActivityPointGetRequest) request).activityPoint)));
|
gbDevice.addDeviceInfo(new GenericItem(ITEM_ACTIVITY_POINT, String.valueOf(((ActivityPointGetRequest) request).activityPoint)));
|
||||||
}
|
}
|
||||||
Request nextRequest;
|
try {
|
||||||
if((nextRequest = requestQueue.remove()) != null){
|
queueWrite(requestQueue.remove());
|
||||||
queueWrite(nextRequest);
|
}catch (NoSuchElementException e){}
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user