![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
app4
Dependencies: mbed-rtos mbed CRC16
Fork of S5info_APP2 by
uart.h@10:8b066285c2e0, 2017-03-06 (annotated)
- Committer:
- ericbisson
- Date:
- Mon Mar 06 22:49:58 2017 +0000
- Revision:
- 10:8b066285c2e0
- Parent:
- 9:01be68364986
menage effectu?
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ericbisson | 8:5b87b1f9d91f | 1 | #include <vector> |
ericbisson | 8:5b87b1f9d91f | 2 | #include "mbed.h" |
ericbisson | 9:01be68364986 | 3 | #include "CRC16.h" |
ericbisson | 8:5b87b1f9d91f | 4 | using std::vector; |
ericbisson | 8:5b87b1f9d91f | 5 | |
ericbisson | 8:5b87b1f9d91f | 6 | #define RETURN_EMPTYVECTOR(x) return vector<x>(); |
ericbisson | 8:5b87b1f9d91f | 7 | const char PREAMBULE = 0b01010101; |
ericbisson | 8:5b87b1f9d91f | 8 | const char START = 0b01111110; |
ericbisson | 8:5b87b1f9d91f | 9 | const char END = 0b01111110; |
ericbisson | 8:5b87b1f9d91f | 10 | const char FLAGS = 0x00; |
ericbisson | 8:5b87b1f9d91f | 11 | const char MAX_LENGTH = 80; |
ericbisson | 9:01be68364986 | 12 | CRC16 mycrc16; |
ericbisson | 8:5b87b1f9d91f | 13 | |
ericbisson | 10:8b066285c2e0 | 14 | vector<char> uart_read(Serial& COM) |
ericbisson | 8:5b87b1f9d91f | 15 | { |
ericbisson | 8:5b87b1f9d91f | 16 | vector<char> result; |
ericbisson | 8:5b87b1f9d91f | 17 | |
ericbisson | 8:5b87b1f9d91f | 18 | while (COM.readable()) |
ericbisson | 8:5b87b1f9d91f | 19 | { |
ericbisson | 8:5b87b1f9d91f | 20 | result.push_back(COM.getc()); |
ericbisson | 9:01be68364986 | 21 | wait_ms(1); // 9600 bits/secondes, donc ~0.1ms par bit |
ericbisson | 8:5b87b1f9d91f | 22 | } |
ericbisson | 8:5b87b1f9d91f | 23 | if (result.size() > 7) |
ericbisson | 8:5b87b1f9d91f | 24 | { |
ericbisson | 9:01be68364986 | 25 | // Validations de base |
ericbisson | 8:5b87b1f9d91f | 26 | if (result[0] != PREAMBULE || |
ericbisson | 8:5b87b1f9d91f | 27 | result[1] != START || |
ericbisson | 8:5b87b1f9d91f | 28 | result[2] != result.size() - 7 || |
ericbisson | 8:5b87b1f9d91f | 29 | result.back() != END) |
ericbisson | 8:5b87b1f9d91f | 30 | { |
ericbisson | 8:5b87b1f9d91f | 31 | RETURN_EMPTYVECTOR(char); |
ericbisson | 8:5b87b1f9d91f | 32 | } |
ericbisson | 8:5b87b1f9d91f | 33 | |
ericbisson | 9:01be68364986 | 34 | // Calcul du CRC |
ericbisson | 9:01be68364986 | 35 | unsigned short currentCRC = result[result.size()-2] + result[result.size()-3]<<8; |
ericbisson | 9:01be68364986 | 36 | |
ericbisson | 9:01be68364986 | 37 | vector<char> charge_utile(&result[4], &result[result.size()-4]); |
ericbisson | 8:5b87b1f9d91f | 38 | |
ericbisson | 9:01be68364986 | 39 | if (currentCRC != mycrc16.calculateCRC16(&charge_utile[0], charge_utile.size())) |
ericbisson | 9:01be68364986 | 40 | { |
ericbisson | 9:01be68364986 | 41 | RETURN_EMPTYVECTOR(char); |
ericbisson | 9:01be68364986 | 42 | } |
ericbisson | 9:01be68364986 | 43 | |
ericbisson | 9:01be68364986 | 44 | return charge_utile; |
ericbisson | 8:5b87b1f9d91f | 45 | } |
ericbisson | 8:5b87b1f9d91f | 46 | RETURN_EMPTYVECTOR(char); |
ericbisson | 8:5b87b1f9d91f | 47 | } |