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

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

?? modeocom.cpp

?? modem串口接口,通過它可與方便與modem通信。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ModeoCom.cpp: implementation of the ModeoCom class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ModeoCom.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define DEBUG_TIME 0
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
static ModeoCom *m_runAPI;
#define MAX_COMMDAND_STR 9
static DWORD COMMAD_CODE[16]=    {0x0000007B,0x21212121,0x32323232,0x43434343};//命令串
static DWORD COMMAD_CODE_EX[16]= {0x0000008B,0x21212121,0x32323232,0x43434343};
static DWORD MOUSE_TABE[16]=     {0x0000009B,0x31313131,0x14141414,0x51515151};
static DWORD KEY_TABE[16]=       {0x000000AB,0x13131313,0x41414141,0x51515151};


static DWORD crc32_table_ex[256] = 
{
  0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
  0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
  0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
  0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
  0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
  0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
  0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
  0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
  0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
  0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
  0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
  0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
  0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
  0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
  0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
  0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
  0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
  0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
  0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
  0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
  0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
  0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
  0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
  0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
  0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
  0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
  0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
  0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
  0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
  0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
  0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
  0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
  0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
  0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
  0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
  0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
  0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
  0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
  0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
  0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
  0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
  0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
  0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
  0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
  0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
  0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
  0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
  0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
  0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
  0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
  0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
  0x2d02ef8dL
};

DWORD ModeoCom::GetCRC32(BYTE * databuf,DWORD len)
{

    DWORD temp;
    DWORD oldcrc=0xffffffff;
	while(len--){
		temp = (oldcrc ^(*databuf++)) & 0x000000FF;
		oldcrc  = (( oldcrc >> 8) & 0x00FFFFFF) ^ crc32_table_ex[temp];
    }
	return ~oldcrc; 
}

void FenTxRxSpeek(char *ip,long ln,DWORD &R,DWORD &T)//分析串
{
	//“CONNECT 115200/V34/LAPM/V42BIS/33600:TX/33600:RX”
	R=0;
	T=0;
	int n,k;
	BYTE ch;
	for(k=0;k<ln;k++)
	{
		if(memcmp(&ip[k],":TX",3)==0)
		{
			n=k;
			n--;
			for(;n>=0;n--)
			{
				ch=(BYTE)ip[n];
				if(ch<'0' || ch>'9')
				{
					T=atoi(&ip[n+1]);
					break;
				}
			}
		}
		if(memcmp(&ip[k],":RX",3)==0)
		{
			n=k;
			n--;
			for(;n>=0;n--)
			{
				ch=(BYTE)ip[n];
				if(ch<'0' || ch>'9')
				{
					R=atoi(&ip[n+1]);
					break;
				}
			}
		}
	}

	if(R==0)
	{
		for(k=0;k<ln;k++)
		{
			if(memcmp(&ip[k],"CONNECT",7)==0)
			{
				R=atoi(&ip[k+8]);
				break;
			}
		}
	}
}
static char End_code[MAX_COMMDAND_STR][16]=
{
	"CONNECT",//0、已連接
	"OK",//1、OK
	"RING",//2、來電
	"NO CARRIER",//3、丟失或未檢測到載波 
	"ERROR",//4、錯誤
	"NO DIALTONE",//5、未檢測到撥號音 
	"BUSY",//6、檢測到忙音 
	"NO ANSWER",//7、無靜音應答 
	"DELAYED",//8、所撥的號碼已延遲 
};

DWORD WINAPI SouProF(void *vp)
{
	if(m_runAPI==NULL) return 0;
	m_runAPI->Run();
	return 0;
}

