Mateusz Garwol / Mbed 2 deprecated 2_5

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

Committer:
matis755
Date:
Wed May 20 15:42:07 2020 +0000
Revision:
2:8788d711db7e
Child:
3:6fc7976cc5bf
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
matis755 2:8788d711db7e 1 #include "string.h"
matis755 2:8788d711db7e 2
matis755 2:8788d711db7e 3
matis755 2:8788d711db7e 4 struct Token asToken[MAX_TOKEN_NR];
matis755 2:8788d711db7e 5
matis755 2:8788d711db7e 6 struct Keyword asKeywordList[MAX_KEYWORD_NR]=
matis755 2:8788d711db7e 7 {
matis755 2:8788d711db7e 8 {CLB,"callib"},
matis755 2:8788d711db7e 9 {GT, "goto" },
matis755 2:8788d711db7e 10 };
matis755 2:8788d711db7e 11
matis755 2:8788d711db7e 12
matis755 2:8788d711db7e 13 unsigned char ucTokenCnt;
matis755 2:8788d711db7e 14
matis755 2:8788d711db7e 15 void CopyString(char pcSource[], char pcDestination[]){
matis755 2:8788d711db7e 16
matis755 2:8788d711db7e 17 unsigned char ucCharCounter;
matis755 2:8788d711db7e 18
matis755 2:8788d711db7e 19 for(ucCharCounter=0;pcSource[ucCharCounter]!='\0';ucCharCounter++){
matis755 2:8788d711db7e 20 pcDestination[ucCharCounter] = pcSource[ucCharCounter];
matis755 2:8788d711db7e 21 }
matis755 2:8788d711db7e 22 pcDestination[ucCharCounter] = '\0';
matis755 2:8788d711db7e 23 }
matis755 2:8788d711db7e 24
matis755 2:8788d711db7e 25
matis755 2:8788d711db7e 26 enum CompResult eCompareString(char pcStr1[], char pcStr2[]){
matis755 2:8788d711db7e 27
matis755 2:8788d711db7e 28 unsigned char ucCharCounter;
matis755 2:8788d711db7e 29
matis755 2:8788d711db7e 30 for(ucCharCounter=0;pcStr1[ucCharCounter] != '\0';ucCharCounter++){
matis755 2:8788d711db7e 31 if (pcStr1[ucCharCounter] != pcStr2[ucCharCounter]) return DIFFERENT;
matis755 2:8788d711db7e 32 }
matis755 2:8788d711db7e 33 return EQUAL;
matis755 2:8788d711db7e 34 }
matis755 2:8788d711db7e 35
matis755 2:8788d711db7e 36
matis755 2:8788d711db7e 37 void AppendString (char pcSourceStr[],char pcDestinationStr[]){
matis755 2:8788d711db7e 38
matis755 2:8788d711db7e 39 unsigned char ucEndPointer;
matis755 2:8788d711db7e 40
matis755 2:8788d711db7e 41 for(ucEndPointer=0;pcDestinationStr[ucEndPointer]!='\0';ucEndPointer++) {}
matis755 2:8788d711db7e 42 CopyString(pcSourceStr,pcDestinationStr+ucEndPointer);
matis755 2:8788d711db7e 43 }
matis755 2:8788d711db7e 44
matis755 2:8788d711db7e 45
matis755 2:8788d711db7e 46 void ReplaceCharactersInString(char pcString[],char cOldChar,char cNewChar){
matis755 2:8788d711db7e 47
matis755 2:8788d711db7e 48 unsigned char ucCharCounter;
matis755 2:8788d711db7e 49
matis755 2:8788d711db7e 50 for(ucCharCounter=0;pcString[ucCharCounter]!='\0';ucCharCounter++){
matis755 2:8788d711db7e 51 if(pcString[ucCharCounter] == cOldChar) pcString[ucCharCounter] = cNewChar;
matis755 2:8788d711db7e 52 }
matis755 2:8788d711db7e 53 }
matis755 2:8788d711db7e 54
matis755 2:8788d711db7e 55
matis755 2:8788d711db7e 56 void UIntToHexStr(unsigned int uiValue, char pcStr[]){
matis755 2:8788d711db7e 57
matis755 2:8788d711db7e 58 unsigned char ucNibbleCounter;
matis755 2:8788d711db7e 59 unsigned char ucCurrentNibble;
matis755 2:8788d711db7e 60
matis755 2:8788d711db7e 61 pcStr[0] = '0';
matis755 2:8788d711db7e 62 pcStr[1] = 'x';
matis755 2:8788d711db7e 63 for(ucNibbleCounter=0;ucNibbleCounter<4;ucNibbleCounter++){
matis755 2:8788d711db7e 64 ucCurrentNibble = ((uiValue >> ucNibbleCounter*4) & HEX_bm);
matis755 2:8788d711db7e 65 if(ucCurrentNibble>9)
matis755 2:8788d711db7e 66 pcStr[5-ucNibbleCounter] = ucCurrentNibble - 10 + 'A';
matis755 2:8788d711db7e 67 else
matis755 2:8788d711db7e 68 pcStr[5-ucNibbleCounter] = ucCurrentNibble + '0';
matis755 2:8788d711db7e 69 }
matis755 2:8788d711db7e 70 pcStr[6] = '\0';
matis755 2:8788d711db7e 71 }
matis755 2:8788d711db7e 72
matis755 2:8788d711db7e 73
matis755 2:8788d711db7e 74 enum Result eHexStringToUInt(char pcStr[],unsigned int *puiValue){
matis755 2:8788d711db7e 75
matis755 2:8788d711db7e 76 unsigned char ucCharCounter;
matis755 2:8788d711db7e 77
matis755 2:8788d711db7e 78 if((pcStr[0] != '0') | (pcStr[1] != 'x') | (pcStr[2] == '\0'))
matis755 2:8788d711db7e 79 return NOK;
matis755 2:8788d711db7e 80 *puiValue = 0;
matis755 2:8788d711db7e 81 for(ucCharCounter=2;ucCharCounter<7;ucCharCounter++){
matis755 2:8788d711db7e 82 if(pcStr[ucCharCounter] == '\0')
matis755 2:8788d711db7e 83 return OK;
matis755 2:8788d711db7e 84 *puiValue = *puiValue << 4;
matis755 2:8788d711db7e 85 if(pcStr[ucCharCounter] >= 'A')
matis755 2:8788d711db7e 86 *puiValue = *puiValue | (pcStr[ucCharCounter] - 'A' + 10);
matis755 2:8788d711db7e 87 else
matis755 2:8788d711db7e 88 *puiValue = *puiValue | (pcStr[ucCharCounter] - '0');
matis755 2:8788d711db7e 89 }
matis755 2:8788d711db7e 90 return OK;
matis755 2:8788d711db7e 91 }
matis755 2:8788d711db7e 92
matis755 2:8788d711db7e 93 void AppendUIntToString (unsigned int uiValue, char pcDestinationStr[]){
matis755 2:8788d711db7e 94
matis755 2:8788d711db7e 95 unsigned char ucEndPointer;
matis755 2:8788d711db7e 96
matis755 2:8788d711db7e 97 for(ucEndPointer=0;pcDestinationStr[ucEndPointer]!='\0';ucEndPointer++) {}
matis755 2:8788d711db7e 98 UIntToHexStr(uiValue,pcDestinationStr+ucEndPointer);
matis755 2:8788d711db7e 99 }
matis755 2:8788d711db7e 100
matis755 2:8788d711db7e 101
matis755 2:8788d711db7e 102
matis755 2:8788d711db7e 103
matis755 2:8788d711db7e 104 unsigned char ucFindTokensInString(char *pcString){
matis755 2:8788d711db7e 105
matis755 2:8788d711db7e 106 unsigned char ucTokenPointer;
matis755 2:8788d711db7e 107 unsigned char ucDelimiterCounter;
matis755 2:8788d711db7e 108 char cCurrentChar;
matis755 2:8788d711db7e 109 enum State {TOKEN, DELIMITER};
matis755 2:8788d711db7e 110 enum State eState = DELIMITER;
matis755 2:8788d711db7e 111 ucDelimiterCounter = 0;
matis755 2:8788d711db7e 112
matis755 2:8788d711db7e 113 for(ucTokenPointer=0;;ucTokenPointer++){
matis755 2:8788d711db7e 114 cCurrentChar = pcString[ucTokenPointer];
matis755 2:8788d711db7e 115 switch(eState){
matis755 2:8788d711db7e 116 case DELIMITER:
matis755 2:8788d711db7e 117 if(cCurrentChar == '\0')
matis755 2:8788d711db7e 118 return ucDelimiterCounter;
matis755 2:8788d711db7e 119 else if(cCurrentChar == ' ') {}
matis755 2:8788d711db7e 120 else {
matis755 2:8788d711db7e 121 eState = TOKEN;
matis755 2:8788d711db7e 122 asToken[ucDelimiterCounter].uValue.pcString = pcString+ucTokenPointer;
matis755 2:8788d711db7e 123 ucDelimiterCounter++;
matis755 2:8788d711db7e 124 }
matis755 2:8788d711db7e 125 break;
matis755 2:8788d711db7e 126 case TOKEN:
matis755 2:8788d711db7e 127 if(cCurrentChar == '\0')
matis755 2:8788d711db7e 128 return ucDelimiterCounter;
matis755 2:8788d711db7e 129 else if(ucDelimiterCounter == MAX_TOKEN_NR)
matis755 2:8788d711db7e 130 return ucDelimiterCounter;
matis755 2:8788d711db7e 131 else if(cCurrentChar != ' ') {}
matis755 2:8788d711db7e 132 else
matis755 2:8788d711db7e 133 eState = DELIMITER;
matis755 2:8788d711db7e 134 break;
matis755 2:8788d711db7e 135 }
matis755 2:8788d711db7e 136 }
matis755 2:8788d711db7e 137 }
matis755 2:8788d711db7e 138
matis755 2:8788d711db7e 139 enum Result eStringToKeyword (char pcStr[],enum KeywordCode *peKeywordCode){
matis755 2:8788d711db7e 140
matis755 2:8788d711db7e 141 unsigned char ucTokenCounter;
matis755 2:8788d711db7e 142
matis755 2:8788d711db7e 143 for(ucTokenCounter=0;ucTokenCounter<MAX_TOKEN_NR;ucTokenCounter++){
matis755 2:8788d711db7e 144 if (eCompareString(pcStr,asKeywordList[ucTokenCounter].cString) == EQUAL) {
matis755 2:8788d711db7e 145 *peKeywordCode = asKeywordList[ucTokenCounter].eCode;
matis755 2:8788d711db7e 146 return OK;
matis755 2:8788d711db7e 147 }
matis755 2:8788d711db7e 148 }
matis755 2:8788d711db7e 149 return NOK;
matis755 2:8788d711db7e 150 }
matis755 2:8788d711db7e 151
matis755 2:8788d711db7e 152 void DecodeTokens(unsigned char ucTokenCnt){
matis755 2:8788d711db7e 153
matis755 2:8788d711db7e 154 unsigned char ucTokenCounter;
matis755 2:8788d711db7e 155 Token* tValue;
matis755 2:8788d711db7e 156
matis755 2:8788d711db7e 157 for(ucTokenCounter=0;ucTokenCounter<ucTokenCnt;ucTokenCounter++){
matis755 2:8788d711db7e 158 tValue = &asToken[ucTokenCounter];
matis755 2:8788d711db7e 159 if (eStringToKeyword(tValue->uValue.pcString,&tValue->uValue.eKeyword) == OK) tValue->eType = KEYWORD;
matis755 2:8788d711db7e 160 else if (eHexStringToUInt(tValue->uValue.pcString,&tValue->uValue.uiNumber) == OK) tValue->eType = NUMBER;
matis755 2:8788d711db7e 161 else tValue->eType = STRING;
matis755 2:8788d711db7e 162 }
matis755 2:8788d711db7e 163 }
matis755 2:8788d711db7e 164
matis755 2:8788d711db7e 165 void DecodeMsg(char *pcString){
matis755 2:8788d711db7e 166
matis755 2:8788d711db7e 167 ucTokenCnt = ucFindTokensInString(pcString);
matis755 2:8788d711db7e 168 ReplaceCharactersInString(pcString,' ','\0');
matis755 2:8788d711db7e 169 DecodeTokens(ucTokenCnt);
matis755 2:8788d711db7e 170 }