91 lines
2.4 KiB
Java
91 lines
2.4 KiB
Java
package com.eveningoutpost.dexdrip.G5Model;
|
|
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.ByteOrder;
|
|
|
|
// created by jamorham
|
|
|
|
public class SessionStartRxMessage extends BaseMessage {
|
|
public static final byte opcode = 0x27;
|
|
final byte length = 17;
|
|
|
|
private byte status = (byte) 0xFF;
|
|
private byte info = (byte) 0xFF;
|
|
final String transmitterId;
|
|
int sessionStartTime = 0;
|
|
int requestedStartTime = 0;
|
|
int transitterTime = 0;
|
|
|
|
boolean valid = false;
|
|
|
|
public SessionStartRxMessage(byte[] packet, String transmitterId) {
|
|
this.transmitterId = transmitterId;
|
|
if (packet.length == length) {
|
|
data = ByteBuffer.wrap(packet).order(ByteOrder.LITTLE_ENDIAN);
|
|
if ((data.get() == opcode) && checkCRC(packet)) {
|
|
valid = true;
|
|
status = data.get();
|
|
info = data.get();
|
|
requestedStartTime = data.getInt();
|
|
sessionStartTime = data.getInt();
|
|
transitterTime = data.getInt();
|
|
}
|
|
}
|
|
}
|
|
|
|
boolean isValid() {
|
|
return valid;
|
|
}
|
|
|
|
boolean isOkay() {
|
|
return isValid() && status == 0x00 && (info == 0x01 || info == 0x05) && sessionStartTime != INVALID_TIME;
|
|
}
|
|
|
|
// beyond hope?
|
|
boolean isFubar() {
|
|
return info == 0x04;
|
|
}
|
|
|
|
long getSessionStart() {
|
|
if (isOkay() && sessionStartTime > 0) {
|
|
return DexTimeKeeper.fromDexTime(transmitterId, sessionStartTime);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
long getRequestedStart() {
|
|
if (isOkay() && requestedStartTime > 0) {
|
|
return DexTimeKeeper.fromDexTime(transmitterId, requestedStartTime);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
long getTransmitterTime() {
|
|
if (isOkay() && transitterTime > 0) {
|
|
return DexTimeKeeper.fromDexTime(transmitterId, transitterTime);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
String message() {
|
|
switch (info) {
|
|
case 0x01:
|
|
return "OK";
|
|
case 0x02:
|
|
return "Already started";
|
|
case 0x03:
|
|
return "Invalid";
|
|
case 0x04:
|
|
return "Clock not synchronized or other error"; // probably
|
|
case 0x05:
|
|
return "OK G6"; // probably
|
|
default:
|
|
return "Unknown code: " + info;
|
|
}
|
|
}
|
|
}
|
|
|