亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sms.c

?? 單片機W78E516B控制g18手機模塊收發短消息
?? C
字號:
#include<reg54.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/////////////////////////////////////////////////////////////
//|Function:int cal_crc
//| 16位CRC:按位計算,速度最慢,占用空間最少
//| 注:數據流是高位先行
//|輸入:整數以及初始crc值
//|輸出:按位計算的16位crc值,余式采用0x1021
//////////////////////////////////////////////////////////////
xdata char buf[128];




unsigned int cal_crc(unsigned int command,unsigned int crc){
 	
	unsigned int i;
 	
	crc=crc^(command<<8);
 	
	for(i=0; i<=7; i++) {
 		
		if((crc&0x8000)!=0)
    		crc=(crc<<1)^0x1021;
 		else 
    		crc=(crc<<1);
 	}
 	return crc;
}

//////////////////////////////////////////////////////////////////
//|Function:char *left
//|獲得字符串子串,從走到右
//|
//|輸入:字符串以及截取的長度
//| 
//|輸出:子串的地址
//| 
//|Example:	char p[] = "TTTT1234";
//|				char t[5];
//|				t = left(p,4);		//Should Return "TTTT"
/////////////////////////////////////////////////////////////////////

char *left(const char *chString,unsigned int len)
{

	unsigned int i;				//Loop VAR
	int k, nIndex;				//More Loop VARs
//	char *buf;					//Temp String VARs


	if (!strlen(chString))						//If There Is No String
		return NULL;							//Return NULL

	if (len > strlen(chString))					//If The Amount To Copy Is Larger Than The String
		len = strlen(chString);					//Set The Length To The Length Of The String

//	buf = (char *)malloc(len + 1);

	//Copy The Part We Want From The Orginal String To The Result
	for (i = 0, nIndex = 0, k = 0; i < len; i++)	
	{		
		if (chString[nIndex] != '\0')			//If Not A NULL Char
			buf[k++] = chString[nIndex++];
		else
			break;
	}

	buf[k] = '\0';						//Add A NULL Char To The End Of The String

	return buf;
}

////////////////////////////////////////////////
//|Function:int  HexToInt
//|十六進制格式字符串轉換為整數				
//|
//|輸入:十六進制字符串
//|				
//|輸出:轉換后對應的整數數值,錯誤則返回-1              
//|
//| 
//| Example:    int result;
//|             char str[]="123";
//|             result=HexToInt(str);     //result=0x0123
///////////////////////////////////////////////

int HexToInt(char * Hexvalue){
	
	int i,tempint,len,sum=0;
	char buffer[2];
 	len=strlen(Hexvalue);
  	
	for(i=0;i<len;i++){
  		
		buffer[0]= Hexvalue[i];
  		buffer[1]='\0';
  		
		switch(buffer[0]){
   			case '0':
   			case '1':
   			case '2':
   			case '3':
   			case '4':
   			case '5':	
   			case '6':
   			case '7':
   			case '8':
   			case '9':tempint=atoi(buffer) ;break;
   			case 'a':
   			case 'A':tempint=10;break;
   			case 'b':
   			case 'B':tempint=11;break;
   			case 'c':
   			case 'C':tempint=12;break;
   			case 'd':
  			case 'D':tempint=13;break;
   			case 'e':
   			case 'E':tempint=14;break;
   			case 'f':
   			case 'F':tempint=15;break;
   			default :return -1;
   		}
   		sum=sum*16+tempint; 	
  	}
  	return sum;	
}
///////////////////////////////////////////////////////////////////////
//| Function:	BinaryFuse()
//|	二進制融合將輸入的字符串按照每兩位結合所代表的整數原則,轉變為一半長度的整數數組				
//|
//|	輸入:源字符串,起始位置,融合長度,目標數組,數據開始位置
//|
//|	返回:void		
//|
//| Example:    
//|             char str[]="1234";
//|             int  data[2];
//|             BinaryFuse(str,0,4,data,0); //data=0x2,0x12,0x34           
/////////////////////////////////////////////////////////////////////////