ModeoCom::ModeoCom()
{
	m_runAPI=NULL;
	hCom=NULL;
	S_Event=NULL;
	m_buf=new BYTE[65536];
	R_buf=new BYTE[65536];
	S_buf=new BYTE[65536];
	R_ln=0;
	m_Input=0;
	m_out=0;
	RThread=NULL;
	m_Rx=0;
	memset(&m_OverlappedWrite,0,sizeof(OVERLAPPED));
	memset(&m_OverlappedRead,0,sizeof(OVERLAPPED));
	memset(&m_OverlappedWaite,0,sizeof(OVERLAPPED));
	memset(Err_code,0,128);
	R_Waite_Event=NULL;//用于上層查詢低層數據到達
    R_Message_Event=NULL;
	Read_Event=NULL;
	m_ln=0;
	memset(command_str,0,128);
	memset(command_ok,0,128);
	for(int k=0;k<MAX_COMMDAND_STR;k++) str_ln[k]=strlen(End_code[k]);
	m_NEW=FALSE;
	memset(command,0,64);
	command_ln=0;
	AUTO_MAC=FALSE;
	RING_COUNT=0;
	RING_TIME=2;
	m_Tall_time=0;
	num=0;//有多少個電話
	memset(MAC_th,0,32*32);
	m_Link=FALSE;
	m_hWnd=NULL;
	m_Ring_time=0;
	m_End_CodeEx=128;
	m_End_Code=128;
	hMutex=NULL;
	OPEN=0;
	DATA_MAC=0;
	m_LINK_OK=FALSE;
	R_time=0;
	m_FILE_OPEN=FALSE;
	wMutex=NULL;
}

ModeoCom::~ModeoCom()
{
	Close();
	if(m_buf!=NULL) delete m_buf;
	if(R_buf!=NULL) delete R_buf;
	if(S_buf!=NULL) delete S_buf;
	m_buf=NULL;
	R_buf=NULL;
	S_buf=NULL;
	if(OPEN==16) m_fp.Close();
}

