yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

handlers.cpp

Committer:
yuhangzhu
Date:
2013-07-19
Revision:
20:2a5e9d9aadbf
Parent:
12:5e4cba1182ab
Child:
21:4d6b26eecdac

File content as of revision 20:2a5e9d9aadbf:

//mode_idle_handler converts character inputs to state information, which is used for later stages in main function
//parse_phase checks data in the line buffer if it's good write the converted value into address adam_pha otherwise returns error code
//parse_amp checks data in the line buffer if it's good write the converted value into address adam_amp otherwise returns error code


#include "parameters.h"

void mode_idle_handler(int* state, char sel)
{
    if(sel>='1' && sel<='7')
        *state = sel - '0';    //select a mode
    else 
        *state = MODE_IDLE;
}


int parse_phase(char* line_buf, char* adam_pha)
{

    char temp = 0;
    
    if(line_buf[3] == LINEBUF_EMPTY)
        return PARSE_EMPTY;    //empty line
    if(line_buf[3] == LINEBUF_TOOLONG)
        return PARSE_LONG;    //buffer too long
        
    if(line_buf[0] == '0')  //input is 0
    {
        if(line_buf[1] == 255 && line_buf[2] == 255)
        {
            *adam_pha = 0; 
            return PARSE_OK;
        }
        else
            return PARSE_ERR;     
    }
    
    

        
    if(line_buf[1]>='0' && line_buf[1]<='4' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[0] == '-')
    {
        temp = (line_buf[1] - '0')*10;
        temp += line_buf[2] - '0';
        *adam_pha = temp/7;

        if(temp % 7 == 0)
            return PARSE_OK;
        else
            return PARSE_ROUNDED;
    }  //double digit input
    else if(line_buf[2] == 255 && line_buf[1]>='0' && line_buf[1] <= '9' && line_buf[0] == '-')
    {
        temp = line_buf[1] - '0';
        *adam_pha = temp/7;

        if(temp % 7 == 0)
            return PARSE_OK;
        else
            return PARSE_ROUNDED;
    }   //single digit input 
    else
        return PARSE_ERR;
}  

int parse_amp(char* line_buf, char* adam_amp)
{

    char temp = 0;

    if(line_buf[3] == LINEBUF_EMPTY)
        return PARSE_EMPTY;
    if(line_buf[3] == LINEBUF_TOOLONG)
        return PARSE_LONG;

    /*if(line_buf[0] == '0') //Input value is 0, or 0.0, or 0.5
    {
        if((line_buf[1] == 255 && line_buf[2] == 255) ||(line_buf[1] == '.' && line_buf[2] == '0'))  //Input is 0 or 0.0
        {
            *adam_amp = 0;
            return PARSE_OK;
        }
        else if(line_buf[1] == '.' && line_buf[2] == '5')    //Input is 0.5
        {
            *adam_amp = 1;
            return PARSE_OK;
        }
        else
            return PARSE_ERR;
    } 
    */ 
    //single digit input single digit is 0,1,2,3,4,5,6,7
    if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[1] == 255 && line_buf[2] == 255)
    {
        temp = (line_buf[0] - '0')*10;
        *adam_amp = temp/5;
        return PARSE_OK;
    }  
    //x.x format input eg. 0.0 0.5 1.5 1.0 to 7.0 7.5
    else if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[1] == '.')
    {
        temp = (line_buf[0] - '0')*10;
        temp += line_buf[2] - '0';
        *adam_amp = temp / 5;

        if(temp % 5 == 0)
            return PARSE_OK;
        else
            return PARSE_ROUNDED;
    }
    else
        return PARSE_ERR;
}