APP4 S5

Dependencies:   mbed-rtos mbed

Committer:
Cheroukee
Date:
Wed Oct 11 20:36:04 2017 +0000
Revision:
4:728322e9e3eb
Parent:
3:6ea97936f6fa
Child:
5:70d338ee3f77
Added enum and switch for message sending

Who changed what in which revision?

UserRevisionLine numberNew 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 3:6ea97936f6fa 11 #define MANCHESTER_SPEED_OUT 250
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 3:6ea97936f6fa 30 DigitalOut in_debug_led(LED4);
Cheroukee 3:6ea97936f6fa 31 DigitalOut out_debug_led(LED3);
Cheroukee 3:6ea97936f6fa 32
Cheroukee 2:fdb34827d964 33 // API functions
Cheroukee 2:fdb34827d964 34 void init_radio_system()
Cheroukee 2:fdb34827d964 35 {
Cheroukee 3:6ea97936f6fa 36 setup_radio_in();
Cheroukee 3:6ea97936f6fa 37 setup_radio_out();
Cheroukee 3:6ea97936f6fa 38 output = 0;
Cheroukee 2:fdb34827d964 39 }
Cheroukee 2:fdb34827d964 40
Cheroukee 2:fdb34827d964 41 // Private functions
Cheroukee 3:6ea97936f6fa 42
Cheroukee 3:6ea97936f6fa 43 void in_rise()
Cheroukee 3:6ea97936f6fa 44 {
Cheroukee 3:6ea97936f6fa 45 in_debug_led = 1;
Cheroukee 3:6ea97936f6fa 46 }
Cheroukee 3:6ea97936f6fa 47
Cheroukee 3:6ea97936f6fa 48 void in_fall()
Cheroukee 3:6ea97936f6fa 49 {
Cheroukee 3:6ea97936f6fa 50 in_debug_led = 0;
Cheroukee 3:6ea97936f6fa 51 }
Cheroukee 3:6ea97936f6fa 52
Cheroukee 3:6ea97936f6fa 53 void setup_radio_in()
Cheroukee 3:6ea97936f6fa 54 {
Cheroukee 4:728322e9e3eb 55 in_message_in = 0;
Cheroukee 4:728322e9e3eb 56 in_message_out = 0;
Cheroukee 4:728322e9e3eb 57
Cheroukee 3:6ea97936f6fa 58 in_debug_led = 0;
Cheroukee 3:6ea97936f6fa 59
Cheroukee 3:6ea97936f6fa 60 input.rise(&in_rise);
Cheroukee 3:6ea97936f6fa 61 input.fall(&in_fall);
Cheroukee 3:6ea97936f6fa 62 }
Cheroukee 3:6ea97936f6fa 63
Cheroukee 3:6ea97936f6fa 64
Cheroukee 3:6ea97936f6fa 65 void setup_radio_out()
Cheroukee 2:fdb34827d964 66 {
Cheroukee 3:6ea97936f6fa 67 out_message_in = 0;
Cheroukee 3:6ea97936f6fa 68 out_message_out = 0;
Cheroukee 3:6ea97936f6fa 69
Cheroukee 3:6ea97936f6fa 70 out_debug_led = 0;
Cheroukee 2:fdb34827d964 71
Cheroukee 3:6ea97936f6fa 72 //////////////////////////////////////////////////////
Cheroukee 3:6ea97936f6fa 73 // Creation d'un message et insertion dans le buffer
Cheroukee 3:6ea97936f6fa 74 radio_message_t* message = (out_messages + out_message_in);
Cheroukee 3:6ea97936f6fa 75
Cheroukee 3:6ea97936f6fa 76 message->preambule = HEADER_DELIMITER;
Cheroukee 3:6ea97936f6fa 77 message->start = HEADER_START;
Cheroukee 3:6ea97936f6fa 78 message->options = HEADER_DELIMITER;
Cheroukee 3:6ea97936f6fa 79 message->length = 0x2;
Cheroukee 3:6ea97936f6fa 80
Cheroukee 3:6ea97936f6fa 81 message->data[0] = 0xF0;
Cheroukee 3:6ea97936f6fa 82 message->data[1] = 0x0F;
Cheroukee 3:6ea97936f6fa 83
Cheroukee 3:6ea97936f6fa 84 // Ajouter calcul
Cheroukee 3:6ea97936f6fa 85 message->control = 0xFF;
Cheroukee 3:6ea97936f6fa 86
Cheroukee 3:6ea97936f6fa 87 message->end = FOOTER_END;
Cheroukee 3:6ea97936f6fa 88 // On avance dans le buffer;
Cheroukee 3:6ea97936f6fa 89 out_message_in++;
Cheroukee 3:6ea97936f6fa 90 //////////////////////////////////////////////////////
Cheroukee 3:6ea97936f6fa 91
Cheroukee 3:6ea97936f6fa 92 out_timer.start(MANCHESTER_SPEED_OUT);
Cheroukee 2:fdb34827d964 93 }
Cheroukee 3:6ea97936f6fa 94
Cheroukee 3:6ea97936f6fa 95
Cheroukee 4:728322e9e3eb 96 typedef enum {
Cheroukee 4:728322e9e3eb 97 preambule = 0,
Cheroukee 4:728322e9e3eb 98 start,
Cheroukee 4:728322e9e3eb 99 options,
Cheroukee 4:728322e9e3eb 100 length,
Cheroukee 4:728322e9e3eb 101 data,
Cheroukee 4:728322e9e3eb 102 crc,
Cheroukee 4:728322e9e3eb 103 end
Cheroukee 4:728322e9e3eb 104 } out_state_t;
Cheroukee 4:728322e9e3eb 105
Cheroukee 3:6ea97936f6fa 106 void radio_out(void const *args)
Cheroukee 3:6ea97936f6fa 107 {
Cheroukee 4:728322e9e3eb 108 static byte current_byte_progress = 0;
Cheroukee 4:728322e9e3eb 109 static byte current_byte = 0;
Cheroukee 4:728322e9e3eb 110 static byte current_state = 0;
Cheroukee 4:728322e9e3eb 111
Cheroukee 3:6ea97936f6fa 112 radio_message_t* message = (radio_message_t*)(out_messages + out_message_out);
Cheroukee 3:6ea97936f6fa 113
Cheroukee 3:6ea97936f6fa 114 #define OUTPUT_HIGH output = 1;
Cheroukee 3:6ea97936f6fa 115 #define OUTPUT_LOW output = 0;
Cheroukee 3:6ea97936f6fa 116
Cheroukee 4:728322e9e3eb 117 #define SET_VAL_BIT_MASK(val) output = 0x1 & val;
Cheroukee 4:728322e9e3eb 118 #define SET_VAL_SHIFT(val, shift) SET_VAL_BIT_MASK(val >> (7 - shift))
Cheroukee 4:728322e9e3eb 119
Cheroukee 4:728322e9e3eb 120
Cheroukee 4:728322e9e3eb 121 #define CHECK_NEXT_STATE if (current_byte_progress > 7) \
Cheroukee 4:728322e9e3eb 122 { \
Cheroukee 4:728322e9e3eb 123 current_state++; \
Cheroukee 4:728322e9e3eb 124 current_byte_progress = 0; \
Cheroukee 4:728322e9e3eb 125 }
Cheroukee 4:728322e9e3eb 126
Cheroukee 3:6ea97936f6fa 127 out_debug_led = !out_debug_led;
Cheroukee 4:728322e9e3eb 128
Cheroukee 4:728322e9e3eb 129 switch (current_state)
Cheroukee 4:728322e9e3eb 130 {
Cheroukee 4:728322e9e3eb 131 case preambule: // preambule
Cheroukee 4:728322e9e3eb 132 {
Cheroukee 4:728322e9e3eb 133 SET_VAL_SHIFT(message->preambule, current_byte_progress++);
Cheroukee 4:728322e9e3eb 134 CHECK_NEXT_STATE
Cheroukee 4:728322e9e3eb 135 break;
Cheroukee 4:728322e9e3eb 136 }
Cheroukee 4:728322e9e3eb 137 case start: // start
Cheroukee 4:728322e9e3eb 138 {
Cheroukee 4:728322e9e3eb 139 SET_VAL_SHIFT(message->start, current_byte_progress++);
Cheroukee 4:728322e9e3eb 140 CHECK_NEXT_STATE
Cheroukee 4:728322e9e3eb 141 break;
Cheroukee 4:728322e9e3eb 142 }
Cheroukee 4:728322e9e3eb 143 case options: // entete options
Cheroukee 4:728322e9e3eb 144 {
Cheroukee 4:728322e9e3eb 145 SET_VAL_SHIFT(message->options, current_byte_progress++);
Cheroukee 4:728322e9e3eb 146 CHECK_NEXT_STATE
Cheroukee 4:728322e9e3eb 147 break;
Cheroukee 4:728322e9e3eb 148 }
Cheroukee 4:728322e9e3eb 149 case length: // entete lenght
Cheroukee 4:728322e9e3eb 150 {
Cheroukee 4:728322e9e3eb 151 SET_VAL_SHIFT(message->length, current_byte_progress++);
Cheroukee 4:728322e9e3eb 152 CHECK_NEXT_STATE
Cheroukee 4:728322e9e3eb 153 break;
Cheroukee 4:728322e9e3eb 154 }
Cheroukee 4:728322e9e3eb 155 case data: // charge utile
Cheroukee 4:728322e9e3eb 156 {
Cheroukee 4:728322e9e3eb 157 //CHECK_NEXT_STATE
Cheroukee 4:728322e9e3eb 158 break;
Cheroukee 4:728322e9e3eb 159 }
Cheroukee 4:728322e9e3eb 160 case crc: // controle
Cheroukee 4:728322e9e3eb 161 {
Cheroukee 4:728322e9e3eb 162 CHECK_NEXT_STATE
Cheroukee 4:728322e9e3eb 163 break;
Cheroukee 4:728322e9e3eb 164 }
Cheroukee 4:728322e9e3eb 165 case end: // end
Cheroukee 4:728322e9e3eb 166 {
Cheroukee 4:728322e9e3eb 167 CHECK_NEXT_STATE
Cheroukee 4:728322e9e3eb 168 break;
Cheroukee 4:728322e9e3eb 169 }
Cheroukee 4:728322e9e3eb 170 default:
Cheroukee 4:728322e9e3eb 171 {
Cheroukee 4:728322e9e3eb 172 current_state = 0;
Cheroukee 4:728322e9e3eb 173 current_byte = 0;
Cheroukee 4:728322e9e3eb 174 current_byte_progress = 0;
Cheroukee 4:728322e9e3eb 175 break;
Cheroukee 4:728322e9e3eb 176 }
Cheroukee 4:728322e9e3eb 177
Cheroukee 4:728322e9e3eb 178 }
Cheroukee 4:728322e9e3eb 179
Cheroukee 4:728322e9e3eb 180
Cheroukee 4:728322e9e3eb 181 //output = !output;
Cheroukee 3:6ea97936f6fa 182 }