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

📄 usbtargdevicecontrol.c

📁 USB source code of Vxworks 5.6. It has device and the host stack.
💻 C
📖 第 1 页 / 共 2 页
字号:
* \is* \i S_usbTargLib_TCD_FAULT* Fault occured in TCD * * \i S_usbTargLib_APP_FAULT* Application specific fault occured.* \ie** \NOMANUAL*/LOCAL STATUS usbTargHandleResetEvent    (    pTARG_TCD	pTargTcd,		/* pointer to TARG_TCD structure */    UINT32	speed			/* speed of the device */    )    {    STATUS	status = OK;    USB_ENDPOINT_DESCR	cntlEndptDescr;	/* control endpoint descriptor */    /* WindView Instrumentation */    USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,    "usbTargHandleResetEvent entered...", USB_TARG_WV_FILTER);       /* acquire the TARG_TCD mutex for TCD operations */    OSS_MUTEX_TAKE ( pTargTcd->tcdMutex, OSS_BLOCK);    /*      * Check if control endpoints are acquried,     * if so release them.     */    if ((status = controlEndptRelease (pTargTcd)) != OK)        return ERROR;    /* Call the management Callback to state that a reset event has occured */    if ((status = mngmtFunc ( pTargTcd , TARG_MNGMT_BUS_RESET,(pVOID)speed)) != OK )        {        /* WindView Instrumentation */        USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,        "usbTargHandleResetEvent exiting:Mangement function returned error...",        USB_TARG_WV_FILTER);           OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);        return ossStatus (S_usbTargLib_APP_FAULT);        }    /* Set the device address to 0 */    if ((status = usbHalTcdAddressSet (&pTargTcd->tcdNexus , 0)) != OK)        {        OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);        return ossStatus (S_usbTargLib_TCD_FAULT);        }    /* Reset the Endpoint Descriptor data structure */    memset (&cntlEndptDescr, 0 , sizeof ( USB_ENDPOINT_DESCR ));    /* Set the descriptor for Control In Endpoint */        /*Size of Descriptor*/    cntlEndptDescr.length = sizeof (USB_ENDPOINT_DESCR);    /* Descriptor Type */    cntlEndptDescr.descriptorType = USB_DESCR_ENDPOINT;    /* Endpoint Address */    cntlEndptDescr.endpointAddress = USB_ENDPOINT_DEFAULT_CONTROL |                                       USB_ENDPOINT_IN ;    /* Control Endpoint */    cntlEndptDescr.attributes = USB_ATTR_CONTROL ;    /* Populate the max packet size based on the speed of the device */    if (speed == USB_TCD_HIGH_SPEED)        cntlEndptDescr.maxPacketSize=TO_LITTLEW(USB_MAX_CTRL_PACKET_SIZE);    else        cntlEndptDescr.maxPacketSize=TO_LITTLEW(USB_MIN_CTRL_PACKET_SIZE);    /* Interval for control In */    cntlEndptDescr.interval = 0 ;    /* Create Control In Endpoint */    if ((status = usbHalTcdEndpointAssign (&pTargTcd->tcdNexus ,&cntlEndptDescr,                                         0,0,0,&pTargTcd->defaultControlPipeIN))                                        !=OK)        {        /* WindView Instrumentation */        USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,        "usbTargHandleResetEvent: Could not create the Control IN Endpoint...",        USB_TARG_WV_FILTER);           OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);        return ossStatus (S_usbTargLib_TCD_FAULT);        }    /* Reset the Control Endpoint Descriptor for Out Transfer */    memset (&cntlEndptDescr, 0 , sizeof ( USB_ENDPOINT_DESCR ));    /* Set the descriptor for Control Out Endpoint */    /*Size of Descriptor*/    cntlEndptDescr.length = sizeof (USB_ENDPOINT_DESCR);    /* Descriptor Type */    cntlEndptDescr.descriptorType = USB_DESCR_ENDPOINT;    /* Endpoint Address */    cntlEndptDescr.endpointAddress = USB_ENDPOINT_DEFAULT_CONTROL |                                       USB_ENDPOINT_OUT;    /* Control Endpoint */    cntlEndptDescr.attributes = USB_ATTR_CONTROL ;    /* Populate the max packet size based on the speed of the device */    if (speed == USB_TCD_HIGH_SPEED)        cntlEndptDescr.maxPacketSize=TO_LITTLEW(USB_MAX_CTRL_PACKET_SIZE);    else        cntlEndptDescr.maxPacketSize=TO_LITTLEW(USB_MIN_CTRL_PACKET_SIZE);    /* Interval for Control Out if the speed of the device is high speed */    if (speed == USB_TCD_HIGH_SPEED)        cntlEndptDescr.interval = 255 ;    /* Create Control Out Endpoint */    if ((status = usbHalTcdEndpointAssign (&pTargTcd->tcdNexus ,&cntlEndptDescr,                                        0,0,0,&pTargTcd->defaultControlPipeOUT))                                        !=OK)        {        /* Release the default control IN endpoint */        if (usbHalTcdEndpointRelease(&pTargTcd->tcdNexus,                              pTargTcd->defaultControlPipeIN) != OK)            {            /* WindView Instrumentation */            USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,            "usbTargHandleResetEvent: Could not create the Control OUT Endpoint.",            USB_TARG_WV_FILTER);               OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);            return ossStatus (S_usbTargLib_TCD_FAULT);            }        pTargTcd->defaultControlPipeIN = NULL;        OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);        return ossStatus (S_usbTargLib_TCD_FAULT);        }    pTargTcd->controlErpPending = FALSE;    /* Initialize setup erp and populate it with default values */    initSetupErp(pTargTcd);    /* Submit the ERP */    if ((status = usbHalTcdErpSubmit(&pTargTcd->tcdNexus,&pTargTcd->setupErp))         != OK)        {        status = ossStatus (S_usbTargLib_TCD_FAULT);        /* WindView Instrumentation */        USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,        "usbTargHandleResetEvent: Error submitting the ERP on Control endpoint...",        USB_TARG_WV_FILTER);           }     /* Release the mutex */    OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);    /* WindView Instrumentation */    USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,    "usbTargHandleResetEvent exiting ...", USB_TARG_WV_FILTER);       return status;    }/********************************************************************************* usbTargHandleDisconnectEvent - handles the disconnect event** This function will be called whenever a disconnect event has occured. It* destroys the default endpoints and calls management callback to notify * the event to the application.** RETURNS: OK or ERROR if any.** ERRNO:* \is* \i S_usbTargLib_TCD_FAULT* TCD specific fault occured.** \i S_usbTargLib_OUT_OF_MEMORY* Memory not present to alloocate variables* \ie** \NOMANUAL*/LOCAL STATUS usbTargHandleDisconnectEvent    (    pTARG_TCD	pTargTcd		/* TARG_TCD */    )    {    STATUS	status = OK;    /* WindView Instrumentation */    USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,    "usbTargHandleDisconnectEvent entered ...", USB_TARG_WV_FILTER);       /* Acquire the TARG_TCD mutex for TCD operations */    OSS_MUTEX_TAKE ( pTargTcd->tcdMutex, OSS_BLOCK);    /*     * Check if control endpoints are acquried,     * if so release them.     */    if ((status = controlEndptRelease (pTargTcd)) != OK)        return ERROR;    /* Call the management callback */    if ((status = mngmtFunc (pTargTcd ,TARG_MNGMT_DISCONNECT,NULL)) != OK)         status = ossStatus (S_usbTargLib_TCD_FAULT);    OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);    /* WindView Instrumentation */    USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,    "usbTargHandleDisconnectEvent exiting ...", USB_TARG_WV_FILTER);       return status;    }/********************************************************************************* controlEndptRelease - releases the control endpoints** This function release the default control IN/OUT endpoints.** RETURNS : OK or ERROR if not able to release endpoints.** ERRNO:* \is* \i S_usbTargLib_TCD_FAULT* Fault occured in TCD.* \ie** \NOMANUAL*/LOCAL STATUS controlEndptRelease    (    pTARG_TCD	pTargTcd	/* TARG_TCD */    )    {    /* WindView Instrumentation */    USB_TARG_LOG_EVENT(USB_TARG_DEVICE_CONTROL,    "controlEndptRelease entered ...", USB_TARG_WV_FILTER);       /*     * Check if control endpoints are acquried,     * if so release them.     */    /* Control In Endpoint */    if ( pTargTcd->defaultControlPipeIN != NULL )        {        if (usbHalTcdEndpointRelease (&pTargTcd->tcdNexus ,                                      pTargTcd->defaultControlPipeIN) !=OK)            {            OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);            return ossStatus (S_usbTargLib_TCD_FAULT);            }        pTargTcd->defaultControlPipeIN = NULL;        }    /* Control Out Endpoint */    if ( pTargTcd->defaultControlPipeOUT != NULL )        {        if (usbHalTcdEndpointRelease (&pTargTcd->tcdNexus ,                                     pTargTcd->defaultControlPipeOUT) !=OK)            {            OSS_MUTEX_RELEASE (pTargTcd->tcdMutex);            return ossStatus (S_usbTargLib_TCD_FAULT);            }        pTargTcd->defaultControlPipeOUT = NULL;        }    return OK;    }

⌨️ 快捷键说明

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