mbed5b

Dependencies:   mbed

Committer:
Robsonik16
Date:
Fri May 05 20:00:16 2017 +0000
Revision:
0:d546b014a1e3
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Robsonik16 0:d546b014a1e3 1 #include "string.h"
Robsonik16 0:d546b014a1e3 2 #include "command_decoder.h"
Robsonik16 0:d546b014a1e3 3
Robsonik16 0:d546b014a1e3 4 struct Keyword asKeywordList[MAX_KEYWORD_NR]=
Robsonik16 0:d546b014a1e3 5 {
Robsonik16 0:d546b014a1e3 6 {CALLIB, "callib"},
Robsonik16 0:d546b014a1e3 7 {GOTO, "goto"},
Robsonik16 0:d546b014a1e3 8 {STEP, "step"},
Robsonik16 0:d546b014a1e3 9 {ID, "id"}
Robsonik16 0:d546b014a1e3 10 };
Robsonik16 0:d546b014a1e3 11 struct Token asToken[MAX_TOKEN_NR];
Robsonik16 0:d546b014a1e3 12
Robsonik16 0:d546b014a1e3 13 unsigned char ucTokenNr;
Robsonik16 0:d546b014a1e3 14
Robsonik16 0:d546b014a1e3 15 unsigned char ucFindTokensInString(char *pcString){
Robsonik16 0:d546b014a1e3 16
Robsonik16 0:d546b014a1e3 17 enum LedState { TOKEN, DELIMITER};
Robsonik16 0:d546b014a1e3 18 enum LedState eState = DELIMITER;
Robsonik16 0:d546b014a1e3 19
Robsonik16 0:d546b014a1e3 20 unsigned char ucLicznikTokenu = 0;
Robsonik16 0:d546b014a1e3 21 unsigned char ucLicznikZnaku = 0;
Robsonik16 0:d546b014a1e3 22 char cAktualnyZnak;
Robsonik16 0:d546b014a1e3 23
Robsonik16 0:d546b014a1e3 24 for(ucLicznikZnaku=0; pcString[ucLicznikZnaku] != NULL; ucLicznikZnaku++){
Robsonik16 0:d546b014a1e3 25 cAktualnyZnak = pcString[ucLicznikZnaku];
Robsonik16 0:d546b014a1e3 26 switch(eState){
Robsonik16 0:d546b014a1e3 27 case DELIMITER:
Robsonik16 0:d546b014a1e3 28 if(cAktualnyZnak == DELIMITER_CHAR){
Robsonik16 0:d546b014a1e3 29 eState = DELIMITER;
Robsonik16 0:d546b014a1e3 30 }else if(ucLicznikTokenu < MAX_TOKEN_NR){
Robsonik16 0:d546b014a1e3 31 eState = TOKEN;
Robsonik16 0:d546b014a1e3 32 asToken[ucLicznikTokenu].uValue.pcString = pcString + ucLicznikZnaku;
Robsonik16 0:d546b014a1e3 33 ucLicznikTokenu++;
Robsonik16 0:d546b014a1e3 34 }else{
Robsonik16 0:d546b014a1e3 35 return(ucLicznikTokenu);
Robsonik16 0:d546b014a1e3 36 }
Robsonik16 0:d546b014a1e3 37 break;
Robsonik16 0:d546b014a1e3 38 case TOKEN:
Robsonik16 0:d546b014a1e3 39 if(cAktualnyZnak!= DELIMITER_CHAR){
Robsonik16 0:d546b014a1e3 40 eState = TOKEN;
Robsonik16 0:d546b014a1e3 41 }else{
Robsonik16 0:d546b014a1e3 42 eState = DELIMITER;
Robsonik16 0:d546b014a1e3 43 }
Robsonik16 0:d546b014a1e3 44 break;
Robsonik16 0:d546b014a1e3 45 }
Robsonik16 0:d546b014a1e3 46 }
Robsonik16 0:d546b014a1e3 47 return(ucLicznikTokenu);
Robsonik16 0:d546b014a1e3 48 }
Robsonik16 0:d546b014a1e3 49
Robsonik16 0:d546b014a1e3 50 enum Result eStringToKeyword(char pcStr[], enum KeywordCode *peKeywordCode){
Robsonik16 0:d546b014a1e3 51
Robsonik16 0:d546b014a1e3 52 unsigned char ucKeywordIndex;
Robsonik16 0:d546b014a1e3 53
Robsonik16 0:d546b014a1e3 54 for(ucKeywordIndex=0; ucKeywordIndex < MAX_KEYWORD_NR; ucKeywordIndex++){
Robsonik16 0:d546b014a1e3 55 if(eCompareString(pcStr, asKeywordList[ucKeywordIndex].cString) == EQUAL){
Robsonik16 0:d546b014a1e3 56 *peKeywordCode = asKeywordList[ucKeywordIndex].eCode;
Robsonik16 0:d546b014a1e3 57 return(OK);
Robsonik16 0:d546b014a1e3 58 }
Robsonik16 0:d546b014a1e3 59 }
Robsonik16 0:d546b014a1e3 60 return(ERROR);
Robsonik16 0:d546b014a1e3 61 }
Robsonik16 0:d546b014a1e3 62
Robsonik16 0:d546b014a1e3 63 void DecodeTokens(void){
Robsonik16 0:d546b014a1e3 64
Robsonik16 0:d546b014a1e3 65 unsigned int uiNumber;
Robsonik16 0:d546b014a1e3 66 unsigned char ucTokenIndex;
Robsonik16 0:d546b014a1e3 67 enum KeywordCode eKeyword;
Robsonik16 0:d546b014a1e3 68
Robsonik16 0:d546b014a1e3 69 for(ucTokenIndex=0; ucTokenIndex < ucTokenNr; ucTokenIndex++){
Robsonik16 0:d546b014a1e3 70 if((eStringToKeyword (asToken[ucTokenIndex].uValue.pcString, &eKeyword))== OK){
Robsonik16 0:d546b014a1e3 71 asToken[ucTokenIndex].eType = KEYWORD;
Robsonik16 0:d546b014a1e3 72 asToken[ucTokenIndex].uValue.eKeyword=eKeyword;
Robsonik16 0:d546b014a1e3 73 }else if((eHexStringToUInt(asToken[ucTokenIndex].uValue.pcString,&uiNumber))== OK){
Robsonik16 0:d546b014a1e3 74 asToken[ucTokenIndex].eType = NUMBER;
Robsonik16 0:d546b014a1e3 75 asToken[ucTokenIndex].uValue.uiNumber = uiNumber;
Robsonik16 0:d546b014a1e3 76 }else{
Robsonik16 0:d546b014a1e3 77 asToken[ucTokenIndex].eType = STRING;
Robsonik16 0:d546b014a1e3 78 }
Robsonik16 0:d546b014a1e3 79 }
Robsonik16 0:d546b014a1e3 80 }
Robsonik16 0:d546b014a1e3 81
Robsonik16 0:d546b014a1e3 82 void DecodeMsg(char *pcString){
Robsonik16 0:d546b014a1e3 83
Robsonik16 0:d546b014a1e3 84 ucTokenNr = ucFindTokensInString (pcString);
Robsonik16 0:d546b014a1e3 85 ReplaceCharactersInString(pcString,' ',NULL);
Robsonik16 0:d546b014a1e3 86 DecodeTokens();
Robsonik16 0:d546b014a1e3 87 }