mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-15 14:39:26 +01:00
Garmin protocol: fix crash when stopping find phone
This commit is contained in:
parent
e6365638d4
commit
4c734e4717
@ -24,8 +24,6 @@ public class GarminByteBufferReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int readByte() {
|
public int readByte() {
|
||||||
if (!byteBuffer.hasRemaining()) throw new IllegalStateException();
|
|
||||||
|
|
||||||
return Byte.toUnsignedInt(byteBuffer.get());
|
return Byte.toUnsignedInt(byteBuffer.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,32 +32,22 @@ public class GarminByteBufferReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int readShort() {
|
public int readShort() {
|
||||||
if (byteBuffer.remaining() < 2) throw new IllegalStateException();
|
|
||||||
|
|
||||||
return Short.toUnsignedInt(byteBuffer.getShort());
|
return Short.toUnsignedInt(byteBuffer.getShort());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int readInt() {
|
public int readInt() {
|
||||||
if (byteBuffer.remaining() < 4) throw new IllegalStateException();
|
|
||||||
|
|
||||||
return byteBuffer.getInt();
|
return byteBuffer.getInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
public long readLong() {
|
public long readLong() {
|
||||||
if (byteBuffer.remaining() < 8) throw new IllegalStateException();
|
|
||||||
|
|
||||||
return byteBuffer.getLong();
|
return byteBuffer.getLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
public float readFloat32() {
|
public float readFloat32() {
|
||||||
if (byteBuffer.remaining() < 4) throw new IllegalStateException();
|
|
||||||
|
|
||||||
return byteBuffer.getFloat();
|
return byteBuffer.getFloat();
|
||||||
}
|
}
|
||||||
|
|
||||||
public double readFloat64() {
|
public double readFloat64() {
|
||||||
if (byteBuffer.remaining() < 8) throw new IllegalStateException();
|
|
||||||
|
|
||||||
return byteBuffer.getDouble();
|
return byteBuffer.getDouble();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,5 +67,4 @@ public class GarminByteBufferReader {
|
|||||||
|
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages;
|
||||||
|
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventFindPhone;
|
||||||
|
|
||||||
|
public class FindMyPhoneCancelMessage extends GFDIMessage {
|
||||||
|
public FindMyPhoneCancelMessage(GarminMessage garminMessage) {
|
||||||
|
this.garminMessage = garminMessage;
|
||||||
|
|
||||||
|
this.statusMessage = getStatusMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FindMyPhoneCancelMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) {
|
||||||
|
return new FindMyPhoneCancelMessage(garminMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GBDeviceEvent getGBDeviceEvent() {
|
||||||
|
final GBDeviceEventFindPhone findPhoneEvent = new GBDeviceEventFindPhone();
|
||||||
|
findPhoneEvent.event = GBDeviceEventFindPhone.Event.STOP;
|
||||||
|
return findPhoneEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean generateOutgoing() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -23,7 +23,7 @@ public class FindMyPhoneRequestMessage extends GFDIMessage {
|
|||||||
@Override
|
@Override
|
||||||
public GBDeviceEvent getGBDeviceEvent() {
|
public GBDeviceEvent getGBDeviceEvent() {
|
||||||
final GBDeviceEventFindPhone findPhoneEvent = new GBDeviceEventFindPhone();
|
final GBDeviceEventFindPhone findPhoneEvent = new GBDeviceEventFindPhone();
|
||||||
findPhoneEvent.event = garminMessage == GarminMessage.FIND_MY_PHONE ? GBDeviceEventFindPhone.Event.START : GBDeviceEventFindPhone.Event.STOP;
|
findPhoneEvent.event = GBDeviceEventFindPhone.Event.START;
|
||||||
return findPhoneEvent;
|
return findPhoneEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,11 +46,15 @@ public abstract class GFDIMessage {
|
|||||||
|
|
||||||
final int messageType = messageReader.readShort();
|
final int messageType = messageReader.readShort();
|
||||||
try {
|
try {
|
||||||
GarminMessage garminMessage = GarminMessage.fromId(messageType);
|
final GarminMessage garminMessage = GarminMessage.fromId(messageType);
|
||||||
Method m = garminMessage.objectClass.getMethod("parseIncoming", MessageReader.class, GarminMessage.class);
|
if (garminMessage == null) {
|
||||||
|
LOG.warn("Unknown message type {}, message {}", messageType, message);
|
||||||
|
return new UnhandledMessage(messageType);
|
||||||
|
}
|
||||||
|
final Method m = garminMessage.objectClass.getMethod("parseIncoming", MessageReader.class, GarminMessage.class);
|
||||||
return garminMessage.objectClass.cast(m.invoke(null, messageReader, garminMessage));
|
return garminMessage.objectClass.cast(m.invoke(null, messageReader, garminMessage));
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
LOG.error("UNHANDLED GFDI MESSAGE TYPE {}, MESSAGE {}", messageType, message);
|
LOG.error("UNHANDLED GFDI MESSAGE TYPE {}, MESSAGE {}", messageType, message, e);
|
||||||
return new UnhandledMessage(messageType);
|
return new UnhandledMessage(messageType);
|
||||||
} finally {
|
} finally {
|
||||||
messageReader.warnIfLeftover(messageType);
|
messageReader.warnIfLeftover(messageType);
|
||||||
@ -110,8 +114,8 @@ public abstract class GFDIMessage {
|
|||||||
NOTIFICATION_CONTROL(5034, NotificationControlMessage.class),
|
NOTIFICATION_CONTROL(5034, NotificationControlMessage.class),
|
||||||
NOTIFICATION_DATA(5035, NotificationDataMessage.class),
|
NOTIFICATION_DATA(5035, NotificationDataMessage.class),
|
||||||
NOTIFICATION_SUBSCRIPTION(5036, NotificationSubscriptionMessage.class),
|
NOTIFICATION_SUBSCRIPTION(5036, NotificationSubscriptionMessage.class),
|
||||||
FIND_MY_PHONE(5039, FindMyPhoneRequestMessage.class),
|
FIND_MY_PHONE_REQUEST(5039, FindMyPhoneRequestMessage.class),
|
||||||
CANCEL_FIND_MY_PHONE(5040, FindMyPhoneRequestMessage.class),
|
FIND_MY_PHONE_CANCEL(5040, FindMyPhoneCancelMessage.class),
|
||||||
MUSIC_CONTROL(5041, MusicControlMessage.class),
|
MUSIC_CONTROL(5041, MusicControlMessage.class),
|
||||||
MUSIC_CONTROL_CAPABILITIES(5042, MusicControlCapabilitiesMessage.class),
|
MUSIC_CONTROL_CAPABILITIES(5042, MusicControlCapabilitiesMessage.class),
|
||||||
PROTOBUF_REQUEST(5043, ProtobufMessage.class),
|
PROTOBUF_REQUEST(5043, ProtobufMessage.class),
|
||||||
|
Loading…
Reference in New Issue
Block a user