Display zeigt merkwürdige Zeichen

Dependencies:   mbed PinDetect TextLCD

Fork of FWFSU_Start_28102013 by KX-ONE

Committer:
manuelfederanko
Date:
Tue Aug 09 09:17:48 2016 +0000
Revision:
24:9c0151db1f98
Parent:
23:70780e8b6a2e
Child:
26:5c92d4036a4f
Fixed some memory leaks which should've been the cause for the ic getting stuck.

Who changed what in which revision?

UserRevisionLine numberNew 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;
manuelfederanko 20:e809ca4de724 5 using namespace msg;
joca89 0:097b334e1077 6
manuelfederanko 17:ce5a80e8fc8e 7 struct linked_list *times;
manuelfederanko 19:a06d764e4f64 8 EventBus ebus;
fox46 7:016281ea7be6 9
manuelfederanko 20:e809ca4de724 10 time_100us ping_flag = 0;
manuelfederanko 20:e809ca4de724 11
manuelfederanko 13:a45461fbb77f 12 /**
manuelfederanko 15:16d4e268cb84 13 * Synchronize with the slave
manuelfederanko 15:16d4e268cb84 14 */
manuelfederanko 15:16d4e268cb84 15 void resync( void ) {
manuelfederanko 20:e809ca4de724 16 Message *m = new Message(MSG_CODE_TOTAL_RESET, "");
manuelfederanko 20:e809ca4de724 17 ser.putMsg(m);
manuelfederanko 15:16d4e268cb84 18 ser.flush();
manuelfederanko 20:e809ca4de724 19
manuelfederanko 15:16d4e268cb84 20 btn_cnt = 0;
manuelfederanko 15:16d4e268cb84 21 comm_flags = 0;
manuelfederanko 15:16d4e268cb84 22 buzzer_state = 0;
manuelfederanko 15:16d4e268cb84 23 button_state = 0;
manuelfederanko 17:ce5a80e8fc8e 24 D = MIN_ROUND_CNT;
manuelfederanko 17:ce5a80e8fc8e 25
manuelfederanko 17:ce5a80e8fc8e 26 if (times != NULL) {
manuelfederanko 17:ce5a80e8fc8e 27 deleteList(times);
manuelfederanko 19:a06d764e4f64 28 times = initNode();
manuelfederanko 17:ce5a80e8fc8e 29 }
manuelfederanko 17:ce5a80e8fc8e 30 }
manuelfederanko 17:ce5a80e8fc8e 31
manuelfederanko 17:ce5a80e8fc8e 32 void reinit_list( void ) {
manuelfederanko 17:ce5a80e8fc8e 33 struct run_time *rt = (struct run_time *)malloc(sizeof(struct run_time));
manuelfederanko 17:ce5a80e8fc8e 34 times = getLast(times);
manuelfederanko 17:ce5a80e8fc8e 35 rt->start = start_tm;
manuelfederanko 17:ce5a80e8fc8e 36 rt->snap0 = snapshot0;
manuelfederanko 17:ce5a80e8fc8e 37 rt->snap1 = snapshot1;
manuelfederanko 17:ce5a80e8fc8e 38 rt->end = end_tm;
manuelfederanko 17:ce5a80e8fc8e 39 times->data = (void *) rt;
manuelfederanko 17:ce5a80e8fc8e 40 appendNode(times, initNode());
manuelfederanko 15:16d4e268cb84 41 }
manuelfederanko 15:16d4e268cb84 42
manuelfederanko 19:a06d764e4f64 43 /********************************************************************************************
manuelfederanko 19:a06d764e4f64 44 INTERRUPT SERVICE ROUTINES (those raise all events!)
manuelfederanko 19:a06d764e4f64 45 ********************************************************************************************/
joca89 0:097b334e1077 46
manuelfederanko 13:a45461fbb77f 47 void bzr_pressed( void ) {
manuelfederanko 24:9c0151db1f98 48 //cprintf("case");
manuelfederanko 24:9c0151db1f98 49 //display();
manuelfederanko 24:9c0151db1f98 50 //wait(1);
manuelfederanko 19:a06d764e4f64 51 time_100us ts = systime;
manuelfederanko 24:9c0151db1f98 52 ebus.setInterruptContext();
manuelfederanko 19:a06d764e4f64 53 ebus.raiseEvent(1, 0, ts, NULL);
manuelfederanko 13:a45461fbb77f 54 }
fox46 6:79bc3888c88c 55
manuelfederanko 13:a45461fbb77f 56 void bzr_held_pressed( void ) {
manuelfederanko 19:a06d764e4f64 57 time_100us ts = systime;
manuelfederanko 24:9c0151db1f98 58 ebus.setInterruptContext();
manuelfederanko 19:a06d764e4f64 59 ebus.raiseEvent(2, 0, ts, NULL);
manuelfederanko 13:a45461fbb77f 60 }
manuelfederanko 13:a45461fbb77f 61
manuelfederanko 13:a45461fbb77f 62 void btn_pressed( void ) {
manuelfederanko 19:a06d764e4f64 63 time_100us ts = systime;
manuelfederanko 24:9c0151db1f98 64 ebus.setInterruptContext();
manuelfederanko 19:a06d764e4f64 65 ebus.raiseEvent(3, 0, ts, NULL);
manuelfederanko 13:a45461fbb77f 66 }
manuelfederanko 13:a45461fbb77f 67
manuelfederanko 13:a45461fbb77f 68 void btn_held_released( void ) {
manuelfederanko 19:a06d764e4f64 69 time_100us ts = systime;
manuelfederanko 24:9c0151db1f98 70 ebus.setInterruptContext();
manuelfederanko 19:a06d764e4f64 71 ebus.raiseEvent(4, 0, ts, NULL);
manuelfederanko 19:a06d764e4f64 72 }
manuelfederanko 19:a06d764e4f64 73
manuelfederanko 19:a06d764e4f64 74 void beam_pressed(void) {
manuelfederanko 19:a06d764e4f64 75 time_100us ts = systime;
manuelfederanko 24:9c0151db1f98 76 ebus.setInterruptContext();
manuelfederanko 19:a06d764e4f64 77 ebus.raiseEvent(5, 0, ts, NULL);
manuelfederanko 19:a06d764e4f64 78 }
manuelfederanko 19:a06d764e4f64 79
manuelfederanko 19:a06d764e4f64 80 void hdl_rec( void ) {
manuelfederanko 19:a06d764e4f64 81 time_100us ts = systime;
manuelfederanko 24:9c0151db1f98 82 ebus.setInterruptContext();
manuelfederanko 19:a06d764e4f64 83 ebus.raiseEvent(6, 0, ts, NULL);
manuelfederanko 19:a06d764e4f64 84 }
manuelfederanko 19:a06d764e4f64 85
manuelfederanko 19:a06d764e4f64 86
manuelfederanko 19:a06d764e4f64 87 /********************************************************************************************
manuelfederanko 19:a06d764e4f64 88 EVENT BUS FUNCTIONS
manuelfederanko 19:a06d764e4f64 89 ********************************************************************************************/
manuelfederanko 19:a06d764e4f64 90
manuelfederanko 19:a06d764e4f64 91 char handleEvent_01_BuzzerPressed(Event *e) {
manuelfederanko 19:a06d764e4f64 92 if ((comm_flags & FLAG_START) == 0)
manuelfederanko 19:a06d764e4f64 93 ebus.raiseEvent(7, 0, e->timestamp, NULL);
manuelfederanko 22:642cfa0cebcb 94 else if ((comm_flags & FLAG_STOP) == 0 && (comm_flags & FLAG_SNAP_0) == 0) //only when stop has not been pressed
manuelfederanko 19:a06d764e4f64 95 ebus.raiseEvent(8, 0, e->timestamp, NULL);
manuelfederanko 22:642cfa0cebcb 96 else if ((comm_flags & FLAG_STOP) == 0 && (comm_flags & FLAG_SNAP_1) == 0)
manuelfederanko 19:a06d764e4f64 97 ebus.raiseEvent(9, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 98 else if ((comm_flags & FLAG_STOP) == 0)
manuelfederanko 19:a06d764e4f64 99 ebus.raiseEvent(10, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 100
manuelfederanko 19:a06d764e4f64 101 delete e;
manuelfederanko 19:a06d764e4f64 102 return 0;
manuelfederanko 19:a06d764e4f64 103 }
manuelfederanko 19:a06d764e4f64 104
manuelfederanko 19:a06d764e4f64 105 char handleEvent_02_StartNextRun(Event *e) {
manuelfederanko 24:9c0151db1f98 106 if (comm_flags & FLAG_START && (comm_flags & FLAG_STOP) == 0) {//cant reset if we didnt stop
manuelfederanko 24:9c0151db1f98 107 delete e;
manuelfederanko 21:5fb0832693d1 108 return 1;
manuelfederanko 24:9c0151db1f98 109 }
manuelfederanko 19:a06d764e4f64 110 reinit_list();
manuelfederanko 19:a06d764e4f64 111 reset();
manuelfederanko 21:5fb0832693d1 112
manuelfederanko 19:a06d764e4f64 113 ebus.raiseEvent(11, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 114
manuelfederanko 19:a06d764e4f64 115 delete e;
manuelfederanko 19:a06d764e4f64 116 return 0;
manuelfederanko 19:a06d764e4f64 117 }
manuelfederanko 19:a06d764e4f64 118
manuelfederanko 19:a06d764e4f64 119 char handleEvent_03_Resync(Event *e) {
manuelfederanko 19:a06d764e4f64 120 resync();
manuelfederanko 19:a06d764e4f64 121
manuelfederanko 19:a06d764e4f64 122 delete e;
manuelfederanko 19:a06d764e4f64 123 return 0;
manuelfederanko 19:a06d764e4f64 124 }
manuelfederanko 19:a06d764e4f64 125
manuelfederanko 19:a06d764e4f64 126 char handleEvent_04_Shutdown(Event *e) {
manuelfederanko 17:ce5a80e8fc8e 127 deleteList(times);
manuelfederanko 13:a45461fbb77f 128 shutdown_seq();
manuelfederanko 19:a06d764e4f64 129
manuelfederanko 19:a06d764e4f64 130 delete e;
manuelfederanko 19:a06d764e4f64 131 return 0;
manuelfederanko 19:a06d764e4f64 132 }
manuelfederanko 19:a06d764e4f64 133
manuelfederanko 19:a06d764e4f64 134 char handleEvent_05_BeamPressed(Event *e) {
manuelfederanko 19:a06d764e4f64 135 ebus.raiseEvent(7, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 136
manuelfederanko 19:a06d764e4f64 137 delete e;
manuelfederanko 19:a06d764e4f64 138 return 0;
manuelfederanko 19:a06d764e4f64 139 }
manuelfederanko 19:a06d764e4f64 140
manuelfederanko 19:a06d764e4f64 141 char handleEvent_06_Receive(Event *e) {
manuelfederanko 20:e809ca4de724 142 Message *m;
manuelfederanko 19:a06d764e4f64 143 char e_b[EVENT_DATA_LENGTH] = { 0 };
manuelfederanko 19:a06d764e4f64 144
manuelfederanko 24:9c0151db1f98 145 if (ser.available() == 0) {
manuelfederanko 24:9c0151db1f98 146 delete e;
fox46 23:70780e8b6a2e 147 return 0;
manuelfederanko 24:9c0151db1f98 148 }
fox46 23:70780e8b6a2e 149
manuelfederanko 22:642cfa0cebcb 150 switch (ser.msgAvailable()) {
manuelfederanko 22:642cfa0cebcb 151 case MSG_AV_FLAG_NONE:
manuelfederanko 22:642cfa0cebcb 152 delete e;
manuelfederanko 22:642cfa0cebcb 153 return 2;
manuelfederanko 22:642cfa0cebcb 154 case MSG_AV_FLAG_MSG:
manuelfederanko 22:642cfa0cebcb 155 goto PROCESS_MSG;
manuelfederanko 22:642cfa0cebcb 156 case MSG_AV_FLAG_RESEND:
manuelfederanko 22:642cfa0cebcb 157 ser.resendMsg();
manuelfederanko 22:642cfa0cebcb 158 ser.flush();
manuelfederanko 22:642cfa0cebcb 159 delete e;
manuelfederanko 22:642cfa0cebcb 160 return 1;
manuelfederanko 19:a06d764e4f64 161 }
manuelfederanko 19:a06d764e4f64 162
manuelfederanko 22:642cfa0cebcb 163 PROCESS_MSG:
manuelfederanko 20:e809ca4de724 164 m = ser.getMsg();
manuelfederanko 20:e809ca4de724 165 if (m == NULL) {
manuelfederanko 20:e809ca4de724 166 delete e;
manuelfederanko 20:e809ca4de724 167 return 2;
manuelfederanko 20:e809ca4de724 168 }
manuelfederanko 20:e809ca4de724 169 int_to_str(m->code, e_b);
manuelfederanko 20:e809ca4de724 170 strcat(e_b, m->data);
manuelfederanko 19:a06d764e4f64 171 ebus.raiseEvent(12, 0, e->timestamp, e_b);
manuelfederanko 19:a06d764e4f64 172
manuelfederanko 19:a06d764e4f64 173 delete e;
manuelfederanko 19:a06d764e4f64 174 return 0;
manuelfederanko 19:a06d764e4f64 175 }
manuelfederanko 19:a06d764e4f64 176
manuelfederanko 19:a06d764e4f64 177 char handleEvent_07_Start(Event *e) {
manuelfederanko 19:a06d764e4f64 178 char b[9];
manuelfederanko 20:e809ca4de724 179 Message *m;
manuelfederanko 19:a06d764e4f64 180
manuelfederanko 19:a06d764e4f64 181 if ((comm_flags & FLAG_START) == 0) {
manuelfederanko 19:a06d764e4f64 182 start_tm = e->timestamp;
manuelfederanko 19:a06d764e4f64 183 comm_flags |= FLAG_START;
manuelfederanko 21:5fb0832693d1 184
manuelfederanko 19:a06d764e4f64 185 int_to_str(start_tm, b);
manuelfederanko 20:e809ca4de724 186 m = new Message(MSG_CODE_TMS, b);
manuelfederanko 20:e809ca4de724 187 ser.putMsg(m);
manuelfederanko 19:a06d764e4f64 188 ser.flush();
manuelfederanko 21:5fb0832693d1 189
manuelfederanko 21:5fb0832693d1 190 #ifdef DEBUG
manuelfederanko 21:5fb0832693d1 191 cprintf("start");
manuelfederanko 21:5fb0832693d1 192 display();
manuelfederanko 21:5fb0832693d1 193 wait(DBUG_MSG_TIME);
manuelfederanko 21:5fb0832693d1 194 #endif
manuelfederanko 19:a06d764e4f64 195 }
manuelfederanko 19:a06d764e4f64 196
manuelfederanko 19:a06d764e4f64 197 delete e;
manuelfederanko 19:a06d764e4f64 198 return 0;
manuelfederanko 19:a06d764e4f64 199 }
manuelfederanko 19:a06d764e4f64 200
manuelfederanko 19:a06d764e4f64 201 char handleEvent_08_Snap0(Event *e) {
manuelfederanko 19:a06d764e4f64 202 char b[9];
manuelfederanko 20:e809ca4de724 203 Message *m;
manuelfederanko 19:a06d764e4f64 204
manuelfederanko 19:a06d764e4f64 205 if ((comm_flags & FLAG_SNAP_0) == 0) {
manuelfederanko 19:a06d764e4f64 206 snapshot0 = e->timestamp;
manuelfederanko 19:a06d764e4f64 207 comm_flags |= FLAG_SNAP_0;
manuelfederanko 21:5fb0832693d1 208
manuelfederanko 19:a06d764e4f64 209 int_to_str(snapshot0, b);
manuelfederanko 20:e809ca4de724 210 m = new Message(MSG_CODE_TML0, b);
manuelfederanko 20:e809ca4de724 211 ser.putMsg(m);
manuelfederanko 19:a06d764e4f64 212 ser.flush();
manuelfederanko 21:5fb0832693d1 213
manuelfederanko 21:5fb0832693d1 214 #ifdef DEBUG
manuelfederanko 21:5fb0832693d1 215 cprintf("snap0");
manuelfederanko 21:5fb0832693d1 216 display();
manuelfederanko 21:5fb0832693d1 217 wait(DBUG_MSG_TIME);
manuelfederanko 21:5fb0832693d1 218 #endif
manuelfederanko 19:a06d764e4f64 219 }
manuelfederanko 19:a06d764e4f64 220
manuelfederanko 19:a06d764e4f64 221 delete e;
manuelfederanko 19:a06d764e4f64 222 return 0;
manuelfederanko 19:a06d764e4f64 223 }
manuelfederanko 19:a06d764e4f64 224
manuelfederanko 19:a06d764e4f64 225 char handleEvent_09_Snap1(Event *e) {
manuelfederanko 19:a06d764e4f64 226 char b[9];
manuelfederanko 20:e809ca4de724 227 Message *m;
manuelfederanko 19:a06d764e4f64 228
manuelfederanko 19:a06d764e4f64 229 if ((comm_flags & FLAG_SNAP_1) == 0) {
manuelfederanko 19:a06d764e4f64 230 snapshot1 = e->timestamp;
manuelfederanko 19:a06d764e4f64 231 comm_flags |= FLAG_SNAP_1;
manuelfederanko 19:a06d764e4f64 232
manuelfederanko 19:a06d764e4f64 233 int_to_str(snapshot1, b);
manuelfederanko 20:e809ca4de724 234 m = new Message(MSG_CODE_TML1, b);
manuelfederanko 20:e809ca4de724 235 ser.putMsg(m);
manuelfederanko 19:a06d764e4f64 236 ser.flush();
manuelfederanko 21:5fb0832693d1 237
manuelfederanko 21:5fb0832693d1 238 #ifdef DEBUG
manuelfederanko 21:5fb0832693d1 239 cprintf("snap1");
manuelfederanko 21:5fb0832693d1 240 display();
manuelfederanko 21:5fb0832693d1 241 wait(DBUG_MSG_TIME);
manuelfederanko 21:5fb0832693d1 242 #endif
manuelfederanko 19:a06d764e4f64 243 }
manuelfederanko 19:a06d764e4f64 244
manuelfederanko 19:a06d764e4f64 245 delete e;
manuelfederanko 19:a06d764e4f64 246 return 0;
manuelfederanko 19:a06d764e4f64 247 }
manuelfederanko 19:a06d764e4f64 248
manuelfederanko 19:a06d764e4f64 249 char handleEvent_10_Stop(Event *e) {
manuelfederanko 19:a06d764e4f64 250 char b[9];
manuelfederanko 20:e809ca4de724 251 Message *m;
manuelfederanko 19:a06d764e4f64 252
manuelfederanko 19:a06d764e4f64 253 if ((comm_flags & FLAG_STOP) == 0) {
manuelfederanko 19:a06d764e4f64 254 end_tm = e->timestamp;
manuelfederanko 19:a06d764e4f64 255 comm_flags |= FLAG_STOP;
manuelfederanko 19:a06d764e4f64 256
manuelfederanko 19:a06d764e4f64 257 int_to_str(end_tm, b);
manuelfederanko 20:e809ca4de724 258 m = new Message(MSG_CODE_TMP, b);
manuelfederanko 20:e809ca4de724 259 ser.putMsg(m);
manuelfederanko 19:a06d764e4f64 260 ser.flush();
manuelfederanko 21:5fb0832693d1 261
manuelfederanko 21:5fb0832693d1 262 #ifdef DEBUG
manuelfederanko 21:5fb0832693d1 263 cprintf("stop");
manuelfederanko 21:5fb0832693d1 264 display();
manuelfederanko 21:5fb0832693d1 265 wait(DBUG_MSG_TIME);
manuelfederanko 21:5fb0832693d1 266 #endif
manuelfederanko 19:a06d764e4f64 267 }
manuelfederanko 19:a06d764e4f64 268
manuelfederanko 19:a06d764e4f64 269 delete e;
manuelfederanko 19:a06d764e4f64 270 return 0;
manuelfederanko 19:a06d764e4f64 271 }
manuelfederanko 19:a06d764e4f64 272
manuelfederanko 19:a06d764e4f64 273 char handleEvent_11_SendReset(Event *e) {
manuelfederanko 19:a06d764e4f64 274 char b[9];
manuelfederanko 20:e809ca4de724 275 Message *m;
manuelfederanko 20:e809ca4de724 276
manuelfederanko 19:a06d764e4f64 277 int_to_str(D, b);
manuelfederanko 20:e809ca4de724 278 m = new Message(MSG_CODE_RESET, b);
manuelfederanko 20:e809ca4de724 279 ser.putMsg(m);
manuelfederanko 19:a06d764e4f64 280 ser.flush();
manuelfederanko 19:a06d764e4f64 281
manuelfederanko 21:5fb0832693d1 282 //that here for not delaying the msg transfere
manuelfederanko 21:5fb0832693d1 283 #ifdef DEBUG
manuelfederanko 21:5fb0832693d1 284 cprintf("reset");
manuelfederanko 21:5fb0832693d1 285 display();
manuelfederanko 21:5fb0832693d1 286 wait(DBUG_MSG_TIME);
manuelfederanko 21:5fb0832693d1 287 #endif
manuelfederanko 21:5fb0832693d1 288
manuelfederanko 19:a06d764e4f64 289 delete e;
manuelfederanko 19:a06d764e4f64 290 return 0;
manuelfederanko 19:a06d764e4f64 291 }
manuelfederanko 19:a06d764e4f64 292
manuelfederanko 19:a06d764e4f64 293 char handleEvent_12_MessageReceived(Event *e) {
manuelfederanko 19:a06d764e4f64 294 tcode c = str_to_int(e->data);
manuelfederanko 19:a06d764e4f64 295 char *msg = &e->data[8];
manuelfederanko 19:a06d764e4f64 296
manuelfederanko 19:a06d764e4f64 297 switch(c) {
manuelfederanko 19:a06d764e4f64 298 case MSG_CODE_KILL:
manuelfederanko 19:a06d764e4f64 299 ebus.raiseEvent(4, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 300 break;
manuelfederanko 19:a06d764e4f64 301 case MSG_CODE_RESET:
manuelfederanko 19:a06d764e4f64 302 ebus.raiseEvent(2, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 303 break;
manuelfederanko 19:a06d764e4f64 304 case MSG_CODE_STOP:
manuelfederanko 19:a06d764e4f64 305 ebus.raiseEvent(10, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 306 break;
manuelfederanko 19:a06d764e4f64 307 case MSG_CODE_REQ_RES:
manuelfederanko 19:a06d764e4f64 308 ebus.raiseEvent(2, 0, e->timestamp, NULL);
manuelfederanko 19:a06d764e4f64 309 break;
manuelfederanko 20:e809ca4de724 310 case MSG_CODE_PING:
manuelfederanko 20:e809ca4de724 311 ebus.raiseEvent(14, 0, e->timestamp, NULL);
fox46 23:70780e8b6a2e 312 break;
fox46 23:70780e8b6a2e 313 case MSG_CODE_TOTAL_RESET:
fox46 23:70780e8b6a2e 314 ebus.raiseEvent(3, 0, e->timestamp, NULL);
fox46 23:70780e8b6a2e 315 break;
manuelfederanko 20:e809ca4de724 316 }
manuelfederanko 20:e809ca4de724 317
manuelfederanko 20:e809ca4de724 318 delete e;
manuelfederanko 20:e809ca4de724 319 return 0;
manuelfederanko 20:e809ca4de724 320 }
manuelfederanko 20:e809ca4de724 321
manuelfederanko 20:e809ca4de724 322 char handleEvent_13_YouThere(Event *e) {
manuelfederanko 20:e809ca4de724 323 Message *m;
manuelfederanko 20:e809ca4de724 324 ping_flag = systime;
manuelfederanko 20:e809ca4de724 325
manuelfederanko 20:e809ca4de724 326 m = new Message(MSG_CODE_PING, "");
manuelfederanko 20:e809ca4de724 327 ser.putMsg(m);
manuelfederanko 20:e809ca4de724 328 ser.flush();
manuelfederanko 20:e809ca4de724 329
manuelfederanko 20:e809ca4de724 330 delete e;
manuelfederanko 20:e809ca4de724 331 return 0;
manuelfederanko 20:e809ca4de724 332 }
manuelfederanko 20:e809ca4de724 333
manuelfederanko 20:e809ca4de724 334 char handleEvent_14_Hello(Event *e) {
manuelfederanko 20:e809ca4de724 335 Message *m;
manuelfederanko 20:e809ca4de724 336 if (ping_flag) {
manuelfederanko 21:5fb0832693d1 337 if ((comm_flags & FLAG_BROTHER_HERE) == 0) {
manuelfederanko 21:5fb0832693d1 338 cprintf("reconnected");
manuelfederanko 21:5fb0832693d1 339 display();
manuelfederanko 21:5fb0832693d1 340 wait(0.5);
manuelfederanko 21:5fb0832693d1 341 comm_flags |= FLAG_BROTHER_HERE;
manuelfederanko 21:5fb0832693d1 342 }
manuelfederanko 20:e809ca4de724 343 ping_flag = 0;
manuelfederanko 20:e809ca4de724 344 } else {
manuelfederanko 20:e809ca4de724 345 m = new Message(MSG_CODE_PING, "");
manuelfederanko 20:e809ca4de724 346 ser.putMsg(m);
manuelfederanko 20:e809ca4de724 347 ser.flush();
manuelfederanko 19:a06d764e4f64 348 }
manuelfederanko 19:a06d764e4f64 349
manuelfederanko 19:a06d764e4f64 350 delete e;
manuelfederanko 19:a06d764e4f64 351 return 0;
manuelfederanko 13:a45461fbb77f 352 }
manuelfederanko 13:a45461fbb77f 353
manuelfederanko 13:a45461fbb77f 354 int main() {
manuelfederanko 13:a45461fbb77f 355 //| Element 0 | Element 1 | Element 2 | Element 3 |
manuelfederanko 13:a45461fbb77f 356 //|-----------|-----------|-----------|-----------|
manuelfederanko 21:5fb0832693d1 357 //| Akkucheck | LED blink | Disp-Rate | Ping |
manuelfederanko 13:a45461fbb77f 358 time_100us prev[5];
fox46 12:3f53322a5270 359
manuelfederanko 13:a45461fbb77f 360 //init
manuelfederanko 13:a45461fbb77f 361 init_io();
manuelfederanko 13:a45461fbb77f 362 init_values();
manuelfederanko 17:ce5a80e8fc8e 363 times = NULL;
manuelfederanko 17:ce5a80e8fc8e 364 tick.attach_us(&handle_systime, 100); //every 100 us
manuelfederanko 17:ce5a80e8fc8e 365 pb1.attach_asserted(&bzr_pressed);
manuelfederanko 17:ce5a80e8fc8e 366 pb1.attach_asserted_held(&bzr_held_pressed);
manuelfederanko 19:a06d764e4f64 367 pb1.setSamplesTillHeld(1000); //1000 samples ---> 1ms ---> 1 second
manuelfederanko 17:ce5a80e8fc8e 368 pb1.setSampleFrequency(1000); //1ms
manuelfederanko 17:ce5a80e8fc8e 369
fox46 23:70780e8b6a2e 370 pb2.attach_deasserted(&btn_pressed);
manuelfederanko 17:ce5a80e8fc8e 371 pb2.attach_deasserted_held(&btn_held_released);
manuelfederanko 17:ce5a80e8fc8e 372 pb2.setSamplesTillHeld(200);
manuelfederanko 17:ce5a80e8fc8e 373 pb2.setSampleFrequency();
manuelfederanko 17:ce5a80e8fc8e 374
manuelfederanko 19:a06d764e4f64 375 beam.attach_asserted(&beam_pressed);
manuelfederanko 19:a06d764e4f64 376 beam.setSampleFrequency(1000);
manuelfederanko 19:a06d764e4f64 377
manuelfederanko 19:a06d764e4f64 378 //register event handlers
manuelfederanko 19:a06d764e4f64 379 ebus.registerEvent(1, &handleEvent_01_BuzzerPressed);
manuelfederanko 19:a06d764e4f64 380 ebus.registerEvent(2, &handleEvent_02_StartNextRun);
manuelfederanko 19:a06d764e4f64 381 ebus.registerEvent(3, &handleEvent_03_Resync);
manuelfederanko 19:a06d764e4f64 382 ebus.registerEvent(4, &handleEvent_04_Shutdown);
manuelfederanko 19:a06d764e4f64 383 ebus.registerEvent(5, &handleEvent_05_BeamPressed);
manuelfederanko 19:a06d764e4f64 384 ebus.registerEvent(6, &handleEvent_06_Receive);
manuelfederanko 19:a06d764e4f64 385 ebus.registerEvent(7, &handleEvent_07_Start);
manuelfederanko 19:a06d764e4f64 386 ebus.registerEvent(8, &handleEvent_08_Snap0);
manuelfederanko 19:a06d764e4f64 387 ebus.registerEvent(9, &handleEvent_09_Snap1);
manuelfederanko 19:a06d764e4f64 388 ebus.registerEvent(10, &handleEvent_10_Stop);
manuelfederanko 19:a06d764e4f64 389 ebus.registerEvent(11, &handleEvent_11_SendReset);
manuelfederanko 19:a06d764e4f64 390 ebus.registerEvent(12, &handleEvent_12_MessageReceived);
manuelfederanko 20:e809ca4de724 391 ebus.registerEvent(13, &handleEvent_13_YouThere);
manuelfederanko 20:e809ca4de724 392 ebus.registerEvent(14, &handleEvent_14_Hello);
manuelfederanko 19:a06d764e4f64 393
manuelfederanko 17:ce5a80e8fc8e 394 //info
manuelfederanko 17:ce5a80e8fc8e 395 cprintf(RUNMODE_SERVER);
manuelfederanko 17:ce5a80e8fc8e 396 display();
manuelfederanko 17:ce5a80e8fc8e 397 wait(WAIT_INFO_TM);
manuelfederanko 17:ce5a80e8fc8e 398
manuelfederanko 17:ce5a80e8fc8e 399 //config
manuelfederanko 17:ce5a80e8fc8e 400 config_buttons();
manuelfederanko 17:ce5a80e8fc8e 401 config_rf_mod();
manuelfederanko 17:ce5a80e8fc8e 402
manuelfederanko 17:ce5a80e8fc8e 403 //start
manuelfederanko 17:ce5a80e8fc8e 404 lowbatt();
manuelfederanko 20:e809ca4de724 405 ser.registerRcFc(&hdl_rec);
manuelfederanko 17:ce5a80e8fc8e 406
manuelfederanko 17:ce5a80e8fc8e 407 prev[0] = prev[1] = prev[2] = prev[3] = prev[4] = systime;
manuelfederanko 17:ce5a80e8fc8e 408
manuelfederanko 17:ce5a80e8fc8e 409 times = initNode();
manuelfederanko 17:ce5a80e8fc8e 410
manuelfederanko 19:a06d764e4f64 411 memset(bl0, 0, LCD_BUFFERLEN);
manuelfederanko 19:a06d764e4f64 412 memset(bl1, 0, LCD_BUFFERLEN);
manuelfederanko 19:a06d764e4f64 413 memset(bl0_, 0, LCD_BUFFERLEN);
manuelfederanko 19:a06d764e4f64 414 memset(bl1_, 0, LCD_BUFFERLEN);
manuelfederanko 19:a06d764e4f64 415
manuelfederanko 19:a06d764e4f64 416 ebus.raiseEvent(3, 0, systime, NULL);
manuelfederanko 19:a06d764e4f64 417
manuelfederanko 17:ce5a80e8fc8e 418 while(1) {
manuelfederanko 17:ce5a80e8fc8e 419 if (systime - prev[2] >= RATE_DISPLAY) {
manuelfederanko 17:ce5a80e8fc8e 420 prev[2] = systime;
manuelfederanko 17:ce5a80e8fc8e 421 render_time();
manuelfederanko 17:ce5a80e8fc8e 422 display();
manuelfederanko 17:ce5a80e8fc8e 423 }
manuelfederanko 17:ce5a80e8fc8e 424 if (systime - prev[1] >= ((akku_state >= AKKU_1)? RATE_LED_NOK : RATE_LED_OK)) {
manuelfederanko 17:ce5a80e8fc8e 425 prev[1] = systime;
manuelfederanko 17:ce5a80e8fc8e 426 stoppled.write(!stoppled.read());
manuelfederanko 17:ce5a80e8fc8e 427 }
manuelfederanko 20:e809ca4de724 428 if (systime - prev[3] >= 50000) { //every 5 secs ping
manuelfederanko 20:e809ca4de724 429 prev[3] = systime;
manuelfederanko 21:5fb0832693d1 430 //ebus.raiseEvent(13, 0, systime, NULL);
manuelfederanko 20:e809ca4de724 431 }
manuelfederanko 17:ce5a80e8fc8e 432 if (comm_flags & FLAG_INFO_LOCK && systime - info_tm >= RATE_SHOW_INFO) {
manuelfederanko 17:ce5a80e8fc8e 433 //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 434 //the flag gets checked in the render_time function, to prevent that from overwriting the info text
manuelfederanko 17:ce5a80e8fc8e 435 comm_flags &= ~FLAG_INFO_LOCK;
manuelfederanko 17:ce5a80e8fc8e 436 }
manuelfederanko 17:ce5a80e8fc8e 437 if (systime - prev[0] >= RATE_CHECK_AKKU) {
manuelfederanko 17:ce5a80e8fc8e 438 prev[0] = systime;
manuelfederanko 17:ce5a80e8fc8e 439 akkucheck();
manuelfederanko 17:ce5a80e8fc8e 440
manuelfederanko 17:ce5a80e8fc8e 441 if (akku_state == AKKU_CRITICAL) {
manuelfederanko 17:ce5a80e8fc8e 442 shutdown_seq();
manuelfederanko 17:ce5a80e8fc8e 443 }
manuelfederanko 17:ce5a80e8fc8e 444 }
manuelfederanko 20:e809ca4de724 445 if (ping_flag != 0 && systime - ping_flag >= 30000) { //3 secs
manuelfederanko 21:5fb0832693d1 446 if (comm_flags & FLAG_BROTHER_HERE) {
manuelfederanko 21:5fb0832693d1 447 cprintf("connection lost");
manuelfederanko 21:5fb0832693d1 448 display();
manuelfederanko 21:5fb0832693d1 449 wait(0.5);
manuelfederanko 21:5fb0832693d1 450 }
manuelfederanko 21:5fb0832693d1 451 comm_flags &= ~FLAG_BROTHER_HERE;
manuelfederanko 20:e809ca4de724 452 ping_flag = 0;
manuelfederanko 20:e809ca4de724 453 }
manuelfederanko 24:9c0151db1f98 454
manuelfederanko 24:9c0151db1f98 455 //if (systime - prev[4] > 100) {
manuelfederanko 24:9c0151db1f98 456 // prev[4] = systime;
manuelfederanko 24:9c0151db1f98 457 ebus.run();
manuelfederanko 24:9c0151db1f98 458 //}
manuelfederanko 17:ce5a80e8fc8e 459 }
manuelfederanko 19:a06d764e4f64 460 }