Gets messages form the pc and translates it to I2C and back.

Dependencies:   DevInterfaces I2Cinterfaces MCP4725 mbed

Committer:
katrijnverhasselt
Date:
Wed May 18 11:22:41 2016 +0000
Revision:
0:b40341017545
Child:
2:2330ad8b1baa
Full program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
katrijnverhasselt 0:b40341017545 1 #pragma once
katrijnverhasselt 0:b40341017545 2
katrijnverhasselt 0:b40341017545 3 #include <string>
katrijnverhasselt 0:b40341017545 4 #include "mbed.h"
katrijnverhasselt 0:b40341017545 5 #include "Utility.h"
katrijnverhasselt 0:b40341017545 6
katrijnverhasselt 0:b40341017545 7 // Implements the Data-Link layer, translating a raw message to MessageInfo and back
katrijnverhasselt 0:b40341017545 8 class Translator {
katrijnverhasselt 0:b40341017545 9 public:
katrijnverhasselt 0:b40341017545 10 // Contains easy retreivable message info
katrijnverhasselt 0:b40341017545 11 struct MessageInfo {
katrijnverhasselt 0:b40341017545 12 enum ECommandType { NONE, READ, WRITE, OPTION, ERROR } CommandType;
katrijnverhasselt 0:b40341017545 13 int Channel; //Not used
katrijnverhasselt 0:b40341017545 14 int DacValue;
katrijnverhasselt 0:b40341017545 15
katrijnverhasselt 0:b40341017545 16 MessageInfo();
katrijnverhasselt 0:b40341017545 17
katrijnverhasselt 0:b40341017545 18 // Function to more easily check CommandType
katrijnverhasselt 0:b40341017545 19 bool IsNone();
katrijnverhasselt 0:b40341017545 20 bool IsRead();
katrijnverhasselt 0:b40341017545 21 bool IsWrite();
katrijnverhasselt 0:b40341017545 22 bool IsOption();
katrijnverhasselt 0:b40341017545 23 };
katrijnverhasselt 0:b40341017545 24
katrijnverhasselt 0:b40341017545 25 private:
katrijnverhasselt 0:b40341017545 26 // Contains the raw message in bytes
katrijnverhasselt 0:b40341017545 27 const int8_t* _rawMessage;
katrijnverhasselt 0:b40341017545 28 // Size of the raw message
katrijnverhasselt 0:b40341017545 29 int _size;
katrijnverhasselt 0:b40341017545 30 // Message info, is populated in SetRawMessage
katrijnverhasselt 0:b40341017545 31 MessageInfo _message;
katrijnverhasselt 0:b40341017545 32
katrijnverhasselt 0:b40341017545 33 public:
katrijnverhasselt 0:b40341017545 34 // Contains rules about how the raw message is formatted
katrijnverhasselt 0:b40341017545 35 struct Rules {
katrijnverhasselt 0:b40341017545 36 static int StartCharIndex;
katrijnverhasselt 0:b40341017545 37 static int8_t StartChar;
katrijnverhasselt 0:b40341017545 38 static int CharsToReadIndex;
katrijnverhasselt 0:b40341017545 39 static int CharsToReadOffset;
katrijnverhasselt 0:b40341017545 40 static int rwoIndex;
katrijnverhasselt 0:b40341017545 41 static int8_t ReadChar;
katrijnverhasselt 0:b40341017545 42 static int8_t WriteChar;
katrijnverhasselt 0:b40341017545 43 static int8_t OptionChar;
katrijnverhasselt 0:b40341017545 44 static int8_t ErrorChar;
katrijnverhasselt 0:b40341017545 45 //static int ChannelIndex;
katrijnverhasselt 0:b40341017545 46 static int DataIndex;
katrijnverhasselt 0:b40341017545 47 static int DataLength;
katrijnverhasselt 0:b40341017545 48
katrijnverhasselt 0:b40341017545 49 static int ReadCmdSize;
katrijnverhasselt 0:b40341017545 50 static int WriteCmdSize;
katrijnverhasselt 0:b40341017545 51 static int ErrorCmdSize;
katrijnverhasselt 0:b40341017545 52 };
katrijnverhasselt 0:b40341017545 53
katrijnverhasselt 0:b40341017545 54 private:
katrijnverhasselt 0:b40341017545 55 // Private constructor: no class instance allowed
katrijnverhasselt 0:b40341017545 56 Translator();
katrijnverhasselt 0:b40341017545 57
katrijnverhasselt 0:b40341017545 58 public:
katrijnverhasselt 0:b40341017545 59 // <Handig om weten: dit is een NULL ('\0') terminated character array dat terug wordt gegeven.
katrijnverhasselt 0:b40341017545 60 // Dit is nodig omdat printf("%s", cmd) niet kan weten hoe lang de array is en zal simpelweg
katrijnverhasselt 0:b40341017545 61 // blijven lezen tot het toevallig een NULL karakter tegenkomt.
katrijnverhasselt 0:b40341017545 62 // cmdSize geeft de grootte van de pointer ZONDER het null karakter zodat het zowel veilig
katrijnverhasselt 0:b40341017545 63 // kan gebruikt worden in printf en andere functies die geen null karakter vereisen (en waarbij
katrijnverhasselt 0:b40341017545 64 // dus het NULL karakter niet zal ingelezen worden>
katrijnverhasselt 0:b40341017545 65 // Translate MessageInfo to raw int8_t* (NULL terminated)
katrijnverhasselt 0:b40341017545 66 static bool Translate(MessageInfo info, int8_t** const cmd, int* const cmdSize);
katrijnverhasselt 0:b40341017545 67 // <Hier bijvoorbeeld is het NULL karakter niet vereist omdat de grootte wordt opgevraagt
katrijnverhasselt 0:b40341017545 68 // Indien de int8_t* van vorige functie hier terug wordt in gezet volstaat het om ook zijn
katrijnverhasselt 0:b40341017545 69 // cmdSize te gebruiken: het NULL karakter valt hier buiten en wordt daarom dus niet gelezen
katrijnverhasselt 0:b40341017545 70 // Dit zal ik toevoegen aan de ondervonden problemen.>
katrijnverhasselt 0:b40341017545 71 // Translate raw int8_t* message to MessageInfo
katrijnverhasselt 0:b40341017545 72 static bool Translate(const int8_t* const cmd, int cmdSize, MessageInfo* const info);
katrijnverhasselt 0:b40341017545 73
katrijnverhasselt 0:b40341017545 74
katrijnverhasselt 0:b40341017545 75 private:
katrijnverhasselt 0:b40341017545 76 void SetMessageInfo();
katrijnverhasselt 0:b40341017545 77 void ResetMessageInfo();
katrijnverhasselt 0:b40341017545 78 void InvalidateMessage();
katrijnverhasselt 0:b40341017545 79
katrijnverhasselt 0:b40341017545 80 };