Skip to content
Snippets Groups Projects
Commit 5716f419 authored by da1l6's avatar da1l6
Browse files

Control: Add log event creation calls. Update Makefile SRC

parent 12db87b9
No related branches found
No related tags found
No related merge requests found
...@@ -63,7 +63,7 @@ OPT = s ...@@ -63,7 +63,7 @@ OPT = s
# If there is more than one source file, append them above, or modify and # If there is more than one source file, append them above, or modify and
# uncomment the following: # uncomment the following:
SRC = main.c door.c power_monitor.c ../common/adc.c status_output.c keystore.c cardreader_interface.c random.c ../common/sha1/sha1.c ../common/i2c_master.c ../common/transport/transport.c shell/shell.c shell/readline.c SRC = main.c door.c power_monitor.c ../common/adc.c status_output.c keystore.c cardreader_interface.c random.c ds1307.c log.c ../common/sha1/sha1.c ../common/i2c_master.c ../common/transport/transport.c shell/shell.c shell/readline.c
# List Assembler source files here. # List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s # Make them always end in a capital .S. Files ending in a lowercase .s
...@@ -146,12 +146,13 @@ LDFLAGS += -lm ...@@ -146,12 +146,13 @@ LDFLAGS += -lm
# to get a full listing. # to get a full listing.
# #
AVRDUDE_PROGRAMMER = stk500v2 #AVRDUDE_PROGRAMMER = stk500v2
#AVRDUDE_PROGRAMMER = usbtiny #AVRDUDE_PROGRAMMER = dragon_isp
AVRDUDE_PROGRAMMER = usbtiny
# AVRDUDE_PROGRAMMER = USBasp # AVRDUDE_PROGRAMMER = USBasp
#AVRDUDE_PORT = usb # programmer connected to USB port AVRDUDE_PORT = usb # programmer connected to USB port
AVRDUDE_PORT = /dev/ttyUSB0 # programmer connected to serial device #AVRDUDE_PORT = /dev/ttyUSB0 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port #AVRDUDE_PORT = lpt1 # programmer connected to parallel port
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_BITS) AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_BITS)
......
#include "door.h" #include "door.h"
#include "log.h"
uint8_t door_read_pin_status(void); uint8_t door_read_pin_status(void);
uint8_t door_update_status(uint8_t sensor_status); uint8_t door_update_status(uint8_t sensor_status);
uint8_t is_alarm_status(uint8_t door_status); uint8_t is_alarm_status(uint8_t door_status);
char* status_names[] = {"Unlocked", "Locked", "Open", "Alarm wire open", "Alarm", "Unlocking...", "Locking..."}; char status_unlocked[] PROGMEM = "Unlocked";
char status_locked[] PROGMEM = "Locked";
char status_open[] PROGMEM = "Open";
char status_alarm_cut[] PROGMEM = "Alarm wire open";
char status_alarm[] PROGMEM = "Alarm";
char status_unlocking[] PROGMEM = "Unlocking...";
char status_locking[] PROGMEM = "Locking...";
char* status_names[] PROGMEM = {status_unlocked,
status_locked,
status_open,
status_alarm_cut,
status_alarm,
status_unlocking,
status_locking};
volatile uint8_t door_status; volatile uint8_t door_status;
...@@ -47,6 +61,7 @@ void door_tick(void){ ...@@ -47,6 +61,7 @@ void door_tick(void){
if (door_command_wait_timeout == 0){ if (door_command_wait_timeout == 0){
printf_P(PSTR("Error: Door command timeout\n")); printf_P(PSTR("Error: Door command timeout\n"));
log_append(LOG_EVENT_DOOR_COMMAND_TIMEOUT, 0);
//TODO: Retry (and turn keymatic power on if currently off) //TODO: Retry (and turn keymatic power on if currently off)
...@@ -85,6 +100,10 @@ uint8_t door_update_status(uint8_t sensor_status){ ...@@ -85,6 +100,10 @@ uint8_t door_update_status(uint8_t sensor_status){
if (is_alarm_status(new_door_status)) new_door_status |= DOOR_STATUS_ALARM; if (is_alarm_status(new_door_status)) new_door_status |= DOOR_STATUS_ALARM;
if (new_door_status & DOOR_STATUS_ALARM){
log_append( (door_status & DOOR_STATUS_ALARM) ? LOG_EVENT_ALARM_CHANGED : LOG_EVENT_ALARM_RAISED, 0);
}
return new_door_status; return new_door_status;
} }
...@@ -170,6 +189,8 @@ uint8_t lock_checked(void){ ...@@ -170,6 +189,8 @@ uint8_t lock_checked(void){
uint8_t door_clear_alarm(void){ uint8_t door_clear_alarm(void){
if (is_alarm_status(door_status)) return 0; if (is_alarm_status(door_status)) return 0;
log_append(LOG_EVENT_ALARM_DISABLED, 0);
door_status &= (uint8_t)~DOOR_STATUS_ALARM; door_status &= (uint8_t)~DOOR_STATUS_ALARM;
return 1; return 1;
} }
...@@ -193,10 +214,10 @@ void door_write_status(void){ ...@@ -193,10 +214,10 @@ void door_write_status(void){
if (status & (1 << i)){ if (status & (1 << i)){
if (c) printf_P(PSTR(",")); if (c) printf_P(PSTR(","));
c++; c++;
printf(status_names[i]); printf_P((PGM_P)pgm_read_word(&(status_names[i])));
} }
} }
if (status == 0) printf_P(PSTR("Unknown")); if (status == 0) printf_P(PSTR("Unknown"));
printf_P(PSTR("\n")); // printf_P(PSTR(" "));
} }
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <avr/wdt.h> #include <avr/wdt.h>
#include <avr/sleep.h> #include <avr/sleep.h>
#include "../common/simple_timer.h" #include "../common/simple_timer.h"
#include "door.h" #include "door.h"
...@@ -17,7 +18,7 @@ ...@@ -17,7 +18,7 @@
#include "cardreader_interface.h" #include "cardreader_interface.h"
#include "keystore.h" #include "keystore.h"
#include "log.h"
#define POWER_SWITCH_TIME 200 //2s #define POWER_SWITCH_TIME 200 //2s
#define POWER_SWITCH_DONE 0xFF #define POWER_SWITCH_DONE 0xFF
...@@ -35,6 +36,7 @@ void tick(void){ ...@@ -35,6 +36,7 @@ void tick(void){
power_tick(); power_tick();
status_tick(); status_tick();
cardreader_tick(); cardreader_tick();
shell_tick();
if (power_switch_time != 0 && power_switch_time != POWER_SWITCH_DONE && power_switch_time != POWER_SWITCH_BOOTUP){ if (power_switch_time != 0 && power_switch_time != POWER_SWITCH_DONE && power_switch_time != POWER_SWITCH_BOOTUP){
power_switch_time--; power_switch_time--;
...@@ -47,8 +49,8 @@ ISR(PCINT0_vect){ ...@@ -47,8 +49,8 @@ ISR(PCINT0_vect){
void sleep(void){ void sleep(void){
wdt_disable(); wdt_disable();
set_sleep_mode(SLEEP_MODE_IDLE); // set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode(); // sleep_mode();
wdt_enable(WDTO_8S); wdt_enable(WDTO_8S);
} }
...@@ -82,6 +84,7 @@ int main(void){ ...@@ -82,6 +84,7 @@ int main(void){
keystore_init(); keystore_init();
printf_P(PSTR("Keystore initialized\n")); printf_P(PSTR("Keystore initialized\n"));
//log_append(LOG_EVENT_STARTUP, 0);
shell_show_welcome_prompt(); shell_show_welcome_prompt();
...@@ -105,6 +108,7 @@ int main(void){ ...@@ -105,6 +108,7 @@ int main(void){
status_update(1, 0); //door status update status_update(1, 0); //door status update
} }
power_process();
power_status = power_get_status(); power_status = power_get_status();
if (power_status != last_power_status){ if (power_status != last_power_status){
last_power_status = power_status; last_power_status = power_status;
......
#include "power_monitor.h" #include "power_monitor.h"
#include "log.h"
#define POWER_BATT_POLL_INTERVAL 100 //100*10ms = 1sec #define POWER_BATT_POLL_INTERVAL 100 //100*10ms = 1sec
volatile uint8_t power_batt_update_timer = 0; volatile uint8_t power_batt_update_timer = 0;
...@@ -27,9 +28,22 @@ void power_tick(void){ ...@@ -27,9 +28,22 @@ void power_tick(void){
} }
} }
uint8_t power_get_status(void){ void power_process(void){
if (power_batt_shutdown_disable_timer == 0){ //Only check of AC pin if we don't pull it up ourself if (power_batt_shutdown_disable_timer == 0){ //Only check of AC pin if we don't pull it up ourself
SET_BIT(power_status, POWER_STATUS_AC_ON, (POWER_PIN & (1 << POWER_PIN_AC_ON)) != 0);
//Check AC Status
uint8_t ac = (POWER_PIN & (1 << POWER_PIN_AC_ON)) != 0;
if (ac) { //AC On
if ((power_status & POWER_STATUS_AC_ON) == 0){ //Was off
log_append(LOG_EVENT_AC_RETURN, main_batt_voltage);
power_status |= POWER_STATUS_AC_ON;
}
} else { //AC off
if ((power_status & POWER_STATUS_AC_ON) != 0){ //was on
log_append(LOG_EVENT_AC_FAIL, main_batt_voltage);
power_status &= ~POWER_STATUS_AC_ON;
}
}
} }
if (power_batt_update_timer == 0){ if (power_batt_update_timer == 0){
...@@ -37,6 +51,9 @@ uint8_t power_get_status(void){ ...@@ -37,6 +51,9 @@ uint8_t power_get_status(void){
power_update_batt_voltage(); power_update_batt_voltage();
} }
}
uint8_t power_get_status(void){
return power_status; return power_status;
} }
...@@ -49,17 +66,32 @@ void power_disable_battery_shutdown(void){ ...@@ -49,17 +66,32 @@ void power_disable_battery_shutdown(void){
void power_enable_battery_shutdown(void){ void power_enable_battery_shutdown(void){
//Float AC pin high to disable USV low battery shutdown //Float AC pin high to disable USV low battery shutdown
// POWER_DDR &= ~(1 << POWER_PIN_AC_ON); POWER_DDR &= ~(1 << POWER_PIN_AC_ON);
// POWER_PORT &= ~(1 << POWER_PIN_AC_ON); POWER_PORT &= ~(1 << POWER_PIN_AC_ON);
// power_batt_shutdown_disable_timer = 0; power_batt_shutdown_disable_timer = 0;
} }
void power_update_batt_voltage(void){ void power_update_batt_voltage(void){
main_batt_voltage = ADC_read_voltage(POWER_PIN_MAIN_BATTERY_VOLTAGE, 1420); main_batt_voltage = ADC_read_voltage(POWER_PIN_MAIN_BATTERY_VOLTAGE, 1420);
keymatic_batt_voltage = ADC_read_voltage(POWER_PIN_KEYMATIC_BATTERY_VOLTAGE, 507); keymatic_batt_voltage = ADC_read_voltage(POWER_PIN_KEYMATIC_BATTERY_VOLTAGE, 507);
SET_BIT(power_status, POWER_STATUS_MAIN_BATT_LOW, main_batt_voltage < 1100); if (main_batt_voltage < POWER_MAIN_BATT_LOW_VOLTAGE){
SET_BIT(power_status, POWER_STATUS_KEYMATIC_BATT_LOW, keymatic_batt_voltage < 300); if ((power_status & POWER_STATUS_MAIN_BATT_LOW) == 0){
log_append(LOG_EVENT_MAIN_BATTERY_LOW, main_batt_voltage);
power_status |= POWER_STATUS_MAIN_BATT_LOW;
}
} else {
power_status &= ~POWER_STATUS_MAIN_BATT_LOW;
}
if (keymatic_batt_voltage < POWER_KEYMATIC_BATT_LOW_VOLTAGE){
if ((power_status & POWER_STATUS_KEYMATIC_BATT_LOW) == 0){
log_append(LOG_EVENT_KEYMATIC_BATTERY_LOW, keymatic_batt_voltage);
power_status |= POWER_STATUS_KEYMATIC_BATT_LOW;
}
} else {
power_status &= ~POWER_STATUS_KEYMATIC_BATT_LOW;
}
} }
void power_write_status(void){ void power_write_status(void){
...@@ -79,5 +111,5 @@ void power_write_status(void){ ...@@ -79,5 +111,5 @@ void power_write_status(void){
} }
if (power_status & POWER_STATUS_KEYMATIC_BATT_LOW) printf_P(PSTR(", LOW!")); if (power_status & POWER_STATUS_KEYMATIC_BATT_LOW) printf_P(PSTR(", LOW!"));
printf_P(PSTR(")\n")); printf_P(PSTR(")"));
} }
...@@ -20,8 +20,11 @@ ...@@ -20,8 +20,11 @@
#define SET_BIT(x, b, v) {if (v) {x |= (b);} else {x &= ~(b);};} #define SET_BIT(x, b, v) {if (v) {x |= (b);} else {x &= ~(b);};}
#define POWER_MAIN_BATT_LOW_VOLTAGE 1100 //*10mv
#define POWER_KEYMATIC_BATT_LOW_VOLTAGE 300 //*10mv
void power_init(void); void power_init(void);
void power_process(void);
void power_tick(void); void power_tick(void);
uint8_t power_get_status(void); uint8_t power_get_status(void);
......
...@@ -61,8 +61,8 @@ void status_update(uint8_t door_status_changed, uint8_t power_status_changed){ ...@@ -61,8 +61,8 @@ void status_update(uint8_t door_status_changed, uint8_t power_status_changed){
led_blink_fraction = (power_status & POWER_STATUS_AC_ON) ? (LED_BLINK_INTERVAL / 2) : (LED_BLINK_INTERVAL / 16); led_blink_fraction = (power_status & POWER_STATUS_AC_ON) ? (LED_BLINK_INTERVAL / 2) : (LED_BLINK_INTERVAL / 16);
status_set_leds(power_status, door_status); status_set_leds(power_status, door_status);
if (door_status_changed) door_write_status(); if (door_status_changed) {door_write_status(); printf_P(PSTR("\n"));}
if (power_status_changed) power_write_status(); if (power_status_changed) {power_write_status(); printf_P(PSTR("\n"));}
} }
void status_process(){ void status_process(){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment