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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? atrespparser.cpp

?? MTK平臺COM口通訊的源代碼。很底層的。可以學(xué)習(xí)一下。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 * ATRespParser.cpp
 *
 * Project:
 * --------
 *   Maui_SW factory hardware testing tool.
 *
 * Description:
 * ------------
 *	 This module implements the parser of the AT response. This parser will 
 *	 parse the response of modern and send the result to upper layer.
 *	
 * Author:
 * -------
 * Spancer 	(mtk00264)
 *
 *==============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#include "ATRespParser.h"
#include "ATResult.h"

ATRespParser::ATRespParser()
{
	AThread::AThread();
	Raw_Buffer = NULL;
	readIndex =0;

	cr = 0x0d;
	lf = 0x0a;

	m_usc_cb = NULL;
	
	stopEvent = false;
	m_waitGtAndSpace = false;
}



ATRespParser::~ATRespParser()
{

}

bool ATRespParser::CheckIfGetGtandSpace()
{
	if(respDataBuf[0]=='>' && respDataBuf[1]==' ')
		return true;
	else
		return false;
}

void ATRespParser::CleanResult(ATResult& rt)
{
	rt.resultLst.clear();
}

// Get the data from the two CR LF tag
void ATRespParser::FillBufferByState(unsigned char ch, int &state)
{
	unsigned char ch2;

	switch(state)
	{
	case 0:
		// Get the first tag of CR LF
		if(ch == GetCrByte())
		{
			while(!stopEvent)
			{
				if(	Raw_Buffer->CheckOut(ch2)==true)
				{
					if(ch2 == GetLfByte())
					{
						state = 1;
						writeIndex = 0;
						break;
					}
				}
			}
		}
	break;

	case 1:
		// Get the data between two CR LF
		if(ch!=GetCrByte())
		{
			respDataBuf[writeIndex++]=ch;
		}
		else
		{
			while(!stopEvent)
			{
				if(Raw_Buffer->CheckOut(ch2)==true)
				{
					if(ch2 == GetLfByte())
					{
						respDataBuf[writeIndex]='\0';

						AnalyingRespString();
						writeIndex =0;
						state = 0;
						break;
					}
				}
			}
		}

	break;
	
	default:

	break;

	}

}


void ATRespParser::SetCallBack(void(*unSolicitedFunc)(ATResult& result))
{
	m_usc_cb = unSolicitedFunc;	
}



bool ATRespParser::AnalyingBuffer()
{

	GetOneCrLf();

	return true;
}