void ModeoCom::Close()
{
	if(RThread!=NULL)//如果線程正在運行,則關門它
	{
	   ::TerminateThread(RThread,0);
	   RThread=NULL;
	   Sleep(500);
	}
	if(hCom!=NULL)    ::CloseHandle(hCom);
	if(S_Event!=NULL) ::CloseHandle(S_Event);
	if(m_OverlappedWrite.hEvent!=NULL) ::CloseHandle(m_OverlappedWrite.hEvent);
	m_OverlappedWrite.hEvent=NULL;
	if(m_OverlappedRead.hEvent!=NULL) ::CloseHandle(m_OverlappedRead.hEvent);
	m_OverlappedRead.hEvent=NULL;
	if(m_OverlappedWaite.hEvent!=NULL) ::CloseHandle(m_OverlappedWaite.hEvent);
	if(R_Waite_Event!=NULL) ::CloseHandle(R_Waite_Event);
	if(R_Message_Event!=NULL) ::CloseHandle(R_Message_Event);
	if(Read_Event!=NULL) ::CloseHandle(Read_Event);
    if(hMutex==NULL)CloseHandle(hMutex);
	if(wMutex!=NULL) CloseHandle(wMutex);
	wMutex=NULL;
	R_Waite_Event=NULL;//用于上層查詢低層數據到達
    R_Message_Event=NULL;
	m_OverlappedWaite.hEvent=NULL;
	hCom=NULL;
	S_Event=NULL;
	Read_Event=NULL;
	hMutex=NULL;
}
BOOL ModeoCom::OpenCom(char * con_name, DWORD speek)
{
	COMMTIMEOUTS CommTimeOuts ; //定義超時結構,并填寫該結構 
	DCB dcb;//
	DWORD m_ID,lRe;
	Close();//首先清除上次操作
	hCom=::CreateFile(con_name,GENERIC_READ|GENERIC_WRITE,//允許收發
		0,
		NULL,
		OPEN_EXISTING,
	    FILE_FLAG_OVERLAPPED|FILE_ATTRIBUTE_NORMAL, //使用異步通信 
		NULL);
	if(hCom==NULL||hCom==(void*)0xffffffff) 
	{
		strcpy(Err_code,"無法創建通信口");
		return(FALSE);
	}
	SetCommMask(hCom, EV_RXCHAR|EV_BREAK);//設置事件驅動的類型
	if(!SetupComm( hCom,4096,4096))
	{
		strcpy(Err_code,"設置通信緩沖區尺寸時出錯");
		Close();
		return FALSE; //設置輸入、輸出緩沖區的大小
	}
	memset(&CommTimeOuts,0,sizeof(COMMTIMEOUTS));
	CommTimeOuts.ReadIntervalTimeout=MAXDWORD;
	CommTimeOuts.ReadTotalTimeoutMultiplier=10;
	CommTimeOuts.ReadTotalTimeoutConstant=10;
	CommTimeOuts.WriteTotalTimeoutMultiplier=10;
	CommTimeOuts.WriteTotalTimeoutConstant=50;
	if(!SetCommTimeouts( hCom, &CommTimeOuts ))
	{
		strcpy(Err_code,"設置通信操作超時結構時出錯");
		Close();
		return FALSE;//設置讀寫操作所允許的超時
	}
	GetCommState(hCom, &dcb ) ; //讀串口原來的參數設置 
	dcb.BaudRate =speek;//2400;//300bpi
	dcb.ByteSize =8;
	dcb.Parity = NOPARITY;//
	dcb.StopBits = ONESTOPBIT;
	dcb.fBinary = TRUE ;
	dcb.fParity = FALSE; 
	if(!SetCommState(hCom, &dcb )) 
	{
		strcpy(Err_code,"設置通信參數時出錯");
		Close();
		return FALSE;
	}
	PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR 
		|PURGE_RXCLEAR ); //清干凈輸入、輸出緩沖區 
	
	memset(&m_OverlappedWrite,0,sizeof(OVERLAPPED));
	memset(&m_OverlappedRead,0,sizeof(OVERLAPPED));
	memset(&m_OverlappedWaite,0,sizeof(OVERLAPPED));
	m_OverlappedWrite.hEvent =CreateEvent(NULL,TRUE,TRUE,NULL);
	m_OverlappedRead .hEvent =CreateEvent(NULL,TRUE,TRUE,NULL);
	m_OverlappedWaite .hEvent =CreateEvent(NULL,TRUE,TRUE,NULL);

	R_Waite_Event=CreateEvent(NULL,TRUE,TRUE,NULL);;//用于上層查詢低層數據到達
    R_Message_Event=CreateEvent(NULL,TRUE,TRUE,NULL);
	Read_Event=CreateEvent(NULL,TRUE,TRUE,NULL);

	wMutex=CreateMutex(NULL,FALSE,"MODEM_SEND_Mutex");

	::ResetEvent(R_Waite_Event);
	::ResetEvent(R_Message_Event);

	m_ln=0;
	m_runAPI=this;
	RThread=CreateThread(NULL,0,SouProF,&lRe,0,&m_ID);//創建一個服務線程
	if(m_OverlappedWrite.hEvent==NULL ||
		m_OverlappedRead.hEvent==NULL ||
		m_OverlappedWaite.hEvent==NULL||
		RThread==NULL)
	{
		strcpy(Err_code,"無法啟動各項異步接口函數");
		Close();
		return FALSE;
	}
	m_Rx=0;//清除數據收發量
	m_Tx=0;//
	return TRUE;
}

DWORD ModeoCom::ReadRun(DWORD waitetime)//請求上級調用
{
	DWORD dwEvtMask=0 ;
	WaitCommEvent( hCom, &dwEvtMask, &m_OverlappedWaite );
	if (WaitForSingleObject(m_OverlappedWaite.hEvent, 0xFFFFFFFF))return COM_ERROR;
	::ResetEvent(m_OverlappedWaite.hEvent);
	if(dwEvtMask & EV_TXEMPTY) if(S_Event!=NULL) ::SetEvent(S_Event);
	if(dwEvtMask & EV_RXCHAR)  return RX_DATA;//有數據到達
	if(dwEvtMask & EV_BREAK)
	{
		SaveData("***COM信號變化***");
		if(m_hWnd!=NULL)::PostMessage(m_hWnd,RING_COM,16,0);
	}
	return COM_ERROR;
}

