mbed2 zad 5b

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

Revision:
4:7855d3ab4c15
Child:
5:cafab5a4d1c9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Dekodowanie/Tokeny/Tokeny.cpp	Mon Jun 08 21:49:36 2020 +0000
@@ -0,0 +1,101 @@
+#include "Tokeny.h"
+
+enum Result{OK, ERROR};
+
+extern unsigned char ucTokenNr;
+extern struct Token asToken[MAX_TOKEN_NR];
+extern struct Keyword asKeywordList[MAX_KEYWORD_NR];
+
+
+void ReplaceCharactersInString(char pcString[], char cOldChar, char cNewChar)
+{
+        char *pcStringCharacters = pcString;
+        pcStringCharacters = strchr(pcStringCharacters, cOldChar);
+        while(pcStringCharacters != NULL)
+        {
+                *pcStringCharacters = cNewChar;
+                pcStringCharacters = strchr(pcStringCharacters+1, cOldChar);
+        }
+}
+
+enum Result eHexStringToUInt(char pcStr[], unsigned int *puiValue)
+{
+    char *pcEnd;
+    unsigned char ucCharCounter;
+    if((strncmp(pcStr, "0x", 2) != 0) ||(strlen(pcStr)) != 6) 
+    {
+            return ERROR;
+    }
+    for(ucCharCounter = 2; pcStr[ucCharCounter] != NULL; ucCharCounter++)
+    {
+            if((strncmp(pcStr+ucCharCounter, "0", 1) < 0) || (strncmp(pcStr+ucCharCounter, "F", 1) > 0) || ((strncmp(pcStr+ucCharCounter, "9", 1) > 0) && (strncmp(pcStr+ucCharCounter, "A", 1) < 0))) 
+            {   
+                    return ERROR;
+            }       
+    }
+    *puiValue = strtol(pcStr, &pcEnd, 0);
+        
+    return OK;
+}
+
+unsigned char ucFindTokensInString (char *pcString)
+{
+    char *pcTokenStart = pcString;
+    ucTokenNr = 0;
+    pcTokenStart = strtok(pcString, " ");
+    while((pcTokenStart != NULL) && (ucTokenNr < MAX_TOKEN_NR))
+    {      
+            asToken[ucTokenNr].uValue.pcString = pcTokenStart;
+            ucTokenNr++;     
+            pcTokenStart = strchr(pcTokenStart, ' ');
+            pcTokenStart = strtok(pcTokenStart, " ");
+    }
+
+    return ucTokenNr;
+}
+
+enum Result eStringToKeyword (char pcStr[], enum KeywordCode *peKeywordCode)
+{
+        unsigned char ucKeywordListCounter;
+        
+        for(ucKeywordListCounter = 0; ucKeywordListCounter < MAX_KEYWORD_NR; ucKeywordListCounter++)
+        {
+                if(strcmp(pcStr, asKeywordList[ucKeywordListCounter].cString) == 0) 
+                {
+                        *peKeywordCode = asKeywordList[ucKeywordListCounter].eCode;
+                        return OK;
+                }
+        }
+        return ERROR;
+}
+
+void DecodeTokens(void)
+{
+        unsigned char ucTokenListCounter;
+        struct Token *TokenValue;
+
+        for(ucTokenListCounter = 0; ucTokenListCounter < ucTokenNr; ucTokenListCounter++)
+        {
+            TokenValue = &asToken[ucTokenListCounter];
+            if( eStringToKeyword(TokenValue->uValue.pcString, &TokenValue->uValue.eKeyword) == OK )
+            {
+                    TokenValue->eType = KEYWORD;
+            }
+            else if( eHexStringToUInt(TokenValue->uValue.pcString, &TokenValue->uValue.uiNumber) == OK )
+            {
+                    TokenValue->eType = NUMBER;
+            }
+            else
+            {
+                    TokenValue->eType = STRING;
+            }
+        }
+}
+
+void DecodeMsg(char *pcString)
+{
+        ucFindTokensInString(pcString);
+        DecodeTokens();
+}
+
+