app4

Dependencies:   mbed-rtos mbed CRC16

Fork of S5info_APP2 by Éric Bisson

Committer:
ericbisson
Date:
Mon Mar 06 22:46:10 2017 +0000
Revision:
9:01be68364986
Parent:
8:5b87b1f9d91f
Child:
10:8b066285c2e0
ajout crc16

Who changed what in which revision?

UserRevisionLine numberNew 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 8:5b87b1f9d91f 14 vector<char> uart_read(Serial& COM, Serial& pc)
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 charge_utile.push_back('\0'); // end of string pour pouvoir l'afficher
ericbisson 9:01be68364986 45
ericbisson 9:01be68364986 46 return charge_utile;
ericbisson 8:5b87b1f9d91f 47 }
ericbisson 8:5b87b1f9d91f 48 RETURN_EMPTYVECTOR(char);
ericbisson 8:5b87b1f9d91f 49 }