S5info_H14
/
APP3
Problematique
main.cpp@4:2af360b178d2, 2014-02-12 (annotated)
- Committer:
- joGenie
- Date:
- Wed Feb 12 21:50:47 2014 +0000
- Revision:
- 4:2af360b178d2
- Parent:
- 3:65845faafbb1
ss;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joGenie | 0:dc7095ab4963 | 1 | #include "mbed.h" |
RufflesAllD | 1:261bb31628e8 | 2 | #include "rtos.h" |
RufflesAllD | 2:db7c8378b324 | 3 | #include "trame.hpp" |
joGenie | 0:dc7095ab4963 | 4 | |
joGenie | 0:dc7095ab4963 | 5 | Serial pc(USBTX, USBRX); |
joGenie | 0:dc7095ab4963 | 6 | |
RufflesAllD | 3:65845faafbb1 | 7 | DigitalOut led1(LED1); |
RufflesAllD | 3:65845faafbb1 | 8 | DigitalOut led2(LED2); |
RufflesAllD | 3:65845faafbb1 | 9 | DigitalOut led3(LED3); |
RufflesAllD | 3:65845faafbb1 | 10 | DigitalOut led4(LED4); |
RufflesAllD | 3:65845faafbb1 | 11 | |
joGenie | 4:2af360b178d2 | 12 | DigitalOut out(p26); |
joGenie | 4:2af360b178d2 | 13 | |
RufflesAllD | 3:65845faafbb1 | 14 | const int tickPerPeriod = 960000; |
RufflesAllD | 3:65845faafbb1 | 15 | |
RufflesAllD | 3:65845faafbb1 | 16 | struct message_t |
RufflesAllD | 3:65845faafbb1 | 17 | { |
RufflesAllD | 3:65845faafbb1 | 18 | char msg[696]; |
RufflesAllD | 3:65845faafbb1 | 19 | }; |
RufflesAllD | 2:db7c8378b324 | 20 | |
RufflesAllD | 2:db7c8378b324 | 21 | Queue<string, 16> textToSend; |
RufflesAllD | 2:db7c8378b324 | 22 | Mail<trame, 16> trameToSend; |
RufflesAllD | 2:db7c8378b324 | 23 | |
RufflesAllD | 3:65845faafbb1 | 24 | Queue<message_t, 16> messagesQueue; |
RufflesAllD | 2:db7c8378b324 | 25 | Mail<trame, 16> trameToDecode; |
RufflesAllD | 2:db7c8378b324 | 26 | Queue<string, 16> textToPrint; |
RufflesAllD | 2:db7c8378b324 | 27 | |
RufflesAllD | 3:65845faafbb1 | 28 | unsigned long tc_periods[8] = {0}; |
RufflesAllD | 3:65845faafbb1 | 29 | unsigned long period = 0; |
RufflesAllD | 3:65845faafbb1 | 30 | bool type_bit = false; |
RufflesAllD | 3:65845faafbb1 | 31 | int synchrone = 0; |
RufflesAllD | 3:65845faafbb1 | 32 | int count = 0; |
RufflesAllD | 3:65845faafbb1 | 33 | const char end[8] = {0, 1, 1, 1, 1, 1, 1, 0}; |
RufflesAllD | 3:65845faafbb1 | 34 | |
RufflesAllD | 3:65845faafbb1 | 35 | bool good = true; |
RufflesAllD | 3:65845faafbb1 | 36 | |
RufflesAllD | 3:65845faafbb1 | 37 | char messages[696] = {0}; |
RufflesAllD | 3:65845faafbb1 | 38 | message_t msgs; |
joGenie | 4:2af360b178d2 | 39 | const unsigned long offset = 200; |
RufflesAllD | 3:65845faafbb1 | 40 | |
RufflesAllD | 2:db7c8378b324 | 41 | void getText(void const *args) |
RufflesAllD | 2:db7c8378b324 | 42 | { |
RufflesAllD | 2:db7c8378b324 | 43 | int compteur = 0; |
RufflesAllD | 2:db7c8378b324 | 44 | char c; |
RufflesAllD | 2:db7c8378b324 | 45 | string message = ""; |
RufflesAllD | 2:db7c8378b324 | 46 | |
RufflesAllD | 2:db7c8378b324 | 47 | while (true) |
RufflesAllD | 2:db7c8378b324 | 48 | { |
RufflesAllD | 2:db7c8378b324 | 49 | c = pc.getc(); |
RufflesAllD | 2:db7c8378b324 | 50 | |
RufflesAllD | 2:db7c8378b324 | 51 | if (c == 0xD) |
RufflesAllD | 2:db7c8378b324 | 52 | { |
RufflesAllD | 2:db7c8378b324 | 53 | if (!message.empty()) |
RufflesAllD | 2:db7c8378b324 | 54 | { |
RufflesAllD | 2:db7c8378b324 | 55 | pc.putc(0xA); |
RufflesAllD | 2:db7c8378b324 | 56 | pc.putc(0xD); |
RufflesAllD | 2:db7c8378b324 | 57 | textToSend.put(new string(message)); |
RufflesAllD | 2:db7c8378b324 | 58 | message = ""; |
RufflesAllD | 2:db7c8378b324 | 59 | compteur = 0; |
RufflesAllD | 2:db7c8378b324 | 60 | } |
RufflesAllD | 2:db7c8378b324 | 61 | } |
RufflesAllD | 2:db7c8378b324 | 62 | else if (c == 0x8) |
RufflesAllD | 2:db7c8378b324 | 63 | { |
RufflesAllD | 2:db7c8378b324 | 64 | pc.putc(c); |
RufflesAllD | 2:db7c8378b324 | 65 | pc.putc(0x20); |
RufflesAllD | 2:db7c8378b324 | 66 | pc.putc(c); |
RufflesAllD | 2:db7c8378b324 | 67 | message = message.substr(0, message.length() - 1); |
RufflesAllD | 2:db7c8378b324 | 68 | compteur--; |
RufflesAllD | 2:db7c8378b324 | 69 | } |
RufflesAllD | 2:db7c8378b324 | 70 | else |
RufflesAllD | 2:db7c8378b324 | 71 | { |
RufflesAllD | 2:db7c8378b324 | 72 | if (compteur < 80) |
RufflesAllD | 2:db7c8378b324 | 73 | { |
RufflesAllD | 2:db7c8378b324 | 74 | pc.putc(c); |
RufflesAllD | 2:db7c8378b324 | 75 | message += c; |
RufflesAllD | 2:db7c8378b324 | 76 | compteur++; |
RufflesAllD | 2:db7c8378b324 | 77 | } |
RufflesAllD | 2:db7c8378b324 | 78 | } |
RufflesAllD | 2:db7c8378b324 | 79 | } |
RufflesAllD | 2:db7c8378b324 | 80 | } |
RufflesAllD | 2:db7c8378b324 | 81 | |
RufflesAllD | 2:db7c8378b324 | 82 | void leTrameur(void const *args) |
RufflesAllD | 2:db7c8378b324 | 83 | { |
RufflesAllD | 2:db7c8378b324 | 84 | while (true) |
RufflesAllD | 2:db7c8378b324 | 85 | { |
RufflesAllD | 2:db7c8378b324 | 86 | osEvent evt = textToSend.get(); |
RufflesAllD | 2:db7c8378b324 | 87 | |
RufflesAllD | 2:db7c8378b324 | 88 | if (evt.status == osEventMessage) { |
RufflesAllD | 2:db7c8378b324 | 89 | string *msg = (string*)evt.value.p; |
RufflesAllD | 2:db7c8378b324 | 90 | |
RufflesAllD | 2:db7c8378b324 | 91 | //pc.printf("message envoye :\n\r%s\n\r", msg->c_str()); |
RufflesAllD | 2:db7c8378b324 | 92 | trameToSend.put(new trame(*msg)); |
RufflesAllD | 2:db7c8378b324 | 93 | |
RufflesAllD | 2:db7c8378b324 | 94 | delete msg; |
RufflesAllD | 2:db7c8378b324 | 95 | } |
RufflesAllD | 2:db7c8378b324 | 96 | } |
RufflesAllD | 2:db7c8378b324 | 97 | } |
joGenie | 0:dc7095ab4963 | 98 | |
RufflesAllD | 2:db7c8378b324 | 99 | void setPwmMatch(bitset<8> bitst) |
RufflesAllD | 2:db7c8378b324 | 100 | { |
RufflesAllD | 2:db7c8378b324 | 101 | for (int a = 0; a < 8; a++) |
RufflesAllD | 2:db7c8378b324 | 102 | { |
joGenie | 4:2af360b178d2 | 103 | out = !out; |
RufflesAllD | 2:db7c8378b324 | 104 | if (bitst.test(a)) |
RufflesAllD | 2:db7c8378b324 | 105 | { |
RufflesAllD | 2:db7c8378b324 | 106 | LPC_PWM1->MR1 = tickPerPeriod/2; |
RufflesAllD | 2:db7c8378b324 | 107 | LPC_PWM1->MR2 = 1; |
RufflesAllD | 2:db7c8378b324 | 108 | } |
RufflesAllD | 2:db7c8378b324 | 109 | else |
RufflesAllD | 2:db7c8378b324 | 110 | { |
RufflesAllD | 2:db7c8378b324 | 111 | LPC_PWM1->MR1 = 1; |
RufflesAllD | 2:db7c8378b324 | 112 | LPC_PWM1->MR2 = tickPerPeriod/2; |
RufflesAllD | 2:db7c8378b324 | 113 | } |
RufflesAllD | 2:db7c8378b324 | 114 | |
RufflesAllD | 2:db7c8378b324 | 115 | while(LPC_PWM1->IR != 0x01); |
RufflesAllD | 2:db7c8378b324 | 116 | LPC_PWM1->IR = 0xFF; |
joGenie | 4:2af360b178d2 | 117 | |
joGenie | 4:2af360b178d2 | 118 | out = !out; |
RufflesAllD | 2:db7c8378b324 | 119 | } |
RufflesAllD | 2:db7c8378b324 | 120 | } |
RufflesAllD | 2:db7c8378b324 | 121 | |
RufflesAllD | 2:db7c8378b324 | 122 | void sendTrame(trame *trm) |
RufflesAllD | 2:db7c8378b324 | 123 | { |
RufflesAllD | 3:65845faafbb1 | 124 | LPC_TIM2->TC = 0; |
RufflesAllD | 2:db7c8378b324 | 125 | LPC_PWM1->TCR |= (1 << 0); // Enable counter |
RufflesAllD | 2:db7c8378b324 | 126 | |
RufflesAllD | 2:db7c8378b324 | 127 | setPwmMatch(trm->preambule); |
RufflesAllD | 2:db7c8378b324 | 128 | setPwmMatch(trm->start_end); |
RufflesAllD | 2:db7c8378b324 | 129 | setPwmMatch(trm->type_flag); |
RufflesAllD | 2:db7c8378b324 | 130 | setPwmMatch(trm->charge_utile); |
RufflesAllD | 2:db7c8378b324 | 131 | |
RufflesAllD | 2:db7c8378b324 | 132 | for (int a = 0; a < trm->length; a++) |
RufflesAllD | 2:db7c8378b324 | 133 | { |
RufflesAllD | 2:db7c8378b324 | 134 | if (trm->message.test(a)) |
RufflesAllD | 2:db7c8378b324 | 135 | { |
RufflesAllD | 2:db7c8378b324 | 136 | LPC_PWM1->MR1 = tickPerPeriod/2; |
RufflesAllD | 2:db7c8378b324 | 137 | LPC_PWM1->MR2 = 1; |
RufflesAllD | 2:db7c8378b324 | 138 | } |
RufflesAllD | 2:db7c8378b324 | 139 | else |
RufflesAllD | 2:db7c8378b324 | 140 | { |
RufflesAllD | 2:db7c8378b324 | 141 | LPC_PWM1->MR1 = 1; |
RufflesAllD | 2:db7c8378b324 | 142 | LPC_PWM1->MR2 = tickPerPeriod/2; |
RufflesAllD | 2:db7c8378b324 | 143 | } |
RufflesAllD | 2:db7c8378b324 | 144 | |
RufflesAllD | 2:db7c8378b324 | 145 | while(LPC_PWM1->IR != 0x01); |
RufflesAllD | 2:db7c8378b324 | 146 | LPC_PWM1->IR = 0xFF; |
RufflesAllD | 2:db7c8378b324 | 147 | } |
RufflesAllD | 2:db7c8378b324 | 148 | |
RufflesAllD | 2:db7c8378b324 | 149 | for (int a = 0; a < 16; a++) |
RufflesAllD | 2:db7c8378b324 | 150 | { |
RufflesAllD | 2:db7c8378b324 | 151 | if (trm->crc16.test(a)) |
RufflesAllD | 2:db7c8378b324 | 152 | { |
RufflesAllD | 2:db7c8378b324 | 153 | LPC_PWM1->MR1 = tickPerPeriod/2; |
RufflesAllD | 2:db7c8378b324 | 154 | LPC_PWM1->MR2 = 1; |
RufflesAllD | 2:db7c8378b324 | 155 | } |
RufflesAllD | 2:db7c8378b324 | 156 | else |
RufflesAllD | 2:db7c8378b324 | 157 | { |
RufflesAllD | 2:db7c8378b324 | 158 | LPC_PWM1->MR1 = 1; |
RufflesAllD | 2:db7c8378b324 | 159 | LPC_PWM1->MR2 = tickPerPeriod/2; |
RufflesAllD | 2:db7c8378b324 | 160 | } |
RufflesAllD | 2:db7c8378b324 | 161 | |
RufflesAllD | 2:db7c8378b324 | 162 | while(LPC_PWM1->IR != 0x01); |
RufflesAllD | 2:db7c8378b324 | 163 | LPC_PWM1->IR = 0xFF; |
RufflesAllD | 2:db7c8378b324 | 164 | } |
RufflesAllD | 2:db7c8378b324 | 165 | |
RufflesAllD | 2:db7c8378b324 | 166 | setPwmMatch(trm->start_end); |
RufflesAllD | 2:db7c8378b324 | 167 | |
RufflesAllD | 2:db7c8378b324 | 168 | LPC_PWM1->TCR = 0x0; // Disable counter |
RufflesAllD | 2:db7c8378b324 | 169 | } |
RufflesAllD | 2:db7c8378b324 | 170 | |
RufflesAllD | 2:db7c8378b324 | 171 | void sender(void const *args) |
RufflesAllD | 2:db7c8378b324 | 172 | { |
RufflesAllD | 2:db7c8378b324 | 173 | while (true) |
RufflesAllD | 2:db7c8378b324 | 174 | { |
RufflesAllD | 2:db7c8378b324 | 175 | osEvent evt = trameToSend.get(); |
RufflesAllD | 2:db7c8378b324 | 176 | |
RufflesAllD | 2:db7c8378b324 | 177 | if (evt.status == osEventMail) { |
RufflesAllD | 2:db7c8378b324 | 178 | trame *trm = (trame*)evt.value.p; |
RufflesAllD | 2:db7c8378b324 | 179 | |
RufflesAllD | 2:db7c8378b324 | 180 | pc.printf("trame shooter :\n\r%s", trm->trameToString().c_str()); |
RufflesAllD | 2:db7c8378b324 | 181 | sendTrame(trm); |
RufflesAllD | 2:db7c8378b324 | 182 | |
RufflesAllD | 2:db7c8378b324 | 183 | trameToSend.free(trm); |
RufflesAllD | 2:db7c8378b324 | 184 | } |
RufflesAllD | 2:db7c8378b324 | 185 | } |
RufflesAllD | 2:db7c8378b324 | 186 | } |
joGenie | 0:dc7095ab4963 | 187 | |
RufflesAllD | 3:65845faafbb1 | 188 | void pushTrame(void const *args) |
RufflesAllD | 2:db7c8378b324 | 189 | { |
RufflesAllD | 3:65845faafbb1 | 190 | while (true) |
RufflesAllD | 2:db7c8378b324 | 191 | { |
RufflesAllD | 3:65845faafbb1 | 192 | osEvent evt = messagesQueue.get(); |
RufflesAllD | 3:65845faafbb1 | 193 | |
RufflesAllD | 3:65845faafbb1 | 194 | if (evt.status == osEventMessage) { |
RufflesAllD | 3:65845faafbb1 | 195 | message_t *msg = (message_t*)evt.value.p; |
RufflesAllD | 3:65845faafbb1 | 196 | |
RufflesAllD | 3:65845faafbb1 | 197 | bitset<696> bit(string(const_cast<const char*>(msg->msg))); |
RufflesAllD | 3:65845faafbb1 | 198 | trame *trm = new trame(bit); |
RufflesAllD | 3:65845faafbb1 | 199 | |
RufflesAllD | 3:65845faafbb1 | 200 | pc.printf("trame recu :\n\r%s\n\r", trm->trameToString().c_str()); |
RufflesAllD | 3:65845faafbb1 | 201 | if (trm->checkCRC16()) |
RufflesAllD | 3:65845faafbb1 | 202 | { |
RufflesAllD | 3:65845faafbb1 | 203 | trameToDecode.put(trm); |
RufflesAllD | 3:65845faafbb1 | 204 | } |
RufflesAllD | 3:65845faafbb1 | 205 | else |
RufflesAllD | 3:65845faafbb1 | 206 | { |
RufflesAllD | 3:65845faafbb1 | 207 | for (int a=0;a < 8; a++) |
RufflesAllD | 3:65845faafbb1 | 208 | { |
RufflesAllD | 3:65845faafbb1 | 209 | pc.printf("tc_periods: %d\n\r", tc_periods[a]); |
RufflesAllD | 3:65845faafbb1 | 210 | } |
RufflesAllD | 3:65845faafbb1 | 211 | pc.printf("period: %d\n\r", period); |
RufflesAllD | 3:65845faafbb1 | 212 | pc.printf("Mauvais CRC16\n\r"); |
RufflesAllD | 3:65845faafbb1 | 213 | } |
RufflesAllD | 3:65845faafbb1 | 214 | } |
RufflesAllD | 2:db7c8378b324 | 215 | } |
RufflesAllD | 2:db7c8378b324 | 216 | } |
RufflesAllD | 2:db7c8378b324 | 217 | |
RufflesAllD | 3:65845faafbb1 | 218 | void readTrame() |
RufflesAllD | 2:db7c8378b324 | 219 | { |
RufflesAllD | 3:65845faafbb1 | 220 | if (synchrone < 8) |
RufflesAllD | 3:65845faafbb1 | 221 | { |
RufflesAllD | 3:65845faafbb1 | 222 | tc_periods[synchrone] = LPC_TIM2->CR1; |
RufflesAllD | 3:65845faafbb1 | 223 | synchrone++; |
RufflesAllD | 3:65845faafbb1 | 224 | |
RufflesAllD | 3:65845faafbb1 | 225 | if (synchrone == 8) |
RufflesAllD | 3:65845faafbb1 | 226 | { |
RufflesAllD | 3:65845faafbb1 | 227 | for (int i = 0; i < 8; i++) |
RufflesAllD | 3:65845faafbb1 | 228 | { |
RufflesAllD | 3:65845faafbb1 | 229 | period += tc_periods[i]; |
RufflesAllD | 3:65845faafbb1 | 230 | } |
RufflesAllD | 3:65845faafbb1 | 231 | |
RufflesAllD | 3:65845faafbb1 | 232 | period = period/8; |
RufflesAllD | 3:65845faafbb1 | 233 | } |
RufflesAllD | 3:65845faafbb1 | 234 | } |
RufflesAllD | 3:65845faafbb1 | 235 | else |
RufflesAllD | 3:65845faafbb1 | 236 | { |
RufflesAllD | 3:65845faafbb1 | 237 | unsigned long tc_count = LPC_TIM2->CR1; |
RufflesAllD | 3:65845faafbb1 | 238 | if (tc_count > (period*2 - offset) && tc_count < (period*2 + offset)) |
RufflesAllD | 3:65845faafbb1 | 239 | { |
RufflesAllD | 3:65845faafbb1 | 240 | type_bit = !type_bit; |
RufflesAllD | 3:65845faafbb1 | 241 | good = true; |
RufflesAllD | 3:65845faafbb1 | 242 | |
RufflesAllD | 3:65845faafbb1 | 243 | if (type_bit) |
RufflesAllD | 3:65845faafbb1 | 244 | { |
RufflesAllD | 3:65845faafbb1 | 245 | messages[count] = '1'; |
RufflesAllD | 3:65845faafbb1 | 246 | led1 = 1; |
RufflesAllD | 3:65845faafbb1 | 247 | led2 = 0; |
RufflesAllD | 3:65845faafbb1 | 248 | } |
RufflesAllD | 3:65845faafbb1 | 249 | else |
RufflesAllD | 3:65845faafbb1 | 250 | { |
RufflesAllD | 3:65845faafbb1 | 251 | messages[count] = '0'; |
RufflesAllD | 3:65845faafbb1 | 252 | led1 = 0; |
RufflesAllD | 3:65845faafbb1 | 253 | led2 = 1; |
RufflesAllD | 3:65845faafbb1 | 254 | } |
RufflesAllD | 3:65845faafbb1 | 255 | |
RufflesAllD | 3:65845faafbb1 | 256 | count++; |
RufflesAllD | 3:65845faafbb1 | 257 | } |
RufflesAllD | 3:65845faafbb1 | 258 | |
RufflesAllD | 3:65845faafbb1 | 259 | good = !good; |
RufflesAllD | 3:65845faafbb1 | 260 | if (good) |
RufflesAllD | 3:65845faafbb1 | 261 | { |
RufflesAllD | 3:65845faafbb1 | 262 | if (type_bit) |
RufflesAllD | 3:65845faafbb1 | 263 | { |
RufflesAllD | 3:65845faafbb1 | 264 | messages[count] = '1'; |
RufflesAllD | 3:65845faafbb1 | 265 | led1 = 1; |
RufflesAllD | 3:65845faafbb1 | 266 | led2 = 0; |
RufflesAllD | 3:65845faafbb1 | 267 | } |
RufflesAllD | 3:65845faafbb1 | 268 | else |
RufflesAllD | 3:65845faafbb1 | 269 | { |
RufflesAllD | 3:65845faafbb1 | 270 | messages[count] = '0'; |
RufflesAllD | 3:65845faafbb1 | 271 | led1 = 0; |
RufflesAllD | 3:65845faafbb1 | 272 | led2 = 1; |
RufflesAllD | 3:65845faafbb1 | 273 | } |
RufflesAllD | 3:65845faafbb1 | 274 | |
RufflesAllD | 3:65845faafbb1 | 275 | count++; |
RufflesAllD | 3:65845faafbb1 | 276 | } |
RufflesAllD | 3:65845faafbb1 | 277 | } |
RufflesAllD | 3:65845faafbb1 | 278 | |
RufflesAllD | 3:65845faafbb1 | 279 | if (count >= 48) |
RufflesAllD | 3:65845faafbb1 | 280 | { |
RufflesAllD | 3:65845faafbb1 | 281 | char temp[8] = {0}; |
RufflesAllD | 3:65845faafbb1 | 282 | for (int a = 0; a < 8; a++) |
RufflesAllD | 3:65845faafbb1 | 283 | { |
RufflesAllD | 3:65845faafbb1 | 284 | temp[a] = messages[count-a]; |
RufflesAllD | 3:65845faafbb1 | 285 | } |
RufflesAllD | 3:65845faafbb1 | 286 | |
RufflesAllD | 3:65845faafbb1 | 287 | if (strcmp(temp, end) == 0) |
RufflesAllD | 3:65845faafbb1 | 288 | { |
RufflesAllD | 3:65845faafbb1 | 289 | count = 0; |
RufflesAllD | 3:65845faafbb1 | 290 | synchrone = 0; |
RufflesAllD | 3:65845faafbb1 | 291 | good = true; |
RufflesAllD | 3:65845faafbb1 | 292 | strcpy(msgs.msg, messages); |
RufflesAllD | 3:65845faafbb1 | 293 | fill(messages, messages+696, 0); |
RufflesAllD | 3:65845faafbb1 | 294 | messagesQueue.put(&msgs); |
RufflesAllD | 3:65845faafbb1 | 295 | led3 = 1; |
RufflesAllD | 3:65845faafbb1 | 296 | } |
RufflesAllD | 3:65845faafbb1 | 297 | } |
RufflesAllD | 3:65845faafbb1 | 298 | |
RufflesAllD | 3:65845faafbb1 | 299 | LPC_TIM2->TC = 0; |
RufflesAllD | 3:65845faafbb1 | 300 | LPC_TIM2->IR = 0xFF; |
RufflesAllD | 3:65845faafbb1 | 301 | led4 = 1; |
joGenie | 0:dc7095ab4963 | 302 | } |
joGenie | 0:dc7095ab4963 | 303 | |
RufflesAllD | 2:db7c8378b324 | 304 | void decoder(void const *args) |
joGenie | 0:dc7095ab4963 | 305 | { |
RufflesAllD | 2:db7c8378b324 | 306 | while(true) |
joGenie | 0:dc7095ab4963 | 307 | { |
RufflesAllD | 2:db7c8378b324 | 308 | osEvent evt = trameToDecode.get(); |
RufflesAllD | 2:db7c8378b324 | 309 | |
RufflesAllD | 2:db7c8378b324 | 310 | if (evt.status == osEventMail) { |
RufflesAllD | 2:db7c8378b324 | 311 | trame *trm = (trame*)evt.value.p; |
RufflesAllD | 2:db7c8378b324 | 312 | |
RufflesAllD | 2:db7c8378b324 | 313 | textToPrint.put(new string(trm->text)); |
RufflesAllD | 2:db7c8378b324 | 314 | |
RufflesAllD | 3:65845faafbb1 | 315 | trameToDecode.free(trm); |
joGenie | 0:dc7095ab4963 | 316 | } |
joGenie | 0:dc7095ab4963 | 317 | } |
RufflesAllD | 1:261bb31628e8 | 318 | } |
RufflesAllD | 1:261bb31628e8 | 319 | |
RufflesAllD | 2:db7c8378b324 | 320 | void printer(void const *args) |
RufflesAllD | 2:db7c8378b324 | 321 | { |
RufflesAllD | 2:db7c8378b324 | 322 | while (true) |
RufflesAllD | 2:db7c8378b324 | 323 | { |
RufflesAllD | 2:db7c8378b324 | 324 | osEvent evt = textToPrint.get(); |
RufflesAllD | 2:db7c8378b324 | 325 | |
RufflesAllD | 2:db7c8378b324 | 326 | if (evt.status == osEventMessage) { |
RufflesAllD | 2:db7c8378b324 | 327 | string *msg = (string*)evt.value.p; |
RufflesAllD | 2:db7c8378b324 | 328 | |
RufflesAllD | 2:db7c8378b324 | 329 | pc.printf("Sender says :\n\r%s\n\r", msg->c_str()); |
RufflesAllD | 2:db7c8378b324 | 330 | |
RufflesAllD | 2:db7c8378b324 | 331 | delete msg; |
RufflesAllD | 2:db7c8378b324 | 332 | } |
RufflesAllD | 2:db7c8378b324 | 333 | } |
joGenie | 0:dc7095ab4963 | 334 | } |
joGenie | 0:dc7095ab4963 | 335 | |
joGenie | 0:dc7095ab4963 | 336 | void initialize() |
joGenie | 0:dc7095ab4963 | 337 | { |
joGenie | 0:dc7095ab4963 | 338 | // Set system control |
joGenie | 0:dc7095ab4963 | 339 | LPC_SC->PCONP |= (1 << 22) | (1 << 6); // Enable Timer2 et PWM |
joGenie | 0:dc7095ab4963 | 340 | LPC_SC->PCLKSEL0 |= (1 << 12); // PClk PWM = CCLK |
joGenie | 0:dc7095ab4963 | 341 | LPC_SC->PCLKSEL1 |= (1 << 12); // PClk Timer2 = CCLK |
joGenie | 0:dc7095ab4963 | 342 | |
joGenie | 0:dc7095ab4963 | 343 | // Set pin connection |
joGenie | 0:dc7095ab4963 | 344 | LPC_PINCON->PINSEL0 |= (3 << 10); // Pin 29 Capture |
joGenie | 0:dc7095ab4963 | 345 | LPC_PINCON->PINSEL4 |= (1 << 2); // Pin 25 PWM |
joGenie | 0:dc7095ab4963 | 346 | |
joGenie | 0:dc7095ab4963 | 347 | //Initialize Timer2 for capture |
RufflesAllD | 1:261bb31628e8 | 348 | NVIC_SetVector(TIMER2_IRQn, (uint32_t)&readTrame); |
RufflesAllD | 1:261bb31628e8 | 349 | NVIC_EnableIRQ(TIMER2_IRQn); |
joGenie | 0:dc7095ab4963 | 350 | |
joGenie | 0:dc7095ab4963 | 351 | LPC_TIM2->TC = 0; // Initialize Time Counter |
joGenie | 0:dc7095ab4963 | 352 | LPC_TIM2->PC = 0; // Initialize Prescale Counter |
joGenie | 0:dc7095ab4963 | 353 | LPC_TIM2->PR = 0; // Initialize Prescale Register |
joGenie | 0:dc7095ab4963 | 354 | LPC_TIM2->TCR |= (1 << 1); // Reset Timer Control Register |
joGenie | 0:dc7095ab4963 | 355 | LPC_TIM2->IR = 0xFF; // Reset Interrupt Register |
RufflesAllD | 1:261bb31628e8 | 356 | LPC_TIM2->CCR |= (1 << 5) | (1 << 4) | (1 << 3); // Initialize Capture Control Register |
RufflesAllD | 3:65845faafbb1 | 357 | LPC_TIM2->CTCR = 0x0; |
joGenie | 0:dc7095ab4963 | 358 | |
joGenie | 0:dc7095ab4963 | 359 | LPC_TIM2->TCR = 0x01; // Start Timer Control Register |
joGenie | 0:dc7095ab4963 | 360 | |
joGenie | 0:dc7095ab4963 | 361 | //Initialize PWM |
joGenie | 0:dc7095ab4963 | 362 | LPC_PWM1->MCR |= (1 << 1) | (1 << 0); // Initialize Match Control Register Interrupt/Reset |
joGenie | 0:dc7095ab4963 | 363 | LPC_PWM1->PCR |= (1 << 10) | (1 << 2); // Initialize PWM Control Register Output/Double-edge |
joGenie | 0:dc7095ab4963 | 364 | |
RufflesAllD | 2:db7c8378b324 | 365 | LPC_PWM1->MR0 = tickPerPeriod; // Period |
joGenie | 0:dc7095ab4963 | 366 | LPC_PWM1->LER |= (1 << 2) | (1 << 1); // Initialize Latch Enable Register |
joGenie | 0:dc7095ab4963 | 367 | |
RufflesAllD | 1:261bb31628e8 | 368 | LPC_PWM1->IR = 0xFF; // Reset Interrupt Registe |
joGenie | 0:dc7095ab4963 | 369 | } |
joGenie | 0:dc7095ab4963 | 370 | |
joGenie | 0:dc7095ab4963 | 371 | int main() |
joGenie | 0:dc7095ab4963 | 372 | { |
joGenie | 4:2af360b178d2 | 373 | out = 0; // Pour analyse de performance |
joGenie | 4:2af360b178d2 | 374 | |
joGenie | 0:dc7095ab4963 | 375 | initialize(); |
joGenie | 0:dc7095ab4963 | 376 | |
joGenie | 4:2af360b178d2 | 377 | // Permet de concevoir le message a envoyer |
joGenie | 4:2af360b178d2 | 378 | // Ajoute le message dans le queue du trameur |
RufflesAllD | 2:db7c8378b324 | 379 | Thread thread1(getText); |
joGenie | 4:2af360b178d2 | 380 | |
joGenie | 4:2af360b178d2 | 381 | // Vide la queue du trameur |
joGenie | 4:2af360b178d2 | 382 | // Creer un message a binaire |
joGenie | 4:2af360b178d2 | 383 | // Ajoute se message dans le mail box du sender |
RufflesAllD | 2:db7c8378b324 | 384 | Thread thread2(leTrameur); |
RufflesAllD | 2:db7c8378b324 | 385 | thread2.set_priority(osPriorityAboveNormal); |
joGenie | 4:2af360b178d2 | 386 | |
joGenie | 4:2af360b178d2 | 387 | // Vide la mailbox du sender |
joGenie | 4:2af360b178d2 | 388 | // Creer le signal du modulateur a l'aide du LPC_PM1 |
RufflesAllD | 2:db7c8378b324 | 389 | Thread thread3(sender); |
RufflesAllD | 2:db7c8378b324 | 390 | thread3.set_priority(osPriorityHigh); |
RufflesAllD | 3:65845faafbb1 | 391 | |
joGenie | 4:2af360b178d2 | 392 | // Creer un message en binaire et check pour le CRC16 |
joGenie | 4:2af360b178d2 | 393 | // Ajoute ce message dans la mailbox du decoder |
RufflesAllD | 3:65845faafbb1 | 394 | Thread thread(pushTrame); |
RufflesAllD | 3:65845faafbb1 | 395 | thread.set_priority(osPriorityRealtime); |
RufflesAllD | 3:65845faafbb1 | 396 | |
joGenie | 4:2af360b178d2 | 397 | // Vide la mailbox du decoder |
joGenie | 4:2af360b178d2 | 398 | // Creer un message en lettre |
joGenie | 4:2af360b178d2 | 399 | // Ajoute ce message dans la queue du printer |
RufflesAllD | 3:65845faafbb1 | 400 | Thread thread4(decoder); |
RufflesAllD | 3:65845faafbb1 | 401 | thread4.set_priority(osPriorityHigh); |
joGenie | 4:2af360b178d2 | 402 | |
joGenie | 4:2af360b178d2 | 403 | // Vide la queue du printer |
joGenie | 4:2af360b178d2 | 404 | // Affiche le message a l'ecran |
RufflesAllD | 3:65845faafbb1 | 405 | Thread thread5(printer); |
RufflesAllD | 3:65845faafbb1 | 406 | thread5.set_priority(osPriorityAboveNormal); |
joGenie | 0:dc7095ab4963 | 407 | |
RufflesAllD | 2:db7c8378b324 | 408 | while(true); |
joGenie | 0:dc7095ab4963 | 409 | } |