last version

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

main.cpp

Committer:
bolko
Date:
2020-06-09
Revision:
2:e23243b26a23
Parent:
1:d562d46c33b7

File content as of revision 2:e23243b26a23:

#include "mbed.h"
#include "command_decoder.h"
#include "servo_gui.h"

#define CR '\r'

Serial MyUART(USBTX, USBRX,9600);
ServoGui MyServoGui;
CommandDecoder MyCommandDecoder;

uint8_t puts(char *cBufferTransmit, unsigned char ucBufferSize){
    unsigned char ucCharacterCounter;   
    
    for(ucCharacterCounter = 0; ucCharacterCounter <= ucBufferSize; ucCharacterCounter++){      
        if(cBufferTransmit[ucBufferSize] == NULL){
        break;
        }
    }       
    if(ucCharacterCounter == ucBufferSize){
        return 1;
    }
        
    for(unsigned char ucCharacterCounter = 0; cBufferTransmit[ucCharacterCounter] != NULL; ucCharacterCounter++){
        MyUART.putc(cBufferTransmit[ucCharacterCounter]); 
    }                              
    MyUART.putc(CR);           
    return 0;     
  } 
  
uint8_t gets(char *cBufferReceived, unsigned char ucBufferSize){
    unsigned char ucCharacterCounter = 0;
    
    while(ucCharacterCounter < ucBufferSize){
        cBufferReceived[ucCharacterCounter] = MyUART.getc(); 
        if(cBufferReceived[ucCharacterCounter] == CR){
           cBufferReceived[ucCharacterCounter] = NULL; 
           return 0;        
        }
        ucCharacterCounter++;
    }    
    return 1;
} 

void TokenHandling(){  
    char cID[] = "id_0x777";
    char cUnkownCommand[] = "unknowncommand";
    char cOK[] = "ok";
    
    if((MyCommandDecoder.ucTokenNr>0) && (MyCommandDecoder.asToken[0].eType == KEYWORD)){
       switch(MyCommandDecoder.asToken[0].uValue.eKeyword){
            case ID:
                puts(cID);
                break;
            case CALLIB:
                MyServoGui.ServoCallib();
                puts(cOK);
                break;
            case GOTO:
                if(MyCommandDecoder.asToken[1].eType == NUMBER){
                  MyServoGui.ServoGoTo(MyCommandDecoder.asToken[1].uValue.uiNumber);
                  MyServoGui.sServo.uiPreviousPosition = MyCommandDecoder.asToken[1].uValue.uiNumber;   
                  puts(cOK);                         
                }
                else{
                   puts(cUnkownCommand);
                }
                break;   
            case STEP:
                if(MyCommandDecoder.asToken[1].eType == NUMBER){
                  MyServoGui.ServoGoTo(MyServoGui.sServo.uiPreviousPosition + MyCommandDecoder.asToken[1].uValue.uiNumber);
                  MyServoGui.sServo.uiPreviousPosition = MyServoGui.sServo.uiPreviousPosition + MyCommandDecoder.asToken[1].uValue.uiNumber; 
                  puts(cOK); 
                }
                else{
                 puts(cUnkownCommand);
                }  
                break;
            default:
                puts(cUnkownCommand);
                break;                                                                   
        }
    }
    else {
        puts(cUnkownCommand,sizeof(cUnkownCommand));
    }       
}              

int main(){    
   char cUnkownCommand[] = "unkowncommand"; 
   char cBufferReceived[10];

    while(1){   
          
          if(gets(cBufferReceived,sizeof(cBufferReceived)) == 0){
              MyCommandDecoder.DecodeMsg(cBufferReceived);
              TokenHandling();
              
          }
          else{
              puts(cUnkownCommand,sizeof(cUnkownCommand));
          } 
                              
    }     
}