Display zeigt merkwürdige Zeichen
Dependencies: mbed PinDetect TextLCD
Fork of FWFSU_Start_28102013 by
main.cpp@19:a06d764e4f64, 2016-08-04 (annotated)
- Committer:
- manuelfederanko
- Date:
- Thu Aug 04 10:56:41 2016 +0000
- Revision:
- 19:a06d764e4f64
- Parent:
- 17:ce5a80e8fc8e
- Child:
- 20:e809ca4de724
Restructured program to use events
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
manuelfederanko | 16:78da467a0609 | 1 | #include "main.h" |
joca89 | 0:097b334e1077 | 2 | |
manuelfederanko | 19:a06d764e4f64 | 3 | using namespace evtbus; |
manuelfederanko | 19:a06d764e4f64 | 4 | using namespace evt; |
joca89 | 0:097b334e1077 | 5 | |
manuelfederanko | 17:ce5a80e8fc8e | 6 | struct linked_list *times; |
manuelfederanko | 19:a06d764e4f64 | 7 | EventBus ebus; |
fox46 | 7:016281ea7be6 | 8 | |
manuelfederanko | 13:a45461fbb77f | 9 | /** |
manuelfederanko | 15:16d4e268cb84 | 10 | * Synchronize with the slave |
manuelfederanko | 15:16d4e268cb84 | 11 | */ |
manuelfederanko | 15:16d4e268cb84 | 12 | void resync( void ) { |
manuelfederanko | 15:16d4e268cb84 | 13 | ser.sendCode(MSG_CODE_TOTAL_RESET, NULL); |
manuelfederanko | 15:16d4e268cb84 | 14 | ser.flush(); |
manuelfederanko | 15:16d4e268cb84 | 15 | btn_cnt = 0; |
manuelfederanko | 15:16d4e268cb84 | 16 | comm_flags = 0; |
manuelfederanko | 15:16d4e268cb84 | 17 | buzzer_state = 0; |
manuelfederanko | 15:16d4e268cb84 | 18 | button_state = 0; |
manuelfederanko | 17:ce5a80e8fc8e | 19 | D = MIN_ROUND_CNT; |
manuelfederanko | 17:ce5a80e8fc8e | 20 | |
manuelfederanko | 17:ce5a80e8fc8e | 21 | if (times != NULL) { |
manuelfederanko | 17:ce5a80e8fc8e | 22 | deleteList(times); |
manuelfederanko | 19:a06d764e4f64 | 23 | times = initNode(); |
manuelfederanko | 17:ce5a80e8fc8e | 24 | } |
manuelfederanko | 17:ce5a80e8fc8e | 25 | } |
manuelfederanko | 17:ce5a80e8fc8e | 26 | |
manuelfederanko | 17:ce5a80e8fc8e | 27 | void reinit_list( void ) { |
manuelfederanko | 17:ce5a80e8fc8e | 28 | struct run_time *rt = (struct run_time *)malloc(sizeof(struct run_time)); |
manuelfederanko | 17:ce5a80e8fc8e | 29 | times = getLast(times); |
manuelfederanko | 17:ce5a80e8fc8e | 30 | rt->start = start_tm; |
manuelfederanko | 17:ce5a80e8fc8e | 31 | rt->snap0 = snapshot0; |
manuelfederanko | 17:ce5a80e8fc8e | 32 | rt->snap1 = snapshot1; |
manuelfederanko | 17:ce5a80e8fc8e | 33 | rt->end = end_tm; |
manuelfederanko | 17:ce5a80e8fc8e | 34 | times->data = (void *) rt; |
manuelfederanko | 17:ce5a80e8fc8e | 35 | appendNode(times, initNode()); |
manuelfederanko | 15:16d4e268cb84 | 36 | } |
manuelfederanko | 15:16d4e268cb84 | 37 | |
manuelfederanko | 19:a06d764e4f64 | 38 | /******************************************************************************************** |
manuelfederanko | 19:a06d764e4f64 | 39 | INTERRUPT SERVICE ROUTINES (those raise all events!) |
manuelfederanko | 19:a06d764e4f64 | 40 | ********************************************************************************************/ |
joca89 | 0:097b334e1077 | 41 | |
manuelfederanko | 13:a45461fbb77f | 42 | void bzr_pressed( void ) { |
manuelfederanko | 19:a06d764e4f64 | 43 | time_100us ts = systime; |
manuelfederanko | 19:a06d764e4f64 | 44 | ebus.raiseEvent(1, 0, ts, NULL); |
manuelfederanko | 13:a45461fbb77f | 45 | } |
fox46 | 6:79bc3888c88c | 46 | |
manuelfederanko | 13:a45461fbb77f | 47 | void bzr_held_pressed( void ) { |
manuelfederanko | 19:a06d764e4f64 | 48 | time_100us ts = systime; |
manuelfederanko | 19:a06d764e4f64 | 49 | ebus.raiseEvent(2, 0, ts, NULL); |
manuelfederanko | 13:a45461fbb77f | 50 | } |
manuelfederanko | 13:a45461fbb77f | 51 | |
manuelfederanko | 13:a45461fbb77f | 52 | void btn_pressed( void ) { |
manuelfederanko | 19:a06d764e4f64 | 53 | time_100us ts = systime; |
manuelfederanko | 19:a06d764e4f64 | 54 | ebus.raiseEvent(3, 0, ts, NULL); |
manuelfederanko | 13:a45461fbb77f | 55 | } |
manuelfederanko | 13:a45461fbb77f | 56 | |
manuelfederanko | 13:a45461fbb77f | 57 | void btn_held_released( void ) { |
manuelfederanko | 19:a06d764e4f64 | 58 | time_100us ts = systime; |
manuelfederanko | 19:a06d764e4f64 | 59 | ebus.raiseEvent(4, 0, ts, NULL); |
manuelfederanko | 19:a06d764e4f64 | 60 | } |
manuelfederanko | 19:a06d764e4f64 | 61 | |
manuelfederanko | 19:a06d764e4f64 | 62 | void beam_pressed(void) { |
manuelfederanko | 19:a06d764e4f64 | 63 | time_100us ts = systime; |
manuelfederanko | 19:a06d764e4f64 | 64 | ebus.raiseEvent(5, 0, ts, NULL); |
manuelfederanko | 19:a06d764e4f64 | 65 | } |
manuelfederanko | 19:a06d764e4f64 | 66 | |
manuelfederanko | 19:a06d764e4f64 | 67 | void hdl_rec( void ) { |
manuelfederanko | 19:a06d764e4f64 | 68 | time_100us ts = systime; |
manuelfederanko | 19:a06d764e4f64 | 69 | ebus.raiseEvent(6, 0, ts, NULL); |
manuelfederanko | 19:a06d764e4f64 | 70 | } |
manuelfederanko | 19:a06d764e4f64 | 71 | |
manuelfederanko | 19:a06d764e4f64 | 72 | |
manuelfederanko | 19:a06d764e4f64 | 73 | /******************************************************************************************** |
manuelfederanko | 19:a06d764e4f64 | 74 | EVENT BUS FUNCTIONS |
manuelfederanko | 19:a06d764e4f64 | 75 | ********************************************************************************************/ |
manuelfederanko | 19:a06d764e4f64 | 76 | |
manuelfederanko | 19:a06d764e4f64 | 77 | char handleEvent_01_BuzzerPressed(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 78 | if ((comm_flags & FLAG_START) == 0) |
manuelfederanko | 19:a06d764e4f64 | 79 | ebus.raiseEvent(7, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 80 | else if ((comm_flags & FLAG_SNAP_0) == 0) |
manuelfederanko | 19:a06d764e4f64 | 81 | ebus.raiseEvent(8, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 82 | else if ((comm_flags & FLAG_SNAP_1) == 0) |
manuelfederanko | 19:a06d764e4f64 | 83 | ebus.raiseEvent(9, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 84 | else if ((comm_flags & FLAG_STOP) == 0) |
manuelfederanko | 19:a06d764e4f64 | 85 | ebus.raiseEvent(10, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 86 | |
manuelfederanko | 19:a06d764e4f64 | 87 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 88 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 89 | } |
manuelfederanko | 19:a06d764e4f64 | 90 | |
manuelfederanko | 19:a06d764e4f64 | 91 | char handleEvent_02_StartNextRun(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 92 | reinit_list(); |
manuelfederanko | 19:a06d764e4f64 | 93 | reset(); |
manuelfederanko | 19:a06d764e4f64 | 94 | ebus.raiseEvent(11, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 95 | |
manuelfederanko | 19:a06d764e4f64 | 96 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 97 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 98 | } |
manuelfederanko | 19:a06d764e4f64 | 99 | |
manuelfederanko | 19:a06d764e4f64 | 100 | char handleEvent_03_Resync(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 101 | resync(); |
manuelfederanko | 19:a06d764e4f64 | 102 | |
manuelfederanko | 19:a06d764e4f64 | 103 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 104 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 105 | } |
manuelfederanko | 19:a06d764e4f64 | 106 | |
manuelfederanko | 19:a06d764e4f64 | 107 | char handleEvent_04_Shutdown(Event *e) { |
manuelfederanko | 17:ce5a80e8fc8e | 108 | deleteList(times); |
manuelfederanko | 13:a45461fbb77f | 109 | shutdown_seq(); |
manuelfederanko | 19:a06d764e4f64 | 110 | |
manuelfederanko | 19:a06d764e4f64 | 111 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 112 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 113 | } |
manuelfederanko | 19:a06d764e4f64 | 114 | |
manuelfederanko | 19:a06d764e4f64 | 115 | char handleEvent_05_BeamPressed(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 116 | ebus.raiseEvent(7, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 117 | |
manuelfederanko | 19:a06d764e4f64 | 118 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 119 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 120 | } |
manuelfederanko | 19:a06d764e4f64 | 121 | |
manuelfederanko | 19:a06d764e4f64 | 122 | char handleEvent_06_Receive(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 123 | tcode c; |
manuelfederanko | 19:a06d764e4f64 | 124 | char e_b[EVENT_DATA_LENGTH] = { 0 }; |
manuelfederanko | 19:a06d764e4f64 | 125 | char rec_buff[MSG_BUFFSIZE]; |
manuelfederanko | 19:a06d764e4f64 | 126 | |
manuelfederanko | 19:a06d764e4f64 | 127 | if (!ser.codeAvailable()) { |
manuelfederanko | 19:a06d764e4f64 | 128 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 129 | return 1; |
manuelfederanko | 19:a06d764e4f64 | 130 | } |
manuelfederanko | 19:a06d764e4f64 | 131 | |
manuelfederanko | 19:a06d764e4f64 | 132 | ser.skipToCode(); |
manuelfederanko | 19:a06d764e4f64 | 133 | ser.readCode(&c, rec_buff); |
manuelfederanko | 19:a06d764e4f64 | 134 | int_to_str(c, e_b); |
manuelfederanko | 19:a06d764e4f64 | 135 | strcat(e_b, rec_buff); |
manuelfederanko | 19:a06d764e4f64 | 136 | ebus.raiseEvent(12, 0, e->timestamp, e_b); |
manuelfederanko | 19:a06d764e4f64 | 137 | |
manuelfederanko | 19:a06d764e4f64 | 138 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 139 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 140 | } |
manuelfederanko | 19:a06d764e4f64 | 141 | |
manuelfederanko | 19:a06d764e4f64 | 142 | char handleEvent_07_Start(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 143 | char b[9]; |
manuelfederanko | 19:a06d764e4f64 | 144 | |
manuelfederanko | 19:a06d764e4f64 | 145 | if ((comm_flags & FLAG_START) == 0) { |
manuelfederanko | 19:a06d764e4f64 | 146 | start_tm = e->timestamp; |
manuelfederanko | 19:a06d764e4f64 | 147 | comm_flags |= FLAG_START; |
manuelfederanko | 19:a06d764e4f64 | 148 | |
manuelfederanko | 19:a06d764e4f64 | 149 | int_to_str(start_tm, b); |
manuelfederanko | 19:a06d764e4f64 | 150 | ser.sendCode(MSG_CODE_TMS, b); |
manuelfederanko | 19:a06d764e4f64 | 151 | ser.flush(); |
manuelfederanko | 19:a06d764e4f64 | 152 | } |
manuelfederanko | 19:a06d764e4f64 | 153 | |
manuelfederanko | 19:a06d764e4f64 | 154 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 155 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 156 | } |
manuelfederanko | 19:a06d764e4f64 | 157 | |
manuelfederanko | 19:a06d764e4f64 | 158 | char handleEvent_08_Snap0(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 159 | char b[9]; |
manuelfederanko | 19:a06d764e4f64 | 160 | |
manuelfederanko | 19:a06d764e4f64 | 161 | if ((comm_flags & FLAG_SNAP_0) == 0) { |
manuelfederanko | 19:a06d764e4f64 | 162 | snapshot0 = e->timestamp; |
manuelfederanko | 19:a06d764e4f64 | 163 | comm_flags |= FLAG_SNAP_0; |
manuelfederanko | 19:a06d764e4f64 | 164 | |
manuelfederanko | 19:a06d764e4f64 | 165 | int_to_str(snapshot0, b); |
manuelfederanko | 19:a06d764e4f64 | 166 | ser.sendCode(MSG_CODE_TML0, b); |
manuelfederanko | 19:a06d764e4f64 | 167 | ser.flush(); |
manuelfederanko | 19:a06d764e4f64 | 168 | } |
manuelfederanko | 19:a06d764e4f64 | 169 | |
manuelfederanko | 19:a06d764e4f64 | 170 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 171 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 172 | } |
manuelfederanko | 19:a06d764e4f64 | 173 | |
manuelfederanko | 19:a06d764e4f64 | 174 | char handleEvent_09_Snap1(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 175 | char b[9]; |
manuelfederanko | 19:a06d764e4f64 | 176 | |
manuelfederanko | 19:a06d764e4f64 | 177 | if ((comm_flags & FLAG_SNAP_1) == 0) { |
manuelfederanko | 19:a06d764e4f64 | 178 | snapshot1 = e->timestamp; |
manuelfederanko | 19:a06d764e4f64 | 179 | comm_flags |= FLAG_SNAP_1; |
manuelfederanko | 19:a06d764e4f64 | 180 | |
manuelfederanko | 19:a06d764e4f64 | 181 | int_to_str(snapshot1, b); |
manuelfederanko | 19:a06d764e4f64 | 182 | ser.sendCode(MSG_CODE_TML1, b); |
manuelfederanko | 19:a06d764e4f64 | 183 | ser.flush(); |
manuelfederanko | 19:a06d764e4f64 | 184 | } |
manuelfederanko | 19:a06d764e4f64 | 185 | |
manuelfederanko | 19:a06d764e4f64 | 186 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 187 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 188 | } |
manuelfederanko | 19:a06d764e4f64 | 189 | |
manuelfederanko | 19:a06d764e4f64 | 190 | char handleEvent_10_Stop(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 191 | char b[9]; |
manuelfederanko | 19:a06d764e4f64 | 192 | |
manuelfederanko | 19:a06d764e4f64 | 193 | if ((comm_flags & FLAG_STOP) == 0) { |
manuelfederanko | 19:a06d764e4f64 | 194 | end_tm = e->timestamp; |
manuelfederanko | 19:a06d764e4f64 | 195 | comm_flags |= FLAG_STOP; |
manuelfederanko | 19:a06d764e4f64 | 196 | |
manuelfederanko | 19:a06d764e4f64 | 197 | int_to_str(end_tm, b); |
manuelfederanko | 19:a06d764e4f64 | 198 | ser.sendCode(MSG_CODE_TMP, b); |
manuelfederanko | 19:a06d764e4f64 | 199 | ser.flush(); |
manuelfederanko | 19:a06d764e4f64 | 200 | } |
manuelfederanko | 19:a06d764e4f64 | 201 | |
manuelfederanko | 19:a06d764e4f64 | 202 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 203 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 204 | } |
manuelfederanko | 19:a06d764e4f64 | 205 | |
manuelfederanko | 19:a06d764e4f64 | 206 | char handleEvent_11_SendReset(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 207 | char b[9]; |
manuelfederanko | 19:a06d764e4f64 | 208 | int_to_str(D, b); |
manuelfederanko | 19:a06d764e4f64 | 209 | ser.sendCode(MSG_CODE_RESET, b); |
manuelfederanko | 19:a06d764e4f64 | 210 | ser.flush(); |
manuelfederanko | 19:a06d764e4f64 | 211 | |
manuelfederanko | 19:a06d764e4f64 | 212 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 213 | return 0; |
manuelfederanko | 19:a06d764e4f64 | 214 | } |
manuelfederanko | 19:a06d764e4f64 | 215 | |
manuelfederanko | 19:a06d764e4f64 | 216 | char handleEvent_12_MessageReceived(Event *e) { |
manuelfederanko | 19:a06d764e4f64 | 217 | tcode c = str_to_int(e->data); |
manuelfederanko | 19:a06d764e4f64 | 218 | char *msg = &e->data[8]; |
manuelfederanko | 19:a06d764e4f64 | 219 | |
manuelfederanko | 19:a06d764e4f64 | 220 | switch(c) { |
manuelfederanko | 19:a06d764e4f64 | 221 | case MSG_CODE_KILL: |
manuelfederanko | 19:a06d764e4f64 | 222 | ebus.raiseEvent(4, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 223 | break; |
manuelfederanko | 19:a06d764e4f64 | 224 | case MSG_CODE_RESET: |
manuelfederanko | 19:a06d764e4f64 | 225 | ebus.raiseEvent(2, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 226 | break; |
manuelfederanko | 19:a06d764e4f64 | 227 | case MSG_CODE_STOP: |
manuelfederanko | 19:a06d764e4f64 | 228 | ebus.raiseEvent(10, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 229 | break; |
manuelfederanko | 19:a06d764e4f64 | 230 | case MSG_CODE_REQ_RES: |
manuelfederanko | 19:a06d764e4f64 | 231 | //ebus.raiseEvent(3, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 232 | ebus.raiseEvent(2, 0, e->timestamp, NULL); |
manuelfederanko | 19:a06d764e4f64 | 233 | break; |
manuelfederanko | 19:a06d764e4f64 | 234 | } |
manuelfederanko | 19:a06d764e4f64 | 235 | |
manuelfederanko | 19:a06d764e4f64 | 236 | delete e; |
manuelfederanko | 19:a06d764e4f64 | 237 | return 0; |
manuelfederanko | 13:a45461fbb77f | 238 | } |
manuelfederanko | 13:a45461fbb77f | 239 | |
manuelfederanko | 13:a45461fbb77f | 240 | int main() { |
manuelfederanko | 13:a45461fbb77f | 241 | //| Element 0 | Element 1 | Element 2 | Element 3 | |
manuelfederanko | 13:a45461fbb77f | 242 | //|-----------|-----------|-----------|-----------| |
manuelfederanko | 13:a45461fbb77f | 243 | //| Akkucheck | LED blink | Disp-Rate | Btn. Rate | |
manuelfederanko | 13:a45461fbb77f | 244 | time_100us prev[5]; |
fox46 | 12:3f53322a5270 | 245 | |
manuelfederanko | 13:a45461fbb77f | 246 | //init |
manuelfederanko | 13:a45461fbb77f | 247 | init_io(); |
manuelfederanko | 13:a45461fbb77f | 248 | init_values(); |
manuelfederanko | 17:ce5a80e8fc8e | 249 | times = NULL; |
manuelfederanko | 17:ce5a80e8fc8e | 250 | tick.attach_us(&handle_systime, 100); //every 100 us |
manuelfederanko | 17:ce5a80e8fc8e | 251 | pb1.attach_asserted(&bzr_pressed); |
manuelfederanko | 17:ce5a80e8fc8e | 252 | pb1.attach_asserted_held(&bzr_held_pressed); |
manuelfederanko | 19:a06d764e4f64 | 253 | pb1.setSamplesTillHeld(1000); //1000 samples ---> 1ms ---> 1 second |
manuelfederanko | 17:ce5a80e8fc8e | 254 | pb1.setSampleFrequency(1000); //1ms |
manuelfederanko | 17:ce5a80e8fc8e | 255 | |
manuelfederanko | 17:ce5a80e8fc8e | 256 | pb2.attach_asserted(&btn_pressed); |
manuelfederanko | 17:ce5a80e8fc8e | 257 | pb2.attach_deasserted_held(&btn_held_released); |
manuelfederanko | 17:ce5a80e8fc8e | 258 | pb2.setSamplesTillHeld(200); |
manuelfederanko | 17:ce5a80e8fc8e | 259 | pb2.setSampleFrequency(); |
manuelfederanko | 17:ce5a80e8fc8e | 260 | |
manuelfederanko | 19:a06d764e4f64 | 261 | beam.attach_asserted(&beam_pressed); |
manuelfederanko | 19:a06d764e4f64 | 262 | beam.setSampleFrequency(1000); |
manuelfederanko | 19:a06d764e4f64 | 263 | |
manuelfederanko | 19:a06d764e4f64 | 264 | //register event handlers |
manuelfederanko | 19:a06d764e4f64 | 265 | ebus.registerEvent(1, &handleEvent_01_BuzzerPressed); |
manuelfederanko | 19:a06d764e4f64 | 266 | ebus.registerEvent(2, &handleEvent_02_StartNextRun); |
manuelfederanko | 19:a06d764e4f64 | 267 | ebus.registerEvent(3, &handleEvent_03_Resync); |
manuelfederanko | 19:a06d764e4f64 | 268 | ebus.registerEvent(4, &handleEvent_04_Shutdown); |
manuelfederanko | 19:a06d764e4f64 | 269 | ebus.registerEvent(5, &handleEvent_05_BeamPressed); |
manuelfederanko | 19:a06d764e4f64 | 270 | ebus.registerEvent(6, &handleEvent_06_Receive); |
manuelfederanko | 19:a06d764e4f64 | 271 | ebus.registerEvent(7, &handleEvent_07_Start); |
manuelfederanko | 19:a06d764e4f64 | 272 | ebus.registerEvent(8, &handleEvent_08_Snap0); |
manuelfederanko | 19:a06d764e4f64 | 273 | ebus.registerEvent(9, &handleEvent_09_Snap1); |
manuelfederanko | 19:a06d764e4f64 | 274 | ebus.registerEvent(10, &handleEvent_10_Stop); |
manuelfederanko | 19:a06d764e4f64 | 275 | ebus.registerEvent(11, &handleEvent_11_SendReset); |
manuelfederanko | 19:a06d764e4f64 | 276 | ebus.registerEvent(12, &handleEvent_12_MessageReceived); |
manuelfederanko | 19:a06d764e4f64 | 277 | |
manuelfederanko | 17:ce5a80e8fc8e | 278 | //info |
manuelfederanko | 17:ce5a80e8fc8e | 279 | cprintf(RUNMODE_SERVER); |
manuelfederanko | 17:ce5a80e8fc8e | 280 | display(); |
manuelfederanko | 17:ce5a80e8fc8e | 281 | wait(WAIT_INFO_TM); |
manuelfederanko | 17:ce5a80e8fc8e | 282 | |
manuelfederanko | 17:ce5a80e8fc8e | 283 | //config |
manuelfederanko | 17:ce5a80e8fc8e | 284 | config_buttons(); |
manuelfederanko | 17:ce5a80e8fc8e | 285 | config_rf_mod(); |
manuelfederanko | 17:ce5a80e8fc8e | 286 | |
manuelfederanko | 17:ce5a80e8fc8e | 287 | //start |
manuelfederanko | 17:ce5a80e8fc8e | 288 | lowbatt(); |
manuelfederanko | 17:ce5a80e8fc8e | 289 | ser.registerRecFc(&hdl_rec); |
manuelfederanko | 17:ce5a80e8fc8e | 290 | |
manuelfederanko | 17:ce5a80e8fc8e | 291 | prev[0] = prev[1] = prev[2] = prev[3] = prev[4] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 292 | |
manuelfederanko | 17:ce5a80e8fc8e | 293 | times = initNode(); |
manuelfederanko | 17:ce5a80e8fc8e | 294 | |
manuelfederanko | 19:a06d764e4f64 | 295 | memset(bl0, 0, LCD_BUFFERLEN); |
manuelfederanko | 19:a06d764e4f64 | 296 | memset(bl1, 0, LCD_BUFFERLEN); |
manuelfederanko | 19:a06d764e4f64 | 297 | memset(bl0_, 0, LCD_BUFFERLEN); |
manuelfederanko | 19:a06d764e4f64 | 298 | memset(bl1_, 0, LCD_BUFFERLEN); |
manuelfederanko | 19:a06d764e4f64 | 299 | |
manuelfederanko | 19:a06d764e4f64 | 300 | ebus.raiseEvent(3, 0, systime, NULL); |
manuelfederanko | 19:a06d764e4f64 | 301 | |
manuelfederanko | 17:ce5a80e8fc8e | 302 | while(1) { |
manuelfederanko | 17:ce5a80e8fc8e | 303 | if (systime - prev[2] >= RATE_DISPLAY) { |
manuelfederanko | 17:ce5a80e8fc8e | 304 | prev[2] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 305 | render_time(); |
manuelfederanko | 17:ce5a80e8fc8e | 306 | display(); |
manuelfederanko | 17:ce5a80e8fc8e | 307 | } |
manuelfederanko | 17:ce5a80e8fc8e | 308 | if (systime - prev[1] >= ((akku_state >= AKKU_1)? RATE_LED_NOK : RATE_LED_OK)) { |
manuelfederanko | 17:ce5a80e8fc8e | 309 | prev[1] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 310 | stoppled.write(!stoppled.read()); |
manuelfederanko | 17:ce5a80e8fc8e | 311 | } |
manuelfederanko | 17:ce5a80e8fc8e | 312 | if (comm_flags & FLAG_INFO_LOCK && systime - info_tm >= RATE_SHOW_INFO) { |
manuelfederanko | 17:ce5a80e8fc8e | 313 | //if the flag is set it means, that we wanna show something and the time has been set --> if the difference bigger than the rate, then clear the flag |
manuelfederanko | 17:ce5a80e8fc8e | 314 | //the flag gets checked in the render_time function, to prevent that from overwriting the info text |
manuelfederanko | 17:ce5a80e8fc8e | 315 | comm_flags &= ~FLAG_INFO_LOCK; |
manuelfederanko | 17:ce5a80e8fc8e | 316 | } |
manuelfederanko | 17:ce5a80e8fc8e | 317 | if (systime - prev[0] >= RATE_CHECK_AKKU) { |
manuelfederanko | 17:ce5a80e8fc8e | 318 | prev[0] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 319 | akkucheck(); |
manuelfederanko | 17:ce5a80e8fc8e | 320 | |
manuelfederanko | 17:ce5a80e8fc8e | 321 | if (akku_state == AKKU_CRITICAL) { |
manuelfederanko | 17:ce5a80e8fc8e | 322 | shutdown_seq(); |
manuelfederanko | 17:ce5a80e8fc8e | 323 | } |
manuelfederanko | 17:ce5a80e8fc8e | 324 | } |
manuelfederanko | 19:a06d764e4f64 | 325 | |
manuelfederanko | 19:a06d764e4f64 | 326 | if (!ser.codeAvailable() && ser.getStatus() & MSG_ERR_ROVFL) { |
manuelfederanko | 19:a06d764e4f64 | 327 | ser.flush(MSG_FLUSH_IN); |
manuelfederanko | 19:a06d764e4f64 | 328 | } |
manuelfederanko | 19:a06d764e4f64 | 329 | |
manuelfederanko | 19:a06d764e4f64 | 330 | ebus.run(); |
manuelfederanko | 17:ce5a80e8fc8e | 331 | } |
manuelfederanko | 19:a06d764e4f64 | 332 | } |