6 #include "AlarmClock.h"
27 ISR(TIMER1_OVF_vect) {
31 ISR(TIMER2_OVF_vect) {
38 void AlarmClock::cancel(Alarm& item) {
39 ATOMIC_BLOCK( ATOMIC_RESTORESTATE )
42 Alarm *tmp = (Alarm*) select();
49 tmp = (Alarm*) item.select();
51 tmp->tick += item.tick;
56 tmp = (Alarm*) tmp->select();
63 AlarmClock& AlarmClock::operator --() {
64 ATOMIC_BLOCK( ATOMIC_RESTORESTATE )
66 Alarm* alarm = (Alarm*) select();
69 while ((alarm != 0) && (alarm->tick == 0)) {
72 if (alarm->async() ==
true) {
74 alarm->trigger(*
this);
80 alarm = (Alarm*) select();
87 void AlarmClock::add(Alarm& item) {
89 ATOMIC_BLOCK( ATOMIC_RESTORESTATE )
93 Alarm* temp = (Alarm*) select();
94 while ((temp != 0) && (temp->tick < item.tick)) {
95 item.tick -= temp->tick;
97 temp = (Alarm*) temp->select();
102 temp->tick -= item.tick;
110 uint32_t AlarmClock::get(
const Alarm& item)
const {
112 Alarm* tmp = (Alarm*) select();
118 tmp = (Alarm*) tmp->select();
123 bool RTCAlarm::delayMillis () {
125 set(millis2ticks(millis));
133 SysClock& SysClock::instance() {
return sysclock; }
136 RTC& RTC::instance() {
return rtc; }