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

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

?? usbkeyboardlib.c

?? This the compressed USB driver source code for vxworks5.6. It has device controller driver and other
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* 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*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色av成人天堂桃色av| 国产毛片一区二区| 久草这里只有精品视频| 国产a视频精品免费观看| 91国产成人在线| 欧美www视频| 自拍av一区二区三区| 亚洲成人自拍偷拍| 国产成人午夜片在线观看高清观看| 99热在这里有精品免费| 制服视频三区第一页精品| 久久这里都是精品| 一区二区三区美女| 国产一区二区视频在线播放| 日本道免费精品一区二区三区| 日韩一区二区三区四区| 亚洲同性gay激情无套| 久久精品噜噜噜成人88aⅴ| 91免费观看国产| 亚洲精品一线二线三线| 一区二区日韩av| 国产精品996| 9191久久久久久久久久久| 国产精品美女久久久久久久久久久 | 国产精品色一区二区三区| 图片区小说区国产精品视频| 成人av小说网| 精品动漫一区二区三区在线观看| 亚洲天堂2014| 狠狠色丁香九九婷婷综合五月| 欧美性受极品xxxx喷水| 国产日韩欧美a| 乱中年女人伦av一区二区| 欧美在线啊v一区| 欧美激情在线一区二区三区| 麻豆一区二区三| 欧美色精品天天在线观看视频| 中文字幕国产精品一区二区| 麻豆成人久久精品二区三区红| 欧美在线观看视频一区二区| 中文字幕高清一区| 狠狠久久亚洲欧美| 欧美一级艳片视频免费观看| 国产精品欧美一级免费| 精彩视频一区二区三区| 欧美精品丝袜中出| 亚洲综合在线第一页| 99re视频精品| 国产精品乱人伦| 国产精品一区二区在线观看网站 | 亚洲aaa精品| 日本高清不卡一区| 18欧美亚洲精品| 国产99久久久国产精品潘金网站| 精品国产乱码久久久久久久 | 精品国产一区久久| 午夜精品福利视频网站 | 一区二区视频免费在线观看| 国产成人自拍网| 精品少妇一区二区三区视频免付费| 亚洲成人动漫精品| 色天使色偷偷av一区二区| 18成人在线观看| 91在线国内视频| 国产精品女主播av| 成人小视频在线观看| 国产精品天美传媒沈樵| 成人午夜免费视频| 中文字幕一区三区| 91亚洲精品久久久蜜桃网站 | 91激情五月电影| 亚洲男人的天堂在线aⅴ视频| 91在线视频免费观看| 亚洲色图.com| 91精品1区2区| 亚洲成人资源网| 欧美一级在线免费| 九九视频精品免费| 国产欧美日韩在线观看| 成人蜜臀av电影| 综合精品久久久| 欧美在线观看视频一区二区三区 | 欧美一区二区在线看| 免费成人美女在线观看| 久久久久久久久久久黄色| 国产乱码精品一区二区三区av| 国产午夜精品一区二区三区视频| 韩国中文字幕2020精品| 中文字幕免费观看一区| eeuss鲁片一区二区三区| 亚洲色大成网站www久久九九| 欧洲精品中文字幕| 亚洲18女电影在线观看| 日韩欧美国产一区二区三区| 国产一区二区三区四区五区入口| 久久久精品2019中文字幕之3| 成人性视频网站| 亚洲精品水蜜桃| 欧美精品在线观看播放| 韩国av一区二区| 亚洲天堂久久久久久久| 欧美日韩一二三区| 国产在线播精品第三| 国产精品久久久久aaaa樱花| 欧美在线观看视频在线| 琪琪一区二区三区| 国产女人18水真多18精品一级做| 97aⅴ精品视频一二三区| 亚洲成人免费在线| 国产亚洲自拍一区| 欧美一a一片一级一片| 久久99精品久久久久久| 亚洲人成精品久久久久久| 欧美久久久一区| 成人精品视频.| 日韩成人午夜电影| 亚洲欧洲精品一区二区三区不卡| 337p亚洲精品色噜噜噜| 99在线精品一区二区三区| 全国精品久久少妇| 中文字幕亚洲欧美在线不卡| 欧美一区二区免费视频| 成人免费观看视频| 亚洲午夜羞羞片| 国产欧美一区二区精品忘忧草 | 亚洲无人区一区| 久久久精品国产99久久精品芒果| 色欧美乱欧美15图片| 久久不见久久见免费视频7| 亚洲欧美另类小说| 欧美tickling挠脚心丨vk| 色婷婷综合久久久| 国产九色sp调教91| 日韩在线一区二区三区| 亚洲欧洲日韩女同| 久久综合一区二区| 欧美日韩不卡在线| 99久久久久久| 国产主播一区二区三区| 午夜精品福利在线| 国产精品久久久久久久岛一牛影视| 欧美一级黄色大片| 欧美综合一区二区三区| 懂色av一区二区夜夜嗨| 精品影院一区二区久久久| 亚洲亚洲精品在线观看| 精品国产一区二区三区忘忧草| 91久久精品日日躁夜夜躁欧美| 懂色av一区二区三区免费观看 | 久久久久综合网| 制服丝袜亚洲色图| 欧美视频一二三区| 99re免费视频精品全部| 国产成人av一区二区三区在线| 日韩av一区二区在线影视| 亚洲综合自拍偷拍| 亚洲男人的天堂av| 国产精品久久久久久福利一牛影视 | 一区二区三区产品免费精品久久75| 国产日韩欧美不卡在线| 欧美精品一区二区三区在线| 欧美一区二区视频在线观看2020 | 奇米色777欧美一区二区| 亚洲自拍偷拍图区| 亚洲欧美日韩一区| 欧美激情中文字幕| 国产日韩在线不卡| 久久精品一区蜜桃臀影院| 日韩欧美高清在线| 日韩亚洲欧美高清| 91精品国产手机| 欧美日韩精品一区二区天天拍小说| 99re成人精品视频| 91丝袜国产在线播放| 91麻豆国产香蕉久久精品| 91丨porny丨首页| 91蝌蚪porny九色| 91免费视频网| 91福利区一区二区三区| 在线视频国产一区| 欧美伊人久久久久久久久影院| 色欧美88888久久久久久影院| 色香色香欲天天天影视综合网| 99国内精品久久| 色婷婷久久久久swag精品| 色哟哟一区二区在线观看| 日本伦理一区二区| 欧美系列亚洲系列| 3d成人h动漫网站入口| 日韩精品一区二区三区在线播放| 欧美成人女星排名| 久久综合av免费| 亚洲国产精品精华液2区45| **欧美大码日韩| 一区二区三区电影在线播| 午夜视频久久久久久| 美腿丝袜一区二区三区| 国产一区二区不卡老阿姨| av在线播放成人| 欧美亚洲日本国产|