#include "usmart_str.h"
|
#include "usmart.h"
|
//////////////////////////////////////////////////////////////////////////////////
|
//±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ;
|
//ALIENTEK STM32¿ª·¢°å
|
//ÕýµãÔ×Ó@ALIENTEK
|
//¼¼ÊõÂÛ̳:www.openedv.com
|
//°æ±¾£ºV3.1
|
//°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£
|
//Copyright(C) ÕýµãÔ×Ó 2011-2021
|
//All rights reserved
|
//********************************************************************************
|
//Éý¼¶ËµÃ÷
|
//V1.4
|
//Ôö¼ÓÁ˶ԲÎÊýΪstringÀàÐ͵ĺ¯ÊýµÄÖ§³Ö.ÊÊÓ÷¶Î§´ó´óÌá¸ß.
|
//ÓÅ»¯ÁËÄÚ´æÕ¼ÓÃ,¾²Ì¬ÄÚ´æÕ¼ÓÃΪ79¸ö×Ö½Ú@10¸ö²ÎÊý.¶¯Ì¬ÊÊÓ¦Êý×Ö¼°×Ö·û´®³¤¶È
|
//V2.0
|
//1,ÐÞ¸ÄÁËlistÖ¸Áî,´òÓ¡º¯ÊýµÄÍêÕû±í´ïʽ.
|
//2,Ôö¼ÓÁËidÖ¸Áî,´òӡÿ¸öº¯ÊýµÄÈë¿ÚµØÖ·.
|
//3,ÐÞ¸ÄÁ˲ÎÊýÆ¥Åä,Ö§³Öº¯Êý²ÎÊýµÄµ÷ÓÃ(ÊäÈëÈë¿ÚµØÖ·).
|
//4,Ôö¼ÓÁ˺¯ÊýÃû³¤¶Èºê¶¨Òå.
|
//V2.1 20110707
|
//1,Ôö¼Ódec,hexÁ½¸öÖ¸Áî,ÓÃÓÚÉèÖòÎÊýÏÔʾ½øÖÆ,¼°Ö´ÐнøÖÆ×ª»».
|
//×¢:µ±dec,hex²»´ø²ÎÊýµÄʱºò,¼´É趨ÏÔʾ²ÎÊý½øÖÆ.µ±ºó¸ú²ÎÊýµÄʱºò,¼´Ö´ÐнøÖÆ×ª»».
|
//Èç:"dec 0XFF" Ôò»á½«0XFFתΪ255,ÓÉ´®¿Ú·µ»Ø.
|
//Èç:"hex 100" Ôò»á½«100תΪ0X64,ÓÉ´®¿Ú·µ»Ø
|
//2,ÐÂÔöusmart_get_cmdnameº¯Êý,ÓÃÓÚ»ñȡָÁîÃû×Ö.
|
//V2.2 20110726
|
//1,ÐÞÕýÁËvoidÀàÐͲÎÊýµÄ²ÎÊýͳ¼Æ´íÎó.
|
//2,ÐÞ¸ÄÊý¾ÝÏÔʾ¸ñʽĬÈÏΪ16½øÖÆ.
|
//V2.3 20110815
|
//1,È¥µôÁ˺¯ÊýÃûºó±ØÐë¸ú"("µÄÏÞÖÆ.
|
//2,ÐÞÕýÁË×Ö·û´®²ÎÊýÖв»ÄÜÓÐ"("µÄbug.
|
//3,ÐÞ¸ÄÁ˺¯ÊýĬÈÏÏÔʾ²ÎÊý¸ñʽµÄÐ޸ķ½Ê½.
|
//V2.4 20110905
|
//1,ÐÞ¸ÄÁËusmart_get_cmdnameº¯Êý,Ôö¼Ó×î´ó²ÎÊý³¤¶ÈÏÞÖÆ.±ÜÃâÁËÊäÈë´íÎó²ÎÊýʱµÄËÀ»úÏÖÏó.
|
//2,Ôö¼ÓUSMART_ENTIM2_SCANºê¶¨Òå,ÓÃÓÚÅäÖÃÊÇ·ñʹÓÃTIM2¶¨Ê±Ö´ÐÐscanº¯Êý.
|
//V2.5 20110930
|
//1,ÐÞ¸Äusmart_initº¯ÊýΪvoid usmart_init(u8 sysclk),¿ÉÒÔ¸ù¾ÝϵͳƵÂÊ×Ô¶¯É趨ɨÃèʱ¼ä.(¹Ì¶¨100ms)
|
//2,È¥µôÁËusmart_initº¯ÊýÖеÄuart_initº¯Êý,´®¿Ú³õʼ»¯±ØÐëÔÚÍⲿ³õʼ»¯,·½±ãÓû§×ÔÐйÜÀí.
|
//V2.6 20111009
|
//1,Ôö¼ÓÁËread_addrºÍwrite_addrÁ½¸öº¯Êý.¿ÉÒÔÀûÓÃÕâÁ½¸öº¯Êý¶ÁдÄÚ²¿ÈÎÒâµØÖ·(±ØÐëÊÇÓÐЧµØÖ·).¸ü¼Ó·½±ãµ÷ÊÔ.
|
//2,read_addrºÍwrite_addrÁ½¸öº¯Êý¿ÉÒÔͨ¹ýÉèÖÃUSMART_USE_WRFUNSΪÀ´Ê¹Äܺ͹رÕ.
|
//3,ÐÞ¸ÄÁËusmart_strcmp,ʹÆä¹æ·¶»¯.
|
//V2.7 20111024
|
//1,ÐÞÕýÁË·µ»ØÖµ16½øÖÆÏÔʾʱ²»»»ÐеÄbug.
|
//2,Ôö¼ÓÁ˺¯ÊýÊÇ·ñÓзµ»ØÖµµÄÅжÏ,Èç¹ûûÓзµ»ØÖµ,Ôò²»»áÏÔʾ.Óзµ»ØÖµÊ±²ÅÏÔʾÆä·µ»ØÖµ.
|
//V2.8 20111116
|
//1,ÐÞÕýÁËlistµÈ²»´ø²ÎÊýµÄÖ¸Áî·¢Ëͺó¿ÉÄܵ¼ÖÂËÀ»úµÄbug.
|
//V2.9 20120917
|
//1,ÐÞ¸ÄÁËÐÎÈ磺void*xxx(void)ÀàÐͺ¯Êý²»ÄÜʶ±ðµÄbug¡£
|
//V3.0 20130425
|
//1,ÐÂÔöÁË×Ö·û´®²ÎÊý¶ÔתÒå·ûµÄÖ§³Ö¡£
|
//V3.1 20131120
|
//1,Ôö¼ÓruntimeϵͳָÁî,¿ÉÒÔÓÃÓÚͳ¼Æº¯ÊýÖ´ÐÐʱ¼ä.
|
//Ó÷¨:
|
//·¢ËÍ:runtime 1 ,Ôò¿ªÆôº¯ÊýÖ´ÐÐʱ¼äͳ¼Æ¹¦ÄÜ
|
//·¢ËÍ:runtime 0 ,Ôò¹Ø±Õº¯ÊýÖ´ÐÐʱ¼äͳ¼Æ¹¦ÄÜ
|
///runtimeͳ¼Æ¹¦ÄÜ,±ØÐëÉèÖÃ:USMART_ENTIMX_SCAN Ϊ1,²Å¿ÉÒÔʹÓÃ!!
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
//¶Ô±È×Ö·û´®str1ºÍstr2
|
//*str1:×Ö·û´®1Ö¸Õë
|
//*str2:×Ö·û´®2Ö¸Õë
|
//·µ»ØÖµ:0£¬ÏàµÈ;1£¬²»ÏàµÈ;
|
u8 usmart_strcmp(u8 *str1,u8 *str2)
|
{
|
while(1)
|
{
|
if(*str1!=*str2)return 1;//²»ÏàµÈ
|
if(*str1=='\0')break;//¶Ô±ÈÍê³ÉÁË.
|
str1++;
|
str2++;
|
}
|
return 0;//Á½¸ö×Ö·û´®ÏàµÈ
|
}
|
//°Ñstr1µÄÄÚÈÝcopyµ½str2
|
//*str1:×Ö·û´®1Ö¸Õë
|
//*str2:×Ö·û´®2Ö¸Õë
|
void usmart_strcopy(u8*str1,u8 *str2)
|
{
|
while(1)
|
{
|
*str2=*str1; //¿½±´
|
if(*str1=='\0')break;//¿½±´Íê³ÉÁË.
|
str1++;
|
str2++;
|
}
|
}
|
//µÃµ½×Ö·û´®µÄ³¤¶È(×Ö½Ú)
|
//*str:×Ö·û´®Ö¸Õë
|
//·µ»ØÖµ:×Ö·û´®µÄ³¤¶È
|
u8 usmart_strlen(u8*str)
|
{
|
u8 len=0;
|
while(1)
|
{
|
if(*str=='\0')break;//¿½±´Íê³ÉÁË.
|
len++;
|
str++;
|
}
|
return len;
|
}
|
//m^nº¯Êý
|
//·µ»ØÖµ:m^n´Î·½
|
u32 usmart_pow(u8 m,u8 n)
|
{
|
u32 result=1;
|
while(n--)result*=m;
|
return result;
|
}
|
//°Ñ×Ö·û´®×ªÎªÊý×Ö
|
//Ö§³Ö16½øÖÆ×ª»»,µ«ÊÇ16½øÖÆ×Öĸ±ØÐëÊÇ´óдµÄ,ÇÒ¸ñʽΪÒÔ0X¿ªÍ·µÄ.
|
//²»Ö§³Ö¸ºÊý
|
//*str:Êý×Ö×Ö·û´®Ö¸Õë
|
//*res:ת»»ÍêµÄ½á¹û´æ·ÅµØÖ·.
|
//·µ»ØÖµ:0£¬³É¹¦×ª»»Íê³É.ÆäËû,´íÎó´úÂë.
|
//1,Êý¾Ý¸ñʽ´íÎó.2,16½øÖÆÎ»ÊýΪ0.3,Æðʼ¸ñʽ´íÎó.4,Ê®½øÖÆÎ»ÊýΪ0.
|
u8 usmart_str2num(u8*str,u32 *res)
|
{
|
u32 t;
|
u8 bnum=0; //Êý×ÖµÄλÊý
|
u8 *p;
|
u8 hexdec=10;//ĬÈÏΪʮ½øÖÆÊý¾Ý
|
p=str;
|
*res=0;//ÇåÁã.
|
while(1)
|
{
|
if((*p<='9'&&*p>='0')||(*p<='F'&&*p>='A')||(*p=='X'&&bnum==1))//²ÎÊýºÏ·¨
|
{
|
if(*p>='A')hexdec=16; //×Ö·û´®ÖдæÔÚ×Öĸ,Ϊ16½øÖƸñʽ.
|
bnum++; //λÊýÔö¼Ó.
|
}else if(*p=='\0')break; //Åöµ½½áÊø·û,Í˳ö.
|
else return 1; //²»È«ÊÇÊ®½øÖÆ»òÕß16½øÖÆÊý¾Ý.
|
p++;
|
}
|
p=str; //ÖØÐ¶¨Î»µ½×Ö·û´®¿ªÊ¼µÄµØÖ·.
|
if(hexdec==16) //16½øÖÆÊý¾Ý
|
{
|
if(bnum<3)return 2; //λÊýСÓÚ3£¬Ö±½ÓÍ˳ö.ÒòΪ0X¾ÍÕ¼ÁË2¸ö,Èç¹û0XºóÃæ²»¸úÊý¾Ý,Ôò¸ÃÊý¾Ý·Ç·¨.
|
if(*p=='0' && (*(p+1)=='X'))//±ØÐëÒÔ'0X'¿ªÍ·.
|
{
|
p+=2; //Æ«ÒÆµ½Êý¾ÝÆðʼµØÖ·.
|
bnum-=2;//¼õÈ¥Æ«ÒÆÁ¿
|
}else return 3;//ÆðʼͷµÄ¸ñʽ²»¶Ô
|
}else if(bnum==0)return 4;//λÊýΪ0£¬Ö±½ÓÍ˳ö.
|
while(1)
|
{
|
if(bnum)bnum--;
|
if(*p<='9'&&*p>='0')t=*p-'0'; //µÃµ½Êý×ÖµÄÖµ
|
else t=*p-'A'+10; //µÃµ½A~F¶ÔÓ¦µÄÖµ
|
*res+=t*usmart_pow(hexdec,bnum);
|
p++;
|
if(*p=='\0')break;//Êý¾Ý¶¼²éÍêÁË.
|
}
|
return 0;//³É¹¦×ª»»
|
}
|
//µÃµ½Ö¸ÁîÃû
|
//*str:Ô´×Ö·û´®
|
//*cmdname:Ö¸ÁîÃû
|
//*nlen:Ö¸ÁîÃû³¤¶È
|
//maxlen:×î´ó³¤¶È(×öÏÞÖÆ,Ö¸Áî²»¿ÉÄÜÌ«³¤µÄ)
|
//·µ»ØÖµ:0,³É¹¦;ÆäËû,ʧ°Ü.
|
u8 usmart_get_cmdname(u8*str,u8*cmdname,u8 *nlen,u8 maxlen)
|
{
|
*nlen=0;
|
while(*str!=' '&&*str!='\0') //ÕÒµ½¿Õ¸ñ»òÕß½áÊø·ûÔòÈÏΪ½áÊøÁË
|
{
|
*cmdname=*str;
|
str++;
|
cmdname++;
|
(*nlen)++;//ͳ¼ÆÃüÁ¶È
|
if(*nlen>=maxlen)return 1;//´íÎóµÄÖ¸Áî
|
}
|
*cmdname='\0';//¼ÓÈë½áÊø·û
|
return 0;//Õý³£·µ»Ø
|
}
|
//»ñÈ¡ÏÂÒ»¸ö×Ö·û£¨µ±ÖмäÓкܶà¿Õ¸ñµÄʱºò£¬´Ëº¯ÊýÖ±½ÓºöÂÔ¿Õ¸ñ£¬ÕÒµ½¿Õ¸ñÖ®ºóµÄµÚÒ»¸ö×Ö·û£©
|
//str:×Ö·û´®Ö¸Õë
|
//·µ»ØÖµ:ÏÂÒ»¸ö×Ö·û
|
u8 usmart_search_nextc(u8* str)
|
{
|
str++;
|
while(*str==' '&&str!='\0')str++;
|
return *str;
|
}
|
//´ÓstrÖеõ½º¯ÊýÃû
|
//*str:Ô´×Ö·û´®Ö¸Õë
|
//*fname:»ñÈ¡µ½µÄº¯ÊýÃû×ÖÖ¸Õë
|
//*pnum:º¯ÊýµÄ²ÎÊý¸öÊý
|
//*rval:ÊÇ·ñÐèÒªÏÔʾ·µ»ØÖµ(0,²»ÐèÒª;1,ÐèÒª)
|
//·µ»ØÖµ:0,³É¹¦;ÆäËû,´íÎó´úÂë.
|
u8 usmart_get_fname(u8*str,u8*fname,u8 *pnum,u8 *rval)
|
{
|
u8 res;
|
u8 fover=0; //À¨ºÅÉî¶È
|
u8 *strtemp;
|
u8 offset=0;
|
u8 parmnum=0;
|
u8 temp=1;
|
u8 fpname[6];//void+X+'/0'
|
u8 fplcnt=0; //µÚÒ»¸ö²ÎÊýµÄ³¤¶È¼ÆÊýÆ÷
|
u8 pcnt=0; //²ÎÊý¼ÆÊýÆ÷
|
u8 nchar;
|
//ÅжϺ¯ÊýÊÇ·ñÓзµ»ØÖµ
|
strtemp=str;
|
while(*strtemp!='\0')//ûÓнáÊø
|
{
|
if(*strtemp!=' '&&(pcnt&0X7F)<5)//×î¶à¼Ç¼5¸ö×Ö·û
|
{
|
if(pcnt==0)pcnt|=0X80;//ÖÃλ×î¸ßλ,±ê¼Ç¿ªÊ¼½ÓÊÕ·µ»ØÖµÀàÐÍ
|
if(((pcnt&0x7f)==4)&&(*strtemp!='*'))break;//×îºóÒ»¸ö×Ö·û,±ØÐëÊÇ*
|
fpname[pcnt&0x7f]=*strtemp;//¼Ç¼º¯ÊýµÄ·µ»ØÖµÀàÐÍ
|
pcnt++;
|
}else if(pcnt==0X85)break;
|
strtemp++;
|
}
|
if(pcnt)//½ÓÊÕÍêÁË
|
{
|
fpname[pcnt&0x7f]='\0';//¼ÓÈë½áÊø·û
|
if(usmart_strcmp(fpname,"void")==0)*rval=0;//²»ÐèÒª·µ»ØÖµ
|
else *rval=1; //ÐèÒª·µ»ØÖµ
|
pcnt=0;
|
}
|
res=0;
|
strtemp=str;
|
while(*strtemp!='('&&*strtemp!='\0') //´Ë´úÂëÕÒµ½º¯ÊýÃûµÄÕæÕýÆðʼλÖÃ
|
{
|
strtemp++;
|
res++;
|
if(*strtemp==' '||*strtemp=='*')
|
{
|
nchar=usmart_search_nextc(strtemp); //»ñÈ¡ÏÂÒ»¸ö×Ö·û
|
if(nchar!='('&&nchar!='*')offset=res; //Ìø¹ý¿Õ¸ñºÍ*ºÅ
|
}
|
}
|
strtemp=str;
|
if(offset)strtemp+=offset+1;//Ìøµ½º¯ÊýÃû¿ªÊ¼µÄµØ·½
|
res=0;
|
nchar=0;//ÊÇ·ñÕýÔÚ×Ö·û´®ÀïÃæµÄ±êÖ¾,0£¬²»ÔÚ×Ö·û´®;1£¬ÔÚ×Ö·û´®;
|
while(1)
|
{
|
if(*strtemp==0)
|
{
|
res=USMART_FUNCERR;//º¯Êý´íÎó
|
break;
|
}else if(*strtemp=='('&&nchar==0)fover++;//À¨ºÅÉî¶ÈÔö¼ÓÒ»¼¶
|
else if(*strtemp==')'&&nchar==0)
|
{
|
if(fover)fover--;
|
else res=USMART_FUNCERR;//´íÎó½áÊø,ûÊÕµ½'('
|
if(fover==0)break;//µ½Ä©Î²ÁË,Í˳ö
|
}else if(*strtemp=='"')nchar=!nchar;
|
|
if(fover==0)//º¯ÊýÃû»¹Ã»½ÓÊÕÍê
|
{
|
if(*strtemp!=' ')//¿Õ¸ñ²»ÊôÓÚº¯ÊýÃû
|
{
|
*fname=*strtemp;//µÃµ½º¯ÊýÃû
|
fname++;
|
}
|
}else //ÒѾ½ÓÊÜÍêÁ˺¯ÊýÃûÁË.
|
{
|
if(*strtemp==',')
|
{
|
temp=1; //ʹÄÜÔö¼ÓÒ»¸ö²ÎÊý
|
pcnt++;
|
}else if(*strtemp!=' '&&*strtemp!='(')
|
{
|
if(pcnt==0&&fplcnt<5) //µ±µÚÒ»¸ö²ÎÊýÀ´Ê±,ΪÁ˱ÜÃâͳ¼ÆvoidÀàÐ͵IJÎÊý,±ØÐë×öÅжÏ.
|
{
|
fpname[fplcnt]=*strtemp;//¼Ç¼²ÎÊýÌØÕ÷.
|
fplcnt++;
|
}
|
temp++; //µÃµ½ÓÐЧ²ÎÊý(·Ç¿Õ¸ñ)
|
}
|
if(fover==1&&temp==2)
|
{
|
temp++; //·ÀÖ¹ÖØ¸´Ôö¼Ó
|
parmnum++; //²ÎÊýÔö¼ÓÒ»¸ö
|
}
|
}
|
strtemp++;
|
}
|
if(parmnum==1)//Ö»ÓÐ1¸ö²ÎÊý.
|
{
|
fpname[fplcnt]='\0';//¼ÓÈë½áÊø·û
|
if(usmart_strcmp(fpname,"void")==0)parmnum=0;//²ÎÊýΪvoid,±íʾûÓвÎÊý.
|
}
|
*pnum=parmnum; //¼Ç¼²ÎÊý¸öÊý
|
*fname='\0'; //¼ÓÈë½áÊø·û
|
return res; //·µ»ØÖ´Ðнá¹û
|
}
|
|
|
//´ÓstrÖеõ½Ò»¸öº¯ÊýµÄ²ÎÊý
|
//*str:Ô´×Ö·û´®Ö¸Õë
|
//*fparm:²ÎÊý×Ö·û´®Ö¸Õë
|
//*ptype:²ÎÊýÀàÐÍ 0£¬Êý×Ö;1£¬×Ö·û´®;0XFF£¬²ÎÊý´íÎó
|
//·µ»ØÖµ:0,ÒѾÎÞ²ÎÊýÁË;ÆäËû,ÏÂÒ»¸ö²ÎÊýµÄÆ«ÒÆÁ¿.
|
u8 usmart_get_aparm(u8 *str,u8 *fparm,u8 *ptype)
|
{
|
u8 i=0;
|
u8 enout=0;
|
u8 type=0;//ĬÈÏÊÇÊý×Ö
|
u8 string=0; //±ê¼ÇstrÊÇ·ñÕýÔÚ¶Á
|
while(1)
|
{
|
if(*str==','&& string==0)enout=1; //ÔÝ»ºÁ¢¼´Í˳ö,Ä¿µÄÊÇѰÕÒÏÂÒ»¸ö²ÎÊýµÄÆðʼµØÖ·
|
if((*str==')'||*str=='\0')&&string==0)break;//Á¢¼´Í˳ö±êʶ·û
|
if(type==0)//ĬÈÏÊÇÊý×ÖµÄ
|
{
|
if((*str>='0' && *str<='9')||(*str>='a' && *str<='f')||(*str>='A' && *str<='F')||*str=='X'||*str=='x')//Êý×Ö´®¼ì²â
|
{
|
if(enout)break; //ÕÒµ½ÁËÏÂÒ»¸ö²ÎÊý,Ö±½ÓÍ˳ö.
|
if(*str>='a')*fparm=*str-0X20; //Сдת»»Îª´óд
|
else *fparm=*str; //Сд»òÕßÊý×Ö±£³Ö²»±ä
|
fparm++;
|
}else if(*str=='"')//ÕÒµ½×Ö·û´®µÄ¿ªÊ¼±êÖ¾
|
{
|
if(enout)break;//ÕÒµ½,ºó²ÅÕÒµ½",ÈÏΪ½áÊøÁË.
|
type=1;
|
string=1;//µÇ¼ÇSTRING ÕýÔÚ¶ÁÁË
|
}else if(*str!=' '&&*str!=',')//·¢ÏÖ·Ç·¨×Ö·û,²ÎÊý´íÎó
|
{
|
type=0XFF;
|
break;
|
}
|
}else//stringÀà
|
{
|
if(*str=='"')string=0;
|
if(enout)break; //ÕÒµ½ÁËÏÂÒ»¸ö²ÎÊý,Ö±½ÓÍ˳ö.
|
if(string) //×Ö·û´®ÕýÔÚ¶Á
|
{
|
if(*str=='\\') //Óöµ½×ªÒå·û(²»¸´ÖÆ×ªÒå·û)
|
{
|
str++; //Æ«ÒÆµ½×ªÒå·ûºóÃæµÄ×Ö·û,²»¹Üʲô×Ö·û,Ö±½ÓCOPY
|
i++;
|
}
|
*fparm=*str; //Сд»òÕßÊý×Ö±£³Ö²»±ä
|
fparm++;
|
}
|
}
|
i++;//Æ«ÒÆÁ¿Ôö¼Ó
|
str++;
|
}
|
*fparm='\0'; //¼ÓÈë½áÊø·û
|
*ptype=type; //·µ»Ø²ÎÊýÀàÐÍ
|
return i; //·µ»Ø²ÎÊý³¤¶È
|
}
|
//µÃµ½Ö¸¶¨²ÎÊýµÄÆðʼµØÖ·
|
//num:µÚnum¸ö²ÎÊý,·¶Î§0~9.
|
//·µ»ØÖµ:¸Ã²ÎÊýµÄÆðʼµØÖ·
|
u8 usmart_get_parmpos(u8 num)
|
{
|
u8 temp=0;
|
u8 i;
|
for(i=0;i<num;i++)temp+=usmart_dev.plentbl[i];
|
return temp;
|
}
|
//´ÓstrÖеõ½º¯Êý²ÎÊý
|
//str:Ô´×Ö·û´®;
|
//parn:²ÎÊýµÄ¶àÉÙ.0±íʾÎÞ²ÎÊý voidÀàÐÍ
|
//·µ»ØÖµ:0,³É¹¦;ÆäËû,´íÎó´úÂë.
|
u8 usmart_get_fparam(u8*str,u8 *parn)
|
{
|
u8 i,type;
|
u32 res;
|
u8 n=0;
|
u8 len;
|
u8 tstr[PARM_LEN+1];//×Ö½Ú³¤¶ÈµÄ»º´æ,×î¶à¿ÉÒÔ´æ·ÅPARM_LEN¸ö×Ö·ûµÄ×Ö·û´®
|
for(i=0;i<MAX_PARM;i++)usmart_dev.plentbl[i]=0;//Çå¿Õ²ÎÊý³¤¶È±í
|
while(*str!='(')//Æ«ÒÆµ½²ÎÊý¿ªÊ¼µÄµØ·½
|
{
|
str++;
|
if(*str=='\0')return USMART_FUNCERR;//Óöµ½½áÊø·ûÁË
|
}
|
str++;//Æ«ÒÆµ½"("Ö®ºóµÄµÚÒ»¸ö×Ö½Ú
|
while(1)
|
{
|
i=usmart_get_aparm(str,tstr,&type); //µÃµ½µÚÒ»¸ö²ÎÊý
|
str+=i; //Æ«ÒÆ
|
switch(type)
|
{
|
case 0: //Êý×Ö
|
if(tstr[0]!='\0') //½ÓÊÕµ½µÄ²ÎÊýÓÐЧ
|
{
|
i=usmart_str2num(tstr,&res); //¼Ç¼¸Ã²ÎÊý
|
if(i)return USMART_PARMERR; //²ÎÊý´íÎó.
|
*(u32*)(usmart_dev.parm+usmart_get_parmpos(n))=res;//¼Ç¼ת»»³É¹¦µÄ½á¹û.
|
usmart_dev.parmtype&=~(1<<n); //±ê¼ÇÊý×Ö
|
usmart_dev.plentbl[n]=4; //¸Ã²ÎÊýµÄ³¤¶ÈΪ4
|
n++; //²ÎÊýÔö¼Ó
|
if(n>MAX_PARM)return USMART_PARMOVER;//²ÎÊýÌ«¶à
|
}
|
break;
|
case 1://×Ö·û´®
|
len=usmart_strlen(tstr)+1; //°üº¬Á˽áÊø·û'\0'
|
usmart_strcopy(tstr,&usmart_dev.parm[usmart_get_parmpos(n)]);//¿½±´tstrÊý¾Ýµ½usmart_dev.parm[n]
|
usmart_dev.parmtype|=1<<n; //±ê¼Ç×Ö·û´®
|
usmart_dev.plentbl[n]=len; //¸Ã²ÎÊýµÄ³¤¶ÈΪlen
|
n++;
|
if(n>MAX_PARM)return USMART_PARMOVER;//²ÎÊýÌ«¶à
|
break;
|
case 0XFF://´íÎó
|
return USMART_PARMERR;//²ÎÊý´íÎó
|
}
|
if(*str==')'||*str=='\0')break;//²éµ½½áÊø±êÖ¾ÁË.
|
}
|
*parn=n; //¼Ç¼²ÎÊýµÄ¸öÊý
|
return USMART_OK;//ÕýÈ·µÃµ½Á˲ÎÊý
|
}
|