bool ATRespParser::AnalyingRespString()
{

	int size = strlen(respDataBuf);
	char	tmp[1024];
	int		tmpWI =0;
	bool	ignoreWhiteSpace = false;
	string endString;
	string command = "";
	bool    stag = false;
	bool    getDbQEmptyString=false;


	ATParamElem elem;
	ATParamLst	paraLst;

	readIndex =0;

	while(readIndex!=(size+1))
	{
		switch(respDataBuf[readIndex])
		{
		case '\0':
			tmp[tmpWI] = '\0';
			if (command.empty())
				command = tmp;
			else
				endString = tmp;

			if(command == "> ")
			{
				tmp[0]='\0';
			}
			else if(command == "OK"
			|| command == "ERROR"
			|| command == "CONNECT"
			)
			{

				// Just fill the data to the result structure
				result.result = AT_SUCCESS;
				
				elem.type = AT_STRING;
				elem.str_value = command;
				paraLst.eleLst.push_back(elem);

				
				result.resultLst.push_back(paraLst);

				if(result.expectedCommand == "+ESLP"
				&& command == "OK")
				{
					if(Raw_Buffer!=NULL)	
						Raw_Buffer->Clear();
				}

				Sync();

				tmp[0]='\0';


			}
			else if(command == "+CME ERROR"
				 || command == "+CMS ERROR")
			{
				ATParamElem telem;
				telem.type = AT_INTEGER;
				telem.int_value = atoi(tmp);
				paraLst.eleLst.push_back(telem);

				result.result = AT_SUCCESS;
				result.resultLst.push_back(paraLst);

				tmp[0] = '\0';
				Sync();
				
			}
			else if(IsUnsolicited(command, paraLst))
			{
				//Check if current paraLst  is a unsolicited command
				// Call the unsolicited call back function to notify
				// upper layer.

				if(sizeof(tmp)!=0)
					GetParam(tmp, paraLst, false);

				UnsolicitedGetPdu(tmp, 2047, paraLst);

				unsolicitedRt.result = AT_SUCCESS;
				unsolicitedRt.resultLst.push_back(paraLst);

				m_usc_cb(unsolicitedRt);
				CleanResult(unsolicitedRt);
			}
			else if(command == result.expectedCommand )
			{
				// Get the pdu block and push it the the parameter list

				if((strlen(tmp)!=0 )
				|| (getDbQEmptyString == true))
					GetParam( tmp, paraLst, stag);

				if(pduFlag)
				{
					// Get PDU
					GetPdu(tmp, 2047);

					// Put to parameter list
					elem.type = AT_STRING;
					elem.str_value = tmp;

					paraLst.eleLst.push_back(elem);
				}
				result.resultLst.push_back(paraLst);
			}
			break;

		case ',':
			tmp[tmpWI]='\0';
			GetParam( tmp, paraLst, stag);
			tmpWI = 0;
			stag = false;
			ignoreWhiteSpace = true;

			break;

		case ':':
			tmp[tmpWI]='\0';
			ignoreWhiteSpace = true;

			readIndex++;	// skip ':'

			command = tmp;

			elem.type = AT_STRING;
			elem.str_value = command;
			paraLst.eleLst.push_back(elem);

			tmpWI = 0; // clear tmp
			
			break;

		case '(':
			GetList(tmp, tmpWI, elem);
			paraLst.eleLst.push_back(elem);
			elem.paramLst.clear();

			SkipComma(respDataBuf, readIndex, size);

			tmp[0]='\0';
			break;

		case '"':		

			if(!GetStringToBuf(tmp, tmpWI, (size+1)))
				return false;

			if(strlen(tmp)==0)
				getDbQEmptyString = true;

			stag = true;

			break;

		default:
			if(ignoreWhiteSpace == false)
			{
				tmp[tmpWI++] = respDataBuf[readIndex];
			}
			else
			{
				if(respDataBuf[readIndex]!=' ')
				{
					ignoreWhiteSpace = false;
					tmpWI = 0;
					tmp[tmpWI++] = respDataBuf[readIndex];
				}
			}
			
			break;
		}
		readIndex++;
	}	

	return true;
}

char ATRespParser::GetCrByte()
{
	return cr;
}

HANDLE ATRespParser::GetWriteEvent()
{
	return m_hWriteEvt;
}

DWORD ATRespParser::HelpThreadFunc(LPVOID param)
{
	ATRespParser *pto = (ATRespParser *)param;

	return pto->ThreadFunc();
}


char ATRespParser::GetLfByte()
{
	return lf;
}

bool ATRespParser::GetInteger(char *ptr, int length, ATResult &result)
{
	return true;
}


bool ATRespParser::GetInterval(char *ptr, int length, ATResult& result)
{

	return true;
}

// Parse the data between ()
bool ATRespParser::GetList(char* ptr, int& wi, ATParamLst& lst)
{
	ATParamElem elems;
	bool		intervalFlag=false;

	bool stag = false;

	wi = 0;
	readIndex++;  // Skip (
	
	while(respDataBuf[readIndex]!=')')
	{
		switch(respDataBuf[readIndex])
		{
		case ',':
			
			GetParam(ptr, elems, stag);
			stag = false;
			break;

		case '"':
			GetString(ptr, wi, elems);
			stag = true;
			wi = 0;
			break;

		case '-':
			// Case of interval
			intervalFlag = true;
			
			ptr[wi]='\0';
			if(IsNumber(ptr))
				elems.int_range_begin = atoi(ptr);
			else
				return false;

			wi = 0;
			readIndex++;
			while(respDataBuf[readIndex]!=')')
			{
				ptr[wi++] = respDataBuf[readIndex++];
			}

			ptr[wi]='\0';
			if(IsNumber(ptr))
				elems.int_range_end = atoi(ptr);
			else
				return false;
			

			break;

		case '\0':
			return false;
			break;

		case '(':
			GetList(ptr, wi, elems);
			break;

		default:
			ptr[wi++] = respDataBuf[readIndex++];
			break;

		}
	}


	if(intervalFlag)
	{
		elems.type = AT_INTERVAL;
	}
	else
	{
		elems.type = AT_PARA_LIST;
	
	}
	lst.eleLst.push_back(elems);
	
	
	return true;
}

