mbed2 zad 5b
Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
Dekodowanie/Tokeny/Tokeny.cpp
- Committer:
- krzysiek99
- Date:
- 2020-06-08
- Revision:
- 4:7855d3ab4c15
- Child:
- 5:cafab5a4d1c9
File content as of revision 4:7855d3ab4c15:
#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(); }