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

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

?? usb.c

?? PS2和USB兼容的鼠標源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
    0x03,       		//* 人機接口設備(HID)類
    0x01,       		//* 使用的子類:支持BIOS根啟動Boot的子類
    0x02,       		//* 使用的協議:鼠標
    0x00,       		//* 接口描述符字符串索引
    0x09,       		//* HID描述符的字節數大小
    DESCRIPTOR_HID,       	//* HID描述符類型編號
    0x10,       		//* HID類協議版本號,LO為10
    0x01,       		//* HID類協議版本號,LO為1,所以為1.10
    0x00,       		//* 固件的國家地區代號,0x21為美國
    0x01,       		//* 下級描述符的數量,為1個
    0x22,       		//* 下級描述符為報告描述符
    0x3b,       		//* 下級描述符的長度的低字節
    0x00,       		//* 下級描述符的長度的高字節
    0x07,       		//* 端點描述符的字節數大小
    DESCRIPTOR_ENDPOINT,     	//* 端點描述符類型編號
    0x81,       		//* 端點號0x1,輸入端點
    0x03,       		//* 使用的傳輸類型:中斷傳輸
    0x05,       		//* 該端點支持的最大包尺寸,0x5字節
    0x00,
    0x0a        		//* 中斷掃描時間:設置為10ms
};

volatile const    char * g_cdata;
volatile   signed char * g_mdata;
volatile unsigned char   g_lenth;
/********************************************************************************/
/* function : load_rom_ctrl_buffer()                                            */
/* created  : hw-chen                                                           */
/* descript : copy data from a ROM source                                       */
/********************************************************************************/
void load_rom_ctrl_buffer(void)
{   asm("PUSH   A");
    asm("PUSH   X");
    asm("MOV    X,0");
    asm("ROM_COPY:");
    asm("PUSH   X");
    asm("MOV    A,[_g_cdata]");
    asm("MOV    X,[_g_cdata+1]");
    asm("INC    [_g_cdata+1]");
    asm("ADC    [_g_cdata],0");
    asm("ROMX    ");
    asm("POP    X");
    asm("MOV    REG[X+0x50],A");
    asm("INC    X");
    asm("MOV    A,X");
    asm("CMP    A,[_g_lenth]");
    asm("JC     ROM_COPY");
    asm("POP    X");
    asm("POP    A");
}

/********************************************************************************/
/* function : load_ram_ctrl_buffer()                                            */
/* created  : hw-chen                                                           */
/* descript : copy data from a RAM source                                       */
/********************************************************************************/
void load_ram_ctrl_buffer(void)
{   asm("PUSH   A");
    asm("PUSH   X");
    asm("MOV    X,0");
    asm("RAM_COPY:");
    asm("MVI    A,[_g_cdata+1]");
    asm("MOV    REG[X+0x50],A");
    asm("INC    X");
    asm("MOV    A,X");
    asm("CMP    A,[_g_lenth]");
    asm("JC     RAM_COPY");
    asm("POP    X");
    asm("POP    A");
}

/********************************************************************************/
/* function : usb_error_clear()                                                 */
/* created  : hw-chen                                                           */
/* descript : 如果端點出現錯誤,需要清除                                         */
/********************************************************************************/
void usb_error_clear(void)
{   EP0CNT = 0x0;
    EP0MODE= MODE_ACK_IN_STATUS_OUT;
}
/********************************************************************************/
/* function : usb_set_mode()                                                    */
/* created  : hw-chen                                                           */
/* descript : 設置控制端點模式                                                  */
/********************************************************************************/
void usb_set_mode(unsigned char mode)
{   EP0CNT = 0x0;
    EP0MODE= mode;
}

/********************************************************************************/
/* function : usb_load_ctrl_buffer()                                            */
/* created  : hw-chen                                                           */
/* descript : 向端點0的控制緩沖區寫入數據                                       */
/********************************************************************************/
char usb_load_ctrl_buffer(void)
{   if((usb_transmit.length>=0x8))
    {   usb_transmit.length-=0x8;
        g_lenth=0x8;
    }
    else
    {   g_lenth=usb_transmit.length;
        usb_transmit.length=0x0;
    }
    if((usb_transmit.cflag))
    {   g_cdata=usb_transmit.cdata;
        usb_transmit.cdata+=g_lenth;
        load_rom_ctrl_buffer();
        return g_lenth;
    }
    else
    {   g_mdata=usb_transmit.mdata;
        load_rom_ctrl_buffer();
        usb_transmit.mdata+=g_lenth;
        return g_lenth;
    }
}