void BinaryFuse(unsigned char* Str,int SStart, int Len,unsigned int* Data,int DStart){
	
//	int i,charvalue;
	unsigned char i,charvalue;
 	char buffer[3];
 	if(DStart==0)
		Data[0]=Len/2;
 	else
   		Data[0]+=Len/2;
 	
	for(i=1;i<=Len/2;i++){
  		
		buffer[0]=Str[SStart+2*i-2];
  		buffer[1]=Str[SStart+2*i-1];
  		buffer[2]='\0';
  		charvalue=HexToInt(buffer);
  		
		if(charvalue>=0)
	 		Data[DStart+i]=charvalue;
  		else{
			//printf("BianryFuse String Error!");
			Data=NULL;		
			return ;	
		}	
  	}
}

/////////////////////////////////////////////////////////////////////////
//| Function:	unsigned char ParseString()
//|從源字符串中獲取命令包、對命令包進行CRC校驗、解析出命令單元的數據保存到目的數組
//|					
//|輸入:源字符串,目的數組,消息來源電話,消息編號
//|				
//|返回:解析成功則返回0x00,出錯則返回相應的出錯編碼
//| 
//| Example:    
//|             char Phone[15];
//|             int  Record;
//|             int  Data[100];
//|             char Str[]="+CMGL: 14,\"REC UNREAD\",\"8613575588314\",,\"04/05/29,21:07:08+00\"\xD\xAX010101032012345678FF002613666673107    13800571500    011234005600000014F6X\xD\xAOK";
//|             PareString(Str,Data,Phone,&Record);            
/////////////////////////////////////////////////////////////////////////

unsigned char ParseString(unsigned char *Str,unsigned int *Data,unsigned char* Phone,unsigned int *Record){
	
	int pos,len,i;
	unsigned int RcvCrc,CalCrc=0;
	
 	Str=strstr(Str,"+CMGL:");//搜索消息字符串的起始標志位+CMGL
	if(Str==NULL){
 		Data=NULL;
 		Phone=NULL;
 		*Record=0; 
  		return 0x07;
	}
	
	Str=Str+7; 
	pos=strpos(Str,',');      
	*Record=atoi(left(Str,pos));//接受到的消息編號

	Str=(Str+pos+1);
	pos=strpos(Str,',');
	Str=(Str+pos+2);
	pos=strpos(Str,',');
	strcpy(Phone,left(Str,pos-1)); //消息來源電話號碼 

	Str=strstr(Str,"\r\n");//搜索消息數據起始位
	if(Str==NULL){
 		Data=NULL;
 		Phone=NULL;												   	
// 		*Record=0; 
  		return 0x08;
	}

	Str=Str+2;
	pos=strpos(Str,'X'); //搜索消息命令起始位
	if(pos==-1){
 		Str=NULL;
 		Data=NULL;
 		Phone=NULL;
// 		*Record=0; 
  		return 0x0a;
	}
	
	Str=(Str+pos+1);
	pos=strpos(Str,'X'); //搜索消息命令結束位
	if(pos==-1){
 		Str=NULL;
 		Data=NULL;
 		Phone=NULL;
// 		*Record=0; 
 		return 0x0b;
	}

	//對命令單元和檢驗單元字符串進行二進制合并,若是31命令則對電話號碼不做合并

	if(Str[8]=='3'&&Str[9]=='1'){
		BinaryFuse(Str,0,24,Data,0);
		len=Data[0];
		Data[0]+=30;
		for(i=0;i<30;i++)
			Data[len+1+i]=Str[24+i];
		BinaryFuse(Str,54,pos-54,Data,Data[0]);
	}
	else
  		BinaryFuse(Str,0,pos,Data,0);

    //CRC 校驗
	RcvCrc=Data[(Data[0])]*256+Data[(Data[0])-1];
	for(i=1;i<=Data[0]-2;i++)
		CalCrc=cal_crc(Data[i],CalCrc);
	if(RcvCrc!=CalCrc){
		Str=NULL;
 		return 0x05;
	}
	Data[0]-=2;

	//命令體長度檢驗
	if(Data[12]!=Data[0]-12){
		Str=NULL;
 		Data=NULL;
 		Phone=NULL;
 		*Record=0;
		return 0x0c;
	}
	
	Str=(Str+2);//消息命令體處理完畢
	Str=NULL;
	return 0x00;
}


