1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-07-16 18:34:03 +02:00

Fossil Hybrid: extracted file handles to enum

This commit is contained in:
Daniel Dakhno 2020-10-16 01:48:40 +02:00
parent be2f8aaedc
commit f36c68b065
24 changed files with 123 additions and 49 deletions

View File

@ -0,0 +1,35 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file;
public enum FileHandle {
OTA_FILE(0x00, 0x00),
FONT_FILE(0x03, 0x00),
MUSIC_INFO(0x04, 0x00),
UI_CONTROL(0x05, 0x00),
HAND_ACTIONS(0x06, 0x00),
SETTINGS_BUTTONS(0x06, 0x00),
ASSET_BACKGROUND_IMAGES(0x07, 0x00),
ASSET_NOTIFICATION_IMAGES(0x07, 0x01),
ASSET_TRANSLATIONS(0x07, 0x02),
ASSET_REPLY_IMAGES(0x07, 0x03),
CONFIGURATION(0x08, 0x00),
NOTIFICATION_PLAY(0x09, 0x00),
ALARMS(0x0A, 0x00),
DEVICE_INFO(0x0b, 0x00),
NOTIFICATION_FILTER(0x0C, 0x00),
WATCH_PARAMETERS(0x0E, 0x00),
LOOK_UP_TABLE(0x0f, 0x00),
RATE(0x10, 0x00),
REPLY_MESSAGES(0x13, 0x00),
;
private byte handle, subHandle;
FileHandle(int handle, int subHandle) {
this.handle = (byte) handle;
this.subHandle = (byte) subHandle;
}
public short getHandle(){
return (short)((handle << 8) | (subHandle));
}
}

View File