/********************************************************************************/
/* function : usb_control_read()                                                */
/* created  : hw-chen                                                           */
/* descript : 控制讀取                                                          */
/*            this routine is called after a setup has been received that is    */
/*            requesting a data response from the mouse. upon entry,            */
/*            usb_transmit has been initialized to point to the data buffer     */
/*            that needs to be tranmsitted.  usb_control_read adjusts the       */
/*            length of the data to be returned if the host requested less data */
/*            than the actual length of the buffer.  it then loads the fifo     */
/*            with the first chunck of data and prepares the SIE to ack with    */
/*            the data.                                                         */
/********************************************************************************/
void usb_control_read(void)
{   if((!EP0DATA_7)&&(EP0DATA_6<usb_transmit.length))
    {   usb_transmit.length = EP0DATA_6;
    }
    byte_count=0x0;
    if((usb_transmit.length))
    {   byte_count=usb_load_ctrl_buffer();    //data to send. Load FIFO with first chunck
    }
    if((ctrl_toggle_bit==0x1))
    {   byte_count|=DATATOGGLE;             //* 設置TOGGLE
        ctrl_toggle_bit=0x0;
    }
    else
    {   ctrl_toggle_bit=0x1;
    }
    EP0CNT = byte_count;                    //* 設置長度
    EP0MODE= MODE_ACK_IN_STATUS_OUT;    //* and set the ep mode to ack the next IN with the data.
}


/********************************************************************************/
/* function : usb_get_status()                                                  */
/* created  : hw-chen                                                           */
/* descript : 獲取狀態                                                          */
/*            This routine checks for either a request to get the device        */
/*            status, the interface status, or the endpoint status,             */
/*            sets up usb_transmit to point to the appropriate status, and      */
/*            calls usb_control_read to initiate the transfer.                  */
/********************************************************************************/
void usb_get_status(void)
{   switch(EP0DATA_0)
    {
    case (DEV_2_HST|STANDARD|DEVICE):
         usb_transmit.length= 0x2;                      //* send 2 bytes
         usb_transmit.mdata = &dev_status.rem_wakeup;   //* point at remote wakeup status
         usb_transmit.cflag = 0x0;
         break;
    case (DEV_2_HST|STANDARD|INTERFACE):
         usb_transmit.length= 0x2;
         usb_transmit.cdata = get_interface_status_table;
         usb_transmit.cflag = 0x1;
         break;
    case (DEV_2_HST|STANDARD|ENDPOINT):
         usb_transmit.length= 0x2;                      //* send two bytes
         usb_transmit.mdata = &dev_status.ept1_stall;   //* point at endpoint stall status
         usb_transmit.cflag = 0x0;
         break;
    default:
         usb_set_mode(stall_inout);                     //* bogus request, complain
         return;
    }
    usb_control_read();                                 //* initiate transfer
}

