
mbed2 pre-final
Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
token_decoder.cpp@5:7ca9ea4cde3a, 2020-06-15 (annotated)
- Committer:
- domino5740
- Date:
- Mon Jun 15 17:33:23 2020 +0000
- Revision:
- 5:7ca9ea4cde3a
- Parent:
- 4:a8494b656292
final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
domino5740 | 2:7dc265489818 | 1 | #include "token_decoder.h" |
domino5740 | 2:7dc265489818 | 2 | #include <string.h> |
domino5740 | 2:7dc265489818 | 3 | #include <stdio.h> |
domino5740 | 2:7dc265489818 | 4 | |
domino5740 | 2:7dc265489818 | 5 | extern unsigned char ucTokenNr; |
domino5740 | 2:7dc265489818 | 6 | extern struct Token asToken[MAX_TOKEN_NR]; |
domino5740 | 2:7dc265489818 | 7 | extern struct Keyword asKeywordList[MAX_KEYWORD_NR]; |
domino5740 | 2:7dc265489818 | 8 | |
domino5740 | 2:7dc265489818 | 9 | unsigned char TokenDecoder::ucFindTokensInString(char *pcString) { |
domino5740 | 2:7dc265489818 | 10 | |
domino5740 | 2:7dc265489818 | 11 | ucTokenNr = 0; |
domino5740 | 2:7dc265489818 | 12 | char *pcTokenStart = pcString; |
domino5740 | 2:7dc265489818 | 13 | pcTokenStart = strtok(pcString, " "); |
domino5740 | 2:7dc265489818 | 14 | |
domino5740 | 2:7dc265489818 | 15 | while((pcTokenStart != '\0') && (ucTokenNr < MAX_TOKEN_NR)) { |
domino5740 | 2:7dc265489818 | 16 | asToken[ucTokenNr].uValue.pcString = pcTokenStart; |
domino5740 | 2:7dc265489818 | 17 | ucTokenNr++; |
domino5740 | 4:a8494b656292 | 18 | pcTokenStart = strtok(NULL, " "); |
domino5740 | 2:7dc265489818 | 19 | |
domino5740 | 2:7dc265489818 | 20 | } |
domino5740 | 2:7dc265489818 | 21 | |
domino5740 | 2:7dc265489818 | 22 | return ucTokenNr; |
domino5740 | 2:7dc265489818 | 23 | } |
domino5740 | 2:7dc265489818 | 24 | |
domino5740 | 2:7dc265489818 | 25 | enum Result TokenDecoder::eStringToKeyword (char pcStr[], enum KeywordCode *peKeywordCode) { |
domino5740 | 2:7dc265489818 | 26 | |
domino5740 | 2:7dc265489818 | 27 | unsigned char ucKeywordCounter; |
domino5740 | 2:7dc265489818 | 28 | |
domino5740 | 2:7dc265489818 | 29 | for(ucKeywordCounter = 0; ucKeywordCounter < MAX_KEYWORD_NR; ucKeywordCounter++) { |
domino5740 | 2:7dc265489818 | 30 | if(strcmp(pcStr, asKeywordList[ucKeywordCounter].cString) == 0) { |
domino5740 | 2:7dc265489818 | 31 | *peKeywordCode = asKeywordList[ucKeywordCounter].eCode; |
domino5740 | 2:7dc265489818 | 32 | return OK; |
domino5740 | 2:7dc265489818 | 33 | } |
domino5740 | 2:7dc265489818 | 34 | } |
domino5740 | 2:7dc265489818 | 35 | return ERR; |
domino5740 | 2:7dc265489818 | 36 | } |
domino5740 | 2:7dc265489818 | 37 | |
domino5740 | 2:7dc265489818 | 38 | void TokenDecoder::DecodeTokens(void) { |
domino5740 | 2:7dc265489818 | 39 | |
domino5740 | 2:7dc265489818 | 40 | unsigned char ucTokenCounter; |
domino5740 | 2:7dc265489818 | 41 | |
domino5740 | 2:7dc265489818 | 42 | for(ucTokenCounter = 0; ucTokenCounter < ucTokenNr; ucTokenCounter++) { |
domino5740 | 2:7dc265489818 | 43 | if(eStringToKeyword(asToken[ucTokenCounter].uValue.pcString, &asToken[ucTokenCounter].uValue.eKeyword) == OK) { |
domino5740 | 2:7dc265489818 | 44 | asToken[ucTokenCounter].eType = KEYWORD; |
domino5740 | 2:7dc265489818 | 45 | } |
domino5740 | 5:7ca9ea4cde3a | 46 | else if(sscanf(asToken[ucTokenCounter].uValue.pcString, "%x", &asToken[ucTokenCounter].uValue.uiNumber)){ |
domino5740 | 2:7dc265489818 | 47 | asToken[ucTokenCounter].eType = NUMBER; |
domino5740 | 2:7dc265489818 | 48 | } |
domino5740 | 2:7dc265489818 | 49 | else { |
domino5740 | 2:7dc265489818 | 50 | asToken[ucTokenCounter].eType = STRING; |
domino5740 | 2:7dc265489818 | 51 | } |
domino5740 | 2:7dc265489818 | 52 | } |
domino5740 | 2:7dc265489818 | 53 | } |
domino5740 | 2:7dc265489818 | 54 | |
domino5740 | 2:7dc265489818 | 55 | void TokenDecoder::DecodeMsg(char *pcString) { |
domino5740 | 2:7dc265489818 | 56 | ucTokenNr = ucFindTokensInString(pcString); |
domino5740 | 2:7dc265489818 | 57 | DecodeTokens(); |
domino5740 | 2:7dc265489818 | 58 | } |