
callib
Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
TokensHandling.cpp@0:befccd954577, 2020-06-09 (annotated)
- Committer:
- filipksiezyc
- Date:
- Tue Jun 09 10:21:57 2020 +0000
- Revision:
- 0:befccd954577
1331;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
filipksiezyc | 0:befccd954577 | 1 | #include "TokensHandling.h" |
filipksiezyc | 0:befccd954577 | 2 | #include "mbed.h" |
filipksiezyc | 0:befccd954577 | 3 | |
filipksiezyc | 0:befccd954577 | 4 | #define MAX_KEYWORD_NR 4 |
filipksiezyc | 0:befccd954577 | 5 | |
filipksiezyc | 0:befccd954577 | 6 | enum Result {OK, ERR}; |
filipksiezyc | 0:befccd954577 | 7 | |
filipksiezyc | 0:befccd954577 | 8 | struct Keyword{ |
filipksiezyc | 0:befccd954577 | 9 | enum KeywordCode eCode; |
filipksiezyc | 0:befccd954577 | 10 | char cString[MAX_KEYWORD_STRING_LTH]; |
filipksiezyc | 0:befccd954577 | 11 | }; |
filipksiezyc | 0:befccd954577 | 12 | |
filipksiezyc | 0:befccd954577 | 13 | struct Keyword asKeywordList[MAX_KEYWORD_NR]={ |
filipksiezyc | 0:befccd954577 | 14 | {CALLIB, "callib"}, |
filipksiezyc | 0:befccd954577 | 15 | {GOTO, "goto"}, |
filipksiezyc | 0:befccd954577 | 16 | {ID, "id"}, |
filipksiezyc | 0:befccd954577 | 17 | {STEP, "step"}, |
filipksiezyc | 0:befccd954577 | 18 | }; |
filipksiezyc | 0:befccd954577 | 19 | |
filipksiezyc | 0:befccd954577 | 20 | void TokensHandler::ReplaceCharactersInString(char *pcString,char cOldChar,char cNewChar){ |
filipksiezyc | 0:befccd954577 | 21 | char *CurrentChar = strchr(pcString,cOldChar); |
filipksiezyc | 0:befccd954577 | 22 | while(*CurrentChar){ |
filipksiezyc | 0:befccd954577 | 23 | *CurrentChar = cNewChar; |
filipksiezyc | 0:befccd954577 | 24 | CurrentChar = strchr(CurrentChar,cOldChar); |
filipksiezyc | 0:befccd954577 | 25 | } |
filipksiezyc | 0:befccd954577 | 26 | } |
filipksiezyc | 0:befccd954577 | 27 | |
filipksiezyc | 0:befccd954577 | 28 | |
filipksiezyc | 0:befccd954577 | 29 | unsigned char TokensHandler::ucFindTokensInString(char *pcString){ |
filipksiezyc | 0:befccd954577 | 30 | char *pcTokenString = pcString; |
filipksiezyc | 0:befccd954577 | 31 | pcTokenString = strtok(pcTokenString, " "); |
filipksiezyc | 0:befccd954577 | 32 | |
filipksiezyc | 0:befccd954577 | 33 | for(ucTokenNr=0;((pcTokenString != NULL) && (ucTokenNr < MAX_TOKEN_NR));ucTokenNr++) |
filipksiezyc | 0:befccd954577 | 34 | { |
filipksiezyc | 0:befccd954577 | 35 | asToken[ucTokenNr].uValue.pcString = pcTokenString; |
filipksiezyc | 0:befccd954577 | 36 | pcTokenString = strtok(NULL, " "); |
filipksiezyc | 0:befccd954577 | 37 | } |
filipksiezyc | 0:befccd954577 | 38 | return ucTokenNr; |
filipksiezyc | 0:befccd954577 | 39 | } |
filipksiezyc | 0:befccd954577 | 40 | |
filipksiezyc | 0:befccd954577 | 41 | |
filipksiezyc | 0:befccd954577 | 42 | |
filipksiezyc | 0:befccd954577 | 43 | enum Result TokensHandler::eStringToKeyword (char pcStr[],enum KeywordCode *peKeywordCode){ |
filipksiezyc | 0:befccd954577 | 44 | unsigned char ucKeywordCounter; |
filipksiezyc | 0:befccd954577 | 45 | |
filipksiezyc | 0:befccd954577 | 46 | for(ucKeywordCounter=0; ucKeywordCounter< MAX_KEYWORD_NR; ucKeywordCounter++){ |
filipksiezyc | 0:befccd954577 | 47 | |
filipksiezyc | 0:befccd954577 | 48 | if( (strcmp(pcStr, asKeywordList[ucKeywordCounter].cString))==0){ |
filipksiezyc | 0:befccd954577 | 49 | *peKeywordCode = asKeywordList[ucKeywordCounter].eCode; |
filipksiezyc | 0:befccd954577 | 50 | return OK; |
filipksiezyc | 0:befccd954577 | 51 | } |
filipksiezyc | 0:befccd954577 | 52 | } |
filipksiezyc | 0:befccd954577 | 53 | return ERR; |
filipksiezyc | 0:befccd954577 | 54 | } |
filipksiezyc | 0:befccd954577 | 55 | |
filipksiezyc | 0:befccd954577 | 56 | void TokensHandler::DecodeTokens(void){ |
filipksiezyc | 0:befccd954577 | 57 | unsigned char ucTokenCounter; |
filipksiezyc | 0:befccd954577 | 58 | struct Token *psCurrentToken; |
filipksiezyc | 0:befccd954577 | 59 | unsigned int uiTokenValue; |
filipksiezyc | 0:befccd954577 | 60 | enum KeywordCode eTokenCode; |
filipksiezyc | 0:befccd954577 | 61 | |
filipksiezyc | 0:befccd954577 | 62 | for(ucTokenCounter= 0; ucTokenCounter< ucTokenNr; ucTokenCounter++){ |
filipksiezyc | 0:befccd954577 | 63 | psCurrentToken= &asToken[ucTokenCounter]; |
filipksiezyc | 0:befccd954577 | 64 | |
filipksiezyc | 0:befccd954577 | 65 | if(sscanf(asToken[ucTokenCounter].uValue.pcString, "%x", &uiTokenValue) == 1 ){ |
filipksiezyc | 0:befccd954577 | 66 | psCurrentToken->eType= NUMBER; |
filipksiezyc | 0:befccd954577 | 67 | psCurrentToken->uValue.uiNumber= uiTokenValue; |
filipksiezyc | 0:befccd954577 | 68 | } |
filipksiezyc | 0:befccd954577 | 69 | else if(OK== eStringToKeyword(psCurrentToken->uValue.pcString, &eTokenCode)){ |
filipksiezyc | 0:befccd954577 | 70 | psCurrentToken->eType=KEYWORD; |
filipksiezyc | 0:befccd954577 | 71 | psCurrentToken->uValue.eKeyword=eTokenCode; |
filipksiezyc | 0:befccd954577 | 72 | } |
filipksiezyc | 0:befccd954577 | 73 | else{ |
filipksiezyc | 0:befccd954577 | 74 | psCurrentToken->eType=STRING; |
filipksiezyc | 0:befccd954577 | 75 | } |
filipksiezyc | 0:befccd954577 | 76 | } |
filipksiezyc | 0:befccd954577 | 77 | } |
filipksiezyc | 0:befccd954577 | 78 | |
filipksiezyc | 0:befccd954577 | 79 | void TokensHandler::DecodeMsg(char *pcString){ |
filipksiezyc | 0:befccd954577 | 80 | ucTokenNr= ucFindTokensInString(pcString); |
filipksiezyc | 0:befccd954577 | 81 | ReplaceCharactersInString(pcString, ' ', NULL); |
filipksiezyc | 0:befccd954577 | 82 | DecodeTokens(); |
filipksiezyc | 0:befccd954577 | 83 | } |
filipksiezyc | 0:befccd954577 | 84 | |
filipksiezyc | 0:befccd954577 | 85 | TokensHandler::TokensHandler(){ |
filipksiezyc | 0:befccd954577 | 86 | ucTokenNr=0; |
filipksiezyc | 0:befccd954577 | 87 | } |
filipksiezyc | 0:befccd954577 | 88 |