1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-25 22:40:05 +02:00

Lefun: Implement set alarm

This commit is contained in:
Yukai Li 2020-10-05 03:51:41 -06:00 committed by Gitea
parent 3d108d9d11
commit b7abd328bb
2 changed files with 120 additions and 1 deletions

View File

@ -70,6 +70,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests.GetFi
import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests.GetPpgDataRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests.GetSleepDataRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests.Request;
import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests.SetAlarmRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests.SetTimeRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests.StartPpgRequest;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
@ -148,7 +149,25 @@ public class LefunDeviceSupport extends AbstractBTLEDeviceSupport {
@Override
public void onSetAlarms(ArrayList<? extends Alarm> alarms) {
int i = 0;
for (Alarm alarm : alarms) {
try {
TransactionBuilder builder = performInitialized(SetAlarmRequest.class.getSimpleName());
SetAlarmRequest request = new SetAlarmRequest(this, builder);
request.setIndex(i);
request.setEnabled(alarm.getEnabled());
request.setDayOfWeek(alarm.getRepetition());
request.setHour(alarm.getHour());
request.setMinute(alarm.getMinute());
request.perform();
inProgressRequests.add(request);
performConnected(builder.getTransaction());
} catch (IOException e) {
GB.toast(getContext(), "Failed to set alarm", Toast.LENGTH_SHORT,
GB.ERROR, e);
}
++i;
}
}
@Override

View File

@ -0,0 +1,100 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.requests;
import nodomain.freeyourgadget.gadgetbridge.devices.lefun.LefunConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.lefun.commands.AlarmCommand;
import nodomain.freeyourgadget.gadgetbridge.devices.lefun.commands.BaseCommand;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.lefun.LefunDeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.operations.OperationStatus;
public class SetAlarmRequest extends Request {
private int index;
private boolean enabled;
private int dayOfWeek;
private int hour;
private int minute;
public SetAlarmRequest(LefunDeviceSupport support, TransactionBuilder builder) {
super(support, builder);
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public int getDayOfWeek() {
return dayOfWeek;
}
public void setDayOfWeek(int dayOfWeek) {
this.dayOfWeek = dayOfWeek;
}
public int getHour() {
return hour;
}
public void setHour(int hour) {
this.hour = hour;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
@Override
public byte[] createRequest() {
AlarmCommand cmd = new AlarmCommand();
cmd.setOp(BaseCommand.OP_SET);
cmd.setIndex((byte) index);
cmd.setEnabled(enabled);
cmd.setNumOfSnoozes((byte) 0);
cmd.setHour((byte) hour);
cmd.setMinute((byte) minute);
// Translate GB alarm day of week to Lefun day of week
// GB starts on Monday, Lefun starts on Sunday
for (int i = 0; i < 6; ++i) {
if ((dayOfWeek & (1 << i)) != 0) {
cmd.setDayOfWeek(i + 1, true);
}
}
if ((dayOfWeek & Alarm.ALARM_SUN) != 0) {
cmd.setDayOfWeek(AlarmCommand.DOW_SUNDAY, true);
}
return cmd.serialize();
}
@Override
public void handleResponse(byte[] data) {
AlarmCommand cmd = new AlarmCommand();
cmd.deserialize(data);
if (cmd.getOp() != BaseCommand.OP_SET || cmd.getIndex() != index || !cmd.isSetSuccess())
reportFailure("Could not set alarm");
operationStatus = OperationStatus.FINISHED;
}
@Override
public int getCommandId() {
return LefunConstants.CMD_ALARM;
}
}