mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-06-07 05:38:13 +02:00
918791560b
- refactor the logic of Global and Local messages - add some Global messages with naming taken from [1] - Global messages are not enum because there are too many - introduce the concept of FieldDefinitionPrimitive - add new Field Definitions - add support for developer fields and array fields - add test case for FIT files taken from [0] [0] https://github.com/polyvertex/fitdecode/ [1] https://www.fitfileviewer.com/
54 lines
1.8 KiB
Java
54 lines
1.8 KiB
Java
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordData;
|
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordHeader;
|
|
|
|
public class FitDataMessage extends GFDIMessage {
|
|
private final List<RecordData> recordDataList;
|
|
|
|
public FitDataMessage(List<RecordData> recordDataList, GarminMessage garminMessage) {
|
|
this.recordDataList = recordDataList;
|
|
this.garminMessage = garminMessage;
|
|
}
|
|
|
|
public FitDataMessage(List<RecordData> recordDataList) {
|
|
this.recordDataList = recordDataList;
|
|
this.garminMessage = GarminMessage.FIT_DATA;
|
|
}
|
|
|
|
public static FitDataMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) {
|
|
List<RecordData> 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());
|
|
recordData.parseDataMessage(reader);
|
|
recordDataList.add(recordData);
|
|
}
|
|
|
|
return new FitDataMessage(recordDataList, garminMessage);
|
|
}
|
|
|
|
public List<RecordData> getRecordDataList() {
|
|
return recordDataList;
|
|
}
|
|
|
|
@Override
|
|
protected boolean generateOutgoing() {
|
|
final MessageWriter writer = new MessageWriter(response);
|
|
writer.writeShort(0); // packet size will be filled below
|
|
writer.writeShort(this.garminMessage.getId());
|
|
for (RecordData recordData : recordDataList) {
|
|
recordData.generateOutgoingDataPayload(writer);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|