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

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

?? irdaport.cpp

?? irda communication on PPC. 和IrdaMobilePCSrc.zip一起使用。
?? CPP
字號:
//////////////////////////////////////////////////////////////////////
//
// IRDA Port class, a class for IRDA support.
//
// Copyright (c) 2003, Strigl Daniel.
//
// License:
// --------
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this source code; if not, write to the Free
// Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
// MA 02111-1307 USA.
//
// Author: Strigl Daniel, http://www.hh-system.com/danielstrigl
//
//////////////////////////////////////////////////////////////////////
//
// IrdaPort.cpp: implementation of the CIrdaPort class
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "IrdaPort.h"

#include <atlconv.h>

//////////////////////////////////////////////////////////////////////
// CIrdaPort construction/destruction
//////////////////////////////////////////////////////////////////////

CIrdaPort::CIrdaPort()
{
    m_hPort = INVALID_HANDLE_VALUE;
}

CIrdaPort::~CIrdaPort()
{
    Close();
}

IMPLEMENT_DYNAMIC(CIrdaPort, CObject);

//////////////////////////////////////////////////////////////////////
// CIrdaPort diagnostics
//////////////////////////////////////////////////////////////////////

#ifdef _DEBUG
void CIrdaPort::AssertValid() const
{
	CObject::AssertValid();
}

void CIrdaPort::Dump(CDumpContext& dc) const
{
    CObject::Dump(dc);

    dc << "m_hPort = " << m_hPort;
}
#endif // _DEBUG

//////////////////////////////////////////////////////////////////////
// CIrdaPort functions
//////////////////////////////////////////////////////////////////////

