1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
usb驱动的

Windows CE USB Function Driver驱动简析(2)-IST函数(基于WinCE5.0 SMDK2410 BSP的UFBFN驱动) 分类:?Windows CE2010-08-10 15:49?1176人阅读?评论(1)?收藏?举报 functionwincewindowsbytebufferexception 上一篇我们简单分析了UFN驱动中的Ufn_pdd函数,现在我们来看看IST主线程ISTMain函数及相关处理函数. 1.ISTMain ISTMain在UfnPdd_Start被创建: pContext-hIST = CreateThread(NULL, 0, ISTMain, pContext, 0, NULL);??? ISTMain在参数检查后,设置优先级后,然后进入while循环,循环条件为fExitIST为FALSE,即不退出IST. 循环内禁止所有端点中断,然后使能USB reset中断,使能端点0中断.然后等待中断事件hevInterrupt发生.发生后调用HandleUSBEvent进行中断处理.当退出线程fExitIST或重启线程fRestartIST为TRUE时,在禁止中断和清除中断状态后退出线程.并通知MDD层DETACH事件. [c-sharp]?view plaincopy static?? DWORD?? WINAPI?? ISTMain(?? ????????LPVOID?lpParameter?? ????????)?? {?? ????SETFNAME();?? ????FUNCTION_ENTER_MSG();?? ?? ????PCTRLR_PDD_CONTEXT?pContext?=?(PCTRLR_PDD_CONTEXT)?lpParameter;?? ????ValidateContext(pContext);?? ?? ????CeSetThreadPriority(pContext-hIST,?pContext-dwISTPriority);?? ?? ????while?(!pContext-fExitIST)?{?? ????????pContext-fRestartIST?=?FALSE;?? ?? ????????//?Enable?Suspend?Mode?in?the?Power?Register?? //????????SetClearReg(pContext,?PWR_REG_OFFSET,?SUSPEND_MODE_ENABLE_CTRL,?SET);?? ?? ????????//?Disable?All?Endpoint?interrupts?? ????????WriteReg(pContext,?EP_INT_EN_REG_OFFSET,?0);?//?Disable?All?? ?? ????????//?Enable?Device?interrupts?? ????????WriteReg(pContext,?USB_INT_EN_REG_OFFSET,?(USB_RESET_INTR));//?|?USB_SUSPEND_INTR));?? ?? ????????//?Enable?Endpoint?interrupt?0?? ????????EnableEndpointInterrupt(pContext,?0);?? ?? ????????while?(TRUE)?{?? ????????????DWORD?dwWait?=?WaitForSingleObject(pContext-hevInterrupt,?INFINITE);?? ????????????if?(pContext-fExitIST?||?pContext-fRestartIST)?{?? ????????????????break;?? ????????????}?? ?? ????????????if?(dwWait?==?WAIT_OBJECT_0)?{?? ????????????????HandleUSBEvent(pContext);?? ????????????????InterruptDone(pContext-dwSysIntr);?? ????????????}?? ????????????else?{?? ????????????????RETAILMSG(1,?(_T(%s?WaitForMultipleObjects?failed.?Exiting?IST./r/n),??? ????????????????????pszFname));?? ????????????????break;?? ????????????}?

文档评论(0)

ayangjiayu5 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档