Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
handlers.cpp
- Committer:
- yuhangzhu
- Date:
- 2013-07-22
- Revision:
- 23:0b6901c9302c
- Parent:
- 21:4d6b26eecdac
- Child:
- 24:f8fea5e5bf73
File content as of revision 23:0b6901c9302c:
/********************************************
Function: void mode_idle_handler(int* state, char sel)
Function description:
This function converts character inputs to state information, which is used for later stages in main function
Function: int parse_phase(char* line_buf, char* adam_pha)
Function description:
This function checks data in the line buffer. If it's good then write the converted value into address adam_pha
otherwise it returns error code
Function: int parse_amp(char* line_buf, char* adam_amp)
Function description:
This function checks data in the line buffer. If it's good then write the converted value into address adam_amp
otherwise it 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 7.0 7.5 etc
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;
}