DWORD ModeoCom::GetRvcLength(void) //輸入緩沖區有多少數據?
{
	COMSTAT ComStat ;
	DWORD dwErrorFlags;; 
	memset(&ComStat,0,sizeof(COMSTAT));
	ComStat.cbInQue=0;
	dwErrorFlags=0;
	ClearCommError(hCom, &dwErrorFlags, &ComStat ) ; 
	return ComStat.cbInQue ; 
}

long ModeoCom::RxData(void * lpData, DWORD ln)//讀數據
{
	DWORD dwLength=0;
	m_OverlappedRead.InternalHigh=0;
	m_OverlappedRead.Internal=0;
	m_OverlappedRead.Offset=0;
	m_OverlappedRead.OffsetHigh=0;
	::ReadFile( hCom,lpData,ln,&dwLength,&m_OverlappedRead);
	if (WaitForSingleObject(m_OverlappedRead.hEvent, 5000))return dwLength;
	::ResetEvent(m_OverlappedRead.hEvent);
	m_Rx+=dwLength;
	return dwLength;
}

long ModeoCom::TxData(void * lpData, DWORD ln)//發送數數據
{
	DWORD dwBytesWritten;
	Lock();
	dwBytesWritten=0;
	m_OverlappedWrite.InternalHigh=0;
	m_OverlappedWrite.Internal=0;
	m_OverlappedWrite.Offset=0;
	m_OverlappedWrite.OffsetHigh=0;
	WriteFile(hCom,lpData,ln,&dwBytesWritten,&m_OverlappedWrite);
	if (WaitForSingleObject(m_OverlappedWrite.hEvent,5000))
	{
		UnLock();
		return 0;
	}
	::ResetEvent(m_OverlappedWrite.hEvent);
	dwBytesWritten=m_OverlappedWrite.InternalHigh;
	m_Tx+=dwBytesWritten;
	UnLock();
	return dwBytesWritten;
}




void ModeoCom::Run()
{
	long rd,k;
	R_ln=0;
	ClsLastTimeData();//清除過時的數據
	while(1)
	{
		if(ReadRun(0)==1)
		{
			
			do
			{
				rd=GetRvcLength();
				if(rd>0)
				{
					m_Tall_time=GetTickCount();
					if(R_ln>65535) R_ln=0;
					k=65535-R_ln;
					if(k>rd) k=rd;
					k=RxData(&R_buf[R_ln],k);
					if(k>0) R_ln+=k;
					R_buf[R_ln]=0;
				}

			}while(rd>0);
		}
		
	}
}

