From 418bb7d37ae11ad645857909d276bda85b438c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sat, 13 Apr 2024 19:29:41 +0100 Subject: [PATCH] Garmin protocol: Fix linter warnings --- .../devices/garmin/ChecksumCalculator.java | 5 +++- .../devices/garmin/FileTransferHandler.java | 14 ++++++----- .../garmin/GarminByteBufferReader.java | 2 -- .../devices/garmin/MessageHandler.java | 2 +- .../devices/garmin/NotificationsHandler.java | 5 ++-- .../service/devices/garmin/fit/FitFile.java | 3 +++ .../devices/garmin/fit/RecordHeader.java | 3 +++ .../messages/DeviceInformationMessage.java | 25 ++++++++++++++++--- .../messages/FindMyPhoneRequestMessage.java | 1 - .../garmin/messages/FitDataMessage.java | 13 +++++++--- .../devices/garmin/messages/GFDIMessage.java | 3 ++- .../MusicControlCapabilitiesMessage.java | 2 +- .../status/CreateFileStatusMessage.java | 5 ++-- .../status/DownloadRequestStatusMessage.java | 5 ++-- .../status/FileTransferDataStatusMessage.java | 3 +-- .../messages/status/FitDataStatusMessage.java | 9 ++++--- .../status/FitDefinitionStatusMessage.java | 8 ++++-- .../messages/status/GFDIStatusMessage.java | 6 ++--- .../status/NotificationDataStatusMessage.java | 3 +-- .../status/UploadRequestStatusMessage.java | 5 ++-- 20 files changed, 77 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ChecksumCalculator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ChecksumCalculator.java index d061bede4..8bddc9b92 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ChecksumCalculator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ChecksumCalculator.java @@ -19,7 +19,10 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin; import java.nio.ByteBuffer; public final class ChecksumCalculator { - private static final int[] CONSTANTS = {0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400}; + private static final int[] CONSTANTS = { + 0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, + 0xA001, 0x6C00,0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400 + }; private ChecksumCalculator() { } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/FileTransferHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/FileTransferHandler.java index 4fec390c3..1c1a22fe3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/FileTransferHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/FileTransferHandler.java @@ -1,5 +1,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin; +import androidx.annotation.NonNull; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,7 +78,7 @@ public class FileTransferHandler implements MessageHandler { // } - class Download { + public class Download { private FileFragment currentlyDownloading; public FileFragment getCurrentlyDownloading() { @@ -126,7 +128,7 @@ public class FileTransferHandler implements MessageHandler { outputFile.setLastModified(currentlyDownloading.directoryEntry.fileDate.getTime()); } catch (IOException e) { - LOG.error("IOException: " + e); + LOG.error("Failed to save file", e); } LOG.debug("FILE DOWNLOAD COMPLETE {}", currentlyDownloading.getFileName()); @@ -156,8 +158,7 @@ public class FileTransferHandler implements MessageHandler { } } - class Upload { - + public static class Upload { private FileFragment currentlyUploading; private UploadRequestMessage setCreateFileStatusMessage(CreateFileStatusMessage createFileStatusMessage) { @@ -216,7 +217,7 @@ public class FileTransferHandler implements MessageHandler { } - class FileFragment { + public static class FileFragment { private final DirectoryEntry directoryEntry; private final int maxBlockSize = 500; private int dataSize; @@ -290,7 +291,7 @@ public class FileTransferHandler implements MessageHandler { } } - class DirectoryEntry { + public static class DirectoryEntry { private final int fileIndex; private final FileType.FILETYPE filetype; private final int fileNumber; @@ -321,6 +322,7 @@ public class FileTransferHandler implements MessageHandler { return getFiletype().name() + "_" + getFileIndex() + (getFiletype().isFitFile() ? ".fit" : ""); } + @NonNull @Override public String toString() { return "DirectoryEntry{" + diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java index 468de2892..c1816439d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java @@ -54,7 +54,6 @@ public class GarminByteBufferReader { public String readString() { final int size = readByte(); byte[] bytes = new byte[size]; - if (byteBuffer.remaining() < size) throw new IllegalStateException(); byteBuffer.get(bytes); return new String(bytes, StandardCharsets.UTF_8); } @@ -62,7 +61,6 @@ public class GarminByteBufferReader { public byte[] readBytes(int size) { byte[] bytes = new byte[size]; - if (byteBuffer.remaining() < size) throw new IllegalStateException(); byteBuffer.get(bytes); return bytes; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/MessageHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/MessageHandler.java index 191772203..203433d35 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/MessageHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/MessageHandler.java @@ -3,5 +3,5 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.GFDIMessage; public interface MessageHandler { - public GFDIMessage handle(GFDIMessage message); + GFDIMessage handle(GFDIMessage message); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/NotificationsHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/NotificationsHandler.java index cc25b57fb..7ae5634da 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/NotificationsHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/NotificationsHandler.java @@ -262,7 +262,7 @@ public class NotificationsHandler implements MessageHandler { } } - class Upload { + public static class Upload { private NotificationFragment currentlyUploading; @@ -292,7 +292,7 @@ public class NotificationsHandler implements MessageHandler { } - class NotificationFragment { + public static class NotificationFragment { private final int dataSize; private final ByteBuffer dataHolder; private final int maxBlockSize = 300; @@ -330,5 +330,4 @@ public class NotificationsHandler implements MessageHandler { this.runningCrc = runningCrc; } } - } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitFile.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitFile.java index 9fb17ab2e..d8deb64d0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitFile.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitFile.java @@ -1,5 +1,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit; +import androidx.annotation.NonNull; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -137,6 +139,7 @@ public class FitFile { } + @NonNull @Override public String toString() { return dataRecords.toString(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordHeader.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordHeader.java index 185c05cbe..56fab488f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordHeader.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordHeader.java @@ -1,5 +1,6 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -86,6 +87,8 @@ public class RecordHeader { return base; } + @NonNull + @Override public String toString() { return "Local Message: " + (null == localMessage ? "raw: " + rawLocalMessageType : "type: " + localMessage.name()); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/DeviceInformationMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/DeviceInformationMessage.java index 95c74437a..986bd31cc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/DeviceInformationMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/DeviceInformationMessage.java @@ -1,5 +1,6 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages; +import android.annotation.SuppressLint; import android.bluetooth.BluetoothAdapter; import android.os.Build; @@ -52,9 +53,9 @@ public class DeviceInformationMessage extends GFDIMessage { return new DeviceInformationMessage(garminMessage, protocolVersion, productNumber, unitNumber, softwareVersion, maxPacketSize, bluetoothFriendlyName, deviceName, deviceModel); } + @SuppressLint("MissingPermission") @Override protected boolean generateOutgoing() { - final int protocolFlags = this.incomingProtocolVersion / 100 == 1 ? 1 : 0; final MessageWriter writer = new MessageWriter(response); @@ -67,7 +68,14 @@ public class DeviceInformationMessage extends GFDIMessage { writer.writeInt(ourUnitNumber); writer.writeShort(ourSoftwareVersion); writer.writeShort(ourMaxPacketSize); - writer.writeString(BluetoothAdapter.getDefaultAdapter().getName()); + String bluetoothName; + try { + bluetoothName = BluetoothAdapter.getDefaultAdapter().getName(); + } catch (final Exception e) { + LOG.error("Failed to get bluetooth name", e); + bluetoothName = "Unknown"; + } + writer.writeString(bluetoothName); writer.writeString(Build.MANUFACTURER); writer.writeString(Build.DEVICE); writer.writeByte(protocolFlags); @@ -75,8 +83,17 @@ public class DeviceInformationMessage extends GFDIMessage { } public GBDeviceEventVersionInfo getGBDeviceEvent() { - - LOG.info("Received device information: protocol {}, product {}, unit {}, SW {}, max packet {}, BT name {}, device name {}, device model {}", incomingProtocolVersion, incomingProductNumber, incomingUnitNumber, getSoftwareVersionStr(), incomingMaxPacketSize, bluetoothFriendlyName, deviceName, deviceModel); + LOG.info( + "Received device information: protocol {}, product {}, unit {}, SW {}, max packet {}, BT name {}, device name {}, device model {}", + incomingProtocolVersion, + incomingProductNumber, + incomingUnitNumber, + getSoftwareVersionStr(), + incomingMaxPacketSize, + bluetoothFriendlyName, + deviceName, + deviceModel + ); GBDeviceEventVersionInfo versionCmd = new GBDeviceEventVersionInfo(); versionCmd.fwVersion = getSoftwareVersionStr(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java index 1d924e622..af7337066 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java @@ -1,6 +1,5 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages; - import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventFindPhone; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FitDataMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FitDataMessage.java index 9397e0bd0..c4217c826 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FitDataMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FitDataMessage.java @@ -3,6 +3,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages; import java.util.ArrayList; import java.util.List; +import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.LocalMessage; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordData; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordHeader; @@ -20,14 +21,19 @@ public class FitDataMessage extends GFDIMessage { } public static FitDataMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) { - List recordDataList = new ArrayList<>(); - + final List recordDataList = new ArrayList<>(); while (reader.remaining() > 0) { RecordHeader recordHeader = new RecordHeader((byte) reader.readByte()); if (recordHeader.isDefinition()) return null; - RecordData recordData = new RecordData(recordHeader.getLocalMessage().getRecordDefinition()); + LocalMessage localMessage = recordHeader.getLocalMessage(); + if (localMessage == null) { + LOG.warn("Local message is null"); + + return null; + } + RecordData recordData = new RecordData(localMessage.getRecordDefinition()); recordData.parseDataMessage(reader); recordDataList.add(recordData); } @@ -49,5 +55,4 @@ public class FitDataMessage extends GFDIMessage { } return true; } - } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java index 18ce09b6a..eb512a7c3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java @@ -150,6 +150,7 @@ public abstract class GFDIMessage { } return null; } + public int getId() { return id; } @@ -178,7 +179,7 @@ public abstract class GFDIMessage { } - protected static class MessageReader extends GarminByteBufferReader { + public static class MessageReader extends GarminByteBufferReader { private final int payloadSize; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/MusicControlCapabilitiesMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/MusicControlCapabilitiesMessage.java index 83489291e..5963907c1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/MusicControlCapabilitiesMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/MusicControlCapabilitiesMessage.java @@ -34,7 +34,7 @@ public class MusicControlCapabilitiesMessage extends GFDIMessage { return true; } - enum GarminMusicControlCommand { + public enum GarminMusicControlCommand { TOGGLE_PLAY_PAUSE, SKIP_TO_NEXT_ITEM, SKIP_TO_PREVIOUS_ITEM, diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/CreateFileStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/CreateFileStatusMessage.java index 4062c7c69..cdc420490 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/CreateFileStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/CreateFileStatusMessage.java @@ -1,6 +1,5 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status; - import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.FileType; public class CreateFileStatusMessage extends GFDIStatusMessage { @@ -31,7 +30,7 @@ public class CreateFileStatusMessage extends GFDIStatusMessage { final int subType = reader.readByte(); final FileType.FILETYPE filetype = FileType.FILETYPE.fromDataTypeSubType(dataType, subType); final int fileNumber = reader.readShort(); - if (!createStatus.equals(CreateStatus.OK)) { + if (!CreateStatus.OK.equals(createStatus)) { LOG.warn("Received {} / {} for message {}", status, createStatus, garminMessage); } else { LOG.info("Received {} / {} for message {}", status, createStatus, garminMessage); @@ -51,7 +50,7 @@ public class CreateFileStatusMessage extends GFDIStatusMessage { return status.equals(Status.ACK) && createStatus.equals(CreateStatus.OK); } - enum CreateStatus { + public enum CreateStatus { OK, DUPLICATE, NO_SPACE, diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/DownloadRequestStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/DownloadRequestStatusMessage.java index 868f49b72..365823e62 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/DownloadRequestStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/DownloadRequestStatusMessage.java @@ -1,6 +1,5 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status; - public class DownloadRequestStatusMessage extends GFDIStatusMessage { private final Status status; private final DownloadStatus downloadStatus; @@ -22,7 +21,7 @@ public class DownloadRequestStatusMessage extends GFDIStatusMessage { final DownloadStatus downloadStatus = DownloadStatus.fromId(reader.readByte()); final int maxFileSize = reader.readInt(); - if (!downloadStatus.equals(DownloadStatus.OK)) { + if (!DownloadStatus.OK.equals(downloadStatus)) { LOG.warn("Received {} / {} for message {}", status, downloadStatus, garminMessage); } else { LOG.info("Received {} / {} for message {}", status, downloadStatus, garminMessage); @@ -38,7 +37,7 @@ public class DownloadRequestStatusMessage extends GFDIStatusMessage { return status.equals(Status.ACK) && downloadStatus.equals(DownloadStatus.OK); } - enum DownloadStatus { //was DownloadRequestResponseMessage + public enum DownloadStatus { //was DownloadRequestResponseMessage OK, INDEX_UNKNOWN, INDEX_NOT_READABLE, diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FileTransferDataStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FileTransferDataStatusMessage.java index a8907d1b8..ee4e9ca93 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FileTransferDataStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FileTransferDataStatusMessage.java @@ -1,6 +1,5 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status; - import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.MessageWriter; public class FileTransferDataStatusMessage extends GFDIStatusMessage { @@ -30,7 +29,7 @@ public class FileTransferDataStatusMessage extends GFDIStatusMessage { final TransferStatus transferStatus = TransferStatus.fromId(reader.readByte()); final int dataOffset = reader.readInt(); - if (!transferStatus.equals(TransferStatus.OK)) { + if (!TransferStatus.OK.equals(transferStatus)) { LOG.warn("Received {} / {} for message {}", status, transferStatus, garminMessage); } else { LOG.info("Received {} / {} for message {}", status, transferStatus, garminMessage); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDataStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDataStatusMessage.java index c0b825c1e..f01566222 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDataStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDataStatusMessage.java @@ -7,7 +7,6 @@ public class FitDataStatusMessage extends GFDIStatusMessage { private final Status status; private final FitDataStatusCode fitDataStatusCode; - public FitDataStatusMessage(GarminMessage garminMessage, Status status, FitDataStatusCode fitDataStatusCode) { this.garminMessage = garminMessage; this.status = status; @@ -23,8 +22,12 @@ public class FitDataStatusMessage extends GFDIStatusMessage { public static FitDataStatusMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) { final Status status = Status.fromCode(reader.readByte()); - final FitDataStatusCode fitDataStatusCode = FitDataStatusCode.fromCode(reader.readByte()); - + final int fitDataStatusCodeByte = reader.readByte(); + final FitDataStatusCode fitDataStatusCode = FitDataStatusCode.fromCode(fitDataStatusCodeByte); + if (fitDataStatusCode == null) { + LOG.warn("Unknown fit data status code {}", fitDataStatusCodeByte); + return null; + } return new FitDataStatusMessage(garminMessage, status, fitDataStatusCode); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDefinitionStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDefinitionStatusMessage.java index 78b922fdb..2b2cb3103 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDefinitionStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/FitDefinitionStatusMessage.java @@ -22,8 +22,12 @@ public class FitDefinitionStatusMessage extends GFDIStatusMessage { public static FitDefinitionStatusMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) { final Status status = Status.fromCode(reader.readByte()); - final FitDefinitionStatusCode fitDefinitionStatusCode = FitDefinitionStatusCode.fromCode(reader.readByte()); - + final int fitDefinitionStatusCodeByte = reader.readByte(); + final FitDefinitionStatusCode fitDefinitionStatusCode = FitDefinitionStatusCode.fromCode(fitDefinitionStatusCodeByte); + if (fitDefinitionStatusCode == null) { + LOG.warn("Unknown fit definition status code {}", fitDefinitionStatusCodeByte); + return null; + } return new FitDefinitionStatusMessage(garminMessage, status, fitDefinitionStatusCode); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/GFDIStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/GFDIStatusMessage.java index 34bfcd5ab..a1ed876d6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/GFDIStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/GFDIStatusMessage.java @@ -9,6 +9,7 @@ public abstract class GFDIStatusMessage extends GFDIMessage { public static GFDIStatusMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) { int originalMessageType = reader.readShort(); final GarminMessage originalGarminMessage = GFDIMessage.GarminMessage.fromId(originalMessageType); + if (GarminMessage.PROTOBUF_REQUEST.equals(originalGarminMessage) || GarminMessage.PROTOBUF_RESPONSE.equals(originalGarminMessage)) { return ProtobufStatusMessage.parseIncoming(reader, originalGarminMessage); } else if (GarminMessage.NOTIFICATION_DATA.equals(originalGarminMessage)) { @@ -23,7 +24,7 @@ public abstract class GFDIStatusMessage extends GFDIMessage { return CreateFileStatusMessage.parseIncoming(reader, originalGarminMessage); } else if (GarminMessage.SUPPORTED_FILE_TYPES_REQUEST.equals(originalGarminMessage)) { SupportedFileTypesStatusMessage supportedFileTypesStatusMessage = SupportedFileTypesStatusMessage.parseIncoming(reader, garminMessage); - LOG.info(supportedFileTypesStatusMessage.toString()); + LOG.info("{}", supportedFileTypesStatusMessage); return supportedFileTypesStatusMessage; } else if (GarminMessage.FIT_DEFINITION.equals(originalGarminMessage)) { return FitDefinitionStatusMessage.parseIncoming(reader, originalGarminMessage); @@ -33,7 +34,7 @@ public abstract class GFDIStatusMessage extends GFDIMessage { final Status status = Status.fromCode(reader.readByte()); if (Status.ACK == status) { - LOG.info("Received ACK for message {}", originalGarminMessage.name()); + LOG.info("Received ACK for message {}", originalGarminMessage); } else { LOG.warn("Received {} for message {}", status, (null == originalGarminMessage) ? originalMessageType : originalGarminMessage.name()); } @@ -50,5 +51,4 @@ public abstract class GFDIStatusMessage extends GFDIMessage { protected Status getStatus() { return status; } - } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/NotificationDataStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/NotificationDataStatusMessage.java index 547362f7b..f0170d5fa 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/NotificationDataStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/NotificationDataStatusMessage.java @@ -1,6 +1,5 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status; - public class NotificationDataStatusMessage extends GFDIStatusMessage { private final Status status; private final TransferStatus transferStatus; @@ -19,7 +18,7 @@ public class NotificationDataStatusMessage extends GFDIStatusMessage { } final TransferStatus transferStatus = TransferStatus.fromId(reader.readByte()); - if (!transferStatus.equals(TransferStatus.OK)) { + if (!TransferStatus.OK.equals(transferStatus)) { LOG.warn("Received {} / {} for message {}", status, transferStatus, garminMessage); } else { LOG.info("Received {} / {} for message {}", status, transferStatus, garminMessage); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/UploadRequestStatusMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/UploadRequestStatusMessage.java index 7237b21d1..b4ba6ed97 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/UploadRequestStatusMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/UploadRequestStatusMessage.java @@ -1,6 +1,5 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status; - public class UploadRequestStatusMessage extends GFDIStatusMessage { private final Status status; private final UploadStatus uploadStatus; @@ -28,7 +27,7 @@ public class UploadRequestStatusMessage extends GFDIStatusMessage { final int maxFileSize = reader.readInt(); final int crcSeed = reader.readShort(); - if (!uploadStatus.equals(UploadStatus.OK)) { + if (!UploadStatus.OK.equals(uploadStatus)) { LOG.warn("Received {} / {} for message {}", status, uploadStatus, garminMessage); } else { LOG.info("Received {} / {} for message {}", status, uploadStatus, garminMessage); @@ -48,7 +47,7 @@ public class UploadRequestStatusMessage extends GFDIStatusMessage { return status.equals(Status.ACK) && uploadStatus.equals(UploadStatus.OK); } - enum UploadStatus { + public enum UploadStatus { OK, INDEX_UNKNOWN, INDEX_NOT_WRITEABLE,