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

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

?? pxa2xx_keypad.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * Intel PXA27X Keypad Controller emulation. * * Copyright (c) 2007 MontaVista Software, Inc * Written by Armin Kuster <akuster@kama-aina.net> *              or  <Akuster@mvista.com> * * This code is licensed under the GPLv2. */#include "hw.h"#include "pxa.h"#include "console.h"/* * Keypad */#define KPC         0x00    /* Keypad Interface Control register */#define KPDK        0x08    /* Keypad Interface Direct Key register */#define KPREC       0x10    /* Keypad Interface Rotary Encoder register */#define KPMK        0x18    /* Keypad Interface Matrix Key register */#define KPAS        0x20    /* Keypad Interface Automatic Scan register */#define KPASMKP0    0x28    /* Keypad Interface Automatic Scan Multiple                                Key Presser register 0 */#define KPASMKP1    0x30    /* Keypad Interface Automatic Scan Multiple                                Key Presser register 1 */#define KPASMKP2    0x38    /* Keypad Interface Automatic Scan Multiple                                Key Presser register 2 */#define KPASMKP3    0x40    /* Keypad Interface Automatic Scan Multiple                                Key Presser register 3 */#define KPKDI       0x48    /* Keypad Interface Key Debounce Interval                                register *//* Keypad defines */#define KPC_AS          (0x1 << 30)  /* Automatic Scan bit */#define KPC_ASACT       (0x1 << 29)  /* Automatic Scan on Activity */#define KPC_MI          (0x1 << 22)  /* Matrix interrupt bit */#define KPC_IMKP        (0x1 << 21)  /* Ignore Multiple Key Press */#define KPC_MS7         (0x1 << 20)  /* Matrix scan line 7 */#define KPC_MS6         (0x1 << 19)  /* Matrix scan line 6 */#define KPC_MS5         (0x1 << 18)  /* Matrix scan line 5 */#define KPC_MS4         (0x1 << 17)  /* Matrix scan line 4 */#define KPC_MS3         (0x1 << 16)  /* Matrix scan line 3 */#define KPC_MS2         (0x1 << 15)  /* Matrix scan line 2 */#define KPC_MS1         (0x1 << 14)  /* Matrix scan line 1 */#define KPC_MS0         (0x1 << 13)  /* Matrix scan line 0 */#define KPC_ME          (0x1 << 12)  /* Matrix Keypad Enable */#define KPC_MIE         (0x1 << 11)  /* Matrix Interrupt Enable */#define KPC_DK_DEB_SEL  (0x1 <<  9)  /* Direct Keypad Debounce Select */#define KPC_DI          (0x1 <<  5)  /* Direct key interrupt bit */#define KPC_RE_ZERO_DEB (0x1 <<  4)  /* Rotary Encoder Zero Debounce */#define KPC_REE1        (0x1 <<  3)  /* Rotary Encoder1 Enable */#define KPC_REE0        (0x1 <<  2)  /* Rotary Encoder0 Enable */#define KPC_DE          (0x1 <<  1)  /* Direct Keypad Enable */#define KPC_DIE         (0x1 <<  0)  /* Direct Keypad interrupt Enable */#define KPDK_DKP        (0x1 << 31)#define KPDK_DK7        (0x1 <<  7)#define KPDK_DK6        (0x1 <<  6)#define KPDK_DK5        (0x1 <<  5)#define KPDK_DK4        (0x1 <<  4)#define KPDK_DK3        (0x1 <<  3)#define KPDK_DK2        (0x1 <<  2)#define KPDK_DK1        (0x1 <<  1)#define KPDK_DK0        (0x1 <<  0)#define KPREC_OF1       (0x1 << 31)#define KPREC_UF1       (0x1 << 30)#define KPREC_OF0       (0x1 << 15)#define KPREC_UF0       (0x1 << 14)#define KPMK_MKP        (0x1 << 31)#define KPAS_SO         (0x1 << 31)#define KPASMKPx_SO     (0x1 << 31)#define KPASMKPx_MKC(row, col)  (1 << (row + 16 * (col % 2)))#define PXAKBD_MAXROW   8#define PXAKBD_MAXCOL   8struct pxa2xx_keypad_s{    target_phys_addr_t base;    qemu_irq    irq;    struct  keymap *map;    uint32_t    kpc;    uint32_t    kpdk;    uint32_t    kprec;    uint32_t    kpmk;    uint32_t    kpas;    uint32_t    kpasmkp0;    uint32_t    kpasmkp1;    uint32_t    kpasmkp2;    uint32_t    kpasmkp3;    uint32_t    kpkdi;};static void pxa27x_keyboard_event (struct  pxa2xx_keypad_s *kp, int keycode){    int row, col,rel;    if(!(kp->kpc & KPC_ME)) /* skip if not enabled */        return;    if(kp->kpc & KPC_AS || kp->kpc & KPC_ASACT) {        if(kp->kpc & KPC_AS)            kp->kpc &= ~(KPC_AS);        rel = (keycode & 0x80) ? 1 : 0; /* key release from qemu */        keycode &= ~(0x80); /* strip qemu key release bit */        row = kp->map[keycode].row;        col = kp->map[keycode].column;        if(row == -1 || col == -1)            return;        switch (col) {        case 0:        case 1:            if(rel)                kp->kpasmkp0 = ~(0xffffffff);            else                kp->kpasmkp0 |= KPASMKPx_MKC(row,col);            break;        case 2:        case 3:            if(rel)                kp->kpasmkp1 = ~(0xffffffff);            else                kp->kpasmkp1 |= KPASMKPx_MKC(row,col);            break;        case 4:        case 5:            if(rel)                kp->kpasmkp2 = ~(0xffffffff);            else                kp->kpasmkp2 |= KPASMKPx_MKC(row,col);            break;        case 6:        case 7:            if(rel)                kp->kpasmkp3 = ~(0xffffffff);            else                kp->kpasmkp3 |= KPASMKPx_MKC(row,col);            break;        } /* switch */        goto out;    }    return;out:    if(kp->kpc & KPC_MIE) {        kp->kpc |= KPC_MI;        qemu_irq_raise(kp->irq);    }    return;}static uint32_t pxa2xx_keypad_read(void *opaque, target_phys_addr_t offset){    struct pxa2xx_keypad_s *s = (struct pxa2xx_keypad_s *) opaque;    uint32_t tmp;    offset -= s->base;    switch (offset) {    case KPC:        tmp = s->kpc;        if(tmp & KPC_MI)            s->kpc &= ~(KPC_MI);        if(tmp & KPC_DI)            s->kpc &= ~(KPC_DI);        qemu_irq_lower(s->irq);        return tmp;        break;    case KPDK:        return s->kpdk;        break;    case KPREC:        tmp = s->kprec;        if(tmp & KPREC_OF1)            s->kprec &= ~(KPREC_OF1);        if(tmp & KPREC_UF1)            s->kprec &= ~(KPREC_UF1);        if(tmp & KPREC_OF0)            s->kprec &= ~(KPREC_OF0);        if(tmp & KPREC_UF0)            s->kprec &= ~(KPREC_UF0);        return tmp;        break;    case KPMK:        tmp = s->kpmk;        if(tmp & KPMK_MKP)            s->kpmk &= ~(KPMK_MKP);        return tmp;        break;    case KPAS:        return s->kpas;        break;    case KPASMKP0:        return s->kpasmkp0;        break;    case KPASMKP1:        return s->kpasmkp1;        break;    case KPASMKP2:        return s->kpasmkp2;        break;    case KPASMKP3:        return s->kpasmkp3;        break;    case KPKDI:        return s->kpkdi;        break;    default:        cpu_abort(cpu_single_env, "%s: Bad offset " REG_FMT "\n",                        __FUNCTION__, offset);    }    return 0;}static void pxa2xx_keypad_write(void *opaque,                target_phys_addr_t offset, uint32_t value){    struct pxa2xx_keypad_s *s = (struct pxa2xx_keypad_s *) opaque;    offset -= s->base;    switch (offset) {    case KPC:        s->kpc = value;        break;    case KPDK:        s->kpdk = value;        break;    case KPREC:        s->kprec = value;        break;    case KPMK:        s->kpmk = value;        break;    case KPAS:        s->kpas = value;        break;    case KPASMKP0:        s->kpasmkp0 = value;        break;    case KPASMKP1:        s->kpasmkp1 = value;        break;    case KPASMKP2:        s->kpasmkp2 = value;        break;    case KPASMKP3:        s->kpasmkp3 = value;        break;    case KPKDI:        s->kpkdi = value;        break;    default:        cpu_abort(cpu_single_env, "%s: Bad offset " REG_FMT "\n",                        __FUNCTION__, offset);    }}static CPUReadMemoryFunc *pxa2xx_keypad_readfn[] = {    pxa2xx_keypad_read,    pxa2xx_keypad_read,    pxa2xx_keypad_read};static CPUWriteMemoryFunc *pxa2xx_keypad_writefn[] = {    pxa2xx_keypad_write,    pxa2xx_keypad_write,    pxa2xx_keypad_write};static void pxa2xx_keypad_save(QEMUFile *f, void *opaque){    struct pxa2xx_keypad_s *s = (struct pxa2xx_keypad_s *) opaque;    qemu_put_be32s(f, &s->kpc);    qemu_put_be32s(f, &s->kpdk);    qemu_put_be32s(f, &s->kprec);    qemu_put_be32s(f, &s->kpmk);    qemu_put_be32s(f, &s->kpas);    qemu_put_be32s(f, &s->kpasmkp0);    qemu_put_be32s(f, &s->kpasmkp1);    qemu_put_be32s(f, &s->kpasmkp2);    qemu_put_be32s(f, &s->kpasmkp3);    qemu_put_be32s(f, &s->kpkdi);}static int pxa2xx_keypad_load(QEMUFile *f, void *opaque, int version_id){    struct pxa2xx_keypad_s *s = (struct pxa2xx_keypad_s *) opaque;    qemu_get_be32s(f, &s->kpc);    qemu_get_be32s(f, &s->kpdk);    qemu_get_be32s(f, &s->kprec);    qemu_get_be32s(f, &s->kpmk);    qemu_get_be32s(f, &s->kpas);    qemu_get_be32s(f, &s->kpasmkp0);    qemu_get_be32s(f, &s->kpasmkp1);    qemu_get_be32s(f, &s->kpasmkp2);    qemu_get_be32s(f, &s->kpasmkp3);    qemu_get_be32s(f, &s->kpkdi);    return 0;}struct pxa2xx_keypad_s *pxa27x_keypad_init(target_phys_addr_t base,        qemu_irq irq){    int iomemtype;    struct pxa2xx_keypad_s *s;    s = (struct pxa2xx_keypad_s *) qemu_mallocz(sizeof(struct pxa2xx_keypad_s));    s->base = base;    s->irq = irq;    iomemtype = cpu_register_io_memory(0, pxa2xx_keypad_readfn,                    pxa2xx_keypad_writefn, s);    cpu_register_physical_memory(base, 0x00100000, iomemtype);    register_savevm("pxa2xx_keypad", 0, 0,                    pxa2xx_keypad_save, pxa2xx_keypad_load, s);    return s;}void pxa27x_register_keypad(struct pxa2xx_keypad_s *kp, struct keymap *map,        int size){    if(!map || size < 0x80) {        fprintf(stderr, "%s - No PXA keypad map defined\n", __FUNCTION__);        exit(-1);    }    kp->map = map;    qemu_add_kbd_event_handler((QEMUPutKBDEvent *) pxa27x_keyboard_event, kp);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产美女浴室洗澡无遮挡| 91精品国产色综合久久| 亚洲成av人片www| 精品久久久久99| 91极品视觉盛宴| 粉嫩蜜臀av国产精品网站| 午夜免费久久看| 中文一区二区完整视频在线观看| 51精品久久久久久久蜜臀| 成人理论电影网| 国产精品夜夜爽| 青青草原综合久久大伊人精品优势| 亚洲人成在线播放网站岛国| 久久久久88色偷偷免费| 欧美日韩在线播放一区| 91麻豆免费视频| 高清不卡一区二区在线| 蓝色福利精品导航| 亚洲成va人在线观看| 亚洲欧美偷拍另类a∨色屁股| 精品国产91洋老外米糕| 制服丝袜亚洲网站| 欧美影院一区二区三区| www.日韩在线| 丰满白嫩尤物一区二区| 国产精品一二三区| 国产一区二区三区免费看| 日本va欧美va精品发布| 一区二区三区免费观看| ...xxx性欧美| 成人欧美一区二区三区白人 | 日韩视频免费观看高清完整版在线观看| www.日韩在线| 成人v精品蜜桃久久一区| 国产一区二区三区高清播放| 国产中文一区二区三区| 久久国产成人午夜av影院| 免费观看91视频大全| 日韩精品视频网站| 日韩电影在线一区| 日韩国产欧美三级| 麻豆精品一区二区三区| 美女www一区二区| 理论电影国产精品| 精品一区二区影视| 国产综合久久久久久鬼色 | 久久久久久久网| 久久综合色天天久久综合图片| 欧美电视剧免费全集观看| 日韩欧美国产系列| 久久伊人中文字幕| 亚洲欧洲日韩综合一区二区| 国产精品久久久久久久蜜臀| 中文字幕在线一区免费| 亚洲三级小视频| 一区二区三区电影在线播| 亚洲国产日日夜夜| 日韩电影免费在线| 激情综合色播五月| 懂色av一区二区三区蜜臀| 99re视频精品| 欧美日韩一区二区三区不卡| 欧美成人三级在线| 国产精品欧美久久久久无广告| 亚洲色图.com| 日韩精品亚洲专区| 国产98色在线|日韩| 91蜜桃免费观看视频| 欧美日韩免费不卡视频一区二区三区| 91麻豆精品国产91久久久使用方法 | 亚洲另类色综合网站| 亚洲成人在线网站| 久草这里只有精品视频| 成人小视频在线观看| 在线看日韩精品电影| 日韩一区二区视频| 国产精品色婷婷| 亚洲成人一二三| 国内成+人亚洲+欧美+综合在线| 粉嫩av一区二区三区在线播放| 91污在线观看| 精品国产一二三区| 亚洲美女少妇撒尿| 韩国一区二区在线观看| 欧美在线视频全部完| 精品欧美一区二区在线观看 | 久久久精品综合| 亚洲免费在线视频一区 二区| 日本不卡不码高清免费观看| 成人黄色综合网站| 在线成人av网站| 中文字幕av一区二区三区免费看 | 色婷婷久久久亚洲一区二区三区 | 国产偷国产偷亚洲高清人白洁| 亚洲精品国产第一综合99久久 | 国产曰批免费观看久久久| 99精品视频在线观看| 欧美一区二区三区的| 亚洲欧洲日本在线| 久久av资源站| 在线观看日韩电影| 欧美经典一区二区| 日本大胆欧美人术艺术动态| 色悠久久久久综合欧美99| 久久综合久久99| 91免费视频大全| 精品999久久久| 依依成人综合视频| 国产美女在线精品| 91精品国产综合久久香蕉的特点 | 夜夜揉揉日日人人青青一国产精品| 亚洲第一激情av| 色婷婷综合久久久久中文一区二区 | 青青青爽久久午夜综合久久午夜| 成人免费毛片片v| 欧美电视剧在线看免费| 天堂午夜影视日韩欧美一区二区| 91亚洲永久精品| 中文字幕国产精品一区二区| 久久er99热精品一区二区| 91麻豆精品国产91久久久久久久久| 亚洲最大成人综合| 97久久超碰精品国产| 国产精品色在线| 国产成人精品午夜视频免费| 欧美精品一区二| 国产在线播放一区三区四| 精品免费视频.| 麻豆91在线播放| 91精品国产综合久久精品麻豆 | 99国产精品久久久久久久久久 | 久久久久成人黄色影片| 另类调教123区| 欧美tickle裸体挠脚心vk| 日韩电影在线一区二区| 91精品欧美综合在线观看最新| 亚洲成人免费在线| 欧美日韩亚洲不卡| 亚洲高清免费视频| 欧美精品1区2区| 日韩电影一区二区三区四区| 91精品国产美女浴室洗澡无遮挡| 日韩国产精品91| 日韩免费观看高清完整版| 看片的网站亚洲| 国产精品国产三级国产aⅴ中文| 国产综合久久久久久鬼色| 久久精品一区二区| 99免费精品在线| 亚洲欧美日韩成人高清在线一区| 91亚洲精品久久久蜜桃网站 | 韩国一区二区三区| 久久精品视频免费| 波多野结衣精品在线| 日韩理论片一区二区| 日本道在线观看一区二区| 亚洲超碰97人人做人人爱| 欧美一区二区三区色| 九九久久精品视频 | 日本特黄久久久高潮| www日韩大片| caoporn国产精品| 亚洲午夜在线电影| 欧美变态tickling挠脚心| 国产成人在线视频播放| 中文字幕在线观看不卡视频| 欧美综合一区二区| 麻豆一区二区三| 国产精品―色哟哟| 欧美日韩国产在线播放网站| 精品一区二区三区在线播放 | 日韩影院免费视频| 久久天天做天天爱综合色| 成人99免费视频| 亚洲图片有声小说| 久久综合九色综合97婷婷| 成人黄色电影在线| 日韩精品亚洲一区| 国产精品黄色在线观看| 欧美日韩视频一区二区| 国产麻豆视频精品| 亚洲高清免费一级二级三级| 国产亚洲精品资源在线26u| 在线精品视频免费播放| 久久91精品久久久久久秒播| 中文字幕一区二区三区乱码在线 | 欧美久久一二区| 国产成人免费视频一区| 亚洲国产日韩在线一区模特| 久久综合国产精品| 欧美午夜一区二区三区| 国产91在线观看| 日韩中文字幕亚洲一区二区va在线 | 亚洲一区二区成人在线观看| 26uuu久久天堂性欧美| 色国产精品一区在线观看| 国产很黄免费观看久久| 石原莉奈在线亚洲二区| 亚洲欧美日韩成人高清在线一区| 久久亚洲综合av|