如何编写Windows CE.net的usb驱动程序(6)
2008-11-27 18:20
429 查看
// 通知系统产生鼠标事件
if (m_fReadyForMouseEvents)
mouse_event(dwFlags, dx, dy, 0, 0);
else
m_fReadyForMouseEvents = IsAPIReady(SH_WMGR);
return TRUE;
}
DWORD CALLBACK CMouse::MouseTransferCompleteStub(LPVOID lpvNotifyParameter)
{
CMouse * pMouse = (CMouse *)lpvNotifyParameter;
return(pMouse->MouseTransferComplete());
}
// 数据传输完毕回调函数
DWORD CMouse::MouseTransferComplete()
{
if (m_hEvent)
SetEvent(m_hEvent);
return 0;
}
ULONG CALLBACK CMouse::MouseThreadStub(PVOID context)
{
CMouse * pMouse = (CMouse *)context;
return(pMouse->MouseThread());
}
// USB鼠标线程
DWORD CMouse::MouseThread()
{
DEBUGMSG(ZONE_INIT,(TEXT("USBMouse: Worker thread started/r/n")));
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
if (SubmitInterrupt())
{
while (!m_fClosing)
{
WaitForSingleObject(m_hEvent, INFINITE);
if (m_fClosing)
break;
if ((*m_lpUsbFuncs->lpIsTransferComplete)(m_hInterruptTransfer))
{
if (!HandleInterrupt())
break;
}
else
{
RETAILMSG(1,(TEXT("!USBMouse: Event signalled, but transfer not complete/r/n")));
// The only time this should happen is if we get an error on the transfer
ASSERT(m_fClosing || (m_hInterruptTransfer == NULL));
break;
}
}
}
RETAILMSG(1,(TEXT("USBMouse: Worker thread exiting/r/n")));
return(0);
}
if (m_fReadyForMouseEvents)
mouse_event(dwFlags, dx, dy, 0, 0);
else
m_fReadyForMouseEvents = IsAPIReady(SH_WMGR);
return TRUE;
}
DWORD CALLBACK CMouse::MouseTransferCompleteStub(LPVOID lpvNotifyParameter)
{
CMouse * pMouse = (CMouse *)lpvNotifyParameter;
return(pMouse->MouseTransferComplete());
}
// 数据传输完毕回调函数
DWORD CMouse::MouseTransferComplete()
{
if (m_hEvent)
SetEvent(m_hEvent);
return 0;
}
ULONG CALLBACK CMouse::MouseThreadStub(PVOID context)
{
CMouse * pMouse = (CMouse *)context;
return(pMouse->MouseThread());
}
// USB鼠标线程
DWORD CMouse::MouseThread()
{
DEBUGMSG(ZONE_INIT,(TEXT("USBMouse: Worker thread started/r/n")));
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
if (SubmitInterrupt())
{
while (!m_fClosing)
{
WaitForSingleObject(m_hEvent, INFINITE);
if (m_fClosing)
break;
if ((*m_lpUsbFuncs->lpIsTransferComplete)(m_hInterruptTransfer))
{
if (!HandleInterrupt())
break;
}
else
{
RETAILMSG(1,(TEXT("!USBMouse: Event signalled, but transfer not complete/r/n")));
// The only time this should happen is if we get an error on the transfer
ASSERT(m_fClosing || (m_hInterruptTransfer == NULL));
break;
}
}
}
RETAILMSG(1,(TEXT("USBMouse: Worker thread exiting/r/n")));
return(0);
}
相关文章推荐
- 如何编写Windows CE.net的usb驱动程序(5)
- 如何编写Windows CE.net的usb驱动程序(2)
- 如何编写WINDOWS CE.NET的USB驱动程序
- 如何编写Windows CE.net的usb驱动程序(1)
- 如何编写Windows CE.net的usb驱动程序(2)
- 如何编写Windows CE.net的usb驱动程序
- 如何编写Windows CE.net的usb驱动程序(3)
- 如何编写Windows CE.net的usb驱动程序(4)
- 如何编写Windows CE.net的usb驱动程序(1)
- WINDOWS CE.NET的USB驱动程序开发
- WINDOWS CE.NET的USB驱动程序开发
- WindowsCE.Net下CAN卡的驱动程序设计
- 如何在asp.net中编写 Windows 服务程序 Visual Studio编写 Windows 服务
- 如何构造一个简单的USB过滤驱动程序 分类: windows驱动程序WDM 2013-09-25 14:45 477人阅读 评论(0) 收藏
- WindowsCE.Net下CAN卡的驱动程序设计
- 如何在Windows CE.NET下使用大于256MB内存
- 如何在Windows CE.NET下使用大于256MB内存——转载
- 华虹USB-KEY for WinCE.NET驱动程序的编写
- 一步一步教你如何编写VC#,VB.NET或VC++代码玩转Windows Shell Known Folders
- Windows CE .NET的AD7854驱动程序开发