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

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

?? usbhandlelib.c

?? vxworks嵌入式實時系統(tǒng)的 usb底層驅(qū)動代碼
?? C
字號:
/* usbHandleLib.c - handle utility functions *//* Copyright 2000 Wind River Systems, Inc. *//*Modification history--------------------01b,07mar00,rcb  Add casts as necessary to reflect change of		 GENERIC_HANDLE from UINT32 to pVOID.01a,07jun99,rcb  First.*//*DESCRIPTIONImplements a set of general-purpose handle creation and validation functions.Using these services, libraries can return handles to callers which can subsequently be validated for authenticity.  This provides libraries withan additional measure of "bullet-proofing."*//* includes */#include "usb/usbPlatform.h"#include "usb/ossLib.h"#include "usb/usbHandleLib.h"	    /* our API *//* defines */#define DEFAULT_HANDLES     1024    /* Default number of handles *//* INDEX() calculates the handle[] index based on a handle number */#define INDEX(h)    ((((UINT32) h) - 1) % numHandles)/* typedefs *//* * HDL_DESCR - Describes each handle */typedef struct hdl_descr    {    GENERIC_HANDLE handle;	    /* Currently assigned handle */    UINT32 handleSig;		    /* signature used to validate handle */    pVOID handleParam;		    /* arbitrary parameter used by caller */    } HDL_DESCR, *pHDL_DESCR;/* locals */LOCAL int initCount = 0;	    /* Initialization nesting count */LOCAL HDL_DESCR *handles = NULL;    /* Pointer to array of handles */LOCAL UINT32 numHandles = 0;	    /* Number of handles allocated */LOCAL UINT32 usedHandles = 0;	    /* Number of handles in use */LOCAL UINT32 nextHandleNum = 0;     /* Handle numbers always increment */LOCAL MUTEX_HANDLE mutex = NULL;    /* mutex for handle allocation *//* functions *//***************************************************************************** usbHandleInitialize - Initializies the handle utility library** Initializes the handle utility library.  Must be called at least once* prior to any other calls into the handle utility library.  Calls to * usbHandleInitialize() may be nested, allowing multiple clients to use the* library without requiring that they be coordinated.** <maxHandles> defines the maximum number of handles which should be* allocated by the library.  Passing a zero in <maxHandles> causes the * library to allocate a default number of handles.  <maxHandles> is ignored * on "nested" calls to usbHandleInitialize().  ** RETURNS: OK or ERROR** ERRNO:*  S_usbHandleLib_OUT_OF_MEMORY*  S_usbHandleLib_OUT_OF_RESOURCES*/STATUS usbHandleInitialize    (    UINT32 maxHandles		    /* max handles allocated by library */    )    {    STATUS s = OK;    /* Check if we're already initialized */    if (++initCount > 1)	return OK;    /* Create the handle control structures */    if (maxHandles == 0)	maxHandles = DEFAULT_HANDLES;    if ((handles = OSS_CALLOC (sizeof (HDL_DESCR) * maxHandles)) == NULL)	{	s = ossStatus (S_usbHandleLib_OUT_OF_MEMORY);	}    else	{	if (OSS_MUTEX_CREATE (&mutex) != OK)	    {	    s = ossStatus (S_usbHandleLib_OUT_OF_RESOURCES);	    }	else	    {	    /* Initialize handle array. */	    numHandles = maxHandles;	    usedHandles = 0;	    nextHandleNum = 0;	    return OK;	    }	OSS_FREE (handles);	handles = NULL;	}    /* Failed to initialize. */    --initCount;    return s;    }/***************************************************************************** usbHandleShutdown - Shuts down the handle utility library** Shuts down the handle utility library.  When calls to usbHandleInitialize()* have been nested,  usbHandleShutdown() must be called a corresponding number* of times.** RETURNS: OK or ERROR*/STATUS usbHandleShutdown (void)    {    if (initCount > 0)	{	if (--initCount == 0)	    {	    if (mutex != NULL)		{		OSS_MUTEX_DESTROY (mutex);		mutex = NULL;		}	    if (handles != NULL)		{		OSS_FREE (handles);		handles = NULL;		numHandles = 0;		}	    }	}    return OK;    }/***************************************************************************** usbHandleCreate - Creates a new handle** Creates a new handle.  The caller passes an arbitrary <handleSignature>* and a <handleParam>.	The <handleSignature> will be used in subsequent* calls to usbHandleValidate().** RETURNS: OK or ERROR** ERRNO:*  S_usbHandleLib_NOT_INITIALIZED*  S_usbHandleLib_BAD_PARAM*  S_usbHandleLib_GENERAL_FAULT*  S_usbHandleLib_OUT_OF_HANDLES*/STATUS usbHandleCreate    (    UINT32 handleSignature,	    /* Arbitrary handle signature */    pVOID handleParam,		    /* Arbitrary handle parameter */    pGENERIC_HANDLE pHandle	    /* Newly allocated handle */    )    {    STATUS s = OK;    /* Are we initialized? */    if (initCount == 0)	return ossStatus (S_usbHandleLib_NOT_INITIALIZED);    /* Check parameters */    if (pHandle == NULL)	return ossStatus (S_usbHandleLib_BAD_PARAM);    /* Take the mutex */    if (OSS_MUTEX_TAKE (mutex, OSS_BLOCK) != OK)	return ossStatus (S_usbHandleLib_GENERAL_FAULT);    /* Is there a free handle? */    if (usedHandles == numHandles) 	{	s = ossStatus (S_usbHandleLib_OUT_OF_HANDLES);	}    else	{	/* Find a free handle and assign a handle number to it */	*pHandle = NULL;    	while (*pHandle == NULL)	    {	    /* We don't use handle number 0. (handle numbers are always 1	    greater than the index into the handles[] array. */	    if (nextHandleNum == 0)		++nextHandleNum;	    if (handles [INDEX (nextHandleNum)].handle == 0)		{		/* We found a free handle */		*pHandle = (GENERIC_HANDLE) nextHandleNum;		handles [INDEX (nextHandleNum)].handle = (GENERIC_HANDLE) nextHandleNum;		handles [INDEX (nextHandleNum)].handleSig = handleSignature;		handles [INDEX (nextHandleNum)].handleParam = handleParam;		}	    /* Whether or not we used this handle, we increment nextHandleNum	    so the next search will always begin after where we left off. */	    if (++nextHandleNum > numHandles) 		nextHandleNum = 0;	    }	}    /* Release the mutex and return */    OSS_MUTEX_RELEASE (mutex);    return s;    }/***************************************************************************** usbHandleDestroy - Destroys a handle** This functions destroys the <handle> created by calling usbHandleCreate().** RETURNS: OK or ERROR** ERRNO:*  S_usbHandleLib_GENERAL_FAULT*  S_usbHandleLib_BAD_HANDLE*/STATUS usbHandleDestroy    (    GENERIC_HANDLE handle	    /* handle to be destroyed */    )    {    STATUS s = OK;        /* Take the mutex */    if (OSS_MUTEX_TAKE (mutex, OSS_BLOCK) != OK)	return ossStatus (S_usbHandleLib_GENERAL_FAULT);    /* Is this a valid handle? */    if (handles [INDEX (handle)].handle != handle)	{	s = ossStatus (S_usbHandleLib_BAD_HANDLE);	}    else	{	/* Release the indicated handle descriptor */	handles [INDEX (handle)].handle = 0;	handles [INDEX (handle)].handleSig = 0;	handles [INDEX (handle)].handleParam = 0;   	}    /* Release the mutext and return */    OSS_MUTEX_RELEASE (mutex);    return s;    }/***************************************************************************** usbHandleValidate - Validates a handle** This function validates <handle>.  The <handle> must match the* <handleSignature> used when the handle was originally created.  If the* handle is valid, the <pHandleParam> will be returned.** RETURNS: OK or ERROR** ERRNO:*  S_usbHandleLib_NOT_INITIALIZED*  S_usbHandleLib_BAD_HANDLE*/STATUS usbHandleValidate    (    GENERIC_HANDLE handle,	    /* handle to be validated */    UINT32 handleSignature,	    /* signature used to validate handle */    pVOID *pHandleParam 	    /* Handle parameter on return */    )    {        /* Are we initialized? */    if (initCount == 0)	return ossStatus (S_usbHandleLib_NOT_INITIALIZED);    /* Is the indicated handle valid? */    if (handles [INDEX (handle)].handle != handle ||	handles [INDEX (handle)].handleSig != handleSignature)	return ossStatus (S_usbHandleLib_BAD_HANDLE);    /* Handle is valid.  Return param associated with handle */    if (pHandleParam != NULL)	*pHandleParam = handles [INDEX (handle)].handleParam;    return OK;    }/* End of file. */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国产a| 91福利区一区二区三区| 久草精品在线观看| 男女激情视频一区| 蜜桃视频一区二区三区| 美脚の诱脚舐め脚责91| 久久不见久久见免费视频1| 久久国产免费看| 国产一区二区三区免费观看| 国产美女主播视频一区| 国产精品一区二区视频| 国产精品夜夜嗨| 成人精品高清在线| 99久久99久久久精品齐齐| 色悠悠亚洲一区二区| 欧美性高清videossexo| 91精品国产综合久久久久| 91精品在线麻豆| 久久综合久久鬼色| 国产香蕉久久精品综合网| 亚洲国产成人在线| 亚洲欧美色综合| 日韩黄色在线观看| 激情久久久久久久久久久久久久久久| 国产精品亚洲综合一区在线观看| 不卡电影一区二区三区| 欧美色视频在线观看| 日韩欧美一区二区免费| 中文字幕精品在线不卡| 亚洲精品免费在线观看| 日韩精彩视频在线观看| 成人性生交大片免费| 91麻豆国产福利在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 久久精品久久综合| 国产另类ts人妖一区二区| av电影在线观看一区| 欧美日韩视频在线第一区| 精品对白一区国产伦| 中文字幕制服丝袜一区二区三区 | 国产婷婷色一区二区三区四区 | 午夜精品一区二区三区电影天堂| 另类欧美日韩国产在线| 99精品久久99久久久久| 3d动漫精品啪啪| 欧美极品aⅴ影院| 亚洲h在线观看| 国产成人在线视频播放| 欧美吞精做爰啪啪高潮| 久久久精品黄色| 亚洲国产日韩a在线播放| 久久99国产精品尤物| 91免费国产在线| 久久综合九色综合久久久精品综合| 亚洲欧洲成人精品av97| 免费人成精品欧美精品| 色综合天天综合在线视频| 日韩免费性生活视频播放| 亚洲精品高清在线| 国产一区二区三区四| 欧美日韩的一区二区| 中文字幕亚洲在| 国产在线不卡视频| 欧美日韩成人综合天天影院| 国产精品久久久久影院色老大 | 欧美久久高跟鞋激| 亚洲欧美综合色| 精品亚洲成a人| 欧美日韩国产美| 亚洲精品中文在线观看| 成人一区二区三区视频| 日韩精品综合一本久道在线视频| 亚洲国产日韩a在线播放性色| 不卡视频在线看| 久久久99免费| 蜜桃视频在线一区| 欧美精品免费视频| 亚洲最快最全在线视频| 成人av网站免费观看| 久久亚区不卡日本| 久久精品国产亚洲高清剧情介绍| 欧美三级在线视频| 一区二区日韩电影| 91日韩在线专区| 中文字幕一区二区三区视频| 国产成人综合网| 久久精品亚洲乱码伦伦中文| 国内精品不卡在线| 日韩欧美一级二级| 青青草国产精品亚洲专区无| 欧美日韩国产色站一区二区三区| 亚洲专区一二三| 欧美中文字幕一二三区视频| 一区二区三区在线观看欧美| 一本大道av伊人久久综合| 亚洲女同女同女同女同女同69| 99久久国产综合精品女不卡| 亚洲国产成人自拍| 波多野结衣中文字幕一区二区三区| 国产欧美va欧美不卡在线| 国产福利一区二区| 国产精品久久久久国产精品日日| 成人av网在线| 亚洲美女视频一区| 色天天综合久久久久综合片| 一区二区激情小说| 欧美日韩美少妇| 秋霞成人午夜伦在线观看| 91精品国产综合久久香蕉麻豆| 免费高清不卡av| 精品第一国产综合精品aⅴ| 激情综合色综合久久综合| 久久久美女毛片| 成人综合日日夜夜| 亚洲欧洲无码一区二区三区| 色视频成人在线观看免| 亚洲第一av色| 欧美xxxx老人做受| 成人性视频免费网站| 一区二区三区不卡视频| 8x福利精品第一导航| 久久66热偷产精品| 国产精品久久夜| 欧美日精品一区视频| 麻豆成人综合网| 国产精品毛片无遮挡高清| 色综合久久久久久久久| 视频一区欧美精品| 国产亚洲精品免费| 91麻豆国产在线观看| 丝袜美腿亚洲一区| 久久久电影一区二区三区| 99久久久精品免费观看国产蜜| 亚洲成在线观看| 久久精品在这里| 日本福利一区二区| 免费在线观看成人| 国产精品久久久久aaaa| 欧美日韩精品系列| 福利视频网站一区二区三区| 一区二区激情视频| 欧美xxxx在线观看| 日本精品视频一区二区| 免费观看91视频大全| 中文字幕一区二区三区蜜月| 欧美日本一区二区| 成人免费毛片片v| 日本欧美加勒比视频| 国产精品激情偷乱一区二区∴| 欧美肥胖老妇做爰| av不卡免费电影| 轻轻草成人在线| 亚洲视频香蕉人妖| 亚洲精品一区二区三区精华液| 99精品1区2区| 经典三级视频一区| 亚洲综合网站在线观看| 久久免费偷拍视频| 欧美夫妻性生活| 一本大道av一区二区在线播放| 久久99国产精品尤物| 亚洲图片自拍偷拍| 国产精品毛片大码女人| 精品国产污网站| 欧美精品三级在线观看| 99久久综合色| 国产一区二区三区四区五区入口| 亚洲一区二区精品久久av| 欧美—级在线免费片| 精品久久久久av影院 | 久久人人爽爽爽人久久久| 欧美视频在线观看一区二区| caoporn国产一区二区| 国模套图日韩精品一区二区| 亚洲成人tv网| 亚洲你懂的在线视频| 久久精品人人爽人人爽| 日韩免费一区二区| 欧美日韩精品一区二区在线播放| 91女厕偷拍女厕偷拍高清| 国产v综合v亚洲欧| 精品综合免费视频观看| 亚洲va中文字幕| 亚洲综合一区二区精品导航| 中文字幕一区视频| 欧美国产精品久久| 337p日本欧洲亚洲大胆色噜噜| 欧美久久久久久久久| 欧美日韩国产色站一区二区三区| 一本高清dvd不卡在线观看 | 中文天堂在线一区| 国产亚洲一区二区三区在线观看| 日韩欧美国产综合| 欧美一区二区三区色| 欧美三片在线视频观看| 欧美午夜精品免费| 在线观看亚洲精品| 欧美三日本三级三级在线播放| 91久久人澡人人添人人爽欧美| 91在线观看高清|