|
@@ -27,6 +27,7 @@
|
27
|
27
|
#include "state.h"
|
28
|
28
|
#include "state_volcano_run.h"
|
29
|
29
|
|
|
30
|
+// only used to draw textbox, not for buttons
|
30
|
31
|
#include "menu.h"
|
31
|
32
|
|
32
|
33
|
static uint16_t wf_index = 0;
|
|
@@ -34,6 +35,7 @@ static bd_addr_t ble_addr = {0};
|
34
|
35
|
static bd_addr_type_t ble_type = 0;
|
35
|
36
|
static bool wait_for_connect = false;
|
36
|
37
|
static bool wait_for_disconnect = false;
|
|
38
|
+static bool aborted = false;
|
37
|
39
|
|
38
|
40
|
void state_volcano_run_index(uint16_t index) {
|
39
|
41
|
wf_index = index;
|
|
@@ -48,6 +50,7 @@ static void volcano_buttons(enum buttons btn, bool state) {
|
48
|
50
|
if (state && (btn == BTN_Y)) {
|
49
|
51
|
if ((!wait_for_connect) && (!wait_for_disconnect)) {
|
50
|
52
|
debug("workflow abort");
|
|
53
|
+ aborted = true;
|
51
|
54
|
wf_reset();
|
52
|
55
|
volcano_set_pump_state(false);
|
53
|
56
|
volcano_set_heater_state(false);
|
|
@@ -64,6 +67,8 @@ void state_volcano_run_enter(void) {
|
64
|
67
|
debug("workflow connect");
|
65
|
68
|
ble_connect(ble_addr, ble_type);
|
66
|
69
|
wait_for_connect = true;
|
|
70
|
+
|
|
71
|
+ aborted = false;
|
67
|
72
|
}
|
68
|
73
|
|
69
|
74
|
void state_volcano_run_exit(void) {
|
|
@@ -104,15 +109,18 @@ static void draw(struct menu_state *menu) {
|
104
|
109
|
}
|
105
|
110
|
|
106
|
111
|
void state_volcano_run_run(void) {
|
|
112
|
+ // start workflow when connected
|
107
|
113
|
if (wait_for_connect && ble_is_connected()) {
|
108
|
114
|
wait_for_connect = false;
|
109
|
115
|
debug("workflow start");
|
110
|
116
|
wf_start(wf_index);
|
111
|
117
|
}
|
112
|
118
|
|
|
119
|
+ // visualize workflow status
|
113
|
120
|
menu_run(draw);
|
114
|
121
|
|
115
|
|
- if (!wait_for_connect) {
|
|
122
|
+ // auto disconnect when end of workflow is reached
|
|
123
|
+ if ((!wait_for_connect) && (!aborted)) {
|
116
|
124
|
struct wf_state state = wf_status();
|
117
|
125
|
if (state.status == WF_IDLE) {
|
118
|
126
|
debug("workflow disconnect");
|
|
@@ -121,6 +129,7 @@ void state_volcano_run_run(void) {
|
121
|
129
|
}
|
122
|
130
|
}
|
123
|
131
|
|
|
132
|
+ // back to main menu when disconnected
|
124
|
133
|
if (wait_for_disconnect && !ble_is_connected()) {
|
125
|
134
|
wait_for_disconnect = false;
|
126
|
135
|
debug("workflow done");
|