@ -23,12 +23,13 @@ import java.util.regex.Pattern;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
import nodomain.freeyourgadget.gadgetbridge.util.Version; import nodomain.freeyourgadget.gadgetbridge.util.Version;
public class AlarmsSetRequest extends FilePutRequest { public class AlarmsSetRequest extends FilePutRequest {
public AlarmsSetRequest(Alarm[] alarms, FossilWatchAdapter adapter) { public AlarmsSetRequest(Alarm[] alarms, FossilWatchAdapter adapter) {
super((short) 0x0A00, createFileFromAlarms(alarms, isNewFormat(adapter)), isNewFormat(adapter) ? (short) 3 : (short) 2, adapter); // TODO version 3 super(FileHandle.ALARMS, createFileFromAlarms(alarms, isNewFormat(adapter)), isNewFormat(adapter) ? (short) 3 : (short) 2, adapter); // TODO version 3
} }
static private boolean isNewFormat(FossilWatchAdapter adapter) { static private boolean isNewFormat(FossilWatchAdapter adapter) {

View File

@ -21,11 +21,12 @@ import java.nio.ByteOrder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.buttonconfig.ConfigPayload; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.buttonconfig.ConfigPayload;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest;
public class ButtonConfigurationGetRequest extends FileGetRequest { public class ButtonConfigurationGetRequest extends FileGetRequest {
public ButtonConfigurationGetRequest(FossilWatchAdapter adapter) { public ButtonConfigurationGetRequest(FossilWatchAdapter adapter) {
super((short) 0x0600, adapter); super(FileHandle.SETTINGS_BUTTONS, adapter);
} }
@Override @Override

View File

@ -20,12 +20,13 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem; import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileLookupAndGetRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileLookupAndGetRequest;
public class ConfigurationGetRequest extends FileGetRequest { public class ConfigurationGetRequest extends FileGetRequest {
public ConfigurationGetRequest(FossilWatchAdapter adapter) { public ConfigurationGetRequest(FossilWatchAdapter adapter) {
super((byte) 8, adapter); super(FileHandle.CONFIGURATION, adapter);
} }
@Override @Override

View File

@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
@ -73,11 +74,11 @@ public class ConfigurationPutRequest extends FilePutRequest {
} }
public ConfigurationPutRequest(ConfigItem item, FossilWatchAdapter adapter) { public ConfigurationPutRequest(ConfigItem item, FossilWatchAdapter adapter) {
super((short) 0x0800, createFileContent(new ConfigItem[]{item}), adapter); super(FileHandle.CONFIGURATION, createFileContent(new ConfigItem[]{item}), adapter);
} }
public ConfigurationPutRequest(ConfigItem[] items, FossilWatchAdapter adapter) { public ConfigurationPutRequest(ConfigItem[] items, FossilWatchAdapter adapter) {
super((short) 0x0800, createFileContent(items), adapter); super(FileHandle.CONFIGURATION, createFileContent(items), adapter);
} }
private static byte[] createFileContent(ConfigItem[] items) { private static byte[] createFileContent(ConfigItem[] items) {

View File

@ -22,6 +22,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationConfigur
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.notification.NotificationFilterPutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.notification.NotificationFilterPutRequest;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
@ -29,7 +30,7 @@ public class FileCloseAndPutRequest extends FileCloseRequest {
FossilWatchAdapter adapter; FossilWatchAdapter adapter;
byte[] data; byte[] data;
public FileCloseAndPutRequest(short fileHandle, byte[] data, FossilWatchAdapter adapter) { public FileCloseAndPutRequest(FileHandle fileHandle, byte[] data, FossilWatchAdapter adapter) {
super(fileHandle); super(fileHandle);
this.adapter = adapter; this.adapter = adapter;
this.data = data; this.data = data;

View File

@ -22,23 +22,24 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.util.UUID; import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
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.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode;
public class FileCloseRequest extends FossilRequest { public class FileCloseRequest extends FossilRequest {
private boolean isFinished = false; private boolean isFinished = false;
private short handle; private FileHandle handle;
public FileCloseRequest(short fileHandle) { public FileCloseRequest(FileHandle fileHandle) {
this.handle = fileHandle; this.handle = fileHandle;
ByteBuffer buffer = this.createBuffer(); ByteBuffer buffer = this.createBuffer();
buffer.putShort(fileHandle); buffer.putShort(fileHandle.getHandle());
this.data = buffer.array(); this.data = buffer.array();
} }
public short getHandle() { public FileHandle getHandle() {
return handle; return handle;
} }
@ -61,7 +62,7 @@ public class FileCloseRequest extends FossilRequest {
ByteBuffer buffer = ByteBuffer.wrap(value); ByteBuffer buffer = ByteBuffer.wrap(value);
buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.order(ByteOrder.LITTLE_ENDIAN);
if(this.handle != buffer.getShort(1)) throw new RuntimeException("wrong response handle"); if(this.handle.getHandle() != buffer.getShort(1)) throw new RuntimeException("wrong response handle");
byte status = buffer.get(3); byte status = buffer.get(3);

View File

@ -21,6 +21,7 @@ import android.bluetooth.BluetoothGattCharacteristic;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode;
@ -38,6 +39,10 @@ public class FileDeleteRequest extends FossilRequest {
this.data = buffer.array(); this.data = buffer.array();
} }
public FileDeleteRequest(FileHandle handle){
this(handle.getHandle());
}
@Override @Override
public void handleResponse(BluetoothGattCharacteristic characteristic) { public void handleResponse(BluetoothGattCharacteristic characteristic) {
super.handleResponse(characteristic); super.handleResponse(characteristic);

View File

@ -26,6 +26,7 @@ import java.util.zip.CRC32;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
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.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode;
@ -52,6 +53,10 @@ public abstract class FileGetRequest extends FossilRequest {
.array(); .array();
} }
public FileGetRequest(FileHandle handle, FossilWatchAdapter adapter){
this(handle.getHandle(), adapter);
}
public FossilWatchAdapter getAdapter() { public FossilWatchAdapter getAdapter() {
return adapter; return adapter;
} }

View File

@ -26,6 +26,7 @@ import java.util.zip.CRC32;
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode;
import nodomain.freeyourgadget.gadgetbridge.util.CRC32C; import nodomain.freeyourgadget.gadgetbridge.util.CRC32C;
@ -37,7 +38,9 @@ public class FilePutRequest extends FossilRequest {
private ArrayList<byte[]> packets = new ArrayList<>(); private ArrayList<byte[]> packets = new ArrayList<>();
private short handle, fileVersion; private short fileVersion;
private FileHandle handle;
private FossilWatchAdapter adapter; private FossilWatchAdapter adapter;
@ -45,14 +48,14 @@ public class FilePutRequest extends FossilRequest {
private int fullCRC; private int fullCRC;
public FilePutRequest(short handle, byte[] file, short fileVersion, FossilWatchAdapter adapter) { public FilePutRequest(FileHandle fileHandle, byte[] file, short fileVersion, FossilWatchAdapter adapter) {
this.handle = handle; this.handle = fileHandle;
this.adapter = adapter; this.adapter = adapter;
this.fileVersion = fileVersion; this.fileVersion = fileVersion;
int fileLength = file.length + 16; int fileLength = file.length + 16;
ByteBuffer buffer = this.createBuffer(); ByteBuffer buffer = this.createBuffer();
buffer.putShort(1, handle); buffer.putShort(1, handle.getHandle());
buffer.putInt(3, 0); buffer.putInt(3, 0);
buffer.putInt(7, fileLength); buffer.putInt(7, fileLength);
buffer.putInt(11, fileLength); buffer.putInt(11, fileLength);
@ -64,11 +67,11 @@ public class FilePutRequest extends FossilRequest {
state = UploadState.INITIALIZED; state = UploadState.INITIALIZED;
} }
public FilePutRequest(short handle, byte[] file, FossilWatchAdapter adapter) { public FilePutRequest(FileHandle fileHandle, byte[] file, FossilWatchAdapter adapter) {
this(handle, file, (short) 2, adapter); this(fileHandle, file, (short) 2, adapter);
} }
public short getHandle() { public FileHandle getHandle() {
return handle; return handle;
} }
@ -110,7 +113,7 @@ public class FilePutRequest extends FossilRequest {
throw new RuntimeException("upload status: " + code + " (" + status + ")"); throw new RuntimeException("upload status: " + code + " (" + status + ")");
} }
if (handle != this.handle) { if (handle != this.handle.getHandle()) {
throw new RuntimeException("wrong response handle"); throw new RuntimeException("wrong response handle");
} }
@ -122,7 +125,7 @@ public class FilePutRequest extends FossilRequest {
ByteBuffer buffer2 = ByteBuffer.allocate(3); ByteBuffer buffer2 = ByteBuffer.allocate(3);
buffer2.order(ByteOrder.LITTLE_ENDIAN); buffer2.order(ByteOrder.LITTLE_ENDIAN);
buffer2.put((byte) 4); buffer2.put((byte) 4);
buffer2.putShort(this.handle); buffer2.putShort(this.handle.getHandle());
new TransactionBuilder("file close") new TransactionBuilder("file close")
.write( .write(
@ -144,7 +147,7 @@ public class FilePutRequest extends FossilRequest {
short handle = buffer.getShort(1); short handle = buffer.getShort(1);
if (handle != this.handle) { if (handle != this.handle.getHandle()) {
onFilePut(false); onFilePut(false);
throw new RuntimeException("wrong file closing handle"); throw new RuntimeException("wrong file closing handle");
} }
@ -199,7 +202,7 @@ public class FilePutRequest extends FossilRequest {
ByteBuffer buffer = ByteBuffer.allocate(file.length + 12 + 4); ByteBuffer buffer = ByteBuffer.allocate(file.length + 12 + 4);
buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.putShort(handle); buffer.putShort(handle.getHandle());
buffer.putShort(fileVersion); buffer.putShort(fileVersion);
buffer.putInt(0); buffer.putInt(0);
buffer.putInt(file.length); buffer.putInt(file.length);

View File

@ -21,22 +21,23 @@ import android.bluetooth.BluetoothGattCharacteristic;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.ResultCode;
public class FileVerifyRequest extends FossilRequest { public class FileVerifyRequest extends FossilRequest {
private boolean isFinished = false; private boolean isFinished = false;
private short handle; private FileHandle handle;
public FileVerifyRequest(short fileHandle) { public FileVerifyRequest(FileHandle fileHandle) {
this.handle = fileHandle; this.handle = fileHandle;
ByteBuffer buffer = this.createBuffer(); ByteBuffer buffer = this.createBuffer();
buffer.putShort(fileHandle); buffer.putShort(fileHandle.getHandle());
this.data = buffer.array(); this.data = buffer.array();
} }
public short getHandle() { public FileHandle getHandle() {
return handle; return handle;
} }
@ -61,7 +62,7 @@ public class FileVerifyRequest extends FossilRequest {
ByteBuffer buffer = ByteBuffer.wrap(value); ByteBuffer buffer = ByteBuffer.wrap(value);
buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.order(ByteOrder.LITTLE_ENDIAN);
if(this.handle != buffer.getShort(1)) throw new RuntimeException("wrong response handle"); if(this.handle.getHandle() != buffer.getShort(1)) throw new RuntimeException("wrong response handle");
byte status = buffer.get(3); byte status = buffer.get(3);

View File

@ -23,11 +23,12 @@ import java.util.List;
import java.util.zip.CRC32; import java.util.zip.CRC32;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
public class PlayCrazyShitRequest extends FilePutRequest { public class PlayCrazyShitRequest extends FilePutRequest {
public PlayCrazyShitRequest(byte[] appData, FossilWatchAdapter adapter) { public PlayCrazyShitRequest(byte[] appData, FossilWatchAdapter adapter) {
super((short) 0x0600, createPayload(appData), adapter); super(FileHandle.HAND_ACTIONS, createPayload(appData), adapter);
} }
private static byte[] createPayload(byte[] appData) { private static byte[] createPayload(byte[] appData) {

View File

@ -20,12 +20,13 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest;
import nodomain.freeyourgadget.gadgetbridge.util.CRC32C; import nodomain.freeyourgadget.gadgetbridge.util.CRC32C;
public class NotificationFilterGetRequest extends FileGetRequest { public class NotificationFilterGetRequest extends FileGetRequest {
public NotificationFilterGetRequest(FossilWatchAdapter adapter) { public NotificationFilterGetRequest(FossilWatchAdapter adapter) {
super((short) 0x0C00, adapter); super(FileHandle.NOTIFICATION_FILTER, adapter);
} }
@Override @Override

View File

@ -23,17 +23,18 @@ import java.util.zip.CRC32;
import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationConfiguration; import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationConfiguration;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileCloseAndPutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileCloseAndPutRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
public class NotificationFilterPutRequest extends FilePutRequest { public class NotificationFilterPutRequest extends FilePutRequest {
public NotificationFilterPutRequest(NotificationConfiguration[] configs, FossilWatchAdapter adapter) { public NotificationFilterPutRequest(NotificationConfiguration[] configs, FossilWatchAdapter adapter) {
super((short) 0x0C00, createFile(configs), adapter); super(FileHandle.NOTIFICATION_FILTER, createFile(configs), adapter);
} }
public NotificationFilterPutRequest(ArrayList<NotificationConfiguration> configs, FossilWatchAdapter adapter) { public NotificationFilterPutRequest(ArrayList<NotificationConfiguration> configs, FossilWatchAdapter adapter) {
super((short) 0x0C00, createFile(configs.toArray(new NotificationConfiguration[0])), adapter); super(FileHandle.NOTIFICATION_FILTER, createFile(configs.toArray(new NotificationConfiguration[0])), adapter);
} }
private static byte[] createFile(NotificationConfiguration[] configs){ private static byte[] createFile(NotificationConfiguration[] configs){

View File

@ -23,20 +23,21 @@ import java.util.Arrays;
import java.util.zip.CRC32; import java.util.zip.CRC32;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
public abstract class PlayNotificationRequest extends FilePutRequest { public abstract class PlayNotificationRequest extends FilePutRequest {
public PlayNotificationRequest(int notificationType, int flags, String packageName, FossilWatchAdapter adapter) { public PlayNotificationRequest(int notificationType, int flags, String packageName, FossilWatchAdapter adapter) {
super((short) 0x0900, createFile(notificationType, flags, packageName, packageName, packageName, getCurrentMessageId()), adapter); super(FileHandle.NOTIFICATION_PLAY, createFile(notificationType, flags, packageName, packageName, packageName, getCurrentMessageId()), adapter);
} }
public PlayNotificationRequest(int notificationType, int flags, String packageName, String sender, String message, FossilWatchAdapter adapter) { public PlayNotificationRequest(int notificationType, int flags, String packageName, String sender, String message, FossilWatchAdapter adapter) {
super((short) 0x0900, createFile(notificationType, flags, packageName, sender, message, getCurrentMessageId()), adapter); super(FileHandle.NOTIFICATION_PLAY, createFile(notificationType, flags, packageName, sender, message, getCurrentMessageId()), adapter);
} }
public PlayNotificationRequest(int notificationType, int flags, int packageCRC, String sender, String message, int messageId, FossilWatchAdapter adapter) { public PlayNotificationRequest(int notificationType, int flags, int packageCRC, String sender, String message, int messageId, FossilWatchAdapter adapter) {
super((short) 0x0900, createFile(notificationType, flags, "whatever", sender, message, packageCRC, messageId), adapter); super(FileHandle.NOTIFICATION_PLAY, createFile(notificationType, flags, "whatever", sender, message, packageCRC, messageId), adapter);
} }
private static int getCurrentMessageId(){ private static int getCurrentMessageId(){

View File

@ -6,14 +6,15 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
public class AssetFilePutRequest extends FilePutRequest { public class AssetFilePutRequest extends FilePutRequest {
public AssetFilePutRequest(AssetFile[] files, byte subHandle, FossilWatchAdapter adapter) throws IOException { public AssetFilePutRequest(AssetFile[] files, FileHandle handle, FossilWatchAdapter adapter) throws IOException {
super((short) (0x0700 | subHandle), prepareFileData(files), adapter); super(handle, prepareFileData(files), adapter);
} }
public AssetFilePutRequest(AssetFile file, byte subHandle, FossilWatchAdapter adapter) { public AssetFilePutRequest(AssetFile file, FileHandle handle, FossilWatchAdapter adapter) {
super((short) (0x0700 | subHandle), prepareFileData(file), adapter); super(handle, prepareFileData(file), adapter);
} }
private static byte[] prepareFileData(AssetFile[] files) throws IOException { private static byte[] prepareFileData(AssetFile[] files) throws IOException {

View File

@ -35,6 +35,7 @@ import javax.crypto.spec.SecretKeySpec;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil_hr.FossilHRWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil_hr.FossilHRWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest;
import nodomain.freeyourgadget.gadgetbridge.util.CRC32C; import nodomain.freeyourgadget.gadgetbridge.util.CRC32C;
@ -64,6 +65,10 @@ public abstract class FileEncryptedGetRequest extends FossilRequest {
.array(); .array();
} }
public FileEncryptedGetRequest(FileHandle handle, FossilHRWatchAdapter adapter) {
this(handle.getHandle(), adapter);
}
private void initDecryption() { private void initDecryption() {
try { try {
cipher = Cipher.getInstance("AES/CTR/NoPadding"); cipher = Cipher.getInstance("AES/CTR/NoPadding");

View File

@ -10,6 +10,7 @@ import java.util.zip.CRC32;
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest;
public class FilePutRawRequest extends FossilRequest { public class FilePutRawRequest extends FossilRequest {
@ -45,7 +46,11 @@ public class FilePutRawRequest extends FossilRequest {
state = UploadState.INITIALIZED; state = UploadState.INITIALIZED;
} }
public short getHandle() { public FilePutRawRequest(FileHandle handle, byte[] file, FossilWatchAdapter adapter) {
this(handle.getHandle(), file, adapter);
}
public short getHandle() {
return handle; return handle;
} }

View File

@ -28,7 +28,7 @@ public enum ResultCode {
UNKNOWN(-1, false), UNKNOWN(-1, false),
// no clue what there one mean // no clue what there one mean
UNKNOWN_1(-125, true); UNKNOWN_1(-125, false);
boolean success; boolean success;
int code; int code;

View File

@ -5,11 +5,12 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
public class MusicInfoSetRequest extends FilePutRequest { public class MusicInfoSetRequest extends FilePutRequest {
public MusicInfoSetRequest(String artist, String album, String title, FossilWatchAdapter adapter) { public MusicInfoSetRequest(String artist, String album, String title, FossilWatchAdapter adapter) {
super((short) 0x0400, createFile(artist, album, title), adapter); super(FileHandle.MUSIC_INFO, createFile(artist, album, title), adapter);
} }
private static byte[] createFile(String artist, String album, String title) { private static byte[] createFile(String artist, String album, String title) {

View File

@ -6,17 +6,18 @@ import java.util.ArrayList;
import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationHRConfiguration; import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationHRConfiguration;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
public class NotificationFilterPutHRRequest extends FilePutRequest { public class NotificationFilterPutHRRequest extends FilePutRequest {
public NotificationFilterPutHRRequest(NotificationHRConfiguration[] configs, FossilWatchAdapter adapter) { public NotificationFilterPutHRRequest(NotificationHRConfiguration[] configs, FossilWatchAdapter adapter) {
super((short) 0x0C00, createFile(configs), adapter); super(FileHandle.NOTIFICATION_FILTER, createFile(configs), adapter);
} }
public NotificationFilterPutHRRequest(ArrayList<NotificationHRConfiguration> configs, FossilWatchAdapter adapter) { public NotificationFilterPutHRRequest(ArrayList<NotificationHRConfiguration> configs, FossilWatchAdapter adapter) {
super((short) 0x0C00, createFile(configs.toArray(new NotificationHRConfiguration[0])), adapter); super(FileHandle.NOTIFICATION_FILTER, createFile(configs.toArray(new NotificationHRConfiguration[0])), adapter);
} }
private static byte[] createFile(NotificationHRConfiguration[] configs) { private static byte[] createFile(NotificationHRConfiguration[] configs) {

View File

@ -6,21 +6,22 @@ import java.nio.ByteOrder;
import java.util.zip.CRC32; import java.util.zip.CRC32;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.AssetFile; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.AssetFile;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.AssetFilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.file.AssetFilePutRequest;
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
public class NotificationImagePutRequest extends AssetFilePutRequest { public class NotificationImagePutRequest extends AssetFilePutRequest {
private NotificationImagePutRequest(String packageName, AssetFile file, FossilWatchAdapter adapter) throws IOException { private NotificationImagePutRequest(String packageName, AssetFile file, FossilWatchAdapter adapter) throws IOException {
super(file, (byte) 0x01, adapter); super(file, FileHandle.ASSET_NOTIFICATION_IMAGES, adapter);
} }
private NotificationImagePutRequest(NotificationImage image, FossilWatchAdapter adapter) throws IOException { private NotificationImagePutRequest(NotificationImage image, FossilWatchAdapter adapter) throws IOException {
super(image, (byte) 0x01, adapter); super(image, FileHandle.ASSET_NOTIFICATION_IMAGES, adapter);
} }
public NotificationImagePutRequest(NotificationImage[] images, FossilWatchAdapter adapter) throws IOException { public NotificationImagePutRequest(NotificationImage[] images, FossilWatchAdapter adapter) throws IOException {
super(images, (byte) 0x01, adapter); super(images, FileHandle.ASSET_NOTIFICATION_IMAGES, adapter);
} }

View File

@ -1,16 +1,16 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.translation; package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.translation;
import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.util.ArrayList; import java.util.ArrayList;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest;
public abstract class TranslationsGetRequest extends FileGetRequest { public abstract class TranslationsGetRequest extends FileGetRequest {
public TranslationsGetRequest(FossilWatchAdapter adapter) { public TranslationsGetRequest(FossilWatchAdapter adapter) {
super((short) 0x0702, adapter); super(FileHandle.ASSET_TRANSLATIONS, adapter);
} }
@Override @Override

View File

@ -4,11 +4,12 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
public class TranslationsPutRequest extends FilePutRequest { public class TranslationsPutRequest extends FilePutRequest {
public TranslationsPutRequest(TranslationData translationData, FossilWatchAdapter adapter) { public TranslationsPutRequest(TranslationData translationData, FossilWatchAdapter adapter) {
super((short) 0x0702, createPayload(translationData), (short) 0x0d02, adapter); super(FileHandle.ASSET_TRANSLATIONS, createPayload(translationData), (short) 0x0d02, adapter);
} }
private static byte[] createPayload(TranslationData translationData){ private static byte[] createPayload(TranslationData translationData){