⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbhalinterrupthandler.c

📁 USB source code of Vxworks 5.6. It has device and the host stack.
💻 C
📖 第 1 页 / 共 2 页
字号:
* ERRNO:*   None.** \NOMANUAL*/VOID usbHalSuspendInterruptHandler    (    pUSBHAL_TCD	pHalTcd		/* USBHAL_TCD  */    )    {    TRB_HANDLE_SUSPEND_INTERRUPT trbSuspendInterruptHandler;    /* WindView Instrumentation */    USB_HAL_LOG_EVENT(USB_HAL_INTERRUPT_HANDLER,    "usbHalSuspendInterruptHandler entered ...", USB_HAL_WV_FILTER);       USBHAL_DEBUG("usbHalSuspendInterruptHandler - Entering\n",0,0,0,0,0,0);    /* Check the validity of the parameters */    if ((pHalTcd == NULL) || (pHalTcd->pTCDHandle == NULL) ||        (pHalTcd->mngmtCallback == NULL))        {        /* WindView Instrumentation */         USB_HAL_LOG_EVENT(USB_HAL_DEVICE_CNTL,        "usbHalSuspendInterruptHandler exiting: Bad Parameter Received...",        USB_HAL_WV_FILTER);           USBHAL_ERR("usbHalSuspendInterruptHandler : Invalid parameters\n",        0,0,0,0,0,0);        return;        }    /* call the management callback */    (*pHalTcd->mngmtCallback)(pHalTcd->mngmtCallbackParam,                              TCD_MNGMT_SUSPEND,                              0);    /* Populate the TRB - start */    trbHeaderInit((pTRB_HEADER)(&trbSuspendInterruptHandler),            pHalTcd->pTCDHandle,            TCD_FNC_HANDLE_SUSPEND_INTERRUPT,            sizeof(TRB_HANDLE_SUSPEND_INTERRUPT));    /* Populate the TRB - end */    /* call the TCD's SEP */    (*pHalTcd->tcdExecFunc)(&trbSuspendInterruptHandler);    USBHAL_DEBUG("usbHalSuspendInterruptHandler - Exiting\n",0,0,0,0,0,0);    return;    }/********************************************************************************* usbHalResumeInterruptHandler - hal resume interrupt handler.** This function handles the interrupt on device resume** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/VOID usbHalResumeInterruptHandler    (    pUSBHAL_TCD	pHalTcd		/* USBHAL_TCD  */    )    {    TRB_HANDLE_RESUME_INTERRUPT trbResumeInterruptHandler;    /* WindView Instrumentation */    USB_HAL_LOG_EVENT(USB_HAL_INTERRUPT_HANDLER,    "usbHalResumeInterruptHandler entered ...", USB_HAL_WV_FILTER);       USBHAL_DEBUG("usbHalResumeInterruptHandler - Entering\n",0,0,0,0,0,0);    /* Check the validity of the parameters */    if ((pHalTcd == NULL) || (pHalTcd->pTCDHandle == NULL) ||        (pHalTcd->mngmtCallback == NULL))        {        /* WindView Instrumentation */         USB_HAL_LOG_EVENT(USB_HAL_DEVICE_CNTL,        "usbHalResumeInterruptHandler exiting: Bad Parameter Received...",        USB_HAL_WV_FILTER);           USBHAL_ERR("usbHalResumeInterruptHandler : Invalid parameters\n",        0,0,0,0,0,0);        return;        }    /* call the management callback */    (*pHalTcd->mngmtCallback)(pHalTcd->mngmtCallbackParam,                              TCD_MNGMT_RESUME,                              0);    /* Populate the TRB - start */    trbHeaderInit((pTRB_HEADER)(&trbResumeInterruptHandler),            pHalTcd->pTCDHandle,            TCD_FNC_HANDLE_RESUME_INTERRUPT,            sizeof(TRB_HANDLE_RESUME_INTERRUPT));    /* Populate the TRB - end */    /* call the TCD's SEP */    (*pHalTcd->tcdExecFunc)(&trbResumeInterruptHandler);    USBHAL_DEBUG("usbHalResumeInterruptHandler - Exiting\n",0,0,0,0,0,0);    return;    }/********************************************************************************* usbHALISR - hal isr callback.** This is the HAL ISR callback whihc is called whenever an interrupt occurs on* a target controller.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/VOID usbHalIsr    (    pUSBHAL_TCD	pHalTcd		/* USBHAL_TCD */    )    {    TRB_INTERRUPT_STATUS_GET_CLEAR	trbIntStatusGetClear;    STATUS	status = OK;    /* WindView Instrumentation */    USB_HAL_LOG_EVENT(USB_HAL_INTERRUPT_HANDLER,    "usbHalISR entered ...", USB_HAL_WV_FILTER);       USBHAL_DEBUG("usbHalISR - Entering\n",0,0,0,0,0,0);    /* Check the validity of the parameters */    if ((pHalTcd == NULL) || (pHalTcd->pTCDHandle == NULL))        {        /* WindView Instrumentation */         USB_HAL_LOG_EVENT(USB_HAL_DEVICE_CNTL,        "usbHalISR exiting: Bad Parameter Received...",        USB_HAL_WV_FILTER);           USBHAL_ERR("usbHalISR : Invalid parameters\n",0,0,0,0,0,0);        USBHAL_DEBUG("usbHalISR - Exiting\n",0,0,0,0,0,0);        return;        }    /* Populate the TRB - start */        trbHeaderInit((pTRB_HEADER)(&trbIntStatusGetClear),            pHalTcd->pTCDHandle,            TCD_FNC_INTERRUPT_STATUS_GET,            sizeof(TRB_INTERRUPT_STATUS_GET_CLEAR));        /* Populate the TRB - end */    /* call the TCD's SEP to get interrupt status*/    status = (*pHalTcd->tcdExecFunc)(&trbIntStatusGetClear);    if ( status == OK)        {        /* store interrupt status retrieved */        pHalTcd->uInterruptStatus |=  trbIntStatusGetClear.uInterruptStatus;        /* Reuse the TRB for clearing the interrupt status */        trbIntStatusGetClear.header.function = TCD_FNC_INTERRUPT_STATUS_CLEAR;        /* call the TCD's SEP to clear interrupt status */        (*pHalTcd->tcdExecFunc)(&trbIntStatusGetClear);        /* signal the HAL interrupt handler thread */        OSS_SEM_GIVE(pHalTcd->intPendingSemaphore);        }    else        USBHAL_ERR("usbHalISR : Error in getting interrupt status\n",                    0,0,0,0,0,0);    USBHAL_DEBUG("usbHalISR - Exiting\n",0,0,0,0,0,0);    return;    }/********************************************************************************* usbHalInterruptThread - hal interrupt handler thread.** This thread handles interrupts on receiving a signal from usbHalISR * callback.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/VOID usbHalInterruptThread    (    pUSBHAL_TCD	pHalTcd		/* USBHAL_TCD */    )    {    UINT32	uInterruptStatus = 0;	/* bitmap to hold interrupt status */    /* WindView Instrumentation */    USB_HAL_LOG_EVENT(USB_HAL_INTERRUPT_HANDLER,    "usbHalInterruptThread entered ...", USB_HAL_WV_FILTER);       USBHAL_DEBUG("usbHalInterruptThread - Entering\n",0,0,0,0,0,0);    /* Check the validity of the parameters */    if ((pHalTcd == NULL) || (pHalTcd->intPendingSemaphore == NULL)        || (pHalTcd->mutex == NULL))        {        /* WindView Instrumentation */         USB_HAL_LOG_EVENT(USB_HAL_DEVICE_CNTL,        "usbHalInterruptThread exiting: Bad Parameter Received...",        USB_HAL_WV_FILTER);        USBHAL_ERR("usbHalInterruptThread : Invalid parameters\n",0,0,0,0,0,0);        return;        }    while (1)        {        /*  wait for signal from HAL ISR callback */        OSS_SEM_TAKE(pHalTcd->intPendingSemaphore, OSS_BLOCK);        USBHAL_DEBUG ("usbHalInterruptThread - usbHalISR'signal received\n",        0,0,0,0,0,0);        /*         * If there is no interrupt pending, wait for the semaphore to be         * signalled from the ISR         */        if ( pHalTcd->uInterruptStatus == 0 )            continue;        /* Copy the interrupt status value */        uInterruptStatus = pHalTcd->uInterruptStatus;        /* Clear the interrupt status */        pHalTcd->uInterruptStatus &= ~uInterruptStatus;         /* If disconnect interrupt pending call disconnect interrupt handler */        if ((uInterruptStatus & USBTCD_DISCONNECT_INTERRUPT_MASK) != 0)            {            usbHalDisconnectInterruptHandler(pHalTcd);            }        /* If reset interrupt pending call reset interrupt handler */        if ((uInterruptStatus & USBTCD_RESET_INTERRUPT_MASK) != 0)            {            usbHalResetInterruptHandler(pHalTcd);            }        /* If suspend interrupt pending call suspend interrupt handler */        if ((uInterruptStatus & USBTCD_SUSPEND_INTERRUPT_MASK) != 0)            {            usbHalSuspendInterruptHandler(pHalTcd);            }        /* If resume interrupt pending call resume interrupt handler */        if ((uInterruptStatus & USBTCD_RESUME_INTERRUPT_MASK) != 0)            {            usbHalResumeInterruptHandler(pHalTcd);            }        /* If endpoint interrupt pending, call endpoint interrupt handler */        if ((uInterruptStatus & USBTCD_ENDPOINT_INTERRUPT_MASK) != 0 )            {            usbHalEndpointInterruptHandler(pHalTcd);            }        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -