61 lines
1.1 KiB
C
61 lines
1.1 KiB
C
/*
|
|
* timer.c
|
|
*
|
|
* Created on: May 31, 2017
|
|
* Author: wn
|
|
*/
|
|
|
|
#include "hmi.h"
|
|
#include "timer.h"
|
|
#include "alarm.h"
|
|
#include <PontCoopScheduler.h>
|
|
#include "eeprom.h"
|
|
|
|
|
|
const uint8_t OPTIME_UPDATE_CYCLE = 10;
|
|
extern tDisplay display;
|
|
|
|
void startTimer() {
|
|
display.timerState = TT_STARTED;
|
|
}
|
|
|
|
void stopTimer() {
|
|
display.timerState = TT_IDLE;
|
|
}
|
|
|
|
void secondTick(void *handle) {
|
|
tDisplay *lDisplay = (tDisplay*) handle;
|
|
|
|
lDisplay->operatingTime += 1;
|
|
if (lDisplay->operatingTime % OPTIME_UPDATE_CYCLE == 0) {
|
|
eepromWriteStorage();
|
|
}
|
|
|
|
switch (lDisplay->timerState) {
|
|
case TT_STARTED:
|
|
lDisplay->currentTime = lDisplay->targetTime;
|
|
lDisplay->overrunTime = 0;
|
|
lDisplay->timerState = TT_RUNNING;
|
|
break;
|
|
case TT_RUNNING:
|
|
lDisplay->currentTime -= 1;
|
|
if (lDisplay->currentTime == 0) {
|
|
enableAlarm(TIME_ALARM);
|
|
lDisplay->timerState = TT_OVERRUN;
|
|
}
|
|
break;
|
|
case TT_OVERRUN:
|
|
lDisplay->overrunTime += 1;
|
|
break;
|
|
case TT_IDLE:
|
|
;
|
|
break;
|
|
default:
|
|
;
|
|
}
|
|
}
|
|
|
|
void timerInit() {
|
|
schAdd(secondTick, &display, 0, 1000);
|
|
}
|