yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

handlers.cpp

Committer:
yuhangzhu
Date:
2013-07-13
Revision:
7:c268547fb6c8
Parent:
6:e510aab8f2ce
Child:
12:5e4cba1182ab

File content as of revision 7:c268547fb6c8:

#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, both 0 and 0.0 is accpeted
    {
        if((line_buf[1] == 255 && line_buf[2] == 255) ||(line_buf[1] == '.' && line_buf[2] == '0'))
        {
            *adam_amp = 0;
            return PARSE_OK;
        }
        else
            return PARSE_ERR;
    }  
    //single digit input 
    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
    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;
}