/********************************************************************************/
/* function : usb_get_string()                                                  */
/* created  : hw-chen                                                           */
/* descript : 處理字符串描述符                                                  */
/********************************************************************************/
int usb_get_string(void)
{   switch(EP0DATA_2)
    {
    case 0x0:
         usb_transmit.length= sizeof(string_language_table);
         usb_transmit.cdata = string_language_table;
         usb_transmit.cflag = 0x1;
         break;
    case 0x1:
         usb_transmit.length= sizeof(string_description_one);
         usb_transmit.cdata = string_description_one;
         usb_transmit.cflag = 0x1;
         break;
    case 0x2:
         usb_transmit.length= sizeof(string_description_two);
         usb_transmit.cdata = string_description_two;
         break;
    case 0x3:
         usb_transmit.length= sizeof(string_description_thr);
         usb_transmit.cdata = string_description_thr;
         usb_transmit.cflag = 0x1;
         break;
    case 0x4:
         usb_transmit.length= sizeof(string_description_for);
         usb_transmit.cdata = string_description_for;
         usb_transmit.cflag = 0x1;
         break;
    case 0x5:
         usb_transmit.length= sizeof(string_description_fiv);
         usb_transmit.cdata = string_description_fiv;
         usb_transmit.cflag = 0x1;
         break;
    default:
         usb_set_mode(stall_inout);
         return 0x0;
    }
    return 0x1;
}
/********************************************************************************/
/* function : usb_get_descriptor()                                              */
/* created  : hw-chen                                                           */
/* descript : 獲取描述符                                                        */
/********************************************************************************/
void usb_get_descriptor(void)
{   unsigned char rdata=EP0DATA_0;
    if((rdata!=usb_i_type_device)&&(rdata!=usb_i_type_endpoint)&&(rdata!=usb_i_type_interface))
    {   usb_set_mode(stall_inout);
        return;
    }
    switch(EP0DATA_3)
    {
    case DESCRIPTOR_DEVICE :
         usb_transmit.length= sizeof(st_descript_device);
         usb_transmit.cdata = descriptor_device;
         usb_transmit.cflag = 0x1;
         break;
    case DESCRIPTOR_CONFIGURATION :
         usb_transmit.length= sizeof(st_all_confiure);
         usb_transmit.cdata = &all_confiure[0x0];
         usb_transmit.cflag = 0x1;
         break;
    case DESCRIPTOR_STRING :
         if(usb_get_string()==0x0)
         {  return;
         }
         break;
    case DESCRIPTOR_HID :
         usb_transmit.length= sizeof(st_descript_hid);
         usb_transmit.cdata = &all_confiure[sizeof(st_descript_configure)+sizeof(st_descript_interface)];
         usb_transmit.cflag = 0x1;
         break;
    case DESCRIPTOR_REPORT :
         usb_transmit.length= sizeof(HID_report_table);
         usb_transmit.cdata = HID_report_table;
         usb_transmit.cflag = 0x1;
         break;
    default :
         usb_set_mode(stall_inout);
         return;
    }
    ctrl_toggle_bit=0x1;
    usb_control_read();
}

