diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungConstants.java index 18d2809c7..4bbeda825 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungConstants.java @@ -182,6 +182,9 @@ public class MoyoungConstants { public static final byte CMD_SET_WEATHER_FUTURE = 66; // {weatherId, low_temp, high_temp} * 7 public static final byte CMD_SET_WEATHER_TODAY = 67; // {have_pm25 ? 1 : 0, weatherId, temp[, pm25 >> 8, pm25], lunar_or_festival[8], city[8]}, names are UTF-16BE encoded (4 characters each!) + public static final byte CMD_SET_MUSIC_INFO = 68; // {artist=1/track=0, string} + public static final byte CMD_SET_MUSIC_STATE = 123; // {is_playing ? 1 : 0} + public static final byte CMD_GSENSOR_CALIBRATION = 82; // (?) {} public static final byte CMD_QUERY_STEPS_CATEGORY = 89; // (*) {i} -> {0, data:uint16[*]}, {1}, {2, data:uint16[*]}, {3}, query 0+1 together and 2+3 together @@ -200,6 +203,7 @@ public class MoyoungConstants { public static final byte ARG_OPERATION_VOLUME_UP = 4; public static final byte ARG_OPERATION_VOLUME_DOWN = 5; public static final byte ARG_OPERATION_PLAY = 6; + public static final byte ARG_OPERATION_PAUSE = 7; public static final byte CMD_QUERY_ALARM_CLOCK = 33; // (?) {} -> a list of entries like below public static final byte CMD_SET_ALARM_CLOCK = 17; // (?) {id, enable ? 1 : 0, repeat, hour, minute, i >> 8, i, repeatMode}, repeatMode is 0(SINGLE), 127(EVERYDAY), or bitmask of 1,2,4,8,16,32,64(SUNDAY-SATURDAY) is 0,1,2, i is ((year << 12) + (month << 8) + day) where year is 2015-based, month and day start at 1 for repeatMode=SINGLE and 0 otherwise, repeat is 0(SINGLE),1(EVERYDAY),2(OTHER) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java index 0e6f7bea1..f6fd0204a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java @@ -396,10 +396,18 @@ public class MoyoungDeviceSupport extends AbstractBTLEDeviceSupport { if (operation == MoyoungConstants.ARG_OPERATION_PLAY) { GBDeviceEventMusicControl musicCmd = new GBDeviceEventMusicControl(); - musicCmd.event = GBDeviceEventMusicControl.Event.PLAYPAUSE; + musicCmd.event = GBDeviceEventMusicControl.Event.PLAY; evaluateGBDeviceEvent(musicCmd); return true; } + if (operation == MoyoungConstants.ARG_OPERATION_PAUSE) + { + GBDeviceEventMusicControl musicCmd = new GBDeviceEventMusicControl(); + musicCmd.event = GBDeviceEventMusicControl.Event.PAUSE; + evaluateGBDeviceEvent(musicCmd); + return true; + } + } if (packetType == MoyoungConstants.CMD_SWITCH_CAMERA_VIEW) @@ -699,12 +707,34 @@ public class MoyoungDeviceSupport extends AbstractBTLEDeviceSupport { @Override public void onSetMusicState(MusicStateSpec stateSpec) { - // TODO + try { + TransactionBuilder builder = performInitialized("sendMusicState"); + byte[] payload = new byte[]{(byte) (stateSpec.state == MusicStateSpec.STATE_PLAYING ? 0x01 : 0x00)}; + sendPacket(builder, MoyoungPacketOut.buildPacket(mtu, MoyoungConstants.CMD_SET_MUSIC_STATE, payload)); + builder.queue(getQueue()); + } catch (IOException e) { + LOG.error("Error sending music state: ", e); + } } @Override public void onSetMusicInfo(MusicSpec musicSpec) { - // TODO + try { + TransactionBuilder builder = performInitialized("sendMusicInfo"); + byte[] artistBytes = musicSpec.artist.getBytes(); + byte[] artistPayload = new byte[artistBytes.length + 1]; + artistPayload[0] = 1; + System.arraycopy(artistBytes, 0, artistPayload, 1, artistBytes.length); + sendPacket(builder, MoyoungPacketOut.buildPacket(mtu, MoyoungConstants.CMD_SET_MUSIC_INFO, artistPayload)); + byte[] trackBytes = musicSpec.track.getBytes(); + byte[] trackPayload = new byte[trackBytes.length + 1]; + trackPayload[0] = 0; + System.arraycopy(trackBytes, 0, trackPayload, 1, trackBytes.length); + sendPacket(builder, MoyoungPacketOut.buildPacket(mtu, MoyoungConstants.CMD_SET_MUSIC_INFO, trackPayload)); + builder.queue(getQueue()); + } catch (IOException e) { + LOG.error("Error sending music info: ", e); + } } @Override