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

📄 usbtargrbclib.c

📁 This the compressed USB driver source code for vxworks5.6. It has device controller driver and other
💻 C
📖 第 1 页 / 共 2 页
字号:
                            /* init CSW ERP on Bulk-in pipe and submit */                            if (usbMsBulkInErpInit(pData, dSize,                                                   erpCallback, NULL) != OK)                                goto EXIT_ERROR;                            }                        }                    else                        {                        /* set CSW Status 0x2 (phase error) */                        pCsw->status = USB_CSW_PHASE_ERROR;                        pData = (UINT8 *)pCsw;                        dSize = sizeof(USB_BULK_CSW);                        erpCallback = bulkInErpCallbackCSW;                        /* init CSW ERP on Bulk-in pipe and submit */                        if (usbMsBulkInErpInit(pData, dSize, erpCallback, NULL)                            != OK)                            goto EXIT_ERROR;                        }                    }                else                    {                    /* set CSW Status 0x2 (phase error) */                    pCsw->status = USB_CSW_PHASE_ERROR;                    pData = (UINT8 *)pCsw;                    dSize = sizeof(USB_BULK_CSW);                    erpCallback = bulkInErpCallbackCSW;                    /* init CSW ERP on Bulk-in pipe and submit */                    if (usbMsBulkInErpInit(pData, dSize, erpCallback, NULL)                        != OK)                        goto EXIT_ERROR;                    }                }            else if (rbcDataOut == TRUE)                {                if (cbwDataXferLgth > 0)                    {                    if (cbwDataDir == CBW_DATA_OUT)                        {                        if (cbwDataXferLgth == dSize)                            {                            pCsw->dataResidue = 0x0;                            /* init Bulk-Out ERP and submit to TCD */                            if (usbMsBulkOutErpInit(pData, dSize, erpCallback,NULL)                                != OK)                                goto EXIT_ERROR;                            }                        else if (cbwDataXferLgth > dSize)                            {                            pCsw->dataResidue = cbwDataXferLgth - dSize;                            /* set stall flag on Bulk-Out Endpoint */                            g_bulkOutStallFlag = TRUE;                            /* init Data Out ERP on Bulk-Out Pipe and submit */                            if (usbMsBulkOutErpInit(pData, dSize, erpCallback,                                                    NULL) != OK)                                goto EXIT_ERROR;                            }                        else                            {                            /* set CSW Status 0x2 (phase error) */                            pCsw->status = USB_CSW_PHASE_ERROR;                            pData = (UINT8 *)pCsw;                            dSize = sizeof(USB_BULK_CSW);                            erpCallback = bulkInErpCallbackCSW;                            /* init CSW ERP on Bulk-in pipe and submit */                            if (usbMsBulkInErpInit(pData, dSize, erpCallback,                                                    NULL) != OK)                                goto EXIT_ERROR;                            }                        }                    else                        {                        /* set CSW Status 0x2 (phase error) */                        pCsw->status = USB_CSW_PHASE_ERROR;                        pData = (UINT8 *)pCsw;                        dSize = sizeof(USB_BULK_CSW);                        erpCallback = bulkInErpCallbackCSW;                        /* init CSW ERP on Bulk-in pipe and submit */                        if (usbMsBulkInErpInit(pData, dSize,                                                erpCallback, NULL) != OK)                            goto EXIT_ERROR;                        }                    }                else                    {                    /* set CSW Status 0x2 (phase error) */                    pCsw->status = USB_CSW_PHASE_ERROR;                    pData = (UINT8 *)pCsw;                    dSize = sizeof(USB_BULK_CSW);                    erpCallback = bulkInErpCallbackCSW;                    /* init CSW ERP on Bulk-in pipe and submit */                    if (usbMsBulkInErpInit (pData, dSize, erpCallback, NULL)                        != OK)                        goto EXIT_ERROR;                    }                }            else                {                if (cbwDataXferLgth == 0)                    {                    /* init CSW ERP on Bulk-in pipe submit ERP */                    pCsw->dataResidue = 0x0;                    pData = (UINT8 *)pCsw;                    dSize = sizeof(USB_BULK_CSW);                    erpCallback = bulkInErpCallbackCSW;                    /* init CSW ERP on Bulk-in pipe and submit */                    if (usbMsBulkInErpInit(pData, dSize, erpCallback, NULL)                        != OK)                        goto EXIT_ERROR;                    }                else                    {                    /* set CSW residue size, dSize = 0 */                    pCsw->dataResidue = cbwDataXferLgth;                    if (cbwDataDir == CBW_DATA_IN)                        {                        /* set stall flag on Bulk-In Pipe */                        g_bulkInStallFlag = TRUE;                        /*                          * init Data In ERP on Bulk-In pipe and submit                         * to TCD                          */                        if (usbMsBulkInErpInit(pData,dSize,                                               erpCallback,NULL) != OK)                            goto EXIT_ERROR;                        }                    else                        {                        /* set stall flag on Bulk-In Pipe */                        g_bulkOutStallFlag = TRUE;                        /* init Data In ERP on Bulk-In pipe and submit to TCD */                        if (usbMsBulkOutErpInit(pData, dSize, erpCallback,NULL)                            != OK)                            goto EXIT_ERROR;                        }                    }                }            }        else            {            /* set CSW Status 0x1 (command failed) */            pCsw->status = USB_CSW_STATUS_FAIL;            pData = (UINT8 *)pCsw;            dSize = sizeof(USB_BULK_CSW);            erpCallback = bulkInErpCallbackCSW;            /* init CSW ERP on Bulk-in pipe and submit */            if (usbMsBulkInErpInit(pData, dSize, erpCallback, NULL) != OK)                goto EXIT_ERROR;            }           }    else        {        goto EXIT_ERROR;        }    return;EXIT_ERROR:    usbMsBulkInStall();    usbMsBulkOutStall();    return;    }/********************************************************************************* bulkInErpCallbackCSW - send the CSW on bulk-in pipe** This routine sends the CSW (Command Status Wrapper) back to the host following* execution of the CBW.** RETURNS: N/A* * ERRNO:*  none*/void bulkInErpCallbackCSW    (    pVOID	erp		/* USB_ERP endpoint request packet */    )    {    UINT8		*pData;			/* data buffer */    UINT32		dSize;				/* size */    USB_ERP		*pErp = (USB_ERP *)erp;	/* USB_ERP */    usbDbgPrint("bulkInErpCallbackCSW: Enter...\n");    /* signal that bulk in ERP is complete */    usbMsBulkInErpInUseFlagSet (FALSE);    /* if a reset ocurred, we are no longer configured */    if (usbMsIsConfigured () == FALSE)        return;    /* verify data is valid */    if (pErp->result != OK)        return;    pData = (UINT8 *)usbMsCBWInit();    dSize = sizeof (USB_BULK_CBW);    /* init bulk-out ERP w/bulkOutErpCallbackCBW() callback */    if (usbMsBulkOutErpInit(pData, dSize,                         bulkOutErpCallbackCBW, NULL) != OK)        usbMsBulkOutStall();	return;    }/********************************************************************************* bulkInErpCallbackData - process end of data phase on bulk-in pipe** This routine is invoked following a data IN phase to the host.** RETURNS: N/A* * ERRNO:*  none*/void bulkInErpCallbackData    (    pVOID		erp		/* USB_ERP endpoint request packet */     )    {    USB_ERP		*pErp = (USB_ERP *)erp;	/* USB_ERP */    USB_BULK_CBW        *pCbw;			/* USB_BULK_CBW	*/    USB_BULK_CSW	*pCsw;			/* USB_BULK_CSW	*/     UINT8		 opCode;		/* operation code */    UINT8		*pData;		/* pointer to buffer */    UINT32		 dSize;		/* size */    usbDbgPrint("bulkInErpCallbackData: Enter...\n"); /* FIXME_JAC */    /* signal that bulk in ERP is complete */    usbMsBulkInErpInUseFlagSet (FALSE);    /* if a reset ocurred, we are no longer configured */    if (usbMsIsConfigured() == FALSE)        return;    /* verify data is valid */    if (pErp->result != OK)        return;    if (g_bulkInStallFlag == TRUE)        usbMsBulkInStall();    else        {        pCsw = usbMsCSWGet();        pCbw = usbMsCBWGet();        opCode = pCbw->CBD[0];        switch(opCode)            {            /* place any user specific code here */            case RBC_CMD_FORMAT:            case RBC_CMD_READ10:            case RBC_CMD_READCAPACITY:            case RBC_CMD_STARTSTOPUNIT:            case RBC_CMD_SYNCCACHE:            case RBC_CMD_VERIFY10:            case RBC_CMD_WRITE10:            case RBC_CMD_INQUIRY:            case RBC_CMD_MODESELECT6:            case RBC_CMD_MODESENSE6:            case RBC_CMD_PERSISTANTRESERVIN:            case RBC_CMD_PERSISTANTRESERVOUT:            case RBC_CMD_PRVENTALLOWMEDIUMREMOVAL:            case RBC_CMD_RELEASE6:            case RBC_CMD_REQUESTSENSE:            case RBC_CMD_RESERVE6:            case RBC_CMD_TESTUNITREADY:            case RBC_CMD_WRITEBUFFER:            default:            break;            }        /* init CSW ERP on Bulk-in pipe and submit */        pData = (UINT8 *)pCsw;        dSize = sizeof(USB_BULK_CSW);        /* init CSW ERP on Bulk-in pipe and submit */        if (usbMsBulkInErpInit(pData, dSize, bulkInErpCallbackCSW, NULL) != OK)            usbMsBulkInStall();        }    return;    }/********************************************************************************* bulkOutErpCallbackData - process end of data phase on bulk-out pipe** This routine is invoked following a data OUT phase from the host.** RETURNS: N/A* * ERRNO:*  none*/void bulkOutErpCallbackData    (    pVOID	erp		/* USB_ERP endpoint request packet */      )    {    USB_ERP		*pErp = (USB_ERP *)erp;	/* USB_ERP */	     USB_BULK_CBW	*pCbw;			/* USB_BULK_CBW */    	    USB_BULK_CSW	*pCsw;			/* USB_BULK_CSW */         UINT8		opCode;			/* operation code */    UINT8		*pData;			/* pointer to buffer */    UINT32		dSize;			/* size */    UINT32		blkNum;			/* block nubmer */    UINT16		numBlks;		/* number of blocks */    usbDbgPrint("Enter bulkOutErpCallbackData\n");     /* signal that bulk out ERP is complete */    usbMsBulkOutErpInUseFlagSet(FALSE);    /* if a reset ocurred, we are no longer configured */    if (usbMsIsConfigured() == FALSE)        return;    /* verify data is valid */    if (pErp->result != OK)        return;    if (g_bulkOutStallFlag == TRUE)        usbMsBulkOutStall();    else        {        pCsw = usbMsCSWGet();        pCbw = usbMsCBWGet();        opCode = pCbw->CBD[0];        switch(opCode)            {            /* place any user specific code here */            case RBC_CMD_FORMAT:                break;            case RBC_CMD_READ10:                break;            case RBC_CMD_READCAPACITY:                break;            case RBC_CMD_STARTSTOPUNIT:                break;            case RBC_CMD_SYNCCACHE:                break;            case RBC_CMD_VERIFY10:                break;            case RBC_CMD_WRITE10:                {                CBIO_DEV_ID cbio;                STATUS      retVal;                cookie_t    cookie;                cbio = (CBIO_DEV_ID)usbTargRbcBlockDevGet();                /* get starting LBA from arg[2] - arg[5] of WRITE CBW */                blkNum = (pCbw->CBD[2] << 24) |                         (pCbw->CBD[3] << 16) |                         (pCbw->CBD[4] << 8)  |                         (pCbw->CBD[5]);                /* get transfer length from WRITE CBW */                numBlks = (pCbw->CBD[7] << 8) |                          (pCbw->CBD[8]);                retVal = cbioBlkRW (cbio, blkNum, numBlks,                                    (addr_t)pErp->bfrList [0].pBfr, CBIO_WRITE,                                     &cookie );                if (retVal == ERROR)                    {                    usbMsBulkOutStall();                    }                }                break;            case RBC_CMD_INQUIRY:            case RBC_CMD_MODESELECT6:            case RBC_CMD_MODESENSE6:            case RBC_CMD_PERSISTANTRESERVIN:            case RBC_CMD_PERSISTANTRESERVOUT:            case RBC_CMD_PRVENTALLOWMEDIUMREMOVAL:            case RBC_CMD_RELEASE6:            case RBC_CMD_REQUESTSENSE:            case RBC_CMD_RESERVE6:            case RBC_CMD_TESTUNITREADY:            case RBC_CMD_WRITEBUFFER:            default:            break;            }        /* init CSW ERP on Bulk-in pipe and submit */        pData = (UINT8 *)pCsw;        dSize = sizeof(USB_BULK_CSW);        /* init CSW ERP on Bulk-in pipe and submit */        if (usbMsBulkInErpInit(pData,dSize,                                bulkInErpCallbackCSW, NULL) != OK)            usbMsBulkInStall();        }    return;    }

⌨️ 快捷键说明

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