亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbdcorelib.c

?? vxworks嵌入式實時系統的 usb底層驅動代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/***************************************************************************** fncHcdAttach - Attach an HCD to the USBD** RETURNS: S_usbdLib_xxxx*/LOCAL int fncHcdAttach    (    pURB_HCD_ATTACH pUrb    )    {    pUSBD_HCD pHcd = NULL;    UINT16 busNo;    int s;    /* validate URB */    if ((s = validateUrb (pUrb, sizeof (*pUrb), NULL)) != OK)	return s;    /* Allocate structure for this host controller */    if ((pHcd = OSS_CALLOC (sizeof (*pHcd))) == NULL)	return S_usbdLib_OUT_OF_MEMORY;    /* Issue an attach request to the HCD.  If it succeeds, determine the     * number of buses managed by the HCD.     */    if (usbHcdAttach (pUrb->hcdExecFunc, pUrb->param, hcdMngmtCallback,	pHcd, &pHcd->nexus, &pHcd->busCount) != OK)	{	OSS_FREE (pHcd);	return S_usbdLib_GENERAL_FAULT;	}    if ((pHcd->pBuses = OSS_CALLOC (sizeof (USBD_BUS) * pHcd->busCount)) == NULL)	{	destroyHcd (pHcd);	return S_usbdLib_OUT_OF_MEMORY;	}    /* Initialize the USBD_HCD */    if (usbHandleCreate (USBD_HCD_SIG, pHcd, &pHcd->attachToken) != OK)	{	s = S_usbdLib_OUT_OF_RESOURCES;	}    else	{	/* Fetch information about each bus from the HCD. */	for (busNo = 0; busNo < pHcd->busCount; busNo++)	    {	    if ((s = initHcdBus (pHcd, busNo)) != OK)		break;	    }	}    /* If we succeeded in initializing each bus, then the USBD_HCD     * is fully initialized...link it into the list of HCDs     */    if (s == OK)	{	usbListLink (&hcdList, pHcd, &pHcd->hcdLink, LINK_TAIL);	/* Return attachToken to caller */	pUrb->attachToken = pHcd->attachToken;	}    else	{	/* Failed to attach...release allocated structs, etc. */	destroyHcd (pHcd);	}    return s;    }/***************************************************************************** fncHcdDetach - Detach an HCD from the USBD** RETURNS: S_usbdLib_xxxx*/LOCAL int fncHcdDetach    (    pURB_HCD_DETACH pUrb    )    {    pUSBD_HCD pHcd;    int s;    /* Validate URB */        if ((s = validateUrb (pUrb, sizeof (*pUrb), NULL)) != OK)	return s;    /* Validate attachToken */    if (usbHandleValidate (pUrb->attachToken, USBD_HCD_SIG, (pVOID *) &pHcd) 	!= OK)	return S_usbdLib_BAD_HANDLE;        /* Detach the HCD and release HCD structures, etc. */    destroyHcd (pHcd);    return s;    }/***************************************************************************** fncStatisticsGet - Return USBD operating statistics** RETURNS: S_usbdLib_xxxx*/LOCAL int fncStatisticsGet    (    pURB_STATISTICS_GET pUrb    )    {    pUSBD_NODE pNode;    /* Validate root */    if (!validateNode (pUrb->nodeId, &pNode))	return S_usbdLib_BAD_HANDLE;    /* Validate other parameters */    if (pUrb->pStatistics == NULL)	return S_usbdLib_BAD_PARAM;    /* Copy statistics to callers buffer */    memcpy (pUrb->pStatistics, &pNode->pBus->stats,	min (pUrb->statLen, sizeof (pNode->pBus->stats)));    return OK;    }/***************************************************************************** fncBusCountGet - Returns number of USB buses in system** RETURNS: S_usbdLib_xxxx*/LOCAL int fncBusCountGet    (    pURB_BUS_COUNT_GET pUrb    )    {    pUSBD_HCD pHcd;    UINT16 busCount;    busCount = 0;    pHcd = usbListFirst (&hcdList);    while (pHcd != NULL)	{	busCount += pHcd->busCount;	pHcd = usbListNext (&pHcd->hcdLink);	}    pUrb->busCount = busCount;    return OK;    }/***************************************************************************** fncRootIdGet - Returns root node id for a USB** RETURNS: S_usbdLib_xxxx*/LOCAL int fncRootIdGet    (    pURB_ROOT_ID_GET pUrb    )    {    pUSBD_HCD pHcd;    UINT16 i;    int s = OK;    /* Find the HCD/bus corresponding to the index pUrb->busCount */    i = pUrb->busIndex;    pHcd = usbListFirst (&hcdList);    while (pHcd != NULL)	{	if (i < pHcd->busCount)	    {	    if (pHcd->pBuses [i].pRoot != NULL)		pUrb->rootId = pHcd->pBuses [i].pRoot->nodeHandle;	    else		s = S_usbdLib_INTERNAL_FAULT;	    break;	    }	else	    {	    i -= pHcd->busCount;	    pHcd = usbListNext (&pHcd->hcdLink);	    }	}    if (pHcd == NULL)	s = S_usbdLib_BAD_PARAM;    return s;    }/***************************************************************************** fncHubPortCountGet - Returns number of hubs on a port** RETURNS: S_usbdLib_xxxx*/LOCAL int fncHubPortCountGet    (    pURB_HUB_PORT_COUNT_GET pUrb    )    {    pUSBD_NODE pNode;    /* validate node handle */    if (!validateNode (pUrb->hubId, &pNode))	return S_usbdLib_BAD_HANDLE;    if (pNode->nodeInfo.nodeType != USB_NODETYPE_HUB)	return S_usbdLib_NOT_HUB;        /* return number of ports on this hub */    pUrb->portCount = pNode->numPorts;    return OK;    }/***************************************************************************** fncNodeIdGet - Returns id of node attached to a hub port** RETURNS: S_usbdLib_xxxx*/LOCAL int fncNodeIdGet    (    pURB_NODE_ID_GET pUrb    )    {    pUSBD_NODE pNode;    /* validate node handle */    if (!validateNode (pUrb->hubId, &pNode))	return S_usbdLib_BAD_HANDLE;    if (pNode->nodeInfo.nodeType != USB_NODETYPE_HUB)	return S_usbdLib_NOT_HUB;    /* If the port index is valid, return the node id, if any, attached     * to this port.     */    if (pUrb->portIndex >= pNode->numPorts)	return S_usbdLib_BAD_PARAM;    pUrb->nodeType = USB_NODETYPE_NONE;    if (pNode->pPorts != NULL &&	pNode->pPorts [pUrb->portIndex].pNode != NULL) 	{	pUrb->nodeType = pNode->pPorts [pUrb->portIndex].pNode->nodeInfo.nodeType;	pUrb->nodeId = pNode->pPorts [pUrb->portIndex].pNode->nodeHandle;	}	    return OK;    }/***************************************************************************** scanClassTypes - Scans nodes for matching class types** Scan <pNode> and all child nodes to see if they have exposed one or more* class types matching that described in <pNotify>.  If we find match(es),* then invoke the corresponding notification callbacks.** RETURNS: N/A*/LOCAL VOID scanClassTypes    (    pUSBD_NODE pNode,    pUSBD_CLIENT pClient,    pUSBD_NOTIFY_REQ pNotify    )    {    pUSBD_NODE_CLASS pClassType;    UINT16 portNo;    if (pNode != NULL)	{	/* Scan all class types exposed for this node. */	pClassType = usbListFirst (&pNode->classTypes);	while (pClassType != NULL)	    {	    notifyIfMatch (pNode, pClassType, pClient, pNotify, USBD_DYNA_ATTACH);	    pClassType = usbListNext (&pClassType->classLink);	    }    	/* If this node is a hub, then recursively scan child nodes. */	if (pNode->nodeInfo.nodeType == USB_NODETYPE_HUB &&	    pNode->pPorts != NULL)	    {	    for (portNo = 0; portNo < pNode->numPorts; portNo++)		scanClassTypes (pNode->pPorts [portNo].pNode, pClient, pNotify);	    }	}    }/***************************************************************************** fncDynaAttachReg - Register a client for dynamic attach notification** RETURNS: S_usbdLib_xxxx*/LOCAL int fncDynaAttachReg    (    pURB_DYNA_ATTACH_REG_UNREG pUrb    )    {    pUSBD_CLIENT pClient;    pUSBD_NOTIFY_REQ pNotify;    pUSBD_HCD pHcd;    UINT16 busNo;    int s;    /* Validate parameters. */    if ((s = validateUrb (pUrb, sizeof (*pUrb), &pClient)) != OK)	return s;    if (pUrb->attachCallback == NULL)	return S_usbdLib_BAD_PARAM;    /* Create a new dynamic notification request structure */    if ((pNotify = OSS_CALLOC (sizeof (*pNotify))) == NULL)	return S_usbdLib_OUT_OF_MEMORY;    pNotify->deviceClass = pUrb->deviceClass;    pNotify->deviceSubClass = pUrb->deviceSubClass;    pNotify->deviceProtocol = pUrb->deviceProtocol;    pNotify->callback = pUrb->attachCallback;    /* Link this to the list of notification requests for the client */    usbListLink (&pClient->notifyReqs, pNotify, &pNotify->reqLink, LINK_TAIL);    /* At the time of the initial notification registration (now), it is     * necessary to scan the list of devices already attached to the USB(s)     * in order to see if any match the request.  Devices attached/removed     * later will be handled by the busThread.     */    pHcd = usbListFirst (&hcdList);    while (pHcd != NULL)	{	for (busNo = 0; busNo < pHcd->busCount; busNo++)	    scanClassTypes (pHcd->pBuses [busNo].pRoot, pClient, pNotify);	pHcd = usbListNext (&pHcd->hcdLink);	}    return OK;    }/***************************************************************************** fncDynaAttachUnreg - Unregister a client for dynamic attach notification** RETURNS: S_usbdLib_xxxx*/LOCAL int fncDynaAttachUnreg    (    pURB_DYNA_ATTACH_REG_UNREG pUrb    )    {    pUSBD_CLIENT pClient;    pUSBD_NOTIFY_REQ pNotify;    int s;    /* Validate parameters. */    if ((s = validateUrb (pUrb, sizeof (*pUrb), &pClient)) != OK)	return s;    /* Search the client's list of notification requests for one which     * matches exactly the parameters in the URB.     */    pNotify = usbListFirst (&pClient->notifyReqs);    while (pNotify != NULL)	{	if (pNotify->deviceClass == pUrb->deviceClass &&	    pNotify->deviceSubClass == pUrb->deviceSubClass &&	    pNotify->deviceProtocol == pUrb->deviceProtocol &&	    pNotify->callback == pUrb->attachCallback)	    {	    /* We found a matching notification request.  Destroy it. */	    destroyNotify (pNotify);	    return OK;	    }	pNotify = usbListNext (&pNotify->reqLink);	}    /* If we get this far, no matching request was found.  Declare an error */    return S_usbdLib_GENERAL_FAULT;    }/***************************************************************************** controlIrpCallback - called when control pipe Irp completes** By convention, the USB_IRP.userPtr field is a pointer to the USBD_NODE* for this transfer.** RETURNS: N/A*/LOCAL VOID controlIrpCallback    (    pVOID p			/* completed IRP */    )    {    pUSB_IRP pIrp = (pUSB_IRP) p;    pUSBD_NODE pNode = pIrp->userPtr;    pURB_HEADER pUrb = pNode->pUrb;    /* Store the actual length transferred */    if (pNode->pActLen != NULL)	*pNode->pActLen = pIrp->bfrList [1].actLen;    /* Store the completion result in the URB */    setUrbResult (pUrb, (pIrp->result == OK) ? OK : S_usbdLib_IO_FAULT);    /* We're done with the control pipe structures for this node. */    OSS_SEM_GIVE (pNode->controlSem);    }/***************************************************************************** controlRequest - Formats and submits a control transfer request** This is an internal utility function which formats a USB Setup packet* and sends it to the control pipe of a node.** RETURNS: S_usbdLib_xxxx*/LOCAL int controlRequest    (    pURB_HEADER pUrb,		    /* URB header */    USBD_NODE_ID nodeId,	    /* node id */    UINT8 requestType,		    /* bmRequestType */    UINT8 request,		    /* bRequest */    UINT16 value,		    /* wValue */    UINT16 index,		    /* wIndex */    UINT16 length,		    /* wLength */    pVOID pBfr, 		    /* data */    pUINT16 pActLen		    /* actual len for IN data */    )    {    pUSBD_CLIENT pClient;    pUSBD_NODE pNode;    pUSB_SETUP pSetup;    pUSB_IRP pIrp;    /* validate the client ha

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频色一区| 91国偷自产一区二区三区观看| 欧美日韩视频一区二区| 亚洲一区二区在线视频| 欧美在线啊v一区| 日韩精品国产欧美| 精品毛片乱码1区2区3区| 蜜桃视频一区二区三区| 久久久不卡网国产精品一区| 白白色亚洲国产精品| 一区二区三区在线视频观看| 69久久夜色精品国产69蝌蚪网| 免费观看久久久4p| 国产日产欧产精品推荐色| 91在线观看一区二区| 亚洲电影中文字幕在线观看| 自拍偷拍国产精品| 欧美性感一类影片在线播放| 日本系列欧美系列| 久久影音资源网| 色综合天天视频在线观看| 天天影视色香欲综合网老头| 久久这里只有精品6| 在线看不卡av| 久久精品国产亚洲一区二区三区| 国产日韩欧美精品一区| 在线一区二区三区| 国内外成人在线视频| 亚洲三级理论片| 日韩欧美中文字幕公布| 丁香婷婷综合五月| 五月天欧美精品| 国产精品久线观看视频| 91 com成人网| 99久久国产综合精品女不卡| 日本aⅴ亚洲精品中文乱码| 中文字幕一区二区三区蜜月| 在线播放国产精品二区一二区四区| 国产精品一线二线三线精华| 亚洲一区二区三区美女| 国产亚洲欧美在线| 9191国产精品| 91麻豆精品秘密| 国产精品99久久久久久久vr| 天天综合天天做天天综合| 国产精品三级久久久久三级| 日韩欧美一二三四区| 色菇凉天天综合网| 成人免费福利片| 久久99精品国产麻豆婷婷洗澡| 亚洲一区视频在线| 亚洲国产成人在线| 亚洲精品一线二线三线| 91麻豆精品国产综合久久久久久| 99精品久久只有精品| 国产精品系列在线播放| 日本成人在线看| 午夜激情一区二区三区| 亚洲自拍都市欧美小说| 亚洲人一二三区| 中文成人综合网| 久久久精品黄色| 精品久久久久99| 日韩欧美精品在线| 欧美一区二区三区免费| 欧美精品久久天天躁| 欧美午夜在线观看| 欧美怡红院视频| 91福利视频网站| 色噜噜狠狠成人中文综合| www.性欧美| 99久久伊人久久99| 99久久久久久| 一本一道久久a久久精品综合蜜臀| 成人av在线播放网站| 国产成人丝袜美腿| 国产69精品一区二区亚洲孕妇| 激情六月婷婷久久| 韩国成人精品a∨在线观看| 美女精品一区二区| 激情av综合网| 国产主播一区二区| 国产精品一区二区三区网站| 国产91精品久久久久久久网曝门| 成人性生交大片免费看中文网站| 国产高清精品网站| 国产成人精品一区二区三区网站观看| 粉嫩一区二区三区性色av| 成人免费视频网站在线观看| 99视频有精品| 在线观看中文字幕不卡| 欧美日韩黄色影视| 欧美mv日韩mv国产网站| 国产日韩亚洲欧美综合| 中文字幕在线观看一区| 一区二区久久久久| 视频一区二区三区在线| 久久国产三级精品| 成人午夜碰碰视频| 91视频你懂的| 精品视频免费看| ww久久中文字幕| 亚洲日穴在线视频| 日本vs亚洲vs韩国一区三区二区| 国产精品一级片| 一本色道久久综合亚洲91| 91精品国产综合久久国产大片 | 亚洲h动漫在线| 国内精品伊人久久久久av影院 | 亚洲777理论| 国内外成人在线| 日本大香伊一区二区三区| 7777女厕盗摄久久久| 日本一区二区三区在线不卡| 亚洲一区在线看| 国产一区欧美日韩| 在线视频一区二区三| 精品国产青草久久久久福利| 日韩毛片精品高清免费| 麻豆视频观看网址久久| 色综合久久中文字幕综合网| 日韩午夜在线影院| 亚洲欧美另类久久久精品| 国产综合成人久久大片91| 欧洲一区二区av| 国产欧美一区二区三区在线看蜜臀| 亚洲免费在线看| 国产毛片精品一区| 欧美一区永久视频免费观看| 亚洲欧美一区二区三区极速播放| 精品一区二区三区在线播放视频| 91福利视频在线| 国产精品视频一二三| 毛片不卡一区二区| 欧美视频一区二区三区在线观看| 国产欧美日本一区视频| 日本中文在线一区| 91黄色在线观看| 国产精品美女久久久久aⅴ| 美女视频网站久久| 欧美日韩欧美一区二区| 国产精品高清亚洲| 国产制服丝袜一区| 日韩精品一区二区在线观看| 亚洲一区av在线| 色妞www精品视频| 国产精品美女久久久久久久久久久| 久久er99精品| 日韩欧美国产小视频| 香蕉成人伊视频在线观看| 色屁屁一区二区| 亚洲靠逼com| 99精品视频一区| 亚洲私人黄色宅男| 成人黄页毛片网站| 国产精品日韩精品欧美在线| 国产不卡在线视频| 日本一区二区三区四区| 国产精品一区二区视频| 久久久不卡网国产精品二区| 国产原创一区二区三区| 精品国产乱码久久久久久1区2区 | 欧美性感一类影片在线播放| 亚洲欧美一区二区不卡| eeuss影院一区二区三区| 亚洲欧美影音先锋| 91蜜桃视频在线| 亚洲蜜桃精久久久久久久| 99re热视频这里只精品| 亚洲欧美日韩综合aⅴ视频| 一本久久综合亚洲鲁鲁五月天| 亚洲老司机在线| 欧美日韩国产电影| 日本aⅴ免费视频一区二区三区| 日韩美女一区二区三区四区| 激情五月婷婷综合网| 久久影音资源网| 成人av在线看| 亚洲综合自拍偷拍| 欧美高清视频不卡网| 美腿丝袜亚洲三区| wwwwww.欧美系列| 成人久久18免费网站麻豆| 亚洲免费观看高清完整版在线| 91豆麻精品91久久久久久| 天天免费综合色| 精品国产91乱码一区二区三区| 国产精品中文有码| 日韩理论电影院| 欧美日本在线视频| 九九精品视频在线看| 国产精品福利一区二区| 欧美羞羞免费网站| 激情丁香综合五月| 亚洲精品视频在线| 欧美成人精品福利| av网站一区二区三区| 亚洲福利一区二区| 国产校园另类小说区| 91福利国产成人精品照片|