diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java index 71b308efd..7c113b1e3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java @@ -19,13 +19,23 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip; import android.content.Context; import android.net.Uri; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper; +import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; +import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; +import nodomain.freeyourgadget.gadgetbridge.util.NotificationUtils; public class AmazfitBipSSupport extends AmazfitBipSupport { + private static final Logger LOG = LoggerFactory.getLogger(AmazfitBipSSupport.class); + @Override public byte getCryptFlags() { return (byte) 0x80; @@ -41,6 +51,34 @@ public class AmazfitBipSSupport extends AmazfitBipSupport { return 0x00; } + @Override + public void onSetCallState(CallSpec callSpec) { + if (callSpec.command == CallSpec.CALL_INCOMING) { + byte[] message = NotificationUtils.getPreferredTextFor(callSpec).getBytes(); + int length = 10 + message.length; + ByteBuffer buf = ByteBuffer.allocate(length); + buf.order(ByteOrder.LITTLE_ENDIAN); + buf.put(new byte[]{3, 0, 0, 0, 0, 0}); + buf.put(message); + buf.put(new byte[]{0, 0, 0, 2}); + try { + TransactionBuilder builder = performInitialized("incoming call"); + writeToChunked(builder, 0, buf.array()); + builder.queue(getQueue()); + } catch (IOException e) { + LOG.error("Unable to send incoming call"); + } + } else if ((callSpec.command == CallSpec.CALL_START) || (callSpec.command == CallSpec.CALL_END)) { + try { + TransactionBuilder builder = performInitialized("end call"); + writeToChunked(builder, 0, new byte[]{3, 3, 0, 0, 0, 0}); + builder.queue(getQueue()); + } catch (IOException e) { + LOG.error("Unable to send end call"); + } + } + } + @Override public HuamiFWHelper createFWHelper(Uri uri, Context context) throws IOException { return null;