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

📄 usbtcdlib.c

📁 VxWorks下USB驱动的源代码!
💻 C
字号:
/* usbTcdLib.c - TCD functional API *//* Copyright 2000 Wind River Systems, Inc. *//*Modification history--------------------01b,23nov99,rcb  Change #include ../xxx references to lower case.01a,09aug99,rcb  First.*//*DESCRIPTIONThis file defines a generic functional interface to a USB TCD (TargetController Driver).  USB TCDs export a single public entry point, theirUSB_TCD_EXEC_FUNC.  To this entry point the caller passes a USB_TRB, orTCD Request Block, which contains a function code identifying a task tobe performed by the TCD and which contains any parameters required for the specified function.This library provides a functional API which to the TCD which hides theunderlying USB_TRBs from the caller.  This simplifies the caller's useof the TCD. Normally, this library is used only by usbTargLib.  Other modules shouldhave no need to call this library directly.*//* includes */#include "usb/usbPlatform.h"#include "string.h"#include "usb/ossLib.h"#include "drv/usb/target/usbTcd.h"#include "usb/target/usbTcdLib.h"/* functions *//***************************************************************************** trbInit - Initialize a TCD request block** RETURNS: N/A*/LOCAL VOID trbInit (pTRB_HEADER pTrb, pTCD_NEXUS pNexus, UINT16 function, UINT16 totalLen){    memset (pTrb, 0, totalLen);    if (pNexus != NULL)        pTrb->handle = pNexus->handle;    pTrb->function = function;    pTrb->trbLength = totalLen;}/***************************************************************************** usbTcdAttach - Attach/initialize a TCD** RETURNS: OK, or ERROR if unable to attach TCD** ERRNO:*   S_usbTcdLib_BAD_PARAM*/STATUS usbTcdAttach (USB_TCD_EXEC_FUNC tcdExecFunc, /* TCD's primary entry point */                     pVOID tcdParam,    /* TCD-specific param */                     pTCD_NEXUS pNexus, /* nexus will be initialized on return */                     USB_TCD_MNGMT_CALLBACK mngmtCallback,  /* caller's management callback */                     pVOID mngmtCallbackParam,  /* caller-defined mngmt callback param */                     pUINT16 pSpeed,    /* bfr to receive target's speed */                     pUINT16 pNumEndpoints, /* bfr to receive nbr of endpoints */                     pUSB_TARG_ENDPOINT_INFO * ppEndpoints  /* bfr to receive ptr to endpt tbl */    ){    TRB_ATTACH trb;    STATUS status;    /* validate parameters */    if (tcdExecFunc == NULL || pNexus == NULL || mngmtCallback == NULL ||        pSpeed == NULL || pNumEndpoints == NULL || ppEndpoints == NULL)        return ossStatus (S_usbTcdLib_BAD_PARAM);    /* Initialize/execute TRB */    trbInit (&trb.header, NULL, TCD_FNC_ATTACH, sizeof (trb));    trb.tcdParam = tcdParam;    trb.mngmtCallback = mngmtCallback;    trb.mngmtCallbackParam = mngmtCallbackParam;    status = (*tcdExecFunc) (&trb);    /* return results */    pNexus->tcdExecFunc = tcdExecFunc;    pNexus->handle = trb.header.handle;    *pSpeed = trb.speed;    *pNumEndpoints = trb.numEndpoints;    *ppEndpoints = trb.pEndpoints;    return status;}/***************************************************************************** usbTcdDetach - Detaches/shuts down TCD** RETURNS: OK, or ERROR if unable to detach TCD*/STATUS usbTcdDetach (pTCD_NEXUS pNexus  /* client's nexus */    ){    TRB_DETACH trb;    /* initialize/execute trb */    trbInit (&trb.header, pNexus, TCD_FNC_DETACH, sizeof (trb));    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdEnable - Enables TCD** RETURNS: OK, or ERROR if unable to enable TCD*/STATUS usbTcdEnable (pTCD_NEXUS pNexus  /* client's nexus */    ){    TRB_ENABLE_DISABLE trb;    /* initialize/execute trb */    trbInit (&trb.header, pNexus, TCD_FNC_ENABLE, sizeof (trb));    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdDisable - Disables TCD** RETURNS: OK, or ERROR if unable to disable TCD*/STATUS usbTcdDisable (pTCD_NEXUS pNexus /* client's nexus */    ){    TRB_ENABLE_DISABLE trb;    /* initialize/execute trb */    trbInit (&trb.header, pNexus, TCD_FNC_DISABLE, sizeof (trb));    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdAddressSet - Sets device address on the USB** RETURNS: OK, or ERROR if unable to set USB address*/STATUS usbTcdAddressSet (pTCD_NEXUS pNexus, /* client's nexus */                         UINT16 deviceAddress   /* new address for target */    ){    TRB_ADDRESS_SET trb;    /* initialize/execute trb */    trbInit (&trb.header, pNexus, TCD_FNC_ADDRESS_SET, sizeof (trb));    trb.deviceAddress = deviceAddress;    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdSignalResume - Drives USB RESUME signalling** RETURNS: OK, or ERROR if unable to drive RESUME signalling*/STATUS usbTcdSignalResume (pTCD_NEXUS pNexus    /* client's nexus */    ){    TRB_SIGNAL_RESUME trb;    /* initialize/execute trb */    trbInit (&trb.header, pNexus, TCD_FNC_SIGNAL_RESUME, sizeof (trb));    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdEndpointAssign - Assigns an endpoint for subsequent data transfer** RETURNS: OK, or ERROR if unable to assign endpoint.*/STATUS usbTcdEndpointAssign (pTCD_NEXUS pNexus, /* client's nexus */                             UINT16 endpointId, /* TCD-assigned endpoint ID */                             UINT16 endpointNum,    /* endpoint number to be assigned */                             UINT16 configuration,  /* configuration associated with endpoint */                             UINT16 interface,  /* interface associated with endpoint */                             UINT16 transferType,   /* transfer type for endpoint */                             UINT16 direction   /* direction for endpoint */    ){    TRB_ENDPOINT_ASSIGN trb;    /* initialize/execute TRB */    trbInit (&trb.header, pNexus, TCD_FNC_ENDPOINT_ASSIGN, sizeof (trb));    trb.endpointId = endpointId;    trb.endpointNum = endpointNum;    trb.configuration = configuration;    trb.interface = interface;    trb.transferType = transferType;    trb.direction = direction;    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdEndpointRelease - Release a previously assigned endpoint** RETURNS: OK, or ERROR if unable to release endpoint*/STATUS usbTcdEndpointRelease (pTCD_NEXUS pNexus,    /* client's nexus */                              UINT16 endpointId /* endpointId to release */    ){    TRB_ENDPOINT_RELEASE trb;    /* initialize/execute TRB */    trbInit (&trb.header, pNexus, TCD_FNC_ENDPOINT_RELEASE, sizeof (trb));    trb.endpointId = endpointId;    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdEndpointStateSet - Sets endpoint stall/unstall state** RETURNS: OK, or ERROR if unable to set endpoint state*/STATUS usbTcdEndpointStateSet (pTCD_NEXUS pNexus,   /* client's nexus */                               UINT16 endpointId,   /* endpointId */                               UINT16 state /* TCD_ENDPOINT_STALL/UNSTALL */    ){    TRB_ENDPOINT_STATE_SET trb;    /* initialize/execute TRB */    trbInit (&trb.header, pNexus, TCD_FNC_ENDPOINT_STATE_SET, sizeof (trb));    trb.endpointId = endpointId;    trb.state = state;    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdCurrentFrameGet - Gets current USB frame number** RETURNS: OK, or ERROR if unable to get USB frame number*/STATUS usbTcdCurrentFrameGet (pTCD_NEXUS pNexus,    /* client's nexus */                              pUINT16 pFrameNo  /* current frame number */    ){    TRB_CURRENT_FRAME_GET trb;    STATUS status;    /* initialize/execute TRB */    trbInit (&trb.header, pNexus, TCD_FNC_CURRENT_FRAME_GET, sizeof (trb));    status = (*pNexus->tcdExecFunc) (&trb);    /* return results */    if (pFrameNo != NULL)        *pFrameNo = trb.frameNo;    return status;}/***************************************************************************** usbTcdErpSubmit - Submits a USB_ERP for execution** RETURNS: OK, or ERROR if unable to submit ERP*/STATUS usbTcdErpSubmit (pTCD_NEXUS pNexus,  /* client's nexus */                        pUSB_ERP pErp   /* ERP to be executed */    ){    TRB_ERP_SUBMIT trb;    /* initialize/execute TRB */    trbInit (&trb.header, pNexus, TCD_FNC_ERP_SUBMIT, sizeof (trb));    trb.pErp = pErp;    return (*pNexus->tcdExecFunc) (&trb);}/***************************************************************************** usbTcdErpCancel - Cancels a USB_ERP** RETURNS: OK, or ERROR if unable to cancel ERP*/STATUS usbTcdErpCancel (pTCD_NEXUS pNexus,  /* client's nexus */                        pUSB_ERP pErp   /* ERP to be canceled */    ){    TRB_ERP_CANCEL trb;    /* initialize/execute TRB */    trbInit (&trb.header, pNexus, TCD_FNC_ERP_CANCEL, sizeof (trb));    trb.pErp = pErp;    return (*pNexus->tcdExecFunc) (&trb);}/* End of file. */

⌨️ 快捷键说明

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