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

Dependencies:   DevInterfaces I2Cinterfaces MCP4725 mbed

Revision:
0:b40341017545
Child:
2:2330ad8b1baa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Translator.h	Wed May 18 11:22:41 2016 +0000
@@ -0,0 +1,80 @@
+#pragma once
+
+#include <string>
+#include "mbed.h"
+#include "Utility.h"
+
+// Implements the Data-Link layer, translating a raw message to MessageInfo and back
+class Translator {
+public:
+    // Contains easy retreivable message info
+    struct MessageInfo {
+        enum ECommandType { NONE, READ, WRITE, OPTION, ERROR } CommandType;
+        int Channel; //Not used
+        int DacValue;
+        
+        MessageInfo();
+        
+        // Function to more easily check CommandType
+        bool IsNone();
+        bool IsRead();
+        bool IsWrite();
+        bool IsOption();
+    };
+    
+private:
+    // Contains the raw message in bytes
+    const int8_t* _rawMessage;
+    // Size of the raw message
+    int _size;
+    // Message info, is populated in SetRawMessage
+    MessageInfo _message;
+    
+public:
+    // Contains rules about how the raw message is formatted
+    struct Rules {
+        static int    StartCharIndex;
+        static int8_t StartChar;
+        static int    CharsToReadIndex;
+        static int    CharsToReadOffset;
+        static int    rwoIndex;
+        static int8_t ReadChar;
+        static int8_t WriteChar;
+        static int8_t OptionChar;
+        static int8_t ErrorChar;
+        //static int    ChannelIndex;
+        static int    DataIndex;
+        static int    DataLength;
+
+        static int ReadCmdSize;
+        static int WriteCmdSize;
+        static int ErrorCmdSize;
+    };
+
+private:
+    // Private constructor: no class instance allowed
+    Translator();
+    
+public:
+    // <Handig om weten: dit is een NULL ('\0') terminated character array dat terug wordt gegeven.
+    //  Dit is nodig omdat printf("%s", cmd) niet kan weten hoe lang de array is en zal simpelweg
+    //  blijven lezen tot het toevallig een NULL karakter tegenkomt.
+    //  cmdSize geeft de grootte van de pointer ZONDER het null karakter zodat het zowel veilig
+    //  kan gebruikt worden in printf en andere functies die geen null karakter vereisen (en waarbij
+    //  dus het NULL karakter niet zal ingelezen worden>
+    // Translate MessageInfo to raw int8_t* (NULL terminated)
+    static bool Translate(MessageInfo info, int8_t** const cmd, int* const cmdSize);
+    // <Hier bijvoorbeeld is het NULL karakter niet vereist omdat de grootte wordt opgevraagt
+    //  Indien de int8_t* van vorige functie hier terug wordt in gezet volstaat het om ook zijn
+    //  cmdSize te gebruiken: het NULL karakter valt hier buiten en wordt daarom dus niet gelezen
+    //  Dit zal ik toevoegen aan de ondervonden problemen.>
+    // Translate raw int8_t* message to MessageInfo
+    static bool Translate(const int8_t* const cmd, int cmdSize, MessageInfo* const info);
+
+    
+private:
+    void SetMessageInfo();
+    void ResetMessageInfo();
+    void InvalidateMessage();
+    
+};
\ No newline at end of file