Files
JustAnotherClock/src/validLed.c
2013-01-29 14:38:59 +01:00

83 lines
1.3 KiB
C

#include <stdint.h>
#include <avr/io.h>
#include "clock.h"
#define VALID_LED_REG_DIR DDRB
#define VALID_LED_REG PORTB
#define VALID_LED PB0
#define DARK_SWITCH_REG_DIR DDRD
#define DARK_SWITCH_OUT_REG PORTD
#define DARK_SWITCH_IN_REG PIND
#define DARK_SWITCH PD7
uint8_t validLedStatus = 0;
void validLedSetStatus(uint8_t x) {
validLedStatus = x;
}
uint8_t isNotDark() {
return DARK_SWITCH_IN_REG & (1 << DARK_SWITCH);
}
static inline void validLedEnable() {
PORTB |= (1 << PB0);
}
static inline void validLedDisable() {
PORTB &= ~(1 << PB0);
}
void validLedInit() {
// validLed
VALID_LED_REG_DIR |= (1 << VALID_LED);
// dark switch
DARK_SWITCH_REG_DIR &= ~(1 << DARK_SWITCH);
// pull-up on
DARK_SWITCH_OUT_REG |= (1 << DARK_SWITCH);
}
void validLedEngine() {
static uint8_t ledToggle = 0;
if (clockNextBlink()) {
uint8_t light = isNotDark();
switch (validLedStatus) {
case 0:
validLedDisable();
break;
case 1:
if (ledToggle != 0) {
ledToggle = 0;
validLedDisable();
} else {
ledToggle = 1;
if (light != 0) {
validLedEnable();
} else {
validLedDisable();
}
}
break;
case 2:
if (light != 0) {
validLedEnable();
} else {
validLedDisable();
}
break;
}
}
}