blob: 1771661dc313b7ff6c409c497159bf3525be579d [file] [log] [blame]
/*=============================================================================
** FileName: function_common.cpp
** Desc: about function test
** Author: Warren
** Version: V1.0
** LastChange: 2021-02-26
** History:
=============================================================================*/
/*Get private menu,take only the first two parameters, and return the head pointer of the remaining string*/
#include <stdio.h>
#include <string.h>
#include "function_common.h"
#include <sys/time.h>
#include <unistd.h>
void set_timer(int it_interval_sec, int it_interval_usec,int it_value_sec,int it_value_usec)
{
struct itimerval itv, oldtv;
itv.it_interval.tv_sec = it_interval_sec;
itv.it_interval.tv_usec = it_interval_usec;
itv.it_value.tv_sec = it_value_sec;
itv.it_value.tv_usec = it_value_usec;
setitimer(ITIMER_REAL, &itv, &oldtv);
}
int sleep_with_restart(int second)
{
int left = second;
while (left > 0)
{
left = sleep(left);
}
return 0;
}
int millli_sleep_with_restart(int millisecond)
{
int left = millisecond*1000;
while (left > 0)
{
left = usleep(left);
}
return 0;
}
//Get private menu,take only the first two parameters, and return the head pointer of the remaining string
char* getMenu(char * str,char *argv[])
{
char* pos = str;
int menu = 0;
int num = 0;
if (str == NULL)
{
return NULL;
}
while (1)
{
menu = 0;
if (num == 2)
{
break;
}
while (1)
{
if (*pos == '"')
{
if (menu == 0)
{
menu++;
argv[num++] = pos+1;
}
else if (menu == 1)
{
*pos++ = '\0';
break;
}
else
{
break;
}
}
pos++;
}
}
printf("moudle = %s\nAPI = %s\n", argv[0], argv[1]);
return pos;
}
/*parse the parameters,and then stroge every parameter to argv.*/
/*return the number of parameters.*/
int getParam(char * str,char *argv[])
{
char* pos = str;
int num = 0;
if (str == NULL)
{
return 0;
}
while (1)
{
if (*pos == '\0')
{
break;
}
while (1)
{
if (*(pos - 1) == '=' && *pos == '"')// "="" as the basis for starting the parameter.
{
argv[num++] = pos+1;
}
else if (*(pos - 1) == '"' && *pos == '&')// "="" as the basis for the end of the parameter
{
*(pos - 1) = '\0';
pos++;
break;
}
else if (*pos == '\0'&&*(pos-1) == '"')//the string end.
{
*(pos - 1) = '\0';
break;
}
else if (*pos == '\0')//the string end.
{
break;
}
pos++;
}
}
// for (int i = 0;i < num;i++)
// {
// printf("argv[%d] = %s\n",i,argv[i]);
// }
return num;
}
/*remove the escape character '\'*/
int removeTage(const int length,char* argv[])
{
char* temp = NULL;
char* temp1 = NULL;
char** pos = argv;
for (int i = 0;i < length;i++)
{
temp1 = pos[i];
while (1)
{
if (*pos[i] == '\0')
{
break;
}
if ((*pos[i] == '"') && (*(pos[i] - 1) == '\\'))//Remove "\"" when encountering '\'
{
temp = pos[i];
while (1)
{
*(pos[i] - 1) = *(pos[i]);
if (*(pos[i]) == '\0')
{
break;
}
pos[i]++;
}
pos[i] = temp;
}
pos[i]++;
}
pos[i] = temp1;
}
return 0;
}
int parseParameters(char *str,char *argv[])
{
int argc = 0;
argc = getParam(str,argv);
removeTage(argc,argv);
// for (int i = 0;i < argc; i++)
// {
// printf("param %d = %s\n",i, argv[i]);
// }
return 0;
}
RIL_COMMAND*find_command (char *name,RIL_COMMAND *Class)
{
register int i;
for (i = 0; Class[i].name; i++)
if (strcmp (name, Class[i].name) == 0)
return (&Class[i]);
return ((RIL_COMMAND *)NULL);
}