void ModeoCom::ClsLastTimeData()
{
	R_ln=0;

	

}
void ModeoCom::ReadEx()
{
	int n,k;
	do
	{
		Sleep(100);
		n=GetRvcLength();
		if(n>0)
		{
			m_Tall_time=GetTickCount();
			if(R_ln>65535) R_ln=0;
			k=65535-R_ln;
			if(k>n) k=n;
			k=RxData(&R_buf[R_ln],k);
			if(k>0) R_ln+=k;
			R_buf[R_ln]=0;
		}
		
	}while(n>0);
				
}
void ModeoCom::ReadPro()
{
	WORD ls;
	long lx;
	int k,n,x;
	k=0;
	ls=0;
	while(R_ln>3 && k<R_ln)
	{
STATE_OPP:
		
		if(*(DWORD*)&R_buf[k]==0xBABABABA)//表明對方要送一個長包過來
		{
			lx=*(WORD*)&R_buf[k+4];
			ls=*(WORD*)&R_buf[k+6];
			if(m_ln<16) sou_speek_ln=GetTickCount();

			if(GetTickCount()-R_time>1000 && ls>4096)
			{
				if(m_hWnd!=NULL && DATA_MAC!=0)
					::PostMessage(m_hWnd,DATA_MAC+12,m_ln,ls);//來電顯示
				R_time=GetTickCount();
			}

			if((R_ln-k)>=(lx+16))
			{
				m_Tall_time=0;

				if(GetCRC32(&R_buf[16+k],lx)!=*(DWORD*)&R_buf[k+8])
				{
					R_ln=0;
					*(DWORD*)S_buf_ex=0xABABABAA;
					TxData(S_buf_ex,4);//回發數據錯誤CRC錯
					return;
				}

				if(m_Blck_time==*(DWORD*)&R_buf[k+12])
				{   //數據已收到了并且處理過了
					R_ln=0;
					*(DWORD*)S_buf_ex=0xABABABAB;
					TxData(S_buf_ex,4);//回發應答碼
					return;
				}
				else
				{
					m_Blck_time=*(DWORD*)&R_buf[k+12];
					if(m_ln+lx<65000)
					{
						memcpy(&m_buf[m_ln],&R_buf[k+16],lx);
						m_ln+=lx;
						R_ln=0;
						*(DWORD*)S_buf_ex=0xABABABAB;
						TxData(S_buf_ex,4);//回發應答碼
						if(m_ln>=ls)
						{
							if(m_hWnd!=NULL && DATA_MAC!=0)
								::PostMessage(m_hWnd,DATA_MAC,0,0);//來電顯示
							WaiteRead();
						}
						return;
					}
					else
					{
						R_ln=0;
						*(DWORD*)S_buf_ex=0xABABABAA;
						TxData(S_buf_ex,4);//回發數據錯誤
						return;
					}
				}
			}
			else
			{
				return;
			}
			return;
		}

		if(*(DWORD*)&R_buf[k]==0xABABABAB && (R_ln-k)>=4)//系統應答碼
		{
			m_Tall_time=0;
			Full(4+k);
			m_Code=1;//應答碼
			k=0;
			if(Read_Event!=NULL) ::SetEvent(Read_Event);
			if(R_ln==0) return;
			
		}
		
		if(*(DWORD*)&R_buf[k]==0xABABABAA && (R_ln-k)>=4)//系統應答碼
		{
			m_Tall_time=0;
			Full(4+k);
			m_Code=2;//應答碼
			k=0;
			if(Read_Event!=NULL) ::SetEvent(Read_Event);
			if(R_ln==0) return;
			
			
		}
		if(*(DWORD*)&R_buf[k]==0xBFBCBEB9) 
		{
			if(!RxFile(0,&R_buf[k])) return;
			k=0;
			
		}

		k++;
	}

    if(FindThDataMac()) return;//如果有來電顯示

	for(k=0;k<R_ln;k++)
	{
		for(n=0;n<MAX_COMMDAND_STR;n++)
		{
			if(memcmp(&R_buf[k],End_code[n],str_ln[n])==0)
			{
				ReadEx();

				m_Tall_time=0;
				m_End_Code=n;
				m_End_CodeEx=n;
				for(;k>=0;k--) if(R_buf[k]>127) break;
				if(k<0) k=0;
				x=strlen((char*)&R_buf[k]);
				if(x<128) strcpy(command_str,(char*)&R_buf[k]);
				R_ln=0;
				m_ln=0;
				x=strlen(command_str);
				for(lx=0;lx<x;lx++) if((BYTE)command_str[lx]<27) command_str[lx]=' ';
				SaveData(command_str);
				m_NEW=TRUE;
				if(n==0)FenTxRxSpeek(command_str,strlen(command_str),m_RxSeek,m_TxSeek);
				return;
			}
		}
	}

}


void ModeoCom::Full(int lx)
{
	int n;
	int k;
	n=R_ln-lx;
	for(k=0;k<n;k++) R_buf[k]=R_buf[k+lx];
	if(R_ln>lx) R_ln-=lx;
	else R_ln=0;
}