/////////////////////////////////////////////////////////////////
//| Function:	GetSetValue()
//|從調試串口接收到的字符串中,解析出有效數據
//| 
//|輸入:源字符串,目的數組,命令號
//|
//|返回:解析成功則返回0x00,出錯則返回相應的出錯編碼                  
//| 
//| Example:    
//|             char result;
//|				unsigned int kind;
//|             unsigned char  Data[100];
//|             char Str[]="set 1=1234";
//|             result=GetSetValue(Str,Data,&kind);
/////////////////////////////////////////////////////////////////////////
char GetSetValue(unsigned char* Str,unsigned int* Data,unsigned int* kind)
{
	int pos,i;

	Str=strstr(Str,"set");
	if (Str==NULL)
		return -1;

	Str=Str+3;
	pos=strpos(Str,'=');
	if (pos==-1)
		return -2;
	*kind=atoi(left(Str,pos));
	Str=Str+pos+1;
	pos=strpos(Str,'\r');
	if ((pos==-1)||(pos>32))
		return -3;
	if ((*kind==1)||(*kind==2))	//電話號碼
	{
		Data[0]=pos;
		for (i=1;i<=pos;i++)
			Data[i]=Str[i-1];
	}
	else
	{
  		BinaryFuse(Str,0,pos,Data,0);
	}
	return 0;
}

/////////////////////////////////////////////////////////////////
//| Function:	GetEEPROMValue()
//|從調試串口接收EEPROM內容讀取命令
//| 
//|輸入:源字符串,目的數組,命令號
//|
//|返回:解析成功則返回0x00,出錯則返回相應的出錯編碼                  
//| 
//| Example:    
//|             char result;
//|				unsigned int *start,*length;
//|             char Str[]="get 1,5";
//|             result=GetEEPROMValue(Str,&start,&length);
/////////////////////////////////////////////////////////////////////////
char GetEEPROMValue(unsigned char* Str,unsigned int* start,unsigned int* length)
{
	int pos;

	Str=strstr(Str,"get");
	if (Str==NULL)
		return -1;

	Str=Str+3;
	pos=strpos(Str,',');
	if (pos==-1)
		return -2;
	*start=atoi(left(Str,pos));
	Str=Str+pos+1;
	pos=strpos(Str,'\r');
	if ((pos==-1)||(pos>32))
		return -3;
	*length=atoi(left(Str,pos));
	return 0;
}

/////////////////////////////////////////////////////////////////
//| Function:	BinaryDivide()
//|將源整數數組進行如下處理,從數組的第二位起逐個將整數轉換成ASCII碼				
//| 
//|輸入:源整數數組,起始位置,拆分的長度,目的字符串			
//|
//|返回:void                  
//| 
//|Example:    
//|             int  data[3]={0x02,0x12,0x34};
//|             char str[4];             
//|             BinaryDivide(data,1,2,str,0); //str[]="1234"           
///////////////////////////////////////////////////////////

void BinaryDivide(unsigned int* Data,int DStart, int Len,unsigned char* Str){
	int i;
	char buffer[3];
	
	if(DStart<=0)
		DStart=1;
	
	if(Len<=0)
		Len=1;
	if(Len>Data[0])
		Len=Data[0];

	for(i=0;i<Len;i++){
		sprintf(buffer,"%2X",Data[DStart+i]);
 		if(buffer[0]==' ')
    		buffer[0]='0';
		Str[2*i]=buffer[0];
		Str[2*i+1]=buffer[1];
// 		strcat(Str,buffer);
	}
	Str[2*i]='\0';
}

