1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-09 22:57:54 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/vivomovehr/messages/ResponseMessage.java
Mormegil 3a58314db6 Garmin Vivomove HR support
- communication protocols
- device support implementation
- download FIT file storage

Features:
- basic connectivity: time sync, battery status, HW/FW version info
- real-time activity tracking
- fitness data sync
- find the device, find the phone
- factory reset

Features implemented but not working:
- notifications: fully implemented, seem to communicate correctly, but not shown on watch

Features implemented partially (not expected to work now):
- weather information (and in future possibly weather alerts)
- music info
- firmware update: only the initial file upload implemented, not used

Things to improve/change:
- Device name hardcoded in `VivomoveHrCoordinator.getSupportedType`, service UUIDs not available
- Download FIT file storage: Should be store (and offer the user to export?) the FIT data forever?
- Obviously, various code improvements, cleanup, etc.
2023-07-20 20:30:14 +00:00

43 lines
1.4 KiB
Java

package nodomain.freeyourgadget.gadgetbridge.service.devices.vivomovehr.messages;
import nodomain.freeyourgadget.gadgetbridge.devices.vivomovehr.VivomoveConstants;
import java.util.Locale;
public class ResponseMessage {
public final int requestID;
public final int status;
public ResponseMessage(int requestID, int status) {
this.requestID = requestID;
this.status = status;
}
public static ResponseMessage parsePacket(byte[] packet) {
final MessageReader reader = new MessageReader(packet, 4);
final int requestID = reader.readShort();
final int status = reader.readByte();
return new ResponseMessage(requestID, status);
}
public String getStatusStr() {
switch (status) {
case VivomoveConstants.STATUS_ACK:
return "ACK";
case VivomoveConstants.STATUS_NAK:
return "NAK";
case VivomoveConstants.STATUS_UNSUPPORTED:
return "UNSUPPORTED";
case VivomoveConstants.STATUS_DECODE_ERROR:
return "DECODE ERROR";
case VivomoveConstants.STATUS_CRC_ERROR:
return "CRC ERROR";
case VivomoveConstants.STATUS_LENGTH_ERROR:
return "LENGTH ERROR";
default:
return String.format(Locale.ROOT, "Unknown status %x", status);
}
}
}