BOOL ModeoCom::Waite(DWORD tx)
{
	Sleep(0);//切換線程
	if(m_Code==1) return TRUE;
	if(m_Code==2) return FALSE;
	DWORD tr=GetTickCount();
	while(GetTickCount()-tr<tx+DEBUG_TIME)
	{
		if(m_Code==1) return TRUE;
		if(m_Code==2) return FALSE;
		if(Read_Event!=NULL)
		{
			::WaitForSingleObject(Read_Event,1000);
			::ResetEvent(Read_Event);
		}
		if(m_Code==1) return TRUE;
		if(m_Code==2) return FALSE;
	}
	return FALSE;
}

//***注意,上級線程應調用該函數,測試有沒有數據到過,典型應用為
//  
//  while(TestDataRx())
//	{ 
//    Read();
//    對讀出的數據進行處理
//  }

BOOL ModeoCom::TestDataRx(DWORD wait)//有數據到達嗎?如果沒有數據,則一直等待
{
	if(R_Message_Event==NULL) return FALSE;
	if(WaitForSingleObject(R_Message_Event,wait)) return FALSE;
	::ResetEvent(R_Message_Event);
	return TRUE;
}
void ModeoCom::WaiteRead()
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区中文免费| 精品久久久久一区| 亚洲综合在线观看视频| 色综合色狠狠综合色| 亚洲精品欧美激情| 欧美性猛交xxxxxxxx| 五月激情综合色| 精品精品欲导航| 国产91露脸合集magnet | 91精品国产综合久久精品麻豆| 亚洲午夜视频在线观看| 91.com在线观看| 国产一区视频在线看| 国产精品不卡视频| 欧美亚洲愉拍一区二区| 蜜臀久久99精品久久久画质超高清 | 激情深爱一区二区| 亚洲欧洲一区二区在线播放| 91网站视频在线观看| 日韩精品乱码av一区二区| 精品日韩一区二区| 99re热视频这里只精品| 亚洲不卡一区二区三区| 欧美精品一区二区三区蜜桃 | 91精品91久久久中77777| 肉丝袜脚交视频一区二区| 久久影音资源网| 91香蕉视频mp4| 老司机精品视频在线| 国产精品麻豆视频| 9191精品国产综合久久久久久| 韩国成人在线视频| 亚洲国产视频一区二区| 久久婷婷国产综合国色天香| 91浏览器入口在线观看| 青椒成人免费视频| 亚洲人成网站精品片在线观看| 欧美一区二区久久| 99v久久综合狠狠综合久久| 男人的j进女人的j一区| 中文无字幕一区二区三区 | 欧美在线视频你懂得| 麻豆91在线观看| 一区二区三区在线观看欧美 | 在线亚洲免费视频| 国产传媒久久文化传媒| 日本一不卡视频| 一区二区三区中文字幕精品精品 | 成人精品一区二区三区四区| 奇米影视一区二区三区| 亚洲精品视频在线| 国产精品素人视频| 精品成a人在线观看| 欧美日韩在线三级| 91偷拍与自偷拍精品| 国产精品亚洲成人| 蜜桃久久精品一区二区| 久久久久99精品国产片| 欧美在线|欧美| 欧美综合久久久| 国产黄色成人av| 日韩高清一区二区| 亚洲视频一区二区在线| 精品国产乱码久久久久久1区2区| 一本久久a久久免费精品不卡| 亚洲不卡av一区二区三区| 国产精品不卡在线| 久久午夜老司机| 3atv一区二区三区| 91麻豆成人久久精品二区三区| 韩国女主播一区| 日本午夜一本久久久综合| 亚洲婷婷在线视频| 国产欧美va欧美不卡在线| 色婷婷精品久久二区二区蜜臂av| 国产精品99久久久久久有的能看| 日本美女一区二区三区| 一区二区三区日韩精品| 国产精品美女视频| 国产亚洲福利社区一区| 日韩欧美123| 在线播放/欧美激情| 欧美三级中文字| 在线看日本不卡| 欧美日韩一级二级| 欧美亚男人的天堂| 色婷婷综合久久久久中文 | 欧美成人性福生活免费看| 欧美日韩国产综合一区二区| 91麻豆国产精品久久| a4yy欧美一区二区三区| 成人深夜视频在线观看| 国产jizzjizz一区二区| 国产一区二区不卡| 处破女av一区二区| 成人av网址在线观看| 国产成人亚洲综合a∨婷婷图片 | 亚洲成人动漫精品| 天天亚洲美女在线视频| 亚洲bt欧美bt精品777| 亚洲成av人片在www色猫咪| 亚洲午夜久久久| 亚洲另类色综合网站| 亚洲国产精品视频| 日韩经典中文字幕一区| 日韩av电影天堂| 久久se精品一区二区| 国产一区欧美日韩| 国产成人精品免费| av成人免费在线观看| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 一本一本大道香蕉久在线精品 | 成人午夜在线免费| 粉嫩aⅴ一区二区三区四区五区 | 亚洲一线二线三线视频| 亚洲超碰97人人做人人爱| 亚洲v中文字幕| 国产91在线观看丝袜| 在线亚洲一区二区| 在线综合+亚洲+欧美中文字幕| 精品少妇一区二区三区视频免付费| 久久久精品综合| 成人免费在线视频观看| 亚洲18女电影在线观看| 亚洲动漫第一页| 粉嫩欧美一区二区三区高清影视| 91久久精品一区二区三区| 欧美一区二区三区在线电影| 精品久久免费看| 亚洲人被黑人高潮完整版| 午夜精品久久久久久久久| 国产一区二三区| 91麻豆成人久久精品二区三区| 成人黄色在线看| 欧美大白屁股肥臀xxxxxx| 中文字幕av一区二区三区 | 一区二区三区欧美日| 日本最新不卡在线| 成人动漫一区二区三区| 91精品午夜视频| 国产精品免费久久久久| 亚洲一区精品在线| 99国产麻豆精品| 日韩精品在线一区| 亚洲人成人一区二区在线观看| 麻豆成人久久精品二区三区红| 91亚洲精品久久久蜜桃网站| 日韩一级高清毛片| 亚洲色图视频网| 日本欧美在线观看| 欧美久久婷婷综合色| 国产精品久久久久aaaa樱花| 青椒成人免费视频| 色国产精品一区在线观看| 欧美r级在线观看| 午夜激情久久久| 色综合婷婷久久| 久久久www成人免费毛片麻豆| 亚洲精品第1页| 成人免费电影视频| 精品成人免费观看| 精品一区二区三区久久久| 欧美午夜精品一区二区蜜桃| 国产精品嫩草久久久久| 美女一区二区三区在线观看| 欧美视频在线观看一区| 18成人在线视频| 成人性视频免费网站| 国产日产欧美一区二区三区| 日韩va亚洲va欧美va久久| 欧美在线视频不卡| 国产精品久久久久久亚洲毛片| 波多野结衣的一区二区三区| 国产人久久人人人人爽| 精品一区中文字幕| 欧美白人最猛性xxxxx69交| 亚洲高清在线精品| 在线视频一区二区三| 亚洲裸体在线观看| 欧美午夜精品电影| 亚洲一区免费在线观看| 色婷婷综合五月| 一区二区三区久久| 一本大道久久a久久综合婷婷| 中文字幕在线不卡一区二区三区| 国产呦精品一区二区三区网站| 日韩视频一区二区三区| 另类中文字幕网| 精品美女被调教视频大全网站| 久草中文综合在线| 精品免费国产一区二区三区四区| 久久 天天综合| 久久色视频免费观看| 国产成人亚洲综合色影视| 中国av一区二区三区| 成人av资源下载| 亚洲免费观看视频| 欧美日韩精品欧美日韩精品一综合| 婷婷亚洲久悠悠色悠在线播放| 精品日韩成人av|