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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usbdcorelib.c

?? vxworks的完整的源代碼
?? 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品卡一卡二| 一区二区在线观看视频| 日韩不卡在线观看日韩不卡视频| 91免费在线播放| 亚洲婷婷综合久久一本伊一区| av在线不卡电影| 一区二区三区丝袜| 3751色影院一区二区三区| 日本在线播放一区二区三区| 日韩精品中文字幕一区| 国产一区二区三区免费看| 国产三级精品视频| 99久久精品国产精品久久| 亚洲一二三区视频在线观看| 在线综合亚洲欧美在线视频| 久久66热re国产| 国产精品国产馆在线真实露脸| 91视频国产资源| 日本色综合中文字幕| 久久免费国产精品 | 国产老女人精品毛片久久| 欧美—级在线免费片| 色偷偷久久一区二区三区| 亚洲国产成人porn| 欧美成人aa大片| 99视频精品全部免费在线| 亚洲成人在线网站| 2022国产精品视频| 色呦呦一区二区三区| 蜜桃视频一区二区| 亚洲精品videosex极品| 欧美videossexotv100| 成人三级伦理片| 日韩在线卡一卡二| 亚洲视频一区二区在线观看| 日韩一区二区中文字幕| 成人av小说网| 男人的j进女人的j一区| ...av二区三区久久精品| 日韩情涩欧美日韩视频| 97久久精品人人做人人爽| 蜜乳av一区二区| 一区二区三区四区激情| 久久在线观看免费| 在线观看不卡一区| 风间由美中文字幕在线看视频国产欧美| 亚洲一区二区三区精品在线| 欧美精品一区二区三区很污很色的| 一本大道久久a久久综合婷婷| 国产乱人伦精品一区二区在线观看| 亚洲一区免费在线观看| 欧美高清一级片在线观看| 日韩精品中文字幕在线不卡尤物| 在线视频你懂得一区| 成人免费看黄yyy456| 久久狠狠亚洲综合| 视频一区在线视频| 一级日本不卡的影视| 国产精品毛片高清在线完整版| 日韩视频国产视频| 欧美日韩成人激情| 欧美在线不卡视频| 一本一本大道香蕉久在线精品 | 亚洲欧洲成人精品av97| 久久久精品黄色| 日韩欧美精品在线| 5858s免费视频成人| 欧美私人免费视频| 91免费视频大全| 99精品欧美一区二区三区小说| 国产麻豆视频一区二区| 韩国理伦片一区二区三区在线播放| 丝袜诱惑制服诱惑色一区在线观看 | 精品一区二区三区在线播放视频| 亚洲成人一区二区在线观看| 亚洲男女一区二区三区| 亚洲天堂av一区| 中文字幕在线一区| 亚洲欧洲精品天堂一级| 综合婷婷亚洲小说| 亚洲三级在线观看| 亚洲精品福利视频网站| 一区二区欧美国产| 亚洲永久精品国产| 亚洲成精国产精品女| 视频一区二区三区在线| 日本怡春院一区二区| 久久99精品国产91久久来源| 国模大尺度一区二区三区| 久久er99精品| 国产91精品一区二区麻豆网站 | 美日韩黄色大片| 捆绑变态av一区二区三区| 精品一区二区三区免费播放| 国产一区二区调教| 成人免费视频一区二区| 91农村精品一区二区在线| 欧美午夜精品一区二区蜜桃| 在线成人av影院| 久久免费看少妇高潮| 亚洲美女偷拍久久| 天天综合天天做天天综合| 麻豆91精品91久久久的内涵| 国产一区二区三区免费播放| av电影在线不卡| 欧美三级一区二区| 欧美大黄免费观看| 中文字幕精品综合| 亚洲一区在线观看免费观看电影高清 | 国产一区在线精品| aaa欧美色吧激情视频| 欧美色综合天天久久综合精品| 91精品国产全国免费观看| 精品va天堂亚洲国产| 亚洲色欲色欲www在线观看| 亚洲图片欧美综合| 狠狠色综合日日| 91亚洲精品久久久蜜桃网站 | 韩国女主播成人在线| 91网站最新网址| 欧美大胆人体bbbb| 亚洲日本成人在线观看| 蜜臀久久99精品久久久久久9| 国产不卡高清在线观看视频| 日本精品一级二级| 久久婷婷国产综合精品青草| 亚洲免费三区一区二区| 九九国产精品视频| 色一情一乱一乱一91av| 精品不卡在线视频| 性欧美大战久久久久久久久| 国产高清不卡二三区| 欧美日本不卡视频| 亚洲欧洲日韩一区二区三区| 久久激五月天综合精品| 欧美视频一区二区| 国产精品素人一区二区| 日本大胆欧美人术艺术动态| 91丝袜美腿高跟国产极品老师 | 成人高清视频在线观看| 日韩女优毛片在线| 亚洲国产精品久久久久秋霞影院 | 欧美剧情电影在线观看完整版免费励志电影 | 日韩理论片一区二区| 国产精品性做久久久久久| 91精品国产色综合久久不卡电影| 亚洲另类春色校园小说| 国产99久久久久久免费看农村| 制服.丝袜.亚洲.中文.综合| 伊人性伊人情综合网| 成人精品在线视频观看| 久久综合色综合88| 三级成人在线视频| 欧美日韩一级二级| 一区二区三区在线观看国产| 成a人片亚洲日本久久| 精品日产卡一卡二卡麻豆| 秋霞影院一区二区| 欧美日韩免费电影| 亚洲国产综合人成综合网站| 色素色在线综合| 亚洲视频每日更新| 色噜噜狠狠色综合欧洲selulu| 中文字幕免费在线观看视频一区| 国产在线看一区| 欧美精品一区二区三区在线播放 | 久久精品国产亚洲aⅴ| 91精品国产综合久久久久久久久久 | 色综合久久久久网| 亚洲天堂免费看| 色偷偷久久人人79超碰人人澡| 亚洲日穴在线视频| 99re8在线精品视频免费播放| 国产精品污网站| 不卡的av中国片| 亚洲男人都懂的| 欧美日韩国产片| 秋霞成人午夜伦在线观看| 欧美一级高清片| 久久91精品久久久久久秒播 | 一区在线观看免费| 99精品黄色片免费大全| 亚洲精品中文在线观看| 在线免费观看日韩欧美| 午夜一区二区三区视频| 777xxx欧美| 精品一二三四区| 欧美国产精品中文字幕| aaa亚洲精品一二三区| 亚洲第四色夜色| 日韩精品一区二区三区视频在线观看| 精品亚洲免费视频| 国产精品电影一区二区三区| 91黄视频在线观看| 全国精品久久少妇| 国产精品免费看片| 欧美美女bb生活片| 国产精品一二三| 亚洲精品水蜜桃| 日韩精品一区二区三区蜜臀|