From 42077af0734b747c5e2311b3b7186537b72cecdb Mon Sep 17 00:00:00 2001 From: mb Date: Sat, 18 Apr 2009 17:06:54 +0200 Subject: Turn off the device, if the control tool is shutdown Signed-off-by: mb --- pressure_control/firmware/main.c | 38 +++++++++++++++++++++++++++----------- pressure_control/firmware/main.h | 4 ++++ pressure_control/firmware/remote.c | 7 +++++++ pressure_control/firmware/remote.h | 2 ++ pressure_control/firmware/valves.c | 8 ++++++++ pressure_control/firmware/valves.h | 1 + 6 files changed, 49 insertions(+), 11 deletions(-) (limited to 'pressure_control/firmware') diff --git a/pressure_control/firmware/main.c b/pressure_control/firmware/main.c index d2d849d..a82a503 100644 --- a/pressure_control/firmware/main.c +++ b/pressure_control/firmware/main.c @@ -179,6 +179,16 @@ static void print_banner(void) print_sram(str); } +void prepare_turn_on(void) +{ + state.device_enabled = 1; +} + +void prepare_shutdown(void) +{ + state.device_enabled = 0; +} + int main(void) { uint8_t mcucsr; @@ -217,18 +227,24 @@ int main(void) remote_notify_restart(); while (1) { mb(); - if (state.sensor_trigger_cnt == 0) { - /* It's time for triggering another sensor measurement. */ - state.sensor_trigger_cnt = -1; - mb(); - sensor_trigger_read(); - } - if (state.needs_checking) { - check_pressure(); - /* Trigger another measurement in 25 milliseconds. */ - state.sensor_trigger_cnt = 25; + if (state.device_enabled) { + if (state.sensor_trigger_cnt == 0) { + /* It's time for triggering another + * sensor measurement. */ + state.sensor_trigger_cnt = -1; + mb(); + sensor_trigger_read(); + } + if (state.needs_checking) { + check_pressure(); + /* Trigger another measurement in + * a few milliseconds. */ + state.sensor_trigger_cnt = 35; + state.needs_checking = 0; + mb(); + } + } else { state.needs_checking = 0; - mb(); } remote_work(); wdt_reset(); diff --git a/pressure_control/firmware/main.h b/pressure_control/firmware/main.h index cf6978a..edb8694 100644 --- a/pressure_control/firmware/main.h +++ b/pressure_control/firmware/main.h @@ -16,6 +16,8 @@ struct pressure_config { }; struct pressure_state { + /* Sensing and adjustment logic enabled? */ + bool device_enabled; /* Current pressure in the tank (in mBar) */ uint16_t mbar; /* Reported pressure via RS232 */ @@ -33,5 +35,7 @@ struct pressure_state { void get_pressure_config(struct pressure_config *cfg); void set_pressure_config(struct pressure_config *cfg); void get_pressure_state(struct pressure_state *state); +void prepare_turn_on(void); +void prepare_shutdown(void); #endif /* MAIN_H_ */ diff --git a/pressure_control/firmware/remote.c b/pressure_control/firmware/remote.c index d51a58b..f41c9ed 100644 --- a/pressure_control/firmware/remote.c +++ b/pressure_control/firmware/remote.c @@ -211,6 +211,13 @@ static void handle_received_message(void) err = MSG_ERR_INVAL; break; } + case MSG_SHUTDOWN: + prepare_shutdown(); + valves_shutdown(); + break; + case MSG_TURNON: + prepare_turn_on(); + break; case MSG_INVALID: break; default: diff --git a/pressure_control/firmware/remote.h b/pressure_control/firmware/remote.h index ed739eb..85afd92 100644 --- a/pressure_control/firmware/remote.h +++ b/pressure_control/firmware/remote.h @@ -25,6 +25,8 @@ enum remote_message_id { MSG_SET_CONFIG_FLAGS, MSG_SET_VALVE, MSG_RESTARTED, + MSG_SHUTDOWN, + MSG_TURNON, }; enum remote_message_error { diff --git a/pressure_control/firmware/valves.c b/pressure_control/firmware/valves.c index 034dc99..75d4606 100644 --- a/pressure_control/firmware/valves.c +++ b/pressure_control/firmware/valves.c @@ -91,6 +91,14 @@ static inline void valves_ddr_setup(void) (1 << VALVE1_12) | (1 << VALVE1_14); } +void valves_shutdown(void) +{ + valves_global_switch(VALVES_FLOW_OUT); + valve_wait_toggle(); + valve0_switch(VALVE_STATE_IDLE); + valve1_switch(VALVE_STATE_IDLE); +} + void valves_emergency_state(void) { valves_init(); diff --git a/pressure_control/firmware/valves.h b/pressure_control/firmware/valves.h index aa71268..0929682 100644 --- a/pressure_control/firmware/valves.h +++ b/pressure_control/firmware/valves.h @@ -28,6 +28,7 @@ static inline void valve_wait_toggle(void) void valves_init(void); void valves_emergency_state(void); +void valves_shutdown(void); void valves_global_switch(uint8_t global_state); uint8_t valves_get_global_state(void); -- cgit v1.2.3