App1_S5
/
APP4_IRQ
APP4 S5
radio.cpp@9:081324663b8c, 2017-10-12 (annotated)
- Committer:
- Cheroukee
- Date:
- Thu Oct 12 20:48:02 2017 +0000
- Revision:
- 9:081324663b8c
- Parent:
- 8:a878763b0ae3
- Child:
- 10:c4629b6c42f8
Hello
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Cheroukee | 1:5fc0c0996264 | 1 | |
Cheroukee | 1:5fc0c0996264 | 2 | #include "radio.h" |
Cheroukee | 1:5fc0c0996264 | 3 | |
Cheroukee | 2:fdb34827d964 | 4 | #include "mbed.h" |
Cheroukee | 3:6ea97936f6fa | 5 | #include "rtos.h" |
Cheroukee | 2:fdb34827d964 | 6 | |
Cheroukee | 2:fdb34827d964 | 7 | #include <LPC17xx.h> |
Cheroukee | 2:fdb34827d964 | 8 | |
Cheroukee | 1:5fc0c0996264 | 9 | #define MESSAGE_BUFFER_SIZE 16 |
Cheroukee | 1:5fc0c0996264 | 10 | |
Cheroukee | 8:a878763b0ae3 | 11 | #define MANCHESTER_SPEED_OUT 10 |
Cheroukee | 3:6ea97936f6fa | 12 | |
Cheroukee | 3:6ea97936f6fa | 13 | #define INPUT_RADIO p18 |
Cheroukee | 2:fdb34827d964 | 14 | #define OUTPUT_RADIO p6 |
Cheroukee | 2:fdb34827d964 | 15 | |
Cheroukee | 2:fdb34827d964 | 16 | radio_message_t out_messages[MESSAGE_BUFFER_SIZE]; |
Cheroukee | 1:5fc0c0996264 | 17 | byte out_message_in; |
Cheroukee | 1:5fc0c0996264 | 18 | byte out_message_out; |
Cheroukee | 1:5fc0c0996264 | 19 | |
Cheroukee | 2:fdb34827d964 | 20 | radio_message_t in_messages[MESSAGE_BUFFER_SIZE]; |
Cheroukee | 1:5fc0c0996264 | 21 | byte in_message_in; |
Cheroukee | 2:fdb34827d964 | 22 | byte in_message_out; |
Cheroukee | 2:fdb34827d964 | 23 | |
Cheroukee | 3:6ea97936f6fa | 24 | InterruptIn input(INPUT_RADIO); |
Cheroukee | 3:6ea97936f6fa | 25 | |
Cheroukee | 3:6ea97936f6fa | 26 | RtosTimer out_timer(radio_out, osTimerPeriodic, (void *)out_messages); |
Cheroukee | 3:6ea97936f6fa | 27 | |
Cheroukee | 2:fdb34827d964 | 28 | DigitalOut output(OUTPUT_RADIO); |
Cheroukee | 2:fdb34827d964 | 29 | |
Cheroukee | 9:081324663b8c | 30 | #ifndef LED |
Cheroukee | 9:081324663b8c | 31 | DigitalOut in_debug_led4(LED4); |
Cheroukee | 9:081324663b8c | 32 | DigitalOut out_debug_led3(LED3); |
Cheroukee | 3:6ea97936f6fa | 33 | |
Cheroukee | 9:081324663b8c | 34 | DigitalOut frame_out_end_led2(LED2); |
Cheroukee | 9:081324663b8c | 35 | DigitalOut frame_in_end_led1(LED1); |
Cheroukee | 8:a878763b0ae3 | 36 | #endif |
Cheroukee | 8:a878763b0ae3 | 37 | |
Cheroukee | 8:a878763b0ae3 | 38 | Serial PC(USBTX, USBRX); |
Cheroukee | 5:70d338ee3f77 | 39 | |
Cheroukee | 2:fdb34827d964 | 40 | // API functions |
Cheroukee | 2:fdb34827d964 | 41 | void init_radio_system() |
Cheroukee | 2:fdb34827d964 | 42 | { |
Cheroukee | 3:6ea97936f6fa | 43 | setup_radio_in(); |
Cheroukee | 3:6ea97936f6fa | 44 | setup_radio_out(); |
Cheroukee | 3:6ea97936f6fa | 45 | output = 0; |
Cheroukee | 2:fdb34827d964 | 46 | } |
Cheroukee | 2:fdb34827d964 | 47 | |
Cheroukee | 2:fdb34827d964 | 48 | // Private functions |
Cheroukee | 3:6ea97936f6fa | 49 | |
Cheroukee | 8:a878763b0ae3 | 50 | typedef enum { |
Cheroukee | 8:a878763b0ae3 | 51 | in_attente = 0, |
Cheroukee | 8:a878763b0ae3 | 52 | in_preambule, |
Cheroukee | 8:a878763b0ae3 | 53 | in_data, |
Cheroukee | 8:a878763b0ae3 | 54 | in_idle |
Cheroukee | 8:a878763b0ae3 | 55 | } receive_state_t; |
Cheroukee | 8:a878763b0ae3 | 56 | |
Cheroukee | 9:081324663b8c | 57 | int start_speed = MANCHESTER_SPEED_OUT; |
Cheroukee | 8:a878763b0ae3 | 58 | |
Cheroukee | 8:a878763b0ae3 | 59 | byte current_state = in_attente; |
Cheroukee | 8:a878763b0ae3 | 60 | byte current_byte_progress = 0; |
Cheroukee | 8:a878763b0ae3 | 61 | |
Cheroukee | 8:a878763b0ae3 | 62 | void stop_frame(void const *n); |
Cheroukee | 8:a878763b0ae3 | 63 | |
Cheroukee | 8:a878763b0ae3 | 64 | RtosTimer ticker_watch(stop_frame, osTimerPeriodic, NULL); |
Cheroukee | 9:081324663b8c | 65 | |
Cheroukee | 8:a878763b0ae3 | 66 | Thread thread; |
Cheroukee | 8:a878763b0ae3 | 67 | |
Cheroukee | 8:a878763b0ae3 | 68 | void stop_frame(void const *n) |
Cheroukee | 3:6ea97936f6fa | 69 | { |
Cheroukee | 9:081324663b8c | 70 | frame_in_end_led1 = 0; |
Cheroukee | 8:a878763b0ae3 | 71 | current_state = in_attente; |
Cheroukee | 8:a878763b0ae3 | 72 | current_byte_progress = 0; |
Cheroukee | 8:a878763b0ae3 | 73 | ticker_watch.stop(); |
Cheroukee | 8:a878763b0ae3 | 74 | } |
Cheroukee | 8:a878763b0ae3 | 75 | |
Cheroukee | 8:a878763b0ae3 | 76 | volatile int t = 0; |
Cheroukee | 8:a878763b0ae3 | 77 | volatile int c = 0; |
Cheroukee | 8:a878763b0ae3 | 78 | |
Cheroukee | 8:a878763b0ae3 | 79 | void radio_in() |
Cheroukee | 8:a878763b0ae3 | 80 | { |
Cheroukee | 8:a878763b0ae3 | 81 | |
Cheroukee | 8:a878763b0ae3 | 82 | static Timer timer; |
Cheroukee | 8:a878763b0ae3 | 83 | static int t_half = 0; |
Cheroukee | 8:a878763b0ae3 | 84 | |
Cheroukee | 8:a878763b0ae3 | 85 | static byte current_byte = 0; |
Cheroukee | 8:a878763b0ae3 | 86 | |
Cheroukee | 9:081324663b8c | 87 | in_debug_led4 = !in_debug_led4; |
Cheroukee | 8:a878763b0ae3 | 88 | |
Cheroukee | 8:a878763b0ae3 | 89 | |
Cheroukee | 8:a878763b0ae3 | 90 | switch (current_state) |
Cheroukee | 8:a878763b0ae3 | 91 | { |
Cheroukee | 8:a878763b0ae3 | 92 | case in_attente: |
Cheroukee | 9:081324663b8c | 93 | { |
Cheroukee | 9:081324663b8c | 94 | frame_in_end_led1 = 0; |
Cheroukee | 8:a878763b0ae3 | 95 | if (input == 1) |
Cheroukee | 8:a878763b0ae3 | 96 | { |
Cheroukee | 8:a878763b0ae3 | 97 | timer.start(); |
Cheroukee | 8:a878763b0ae3 | 98 | current_state = in_preambule; |
Cheroukee | 8:a878763b0ae3 | 99 | current_byte_progress = 1; |
Cheroukee | 9:081324663b8c | 100 | frame_in_end_led1 = 1; |
Cheroukee | 8:a878763b0ae3 | 101 | } |
Cheroukee | 8:a878763b0ae3 | 102 | break; |
Cheroukee | 8:a878763b0ae3 | 103 | } |
Cheroukee | 8:a878763b0ae3 | 104 | case in_preambule: |
Cheroukee | 8:a878763b0ae3 | 105 | { |
Cheroukee | 8:a878763b0ae3 | 106 | current_byte_progress++; |
Cheroukee | 8:a878763b0ae3 | 107 | t = timer.read_ms(); |
Cheroukee | 8:a878763b0ae3 | 108 | timer.reset(); |
Cheroukee | 8:a878763b0ae3 | 109 | if (current_byte_progress > 7) |
Cheroukee | 8:a878763b0ae3 | 110 | { |
Cheroukee | 8:a878763b0ae3 | 111 | t_half = t / 2; |
Cheroukee | 8:a878763b0ae3 | 112 | ticker_watch.start(t + t_half); |
Cheroukee | 8:a878763b0ae3 | 113 | current_byte_progress = 0; |
Cheroukee | 8:a878763b0ae3 | 114 | current_state = in_data; |
Cheroukee | 8:a878763b0ae3 | 115 | c = t; |
Cheroukee | 8:a878763b0ae3 | 116 | thread.signal_set(0x1); |
Cheroukee | 8:a878763b0ae3 | 117 | } |
Cheroukee | 8:a878763b0ae3 | 118 | break; |
Cheroukee | 8:a878763b0ae3 | 119 | } |
Cheroukee | 8:a878763b0ae3 | 120 | case in_data: |
Cheroukee | 8:a878763b0ae3 | 121 | { |
Cheroukee | 8:a878763b0ae3 | 122 | if(timer.read_ms() > t + t_half) |
Cheroukee | 8:a878763b0ae3 | 123 | { |
Cheroukee | 9:081324663b8c | 124 | frame_in_end_led1 = 0; |
Cheroukee | 8:a878763b0ae3 | 125 | current_state = in_attente; |
Cheroukee | 8:a878763b0ae3 | 126 | current_byte_progress = 0; |
Cheroukee | 8:a878763b0ae3 | 127 | |
Cheroukee | 8:a878763b0ae3 | 128 | timer.stop(); |
Cheroukee | 8:a878763b0ae3 | 129 | timer.reset(); |
Cheroukee | 8:a878763b0ae3 | 130 | } |
Cheroukee | 8:a878763b0ae3 | 131 | else if (timer.read_ms() > t_half) |
Cheroukee | 8:a878763b0ae3 | 132 | { |
Cheroukee | 8:a878763b0ae3 | 133 | current_byte = (!input << (7 - current_byte_progress)) | current_byte; |
Cheroukee | 8:a878763b0ae3 | 134 | current_byte_progress++ ; |
Cheroukee | 8:a878763b0ae3 | 135 | //PC.putc(input); |
Cheroukee | 8:a878763b0ae3 | 136 | // Display data |
Cheroukee | 8:a878763b0ae3 | 137 | ticker_watch.start(t + t_half); |
Cheroukee | 8:a878763b0ae3 | 138 | timer.reset(); |
Cheroukee | 8:a878763b0ae3 | 139 | |
Cheroukee | 8:a878763b0ae3 | 140 | if (current_byte_progress > 7) |
Cheroukee | 8:a878763b0ae3 | 141 | { |
Cheroukee | 8:a878763b0ae3 | 142 | c = current_byte; |
Cheroukee | 8:a878763b0ae3 | 143 | thread.signal_set(0x1); |
Cheroukee | 8:a878763b0ae3 | 144 | current_byte = 0; |
Cheroukee | 8:a878763b0ae3 | 145 | current_byte_progress = 0; |
Cheroukee | 8:a878763b0ae3 | 146 | } |
Cheroukee | 8:a878763b0ae3 | 147 | } |
Cheroukee | 8:a878763b0ae3 | 148 | else |
Cheroukee | 8:a878763b0ae3 | 149 | { |
Cheroukee | 8:a878763b0ae3 | 150 | //ticker_watch.start(t + t_half); |
Cheroukee | 8:a878763b0ae3 | 151 | } |
Cheroukee | 8:a878763b0ae3 | 152 | break; |
Cheroukee | 8:a878763b0ae3 | 153 | } |
Cheroukee | 8:a878763b0ae3 | 154 | case in_idle: |
Cheroukee | 8:a878763b0ae3 | 155 | { |
Cheroukee | 9:081324663b8c | 156 | frame_in_end_led1 = 0; |
Cheroukee | 8:a878763b0ae3 | 157 | current_state = in_attente; |
Cheroukee | 8:a878763b0ae3 | 158 | current_byte_progress = 0; |
Cheroukee | 8:a878763b0ae3 | 159 | break; |
Cheroukee | 8:a878763b0ae3 | 160 | } |
Cheroukee | 8:a878763b0ae3 | 161 | } |
Cheroukee | 3:6ea97936f6fa | 162 | } |
Cheroukee | 3:6ea97936f6fa | 163 | |
Cheroukee | 8:a878763b0ae3 | 164 | void thread_putc() |
Cheroukee | 3:6ea97936f6fa | 165 | { |
Cheroukee | 8:a878763b0ae3 | 166 | while(1) |
Cheroukee | 8:a878763b0ae3 | 167 | { |
Cheroukee | 8:a878763b0ae3 | 168 | Thread::signal_wait(0x1); |
Cheroukee | 8:a878763b0ae3 | 169 | PC.printf("0x%x\n\r", c); |
Cheroukee | 8:a878763b0ae3 | 170 | } |
Cheroukee | 3:6ea97936f6fa | 171 | } |
Cheroukee | 3:6ea97936f6fa | 172 | |
Cheroukee | 8:a878763b0ae3 | 173 | |
Cheroukee | 3:6ea97936f6fa | 174 | void setup_radio_in() |
Cheroukee | 3:6ea97936f6fa | 175 | { |
Cheroukee | 4:728322e9e3eb | 176 | in_message_in = 0; |
Cheroukee | 4:728322e9e3eb | 177 | in_message_out = 0; |
Cheroukee | 4:728322e9e3eb | 178 | |
Cheroukee | 8:a878763b0ae3 | 179 | thread.start(callback(thread_putc)); |
Cheroukee | 3:6ea97936f6fa | 180 | |
Cheroukee | 8:a878763b0ae3 | 181 | input.rise(&radio_in); |
Cheroukee | 8:a878763b0ae3 | 182 | input.fall(&radio_in); |
Cheroukee | 3:6ea97936f6fa | 183 | } |
Cheroukee | 3:6ea97936f6fa | 184 | |
Cheroukee | 3:6ea97936f6fa | 185 | |
Cheroukee | 3:6ea97936f6fa | 186 | void setup_radio_out() |
Cheroukee | 2:fdb34827d964 | 187 | { |
Cheroukee | 3:6ea97936f6fa | 188 | out_message_in = 0; |
Cheroukee | 3:6ea97936f6fa | 189 | out_message_out = 0; |
Cheroukee | 3:6ea97936f6fa | 190 | |
Cheroukee | 9:081324663b8c | 191 | out_debug_led3 = 0; |
Cheroukee | 9:081324663b8c | 192 | frame_out_end_led2 = 0; |
Cheroukee | 2:fdb34827d964 | 193 | |
Cheroukee | 3:6ea97936f6fa | 194 | ////////////////////////////////////////////////////// |
Cheroukee | 3:6ea97936f6fa | 195 | // Creation d'un message et insertion dans le buffer |
Cheroukee | 3:6ea97936f6fa | 196 | radio_message_t* message = (out_messages + out_message_in); |
Cheroukee | 3:6ea97936f6fa | 197 | |
Cheroukee | 3:6ea97936f6fa | 198 | message->preambule = HEADER_DELIMITER; |
Cheroukee | 3:6ea97936f6fa | 199 | message->start = HEADER_START; |
Cheroukee | 3:6ea97936f6fa | 200 | message->options = HEADER_DELIMITER; |
Cheroukee | 5:70d338ee3f77 | 201 | message->length = 0x3; |
Cheroukee | 3:6ea97936f6fa | 202 | |
Cheroukee | 5:70d338ee3f77 | 203 | message->data[0] = 0xC0; |
Cheroukee | 5:70d338ee3f77 | 204 | message->data[1] = 0xFF; |
Cheroukee | 5:70d338ee3f77 | 205 | message->data[2] = 0xEE; |
Cheroukee | 3:6ea97936f6fa | 206 | |
Cheroukee | 3:6ea97936f6fa | 207 | // Ajouter calcul |
Cheroukee | 5:70d338ee3f77 | 208 | message->control = 0xCE; |
Cheroukee | 3:6ea97936f6fa | 209 | |
Cheroukee | 3:6ea97936f6fa | 210 | message->end = FOOTER_END; |
Cheroukee | 3:6ea97936f6fa | 211 | // On avance dans le buffer; |
Cheroukee | 3:6ea97936f6fa | 212 | out_message_in++; |
Cheroukee | 3:6ea97936f6fa | 213 | ////////////////////////////////////////////////////// |
JayMcGee | 7:d25bcde7dcf1 | 214 | output = 0; |
JayMcGee | 7:d25bcde7dcf1 | 215 | wait(1); |
Cheroukee | 9:081324663b8c | 216 | out_timer.start(start_speed); |
Cheroukee | 2:fdb34827d964 | 217 | } |
Cheroukee | 3:6ea97936f6fa | 218 | |
Cheroukee | 4:728322e9e3eb | 219 | typedef enum { |
Cheroukee | 9:081324663b8c | 220 | out_preambule = 0, |
Cheroukee | 9:081324663b8c | 221 | out_start, |
Cheroukee | 9:081324663b8c | 222 | out_options, |
Cheroukee | 9:081324663b8c | 223 | out_length, |
Cheroukee | 9:081324663b8c | 224 | out_data, |
Cheroukee | 9:081324663b8c | 225 | out_crc, |
Cheroukee | 9:081324663b8c | 226 | out_end, |
Cheroukee | 9:081324663b8c | 227 | out_idle |
Cheroukee | 4:728322e9e3eb | 228 | } out_state_t; |
Cheroukee | 4:728322e9e3eb | 229 | |
Cheroukee | 3:6ea97936f6fa | 230 | void radio_out(void const *args) |
Cheroukee | 3:6ea97936f6fa | 231 | { |
Cheroukee | 4:728322e9e3eb | 232 | static byte current_byte_progress = 0; |
Cheroukee | 4:728322e9e3eb | 233 | static byte current_byte = 0; |
Cheroukee | 8:a878763b0ae3 | 234 | static byte out_current_state = 0; |
Cheroukee | 6:f3f442d43c8f | 235 | static bool IsBitTransition = false; |
Cheroukee | 6:f3f442d43c8f | 236 | static byte next_value = 0; |
Cheroukee | 4:728322e9e3eb | 237 | |
Cheroukee | 3:6ea97936f6fa | 238 | radio_message_t* message = (radio_message_t*)(out_messages + out_message_out); |
Cheroukee | 3:6ea97936f6fa | 239 | |
Cheroukee | 3:6ea97936f6fa | 240 | #define OUTPUT_HIGH output = 1; |
Cheroukee | 3:6ea97936f6fa | 241 | #define OUTPUT_LOW output = 0; |
Cheroukee | 3:6ea97936f6fa | 242 | |
Cheroukee | 6:f3f442d43c8f | 243 | #define SET_VAL_BIT_MASK(val) next_value = 0x1 & val; |
Cheroukee | 4:728322e9e3eb | 244 | #define SET_VAL_SHIFT(val, shift) SET_VAL_BIT_MASK(val >> (7 - shift)) |
Cheroukee | 4:728322e9e3eb | 245 | |
Cheroukee | 4:728322e9e3eb | 246 | |
Cheroukee | 4:728322e9e3eb | 247 | #define CHECK_NEXT_STATE if (current_byte_progress > 7) \ |
Cheroukee | 4:728322e9e3eb | 248 | { \ |
Cheroukee | 8:a878763b0ae3 | 249 | out_current_state++; \ |
Cheroukee | 4:728322e9e3eb | 250 | current_byte_progress = 0; \ |
Cheroukee | 4:728322e9e3eb | 251 | } |
Cheroukee | 4:728322e9e3eb | 252 | |
Cheroukee | 9:081324663b8c | 253 | out_debug_led3 = !out_debug_led3; |
Cheroukee | 4:728322e9e3eb | 254 | |
Cheroukee | 6:f3f442d43c8f | 255 | if (!IsBitTransition) |
Cheroukee | 4:728322e9e3eb | 256 | { |
Cheroukee | 6:f3f442d43c8f | 257 | // Dependant du state, on progresse dans l'envoi du message |
Cheroukee | 8:a878763b0ae3 | 258 | switch (out_current_state) |
Cheroukee | 4:728322e9e3eb | 259 | { |
Cheroukee | 9:081324663b8c | 260 | case out_preambule: // preambule |
Cheroukee | 6:f3f442d43c8f | 261 | { |
Cheroukee | 9:081324663b8c | 262 | frame_out_end_led2 = 1; |
Cheroukee | 6:f3f442d43c8f | 263 | SET_VAL_SHIFT(message->preambule, current_byte_progress++); |
Cheroukee | 6:f3f442d43c8f | 264 | CHECK_NEXT_STATE |
Cheroukee | 6:f3f442d43c8f | 265 | break; |
Cheroukee | 6:f3f442d43c8f | 266 | } |
Cheroukee | 9:081324663b8c | 267 | case out_start: // start |
Cheroukee | 6:f3f442d43c8f | 268 | { |
Cheroukee | 6:f3f442d43c8f | 269 | SET_VAL_SHIFT(message->start, current_byte_progress++); |
Cheroukee | 6:f3f442d43c8f | 270 | CHECK_NEXT_STATE |
Cheroukee | 6:f3f442d43c8f | 271 | break; |
Cheroukee | 6:f3f442d43c8f | 272 | } |
Cheroukee | 9:081324663b8c | 273 | case out_options: // entete options |
Cheroukee | 6:f3f442d43c8f | 274 | { |
Cheroukee | 6:f3f442d43c8f | 275 | SET_VAL_SHIFT(message->options, current_byte_progress++); |
Cheroukee | 6:f3f442d43c8f | 276 | CHECK_NEXT_STATE |
Cheroukee | 6:f3f442d43c8f | 277 | break; |
Cheroukee | 6:f3f442d43c8f | 278 | } |
Cheroukee | 9:081324663b8c | 279 | case out_length: // entete lenght |
Cheroukee | 6:f3f442d43c8f | 280 | { |
Cheroukee | 6:f3f442d43c8f | 281 | SET_VAL_SHIFT(message->length, current_byte_progress++); |
Cheroukee | 6:f3f442d43c8f | 282 | CHECK_NEXT_STATE |
Cheroukee | 6:f3f442d43c8f | 283 | break; |
Cheroukee | 6:f3f442d43c8f | 284 | } |
Cheroukee | 9:081324663b8c | 285 | case out_data: // charge utile |
Cheroukee | 5:70d338ee3f77 | 286 | { |
Cheroukee | 6:f3f442d43c8f | 287 | SET_VAL_SHIFT(message->data[current_byte], current_byte_progress++) |
Cheroukee | 6:f3f442d43c8f | 288 | if (current_byte_progress > 7) |
Cheroukee | 5:70d338ee3f77 | 289 | { |
Cheroukee | 6:f3f442d43c8f | 290 | current_byte++; |
Cheroukee | 6:f3f442d43c8f | 291 | current_byte_progress = 0; |
JayMcGee | 7:d25bcde7dcf1 | 292 | if (current_byte >= message->length) |
Cheroukee | 6:f3f442d43c8f | 293 | { |
Cheroukee | 6:f3f442d43c8f | 294 | current_byte = 0; |
Cheroukee | 8:a878763b0ae3 | 295 | out_current_state++; |
Cheroukee | 6:f3f442d43c8f | 296 | } |
Cheroukee | 6:f3f442d43c8f | 297 | } |
Cheroukee | 6:f3f442d43c8f | 298 | //CHECK_NEXT_STATE |
Cheroukee | 6:f3f442d43c8f | 299 | break; |
Cheroukee | 6:f3f442d43c8f | 300 | } |
Cheroukee | 9:081324663b8c | 301 | case out_crc: // controle |
Cheroukee | 6:f3f442d43c8f | 302 | { |
Cheroukee | 6:f3f442d43c8f | 303 | SET_VAL_SHIFT(message->control, current_byte_progress++); |
Cheroukee | 6:f3f442d43c8f | 304 | CHECK_NEXT_STATE |
Cheroukee | 6:f3f442d43c8f | 305 | break; |
Cheroukee | 6:f3f442d43c8f | 306 | } |
Cheroukee | 9:081324663b8c | 307 | case out_end: // end |
Cheroukee | 6:f3f442d43c8f | 308 | { |
Cheroukee | 6:f3f442d43c8f | 309 | SET_VAL_SHIFT(message->end, current_byte_progress++); |
Cheroukee | 6:f3f442d43c8f | 310 | CHECK_NEXT_STATE |
Cheroukee | 6:f3f442d43c8f | 311 | break; |
Cheroukee | 5:70d338ee3f77 | 312 | } |
Cheroukee | 9:081324663b8c | 313 | case out_idle: |
Cheroukee | 6:f3f442d43c8f | 314 | { |
Cheroukee | 6:f3f442d43c8f | 315 | //current_state = 0; |
Cheroukee | 6:f3f442d43c8f | 316 | current_byte = 0; |
Cheroukee | 6:f3f442d43c8f | 317 | current_byte_progress = 0; |
Cheroukee | 6:f3f442d43c8f | 318 | break; |
JayMcGee | 7:d25bcde7dcf1 | 319 | } |
Cheroukee | 6:f3f442d43c8f | 320 | } |
Cheroukee | 6:f3f442d43c8f | 321 | |
Cheroukee | 9:081324663b8c | 322 | // Changement d'etat pour permettre de faire la bonne transition de valeur |
Cheroukee | 9:081324663b8c | 323 | if (next_value != output && out_current_state != out_idle) |
Cheroukee | 4:728322e9e3eb | 324 | { |
Cheroukee | 6:f3f442d43c8f | 325 | output = !output; |
Cheroukee | 6:f3f442d43c8f | 326 | } |
Cheroukee | 6:f3f442d43c8f | 327 | |
Cheroukee | 9:081324663b8c | 328 | // Si on est a la fin du packet, on retourne au debut et on reenvoye les donnees |
Cheroukee | 9:081324663b8c | 329 | if (out_current_state > out_end) |
Cheroukee | 4:728322e9e3eb | 330 | { |
Cheroukee | 9:081324663b8c | 331 | frame_out_end_led2 = 0; |
Cheroukee | 9:081324663b8c | 332 | out_current_state = out_preambule; |
Cheroukee | 9:081324663b8c | 333 | out_timer.stop(); |
Cheroukee | 9:081324663b8c | 334 | start_speed += 1; |
Cheroukee | 9:081324663b8c | 335 | out_timer.start(start_speed); |
Cheroukee | 4:728322e9e3eb | 336 | } |
Cheroukee | 6:f3f442d43c8f | 337 | } |
Cheroukee | 9:081324663b8c | 338 | // Si on est pas dans une transitipon |
Cheroukee | 9:081324663b8c | 339 | else if (out_current_state != out_idle) |
Cheroukee | 6:f3f442d43c8f | 340 | { |
Cheroukee | 6:f3f442d43c8f | 341 | output = !output; |
Cheroukee | 4:728322e9e3eb | 342 | } |
Cheroukee | 4:728322e9e3eb | 343 | |
JayMcGee | 7:d25bcde7dcf1 | 344 | IsBitTransition = !IsBitTransition; |
JayMcGee | 7:d25bcde7dcf1 | 345 | |
Cheroukee | 3:6ea97936f6fa | 346 | } |