callib

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

Committer:
filipksiezyc
Date:
Tue Jun 09 10:21:57 2020 +0000
Revision:
0:befccd954577
1331;

Who changed what in which revision?

UserRevisionLine numberNew 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