1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-02 03:16:07 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/vivomovehr/messages/GncsControlPointResponseMessage.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

35 lines
1.7 KiB
Java

package nodomain.freeyourgadget.gadgetbridge.service.devices.vivomovehr.messages;
import nodomain.freeyourgadget.gadgetbridge.devices.vivomovehr.VivomoveConstants;
import nodomain.freeyourgadget.gadgetbridge.service.devices.vivomovehr.BinaryUtils;
import nodomain.freeyourgadget.gadgetbridge.service.devices.vivomovehr.ChecksumCalculator;
public class GncsControlPointResponseMessage {
public static final int RESPONSE_SUCCESSFUL = 0;
public static final int RESPONSE_ANCS_ERROR_OCCURRED = 1;
public static final int RESPONSE_INVALID_PARAMETERS = 2;
public static final int ANCS_ERROR_NO_ERROR = 0;
public static final int ANCS_ERROR_UNKNOWN_ANCS_COMMAND = 0xA0;
public static final int ANCS_ERROR_INVALID_ANCS_COMMAND = 0xA1;
public static final int ANCS_ERROR_INVALID_ANCS_PARAMETER = 0xA2;
public static final int ANCS_ERROR_ACTION_FAILED = 0xA3;
public final byte[] packet;
public GncsControlPointResponseMessage(int status, int response, int ancsError) {
final MessageWriter writer = new MessageWriter(11);
writer.writeShort(0); // packet size will be filled below
writer.writeShort(VivomoveConstants.MESSAGE_RESPONSE);
writer.writeShort(VivomoveConstants.MESSAGE_GNCS_CONTROL_POINT_REQUEST);
writer.writeByte(status);
writer.writeByte(response);
writer.writeByte(ancsError);
writer.writeShort(0); // CRC will be filled below
final byte[] packet = writer.getBytes();
BinaryUtils.writeShort(packet, 0, packet.length);
BinaryUtils.writeShort(packet, packet.length - 2, ChecksumCalculator.computeCrc(packet, 0, packet.length - 2));
this.packet = packet;
}
}