This commit is contained in:
tkl 2019-12-28 07:12:13 +01:00
parent ec338fb930
commit 9d2a2a4db9

View File

@ -44,7 +44,7 @@ void setup_gpio()
DDRB = 0xff; DDRB = 0xff;
PORTB = 0; PORTB = 0;
DDRB &= ~(1 << IGNITION_PIN); DDRB &= ~(1 << IGNITION_PIN);
PORTB |= (1 << IGNITION_PIN); // enable pull-up // PORTB |= (1 << IGNITION_PIN); // enable pull-up
PORTB &= ~(1 << MOSI_PIN); PORTB &= ~(1 << MOSI_PIN);
PORTB &= ~(1 << MISO_PIN); PORTB &= ~(1 << MISO_PIN);
PORTB &= ~(1 << SCK_PIN); PORTB &= ~(1 << SCK_PIN);
@ -80,19 +80,28 @@ void switch_power(enum power power)
} }
} }
void indicate_ignition(enum power ignition)
{
if(ignition) {
PORTB &= ~(1 << MOSI_PIN);
PORTB &= ~(1 << MISO_PIN);
PORTB &= ~(1 << SCK_PIN);
} else {
PORTB |= (1 << MOSI_PIN);
PORTB |= (1 << MISO_PIN);
PORTB |= (1 << SCK_PIN);
}
}
void handle_state_init() void handle_state_init()
{ {
if(ignition_on()) { if(ignition_on()) {
switch_power(on); switch_power(on);
PORTB &= ~(1 << MOSI_PIN); indicate_ignition(on);
PORTB &= ~(1 << MISO_PIN);
PORTB &= ~(1 << SCK_PIN);
current_state = state_on; current_state = state_on;
} else { } else {
shutdown_expire = tick + SHUTDOWN_TIME_MS; shutdown_expire = tick + SHUTDOWN_TIME_MS;
PORTB |= (1 << MOSI_PIN); indicate_ignition(off);
PORTB |= (1 << MISO_PIN);
PORTB |= (1 << SCK_PIN);
current_state = state_shutdown; current_state = state_shutdown;
} }
} }
@ -101,9 +110,7 @@ void handle_state_on()
{ {
if(!ignition_on()) { if(!ignition_on()) {
shutdown_expire = tick + SHUTDOWN_TIME_MS; shutdown_expire = tick + SHUTDOWN_TIME_MS;
PORTB |= (1 << MOSI_PIN); indicate_ignition(off);
PORTB |= (1 << MISO_PIN);
PORTB |= (1 << SCK_PIN);
current_state = state_shutdown; current_state = state_shutdown;
} }
} }
@ -131,9 +138,7 @@ void handle_state_guard()
if(guard_expire < tick) { if(guard_expire < tick) {
if(ignition_on()) { if(ignition_on()) {
switch_power(on); switch_power(on);
PORTB &= ~(1 << MOSI_PIN); indicate_ignition(on);
PORTB &= ~(1 << MISO_PIN);
PORTB &= ~(1 << SCK_PIN);
current_state = state_on; current_state = state_on;
} else { } else {
current_state = state_off; current_state = state_off;
@ -148,10 +153,12 @@ void handle_state_off()
{ {
if(ignition_on()) { if(ignition_on()) {
switch_power(on); switch_power(on);
PORTB &= ~(1 << MOSI_PIN); indicate_ignition(on);
PORTB &= ~(1 << MISO_PIN);
PORTB &= ~(1 << SCK_PIN);
current_state = state_on; current_state = state_on;
} else {
sleep_enable();
sleep_cpu();
sleep_disable();
} }
} }
@ -204,4 +211,3 @@ ISR(WDT_vect)
{ {
WDTCR |= (1 << WDIE); WDTCR |= (1 << WDIE);
} }