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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? usbkeyboardlib.c

?? This the compressed USB driver source code for vxworks5.6. It has device controller driver and other
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
LOCAL UINT16 cvtScanCodeToKeyCode    (    pUSB_KBD_SIO_CHAN pSioChan,    UINT16 scanCode,    UINT16 modifiers    )    {    /* Translate keypad keys. */    if( ISKEYPADSCANCODE(scanCode) )	{        if( !!(modifiers & MOD_KEY_SHIFT) ^ !!(pSioChan->numLock) )            return( scanCodes [scanCode] );        if( ISKEYPADEXTSCANCODE(scanCode) )	    {            /* If the table contains 0 (like entry for keypad '5') 	     * return NOTKEY. 	     */            if(extendedKeypadKeyCodes[scanCode-0x59] == 0) 		return(NOTKEY);            return(0xFF00 | extendedKeypadKeyCodes[scanCode-0x59]);	    }        return( scanCodes [scanCode] );	}    /* Translate extended keys. */    if( ISALPHASCANCODE(scanCode) && (modifiers & MOD_KEY_ALT) )        return(0xFF00 | extendedAlphaKeyCodes[scanCode-0x04]);    if( ISOTHEREXTENDEDSCANCODE(scanCode) )        return(0xFF00 | extendedOtherKeyCodes[scanCode-0x49]);    if( ISFUNCTIONSCANCODE(scanCode) && (modifiers & MOD_KEY_ALT) )        return(0xFF00 | extendedAltFunctionKeyCodes[scanCode-0x3A]);    if( ISFUNCTIONSCANCODE(scanCode))        return(0xFF00 | extendedFunctionKeyCodes[scanCode-0x3A]);    /* Translate the scan code into a preliminary ASCII code */    if (scanCode < SCAN_CODE_TBL_LEN)	{        /* Translate alpha keys */        if( ISALPHASCANCODE(scanCode) )	    {            if( modifiers & MOD_KEY_CTRL )                return( scanCodesShift [scanCode] - CTRL_CASE_OFFSET);            if( !!(modifiers & MOD_KEY_SHIFT) ^ !!(pSioChan->capsLock) )                return( scanCodesShift [scanCode] );            else                return( scanCodes [scanCode] );	    }        /* Translate non-alpha keys */        if ((modifiers & (MOD_KEY_SHIFT | MOD_KEY_CTRL)) != 0)        	return( scanCodesShift [scanCode] );        else	        return( scanCodes [scanCode] );	}    return(NOTKEY);    }/***************************************************************************** isKeyPresent - determines if a key is present in an array of keys** This function determines whether the <key> is present in the array <pKeyArray>** RETURNS: TRUE if <key> is present in the <keyArray>, else returns FALSE** ERRNO: none**\NOMANUAL*/LOCAL BOOL isKeyPresent    (    pUINT16 pKeyArray,    UINT16 key    )    {    UINT16 i;    for (i = 0; i < BOOT_RPT_KEYCOUNT; i++)	if (key == pKeyArray [i])	    return TRUE;    return FALSE;    }/***************************************************************************** setLedReport - Issues a SET_REPORT to change a keyboard's LEDs** This function isses a <SET_REPORT> request to change keyboards LED** RETURNS: N/A** ERRNO: none**\NOMANUAL*/LOCAL VOID setLedReport    (    pUSB_KBD_SIO_CHAN pSioChan,    UINT8 ledReport    )    {    UINT8 * pLedReport = OSS_CALLOC (sizeof (UINT8));    if (pLedReport == NULL)	return;    *pLedReport = ledReport;    usbHidReportSet (usbdHandle, 		     pSioChan->nodeId, 		     pSioChan->interface, 		     USB_HID_RPT_TYPE_OUTPUT,      		     0, 		     pLedReport, 		     sizeof (ledReport));    OSS_FREE (pLedReport);    }/***************************************************************************** changeKeyState - changes keyboard state** <key> is CAPLOCK, SCRLOCK, or NUMLOCK.  If <key> is not already * active, then, toggle the current keyboard state for the corresponding item.** RETURNS: N/A** ERRNO: none**\NOMANUAL*/LOCAL VOID changeKbdState    (    pUSB_KBD_SIO_CHAN pSioChan,    UINT16 scanCode, 			/* not used */    pBOOL pKeyState    )    {    UINT8 ledReport;    /* The scancode is newly active, toggle the corresponding keyboard state. */    *pKeyState = !(*pKeyState);    /* Update the keyboard LEDs */    ledReport = (pSioChan->capsLock) ? RPT_LED_CAPS_LOCK : 0;    ledReport |= (pSioChan->scrLock) ? RPT_LED_SCROLL_LOCK : 0;    ledReport |= (pSioChan->numLock) ? RPT_LED_NUM_LOCK : 0;    setLedReport (pSioChan, ledReport);    }/***************************************************************************** interpScanCode - interprets keyboard scan code** Interprets the <scanCode> according to the <modifiers>.  This function* handles any special requirements, such as turning an LED ON or OFF in* response to a keypress.** RETURNS: N/A.** ERRNO: none**\NOMANUAL*/LOCAL void interpScanCode    (    pUSB_KBD_SIO_CHAN pSioChan,    UINT16 scanCode,    UINT16 modifiers    )    {    /* If the key is already active, ignore it. */    if (isKeyPresent (pSioChan->activeScanCodes, scanCode))        return;    /* Determine if special handling is required for the key */    switch (scanCode)	{        case CAPLOCK:   /* key is CAPLOCK */        case CAPLOCK_LOCKING:   /* key is CAPLOCK */	        changeKbdState (pSioChan, scanCode, &pSioChan->capsLock);	        break;        case SCRLOCK:   /* key is SCRLOCK */        case SCRLOCK_LOCKING:   /* key is SCRLOCK */	        changeKbdState (pSioChan, scanCode, &pSioChan->scrLock);	        break;        case NUMLOCK:   /* key is NUMLOCK */        case NUMLOCK_LOCKING:   /* key is NUMLOCK */	        changeKbdState (pSioChan, scanCode, &pSioChan->numLock);	        break;        case NOTKEY:    /* no valid scan code mapping */        default:	/* an ASCII character */	    break;	}    }/***************************************************************************** putInChar - puts a character into channel's input queue** This function puts character <putChar> in the queue** RETURNS: N/A** ERRNO: none**\NOMANUAL*/LOCAL VOID putInChar    (    pUSB_KBD_SIO_CHAN pSioChan,    char putChar    )    {    if (pSioChan->inQueueCount < KBD_Q_DEPTH)	{	pSioChan->inQueue [pSioChan->inQueueIn] = putChar;	if (++pSioChan->inQueueIn == KBD_Q_DEPTH)	    pSioChan->inQueueIn = 0;	pSioChan->inQueueCount++;	}    }/***************************************************************************** nextInChar - returns next character from input queue** Returns the next character from the channel's input queue and updates* the queue pointers.  The caller must ensure that at least one character* is in the queue prior to calling this function.** RETURNS: next char in queue** ERRNO: none**\NOMANUAL*/LOCAL char nextInChar    (    pUSB_KBD_SIO_CHAN pSioChan    )    {    char inChar = pSioChan->inQueue [pSioChan->inQueueOut];    if (++pSioChan->inQueueOut == KBD_Q_DEPTH)	pSioChan->inQueueOut = 0;    pSioChan->inQueueCount--;    return inChar;    }/***************************************************************************** updateTypematic - generates typematic characters for channel if appropriate** This function generates typematic characters for channel if appropriate** RETURNS: N/A** ERRNO: none**\NOMANUAL*/LOCAL VOID updateTypematic    (    pUSB_KBD_SIO_CHAN pSioChan    )    {    UINT32 diffTime;    UINT32 repeatCount;    /* If the given channel is active and a typematic character is     * indicated, then update the typematic state.     */    if (pSioChan->connected && pSioChan->typematicChar != 0)	{        diffTime = OSS_TIME () - pSioChan->typematicTime;        /* If the typematic delay has passed, then it is time to start         * injecting characters into the queue.         */        if (diffTime >= TYPEMATIC_DELAY)	    {	    diffTime -= TYPEMATIC_DELAY;	    repeatCount = diffTime / TYPEMATIC_PERIOD + 1;	    /* Inject characters into the queue.  If the queue is	     * full, putInChar() dumps the character, but we increment	     * the typematicCount anyway.  This keeps the queue from	     * getting too far ahead of the user. 	     */	    while (repeatCount > pSioChan->typematicCount)		{		if( ISEXTENDEDKEYCODE(pSioChan->typematicChar) )		    {		    if(pSioChan->inQueueCount < KBD_Q_DEPTH-1)			{			putInChar (pSioChan, (char) 0);			putInChar (pSioChan, 				   (char) pSioChan->typematicChar & 0xFF);			}		    }		else		    {		    putInChar (pSioChan, pSioChan->typematicChar);		    }		pSioChan->typematicCount++;		}	    /* invoke receive callback */	    while (pSioChan->inQueueCount > 0 &&		    pSioChan->putRxCharCallback != NULL &&		    pSioChan->mode == SIO_MODE_INT)		{                (*pSioChan->putRxCharCallback) (pSioChan->putRxCharArg, 						nextInChar (pSioChan));		}	    }	}    }/***************************************************************************** interpKbdReport - interprets USB keyboard BOOT report** Interprets a keyboard boot report and updates channel state as* appropriate.  Operates in one of two modes: ASCII or RAW.  In ASCII mode* it inserts the ascii character into the character buffer and implements* typematic repeat.  In RAW mode it always inserts the modifier byte* regardless of change, it inserts any keypresses that are currently active* and it inserts a terminating byte of 0xff into the charater buffer.** RETURNS: N/A** ERRNO: none**\NOMANUAL*/LOCAL VOID interpKbdReport    (    pUSB_KBD_SIO_CHAN pSioChan    )    {    pHID_KBD_BOOT_REPORT pReport = pSioChan->pBootReport;    UINT16 keyCode;    UINT16 newTypematicChar;    UINT16 activeCount;    UINT16 i;    /*      * interpret each key position in a keyboard boot report      * (handles CAPS/SCROLL/NUM lock).      */    for (i = 0; i < BOOT_RPT_KEYCOUNT; i++)        interpScanCode (pSioChan, pReport->scanCodes [i], pReport->modifiers);    /* Raw mode has been set, handle accordingly */    if (pSioChan->scanMode == SIO_KYBD_MODE_RAW)	{	/* The first byte is any modifier keys, CTRL, SHIFT, ALT, GUI */	putInChar (pSioChan, pReport->modifiers);	for (i = 0; i < BOOT_RPT_KEYCOUNT; i++)	    if (pReport->scanCodes [i])		    /* Any depressed keys */		    putInChar (pSioChan, pReport->scanCodes [i]);	/* trailing byte */	putInChar (pSioChan, 0xff);    	}    /* then pSioChan->scanMode must = SIO_KYBD_MODE_ASCII */    else 	{	/* insert newly activated keys into the input queue for the keyboard */	newTypematicChar = 0;	activeCount = 0;	for (i = 0; i < BOOT_RPT_KEYCOUNT; i++)	    {	    if (pReport->scanCodes [i])		{		keyCode = cvtScanCodeToKeyCode (pSioChan, 						pReport->scanCodes [i], 						pReport->modifiers);		if (!isKeyPresent (pSioChan->activeScanCodes, 				   pReport->scanCodes [i]))		    {		    /* If there is room in the input queue, enqueue the key,		     * else discard it.		     * For extended keyCodes, make sure there is room for two 		     * chars - the 0 and the ext key. 		     */		    if( ISEXTENDEDKEYCODE(keyCode) )			{			if(pSioChan->inQueueCount < KBD_Q_DEPTH-1)			    {			    putInChar (pSioChan, (char) 0);			    putInChar (pSioChan, (char) keyCode & 0xFF);			    }			}		    else			{			if(keyCode)			    putInChar (pSioChan, (char) keyCode & 0xFF);			}		    }		newTypematicChar = keyCode;		activeCount++;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产婷婷色一区二区三区| 免费久久99精品国产| 国产精品免费视频一区| 国产欧美一区二区精品性| 日韩欧美一区电影| 亚洲精品一区二区三区影院| 欧美第一区第二区| xnxx国产精品| 国产精品免费丝袜| 亚洲少妇最新在线视频| 亚洲香蕉伊在人在线观| 亚洲va天堂va国产va久| 免费观看一级特黄欧美大片| 激情成人综合网| 成人国产精品免费观看视频| 99精品在线免费| 欧美影院一区二区| 欧美精选一区二区| 精品成人免费观看| 国产精品久久久久久久久搜平片 | 欧美午夜理伦三级在线观看| 91成人免费在线视频| 欧美人xxxx| 久久久精品免费观看| 亚洲欧美日韩国产另类专区| 亚洲一区二区三区精品在线| 日本不卡一二三| 国产一区二区三区香蕉| 成人av电影在线| 欧美影院一区二区三区| 欧美成人精品二区三区99精品| 欧美精品一区二区三区很污很色的| 国产欧美日韩不卡免费| 亚洲精品一二三| 日本vs亚洲vs韩国一区三区| 国产成人av影院| 欧美亚洲一区二区在线观看| 日韩一区二区免费视频| 中文字幕第一区二区| 一区二区理论电影在线观看| 久久国产视频网| 99精品国产99久久久久久白柏| 欧美另类高清zo欧美| 国产欧美一区视频| 日韩中文字幕不卡| 成人精品视频一区二区三区尤物| 欧美色综合久久| 欧美韩日一区二区三区| 午夜精品在线看| 成人免费毛片嘿嘿连载视频| 欧美电影一区二区| |精品福利一区二区三区| 日产精品久久久久久久性色| www.欧美色图| 日韩一区二区电影在线| 亚洲女同一区二区| 经典一区二区三区| 欧美日韩国产一级| 国产精品视频免费看| 老司机精品视频在线| 日本精品视频一区二区| 国产嫩草影院久久久久| 偷拍与自拍一区| 一本一道久久a久久精品 | 国产精品免费视频观看| 日韩精品成人一区二区三区| 99国内精品久久| 国产偷国产偷亚洲高清人白洁| 亚洲成人动漫精品| 一本到不卡免费一区二区| 久久一区二区三区国产精品| 日本中文字幕不卡| 在线看不卡av| 亚洲日本欧美天堂| 福利一区福利二区| 精品国产青草久久久久福利| 爽爽淫人综合网网站| 91久久精品日日躁夜夜躁欧美| 国产精品毛片a∨一区二区三区| 韩国毛片一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 亚洲成在人线免费| 欧美丝袜丝交足nylons| 亚洲精品欧美综合四区| av在线这里只有精品| 国产亚洲欧美激情| 黑人巨大精品欧美一区| 日韩欧美亚洲国产另类| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩高清影院| 亚洲成人三级小说| 欧美伦理电影网| 日韩二区三区四区| 欧美一区二区播放| 日韩电影在线一区| 日韩欧美区一区二| 裸体健美xxxx欧美裸体表演| 欧美一级二级在线观看| 日韩av电影一区| 日韩欧美国产精品| 国产揄拍国内精品对白| 久久蜜桃av一区精品变态类天堂| 韩国理伦片一区二区三区在线播放| 精品久久国产字幕高潮| 国内精品国产成人国产三级粉色| 视频一区二区不卡| 在线看国产一区| 亚洲免费观看视频| 色噜噜狠狠成人中文综合| 亚洲视频在线观看一区| 91丨porny丨国产入口| 亚洲人成精品久久久久| 91成人网在线| 婷婷六月综合网| 日韩精品一区二区在线| 国产精品一品视频| 国产精品国产三级国产aⅴ原创| av午夜一区麻豆| 亚洲精品成人悠悠色影视| 欧美视频中文字幕| 婷婷中文字幕一区三区| 久久综合久久综合久久| 粉嫩一区二区三区在线看| 国产精品欧美一级免费| 色婷婷综合久久久久中文| 亚洲bt欧美bt精品777| 精品欧美一区二区在线观看| 国产精品自拍毛片| 椎名由奈av一区二区三区| 欧美美女激情18p| 国产乱对白刺激视频不卡| 中文字幕一区视频| 欧美日韩国产电影| 国产精品一区二区男女羞羞无遮挡| 亚洲欧洲99久久| 亚洲图片另类小说| 91亚洲精华国产精华精华液| 亚洲成人av福利| 精品国产免费人成电影在线观看四季| 国产麻豆视频精品| 亚洲欧美另类综合偷拍| 正在播放亚洲一区| 成人av电影在线播放| 五月天久久比比资源色| 国产欧美在线观看一区| 欧美日韩黄色一区二区| 国产一区二区在线电影| 一区二区三区欧美久久| 精品99999| 日本精品一级二级| 国产乱码精品1区2区3区| 亚洲无线码一区二区三区| 久久先锋影音av鲁色资源| 欧美中文字幕不卡| 床上的激情91.| 秋霞午夜鲁丝一区二区老狼| 日韩美女视频一区二区| 精品久久久久久综合日本欧美 | 欧美三级韩国三级日本一级| 国产乱人伦偷精品视频不卡| 亚洲一区二区在线观看视频| 欧美激情中文字幕一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 欧美v亚洲v综合ⅴ国产v| 成人影视亚洲图片在线| 日韩va欧美va亚洲va久久| 国产精品第一页第二页第三页| 欧美日高清视频| 成+人+亚洲+综合天堂| 麻豆精品在线视频| 亚洲一区二区四区蜜桃| 国产精品国模大尺度视频| 欧美成人猛片aaaaaaa| 欧美视频在线不卡| 99久久久国产精品免费蜜臀| 国产一区 二区| 青娱乐精品视频| 亚洲午夜精品网| 中文字幕一区三区| 国产视频一区二区在线观看| 欧美一区二区三区视频在线| 欧美无人高清视频在线观看| 99re热这里只有精品视频| 国模大尺度一区二区三区| 亚洲一区精品在线| 亚洲欧美日韩国产中文在线| 国产精品午夜在线观看| 久久久久久久综合狠狠综合| 日韩精品一区国产麻豆| 制服丝袜av成人在线看| 欧美日韩在线播放三区| 色哟哟精品一区| 91浏览器在线视频| av网站免费线看精品| 成人免费电影视频| 91在线国产福利| 日韩免费视频一区二区| 欧美日韩国产高清一区二区| 91高清视频在线| 91网站在线观看视频|