/////////////////////////////////////////////////////////
//| Function:	BuildCmd()
//|功能: 根據命令單元生成校驗單元,然后進行二字節拆分,然后添加結束標志生成最終命令包	
//|				
//|輸入: 源整數數組命令單元,字符串格式的命令包
//|				
//|輸出: void                
//|
//| Example:    
//|             int  Data[100]={0x11,0x01,0x01,0x01,0x03,0x30,0x12,0x34,0x56,0x78,0x01,0x00,0x05,0x12,0x34,0x56,0x78,0x01};;
//|             char Cmd[100];
//|             BuildCmd(Data,Cmd); //Cmd="010101033012345678010005123456780144F7"  +X  +26數字        
////////////////////////////////////////////////////
void BuildCmd(unsigned int* Data,unsigned char * Cmd){
	int i,len;
	unsigned int CalCrc=0;
//    char flag[3];
	
	CalCrc=0;	//modified
	for(i=1;i<=Data[0];i++)
		CalCrc=cal_crc(Data[i],CalCrc);
	
	Data[Data[0]+1]=CalCrc%256;
	Data[Data[0]+2]=CalCrc/256;
	Data[0]+=2;

//	if(Data[5]==0x20||Data[5]==0x31){
	if((Data[5]==0x20)&&(Data[0]>15))	//鑒權正確的20命令,去處鑒權錯誤20命令的干擾
	{
  		BinaryDivide(Data,1,12,Cmd);
  		for(i=0;i<30;i++)
  			Cmd[24+i]=Data[13+i];
  		BinaryDivide(Data,43,Data[0]-42,Cmd+54);
		len=74;		
	}
	else
	{
  		BinaryDivide(Data,1,Data[0],Cmd);
		len=Data[0]*2;
	}

	Cmd[len]='X';
	Cmd[len+1]=26;
	Cmd[len+2]='\0';
}

/////////////////////////////////////////////////////////////////////////
//| Function:	unsigned char ParseCellInfo()
//|從源字符串中獲取網絡小區的基本參數
//|					
//|輸入:源字符串,小區號,Bcch,Bsic,Rxlev
//|				
//|返回:解析成功則返回0x00,出錯則返回相應的出錯編碼
//| 
//| Example:    
//|             char Phone[15];
//|             unsigned int  Bcch;
//|				unsigned char Bsic,Rxlev;
//|             char Str[]="+MCELL: 1 BC 0085 02-082B<LF>460000 10471 33<LF>018 018 *** ***<LF>0 A1aI 22298 20<LF>8 *** 7 1 20 14<LF>-100 GPI1 ****\rOK";
//|             ParseCellInfo(Str,CellNo,&Bcch,&Bsic,&Rxlev);            
/////////////////////////////////////////////////////////////////////////
unsigned char ParseCellInfo(unsigned char *Str,unsigned char CellNo,unsigned int *Bcch,unsigned char* Bsic,unsigned char *Rxlev,unsigned int *CellId){
	
	unsigned int i;
	unsigned char screen[5];
	
 	Str=strstr(Str,"+MCELL:");//搜索消息字符串的起始標志位+MCELL
	if(Str==NULL){
		*Bcch=0;
		*Bsic=0;
		*Rxlev=0;
  		return 0x1;
	}
	if (CellNo==0)
	{
		Str=Str+7;
		Str=Str+6;
		*Bcch=atoi(left(Str,4));	//Bcch:6~9
		Str=Str+5;
		*Bsic=atoi(left(Str,2));	//Bsic:11~12
		Str=Str+3;
		*Rxlev=atoi(left(Str,3));	//Rxlev:13~16
		Str=Str+12;
		*CellId=atoi(left(Str,5));
		return 0;
	}
	else
	{
		i=CellNo;
		sprintf(screen,"N%u",i);

	 	Str=strstr(Str,screen);//搜索相鄰小區信息起始標志"N*"
		if(Str==NULL){
			*Bcch=0;
			*Bsic=0;
			*Rxlev=0;
	  		return 0x2;
		}
		Str=Str+3;
		*Bcch=atoi(left(Str,4));	
		Str=Str+5;
		*Bsic=atoi(left(Str,2));	
		Str=Str+3;
		*Rxlev=atoi(left(Str,3));
		*CellId=0;
		return 0;
	}
}


