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

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

?? rs232.cpp

?? TMS320F2407通訊程序
?? CPP
字號:
////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232                                                                 ////
////                                                                        ////
////  Author: MonkeyKing     Aug 31th, 2003                                 ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////



#include <windows.h>

class RS232 {
public:

   RS232( void );
	RS232( LPCSTR lpszPortNum );
	~RS232();
   // For more definitions see <winbase.h>
	int open( LPCSTR lpszPortNum = "com1",    // 串口號
		       DWORD  dwBaudRate  = CBR_9600,  // 波特率
			    BYTE   byParity    = NOPARITY,  // 奇偶校驗
			    BYTE   byStopBits  = ONESTOPBIT,// 停止位個數(shù)
			    BYTE   byByteSize  = 8 );       // 字節(jié)長度
	DWORD	output( LPCVOID pdata, DWORD len );
	DWORD	input( LPVOID  pdest, DWORD len, DWORD dwMaxWait = 500 );
	LPSTR	GetErrorMessage( void );
   void close();

private:

	VOID	ErrorToString( LPCSTR lpszMessage );
	BOOL	IsNT( void );
	TCHAR       m_lpszErrorMessage[256];
	HANDLE      m_hCom;   // 串口句柄
	OVERLAPPED  m_ov;     // 包含異步輸入輸出操作信息的結(jié)構(gòu)
};



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::RS232()                                                        ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

RS232::RS232( void )
{
	m_hCom = 0;
	m_lpszErrorMessage[0] = '\0';
	ZeroMemory(&m_ov, sizeof(m_ov));
}

