This commit is contained in:
parent
c4203186d7
commit
15e1e2fab2
|
@ -63,10 +63,14 @@ bool Alarm::GetCfg(byte id, AlarmDataType& data)
|
|||
int Alarm::CalcNextTime(AlarmDataType& data)
|
||||
{
|
||||
auto dt = DateTime::Now();
|
||||
if (data.Type.ToByte() & 1 << dt.DayOfWeek())
|
||||
byte type = data.Type.ToByte();
|
||||
byte week = dt.DayOfWeek();
|
||||
if (type & 1 << week)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
return Int_Max;
|
||||
}
|
||||
|
||||
|
@ -94,7 +98,11 @@ byte Alarm::FindAfter()
|
|||
|
||||
void Alarm::AlarmTask()
|
||||
{
|
||||
// 执行动作
|
||||
// 获取定时的数据
|
||||
AlarmDataType data;
|
||||
if (AfterAlarmId != 0xff)
|
||||
GetCfg(AfterAlarmId, data);
|
||||
// 执行动作 DoSomething(data);
|
||||
|
||||
// 找到下一个定时器动作的时间
|
||||
AfterAlarmId = FindAfter();
|
||||
|
@ -112,4 +120,3 @@ void Alarm::Start()
|
|||
if (!AlarmTaskId)AlarmTaskId = Sys.AddTask(&Alarm::AlarmTask, this, -1, -1, "AlarmTask");
|
||||
Sys.SetTask(AlarmTaskId,true);
|
||||
}
|
||||
|
||||
|
|
10
App/Alarm.h
10
App/Alarm.h
|
@ -13,7 +13,7 @@ public:
|
|||
byte ToByte() { return *(byte*)this; }
|
||||
};
|
||||
|
||||
typedef struct:ByteStruct2
|
||||
typedef struct : ByteStruct2
|
||||
{
|
||||
byte Sunday : 1;
|
||||
byte Monday : 1;
|
||||
|
@ -22,7 +22,7 @@ typedef struct:ByteStruct2
|
|||
byte Thursday : 1;
|
||||
byte Friday : 1;
|
||||
byte Saturday : 1;
|
||||
byte Again : 1;
|
||||
byte Repeat : 1;
|
||||
}AlarmType;
|
||||
|
||||
// 必须设定为1字节对齐,否则offsetof会得到错误的位置
|
||||
|
@ -31,7 +31,7 @@ typedef struct:ByteStruct2
|
|||
#pragma pack(1)
|
||||
typedef struct
|
||||
{
|
||||
byte Enable;
|
||||
byte Enable;
|
||||
AlarmType Type;
|
||||
byte Hour;
|
||||
byte Minutes;
|
||||
|
@ -51,9 +51,9 @@ public:
|
|||
void Start();
|
||||
|
||||
private:
|
||||
byte AfterAlarmId; // 0xff 无效
|
||||
|
||||
uint AlarmTaskId;
|
||||
|
||||
byte AfterAlarmId; // 0xff 无效
|
||||
int NextAlarmMs; // 下次闹钟时间
|
||||
void AlarmTask();
|
||||
byte FindAfter();
|
||||
|
|
Loading…
Reference in New Issue