/********************************************************************************/
/* function : usb_get_configuration()                                           */
/* created  : hw-chen                                                           */
/* descript : 獲取配置                                                          */
/********************************************************************************/
void usb_get_configuration(void)
{   if((EP0DATA_0!=usb_i_type_device))
    {   usb_set_mode(stall_inout);
        return;
    }
    usb_transmit.length= 0x1;                       //configuration is 1-byte long

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产一区二区三| 亚洲综合久久久久| 97精品久久久午夜一区二区三区 | 久久综合久久综合亚洲| jizz一区二区| 青青草97国产精品免费观看无弹窗版| 久久亚洲一级片| 色综合久久久久久久| 男女性色大片免费观看一区二区| 国产三级一区二区三区| 欧美日韩中文国产| 国产ts人妖一区二区| 亚洲超丰满肉感bbw| 国产亚洲人成网站| 7777精品伊人久久久大香线蕉超级流畅| 国产一区二区三区在线看麻豆| 亚洲另类在线视频| 欧美性三三影院| 成人美女视频在线看| 蜜臀久久99精品久久久画质超高清| 国产欧美一区二区在线观看| 日本久久一区二区三区| 久久www免费人成看片高清| 亚洲精品v日韩精品| 2021中文字幕一区亚洲| 99精品欧美一区二区蜜桃免费 | 成人毛片在线观看| 蜜桃久久精品一区二区| 亚洲黄一区二区三区| 国产日韩v精品一区二区| 欧美一卡二卡三卡| 欧美午夜在线一二页| 成人激情开心网| 精品一区二区三区在线视频| 亚洲精品欧美专区| 国产精品久久久久久久裸模| 久久久久久久久久看片| 欧美一级精品在线| 欧美日韩久久不卡| 欧美视频在线观看一区二区| 91美女片黄在线| 成人av片在线观看| 国产电影精品久久禁18| 久久www免费人成看片高清| 婷婷综合在线观看| 亚洲国产sm捆绑调教视频| 中文字幕在线观看不卡| 国产三级三级三级精品8ⅰ区| 26uuu欧美日本| 精品久久久久久久久久久久久久久 | 欧美日韩在线播| 欧美性大战久久| 99re视频精品| 色综合久久综合中文综合网| 91免费观看在线| 日本乱人伦aⅴ精品| 在线中文字幕一区二区| 欧美性一级生活| 欧美影院一区二区三区| 欧美亚洲丝袜传媒另类| 色狠狠综合天天综合综合| 色爱区综合激月婷婷| 在线观看一区日韩| 欧美日韩一卡二卡三卡| 欧美精品aⅴ在线视频| 欧美精品亚洲二区| 欧美一区二区视频观看视频 | 国模一区二区三区白浆 | 国产69精品久久99不卡| 国产成人综合在线播放| 成人在线一区二区三区| 99国产欧美久久久精品| 色就色 综合激情| 911精品国产一区二区在线| 欧美大片在线观看一区二区| 2020国产精品自拍| 欧美精彩视频一区二区三区| 国产精品福利影院| 亚洲精选免费视频| 日韩综合在线视频| 国内精品免费**视频| va亚洲va日韩不卡在线观看| 91网站最新地址| 欧美三区在线视频| 欧美日本在线观看| 51精品秘密在线观看| 精品久久久久久久久久久久久久久| 久久先锋影音av鲁色资源网| 精品少妇一区二区三区视频免付费| 3atv一区二区三区| 久久精品一区二区三区四区| 一区二区三区毛片| 毛片av一区二区三区| 成人高清视频在线| 欧美精品一二三区| 国产精品婷婷午夜在线观看| 天天影视网天天综合色在线播放 | 中文字幕视频一区| 午夜精品久久久久久久99水蜜桃| 韩国女主播成人在线观看| 91美女精品福利| 日韩色视频在线观看| 成人欧美一区二区三区| 蜜桃av一区二区在线观看| eeuss国产一区二区三区| 欧美乱妇15p| 中文久久乱码一区二区| 午夜视频一区在线观看| 成人午夜又粗又硬又大| 91精品国产综合久久婷婷香蕉 | 中文字幕的久久| 爽好久久久欧美精品| 成人av资源在线| 日韩免费看的电影| 亚洲永久精品大片| 高清不卡一区二区在线| 欧美一区二区在线看| 亚洲欧美一区二区三区国产精品 | 欧美色精品在线视频| 精品日韩av一区二区| 亚洲精品视频在线观看免费 | 一区二区三区美女视频| 国产1区2区3区精品美女| 欧美精品久久一区| 亚洲欧美另类综合偷拍| 国产成人亚洲精品青草天美| 欧美一级高清片| 亚洲18色成人| 99国产精品久| 久久久亚洲高清| 日本成人在线网站| 欧美日韩亚洲综合一区| 一区二区中文字幕在线| 国产精品亚洲综合一区在线观看| 欧美一区二区视频在线观看2020| 一区二区三区精品在线| 色婷婷香蕉在线一区二区| 国产欧美一区二区精品性| 国产在线播精品第三| 日韩午夜激情av| 日韩电影在线观看一区| 欧美三级资源在线| 亚洲一二三区视频在线观看| 色狠狠桃花综合| 一区二区在线看| 国产不卡在线视频| 久久精品视频一区| 国产一区二区视频在线播放| 久久这里只有精品首页| 久久精品国产亚洲一区二区三区| 在线视频欧美精品| 国产精品国产三级国产普通话三级| 激情综合网av| 久久综合色综合88| 国产九色精品成人porny | 国产精品福利一区| jlzzjlzz亚洲日本少妇| 亚洲欧洲日产国产综合网| 成人av在线播放网址| 国产精品家庭影院| 91无套直看片红桃| 亚洲最快最全在线视频| 日本韩国精品一区二区在线观看| 一区二区三区精品在线观看| 欧美日韩国产精品成人| 蜜桃久久久久久久| 久久久久久夜精品精品免费| 国产激情一区二区三区四区 | 极品瑜伽女神91| 国产欧美一区二区三区网站| 成人av网在线| 亚洲午夜一区二区| 欧美一区二区三区四区五区 | 亚洲欧美另类小说| 欧美亚洲图片小说| 麻豆91在线播放免费| 国产午夜精品理论片a级大结局 | 国产精品888| 亚洲国产综合人成综合网站| 欧美va亚洲va香蕉在线| 91精彩视频在线观看| 激情综合色丁香一区二区| 亚洲欧美国产毛片在线| 欧美va亚洲va| 欧美色视频在线| 成人99免费视频| 久久精品99国产国产精| 18欧美乱大交hd1984| 亚洲精品一线二线三线无人区| 一本大道av一区二区在线播放| 久久99精品久久久久久国产越南 | 欧美无砖砖区免费| 国产老妇另类xxxxx| 亚洲 欧美综合在线网络| 国产精品久久久久久妇女6080| 91麻豆精品国产91久久久| 91麻豆精品视频| 国产精品77777| 蜜臀91精品一区二区三区 | 欧美一级免费大片|