mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-24 10:56:50 +01:00
Lefun: Implement set alarm
This commit is contained in:
parent
3d108d9d11
commit
b7abd328bb
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user