Display zeigt merkwürdige Zeichen
Dependencies: mbed PinDetect TextLCD
Fork of FWFSU_Start_28102013 by
main.cpp@17:ce5a80e8fc8e, 2016-08-02 (annotated)
- Committer:
- manuelfederanko
- Date:
- Tue Aug 02 09:54:13 2016 +0000
- Revision:
- 17:ce5a80e8fc8e
- Parent:
- 16:78da467a0609
- Child:
- 19:a06d764e4f64
Fixed a bug, when pressing stop right after a reset caused the program to break.
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 | 13:a45461fbb77f | 3 | #define PING_TIMEOUT 50000 //5 seconds |
joca89 | 0:097b334e1077 | 4 | |
manuelfederanko | 17:ce5a80e8fc8e | 5 | struct linked_list *times; |
manuelfederanko | 16:78da467a0609 | 6 | |
manuelfederanko | 13:a45461fbb77f | 7 | /** |
manuelfederanko | 13:a45461fbb77f | 8 | * Controls the button presses: |
manuelfederanko | 13:a45461fbb77f | 9 | * 1st press: The starttime gets set and the counter begins to run |
manuelfederanko | 13:a45461fbb77f | 10 | * 2nd press: The first snapshot gets taken and displayed |
manuelfederanko | 13:a45461fbb77f | 11 | * 3rd press: The second snapshot gets taken and displayed |
manuelfederanko | 13:a45461fbb77f | 12 | * 4th press: The stoptime gets taken, the overall time is displayed |
manuelfederanko | 13:a45461fbb77f | 13 | * The Stop can also occure when received from the Stopp button over the rf modul. |
manuelfederanko | 13:a45461fbb77f | 14 | * This does not require the snapshots to be taken. |
manuelfederanko | 13:a45461fbb77f | 15 | */ |
manuelfederanko | 13:a45461fbb77f | 16 | void btn_control() { |
manuelfederanko | 13:a45461fbb77f | 17 | char nbuff[9]; |
manuelfederanko | 13:a45461fbb77f | 18 | btn_cnt++; |
manuelfederanko | 13:a45461fbb77f | 19 | switch (btn_cnt) { |
manuelfederanko | 13:a45461fbb77f | 20 | case 0: |
manuelfederanko | 13:a45461fbb77f | 21 | |
manuelfederanko | 13:a45461fbb77f | 22 | break; |
manuelfederanko | 13:a45461fbb77f | 23 | case 1: |
manuelfederanko | 13:a45461fbb77f | 24 | start_tm = systime; |
manuelfederanko | 13:a45461fbb77f | 25 | comm_flags |= FLAG_START; |
manuelfederanko | 13:a45461fbb77f | 26 | int_to_str(start_tm, nbuff); |
manuelfederanko | 13:a45461fbb77f | 27 | ser.sendCode(MSG_CODE_TMS, nbuff); |
manuelfederanko | 13:a45461fbb77f | 28 | break; |
manuelfederanko | 13:a45461fbb77f | 29 | case 2: |
manuelfederanko | 13:a45461fbb77f | 30 | snapshot0 = systime; |
manuelfederanko | 13:a45461fbb77f | 31 | comm_flags |= FLAG_SNAP_0; |
manuelfederanko | 13:a45461fbb77f | 32 | int_to_str(snapshot0, nbuff); |
manuelfederanko | 13:a45461fbb77f | 33 | ser.sendCode(MSG_CODE_TML0, nbuff); |
manuelfederanko | 13:a45461fbb77f | 34 | break; |
manuelfederanko | 13:a45461fbb77f | 35 | case 3: |
manuelfederanko | 13:a45461fbb77f | 36 | snapshot1 = systime; |
manuelfederanko | 13:a45461fbb77f | 37 | comm_flags |= FLAG_SNAP_1; |
manuelfederanko | 13:a45461fbb77f | 38 | int_to_str(snapshot1, nbuff); |
manuelfederanko | 13:a45461fbb77f | 39 | ser.sendCode(MSG_CODE_TML1, nbuff); |
manuelfederanko | 13:a45461fbb77f | 40 | break; |
manuelfederanko | 13:a45461fbb77f | 41 | case 4: |
manuelfederanko | 13:a45461fbb77f | 42 | end_tm = systime; |
manuelfederanko | 13:a45461fbb77f | 43 | comm_flags |= FLAG_STOP; |
manuelfederanko | 13:a45461fbb77f | 44 | int_to_str(end_tm, nbuff); |
manuelfederanko | 13:a45461fbb77f | 45 | ser.sendCode(MSG_CODE_TMP, nbuff); |
manuelfederanko | 13:a45461fbb77f | 46 | break; |
manuelfederanko | 13:a45461fbb77f | 47 | case 5: |
manuelfederanko | 13:a45461fbb77f | 48 | btn_cnt--; //since we increment first and then check, it is perfectly ok to decrement to 4 |
manuelfederanko | 13:a45461fbb77f | 49 | break; |
manuelfederanko | 13:a45461fbb77f | 50 | } |
manuelfederanko | 13:a45461fbb77f | 51 | ser.flush(); |
joca89 | 0:097b334e1077 | 52 | } |
joca89 | 0:097b334e1077 | 53 | |
manuelfederanko | 13:a45461fbb77f | 54 | /** |
manuelfederanko | 13:a45461fbb77f | 55 | * Ping the other device. The Stop-Button must already fully be booted in order for this to |
manuelfederanko | 13:a45461fbb77f | 56 | * work, since only then does it start to check for ping requests. |
manuelfederanko | 13:a45461fbb77f | 57 | * For this to work the rf module must first be configured, obviously. |
manuelfederanko | 13:a45461fbb77f | 58 | */ |
manuelfederanko | 13:a45461fbb77f | 59 | void ping() { |
manuelfederanko | 13:a45461fbb77f | 60 | time_100us start; |
manuelfederanko | 13:a45461fbb77f | 61 | tcode code; |
manuelfederanko | 13:a45461fbb77f | 62 | char p_resp[10]; |
manuelfederanko | 13:a45461fbb77f | 63 | char rbuff[MSG_BUFFSIZE]; |
manuelfederanko | 13:a45461fbb77f | 64 | |
manuelfederanko | 13:a45461fbb77f | 65 | //notify usr |
manuelfederanko | 13:a45461fbb77f | 66 | cprintf("pinging..."); |
manuelfederanko | 13:a45461fbb77f | 67 | display(); |
manuelfederanko | 13:a45461fbb77f | 68 | |
manuelfederanko | 13:a45461fbb77f | 69 | //send ping and wait for resp |
manuelfederanko | 13:a45461fbb77f | 70 | start = systime; |
manuelfederanko | 13:a45461fbb77f | 71 | ser.sendCode(MSG_CODE_PING, "g"); |
manuelfederanko | 13:a45461fbb77f | 72 | ser.flush(); |
manuelfederanko | 13:a45461fbb77f | 73 | while(!ser.codeAvailable() && systime - start < RATE_SHOW_INFO); |
manuelfederanko | 13:a45461fbb77f | 74 | |
manuelfederanko | 13:a45461fbb77f | 75 | //handle |
manuelfederanko | 13:a45461fbb77f | 76 | if (ser.codeAvailable()) { |
manuelfederanko | 13:a45461fbb77f | 77 | pin = systime - start; |
manuelfederanko | 13:a45461fbb77f | 78 | pin = (int) (pin * PING_ERR_COMP); // should be to 10ms accurate |
manuelfederanko | 13:a45461fbb77f | 79 | ser.skipToCode(); |
manuelfederanko | 13:a45461fbb77f | 80 | ser.readCode(&code, rbuff); |
manuelfederanko | 13:a45461fbb77f | 81 | |
manuelfederanko | 13:a45461fbb77f | 82 | if (code != MSG_CODE_PING || rbuff[0] != 'r') { |
manuelfederanko | 13:a45461fbb77f | 83 | pin = 0; |
manuelfederanko | 13:a45461fbb77f | 84 | cprintf("internal error"); |
manuelfederanko | 13:a45461fbb77f | 85 | } else { |
manuelfederanko | 13:a45461fbb77f | 86 | p_resp[0] = 'p'; |
manuelfederanko | 13:a45461fbb77f | 87 | int_to_str(pin, &p_resp[1]); |
manuelfederanko | 13:a45461fbb77f | 88 | ser.sendCode(MSG_CODE_PING, p_resp); |
manuelfederanko | 13:a45461fbb77f | 89 | ser.flush(); |
manuelfederanko | 13:a45461fbb77f | 90 | cprintf("ping: %de2us", pin); |
fox46 | 11:3d21939eb9bd | 91 | } |
manuelfederanko | 13:a45461fbb77f | 92 | } else { |
manuelfederanko | 13:a45461fbb77f | 93 | cprintf("couldn't reach\ndevice"); |
manuelfederanko | 13:a45461fbb77f | 94 | display(); |
manuelfederanko | 13:a45461fbb77f | 95 | wait(WAIT_INFO_TM); |
manuelfederanko | 13:a45461fbb77f | 96 | cprintf("please turn on\nstop first"); |
manuelfederanko | 13:a45461fbb77f | 97 | display(); |
manuelfederanko | 13:a45461fbb77f | 98 | wait(WAIT_INFO_TM); |
manuelfederanko | 13:a45461fbb77f | 99 | shutdown_seq(); |
fox46 | 11:3d21939eb9bd | 100 | } |
manuelfederanko | 13:a45461fbb77f | 101 | |
manuelfederanko | 13:a45461fbb77f | 102 | display(); |
manuelfederanko | 13:a45461fbb77f | 103 | wait(WAIT_INFO_TM); |
fox46 | 4:165fc296f7f5 | 104 | } |
fox46 | 7:016281ea7be6 | 105 | |
manuelfederanko | 13:a45461fbb77f | 106 | /** |
manuelfederanko | 15:16d4e268cb84 | 107 | * Synchronize with the slave |
manuelfederanko | 15:16d4e268cb84 | 108 | */ |
manuelfederanko | 15:16d4e268cb84 | 109 | void resync( void ) { |
manuelfederanko | 15:16d4e268cb84 | 110 | ser.sendCode(MSG_CODE_TOTAL_RESET, NULL); |
manuelfederanko | 15:16d4e268cb84 | 111 | ser.flush(); |
manuelfederanko | 15:16d4e268cb84 | 112 | btn_cnt = 0; |
manuelfederanko | 15:16d4e268cb84 | 113 | comm_flags = 0; |
manuelfederanko | 15:16d4e268cb84 | 114 | buzzer_state = 0; |
manuelfederanko | 15:16d4e268cb84 | 115 | button_state = 0; |
manuelfederanko | 17:ce5a80e8fc8e | 116 | D = MIN_ROUND_CNT; |
manuelfederanko | 17:ce5a80e8fc8e | 117 | |
manuelfederanko | 17:ce5a80e8fc8e | 118 | if (times != NULL) { |
manuelfederanko | 17:ce5a80e8fc8e | 119 | deleteList(times); |
manuelfederanko | 17:ce5a80e8fc8e | 120 | times = initNode(); |
manuelfederanko | 17:ce5a80e8fc8e | 121 | } |
manuelfederanko | 17:ce5a80e8fc8e | 122 | } |
manuelfederanko | 17:ce5a80e8fc8e | 123 | |
manuelfederanko | 17:ce5a80e8fc8e | 124 | void reinit_list( void ) { |
manuelfederanko | 17:ce5a80e8fc8e | 125 | struct run_time *rt = (struct run_time *)malloc(sizeof(struct run_time)); |
manuelfederanko | 17:ce5a80e8fc8e | 126 | times = getLast(times); |
manuelfederanko | 17:ce5a80e8fc8e | 127 | rt->start = start_tm; |
manuelfederanko | 17:ce5a80e8fc8e | 128 | rt->snap0 = snapshot0; |
manuelfederanko | 17:ce5a80e8fc8e | 129 | rt->snap1 = snapshot1; |
manuelfederanko | 17:ce5a80e8fc8e | 130 | rt->end = end_tm; |
manuelfederanko | 17:ce5a80e8fc8e | 131 | times->data = (void *) rt; |
manuelfederanko | 17:ce5a80e8fc8e | 132 | appendNode(times, initNode()); |
manuelfederanko | 15:16d4e268cb84 | 133 | } |
manuelfederanko | 15:16d4e268cb84 | 134 | |
manuelfederanko | 15:16d4e268cb84 | 135 | /** |
manuelfederanko | 13:a45461fbb77f | 136 | * Receive routine for serial data. |
manuelfederanko | 13:a45461fbb77f | 137 | * Must be attatched to the MsgSerial object. |
manuelfederanko | 13:a45461fbb77f | 138 | */ |
manuelfederanko | 13:a45461fbb77f | 139 | void hdl_rec( void ) { |
manuelfederanko | 13:a45461fbb77f | 140 | tcode rec_code; |
manuelfederanko | 13:a45461fbb77f | 141 | char rec_buff[MSG_BUFFSIZE]; |
manuelfederanko | 13:a45461fbb77f | 142 | |
manuelfederanko | 13:a45461fbb77f | 143 | if (ser.codeAvailable()) { |
manuelfederanko | 13:a45461fbb77f | 144 | ser.skipToCode(); |
manuelfederanko | 13:a45461fbb77f | 145 | ser.readCode(&rec_code, rec_buff); |
fox46 | 12:3f53322a5270 | 146 | |
manuelfederanko | 13:a45461fbb77f | 147 | switch(rec_code) { |
manuelfederanko | 13:a45461fbb77f | 148 | case MSG_CODE_KILL: |
manuelfederanko | 17:ce5a80e8fc8e | 149 | deleteList(times); |
manuelfederanko | 13:a45461fbb77f | 150 | shutdown_seq(); //the other device will already be shut down when we send the kill signal again, thus it doesn't matter if we do. |
manuelfederanko | 13:a45461fbb77f | 151 | break; |
manuelfederanko | 13:a45461fbb77f | 152 | case MSG_CODE_PING: |
manuelfederanko | 13:a45461fbb77f | 153 | break; |
manuelfederanko | 13:a45461fbb77f | 154 | case MSG_CODE_RESET: |
manuelfederanko | 17:ce5a80e8fc8e | 155 | reinit_list(); |
manuelfederanko | 13:a45461fbb77f | 156 | reset(); |
manuelfederanko | 13:a45461fbb77f | 157 | break; |
manuelfederanko | 13:a45461fbb77f | 158 | case MSG_CODE_START: |
manuelfederanko | 13:a45461fbb77f | 159 | // NOTHING |
manuelfederanko | 13:a45461fbb77f | 160 | break; |
manuelfederanko | 13:a45461fbb77f | 161 | case MSG_CODE_STOP: |
manuelfederanko | 13:a45461fbb77f | 162 | //pin is the time for a two way signal, if it just needs to travel from 1 device to the other, one must half it for the correct result |
manuelfederanko | 14:90b2af48767a | 163 | //end_tm = systime - pin; |
manuelfederanko | 17:ce5a80e8fc8e | 164 | if (comm_flags & FLAG_START) { //resetting and pressing stop right afterwards breaks the code, one would need to reset again to start the time. |
manuelfederanko | 17:ce5a80e8fc8e | 165 | end_tm = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 166 | comm_flags |= FLAG_STOP; |
manuelfederanko | 17:ce5a80e8fc8e | 167 | int_to_str(end_tm, rec_buff); |
manuelfederanko | 17:ce5a80e8fc8e | 168 | ser.sendCode(MSG_CODE_TMP, rec_buff); |
manuelfederanko | 17:ce5a80e8fc8e | 169 | ser.flush(); |
manuelfederanko | 17:ce5a80e8fc8e | 170 | btn_cnt = 5; //otherwise we could press stop again and the end_tm value would be replaced by systime once again |
manuelfederanko | 17:ce5a80e8fc8e | 171 | } |
manuelfederanko | 13:a45461fbb77f | 172 | break; |
manuelfederanko | 13:a45461fbb77f | 173 | case MSG_CODE_TOTAL_RESET: |
manuelfederanko | 13:a45461fbb77f | 174 | // NOTHING |
manuelfederanko | 13:a45461fbb77f | 175 | break; |
manuelfederanko | 15:16d4e268cb84 | 176 | case MSG_CODE_REQ_RES: |
manuelfederanko | 15:16d4e268cb84 | 177 | resync(); |
manuelfederanko | 15:16d4e268cb84 | 178 | break; |
manuelfederanko | 13:a45461fbb77f | 179 | default: |
manuelfederanko | 13:a45461fbb77f | 180 | rec_code = 0; |
manuelfederanko | 13:a45461fbb77f | 181 | rec_buff[0] = 0; |
manuelfederanko | 13:a45461fbb77f | 182 | break; |
fox46 | 11:3d21939eb9bd | 183 | } |
fox46 | 11:3d21939eb9bd | 184 | } |
fox46 | 12:3f53322a5270 | 185 | } |
joca89 | 0:097b334e1077 | 186 | |
manuelfederanko | 13:a45461fbb77f | 187 | void bzr_pressed( void ) { |
manuelfederanko | 13:a45461fbb77f | 188 | btn_control(); |
manuelfederanko | 13:a45461fbb77f | 189 | } |
fox46 | 6:79bc3888c88c | 190 | |
manuelfederanko | 13:a45461fbb77f | 191 | void bzr_held_pressed( void ) { |
manuelfederanko | 17:ce5a80e8fc8e | 192 | reinit_list(); |
manuelfederanko | 13:a45461fbb77f | 193 | reset(); |
manuelfederanko | 13:a45461fbb77f | 194 | ser.sendCode(MSG_CODE_RESET, NULL); |
manuelfederanko | 13:a45461fbb77f | 195 | ser.flush(); |
manuelfederanko | 13:a45461fbb77f | 196 | } |
manuelfederanko | 13:a45461fbb77f | 197 | |
manuelfederanko | 13:a45461fbb77f | 198 | void btn_pressed( void ) { |
manuelfederanko | 13:a45461fbb77f | 199 | resync(); |
manuelfederanko | 13:a45461fbb77f | 200 | } |
manuelfederanko | 13:a45461fbb77f | 201 | |
manuelfederanko | 13:a45461fbb77f | 202 | void btn_held_released( void ) { |
manuelfederanko | 17:ce5a80e8fc8e | 203 | deleteList(times); |
manuelfederanko | 13:a45461fbb77f | 204 | shutdown_seq(); |
manuelfederanko | 13:a45461fbb77f | 205 | } |
manuelfederanko | 13:a45461fbb77f | 206 | |
manuelfederanko | 13:a45461fbb77f | 207 | int main() { |
manuelfederanko | 13:a45461fbb77f | 208 | //| Element 0 | Element 1 | Element 2 | Element 3 | |
manuelfederanko | 13:a45461fbb77f | 209 | //|-----------|-----------|-----------|-----------| |
manuelfederanko | 13:a45461fbb77f | 210 | //| Akkucheck | LED blink | Disp-Rate | Btn. Rate | |
manuelfederanko | 13:a45461fbb77f | 211 | time_100us prev[5]; |
fox46 | 12:3f53322a5270 | 212 | |
manuelfederanko | 13:a45461fbb77f | 213 | //init |
manuelfederanko | 13:a45461fbb77f | 214 | init_io(); |
manuelfederanko | 13:a45461fbb77f | 215 | init_values(); |
manuelfederanko | 17:ce5a80e8fc8e | 216 | times = NULL; |
manuelfederanko | 17:ce5a80e8fc8e | 217 | tick.attach_us(&handle_systime, 100); //every 100 us |
manuelfederanko | 17:ce5a80e8fc8e | 218 | pb1.attach_asserted(&bzr_pressed); |
manuelfederanko | 17:ce5a80e8fc8e | 219 | pb1.attach_asserted_held(&bzr_held_pressed); |
manuelfederanko | 17:ce5a80e8fc8e | 220 | pb1.setSamplesTillHeld(2000); //2000 samples ---> 1ms ---> 2 seconds |
manuelfederanko | 17:ce5a80e8fc8e | 221 | pb1.setSampleFrequency(1000); //1ms |
manuelfederanko | 17:ce5a80e8fc8e | 222 | |
manuelfederanko | 17:ce5a80e8fc8e | 223 | pb2.attach_asserted(&btn_pressed); |
manuelfederanko | 17:ce5a80e8fc8e | 224 | pb2.attach_deasserted_held(&btn_held_released); |
manuelfederanko | 17:ce5a80e8fc8e | 225 | pb2.setSamplesTillHeld(200); |
manuelfederanko | 17:ce5a80e8fc8e | 226 | pb2.setSampleFrequency(); |
manuelfederanko | 17:ce5a80e8fc8e | 227 | |
manuelfederanko | 17:ce5a80e8fc8e | 228 | //info |
manuelfederanko | 17:ce5a80e8fc8e | 229 | cprintf(RUNMODE_SERVER); |
manuelfederanko | 17:ce5a80e8fc8e | 230 | display(); |
manuelfederanko | 17:ce5a80e8fc8e | 231 | wait(WAIT_INFO_TM); |
manuelfederanko | 17:ce5a80e8fc8e | 232 | |
manuelfederanko | 17:ce5a80e8fc8e | 233 | //config |
manuelfederanko | 17:ce5a80e8fc8e | 234 | config_buttons(); |
manuelfederanko | 17:ce5a80e8fc8e | 235 | config_rf_mod(); |
manuelfederanko | 17:ce5a80e8fc8e | 236 | |
manuelfederanko | 17:ce5a80e8fc8e | 237 | //start |
manuelfederanko | 17:ce5a80e8fc8e | 238 | lowbatt(); |
manuelfederanko | 17:ce5a80e8fc8e | 239 | ser.registerRecFc(&hdl_rec); |
manuelfederanko | 17:ce5a80e8fc8e | 240 | resync(); |
manuelfederanko | 17:ce5a80e8fc8e | 241 | |
manuelfederanko | 17:ce5a80e8fc8e | 242 | prev[0] = prev[1] = prev[2] = prev[3] = prev[4] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 243 | |
manuelfederanko | 17:ce5a80e8fc8e | 244 | times = initNode(); |
manuelfederanko | 17:ce5a80e8fc8e | 245 | |
manuelfederanko | 17:ce5a80e8fc8e | 246 | while(1) { |
manuelfederanko | 17:ce5a80e8fc8e | 247 | if (systime - prev[2] >= RATE_DISPLAY) { |
manuelfederanko | 17:ce5a80e8fc8e | 248 | prev[2] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 249 | render_time(); |
manuelfederanko | 17:ce5a80e8fc8e | 250 | display(); |
manuelfederanko | 17:ce5a80e8fc8e | 251 | } |
manuelfederanko | 17:ce5a80e8fc8e | 252 | if (systime - prev[1] >= ((akku_state >= AKKU_1)? RATE_LED_NOK : RATE_LED_OK)) { |
manuelfederanko | 17:ce5a80e8fc8e | 253 | prev[1] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 254 | stoppled.write(!stoppled.read()); |
manuelfederanko | 17:ce5a80e8fc8e | 255 | } |
manuelfederanko | 17:ce5a80e8fc8e | 256 | if (comm_flags & FLAG_INFO_LOCK && systime - info_tm >= RATE_SHOW_INFO) { |
manuelfederanko | 17:ce5a80e8fc8e | 257 | //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 | 258 | //the flag gets checked in the render_time function, to prevent that from overwriting the info text |
manuelfederanko | 17:ce5a80e8fc8e | 259 | comm_flags &= ~FLAG_INFO_LOCK; |
manuelfederanko | 17:ce5a80e8fc8e | 260 | } |
manuelfederanko | 17:ce5a80e8fc8e | 261 | if (systime - prev[0] >= RATE_CHECK_AKKU) { |
manuelfederanko | 17:ce5a80e8fc8e | 262 | prev[0] = systime; |
manuelfederanko | 17:ce5a80e8fc8e | 263 | akkucheck(); |
manuelfederanko | 17:ce5a80e8fc8e | 264 | |
manuelfederanko | 17:ce5a80e8fc8e | 265 | if (akku_state == AKKU_CRITICAL) { |
manuelfederanko | 17:ce5a80e8fc8e | 266 | shutdown_seq(); |
manuelfederanko | 17:ce5a80e8fc8e | 267 | } |
manuelfederanko | 17:ce5a80e8fc8e | 268 | } |
manuelfederanko | 17:ce5a80e8fc8e | 269 | } |
manuelfederanko | 17:ce5a80e8fc8e | 270 | } |
manuelfederanko | 17:ce5a80e8fc8e | 271 | |
manuelfederanko | 17:ce5a80e8fc8e | 272 | /* |
manuelfederanko | 17:ce5a80e8fc8e | 273 | int main() { |
manuelfederanko | 17:ce5a80e8fc8e | 274 | //init |
manuelfederanko | 17:ce5a80e8fc8e | 275 | init_io(); |
manuelfederanko | 17:ce5a80e8fc8e | 276 | init_values(); |
manuelfederanko | 13:a45461fbb77f | 277 | tick.attach_us(&handle_systime, 100); //every 100 us |
manuelfederanko | 13:a45461fbb77f | 278 | pb1.attach_asserted(&bzr_pressed); |
manuelfederanko | 13:a45461fbb77f | 279 | pb1.attach_asserted_held(&bzr_held_pressed); |
manuelfederanko | 14:90b2af48767a | 280 | pb1.setSamplesTillHeld(2000); //2000 samples ---> 1ms ---> 2 seconds |
manuelfederanko | 14:90b2af48767a | 281 | pb1.setSampleFrequency(1000); //1ms |
manuelfederanko | 13:a45461fbb77f | 282 | |
manuelfederanko | 13:a45461fbb77f | 283 | pb2.attach_asserted(&btn_pressed); |
manuelfederanko | 13:a45461fbb77f | 284 | pb2.attach_deasserted_held(&btn_held_released); |
manuelfederanko | 13:a45461fbb77f | 285 | pb2.setSamplesTillHeld(200); |
manuelfederanko | 13:a45461fbb77f | 286 | pb2.setSampleFrequency(); |
manuelfederanko | 13:a45461fbb77f | 287 | |
manuelfederanko | 13:a45461fbb77f | 288 | //info |
manuelfederanko | 13:a45461fbb77f | 289 | cprintf(RUNMODE_SERVER); |
manuelfederanko | 13:a45461fbb77f | 290 | display(); |
manuelfederanko | 13:a45461fbb77f | 291 | wait(WAIT_INFO_TM); |
manuelfederanko | 13:a45461fbb77f | 292 | |
manuelfederanko | 13:a45461fbb77f | 293 | //config |
manuelfederanko | 13:a45461fbb77f | 294 | config_buttons(); |
manuelfederanko | 13:a45461fbb77f | 295 | config_rf_mod(); |
manuelfederanko | 13:a45461fbb77f | 296 | |
manuelfederanko | 13:a45461fbb77f | 297 | //start |
manuelfederanko | 13:a45461fbb77f | 298 | lowbatt(); |
manuelfederanko | 15:16d4e268cb84 | 299 | //ping(); |
manuelfederanko | 13:a45461fbb77f | 300 | ser.registerRecFc(&hdl_rec); |
manuelfederanko | 17:ce5a80e8fc8e | 301 | |
manuelfederanko | 17:ce5a80e8fc8e | 302 | struct linked_list *base = initNode(); |
manuelfederanko | 17:ce5a80e8fc8e | 303 | appendNode(base, initNode()); |
manuelfederanko | 17:ce5a80e8fc8e | 304 | appendNode(base, initNode()); |
manuelfederanko | 13:a45461fbb77f | 305 | |
manuelfederanko | 17:ce5a80e8fc8e | 306 | base->data = (void *) "abc"; |
manuelfederanko | 17:ce5a80e8fc8e | 307 | base->next->data = (void *) "def"; |
manuelfederanko | 17:ce5a80e8fc8e | 308 | base->next->next->data = (void *) "ghi"; |
manuelfederanko | 17:ce5a80e8fc8e | 309 | |
manuelfederanko | 17:ce5a80e8fc8e | 310 | struct linked_list *nd = initNode(); |
manuelfederanko | 17:ce5a80e8fc8e | 311 | |
manuelfederanko | 17:ce5a80e8fc8e | 312 | nd->data = (void *)"123"; |
manuelfederanko | 17:ce5a80e8fc8e | 313 | insertNode(base->next, nd); |
manuelfederanko | 13:a45461fbb77f | 314 | |
manuelfederanko | 17:ce5a80e8fc8e | 315 | nd = base->next; |
manuelfederanko | 17:ce5a80e8fc8e | 316 | removeNode(nd); |
manuelfederanko | 17:ce5a80e8fc8e | 317 | nd = base; |
manuelfederanko | 17:ce5a80e8fc8e | 318 | while (1) { |
manuelfederanko | 17:ce5a80e8fc8e | 319 | if (nd->data != NULL) |
manuelfederanko | 17:ce5a80e8fc8e | 320 | cprintf("%s", (char *) nd->data); |
manuelfederanko | 17:ce5a80e8fc8e | 321 | else |
manuelfederanko | 17:ce5a80e8fc8e | 322 | cprintf(""); |
fox46 | 10:27b3acc95b8f | 323 | |
manuelfederanko | 17:ce5a80e8fc8e | 324 | display(); |
manuelfederanko | 17:ce5a80e8fc8e | 325 | wait(2); |
manuelfederanko | 17:ce5a80e8fc8e | 326 | |
manuelfederanko | 17:ce5a80e8fc8e | 327 | nd = nd->next; |
manuelfederanko | 17:ce5a80e8fc8e | 328 | if (nd == NULL) |
manuelfederanko | 17:ce5a80e8fc8e | 329 | nd = base; |
fox46 | 8:9eccc5d25e8f | 330 | } |
manuelfederanko | 17:ce5a80e8fc8e | 331 | } |
manuelfederanko | 17:ce5a80e8fc8e | 332 | */ |