This commit is contained in:
WangQiang 2016-08-16 11:09:37 +00:00
parent c4203186d7
commit 15e1e2fab2
2 changed files with 17 additions and 10 deletions

View File

@ -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();
@ -102,7 +110,7 @@ void Alarm::AlarmTask()
{
Sys.SetTask(AlarmTaskId, true, NextAlarmMs);
return;
}
}
Sys.SetTask(AlarmTaskId, false);
}
@ -112,4 +120,3 @@ void Alarm::Start()
if (!AlarmTaskId)AlarmTaskId = Sys.AddTask(&Alarm::AlarmTask, this, -1, -1, "AlarmTask");
Sys.SetTask(AlarmTaskId,true);
}

View File

@ -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();