unsigned char  gsmInvertNumbers(const char *pSrc, char *pDst, unsigned char nSrcLength)
{
    unsigned char  nDstLength;   // 目標字符串長度
    char ch;          // 用于保存一個字符
    unsigned char  i;
    
    // 復制串長度
    nDstLength = nSrcLength;
    
    // 兩兩顛倒
    for(i=0; i<nSrcLength;i+=2)
    {
        ch = *pSrc++;        // 保存先出現的字符
        *pDst++ = *pSrc++;   // 復制后出現的字符
        *pDst++ = ch;        // 復制先出現的字符
    }
    
    // 源串長度是奇數嗎?
    if(nSrcLength & 1)
    {
        *(pDst-2) = 'F';     // 補'F'
        nDstLength++;        // 目標串長度加1
    }
    
    // 輸出字符串加個結束符
    *pDst = '\0';
    
    // 返回目標字符串長度
    return nDstLength;

}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲r级在线视频| 亚洲女同一区二区| 亚洲电影视频在线| 成人综合婷婷国产精品久久蜜臀 | 香蕉影视欧美成人| 成人午夜电影久久影院| 日韩欧美国产综合在线一区二区三区| 亚洲天堂a在线| 国产精品一区不卡| 日韩欧美国产一区二区在线播放| 亚洲午夜精品在线| 成人激情动漫在线观看| 久久久国产精品不卡| 免费看精品久久片| 欧美日韩日本视频| 亚洲精品视频免费观看| 成人黄色免费短视频| 久久亚洲春色中文字幕久久久| 天使萌一区二区三区免费观看| 色综合久久久网| 国产精品网站在线| 国产成人免费在线观看| 欧美刺激脚交jootjob| 天天影视涩香欲综合网| 欧美中文字幕一区二区三区| 亚洲视频电影在线| 91啪九色porn原创视频在线观看| 日本一区二区视频在线| 国产成人一区在线| 国产欧美一区二区精品仙草咪| 久久99国内精品| 日韩一区二区免费在线观看| 日日夜夜免费精品| 欧美精品欧美精品系列| 午夜精品久久久久久久99水蜜桃| 欧美色电影在线| 亚洲伊人伊色伊影伊综合网| 日本久久电影网| 亚洲精品中文在线影院| 色哦色哦哦色天天综合| 一区av在线播放| 欧美在线你懂的| 亚洲成人自拍一区| 欧美日韩午夜影院| 日韩精品视频网| 欧美一级高清片在线观看| 玖玖九九国产精品| 欧美精品一区二区三区四区 | 亚洲一区在线观看免费观看电影高清 | 久久久91精品国产一区二区精品 | 麻豆成人久久精品二区三区小说| 日韩亚洲欧美在线| 激情国产一区二区| 国产校园另类小说区| 国产成人精品一区二| 国产精品高潮久久久久无| 色狠狠色狠狠综合| 亚洲国产视频在线| 欧美丰满少妇xxxxx高潮对白| 日本欧美久久久久免费播放网| 91精品国产综合久久精品app| 美女一区二区久久| 国产亚洲成aⅴ人片在线观看| caoporn国产精品| 一区二区三区在线看| 6080午夜不卡| 国产成人在线色| 亚洲欧美国产77777| 欧美猛男男办公室激情| 伦理电影国产精品| 国产精品区一区二区三区| 91麻豆福利精品推荐| 亚洲成人自拍偷拍| 久久久综合激的五月天| 9色porny自拍视频一区二区| 五月激情综合色| 精品播放一区二区| 91丨九色丨国产丨porny| 亚洲18色成人| 久久久.com| 欧美性色综合网| 久久黄色级2电影| 中文字幕日韩精品一区| 欧美另类z0zxhd电影| 国产寡妇亲子伦一区二区| 一区二区三区91| 久久综合色婷婷| 日本韩国欧美一区| 精品系列免费在线观看| 日韩美女视频一区二区| 日韩精品专区在线影院重磅| 成av人片一区二区| 欧美aa在线视频| 亚洲视频一区二区免费在线观看| 欧美男生操女生| 不卡在线观看av| 免费一级欧美片在线观看| 国产精品久久久久aaaa| 91麻豆精品国产91久久久| jlzzjlzz亚洲日本少妇| 日韩黄色一级片| 亚洲婷婷国产精品电影人久久| 日韩一级精品视频在线观看| 91女人视频在线观看| 捆绑调教一区二区三区| 一区二区三区精品视频| 久久久久久久久久久久久女国产乱| 欧美午夜精品免费| 国产不卡视频一区| 蜜桃视频一区二区三区在线观看| 中文字幕中文字幕一区二区| 日韩精品一区二区三区在线播放| 日本韩国一区二区三区| 成人免费视频一区| 久久激五月天综合精品| 亚洲成人一二三| 亚洲图片你懂的| 欧美极品xxx| 精品免费一区二区三区| 欧美日韩精品久久久| 91丝袜国产在线播放| 国产盗摄女厕一区二区三区| 免费在线成人网| 三级久久三级久久久| 亚洲欧美另类在线| 国产精品私房写真福利视频| 欧美精品一区二区三区一线天视频 | 麻豆精品一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 国产亚洲精品福利| 精品盗摄一区二区三区| 欧美一二三区精品| 欧美日韩另类一区| 欧美伊人久久久久久久久影院 | 99国内精品久久| 成人午夜又粗又硬又大| 国产精品一区二区在线播放| 久久精品国内一区二区三区| 日韩黄色小视频| 日本强好片久久久久久aaa| 亚洲一级不卡视频| 亚洲综合色网站| 亚洲男女一区二区三区| 最好看的中文字幕久久| 中文字幕一区二区三区色视频| 中文字幕第一区综合| 国产午夜一区二区三区| 国产日韩欧美综合一区| 国产亚洲1区2区3区| 国产亚洲美州欧州综合国| 国产性天天综合网| 久久久久久久久伊人| 亚洲精品一区二区三区香蕉| 久久亚洲一级片| 久久久精品国产免大香伊| 国产亚洲一区二区三区在线观看| 欧美白人最猛性xxxxx69交| 欧美不卡在线视频| 久久久综合网站| 中文在线资源观看网站视频免费不卡 | 99久久国产免费看| 91视视频在线观看入口直接观看www | 天天影视涩香欲综合网| 蜜臀a∨国产成人精品| 麻豆91免费看| 国产精品99精品久久免费| 国产成人精品在线看| bt欧美亚洲午夜电影天堂| 91国内精品野花午夜精品| 欧美视频在线一区| 日韩久久久精品| 国产欧美综合在线| 亚洲女同女同女同女同女同69| 亚洲一二三专区| 麻豆成人久久精品二区三区红| 国内久久精品视频| 成人网男人的天堂| 欧美在线综合视频| 欧美一级黄色片| 国产欧美视频在线观看| 18欧美乱大交hd1984| 夜夜精品视频一区二区| 日韩精品视频网| 国产成人日日夜夜| 91女厕偷拍女厕偷拍高清| 欧美精品丝袜中出| 久久精品人人爽人人爽| 亚洲天堂久久久久久久| 石原莉奈一区二区三区在线观看| 久久国产精品无码网站| 成人动漫一区二区| 欧美久久久一区| 久久久精品免费免费| 亚洲乱码国产乱码精品精98午夜 | 一区二区三区在线视频免费观看| 日本视频中文字幕一区二区三区| 国产成人夜色高潮福利影视| 色综合天天综合色综合av | 91国在线观看| 欧美精品一区二区在线播放|