Gets messages form the pc and translates it to I2C and back.
Dependencies: DevInterfaces I2Cinterfaces MCP4725 mbed
Translator.h@0:b40341017545, 2016-05-18 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |