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

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

?? usbhandlelib.c

?? Vxworks5.5的USB驅動程序,包括主機和設備型
?? 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. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品538一区二区在线| 成人免费视频在线观看| 日本电影欧美片| 成人美女视频在线观看| 成人精品小蝌蚪| 播五月开心婷婷综合| 成人av在线一区二区| 91亚洲男人天堂| 欧美日韩亚洲综合在线| 在线观看视频一区二区欧美日韩 | 欧美日韩一区二区在线视频| 在线观看亚洲精品| 制服视频三区第一页精品| 欧美精品视频www在线观看| 欧美一区二区三区人| 久久综合色婷婷| 国产精品护士白丝一区av| 亚洲欧美偷拍卡通变态| 亚洲高清视频在线| 极品尤物av久久免费看| 丁香天五香天堂综合| 99视频一区二区| 88在线观看91蜜桃国自产| 精品国产一二三| 亚洲精品亚洲人成人网| 日韩电影在线一区| 国产成人精品一区二区三区四区| 99久久精品费精品国产一区二区| 欧美日韩精品是欧美日韩精品| 欧美一区二区三区的| 久久久青草青青国产亚洲免观| 亚洲欧美激情视频在线观看一区二区三区 | 91亚洲精品久久久蜜桃| 678五月天丁香亚洲综合网| 国产欧美一二三区| 天天综合色天天综合色h| 国产精品亚洲成人| 欧美精品日韩精品| 国产精品久久久久精k8| 美女诱惑一区二区| 91成人免费网站| 日本一区二区免费在线观看视频 | 国产毛片精品一区| 91极品视觉盛宴| 久久久蜜桃精品| 日韩精品亚洲一区| 97se亚洲国产综合在线| 欧美精品一区二区蜜臀亚洲| 亚洲一区日韩精品中文字幕| 国产高清视频一区| 日韩精品一区二区三区在线观看 | 欧美视频在线观看一区| 国产欧美一区视频| 美腿丝袜一区二区三区| 欧美性生活大片视频| 国产精品福利一区二区| 国产精品亚洲人在线观看| 欧美军同video69gay| 亚洲精品欧美激情| 成av人片一区二区| 国产欧美日本一区二区三区| 麻豆成人av在线| 91精品国产色综合久久不卡蜜臀| 亚洲区小说区图片区qvod| www.性欧美| 国产精品情趣视频| 成人免费视频caoporn| 久久影视一区二区| 国产在线不卡一卡二卡三卡四卡| 日韩写真欧美这视频| 免费成人在线影院| 日韩一区二区不卡| 麻豆视频观看网址久久| 8v天堂国产在线一区二区| 日韩一区欧美二区| 日韩一区二区三区四区五区六区 | 国产视频一区二区在线观看| 久久国产精品免费| 久久这里只有精品首页| 国产一区二区在线看| 国产亚洲精久久久久久| 国产久卡久卡久卡久卡视频精品| 久久综合久久99| 成人一级视频在线观看| 国产精品你懂的在线| 91一区二区在线| 亚洲国产cao| 日韩欧美成人一区| 粗大黑人巨茎大战欧美成人| 国产精品动漫网站| 欧洲av一区二区嗯嗯嗯啊| 亚洲成a人片在线不卡一二三区 | 色偷偷一区二区三区| 亚洲综合在线第一页| 4438x成人网最大色成网站| 韩国三级电影一区二区| 中文字幕不卡的av| 欧美三片在线视频观看| 激情综合一区二区三区| 中文字幕在线一区免费| 欧美久久婷婷综合色| 国产精品一卡二卡在线观看| 亚洲视频免费观看| 欧美一级日韩不卡播放免费| 国产99精品国产| 亚洲高清中文字幕| 国产日韩欧美精品在线| 欧美午夜片在线观看| 韩国精品主播一区二区在线观看 | ...xxx性欧美| 91精品国产高清一区二区三区蜜臀| 国产一区二区三区黄视频| 一区二区成人在线视频| 欧美精品一区二区三区在线 | 国产毛片精品一区| 亚洲一区二区av电影| 国产无遮挡一区二区三区毛片日本| 一本色道久久加勒比精品| 另类小说一区二区三区| 亚洲精品久久7777| 国产性天天综合网| 在线电影一区二区三区| av午夜一区麻豆| 国产在线精品一区二区| 日本不卡一区二区| 一区二区三区小说| 国产精品午夜久久| 久久综合色之久久综合| 欧美高清视频一二三区| 色94色欧美sute亚洲线路一久| 韩国成人福利片在线播放| 亚洲国产视频直播| 亚洲日本在线天堂| 欧美国产日产图区| 久久久久久久综合狠狠综合| 欧美一区二区三区四区在线观看| 欧美视频三区在线播放| 91在线小视频| 91原创在线视频| 成人激情小说乱人伦| 国产美女视频91| 狠狠色丁香久久婷婷综合丁香| 蜜臀精品久久久久久蜜臀| 视频一区二区三区入口| 亚洲电影在线播放| 香蕉成人伊视频在线观看| 亚洲在线观看免费视频| 亚洲免费电影在线| 亚洲三级视频在线观看| 国产精品成人网| 亚洲少妇最新在线视频| 亚洲男人的天堂在线aⅴ视频| 综合av第一页| 亚洲一级二级在线| 亚洲国产视频网站| 三级在线观看一区二区| 男人的天堂亚洲一区| 麻豆精品一区二区av白丝在线| 免费欧美日韩国产三级电影| 久久国产免费看| 国产精品一区二区视频| www.性欧美| 欧美日韩中文一区| 日韩欧美激情在线| 国产偷国产偷精品高清尤物| 国产精品人妖ts系列视频| 一区二区三区在线观看网站| 亚洲1区2区3区视频| 麻豆精品久久久| 国产成人精品免费网站| 91视频www| 这里只有精品视频在线观看| 日韩欧美国产综合一区| 国产欧美精品日韩区二区麻豆天美| 国产精品久久久久久久岛一牛影视| 亚洲人一二三区| 日产精品久久久久久久性色| 国产精品一区专区| 在线免费不卡电影| 欧美一级一区二区| 国产精品传媒视频| 免费人成网站在线观看欧美高清| 国产成人日日夜夜| 欧美日韩一区二区不卡| www国产成人| 一区二区久久久久| 激情综合色综合久久综合| 99re热这里只有精品视频| 91精品国产91久久久久久最新毛片| 国产亚洲一区二区三区四区| 一区二区三区国产精华| 国产一区二区精品久久| 欧美亚洲自拍偷拍| 国产免费观看久久| 免费成人美女在线观看| 色哦色哦哦色天天综合| 国产亚洲综合在线| 青草国产精品久久久久久| 91亚洲国产成人精品一区二三| 精品美女在线播放|