如何编写Windows CE.net的usb驱动程序(6)
来源:互联网 发布:gartner魔力象限数据库 编辑:程序博客网 时间:2024/05/19 00:39
// 通知系统产生鼠标事件
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驱动程序(6)
- 如何编写Windows CE.net的usb驱动程序(1)
- 如何编写Windows CE.net的usb驱动程序(2)
- 如何编写Windows CE.net的usb驱动程序(3)
- 如何编写Windows CE.net的usb驱动程序(4)
- 如何编写Windows CE.net的usb驱动程序(5)
- 如何编写Windows CE.net的usb驱动程序(1)
- 如何编写Windows CE.net的usb驱动程序(2)
- 如何编写WINDOWS CE.NET的USB驱动程序
- 如何编写Windows CE.net的usb驱动程序
- 何编写Windows CE.net的usb驱动程序(1)
- Windows CE的USB摄像头驱动程序
- Windows CE的USB摄像头驱动程序
- Windows CE .NET的AD7854驱动程序开发
- 基于Windows CE的USB设备驱动程序设计
- windows CE下的USB设备驱动程序分析(一)
- windows CE下的USB设备驱动程序分析(二)
- windows CE下的USB设备驱动程序分析
- PLM项目执行与控制阶段 非知之艰,行之维艰
- 如何编写Windows CE.net的usb驱动程序(4)
- 国内企业ERP面临三大困境
- 如何编写Windows CE.net的usb驱动程序(5)
- 企业为什么要上ERP系统?
- 如何编写Windows CE.net的usb驱动程序(6)
- SAP IDES、DEV、QAS、PRD都是什么含义 ?
- 企业的后ERP时代
- 提高中小企业ERP快速实施的八大准则
- 企业需要信息分析师
- ERP来龙与去脉和应用案例。
- MySQL 10057或10061错误
- Steps To Implement User Exit CONFPM05
- 信息就是财富