bool ATRespParser::GetLstParam(char *ptr, ATParamElem& elem)
{
	ATParamElem elemLocal;

	if(strlen(ptr)==0)
		elemLocal.type = AT_OMIT;

	if(IsNumber(ptr))
	{
		elemLocal.type = AT_INTEGER;
		elemLocal.int_value = atoi(ptr);
	}
	else
	{
		elemLocal.type = AT_STRING;
		elemLocal.str_value = ptr;
	}

	elem.paramLst.push_back(elem);


	return true;
}

bool ATRespParser::GetLstString(char *ptr, int& wi, ATParamElem& elem)
{
	ATParamElem  elemLocal;

	readIndex++; // Skip "

	wi = 0;

	while(respDataBuf[readIndex]!='"')
	{
		switch(respDataBuf[readIndex])
		{
		case '\0':
			return false;

			break;

		default:
			ptr[wi++] = respDataBuf[readIndex++];
			break;
		}
	}

	

	ptr[wi]='\0';


	return true;
}


bool ATRespParser::GetList(char *ptr, int& wi, ATParamElem& elem)
{

	ATParamElem elemLocal;

	elem.type = AT_PARA_LIST;

	bool stag = false;

	wi = 0;
	readIndex++;  // Skip (
	
	while(respDataBuf[readIndex]!=')')
	{
		switch(respDataBuf[readIndex])
		{
		case ',':
			GetParam(ptr, elem, stag);
			ptr[0]='\0';;
			wi = 0;
			stag = false;
			break;

		case '"':
			GetLstString(ptr, wi, elem);

			stag = true;
			
			break;

		case '-':
			// Case of interval
			elem.type = AT_INTERVAL;
			ptr[wi]='\0';
			
			if(IsNumber(ptr))
				elem.int_range_begin = atoi(ptr);
			else
				return false;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费精品视频在线| 色就色 综合激情| 99精品久久只有精品| 欧美一区二区三区视频免费| 欧美激情一区二区在线| 亚洲成人自拍一区| youjizz久久| 精品盗摄一区二区三区| 亚洲成人免费看| av不卡在线播放| 日韩精品中文字幕一区二区三区 | www.亚洲色图| 精品播放一区二区| 日韩av在线免费观看不卡| 色狠狠色狠狠综合| 国产精品久久久久久久岛一牛影视| 奇米在线7777在线精品| 欧美午夜免费电影| 亚洲欧美日韩一区二区 | 波多野结衣亚洲一区| 日韩欧美一区二区在线视频| 一区二区在线观看av| 成人动漫在线一区| 欧美国产一区二区| 国产麻豆精品视频| 精品国产免费人成在线观看| 亚洲国产精品久久艾草纯爱| 色88888久久久久久影院按摩| 久久精品亚洲麻豆av一区二区| 麻豆精品国产传媒mv男同| 欧美精选午夜久久久乱码6080| 一区二区三区中文字幕精品精品| 91亚洲精品久久久蜜桃网站 | 宅男在线国产精品| 婷婷成人激情在线网| 欧美日韩在线不卡| 五月婷婷综合网| 欧美三日本三级三级在线播放| 亚洲精品精品亚洲| 欧美在线啊v一区| 亚洲v日本v欧美v久久精品| 欧美三级一区二区| 日本在线不卡一区| 欧美一区二区三区在线观看视频| 日本aⅴ免费视频一区二区三区| 欧美另类高清zo欧美| 日韩av午夜在线观看| 日韩亚洲电影在线| 韩日精品视频一区| 国产精品素人一区二区| 色综合天天狠狠| 亚洲444eee在线观看| 欧美成人精精品一区二区频| 国产麻豆一精品一av一免费| 国产精品免费免费| 欧美系列日韩一区| 久久99精品久久久久| 亚洲国产成人午夜在线一区| 欧洲精品中文字幕| 麻豆精品视频在线观看| 国产精品久久久久影院老司| 91国内精品野花午夜精品| 日韩激情一区二区| 国产欧美日韩在线观看| 在线国产亚洲欧美| 麻豆成人免费电影| 亚洲品质自拍视频| 精品三级在线观看| 色综合久久久久网| 麻豆成人免费电影| 亚洲综合一区二区三区| 久久综合久久综合亚洲| 色素色在线综合| 国产精品一区在线| 三级影片在线观看欧美日韩一区二区 | 国产精品国产三级国产| 欧美人牲a欧美精品| 丁香婷婷综合五月| 日本亚洲视频在线| 亚洲女女做受ⅹxx高潮| 亚洲精品在线电影| 欧美日韩午夜在线| caoporm超碰国产精品| 日韩成人av影视| 一区二区三区日本| 国产欧美日韩激情| 日韩一区二区在线观看视频| 99精品国产视频| 国产福利精品一区| 久久aⅴ国产欧美74aaa| 亚洲综合丁香婷婷六月香| 国产亚洲欧洲997久久综合| 欧美日韩一级黄| 色欲综合视频天天天| 成人小视频在线| 久久66热re国产| 日韩精品乱码免费| 亚洲一区中文日韩| 亚洲青青青在线视频| 中文字幕+乱码+中文字幕一区| 日韩一二三区不卡| 在线成人免费观看| 欧美性色aⅴ视频一区日韩精品| 成人免费毛片aaaaa**| 国产精品99久久久久久久女警| 蜜臀av在线播放一区二区三区| 亚洲r级在线视频| 亚洲伊人伊色伊影伊综合网| 一区二区三区四区亚洲| 中文字幕一区二区三| 中文在线资源观看网站视频免费不卡 | 国产精品免费观看视频| 国产视频在线观看一区二区三区| 精品国产乱码久久久久久闺蜜| 91麻豆精品国产91久久久久 | 一本色道a无线码一区v| 99久久免费精品| 91亚洲精品久久久蜜桃网站 | 亚洲色图一区二区| 亚洲欧美一区二区三区国产精品 | 蜜臀va亚洲va欧美va天堂| 日韩av电影免费观看高清完整版 | 国产不卡在线播放| 国产不卡一区视频| 波波电影院一区二区三区| aaa欧美色吧激情视频| 91网站在线观看视频| 一本一道综合狠狠老| 欧美午夜免费电影| 91精品国产色综合久久ai换脸| 91精品国产高清一区二区三区 | 91成人免费在线| 制服丝袜在线91| 欧美精品一区二区久久久| 久久色在线视频| 亚洲欧美区自拍先锋| 午夜国产不卡在线观看视频| 日韩av一级片| 国产+成+人+亚洲欧洲自线| 成人av网站在线| 欧美性生交片4| 欧美精品一区二区三区蜜桃视频| 国产精品久久久久久久久图文区| 亚洲同性gay激情无套| 亚洲成人免费看| 国产成人精品亚洲午夜麻豆| 91在线视频观看| 91麻豆精品国产91久久久久| 国产午夜亚洲精品午夜鲁丝片| 亚洲视频一区二区免费在线观看| 亚洲高清中文字幕| 国产精品99久久久久久久vr| 白白色亚洲国产精品| 666欧美在线视频| 中文字幕不卡的av| 婷婷成人激情在线网| 国产成人三级在线观看| 欧美日韩免费一区二区三区视频| 精品久久久久香蕉网| 亚洲蜜臀av乱码久久精品| 精品一区二区在线播放| 色噜噜狠狠成人网p站| 亚洲精品一区二区三区99| 亚洲精品你懂的| 国产福利电影一区二区三区| 777亚洲妇女| 亚洲人成网站精品片在线观看 | 国产女主播视频一区二区| 一区二区三区四区不卡视频 | 欧美性xxxxx极品少妇| 国产欧美日韩三区| 日本sm残虐另类| 欧美体内she精高潮| 国产精品视频线看| 久久国内精品自在自线400部| 91麻豆精东视频| 久久久久国产一区二区三区四区 | 亚洲丝袜精品丝袜在线| 国产乱对白刺激视频不卡| 欧美肥妇bbw| 一区二区三区不卡视频| 99免费精品在线观看| 精品国精品自拍自在线| 日韩不卡一二三区| 91成人网在线| 亚洲一区自拍偷拍| 一道本成人在线| 亚洲免费大片在线观看| www.一区二区| 亚洲四区在线观看| gogo大胆日本视频一区| 亚洲国产高清不卡| 国产98色在线|日韩| 久久精品无码一区二区三区| 久久精品国产99久久6| 91麻豆精品国产91久久久 | 国产麻豆成人精品| 精品国产乱码久久久久久牛牛| 青青草原综合久久大伊人精品| 777精品伊人久久久久大香线蕉|