亚洲欧美第一页_禁久久精品乱码_粉嫩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):
/* usbKeyboardLib.c - USB keyboard class drive with vxWorks SIO interface *//* Copyright 2000-2002 Wind River Systems, Inc. *//*modification history--------------------01i,15oct04,ami  Apigen Changes01h,18dec03,cfc  Fix compiler warning01g,08may02,wef  Add ioctl to set keyboard mode to return raw scan codes - 		 SPR #70988. 01f,29oct01,wef  Remove automatic buffer creations and repalce with OSS_MALLOC.01e,18sep01,wef  merge from wrs.tor2_0.usb1_1-f for veloce01d,03jul01,jsv	 Re-wrote key tracking logic to fix issue with extra chars                 when shift is released before the desired shifted key.                 Made typematic setting globals so they can be modified.                 Fixed typematic task, not calling callback after queueing                 chars.                 Added support of extended keycodes.                 Fixed shifted key operation when CAPSLOCK is on.01c,22jan01,wef  fix tab stops.01b,20mar00,rcb  Re-write code to fetch maxPacketSize from endpoint descriptor	 	 on machines which don't support non-aligned word access.	 	 Allocate "report" structure separately from SIO_CHAN in order 		 to avoid cache problems on MIPS platform.01a,27jul99,rcb  written.*//*DESCRIPTIONThis module implements the USB keyboard class driver for the vxWorks operatingsystem.  This module presents an interface which is a superset of the vxWorksSIO (serial IO) driver model.  That is, this driver presents the external APIswhich would be expected of a standard "multi-mode serial (SIO) driver" andadds certain extensions which are needed to address adequately the requirementsof the hot-plugging USB environment.USB keyboards are described as part of the USB "human interface device" classspecification and related documents.  This driver concerns itself only with USBdevices which claim to be keyboards as set forth in the USB HID specificationand ignores other types of human interface devices (i.e., mouse).  USBkeyboards can operate according to either a "boot protocol" or to a "reportprotocol".  This driver enables keyboards for operation using the bootprotocol.As the SIO driver model presents a fairly limited, byte-stream oriented view ofa serial device, this driver maps USB keyboard scan codes into appropriateASCII codes.  Scan codes and combinations of scan codes which do not map to theASCII character set are suppressed.Unlike most SIO drivers, the number of channels supported by this driver is notfixed.	Rather, USB keyboards may be added or removed from the system at anytime.  This creates a situation in which the number of channels is dynamic, andclients of usbKeyboardLib.c need to be made aware of the appearance and disappearance of channels.  Therefore, this driver adds an additional set offunctions which allows clients to register for notification upon the insertionand removal of USB keyboards, and hence the creation and deletion of channels.This module itself is a client of the Universal Serial Bus Driver (USBD).  Allinteraction with the USB buses and devices is handled through the USBD.INITIALIZATIONAs with standard SIO drivers, this driver must be initialized by callingusbKeyboardDevInit().  usbKeyboardDevInit() in turn initializes its connection to the USBD and other internal resources needed for operation.  Unlike some SIO drivers, there are no usbKeyboardLib.c data structures which need to be initialized prior to calling usbKeyboardDevInit().Prior to calling usbKeyboardDevInit(), the caller must ensure that the USBDhas been properly initialized by calling - at a minimum - usbdInitialize().It is also the caller's responsibility to ensure that at least one USB HCD(USB Host Controller Driver) is attached to the USBD - using the USBD functionusbdHcdAttach() - before keyboard operation can begin.	However, it is not necessary for usbdHcdAttach() to be alled prior to initializating usbKeyboardLib.c.usbKeyboardLib.c uses the USBD dynamic attach services and is capable of recognizing USB keboard attachment and removal on the fly.  Therefore, it is possible for USB HCDs to be attached to or detached from the USBD at run time- as may be required, for example, in systems supporting hot swapping ofhardware.usbKeyboardLib.c does not export entry points for transmit, receive, and errorinterrupt entry points like traditional SIO drivers.  All "interrupt" drivenbehavior is managed by the underlying USBD and USB HCD(s), so there is noneed for a caller (or BSP) to connect interrupts on behalf of usbKeyboardLib.c.For the same reason, there is no post-interrupt-connect initialization codeand usbKeboardLib.c therefore also omits the "devInit2" entry point.OTHER FUNCTIONSusbKeyboardLib.c also supports the SIO ioctl interface.  However, attempts toset parameters like baud rates and start/stop bits have no meaning in the USBenvironment and will be treated as no-ops.  DATA FLOWFor each USB keyboard connected to the system, usbKeyboardLib.c sets up aUSB pipe to monitor input from the keyboard.  Input, in the form of scan codes,is translated to ASCII codes and placed in an input queue.  If SIO callbackshave been installed and usbKeyboardLib.c has been placed in the SIO "interrupt" mode of operation, then usbKeyboardLib.c will invoke the "character received"callback for each character in the queue.  When usbKeyboardLib.c has been placedin the "polled" mode of operation, callbacks will not be invoked and the caller will be responsible for fetching keyboard input using the driver'spollInput() function.usbKeyboardLib.c does not support output to the keyboard.  Therefore, calls tothe txStartup() and pollOutput() functions will fail.  The only "output" supported is the control of the keyboard LEDs, and this is handled internallyby usbKeyboardLib.c.The caller needs to be aware that usbKeyboardLib.c is not capable of operatingin a true "polled mode" as the underlying USBD and USB HCD always operate inan interrupt mode.  TYPEMATIC REPEATUSB keyboards do not implement typematic repeat, and it is the responsibilityof the host software to implement this feature.  For this purpose, this modulecreates a task called typematicThread() which monitors all open channels andinjects repeated characters into input queues as appropriate.INCLUDE FILES: sioLib.h, usbKeyboardLib.h*//* includes */#include "vxWorks.h"#include "string.h"#include "sioLib.h"#include "errno.h"#include "ctype.h"#include "usb/usbPlatform.h"#include "usb/ossLib.h" 	/* operations system srvcs */#include "usb/usb.h"		/* general USB definitions */#include "usb/usbListLib.h"	/* linked list functions */#include "usb/usbdLib.h"	/* USBD interface */#include "usb/usbLib.h" 	/* USB utility functions */#include "usb/usbHid.h" 	/* USB HID definitions */#include "drv/usb/usbKeyboardLib.h" /* our API *//* defines */#define KBD_CLIENT_NAME "usbKeyboardLib"    /* our USBD client name */#define KBD_Q_DEPTH 8	    /* Max characters in keyboard queue */#define ISEXTENDEDKEYCODE(keyCode)          (keyCode & 0xFF00)#define ISALPHASCANCODE(scanCode)           ( (scanCode >= 0x04) && (scanCode <= 0x1D) )#define ISNUMERICSCANCODE(scanCode)         ( (scanCode >= 0x1E) && (scanCode <= 0x27) )#define ISKEYPADSCANCODE(scanCode)          ( (scanCode >= 0x53) && (scanCode <= 0x63) )#define ISKEYPADEXTSCANCODE(scanCode)       ( (scanCode >= 0x59) && (scanCode <= 0x63) )#define ISFUNCTIONSCANCODE(scanCode)        ( (scanCode >= 0x3A) && (scanCode <= 0x45) )#define ISOTHEREXTENDEDSCANCODE(scanCode)   ( (scanCode >= 0x49) && (scanCode <= 0x52) )#define ISEXTENDEDSCANCODE(scanCode, modifiers)                                 \                ( (modifiers & MOD_KEY_ALT) && ISALPHASCANCODE(scanCode) )      \                || ISFUNCTIONSCANCODE(scanCode)                                 \                || ISOTHEREXTENDEDSCANCODE(scanCode)/* If your hardware platform has problems sharing cache lines, then define * CACHE_LINE_SIZE below so that critical buffers can be allocated within * their own cache lines. */#define CACHE_LINE_SIZE     16/* typematic definitions */#define TYPEMATIC_NAME	    "tUsbKbd"/* typedefs *//* * ATTACH_REQUEST */typedef struct attach_request    {    LINK reqLink;	    /* linked list of requests */    USB_KBD_ATTACH_CALLBACK callback;	/* client callback routine */    pVOID callbackArg;		/* client callback argument */    } ATTACH_REQUEST, *pATTACH_REQUEST;/* USB_KBD_SIO_CHAN is the internal data structure we use to track each USB * keyboard. */typedef struct usb_kbd_sio_chan    {    SIO_CHAN sioChan;		/* must be first field */    LINK sioLink;	        /* linked list of keyboard structs */    UINT16 lockCount;		/* Count of times structure locked */    USBD_NODE_ID nodeId;	/* keyboard node Id */    UINT16 configuration;	/* configuration/interface reported as */    UINT16 interface;		/* a keyboard by this device */    BOOL connected;	        /* TRUE if keyboard currently connected */    USBD_PIPE_HANDLE pipeHandle;/* USBD pipe handle for interrupt pipe */    USB_IRP irp;	        /* IRP to monitor interrupt pipe */    BOOL irpInUse;	        /* TRUE while IRP is outstanding */    pHID_KBD_BOOT_REPORT pBootReport;/* Keyboard boot report fetched thru pipe */    char inQueue [KBD_Q_DEPTH]; /* Circular queue for keyboard input */    UINT16 inQueueCount;	/* count of characters in input queue */    UINT16 inQueueIn;		/* next location in queue */    UINT16 inQueueOut;		/* next character to fetch */    UINT32 typematicTime;	/* time current typematic period started */    UINT32 typematicCount;	/* count of keys injected */    UINT16 typematicChar; 	/* current character to repeat */    int mode;		        /* SIO_MODE_INT or SIO_MODE_POLL */    STATUS (*getTxCharCallback) (); /* tx callback */    void *getTxCharArg; 	/* tx callback argument */    STATUS (*putRxCharCallback) (); /* rx callback */    void *putRxCharArg; 	/* rx callback argument */    /* Following variables used to emulate certain ioctl functions. */    int baudRate;	        /* has no meaning in USB */    /* Following variables maintain keyboard state */    BOOL capsLock;	        /* TRUE if CAPLOCK in effect */    BOOL scrLock;	        /* TRUE if SCRLOCK in effect */    BOOL numLock;	        /* TRUE if NUMLOCK in effect */    UINT16 activeScanCodes [BOOT_RPT_KEYCOUNT];    int scanMode;		/* raw or ascii */    } USB_KBD_SIO_CHAN, *pUSB_KBD_SIO_CHAN;/* forward static declarations */LOCAL int usbKeyboardTxStartup (SIO_CHAN * pSioChan);LOCAL int usbKeyboardCallbackInstall (SIO_CHAN *pSioChan, int callbackType,    STATUS (*callback)(void *, ...), void *callbackArg);LOCAL int usbKeyboardPollOutput (SIO_CHAN *pSioChan, char   outChar);LOCAL int usbKeyboardPollInput (SIO_CHAN *pSioChan, char *thisChar);LOCAL int usbKeyboardIoctl (SIO_CHAN *pSioChan, int request, void *arg);LOCAL VOID usbKeyboardIrpCallback (pVOID p);/* locals */LOCAL UINT16 initCount = 0;	/* Count of init nesting */LOCAL MUTEX_HANDLE kbdMutex;    /* mutex used to protect internal structs */LOCAL LIST_HEAD sioList;	/* linked list of USB_KBD_SIO_CHAN */LOCAL LIST_HEAD reqList;	/* Attach callback request list */LOCAL USBD_CLIENT_HANDLE usbdHandle; /* our USBD client handle */LOCAL THREAD_HANDLE typematicHandle;/* task used to generate typematic repeat */LOCAL BOOL killTypematic;	/* TRUE when typematic thread should exit */LOCAL BOOL typematicExit;	/* TRUE when typematic thread exits *//* Channel function table. */LOCAL SIO_DRV_FUNCS usbKeyboardSioDrvFuncs =    {    usbKeyboardIoctl,    usbKeyboardTxStartup,    usbKeyboardCallbackInstall,    usbKeyboardPollInput,    usbKeyboardPollOutput    };/* ASCI definitions */#define SHIFT_CASE_OFFSET   ('a' - 'A')#define CTRL_CASE_OFFSET    64		/* diff between 'A' and CTRL-A */#define BS	    8		/* backspace, CTRL-H */#define DEL	    BS		/* delete key */#define TAB	    9		/* tab, CTRL-I */#define CR	    13		/* carriage return, CTRL-M */#define ESC	    27		/* escape *//* Scan code lookup table and related constants. */#define ASCII_MIN	        0x0000#define ASCII_MAX	        0x007f#define CAPLOCK 	        0x39#define CAPLOCK_LOCKING     	0x82#define NUMLOCK 	        0x53#define NUMLOCK_LOCKING 	0x83#define SCRLOCK 	        0x47#define SCRLOCK_LOCKING 	0x84#define NOTKEY		        0#define isAscii(a)  ((a) <= ASCII_MAX)/* NOTE: The following scan code tables are populated only so far as is useful * in order to map the ASCI character set.  Also, the following two tables must * remain exactly the same length. */LOCAL UINT16 scanCodes [] =    {    NOTKEY, NOTKEY, NOTKEY, NOTKEY, 'a',    'b',    'c',    'd',    /* 0 - 7 */    'e',    'f',    'g',    'h',    'i',    'j',    'k',    'l',    /* 8 - 15 */    'm',    'n',    'o',    'p',    'q',    'r',    's',    't',    /* 16 - 23 */    'u',    'v',    'w',    'x',    'y',    'z',    '1',    '2',    /* 24 - 31 */    '3',    '4',    '5',    '6',    '7',    '8',    '9',    '0',    /* 32 - 39 */    CR,     ESC,    DEL,    TAB,    ' ',    '-',    '=',    '[',    /* 40 - 47 */    ']',    '\\',   '#',    ';',    '\'',   '`',    ',',    '.',    /* 48 - 55 */    '/',    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 56 - 63 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 64 - 71 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, DEL,    NOTKEY, NOTKEY, NOTKEY, /* 72 - 79 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, '/',    '*',    '-',    '+',    /* 80 - 87 */    CR,     '1',    '2',    '3',    '4',    '5',    '6',    '7',    /* 88 - 95 */    '8',    '9',    '0',    '.',    '|',    NOTKEY, NOTKEY, '=',    /* 96 - 103 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 104 - 111 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 112 - 119 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 120 - 127 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, ',',    '=', 	NOTKEY, /* 128 - 135 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 136 - 143 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 144 - 151 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 152 - 159 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 160 - 167 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 168 - 175 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 176 - 183 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 184 - 191 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 192 - 199 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 200 - 207 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 208 - 215 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 216 - 223 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 224 - 231 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 232 - 239 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 240 - 247 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY  /* 248 - 255 */    };LOCAL UINT16 scanCodesShift [] =    {    NOTKEY, NOTKEY, NOTKEY, NOTKEY, 'A',    'B',    'C',    'D',    /* 0 - 7 */    'E',    'F',    'G',    'H',    'I',    'J',    'K',    'L',    /* 8 - 15 */    'M',    'N',    'O',    'P',    'Q',    'R',    'S',    'T',    /* 16 - 23 */    'U',    'V',    'W',    'X',    'Y',    'Z',    '!',    '@',    /* 24 - 31 */    '#',    '$',    '%',    '^',    '&',    '*',    '(',    ')',    /* 32 - 39 */    CR,     ESC,    DEL,    TAB,    ' ',    '_',    '+',    '{',    /* 40 - 47 */    '}',    '|',    '~',    ':',    '"',    '~',    '<',    '>',    /* 48 - 55 */    '?',    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 56 - 63 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 64 - 71 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, DEL,    NOTKEY, NOTKEY, NOTKEY, /* 72 - 79 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, '/',    '*',    '-',    '+',    /* 80 - 87 */    CR,     '1',    '2',    '3',    '4',    '5',    '6',    '7',    /* 88 - 95 */    '8',    '9',    '0',    '.',    '|',    NOTKEY, NOTKEY, '=',    /* 96 - 103 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 104 - 111 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 112 - 119 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 120 - 127 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, ',',    '=', 	NOTKEY, /* 128 - 135 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 136 - 143 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 144 - 151 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 152 - 159 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 160 - 167 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 168 - 175 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 176 - 183 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 184 - 191 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 192 - 199 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 200 - 207 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 208 - 215 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 216 - 223 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 224 - 231 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 232 - 239 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, /* 240 - 247 */    NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY, NOTKEY  /* 248 - 255 */    };#define SCAN_CODE_TBL_LEN   (sizeof (scanCodes) / sizeof (UINT16))/*  IBM Extended keycodes.    Char.     Hex Pair       Char.    Hex Pair    ALT-A     (0x00,0x1e)    ALT-B    (0x00,0x30)    ALT-C     (0x00,0x2e)    ALT-D    (0x00,0x20)    ALT-E     (0x00,0x12)    ALT-F    (0x00,0x21)    ALT-G     (0x00,0x22)    ALT-H    (0x00,0x23)    ALT-I     (0x00,0x17)    ALT-J    (0x00,0x24)    ALT-K     (0x00,0x25)    ALT-L    (0x00,0x26)    ALT-M     (0x00,0x32)    ALT-N    (0x00,0x31)    ALT-O     (0x00,0x18)    ALT-P    (0x00,0x19)    ALT-Q     (0x00,0x10)    ALT-R    (0x00,0x13)    ALT-S     (0x00,0x1a)    ALT-T    (0x00,0x14)    ALT-U     (0x00,0x16)    ALT-V    (0x00,0x2f)    ALT-W     (0x00,0x11)    ALT-X    (0x00,0x2d)    ALT-Y     (0x00,0x15)    ALT-Z    (0x00,0x2c)    PgUp      (0x00,0x49)    PgDn     (0x00,0x51)    Home      (0x00,0x47)    End      (0x00,0x4f)    UpArrw    (0x00,0x48)    DnArrw   (0x00,0x50)    LftArrw   (0x00,0x4b)    RtArrw   (0x00,0x4d)    F1        (0x00,0x3b)    F2       (0x00,0x3c)    F3        (0x00,0x3d)    F4       (0x00,0x3e)    F5        (0x00,0x3f)    F6       (0x00,0x40)    F7        (0x00,0x41)    F8       (0x00,0x42)    F9        (0x00,0x43)    F10      (0x00,0x44)    F11       (0x00,0x85)    F12      (0x00,0x86)    ALT-F1    (0x00,0x68)    ALT-F2   (0x00,0x69)    ALT-F3    (0x00,0x6a)    ALT-F4   (0x00,0x6b)    ALT-F5    (0x00,0x6c)    ALT-F6   (0x00,0x6d)    ALT-F7    (0x00,0x6e)    ALT-F8   (0x00,0x6f)    ALT-F9    (0x00,0x70)    ALT-F10  (0x00,0x71)    ALT-F11   (0x00,0x8b)    ALT-F12  (0x00,0x8c)*/LOCAL UINT16 extendedAlphaKeyCodes [] =    {        0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, 0x23,        0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, 0x19,        0x10, 0x13, 0x1a, 0x14, 0x16, 0x2f, 0x11, 0x2d,        0x15, 0x2c    };LOCAL UINT16 extendedOtherKeyCodes [] =    {        0x52, 0x47, 0x49, 0x53, 0x4f, 0x51, 0x4d ,0x4b, 0x50,        0x48,    };LOCAL UINT16 extendedFunctionKeyCodes [] =    {        0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42,        0x43, 0x44, 0x85, 0x86    };LOCAL UINT16 extendedAltFunctionKeyCodes [] =    {        0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,        0x70, 0x71, 0x8b, 0x8c    };LOCAL UINT16 extendedKeypadKeyCodes [] =    {        0x4F, 0x50, 0x51, 0x4B, 0x00, 0x4D, 0x47, 0x48,        0x49, 0x52, 0x53    };/* globals */unsigned int TYPEMATIC_DELAY  = 500;    /* 500 msec delay */unsigned int TYPEMATIC_PERIOD = 66;     /* 66 msec = approx 15 char/sec *//***************************************************************************** cvtScanCodeToKeyCode - converts scan code to key code if possible** <scanCode> is the scan code to be interpreted and <modifiers> is the * current state of the keyboard modifies (e.g., SHIFT).  ** RETURNS: ASCII code if mapping exists, CAPLOCK, SCRLOCK, NUMLOCK, or*          NOTKEY if no mapping.** ERRNO: None**\NOMANUAL*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区男人的天堂| 国产盗摄女厕一区二区三区| 91精品国产综合久久久久| 久久福利资源站| 国产精品视频免费看| 欧美伊人久久大香线蕉综合69| 婷婷中文字幕综合| 日本一区二区综合亚洲| 欧美色综合天天久久综合精品| 91玉足脚交白嫩脚丫在线播放| 日韩和欧美的一区| 日韩一区在线看| 日韩欧美一二区| 色妹子一区二区| 亚洲成av人片www| 亚洲欧洲99久久| 亚洲激情男女视频| 国产欧美日韩亚州综合| 国产精品色呦呦| 18成人在线观看| 亚洲成av人在线观看| 日韩成人午夜精品| 亚洲国产欧美在线| 亚洲激情男女视频| 天天影视涩香欲综合网| 久久不见久久见免费视频7 | 一区二区三区四区高清精品免费观看 | 久久99精品久久只有精品| 一区二区三区免费看视频| 亚洲一区二区三区四区的 | 成人免费视频网站在线观看| 美女免费视频一区| 日本视频一区二区| 国产一区二区三区在线观看精品 | 日本高清不卡aⅴ免费网站| 欧美日韩国产首页在线观看| 欧美影院一区二区三区| 日韩视频在线观看一区二区| 欧美一区日韩一区| 国产色产综合产在线视频| 久久综合九色综合97婷婷 | 日韩理论片网站| 自拍偷拍欧美激情| 水蜜桃久久夜色精品一区的特点 | 粗大黑人巨茎大战欧美成人| 在线观看亚洲精品视频| 一本大道久久a久久综合| 3atv在线一区二区三区| 国产欧美精品一区二区色综合| 一区二区三区国产豹纹内裤在线| 美女一区二区三区| 91免费观看视频| 欧美成人女星排名| 久久久久国产一区二区三区四区| 国产日韩三级在线| 亚洲超丰满肉感bbw| 国产成人精品亚洲日本在线桃色| 欧洲另类一二三四区| 久久精品人人做人人爽97| 亚洲一二三区在线观看| 粉嫩av一区二区三区在线播放| heyzo一本久久综合| 色综合天天性综合| 亚洲色图.com| 毛片av一区二区| 91福利在线免费观看| 久久精品人人爽人人爽| 日韩电影在线看| 色欧美88888久久久久久影院| 精品成人一区二区| 欧美激情一区二区三区在线| 亚洲欧美在线观看| 国精产品一区一区三区mba视频| 懂色av一区二区三区蜜臀| 69久久夜色精品国产69蝌蚪网| 中文字幕一区二区三区四区| 国内不卡的二区三区中文字幕| 欧美日韩精品系列| 一区二区三区在线免费| 高清国产一区二区| 久久久久久久久97黄色工厂| 免费国产亚洲视频| www.综合网.com| 久久夜色精品一区| 久久99深爱久久99精品| 欧美精品xxxxbbbb| 亚洲国产精品黑人久久久| 久久99精品国产| 日韩西西人体444www| 婷婷久久综合九色综合绿巨人| 一本一本大道香蕉久在线精品| 国产精品情趣视频| 国产成人精品三级| 久久精品人人做人人爽人人| 激情伊人五月天久久综合| 日韩精品一区二区三区中文精品| 午夜久久久久久久久久一区二区| 91国产精品成人| 亚洲乱码中文字幕| 色哟哟亚洲精品| 亚洲手机成人高清视频| 成人av电影免费在线播放| 欧美一区二区三区免费视频| 天天操天天干天天综合网| 精品视频色一区| 国产精品久久久久一区二区三区| 秋霞午夜鲁丝一区二区老狼| 91精品久久久久久久91蜜桃 | 成人妖精视频yjsp地址| 中文字幕免费观看一区| 高清国产一区二区三区| 国产精品久久久久毛片软件| av中文字幕不卡| 亚洲欧美电影一区二区| 国产精品一区二区三区四区| 欧美精品在线一区二区| 午夜精品久久一牛影视| 91精品国产手机| 精品系列免费在线观看| 久久综合狠狠综合久久综合88| 国产精品18久久久久久久久久久久| 久久亚区不卡日本| 国产精品77777| 专区另类欧美日韩| 欧美三电影在线| 麻豆精品视频在线观看| 久久亚洲一区二区三区明星换脸| 国产精品99久| 亚洲欧美经典视频| 3d成人h动漫网站入口| 国内精品国产成人| 国产精品美女久久久久久2018| 色综合久久久网| 日韩成人一区二区| 欧美激情一区二区三区| 色婷婷狠狠综合| 免费成人结看片| 国产精品久久久久aaaa樱花| 欧美午夜一区二区| 极品少妇xxxx精品少妇偷拍| 国产精品婷婷午夜在线观看| 欧美最新大片在线看| 久久99国产精品免费网站| 国产精品免费av| 欧美日韩精品专区| 国产成人在线观看| 亚洲最大成人综合| 精品国产一区a| 91九色最新地址| 韩国三级在线一区| 亚洲自拍另类综合| 国产亚洲精品资源在线26u| 色噜噜久久综合| 国产一区在线观看视频| 一区二区日韩av| 国产日韩欧美精品电影三级在线| 日本精品一级二级| 国产原创一区二区三区| 亚洲综合一二区| 国产亚洲一区二区三区四区| 欧美三级电影在线看| 国产不卡视频在线观看| 五月激情综合网| 一色屋精品亚洲香蕉网站| 日韩美女天天操| 欧美日韩另类国产亚洲欧美一级| 国产激情一区二区三区四区 | 日本欧美久久久久免费播放网| 久久女同精品一区二区| 欧美色视频在线| 成人免费视频播放| 蓝色福利精品导航| 亚洲一卡二卡三卡四卡 | 国产一区二区在线看| 亚洲444eee在线观看| 国产精品人成在线观看免费| 精品乱人伦一区二区三区| 欧美另类z0zxhd电影| 99re热这里只有精品视频| 亚洲一区二区三区影院| 国产精品视频免费| 久久综合久久综合久久| 欧美一区二区三区四区久久| 色偷偷成人一区二区三区91 | 欧美性videosxxxxx| 91麻豆swag| 亚洲乱码中文字幕综合| 日本一区二区三区久久久久久久久不| 69堂精品视频| 欧美欧美欧美欧美| 色妹子一区二区| 91最新地址在线播放| 成人一道本在线| 国产一区二区福利| 久久成人免费电影| 蜜臀久久99精品久久久久久9| 亚洲激情自拍视频| 亚洲精品视频在线看| 欧美日韩你懂得| 欧美午夜精品一区二区蜜桃|