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

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

?? usb-hid.c

?? xen 3.2.2 源碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * QEMU USB HID devices *  * Copyright (c) 2005 Fabrice Bellard *  * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */#include "vl.h"/* HID interface requests */#define GET_REPORT   0xa101#define GET_IDLE     0xa102#define GET_PROTOCOL 0xa103#define SET_IDLE     0x210a#define SET_PROTOCOL 0x210b#define USB_MOUSE  1#define USB_TABLET 2typedef struct USBMouseState {    USBDevice dev;    int dx, dy, dz, buttons_state;    int x, y;    int kind;    int mouse_grabbed;    int status_changed;    QEMUPutMouseEntry *eh_entry;} USBMouseState;/* mostly the same values as the Bochs USB Mouse device */static const uint8_t qemu_mouse_dev_descriptor[] = {	0x12,       /*  u8 bLength; */	0x01,       /*  u8 bDescriptorType; Device */	0x10, 0x00, /*  u16 bcdUSB; v1.0 */	0x00,	    /*  u8  bDeviceClass; */	0x00,	    /*  u8  bDeviceSubClass; */	0x00,       /*  u8  bDeviceProtocol; [ low/full speeds only ] */	0x08,       /*  u8  bMaxPacketSize0; 8 Bytes */	0x27, 0x06, /*  u16 idVendor; */ 	0x01, 0x00, /*  u16 idProduct; */	0x00, 0x00, /*  u16 bcdDevice */	0x03,       /*  u8  iManufacturer; */	0x02,       /*  u8  iProduct; */	0x01,       /*  u8  iSerialNumber; */	0x01        /*  u8  bNumConfigurations; */};static const uint8_t qemu_mouse_config_descriptor[] = {	/* one configuration */	0x09,       /*  u8  bLength; */	0x02,       /*  u8  bDescriptorType; Configuration */	0x22, 0x00, /*  u16 wTotalLength; */	0x01,       /*  u8  bNumInterfaces; (1) */	0x01,       /*  u8  bConfigurationValue; */	0x04,       /*  u8  iConfiguration; */	0xa0,       /*  u8  bmAttributes; 				 Bit 7: must be set,				     6: Self-powered,				     5: Remote wakeup,				     4..0: resvd */	50,         /*  u8  MaxPower; */      	/* USB 1.1:	 * USB 2.0, single TT organization (mandatory):	 *	one interface, protocol 0	 *	 * USB 2.0, multiple TT organization (optional):	 *	two interfaces, protocols 1 (like single TT)	 *	and 2 (multiple TT mode) ... config is	 *	sometimes settable	 *	NOT IMPLEMENTED	 */	/* one interface */	0x09,       /*  u8  if_bLength; */	0x04,       /*  u8  if_bDescriptorType; Interface */	0x00,       /*  u8  if_bInterfaceNumber; */	0x00,       /*  u8  if_bAlternateSetting; */	0x01,       /*  u8  if_bNumEndpoints; */	0x03,       /*  u8  if_bInterfaceClass; */	0x01,       /*  u8  if_bInterfaceSubClass; */	0x02,       /*  u8  if_bInterfaceProtocol; [usb1.1 or single tt] */	0x05,       /*  u8  if_iInterface; */             /* HID descriptor */        0x09,        /*  u8  bLength; */        0x21,        /*  u8 bDescriptorType; */        0x01, 0x00,  /*  u16 HID_class */        0x00,        /*  u8 country_code */        0x01,        /*  u8 num_descriptors */        0x22,        /*  u8 type; Report */        50, 0,       /*  u16 len */	/* one endpoint (status change endpoint) */	0x07,       /*  u8  ep_bLength; */	0x05,       /*  u8  ep_bDescriptorType; Endpoint */	0x81,       /*  u8  ep_bEndpointAddress; IN Endpoint 1 */ 	0x03,       /*  u8  ep_bmAttributes; Interrupt */ 	0x03, 0x00, /*  u16 ep_wMaxPacketSize; */	0x0a,       /*  u8  ep_bInterval; (255ms -- usb 2.0 spec) */};static const uint8_t qemu_tablet_config_descriptor[] = {	/* one configuration */	0x09,       /*  u8  bLength; */	0x02,       /*  u8  bDescriptorType; Configuration */	0x22, 0x00, /*  u16 wTotalLength; */	0x01,       /*  u8  bNumInterfaces; (1) */	0x01,       /*  u8  bConfigurationValue; */	0x04,       /*  u8  iConfiguration; */	0xa0,       /*  u8  bmAttributes; 				 Bit 7: must be set,				     6: Self-powered,				     5: Remote wakeup,				     4..0: resvd */	50,         /*  u8  MaxPower; */      	/* USB 1.1:	 * USB 2.0, single TT organization (mandatory):	 *	one interface, protocol 0	 *	 * USB 2.0, multiple TT organization (optional):	 *	two interfaces, protocols 1 (like single TT)	 *	and 2 (multiple TT mode) ... config is	 *	sometimes settable	 *	NOT IMPLEMENTED	 */	/* one interface */	0x09,       /*  u8  if_bLength; */	0x04,       /*  u8  if_bDescriptorType; Interface */	0x00,       /*  u8  if_bInterfaceNumber; */	0x00,       /*  u8  if_bAlternateSetting; */	0x01,       /*  u8  if_bNumEndpoints; */	0x03,       /*  u8  if_bInterfaceClass; */	0x01,       /*  u8  if_bInterfaceSubClass; */	0x02,       /*  u8  if_bInterfaceProtocol; [usb1.1 or single tt] */	0x05,       /*  u8  if_iInterface; */        /* HID descriptor */        0x09,        /*  u8  bLength; */        0x21,        /*  u8 bDescriptorType; */        0x01, 0x00,  /*  u16 HID_class */        0x00,        /*  u8 country_code */        0x01,        /*  u8 num_descriptors */        0x22,        /*  u8 type; Report */        74, 0,       /*  u16 len */	/* one endpoint (status change endpoint) */	0x07,       /*  u8  ep_bLength; */	0x05,       /*  u8  ep_bDescriptorType; Endpoint */	0x81,       /*  u8  ep_bEndpointAddress; IN Endpoint 1 */ 	0x03,       /*  u8  ep_bmAttributes; Interrupt */ 	0x08, 0x00, /*  u16 ep_wMaxPacketSize; */	0x03,       /*  u8  ep_bInterval; (255ms -- usb 2.0 spec) */};static const uint8_t qemu_mouse_hid_report_descriptor[] = {    0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01,     0xA1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03,    0x15, 0x00, 0x25, 0x01, 0x95, 0x03, 0x75, 0x01,     0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01,    0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 0x15, 0x81,     0x25, 0x7F, 0x75, 0x08, 0x95, 0x02, 0x81, 0x06,    0xC0, 0xC0,};static const uint8_t qemu_tablet_hid_report_descriptor[] = {        0x05, 0x01, /* Usage Page Generic Desktop */        0x09, 0x01, /* Usage Mouse */        0xA1, 0x01, /* Collection Application */        0x09, 0x01, /* Usage Pointer */        0xA1, 0x00, /* Collection Physical */        0x05, 0x09, /* Usage Page Button */        0x19, 0x01, /* Usage Minimum Button 1 */        0x29, 0x03, /* Usage Maximum Button 3 */        0x15, 0x00, /* Logical Minimum 0 */        0x25, 0x01, /* Logical Maximum 1 */        0x95, 0x03, /* Report Count 3 */        0x75, 0x01, /* Report Size 1 */        0x81, 0x02, /* Input (Data, Var, Abs) */        0x95, 0x01, /* Report Count 1 */        0x75, 0x05, /* Report Size 5 */        0x81, 0x01, /* Input (Cnst, Var, Abs) */        0x05, 0x01, /* Usage Page Generic Desktop */        0x09, 0x30, /* Usage X */        0x09, 0x31, /* Usage Y */        0x15, 0x00, /* Logical Minimum 0 */        0x26, 0xFF, 0x7F, /* Logical Maximum 0x7fff */        0x35, 0x00, /* Physical Minimum 0 */        0x46, 0xFE, 0x7F, /* Physical Maximum 0x7fff */        0x75, 0x10, /* Report Size 16 */        0x95, 0x02, /* Report Count 2 */        0x81, 0x02, /* Input (Data, Var, Abs) */        0x05, 0x01, /* Usage Page Generic Desktop */        0x09, 0x38, /* Usage Wheel */        0x15, 0x81, /* Logical Minimum -127 */        0x25, 0x7F, /* Logical Maximum 127 */        0x35, 0x00, /* Physical Minimum 0 (same as logical) */        0x45, 0x00, /* Physical Maximum 0 (same as logical) */        0x75, 0x08, /* Report Size 8 */        0x95, 0x01, /* Report Count 1 */        0x81, 0x02, /* Input (Data, Var, Rel) */        0xC0,       /* End Collection */        0xC0,       /* End Collection */};static int currentbutton = 0;typedef struct _mouseclick {    int button_state;    struct _mouseclick *next;} mouseclick; static mouseclick mousequeue[20];static mouseclick *head = mousequeue;static mouseclick *tail = mousequeue;static void usb_mouse_event(void *opaque,                            int dx1, int dy1, int dz1, int buttons_state){    USBMouseState *s = opaque;    if (s->status_changed == 1){        //A mouse event is lost        if (buttons_state != currentbutton && tail->next != head) {            //A left click event is lost: let's add it to the queue            //counter++;            tail->button_state = buttons_state;            tail = tail->next;        }    }    else {        s->buttons_state = buttons_state;    }    s->dx += dx1;    s->dy += dy1;    s->dz += dz1;    currentbutton = buttons_state;    s->status_changed = 1;}static void usb_tablet_event(void *opaque,			     int x, int y, int dz, int buttons_state){    USBMouseState *s = opaque;        if (s->status_changed == 1){        //A mouse event is lost        if (buttons_state != currentbutton && tail->next != head) {            //A left click event is lost: let's add it to the queue            //counter++;            tail->button_state = buttons_state;            tail = tail->next;        }    }    else {        s->buttons_state = buttons_state;    }    s->x = x;    s->y = y;    s->dz += dz;    currentbutton = buttons_state;    s->status_changed = 1;}static inline int int_clamp(int val, int vmin, int vmax){    if (val < vmin)        return vmin;    else if (val > vmax)        return vmax;    else        return val;}static int usb_mouse_poll(USBMouseState *s, uint8_t *buf, int len){    int dx, dy, dz, b, l;    if (!s->mouse_grabbed) {	s->eh_entry = qemu_add_mouse_event_handler(usb_mouse_event, s,                                                  0, "QEMU USB Mouse");	s->mouse_grabbed = 1;    }        dx = int_clamp(s->dx, -128, 127);    dy = int_clamp(s->dy, -128, 127);    dz = int_clamp(s->dz, -128, 127);    s->dx -= dx;    s->dy -= dy;    s->dz -= dz;        b = 0;    if (s->buttons_state & MOUSE_EVENT_LBUTTON)        b |= 0x01;    if (s->buttons_state & MOUSE_EVENT_RBUTTON)        b |= 0x02;    if (s->buttons_state & MOUSE_EVENT_MBUTTON)        b |= 0x04;        buf[0] = b;    buf[1] = dx;    buf[2] = dy;    l = 3;    if (len >= 4) {        buf[3] = dz;        l = 4;    }    return l;}static int usb_tablet_poll(USBMouseState *s, uint8_t *buf, int len){    int dz, b, l;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩绯色av一区二区在线观看| 日韩视频一区二区在线观看| 成+人+亚洲+综合天堂| 国产高清在线精品| 国产精品自拍三区| 国产二区国产一区在线观看| 国产大片一区二区| av网站一区二区三区| 99久久伊人久久99| 日本韩国欧美在线| 欧美性猛片xxxx免费看久爱| 欧美日韩aaa| 欧美大片拔萝卜| 久久精品在这里| 中文字幕日韩一区| 亚洲一区二区视频在线观看| 视频一区中文字幕| 久久99热国产| 成人国产精品视频| 欧洲日韩一区二区三区| 51精品秘密在线观看| 日韩精品一区二区三区在线观看| 久久精品视频免费| 亚洲视频你懂的| 午夜国产精品影院在线观看| 免费美女久久99| 国产成人综合自拍| 色噜噜狠狠色综合中国| 91精品国产高清一区二区三区蜜臀| 欧美α欧美αv大片| 国产精品沙发午睡系列990531| 一区二区三区视频在线观看| 蜜臀va亚洲va欧美va天堂| 国产盗摄女厕一区二区三区| 色婷婷国产精品久久包臀| 91精品国产色综合久久久蜜香臀| 久久久久九九视频| 亚洲男同1069视频| 久99久精品视频免费观看| 成人激情视频网站| 欧美精选一区二区| 国产色产综合产在线视频| 亚洲伊人色欲综合网| 国产在线一区二区| 日本精品视频一区二区三区| 精品久久久久久无| 亚洲欧美aⅴ...| 老司机免费视频一区二区 | 成人激情免费视频| 欧美三级电影网站| 国产丝袜在线精品| 日韩福利视频网| 972aa.com艺术欧美| 精品精品国产高清a毛片牛牛 | 亚洲综合色噜噜狠狠| 国产毛片精品视频| 欧美日韩美少妇| 国产精品二区一区二区aⅴ污介绍| 日韩av电影一区| 色综合久久久久综合| 久久伊人蜜桃av一区二区| 亚洲综合一区在线| 成人免费毛片高清视频| 日韩一区二区电影| 亚洲激情欧美激情| 高清免费成人av| 日韩三级视频中文字幕| 亚洲午夜在线电影| 99亚偷拍自图区亚洲| 久久久五月婷婷| 天天色综合成人网| 在线亚洲欧美专区二区| 中文字幕在线观看不卡| 国产一区不卡在线| 日韩欧美中文字幕制服| 亚洲丶国产丶欧美一区二区三区| 99久久婷婷国产综合精品电影| 久久天天做天天爱综合色| 日韩电影在线观看一区| 欧美亚洲日本一区| 亚洲男同性视频| 99re这里只有精品首页| 国产精品区一区二区三| 国产成人免费视频一区| 久久蜜桃一区二区| 国产在线精品不卡| 日韩欧美成人一区二区| 美国一区二区三区在线播放| 欧美日韩成人综合| 亚洲福利一二三区| 欧美天天综合网| 一区二区三区欧美久久| 在线日韩一区二区| 亚洲靠逼com| 色天天综合久久久久综合片| 亚洲女厕所小便bbb| 色偷偷久久一区二区三区| 亚洲精品一卡二卡| 在线免费观看日本欧美| 亚洲成a天堂v人片| 欧美精选在线播放| 蜜桃视频免费观看一区| 日韩精品在线一区| 国产麻豆一精品一av一免费| 久久影视一区二区| 高清视频一区二区| 国产精品乱码一区二区三区软件 | 国产精品一区二区你懂的| 欧美精品一区二区三区视频| 国产一区在线视频| 亚洲精品一区二区三区四区高清| 久久99精品国产.久久久久久| 精品国产一区久久| 丰满少妇在线播放bd日韩电影| 国产精品盗摄一区二区三区| 91久久精品网| 日本欧美肥老太交大片| 久久综合久色欧美综合狠狠| 国产毛片精品一区| 亚洲图片另类小说| 欧美日韩国产综合久久| 久久激五月天综合精品| 国产欧美日韩不卡免费| 色综合久久99| 日韩av在线播放中文字幕| 精品精品欲导航| 成人av在线影院| 亚洲午夜精品在线| 欧美成人在线直播| 成人性生交大片免费看中文| 亚洲综合视频在线| 精品久久久久99| 99re亚洲国产精品| 日本视频一区二区三区| 国产亚洲一二三区| 欧美在线观看你懂的| 极品尤物av久久免费看| 中文字幕一区二区三区四区| 欧美三级在线视频| 国产精品99久久不卡二区| 中文字幕日韩av资源站| 欧美一区二区在线观看| 国产aⅴ精品一区二区三区色成熟| 亚洲天堂福利av| 日韩三级伦理片妻子的秘密按摩| 成人av电影免费观看| 日韩二区三区四区| 国产精品午夜在线观看| 欧美日韩aaa| 成人黄色片在线观看| 图片区小说区区亚洲影院| 国产日产欧美一区二区视频| 欧美三级午夜理伦三级中视频| 国产一区二区在线视频| 亚洲综合男人的天堂| 久久久亚洲精华液精华液精华液 | 国产婷婷色一区二区三区| 欧美亚一区二区| 岛国av在线一区| 蜜桃av噜噜一区| 一区二区三区四区五区视频在线观看 | 欧美嫩在线观看| www.综合网.com| 精品一区二区在线观看| 亚洲一区二区中文在线| 一本大道av一区二区在线播放| 亚洲va欧美va人人爽| 国产欧美视频一区二区| 欧美日高清视频| 色综合久久久久久久久| 高清不卡在线观看| 蜜臀va亚洲va欧美va天堂 | 精品一二三四区| 午夜久久电影网| 亚洲精品网站在线观看| 国产日韩欧美精品在线| 日韩无一区二区| 欧美日韩国产电影| 色网综合在线观看| av电影在线观看一区| 国产传媒一区在线| 日精品一区二区| 午夜伊人狠狠久久| 夜夜操天天操亚洲| 亚洲男人的天堂av| 国产精品妹子av| 国产精品网站在线| 久久久噜噜噜久久中文字幕色伊伊 | 国产黄色成人av| 亚洲福中文字幕伊人影院| 国产精品成人网| 久久精品国产一区二区| 亚洲成人午夜影院| 亚洲一区电影777| 一区二区三区精品| 一区二区不卡在线播放| 亚洲中国最大av网站| 一区二区免费看| 午夜视频在线观看一区| 亚洲成av人在线观看|