#define COMM_KEY1 '1'
#define COMM_KEY2 '2'
#define COMM_KEY3 '3'
#define COMM_KEY4 '4'
#define comm_printf printf
//for comm display
int comm_getkey(void)
{
unsigned char key= -1;
while( (key=getchar())=='\n');//防止读到'\n'
return key;
}
int comm_kbhit(void)
{
struct timeval tv;
fd_set rdfs;
int ret=0;
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO(&rdfs);
FD_SET (STDIN_FILENO, &rdfs);
select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
ret = FD_ISSET(STDIN_FILENO, &rdfs);
return ret ? 0 : 1;
}
unsigned char comm_getnewval(unsigned char ucMin,
unsigned char ucMax, unsigned char ucRst,
unsigned char ucCur, unsigned char *pucVal)
{
unsigned char ucStep;
unsigned char ucKey = 0;
unsigned char ucTemp = ucCur;
unsigned char ucVal = ucCur;
while(1)
{
comm_printf("Range:%02X~%02XH,Rst:%02XH\n", ucMin, ucMax, ucRst);
comm_printf("Cur: %02X \n", ucVal);
comm_printf("New: %02X \n", ucTemp);
comm_printf("STEP: KEY1-1 KEY2-5 \nKEY3-10 KEY4-Quit \n");
ucKey = comm_getkey();
if (ucKey == COMM_KEY1)
{
ucStep = 1;
}
else if(ucKey == COMM_KEY2)
{
ucStep = 5;
}
else if(ucKey == COMM_KEY3)
{
ucStep = 10;
}
else
{
*pucVal=ucVal;//确保第一次进入立即出去,值设置上
return 0 ;
}
comm_printf("KEY1-INC %d KEY2-DEC %d \n", ucStep, ucStep);
comm_printf("KEY3-Cancel KEY4-Confirm \n");
while (2)
{
if (!(comm_kbhit()))
{
ucKey = comm_getkey();
if (ucKey ==COMM_KEY3)
{
comm_printf(" Set Canceled \n");
comm_getkey();
return 1;
}
if (ucKey == COMM_KEY1)
{
if ((ucTemp + ucStep) > ucMax )
{
ucTemp = ucMin;
}
else
ucTemp += ucStep;
comm_printf(" include %d\n",ucStep);
comm_printf("Current NewVal: %02X \n", ucTemp);
}
if (ucKey == COMM_KEY2)
{
if (ucTemp < ucStep)
{
ucTemp = ucMax;
}
else if ((ucTemp - ucStep) < ucMin)
{
ucTemp = ucMax;
}
else
ucTemp -= ucStep;
comm_printf(" decrease %d \n",ucStep);
comm_printf("Current NewVal: %02X \n", ucTemp);
}
if (ucKey == COMM_KEY4)
{
comm_printf("Set OK \n");
comm_getkey();
*pucVal = ucTemp;
ucVal = ucTemp;
break;
}
}
}
}
}