mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-06-02 19:36:14 +02:00
b3da377b34
adds synchronization of supported files from watch to external directory adds support for Activity and Monitoring files (workouts and activity samples), but those are not integrated yet adds upload functionality (not used ATM and not tested) adds notification support without actions introduces centralized processing of "messageHandlers" (protobuf, file transfer, notifications) also properly dispose of the music timer when disconnecting
82 lines
2.8 KiB
Java
82 lines
2.8 KiB
Java
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status;
|
|
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.MessageWriter;
|
|
|
|
public class FileTransferDataStatusMessage extends GFDIStatusMessage {
|
|
private final Status status;
|
|
private final TransferStatus transferStatus;
|
|
private final int dataOffset;
|
|
private final boolean sendOutgoing;
|
|
public FileTransferDataStatusMessage(GarminMessage garminMessage, Status status, TransferStatus transferStatus, int dataOffset) {
|
|
this(garminMessage, status, transferStatus, dataOffset, true);
|
|
}
|
|
|
|
|
|
public FileTransferDataStatusMessage(GarminMessage garminMessage, Status status, TransferStatus transferStatus, int dataOffset, boolean sendOutgoing) {
|
|
this.garminMessage = garminMessage;
|
|
this.status = status;
|
|
this.transferStatus = transferStatus;
|
|
this.dataOffset = dataOffset;
|
|
this.sendOutgoing = sendOutgoing;
|
|
}
|
|
|
|
public static FileTransferDataStatusMessage 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());
|
|
final int dataOffset = reader.readInt();
|
|
|
|
if (!transferStatus.equals(TransferStatus.OK)) {
|
|
LOG.warn("Received {} / {} for message {}", status, transferStatus, garminMessage);
|
|
} else {
|
|
LOG.info("Received {} / {} for message {}", status, transferStatus, garminMessage);
|
|
}
|
|
return new FileTransferDataStatusMessage(garminMessage, status, transferStatus, dataOffset, false);
|
|
}
|
|
|
|
public int getDataOffset() {
|
|
return dataOffset;
|
|
}
|
|
|
|
public boolean canProceed() {
|
|
return status.equals(Status.ACK) && transferStatus.equals(TransferStatus.OK);
|
|
}
|
|
|
|
@Override
|
|
protected boolean generateOutgoing() {
|
|
final MessageWriter writer = new MessageWriter(response);
|
|
writer.writeShort(0); // packet size will be filled below
|
|
writer.writeShort(GarminMessage.RESPONSE.getId());
|
|
writer.writeShort(garminMessage.getId());
|
|
writer.writeByte(status.ordinal());
|
|
writer.writeByte(transferStatus.ordinal());
|
|
writer.writeInt(dataOffset);
|
|
|
|
return sendOutgoing;
|
|
}
|
|
|
|
public enum TransferStatus {
|
|
OK,
|
|
RESEND,
|
|
ABORT,
|
|
CRC_MISMATCH,
|
|
OFFSET_MISMATCH,
|
|
SYNC_PAUSED,
|
|
;
|
|
|
|
public static TransferStatus fromId(int id) {
|
|
for (TransferStatus transferStatus :
|
|
TransferStatus.values()) {
|
|
if (transferStatus.ordinal() == id) {
|
|
return transferStatus;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
}
|