#if defined(UNDER_CE) // for Pocket PC application
UINT CIrdaPort::FindPortIndex()
{
	// Look into the registry for the infrared port number

    UINT uiPort = 0;
	HKEY hKey = NULL;

    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Drivers\\BuiltIn\\IrDA"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
    {
        DWORD dwSize = 0;

		if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
		{
			if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
			{
				DWORD dwData = 0;

        		if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
				{
					uiPort = (UINT) dwData;
				}
			}
		}

        RegCloseKey(hKey);
    }

	if (uiPort != 0)
		return uiPort;

	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Comm\\IrDA"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
	{
		DWORD dwSize = 0;

        if (RegQueryValueEx(hKey, _T("Port"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
		{
			if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
			{
    			DWORD dwData = 0;

	    		if (RegQueryValueEx(hKey, _T("Port"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
				{
				    uiPort = (UINT) dwData;
				}
			}
		}

		RegCloseKey(hKey);
    }

	if (uiPort != 0)
		return uiPort;

	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Comm\\IrDA\\Linkage"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
	{
		DWORD dwSize = 0;

		if (RegQueryValueEx(hKey, _T("Bind"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
		{
			if ((dwSize >= sizeof(TCHAR)) && (dwSize % sizeof(TCHAR) == 0))
			{
				LPTSTR pszSubKey = new TCHAR[dwSize / sizeof(TCHAR) + 1];

				if (RegQueryValueEx(hKey, _T("Bind"), NULL, NULL, (LPBYTE) pszSubKey, &dwSize) == ERROR_SUCCESS)
				{
					pszSubKey[dwSize / sizeof(TCHAR)] = _T('\0');

					CString strSubKey;
					strSubKey.Format(_T("Comm\\%s\\Parms"), pszSubKey);

					// AfxMessageBox(strSubKey);

					HKEY hNewKey = NULL;

					if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, 0, &hNewKey) == ERROR_SUCCESS && hNewKey != NULL)
					{
						dwSize = 0;

						if (RegQueryValueEx(hNewKey, _T("Port"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
						{
			                if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
							{
    			                DWORD dwData = 0;

	    		                if (RegQueryValueEx(hNewKey, _T("Port"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
								{
				                    uiPort = (UINT) dwData;
								}
							}
						}

						RegCloseKey(hNewKey);
					}
				}

				delete [] pszSubKey;
			}
		}

		RegCloseKey(hKey);
	}

	if (uiPort != 0)
		return uiPort;

    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Drivers\\BuiltIn\\IrCOMM"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
    {
        DWORD dwSize = 0;

		if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
		{
			if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
			{
				DWORD dwData = 0;

        		if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
				{
					uiPort = (UINT) dwData;
				}
			}
		}

        RegCloseKey(hKey);
    }

	return uiPort;
}
#endif // #if defined(UNDER_CE)

BOOL CIrdaPort::Open(UINT uiPort)
{
    ASSERT(uiPort > 0 && uiPort <= 255);

    Close();

    // Open the IRDA port

    CString strPort;
    strPort.Format(_T("COM%d:"), uiPort);

    m_hPort = CreateFile((LPCTSTR) strPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

	if (m_hPort == INVALID_HANDLE_VALUE)
    {
        return FALSE;
    }

    // Set the size of the input and output buffer

    VERIFY(SetupComm(m_hPort, 2048, 2048));

    // Terminates all outstanding read and write operations and clear the buffers

    VERIFY(PurgeComm(m_hPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR));

    // Reinitializes all IRDA port settings

    DCB dcb;

    dcb.DCBlength = sizeof(DCB);

    VERIFY(GetCommState(m_hPort, &dcb));

    dcb.BaudRate          = CBR_9600;
    dcb.fBinary           = TRUE;
    dcb.fParity           = TRUE;
    dcb.fOutxCtsFlow      = FALSE;
    dcb.fOutxDsrFlow      = FALSE;
    dcb.fDtrControl       = DTR_CONTROL_DISABLE;
    dcb.fDsrSensitivity   = FALSE;
    dcb.fTXContinueOnXoff = TRUE;
    dcb.fOutX             = FALSE;
    dcb.fInX              = FALSE;
    dcb.fErrorChar        = FALSE;
    dcb.fNull             = FALSE;
    dcb.fRtsControl       = RTS_CONTROL_DISABLE;
    dcb.fAbortOnError     = FALSE;
 // dcb.fDummy2
 // dcb.wReserved
 // dcb.XonLim
 // dcb.XoffLim
    dcb.ByteSize          = 8;
    dcb.Parity            = NOPARITY;
    dcb.StopBits          = ONESTOPBIT;
 // dcb.XonChar
 // dcb.XoffChar
 // dcb.ErrorChar
 // dcb.EofChar
 // dcb.EvtChar
 // dcb.wReserved1

    VERIFY(SetCommState(m_hPort, &dcb));

    // Set the timeouts for all read and write operations

    COMMTIMEOUTS timeouts;

    VERIFY(GetCommTimeouts(m_hPort, &timeouts));

    timeouts.ReadIntervalTimeout         = MAXDWORD;
    timeouts.ReadTotalTimeoutMultiplier  = 0;
    timeouts.ReadTotalTimeoutConstant    = 0;
    timeouts.WriteTotalTimeoutMultiplier = 100;
    timeouts.WriteTotalTimeoutConstant   = 0;

    VERIFY(SetCommTimeouts(m_hPort, &timeouts));

    // Set the serial port to infrared (IR) mode
#if defined(UNDER_CE) // for Pocket PC application
    EscapeCommFunction(m_hPort, SETIR);
#endif // #if defined(UNDER_CE)

    return TRUE;
}

void CIrdaPort::Close()
{
    // Close the IRDA port

    if (IsOpen())
    {
        VERIFY(PurgeComm(m_hPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR));

#if defined(UNDER_CE) // for Pocket PC application
        EscapeCommFunction(m_hPort, CLRIR);
#endif // #if defined(UNDER_CE)

        VERIFY(CloseHandle(m_hPort));

        m_hPort = INVALID_HANDLE_VALUE;
    }
}

BOOL CIrdaPort::IsOpen() const
{
    return m_hPort != INVALID_HANDLE_VALUE;
}

DWORD CIrdaPort::Read(void* pData, DWORD dwCount) const
{
    ASSERT(IsOpen());

    DWORD dwBytesRead = 0;

    ReadFile(m_hPort, pData, dwCount, &dwBytesRead, NULL);

    return dwBytesRead;
}

BOOL CIrdaPort::ReadWithTimeout(void* pData, DWORD dwCount, DWORD dwTimeout /*= 5000*/) const
{
    ASSERT(pData);
    ASSERT(dwCount > 0);
    ASSERT(IsOpen());

	DWORD n = 0;

	DWORD dwStart = GetTickCount();

	while (n < dwCount)
	{
    	if ((GetTickCount() - dwStart) >= dwTimeout)
		{
		    return FALSE;
		}

	    DWORD dwRead = Read(static_cast<BYTE*>(pData) + n, sizeof(BYTE));

        if (dwRead > 0)
		{
		    dwStart = GetTickCount();

		    n += dwRead;
		}
	}

	return TRUE;
}

DWORD CIrdaPort::Write(const void* pData, DWORD dwCount) const
{
    ASSERT(IsOpen());

    DWORD dwBytesWritten = 0;

    WriteFile(m_hPort, pData, dwCount, &dwBytesWritten, NULL);

    return dwBytesWritten;
}

BOOL CIrdaPort::WriteWithTimeout(const void* pData, DWORD dwCount, DWORD dwTimeout /*= 5000*/) const
{
    ASSERT(pData);
    ASSERT(dwCount > 0);
    ASSERT(IsOpen());

	DWORD n = 0;

	DWORD dwStart = GetTickCount();

	while (n < dwCount)
	{
    	if ((GetTickCount() - dwStart) >= dwTimeout)
		{
		    return FALSE;
		}

	    DWORD dwWritten = Write(static_cast<const BYTE*>(pData) + n, sizeof(BYTE));

        if (dwWritten > 0)
		{
		    dwStart = GetTickCount();

		    n += dwWritten;
		}
	}

	return TRUE;
}

BOOL CIrdaPort::WaitForResponse(CString& strResponse, DWORD dwTimeout /*= 5000*/) const
{
    ASSERT(IsOpen());

    BOOL bData = FALSE;

    unsigned char cCurrentChar  = '\0';
    unsigned char cLastChar     = '\0';
    unsigned char cLastLastChar = '\0';

    strResponse.Empty();

    DWORD dwStartTicks = GetTickCount();

    while (TRUE)
    {
        // Has the timeout occured?

		if ((GetTickCount() - dwStartTicks) >= dwTimeout)
        {
 		    return FALSE;
        }

        // Receive the data from the serial port

        if (Read(&cCurrentChar, sizeof(cCurrentChar)) > 0)
        {
            // Reset the idle timeout since data was received

            dwStartTicks = GetTickCount();

			if (isprint(cCurrentChar) && cLastLastChar == 0x0D && cLastChar == 0x0A && !bData)
			{
				bData = TRUE;  // Received start sequence (<CR><LF>)
			}
			else if (isprint(cLastLastChar) && cLastChar == 0x0D && cCurrentChar == 0x0A && bData)
			{
				break;  // Received end sequence (<CR><LF>)
			}

            // Add the character to the string

            if (bData && isprint(cCurrentChar))
            {
                char szANSI[2] = { cCurrentChar, '\0' };

                strResponse += CString(szANSI);
            }

            cLastLastChar = cLastChar;
			cLastChar     = cCurrentChar;
        }
        else
        {
            Sleep(10);
        }

    } // while (TRUE)

    return TRUE;
}

BOOL CIrdaPort::Send(const CString& strSend, DWORD dwTimeout /*= 5000*/) const
{
    ASSERT(IsOpen());

    USES_CONVERSION; // Need for T2CA() macro

	VERIFY(PurgeComm(m_hPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR));

    CString str(strSend);

    str += _T("\r"); // Add <CR> at the end of the string

    return WriteWithTimeout(T2CA((LPCTSTR) str), str.GetLength(), dwTimeout);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
同产精品九九九| 视频精品一区二区| 欧美精品一区二区蜜臀亚洲| 在线电影一区二区三区| 3751色影院一区二区三区| 欧美三区在线观看| 欧美一区二区三区思思人| 欧美一区二区三区四区五区 | 懂色中文一区二区在线播放| 国产一区美女在线| 成人夜色视频网站在线观看| 91毛片在线观看| 欧美色综合影院| 日韩欧美不卡一区| 国产精品青草久久| 亚洲老妇xxxxxx| 美国毛片一区二区| 国产91精品一区二区| 色综合久久88色综合天天免费| 欧美天堂一区二区三区| 欧美一区二区三区免费视频| 久久亚洲精华国产精华液| 国产精品久久久久久久久动漫| 亚洲一区二区三区小说| 久久精品久久精品| 99国产精品一区| 日韩三级电影网址| 中文字幕亚洲一区二区va在线| 亚洲电影视频在线| 国产精品888| 欧美人伦禁忌dvd放荡欲情| 欧美一区二区视频免费观看| 欧美激情一区在线| 日本不卡的三区四区五区| 成人午夜私人影院| 欧美一区二区三区四区视频| 国产精品成人一区二区艾草| 视频一区视频二区中文字幕| 成人涩涩免费视频| 欧美一区二区在线免费观看| 亚洲欧洲美洲综合色网| 另类小说图片综合网| 色婷婷综合久色| 久久天天做天天爱综合色| 午夜精品aaa| 色综合夜色一区| 国产欧美一区二区精品性色 | 亚洲一区二区三区爽爽爽爽爽| 国产曰批免费观看久久久| 欧美日韩国产三级| 亚洲欧美日韩综合aⅴ视频| 激情偷乱视频一区二区三区| 欧美日韩亚洲综合| 综合久久国产九一剧情麻豆| 国产乱码精品一区二区三区av| 欧美日韩国产在线播放网站| 亚洲天天做日日做天天谢日日欢 | 精品国产乱码久久久久久图片| 一区二区三区小说| www.亚洲在线| 国产精品免费看片| 粉嫩av一区二区三区在线播放 | 国产日本欧美一区二区| 狠狠色狠狠色合久久伊人| 亚洲国产精品久久一线不卡| 国产福利一区二区三区视频 | 性做久久久久久免费观看欧美| 91网站视频在线观看| 中文字幕一区二区三区在线播放| 六月丁香婷婷色狠狠久久| 日韩欧美国产三级| 久久精品国产成人一区二区三区 | 一区二区三区欧美日| 99精品视频在线观看| 国产精品电影院| 色妞www精品视频| 亚洲嫩草精品久久| 欧美亚洲一区二区在线| 亚洲一区在线观看免费| 欧美日韩国产片| 久久精品国产99国产精品| 久久久久综合网| eeuss影院一区二区三区| 国产精品国产自产拍高清av王其| www.亚洲色图.com| 亚洲一区二区综合| 91精品国产综合久久精品app| 喷水一区二区三区| 欧美激情一二三区| 色婷婷激情一区二区三区| 亚洲高清不卡在线观看| 精品国产制服丝袜高跟| 成人中文字幕合集| 亚洲一区二区三区影院| 欧美一区二区视频网站| 国产xxx精品视频大全| 最新国产精品久久精品| 欧美性大战久久| 看电视剧不卡顿的网站| 国产精品成人免费精品自在线观看| 99久久精品99国产精品| 日韩中文字幕一区二区三区| 久久在线观看免费| 91麻豆免费在线观看| 琪琪一区二区三区| 亚洲国产高清不卡| 欧美日本一区二区三区四区| 国产电影一区二区三区| 亚洲乱码日产精品bd| 精品理论电影在线| 欧美性一区二区| 极品少妇一区二区| 一区二区三区成人在线视频| 日韩精品一区二区三区四区| 91小视频在线免费看| 久久电影网电视剧免费观看| 亚洲精品乱码久久久久久久久| 日韩免费看的电影| 欧美影院一区二区| 99久久国产综合色|国产精品| 美国毛片一区二区三区| 亚洲一区二区三区影院| 国产精品少妇自拍| 久久综合精品国产一区二区三区| 在线观看免费视频综合| jizz一区二区| 国产美女精品在线| 美日韩一级片在线观看| 亚洲蜜臀av乱码久久精品| 国产欧美日韩三区| 精品福利在线导航| 欧美嫩在线观看| 欧美日韩一二三| 欧美日韩在线三级| 色综合久久久久网| 99久久精品国产网站| 成人午夜视频在线观看| 国产很黄免费观看久久| 国产最新精品精品你懂的| 日本不卡在线视频| 日韩高清中文字幕一区| 亚洲国产精品久久人人爱| 一区二区三区鲁丝不卡| 欧美经典三级视频一区二区三区| 精品国产污网站| 26uuu另类欧美亚洲曰本| 欧美成人性福生活免费看| 欧美一区永久视频免费观看| 欧美喷水一区二区| 91精品福利在线一区二区三区| 欧美日韩色一区| 欧美一级欧美三级在线观看| 日韩一级片网址| 精品国一区二区三区| 欧美一区日本一区韩国一区| 欧美日本精品一区二区三区| 欧美年轻男男videosbes| 日韩一级大片在线观看| 日韩一区二区三免费高清| 精品国产伦一区二区三区免费| 精品99一区二区三区| 日本一区二区电影| 最新国产の精品合集bt伙计| 伊人开心综合网| 五月激情综合网| 三级不卡在线观看| 国产曰批免费观看久久久| 国产成人精品免费网站| 色综合久久中文综合久久97| 欧美日精品一区视频| 欧美哺乳videos| 中文字幕在线观看不卡视频| 亚洲精品久久久蜜桃| 欧美bbbbb| av一区二区三区黑人| 欧美久久一二三四区| 久久久亚洲午夜电影| 亚洲人成影院在线观看| 日韩精品福利网| 成人av在线影院| 正在播放一区二区| 国产日本欧美一区二区| 亚洲国产视频一区二区| 国模少妇一区二区三区| 99热这里都是精品| 欧美成人精品1314www| 亚洲欧美影音先锋| 久久精品国产77777蜜臀| 91在线精品秘密一区二区| 91精品福利在线一区二区三区| 国产精品天美传媒沈樵| 日本午夜精品视频在线观看| 不卡一区中文字幕| 欧美精品一区二区三区蜜臀| 亚洲一区二区在线观看视频 | 国产91精品在线观看| 欧美美女视频在线观看| 亚洲视频一二三区| 国产高清不卡二三区| 在线播放/欧美激情|