扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
UINT CIrPulse::FindIrPort() { // 查询注册表中的IR端口号 HKEY hKey = NULL; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Comm\\IrDA"),0, 0, &hKey) == ERROR_SUCCESS) { DWORD dwType = 0; DWORD dwData = 0; DWORD dwSize = sizeof(dwData); if (RegQueryValueEx(hKey, _T("Port"), NULL, &dwType, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS) { if (dwType == REG_DWORD && dwSize == sizeof(dwData)) { RegCloseKey(hKey); return (UINT) dwData; } } RegCloseKey(hKey); } return 0; } |
BOOL CIrPulse::Open(UINT uiPort) { ASSERT(uiPort > 0 && uiPort <= 255); Close(); //打开IRDA端口 CString strPort; strPort.Format(_T("COM%d:"), uiPort); m_irPort = CreateFile((LPCTSTR) strPort, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL); if (m_irPort == INVALID_HANDLE_VALUE) { return FALSE; } //设置输入和输出缓冲区的大小 VERIFY(SetupComm(m_irPort, 2048, 2048)); //清除读和写缓冲区 VERIFY(PurgeComm(m_irPort,PURGE_TXABORT|PURGE_RXABORT| PURGE_TXCLEAR|PURGE_RXCLEAR)); //重新初始化所有的IRDA端口设置 DCB dcb; dcb.DCBlength = sizeof(DCB); VERIFY(GetCommState(m_irPort, &dcb)); dcb.BaudRate = CBR_115200; dcb.fBinary = TRUE; dcb.fParity = TRUE; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fDsrSensitivity = FALSE; dcb.fTXContinueOnXoff = FALSE; dcb.fOutX = FALSE; dcb.fInX = FALSE; dcb.fErrorChar = FALSE; dcb.fNull = FALSE; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fAbortOnError = FALSE; dcb.ByteSize = 8; dcb.Parity = EVENPARITY; dcb.StopBits = TWOSTOPBITS; VERIFY(SetCommState(m_irPort, &dcb)); //为所有的读和写操作设置超时值 COMMTIMEOUTS timeouts; VERIFY(GetCommTimeouts(m_irPort, &timeouts)); timeouts.ReadIntervalTimeout = MAXDWORD; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.ReadTotalTimeoutConstant = 0; timeouts.WriteTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 0; VERIFY(SetCommTimeouts(m_irPort, &timeouts)); DWORD dwEvent=EV_TXEMPTY; SetCommMask(m_irPort,dwEvent); return TRUE; } |
BOOL CIrPulse::SendCode(DWORD lValue) { DWORD dwCount; int i=0; ASSERT(iDataLength>0); //清除传送缓冲区 VERIFY(PurgeComm(m_irPort,PURGE_TXABORT| PURGE_RXABORT |PURGE_TXCLEAR | PURGE_RXCLEAR)); //每次按键设置代码6次 for(int x=0;x<6;x++) { MakeStream(lValue); //发送代码 dwCount=GetTickCount(); while(GetTickCount()<dwCount+26) //延迟26ms i++; } return true; } |
BOOL CIrPulse::MakeStream(DWORD lValue) { DWORD dwStreamLength; //创建开始脉冲 dwStreamLength=iHPulse/charWidth; ASSERT(Write((const char *)bPulseStream.GetData(), dwStreamLength)==dwStreamLength); // ************************************ // ***** 在下一个脉冲到来前延迟一段时间 // ************************************ //循环操作代码中的位来发送脉冲 for(int i=0;i<iDataLength;i++) { if(lValue & 1) { //创建一个脉冲1 dwStreamLength=i1Pulse/charWidth; ASSERT(Write((const char *)bPulseStream.GetData(), dwStreamLength)==dwStreamLength); // ********************************* // ***在下一个脉冲到来前延迟一段时间 // ********************************* } else { //创建一个脉冲 0 dwStreamLength=i0Pulse/charWidth; ASSERT(Write((const char *)bPulseStream.GetData(), dwStreamLength)==dwStreamLength); // ******************************** // **在下一个脉冲到来前延迟一段时间 // ******************************** } lValue >>= 1; } return TRUE; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者