mbed2 pre-final

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

token_decoder.cpp

Committer:
domino5740
Date:
2020-06-14
Revision:
2:7dc265489818
Child:
4:a8494b656292

File content as of revision 2:7dc265489818:

#include "token_decoder.h"
#include <string.h>
#include <stdio.h>

extern unsigned char ucTokenNr;
extern struct Token asToken[MAX_TOKEN_NR];
extern struct Keyword asKeywordList[MAX_KEYWORD_NR];

unsigned char TokenDecoder::ucFindTokensInString(char *pcString) {
    
    ucTokenNr = 0;
    char *pcTokenStart = pcString;
    pcTokenStart = strtok(pcString, " ");
    
    while((pcTokenStart != '\0') && (ucTokenNr < MAX_TOKEN_NR)) {
        asToken[ucTokenNr].uValue.pcString = pcTokenStart;
        ucTokenNr++;
        pcTokenStart = strchr(pcTokenStart, ' ');
        pcTokenStart = strtok(pcTokenStart, " ");
        
    }
    
    return ucTokenNr;
}

enum Result TokenDecoder::eStringToKeyword (char pcStr[], enum KeywordCode *peKeywordCode) {

    unsigned char ucKeywordCounter;

    for(ucKeywordCounter = 0; ucKeywordCounter < MAX_KEYWORD_NR; ucKeywordCounter++) {
        if(strcmp(pcStr, asKeywordList[ucKeywordCounter].cString) == 0) {
            *peKeywordCode = asKeywordList[ucKeywordCounter].eCode;
            return OK;
        }
    }
    return ERR;
}

void TokenDecoder::DecodeTokens(void) {

    unsigned char ucTokenCounter;

    for(ucTokenCounter = 0; ucTokenCounter < ucTokenNr; ucTokenCounter++) {
        if(eStringToKeyword(asToken[ucTokenCounter].uValue.pcString, &asToken[ucTokenCounter].uValue.eKeyword) == OK) {
            asToken[ucTokenCounter].eType = KEYWORD;
        }
        else if(sscanf(asToken[ucTokenCounter].uValue.pcString, "%4x", &asToken[ucTokenCounter].uValue.uiNumber)){
            asToken[ucTokenCounter].eType = NUMBER;
        }
        else {
            asToken[ucTokenCounter].eType = STRING;
        }
    }
}

void TokenDecoder::DecodeMsg(char *pcString) {
    ucTokenNr = ucFindTokensInString(pcString);
    DecodeTokens();
}