![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
app4
Dependencies: mbed-rtos mbed CRC16
Fork of S5info_APP2 by
Diff: uart.h
- Revision:
- 26:6ffbf3161f6f
- Parent:
- 25:d0c348c3c85d
diff -r d0c348c3c85d -r 6ffbf3161f6f uart.h --- a/uart.h Tue Mar 07 17:25:16 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -#include <vector> -#include "mbed.h" -#include "CRC16.h" -using std::vector; - -#define RETURN_EMPTYVECTOR(x) return vector<x>(); -const char PREAMBULE = 0b01010101; -const char START = 0b01111110; -const char END = 0b01111110; -const char FLAGS = 0x00; -const char MAX_LENGTH = 80; -CRC16 mycrc16; - -vector<char> uart_read(Serial& COM) -{ - vector<char> result; - - while (COM.readable()) - { - result.push_back(COM.getc()); - wait_ms(1); // 9600 bits/secondes, donc ~0.1ms par bit - } - if (result.size() > 7) - { - // Validations de base - if (result[0] != PREAMBULE || - result[1] != START || - result[2] != result.size() - 7 || - result.back() != END) - { - RETURN_EMPTYVECTOR(char); - } - - // Calcul du CRC - unsigned short currentCRC = result[result.size()-2] + result[result.size()-3]<<8; - - vector<char> charge_utile(&result[4], &result[result.size()-4]); - - if (currentCRC != mycrc16.calculateCRC16(&charge_utile[0], charge_utile.size())) - { - RETURN_EMPTYVECTOR(char); - } - - return charge_utile; - } - RETURN_EMPTYVECTOR(char); -} \ No newline at end of file