RS232::RS232( LPCSTR lpszPortNum )
{ 
	RS232::RS232();
	RS232::open( lpszPortNum ); 
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::~RS232()                                                       ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

RS232::~RS232() {
   close();
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::GetErrorMessage                                                ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

LPSTR	RS232::GetErrorMessage( void ) {
   return m_lpszErrorMessage;
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::open( )                                                        ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

int RS232::open( LPCSTR lpszPortNum, 
                 DWORD  dwBaudRate, 
                 BYTE   byParity,
                 BYTE   byStopBits,
				     BYTE   byByteSize ) {
	DCB  dcb;   //串口設備控制塊 Device Control Block
	BOOL bSuccess;

   // m_hCom即為函數(shù)返回的串口的句柄
	m_hCom = CreateFile( lpszPortNum,           // pointer to name of the file
	                     GENERIC_READ|GENERIC_WRITE, // 允許讀寫。
	                     0,                     // 通訊設備必須以獨占方式打開。
	                     NULL,                  // 無安全屬性,表示該串口不可
                                               // 被子程序繼承。
	                     OPEN_EXISTING,         // 通訊設備已存在。
	                     FILE_FLAG_OVERLAPPED,  // 使用異步方式 overlapped I/O。
	                     NULL);                 // 通訊設備不能用模板打開。
	if ( m_hCom == INVALID_HANDLE_VALUE ) {
	   RS232::ErrorToString("RS232::open()   CreateFile() failed, invalid handle value");
		return FALSE;
	}

   // 與串口相關的參數(shù)非常多,當需要設置串口參數(shù)時,通常是先取得串口
   // 的參數(shù)結(jié)構(gòu),修改部分參數(shù)后再將參數(shù)結(jié)構(gòu)寫入
	bSuccess = GetCommState(m_hCom, &dcb);
	if ( !bSuccess ) {
		RS232::close();
		RS232::ErrorToString("RS232::open()   GetCommState() failed");
		return FALSE;
	}
	dcb.BaudRate = dwBaudRate;   // 串口波特率。
	dcb.Parity   = byParity;     // 校驗方式,值0~4分別對應無校驗、奇
                                // 校驗、偶校驗、校驗、置位、校驗清零。 
   dcb.fParity = 0;             // 為1的話激活奇偶校驗檢查。
	dcb.ByteSize = byByteSize;   // 一個字節(jié)的數(shù)據(jù)位個數(shù),范圍是5~8。
	dcb.StopBits = byStopBits;   // 停止位個數(shù),0~2分別對應1位、1.5位、
                                // 2位停止位。
	if ( !bSuccess ) {
		RS232::close();
		RS232::ErrorToString("RS232::open()   SetCommState() failed");
		return FALSE;
	}

	return TRUE;
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::output()                                                       ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

DWORD RS232::output( LPCVOID pdata, DWORD   len ) {
	BOOL  bSuccess;
	DWORD written = 0;

	if ( len < 1 )
		return 0;
	// create event for overlapped I/O
	m_ov.hEvent = CreateEvent( NULL,   // pointer to security attributes 
	                           FALSE,  // flag for manual-reset event 
	                           FALSE,  // flag for initial state 
	                           "");    // pointer to event-object name 
	if ( m_ov.hEvent == INVALID_HANDLE_VALUE ) {
		RS232::ErrorToString( "RS232::output()   CreateEvent() failed" );
		return -1;
   }
	bSuccess = WriteFile( m_hCom,   // handle to file to write to  
	                      pdata,    // pointer to data to write to file 
	                      len,      // number of bytes to write 
	                      &written, // pointer to number of bytes written 
	                      &m_ov );  // pointer to structure needed for overlapped I/O
   // 如果函數(shù)執(zhí)行成功的話檢查written的值為寫入的字節(jié)數(shù),WriteFile函數(shù)執(zhí)行完畢后 
   // 自行填充的,利用此變量的填充值可以用來檢查該函數(shù)是否將所有的數(shù)據(jù)成功寫入串口
	if ( RS232::IsNT() ) {
		bSuccess = GetOverlappedResult( m_hCom, &m_ov, &written, TRUE );
		if ( !bSuccess ) {
			CloseHandle( m_ov.hEvent );
			RS232::ErrorToString( "RS232::output()   GetOverlappedResult() failed" );
			return -1;
		}
	}
	else if ( len != written ) {
		CloseHandle( m_ov.hEvent );
		RS232::ErrorToString( "RS232::output()   WriteFile() failed" );
		return -1;
	}
	CloseHandle( m_ov.hEvent );
	return written;
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::input()                                                        ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

DWORD RS232::input( LPVOID pdest, DWORD  len, DWORD  dwMaxWait ) {
   BOOL  bSuccess;
	DWORD result = 0,
	      read   = 0, // num read bytes
	      mask   = 0; // a 32-bit variable that receives a mask 
	                  // indicating the type of event that occurred
	if ( len < 1 )
      return(0);
   // create event for overlapped I/O
	m_ov.hEvent = CreateEvent( NULL,    // pointer to security attributes 
	                           FALSE,   // flag for manual-reset event 
	                           FALSE,   // flag for initial state 
	                           "" );    // pointer to event-object name 
	if ( m_ov.hEvent == INVALID_HANDLE_VALUE ) {
		RS232::ErrorToString( "RS232::input()   CreateEvent() failed" );
		return -1;
	}
   // Specify here the event to be enabled
	bSuccess = SetCommMask( m_hCom, EV_RXCHAR );
	if ( ! bSuccess ) {
		CloseHandle(m_ov.hEvent);
		RS232::ErrorToString("RS232::input()   SetCommMask() failed");
		return -1;
	}
   // WaitForSingleObject
	bSuccess = WaitCommEvent(m_hCom, &mask, &m_ov);
	if ( !bSuccess ) {
      int err = GetLastError();
		if ( err == ERROR_IO_PENDING ) {
		   result = WaitForSingleObject(m_ov.hEvent, dwMaxWait);  //wait dwMaxWait
		                                        // milli seconds before returning
			if ( result == WAIT_FAILED ) {
				CloseHandle(m_ov.hEvent);
				RS232::ErrorToString( "RS232::input()   WaitForSingleObject() failed" );
	      	return -1;
			}
		}
	}
	// The specified event occured?
   if ( mask & EV_RXCHAR ) 
	{
		bSuccess = ReadFile( m_hCom, // handle of file to read 
			               pdest,  // address of buffer that receives data 
				            len,    // number of bytes to read 
					         &read,  // address of number of bytes read 
						      &m_ov); // address of structure for data 
		if ( RS232::IsNT() ) {
		   bSuccess = GetOverlappedResult(m_hCom, &m_ov, &read, TRUE);
         if ( !bSuccess ) {
				CloseHandle( m_ov.hEvent );
				RS232::ErrorToString( "RS232::input()   GetOverlappedResult() failed" );
	      	return -1;
	 		}
		}
		else if ( !bSuccess ) {
         CloseHandle(m_ov.hEvent);
			RS232::ErrorToString( "RS232::input()   ReadFile() failed" );
         return -1;
		}
	}
	else {
		CloseHandle(m_ov.hEvent);
		wsprintf( m_lpszErrorMessage, "RS232::input()   No EV_RXCHAR occured\n" );
      return -1;
	}
	CloseHandle(m_ov.hEvent);
	return read;
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::Close()                                                        ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

void RS232::close( void ) {
   if ( m_hCom > 0 )
	   CloseHandle( m_hCom );
   m_hCom = 0; 
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::IsNT                                                           ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

VOID RS232::ErrorToString( LPCSTR lpszMessage ) {
	LPVOID lpMessageBuffer;
	DWORD  error = GetLastError();

	FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
	               FORMAT_MESSAGE_FROM_SYSTEM,      // source and processing options
	               NULL,                            // pointer to message source
	               error,                           // requested message identifie
	               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // the user default language.
	               ( LPTSTR ) &lpMessageBuffer,     // pointer to message buffer
	               0,                               // maximum size of message buffer
	               NULL);                           // address of array of message inserts 

	// and copy it in our error string
	wsprintf(m_lpszErrorMessage,"%s: (%d) %s\n", lpszMessage, error, lpMessageBuffer);

	LocalFree(lpMessageBuffer);
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  RS232::IsNT                                                           ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

BOOL RS232::IsNT( void ) {
   OSVERSIONINFO osvi;
    
   osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
   GetVersionEx( &osvi );
   if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
      return TRUE;
   else
      return FALSE;
}



////////////////////////////////////////////////////////////////////////////////
////                                                                        ////
////  The End of RS232                                                      ////
////                                                                        ////
////////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本在线视频观看| 一区二区三区精品视频在线| 日本伊人精品一区二区三区观看方式| av在线一区二区| 久久精品国产成人一区二区三区 | 99久久精品国产观看| 99久久99久久综合| 成人动漫中文字幕| 亚洲欧洲99久久| 丁香婷婷综合色啪| 亚洲精品视频在线观看网站| 91原创在线视频| 欧美女孩性生活视频| 91精品国产综合久久香蕉麻豆| 婷婷丁香激情综合| 欧美乱熟臀69xxxxxx| 26uuu精品一区二区在线观看| 激情综合网av| 亚洲图片激情小说| 激情五月婷婷综合| 欧美视频在线一区| 蜜芽一区二区三区| 亚洲欧美综合另类在线卡通| 日韩精品一二三区| 中文久久乱码一区二区| 麻豆精品视频在线观看免费| 中文字幕欧美区| 91精品国产乱码久久蜜臀| 亚洲欧洲精品一区二区三区| 在线观看网站黄不卡| 国产黑丝在线一区二区三区| 日韩精品电影在线| 久久激情五月激情| 69av一区二区三区| 亚洲精品一线二线三线无人区| 成人精品一区二区三区四区| 亚洲欧洲国产日本综合| 欧美三级电影在线观看| 国产一二精品视频| 欧美三级三级三级| 狠狠色综合日日| 欧美系列亚洲系列| 国产精品久久久久久久午夜片| 欧美日韩综合在线免费观看| 亚洲一区在线播放| 欧洲激情一区二区| 亚洲一区二区欧美激情| av激情亚洲男人天堂| 久久精品人人做人人爽97| 欧美精品一卡二卡| 欧美色图一区二区三区| 一本一道综合狠狠老| 成人av在线资源网站| 大胆欧美人体老妇| 亚洲精品国产一区二区三区四区在线| 色综合天天做天天爱| 精品在线视频一区| 欧美日韩mp4| 久久成人免费电影| 国产精品夫妻自拍| 国产精品理论片在线观看| 日韩国产精品久久久久久亚洲| 久久精品国产一区二区三 | 三级在线观看一区二区| 国产精品一区二区久久精品爱涩 | 亚洲一区视频在线| 久久国内精品视频| 成人午夜碰碰视频| 婷婷一区二区三区| 国产欧美视频一区二区| 欧美性色欧美a在线播放| 色丁香久综合在线久综合在线观看| 青青草97国产精品免费观看| 国产精品久久久99| 99精品久久99久久久久| 色呦呦国产精品| 国产毛片精品视频| 九九视频精品免费| 国产成人在线观看免费网站| 日韩和欧美一区二区三区| 免费精品视频最新在线| 亚洲精品视频在线看| 国产喷白浆一区二区三区| 欧美极品另类videosde| 亚洲人成亚洲人成在线观看图片| 91精品视频网| 91色porny在线视频| 国产成人综合自拍| 色综合激情五月| 韩国欧美国产1区| 亚洲成a人片综合在线| 奇米影视一区二区三区小说| 亚洲精品国产品国语在线app| 成人av在线播放网站| 精品国产一区二区三区忘忧草| 精品对白一区国产伦| 中文字幕欧美国产| 久久久久99精品国产片| 亚洲成人资源在线| 国产一区二区三区视频在线播放| 99久久国产综合精品女不卡| 欧美色精品天天在线观看视频| 国产成人精品网址| 在线精品亚洲一区二区不卡| 日韩久久久精品| 欧美性色综合网| 精品久久久久久久久久久久包黑料 | 99视频一区二区| 六月丁香综合在线视频| bt欧美亚洲午夜电影天堂| 91蜜桃网址入口| 日韩精品一区二区在线| 7777女厕盗摄久久久| 久久久综合精品| 亚洲欧洲韩国日本视频| 亚洲图片激情小说| 精品伊人久久久久7777人| 色老汉一区二区三区| 一本一道久久a久久精品| 欧美zozo另类异族| 久久久午夜电影| 久久久综合网站| 欧美国产视频在线| 老司机一区二区| 欧美另类久久久品| 亚洲黄色片在线观看| 国产伦精品一区二区三区视频青涩 | 久久久久青草大香线综合精品| 91官网在线观看| 欧美在线你懂得| 国产亚洲女人久久久久毛片| 国产亚洲午夜高清国产拍精品| 日韩激情一区二区| 欧美综合欧美视频| 69堂精品视频| 一区二区三区加勒比av| 成人手机在线视频| 一本大道久久a久久精二百| 中文字幕精品一区二区精品绿巨人| 免费成人在线观看视频| 91久久一区二区| 这里是久久伊人| 亚洲大片在线观看| 91丨九色丨国产丨porny| 亚洲男帅同性gay1069| 亚洲国产日韩一级| 激情国产一区二区| 91精品国产综合久久福利软件| 日韩精品在线一区| 国产精品久久久久久一区二区三区| 亚洲一区二区三区四区在线| 99精品欧美一区二区蜜桃免费| 欧美中文字幕一区二区三区| 日韩一级视频免费观看在线| 亚洲成人动漫在线观看| 国产自产2019最新不卡| 日韩精品一区二区三区中文精品| 一区二区三区在线观看动漫| 99v久久综合狠狠综合久久| 中文字幕精品一区二区三区精品| 一区二区三区日韩欧美精品 | 日韩主播视频在线| 91精品婷婷国产综合久久性色| 国产午夜精品理论片a级大结局| 国产人久久人人人人爽| 亚洲一区免费视频| 国产麻豆欧美日韩一区| 国产精品少妇自拍| zzijzzij亚洲日本少妇熟睡| 国产精品福利一区| 免费精品视频最新在线| 日韩精品一区二区三区中文精品| 狠狠色狠狠色综合系列| 久久久不卡网国产精品一区| 成人激情动漫在线观看| 亚洲人成7777| 欧美在线免费观看亚洲| 视频一区欧美日韩| 精品日韩99亚洲| 国产69精品久久久久777| 国产欧美精品日韩区二区麻豆天美| 91麻豆免费看| 国产日韩欧美亚洲| 99精品久久久久久| 国产日产精品一区| 日本韩国欧美国产| 国产精品护士白丝一区av| 黑人巨大精品欧美黑白配亚洲| 国产精品天干天干在线综合| 91美女片黄在线| 国产美女精品在线| 亚洲精品成a人| 精品久久久影院| 欧美性生活影院| 国产精品午夜久久| 日韩欧美中文一区二区| gogogo免费视频观看亚洲一| 国产色产综合色产在线视频| 色综合久久精品| 国产精品资源在线看|