refactoring
This commit is contained in:
75
src/validLed.c
Normal file
75
src/validLed.c
Normal file
@ -0,0 +1,75 @@
|
||||
#include <stdint.h>
|
||||
#include <avr/io.h>
|
||||
|
||||
#include "main.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 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(uint8_t valid) {
|
||||
static uint8_t ledToggle = 0;
|
||||
|
||||
uint8_t light = isNotDark();
|
||||
|
||||
switch (valid) {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user