1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-02 19:36:14 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/status/NotificationDataStatusMessage.java
2024-04-18 17:50:17 +02:00

57 lines
1.8 KiB
Java

package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status;
public class NotificationDataStatusMessage extends GFDIStatusMessage {
private final Status status;
private final TransferStatus transferStatus;
public NotificationDataStatusMessage(GarminMessage garminMessage, Status status, TransferStatus transferStatus) {
this.garminMessage = garminMessage;
this.status = status;
this.transferStatus = transferStatus;
}
public static NotificationDataStatusMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) {
final Status status = Status.fromCode(reader.readByte());
if (!status.equals(Status.ACK)) {
return null;
}
final TransferStatus transferStatus = TransferStatus.fromId(reader.readByte());
if (!TransferStatus.OK.equals(transferStatus)) {
LOG.warn("Received {} / {} for message {}", status, transferStatus, garminMessage);
} else {
LOG.info("Received {} / {} for message {}", status, transferStatus, garminMessage);
}
return new NotificationDataStatusMessage(garminMessage, status, transferStatus);
}
public boolean canProceed() {
return status.equals(Status.ACK) && transferStatus.equals(TransferStatus.OK);
}
@Override
protected boolean generateOutgoing() {
return false;
}
public enum TransferStatus {
OK,
RESEND,
ABORT,
CRC_MISMATCH,
OFFSET_MISMATCH,
;
public static TransferStatus fromId(int id) {
for (TransferStatus transferStatus :
TransferStatus.values()) {
if (transferStatus.ordinal() == id) {
return transferStatus;
}
}
return null;
}
}
}