⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atrespparser.h

📁 MTK平台COM口通讯的源代码。很底层的。可以学习一下。
💻 H
字号:
/*****************************************************************************
*  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).
*
*****************************************************************************/
#ifndef _ATRESPPARSER_H
#define _ATRESPPARSER_H

#define AT_RESP_PARSER_BUFFER_LENGTH 8960

#include "ATResult.h"
#include "CircularBuf.h"
#include "Thread.h"

#include <string>

using namespace std;

typedef void (*unSolicitedCallback)(ATResult& result);

class ATRespParser
{
private:
	char respDataBuf[AT_RESP_PARSER_BUFFER_LENGTH];
	int  readIndex;
	int  writeIndex;
	

	HANDLE					m_hThread;
	HANDLE					m_ThreadId;

	HANDLE					m_hWriteEvt;
	HANDLE					m_hParserEvt;
	HANDLE					m_hStopEvt;
	HANDLE                  m_hWaitGtAndSpace;

	ACircularBuf<unsigned char> *Raw_Buffer;

	bool					stopEvent;
	char cr;
	char lf;

	string t;

	// This is the local varialbe
	ATResult				result;
	bool					pduFlag;
	ATResult				unsolicitedRt;

	unSolicitedCallback		m_usc_cb;

	bool					m_waitGtAndSpace;
	


public:
	ATRespParser();
	~ATRespParser();

	bool AnalyingBuffer();
	bool AnalyingRespString();

	bool StartParsing(	ACircularBuf<unsigned char> *raw_data, 
						unSolicitedCallback cb);
	bool StopParsing();

	char GetCrByte();
	char GetLfByte();
	bool SetCrByte(char _cr);
	bool SetLfByte(char _lf);
	void FillBufferByState(unsigned char ch, int &state);
	void SetExpectString(string string);
	void SetPduFlag(bool flag);
	void GetResult(ATResult& rt);
	void CleanResult(ATResult& rt);
	HANDLE GetWriteEvent();
	HANDLE GetParserEvent();
	HANDLE GetWaitGtAndSpaceEvent();
	void Sync();
	bool CheckIfGetGtandSpace();
	void SetWaitGtAndSpace(bool flag);
	void SetCallBack(void(*unSolicitedFunc)(ATResult& result));
	



private:

	bool GetString(char *ptr, int& wi, ATParamElem& elem);
	bool GetString(char *ptr, int& wi, ATParamLst& lst);
	bool GetLstString(char *ptr, int& wi, ATParamElem& elem);

	bool GetInterval(char *ptr, int length, ATResult& result);
	bool GetInteger(char *ptr, int length, ATResult& result);
	bool GetList(char *ptr, int& wi, ATParamElem& elem);
	bool GetList(char *ptr, int& wi, ATParamLst& lst);
	bool GetLstParam(char *ptr, ATParamElem& elem);
	bool GetParam(char *ptr, ATParamElem& elem, bool isString);
	bool GetParam(char *ptr, ATParamLst& lst, bool isString);

	bool GetOneCrLf();
	bool IsNumber(char *ptr);
	bool IsUnsolicited(string command, ATParamLst& lst);
	bool GetPdu(char *buf, const int maxLen);
	bool UnsolicitedGetPdu(char *buf, const int bufLen, ATParamLst& lst);

	bool GetStringToBuf(char *buf, int& wi, const int size);
	bool SkipComma(char *buf, int& ri, const int size);

	HANDLE GetHandle()
	{
		return m_hThread;
	}
	
	void WaitForExit();
	bool StartThread();


	// For thread operation
	DWORD WINAPI ThreadFunc();
	void StopThread();

	static DWORD HelpThreadFunc(LPVOID param);

};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -