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
# If there is more than one source file, append them above, or modify and
# 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.
# Make them always end in a capital .S. Files ending in a lowercase .s
......@@ -146,12 +146,13 @@ LDFLAGS += -lm
# to get a full listing.
#
AVRDUDE_PROGRAMMER = stk500v2
#AVRDUDE_PROGRAMMER = usbtiny
#AVRDUDE_PROGRAMMER = stk500v2
#AVRDUDE_PROGRAMMER = dragon_isp
AVRDUDE_PROGRAMMER = usbtiny
# AVRDUDE_PROGRAMMER = USBasp
#AVRDUDE_PORT = usb # programmer connected to USB port
AVRDUDE_PORT = /dev/ttyUSB0 # programmer connected to serial device
AVRDUDE_PORT = usb # programmer connected to USB port
#AVRDUDE_PORT = /dev/ttyUSB0 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_BITS)
......
#include "door.h"
#include "log.h"
uint8_t door_read_pin_status(void);
uint8_t door_update_status(uint8_t sensor_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;
......@@ -47,6 +61,7 @@ void door_tick(void){
if (door_command_wait_timeout == 0){
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)
......@@ -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 (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;
}
......@@ -170,6 +189,8 @@ uint8_t lock_checked(void){
uint8_t door_clear_alarm(void){
if (is_alarm_status(door_status)) return 0;
log_append(LOG_EVENT_ALARM_DISABLED, 0);
door_status &= (uint8_t)~DOOR_STATUS_ALARM;
return 1;
}
......@@ -193,10 +214,10 @@ void door_write_status(void){
if (status & (1 << i)){
if (c) printf_P(PSTR(","));
c++;
printf(status_names[i]);
printf_P((PGM_P)pgm_read_word(&(status_names[i])));
}
}
if (status == 0) printf_P(PSTR("Unknown"));
printf_P(PSTR("\n"));
// printf_P(PSTR(" "));
}
......@@ -5,6 +5,7 @@
#include <avr/wdt.h>
#include <avr/sleep.h>
#include "../common/simple_timer.h"
#include "door.h"
......@@ -17,7 +18,7 @@
#include "cardreader_interface.h"
#include "keystore.h"
#include "log.h"
#define POWER_SWITCH_TIME 200 //2s
#define POWER_SWITCH_DONE 0xFF
......@@ -35,6 +36,7 @@ void tick(void){
power_tick();
status_tick();
cardreader_tick();
shell_tick();
if (power_switch_time != 0 && power_switch_time != POWER_SWITCH_DONE && power_switch_time != POWER_SWITCH_BOOTUP){
power_switch_time--;
......@@ -47,8 +49,8 @@ ISR(PCINT0_vect){
void sleep(void){
wdt_disable();
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
// set_sleep_mode(SLEEP_MODE_IDLE);
// sleep_mode();
wdt_enable(WDTO_8S);
}
......@@ -82,6 +84,7 @@ int main(void){
keystore_init();
printf_P(PSTR("Keystore initialized\n"));
//log_append(LOG_EVENT_STARTUP, 0);
shell_show_welcome_prompt();
......@@ -105,6 +108,7 @@ int main(void){
status_update(1, 0); //door status update
}
power_process();
power_status = power_get_status();
if (power_status != last_power_status){
last_power_status = power_status;
......
#include "power_monitor.h"
#include "log.h"
#define POWER_BATT_POLL_INTERVAL 100 //100*10ms = 1sec
volatile uint8_t power_batt_update_timer = 0;
......@@ -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
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){
......@@ -37,6 +51,9 @@ uint8_t power_get_status(void){
power_update_batt_voltage();
}
}
uint8_t power_get_status(void){
return power_status;
}
......@@ -49,17 +66,32 @@ void power_disable_battery_shutdown(void){
void power_enable_battery_shutdown(void){
//Float AC pin high to disable USV low battery shutdown
// POWER_DDR &= ~(1 << POWER_PIN_AC_ON);
// POWER_PORT &= ~(1 << POWER_PIN_AC_ON);
// power_batt_shutdown_disable_timer = 0;
POWER_DDR &= ~(1 << POWER_PIN_AC_ON);
POWER_PORT &= ~(1 << POWER_PIN_AC_ON);
power_batt_shutdown_disable_timer = 0;
}
void power_update_batt_voltage(void){
main_batt_voltage = ADC_read_voltage(POWER_PIN_MAIN_BATTERY_VOLTAGE, 1420);
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);
SET_BIT(power_status, POWER_STATUS_KEYMATIC_BATT_LOW, keymatic_batt_voltage < 300);
if (main_batt_voltage < POWER_MAIN_BATT_LOW_VOLTAGE){
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){
......@@ -79,5 +111,5 @@ void power_write_status(void){
}
if (power_status & POWER_STATUS_KEYMATIC_BATT_LOW) printf_P(PSTR(", LOW!"));
printf_P(PSTR(")\n"));
printf_P(PSTR(")"));
}
......@@ -20,8 +20,11 @@
#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_process(void);
void power_tick(void);
uint8_t power_get_status(void);
......
......@@ -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);
status_set_leds(power_status, door_status);
if (door_status_changed) door_write_status();
if (power_status_changed) power_write_status();
if (door_status_changed) {door_write_status(); printf_P(PSTR("\n"));}
if (power_status_changed) {power_write_status(); printf_P(PSTR("\n"));}
}
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