package nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiTLV; public class P2P { public static final byte id = 0x34; public static class P2PCommand { public static final byte id = 0x01; public static class Request extends HuaweiPacket { public Request(ParamsProvider paramsProvider, byte cmdId, short sequenceId, String srcPackage, String dstPackage, String srcFingerprint, String dstFingerprint, byte[] sendData, int sendCode) { super(paramsProvider); this.serviceId = P2P.id; this.commandId = id; this.tlv = new HuaweiTLV() .put(0x01, cmdId) .put(0x02, sequenceId) .put(0x03, srcPackage) .put(0x04, dstPackage); if(cmdId == 0x2) { this.tlv.put(0x05, srcFingerprint); this.tlv.put(0x06, dstFingerprint); } if(sendData != null && sendData.length > 0) this.tlv.put(0x07, sendData); if(cmdId == 0x3) { this.tlv.put(0x08, sendCode); } } } public static class Response extends HuaweiPacket { public byte cmdId; public short sequenceId; public String srcPackage; public String dstPackage; public String srcFingerprint = null; public String dstFingerprint = null; public byte[] respData = null; public int respCode = 0; public Response (ParamsProvider paramsProvider) { super(paramsProvider); } @Override public void parseTlv() throws HuaweiPacket.ParseException { cmdId = this.tlv.getByte(0x01); sequenceId = this.tlv.getShort(0x02); srcPackage = this.tlv.getString(0x03); dstPackage = this.tlv.getString(0x04); if(this.tlv.contains(0x05)) srcFingerprint = this.tlv.getString(0x05); if(this.tlv.contains(0x06)) dstFingerprint = this.tlv.getString(0x06); if(this.tlv.contains(0x07)) respData = this.tlv.getBytes(0x07); // NOTE: P2P service uses different data types in responseCode(TLV 0x08). // It sends byte from wearable but send integer to wearable // So we have a change that other device can send different type. if(this.tlv.contains(0x08)) respCode = this.tlv.getByte(0x08); } } } }