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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? adb.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * QEMU ADB support * * Copyright (c) 2004 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 "hw.h"#include "ppc_mac.h"#include "console.h"/* ADB commands */#define ADB_BUSRESET		0x00#define ADB_FLUSH               0x01#define ADB_WRITEREG		0x08#define ADB_READREG		0x0c/* ADB device commands */#define ADB_CMD_SELF_TEST		0xff#define ADB_CMD_CHANGE_ID		0xfe#define ADB_CMD_CHANGE_ID_AND_ACT	0xfd#define ADB_CMD_CHANGE_ID_AND_ENABLE	0x00/* ADB default device IDs (upper 4 bits of ADB command byte) */#define ADB_DONGLE	1#define ADB_KEYBOARD	2#define ADB_MOUSE	3#define ADB_TABLET	4#define ADB_MODEM	5#define ADB_MISC	7/* error codes */#define ADB_RET_NOTPRESENT (-2)int adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf, int len){    ADBDevice *d;    int devaddr, cmd, i;    cmd = buf[0] & 0xf;    if (cmd == ADB_BUSRESET) {        for(i = 0; i < s->nb_devices; i++) {            d = &s->devices[i];            if (d->devreset) {                d->devreset(d);            }        }        return 0;    }    devaddr = buf[0] >> 4;    for(i = 0; i < s->nb_devices; i++) {        d = &s->devices[i];        if (d->devaddr == devaddr) {            return d->devreq(d, obuf, buf, len);        }    }    return ADB_RET_NOTPRESENT;}/* XXX: move that to cuda ? */int adb_poll(ADBBusState *s, uint8_t *obuf){    ADBDevice *d;    int olen, i;    uint8_t buf[1];    olen = 0;    for(i = 0; i < s->nb_devices; i++) {        if (s->poll_index >= s->nb_devices)            s->poll_index = 0;        d = &s->devices[s->poll_index];        buf[0] = ADB_READREG | (d->devaddr << 4);        olen = adb_request(s, obuf + 1, buf, 1);        /* if there is data, we poll again the same device */        if (olen > 0) {            obuf[0] = buf[0];            olen++;            break;        }        s->poll_index++;    }    return olen;}ADBDevice *adb_register_device(ADBBusState *s, int devaddr,                               ADBDeviceRequest *devreq,                               ADBDeviceReset *devreset,                               void *opaque){    ADBDevice *d;    if (s->nb_devices >= MAX_ADB_DEVICES)        return NULL;    d = &s->devices[s->nb_devices++];    d->bus = s;    d->devaddr = devaddr;    d->devreq = devreq;    d->devreset = devreset;    d->opaque = opaque;    return d;}/***************************************************************//* Keyboard ADB device */typedef struct KBDState {    uint8_t data[128];    int rptr, wptr, count;} KBDState;static const uint8_t pc_to_adb_keycode[256] = {  0, 53, 18, 19, 20, 21, 23, 22, 26, 28, 25, 29, 27, 24, 51, 48, 12, 13, 14, 15, 17, 16, 32, 34, 31, 35, 33, 30, 36, 54,  0,  1,  2,  3,  5,  4, 38, 40, 37, 41, 39, 50, 56, 42,  6,  7,  8,  9, 11, 45, 46, 43, 47, 44,123, 67, 58, 49, 57,122,120, 99,118, 96, 97, 98,100,101,109, 71,107, 89, 91, 92, 78, 86, 87, 88, 69, 83, 84, 85, 82, 65,  0,  0, 10,103,111,  0,  0,110, 81,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 94,  0, 93,  0,  0,  0,  0,  0,  0,104,102,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 76,125,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,105,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 75,  0,  0,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115, 62,116,  0, 59,  0, 60,  0,119, 61,121,114,117,  0,  0,  0,  0,  0,  0,  0, 55,126,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 95,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,};static void adb_kbd_put_keycode(void *opaque, int keycode){    ADBDevice *d = opaque;    KBDState *s = d->opaque;    if (s->count < sizeof(s->data)) {        s->data[s->wptr] = keycode;        if (++s->wptr == sizeof(s->data))            s->wptr = 0;        s->count++;    }}static int adb_kbd_poll(ADBDevice *d, uint8_t *obuf){    static int ext_keycode;    KBDState *s = d->opaque;    int adb_keycode, keycode;    int olen;    olen = 0;    for(;;) {        if (s->count == 0)            break;        keycode = s->data[s->rptr];        if (++s->rptr == sizeof(s->data))            s->rptr = 0;        s->count--;        if (keycode == 0xe0) {            ext_keycode = 1;        } else {            if (ext_keycode)                adb_keycode =  pc_to_adb_keycode[keycode | 0x80];            else                adb_keycode =  pc_to_adb_keycode[keycode & 0x7f];            obuf[0] = adb_keycode | (keycode & 0x80);            /* NOTE: could put a second keycode if needed */            obuf[1] = 0xff;            olen = 2;            ext_keycode = 0;            break;        }    }    return olen;}static int adb_kbd_request(ADBDevice *d, uint8_t *obuf,                           const uint8_t *buf, int len){    KBDState *s = d->opaque;    int cmd, reg, olen;    if ((buf[0] & 0x0f) == ADB_FLUSH) {        /* flush keyboard fifo */        s->wptr = s->rptr = s->count = 0;        return 0;    }    cmd = buf[0] & 0xc;    reg = buf[0] & 0x3;    olen = 0;    switch(cmd) {    case ADB_WRITEREG:        switch(reg) {        case 2:            /* LED status */            break;        case 3:            switch(buf[2]) {            case ADB_CMD_SELF_TEST:                break;            case ADB_CMD_CHANGE_ID:            case ADB_CMD_CHANGE_ID_AND_ACT:            case ADB_CMD_CHANGE_ID_AND_ENABLE:                d->devaddr = buf[1] & 0xf;                break;            default:                /* XXX: check this */                d->devaddr = buf[1] & 0xf;                d->handler = buf[2];                break;            }        }        break;    case ADB_READREG:        switch(reg) {        case 0:            olen = adb_kbd_poll(d, obuf);            break;        case 1:            break;        case 2:            obuf[0] = 0x00; /* XXX: check this */            obuf[1] = 0x07; /* led status */            olen = 2;            break;        case 3:            obuf[0] = d->handler;            obuf[1] = d->devaddr;            olen = 2;            break;        }        break;    }    return olen;}static int adb_kbd_reset(ADBDevice *d){    KBDState *s = d->opaque;    d->handler = 1;    d->devaddr = ADB_KEYBOARD;    memset(s, 0, sizeof(KBDState));    return 0;}void adb_kbd_init(ADBBusState *bus){    ADBDevice *d;    KBDState *s;    s = qemu_mallocz(sizeof(KBDState));    d = adb_register_device(bus, ADB_KEYBOARD, adb_kbd_request,                            adb_kbd_reset, s);    adb_kbd_reset(d);    qemu_add_kbd_event_handler(adb_kbd_put_keycode, d);}/***************************************************************//* Mouse ADB device */typedef struct MouseState {    int buttons_state, last_buttons_state;    int dx, dy, dz;} MouseState;static void adb_mouse_event(void *opaque,                            int dx1, int dy1, int dz1, int buttons_state){    ADBDevice *d = opaque;    MouseState *s = d->opaque;    s->dx += dx1;    s->dy += dy1;    s->dz += dz1;    s->buttons_state = buttons_state;}static int adb_mouse_poll(ADBDevice *d, uint8_t *obuf){    MouseState *s = d->opaque;    int dx, dy;    if (s->last_buttons_state == s->buttons_state &&        s->dx == 0 && s->dy == 0)        return 0;    dx = s->dx;    if (dx < -63)        dx = -63;    else if (dx > 63)        dx = 63;    dy = s->dy;    if (dy < -63)        dy = -63;    else if (dy > 63)        dy = 63;    s->dx -= dx;    s->dy -= dy;    s->last_buttons_state = s->buttons_state;    dx &= 0x7f;    dy &= 0x7f;    if (!(s->buttons_state & MOUSE_EVENT_LBUTTON))        dy |= 0x80;    if (!(s->buttons_state & MOUSE_EVENT_RBUTTON))        dx |= 0x80;    obuf[0] = dy;    obuf[1] = dx;    return 2;}static int adb_mouse_request(ADBDevice *d, uint8_t *obuf,                             const uint8_t *buf, int len){    MouseState *s = d->opaque;    int cmd, reg, olen;    if ((buf[0] & 0x0f) == ADB_FLUSH) {        /* flush mouse fifo */        s->buttons_state = s->last_buttons_state;        s->dx = 0;        s->dy = 0;        s->dz = 0;        return 0;    }    cmd = buf[0] & 0xc;    reg = buf[0] & 0x3;    olen = 0;    switch(cmd) {    case ADB_WRITEREG:        switch(reg) {        case 2:            break;        case 3:            switch(buf[2]) {            case ADB_CMD_SELF_TEST:                break;            case ADB_CMD_CHANGE_ID:            case ADB_CMD_CHANGE_ID_AND_ACT:            case ADB_CMD_CHANGE_ID_AND_ENABLE:                d->devaddr = buf[1] & 0xf;                break;            default:                /* XXX: check this */                d->devaddr = buf[1] & 0xf;                break;            }        }        break;    case ADB_READREG:        switch(reg) {        case 0:            olen = adb_mouse_poll(d, obuf);            break;        case 1:            break;        case 3:            obuf[0] = d->handler;            obuf[1] = d->devaddr;            olen = 2;            break;        }        break;    }    return olen;}static int adb_mouse_reset(ADBDevice *d){    MouseState *s = d->opaque;    d->handler = 2;    d->devaddr = ADB_MOUSE;    memset(s, 0, sizeof(MouseState));    return 0;}void adb_mouse_init(ADBBusState *bus){    ADBDevice *d;    MouseState *s;    s = qemu_mallocz(sizeof(MouseState));    d = adb_register_device(bus, ADB_MOUSE, adb_mouse_request,                            adb_mouse_reset, s);    adb_mouse_reset(d);    qemu_add_mouse_event_handler(adb_mouse_event, d, 0, "QEMU ADB Mouse");}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜精品视频一区二区 | 精品美女一区二区三区| 精品在线播放免费| 亚洲少妇屁股交4| 日韩一区二区三区视频| aa级大片欧美| 经典三级在线一区| 亚洲一区二区欧美| 中文幕一区二区三区久久蜜桃| 欧美亚洲另类激情小说| 国产一区不卡视频| 日韩国产一区二| 亚洲精品国产无套在线观| 久久久噜噜噜久久中文字幕色伊伊| 欧美中文字幕一区二区三区亚洲| 国产盗摄一区二区三区| 日韩精品一二三四| 一区二区三区成人在线视频| 中文av字幕一区| 欧美国产禁国产网站cc| 欧美精品一区二区三| 4438x成人网最大色成网站| 色综合久久综合| 99精品欧美一区二区三区小说| 国产精品亚洲综合一区在线观看| 奇米亚洲午夜久久精品| 亚洲成人免费av| 亚洲精品免费一二三区| 中文av一区特黄| 中文在线一区二区| 久久久久国色av免费看影院| 欧美xxxx老人做受| 日韩欧美电影在线| 日韩欧美一二区| 日韩无一区二区| 欧美一级高清片| 欧美一级日韩免费不卡| 91精品国产综合久久福利| 欧美日韩精品二区第二页| 欧美视频三区在线播放| 欧美亚洲日本一区| 欧美日韩一级片网站| 欧美少妇xxx| 欧美丰满一区二区免费视频| 欧美日韩不卡在线| 欧美一区二区在线不卡| 日韩免费观看高清完整版在线观看| 欧美久久久久久蜜桃| 91精品国产免费久久综合| 日韩西西人体444www| 欧美一级高清大全免费观看| 欧美精品一区二区高清在线观看 | 成人小视频免费观看| 国产91丝袜在线18| av资源网一区| 色8久久人人97超碰香蕉987| 欧美做爰猛烈大尺度电影无法无天| 欧美三级日韩在线| 日韩一卡二卡三卡四卡| 久久综合色婷婷| 国产精品久久二区二区| 一区二区三区四区蜜桃 | 成人午夜碰碰视频| bt7086福利一区国产| 在线免费观看日韩欧美| 在线电影国产精品| 337p粉嫩大胆噜噜噜噜噜91av| 欧美国产综合色视频| 亚洲男人电影天堂| 日本成人在线看| 国产高清视频一区| 91精品1区2区| 91精品国产综合久久香蕉麻豆| 日韩免费观看2025年上映的电影| 久久九九国产精品| 一区二区三区高清不卡| 精品一二三四区| 91尤物视频在线观看| 在线观看91av| 国产精品视频你懂的| 亚洲成人中文在线| 国产精品一区二区久激情瑜伽| 91免费在线播放| 精品日韩99亚洲| 亚洲人吸女人奶水| 经典三级视频一区| 欧美色图一区二区三区| 久久奇米777| 亚洲成人一区在线| 国产成人亚洲综合a∨猫咪| 欧美怡红院视频| 久久久国产一区二区三区四区小说| 亚洲激情综合网| 国产美女主播视频一区| 欧美日韩国产电影| 中文字幕一区二区5566日韩| 免费欧美日韩国产三级电影| 91婷婷韩国欧美一区二区| 日韩欧美一区在线| 亚洲va欧美va人人爽| 成人h动漫精品一区二| 欧美一区二区不卡视频| 一区二区在线观看免费视频播放| 国产综合色视频| 91麻豆精品久久久久蜜臀| 亚洲色图制服丝袜| 国产精品一区二区三区乱码| 91精品国产入口| 亚洲h动漫在线| 97精品久久久午夜一区二区三区| 精品国内片67194| 视频在线观看91| 色综合久久久久久久| 国产亚洲综合在线| 久久99国内精品| 欧美一区二视频| 亚洲sss视频在线视频| 在线视频中文字幕一区二区| 成人免费在线视频观看| 国产91丝袜在线18| 国产欧美日韩在线观看| 精品一区二区三区免费| 日韩精品在线一区| 美日韩黄色大片| 正在播放亚洲一区| 日韩av网站在线观看| 欧美日韩高清一区二区三区| 亚洲精品国产无套在线观| 一本久道中文字幕精品亚洲嫩| 欧美激情在线一区二区三区| 国产一区福利在线| 久久影音资源网| 国产一区二区剧情av在线| 精品美女被调教视频大全网站| 久久精品国产一区二区三| 日韩视频一区二区三区| 蜜桃视频免费观看一区| 日韩女优视频免费观看| 国产一区二区三区四区五区入口| 欧美成人r级一区二区三区| 六月丁香婷婷色狠狠久久| 日韩欧美中文一区| 精品一区二区三区日韩| 国产亲近乱来精品视频| 成人禁用看黄a在线| 自拍偷拍亚洲综合| 91行情网站电视在线观看高清版| 一区二区三区成人| 欧美日韩国产大片| 国产最新精品精品你懂的| 亚洲国产精品精华液2区45| 成人av在线一区二区三区| 亚洲天堂精品视频| 欧美日韩在线亚洲一区蜜芽| 午夜av一区二区三区| 精品美女在线播放| av中文字幕一区| 一二三区精品视频| 日韩欧美国产不卡| 成人一级视频在线观看| 亚洲精品精品亚洲| 欧美成人a∨高清免费观看| 成人综合婷婷国产精品久久蜜臀| 最新久久zyz资源站| 欧美日韩国产大片| 国产不卡在线播放| 亚洲精品国产精华液| 日韩小视频在线观看专区| 成人久久视频在线观看| 亚洲一区二区中文在线| 精品久久久久久久久久久久包黑料| 国产福利精品一区| 亚洲综合在线第一页| 日韩美女视频在线| 91小宝寻花一区二区三区| 丝袜美腿成人在线| 欧美国产日本视频| 欧美午夜不卡视频| 国产九色sp调教91| 亚洲一二三区在线观看| www国产亚洲精品久久麻豆| 色婷婷综合久久久久中文一区二区 | 天堂在线亚洲视频| 久久九九国产精品| 欧美日韩一区成人| 成人网在线播放| 香蕉av福利精品导航| 亚洲国产精品黑人久久久| 欧美久久久久久久久中文字幕| 国产精品 欧美精品| 亚洲成人av电影在线| 国产精品乱码妇女bbbb| 欧美一区中文字幕| 91精彩视频在线观看| 国产福利精品导航| 麻豆精品国产91久久久久久| 亚洲精品va在线观看| 国产精品色婷婷久久58| 欧美videossexotv100| 欧美三级电影在线观看|