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

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

?? usb.c

?? PS2和USB兼容的鼠標源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
    usb_transmit.mdata = &dev_status.configure;     //point at it
    usb_transmit.cflag = 0x0;
    usb_control_read();                             //initiate transfer
}

/********************************************************************************/
/* function : usb_get_report()                                                  */
/* created  : hw-chen                                                           */
/* descript : 獲取報告                                                          */
/********************************************************************************/
void usb_get_report(void)
{   if((EP0DATA_0!=usb_i_class_interface))
    {   usb_set_mode(stall_inout);
        return;
    }
    usb_transmit.length= (dev_status.protocol == REPT_PROTOCOL ? 4 : 3);
    usb_transmit.mdata = &mouse_status.button_byte;
    usb_transmit.cflag = 0x0;
    usb_control_read();
}

/********************************************************************************/
/* function : usb_get_protocol()                                                */
/* created  : hw-chen                                                           */
/* descript : 獲取協議                                                          */
/********************************************************************************/
void usb_get_protocol(void)
{   if((EP0DATA_0!=usb_i_class_interface))
    {   usb_set_mode(stall_inout);
        return;
    }
    usb_transmit.length= 0x1;                       //* set length of protocol
    usb_transmit.mdata = &dev_status.protocol;      //* aim usb_transmit at it
    usb_transmit.cflag = 0x0;
    usb_control_read();                             //* initiate transfer
}


/********************************************************************************/
/* function : usb_get_idle()                                                    */
/* created  : hw-chen                                                           */
/* descript : 獲取狀態                                                          */
/********************************************************************************/
void usb_get_idle(void)
{   if((EP0DATA_0!=usb_i_class_interface))
    {   usb_set_mode(stall_inout);
        return;
    }
    usb_transmit.length= 0x1;                               //idle is 1-byte long
    usb_transmit.mdata = &mouse_xmit_state.idle_period;     //point at it
    usb_transmit.cflag = 0x0;
    usb_control_read();                                     //initiate transfer
}

/********************************************************************************/
/* function : usb_set_configuration()                                           */
/* created  : hw-chen                                                           */
/* descript : 設置配置                                                          */
/********************************************************************************/
void usb_set_configuration(void)
{   if((EP0DATA_0!=usb_o_type_device))
    {   usb_set_mode(stall_inout);
        return;
    }
    if((EP0DATA_2!=UNCONFIG)&&(EP0DATA_2!=CONFIGURED))
    {   usb_set_mode(stall_inout);
        return;
    }
    dev_status.configure = EP0DATA_2;       //* set the configuration
    dev_status.ept1_stall= 0x0;             //* and clear EP1 stall
    EP1CNT &= ~DATATOGGLE;                  //* clear EP1's data toggle
    if((dev_status.configure==UNCONFIG))    //* not configured -- disable EP1 from responding
    {   EP1MODE=MODE_DISABLE;
    }
    else                                    //* configured -- NAK traffic on EP1
    {   DATA_toggle_bit=0x0;                 //*
        EP1MODE=MODE_NAK_IN;
    }
    usb_set_mode(MODE_STATUS_ONLY);
}

/********************************************************************************/
/* function : usb_set_address()                                                 */
/* created  : hw-chen                                                           */
/* descript : 設置地址                                                          */
/*            the address change cannot actually take place until the ensuing   */
/*            status-in is received from the host                               */
/*            so we just save the address and set a flag to indicate that a new */
/*            address was just received.  the code that handles ins will        */
/*            recognize this and set the address properly                       */
/********************************************************************************/
void usb_set_address(void)
{   if((EP0DATA_0!=usb_o_type_device))
    {   usb_set_mode(stall_inout);
        return;
    }
    dev_status.cur_addr=0x80|EP0DATA_2;
    usb_set_mode(MODE_STATUS_ONLY);
}


/********************************************************************************/
/* function : usb_clr_feature()                                                 */
/* created  : hw-chen                                                           */
/* descript : 清除標記                                                          */
/*            resume是由PC主機叫醒USB設備,而wake-up是由USB設備叫醒PC主機        */
/*            這個線程主要檢查兩個功能:                                         */
/*            1.清除USB設備叫醒PC主機請求                                       */
/*            2.清除端點1的STALL請求                                            */
/********************************************************************************/
void usb_clr_feature(void)
{   if((EP0DATA_0==usb_o_type_device)&&(EP0DATA_2==DEV_REM_WAKEUP)&&(EP0DATA_3==0x0))
    {   dev_status.rem_wakeup=DIS_REM_WAKEUP; /* disable remote wakeup */
        usb_set_mode(MODE_STATUS_ONLY);
        return;
    }
    if((EP0DATA_0==usb_o_type_endpoint)&&(dev_status.configure==CONFIGURED)&&(EP0DATA_2==EPT_STALL)&&(EP0DATA_3==0x0)&&(EP0DATA_4==0x81))
    {   dev_status.ept1_stall=0x0;      //* ep1 stall request not stalled
        EP1CNT &= ~DATATOGGLE;          //* clear data 0/1 bit
        EP1MODE = MODE_NAK_IN_OUT;  //* nak anything on endpoint 1 until ready
        usb_set_mode(MODE_STATUS_ONLY);
        return;
    }
    else
    {   usb_set_mode(stall_inout);
        return;
    }
}

/********************************************************************************/
/* function : usb_set_feature()                                                 */
/* created  : hw-chen                                                           */
/* descript : 設置標記                                                          */
/********************************************************************************/
void usb_set_feature(void)
{   if((EP0DATA_0==usb_o_type_device)&&(EP0DATA_2==DEV_REM_WAKEUP)&&(EP0DATA_3==0x0))
    {   dev_status.rem_wakeup=ENB_REM_WAKEUP;     //* set remote wakeup
        usb_set_mode(MODE_STATUS_ONLY);
        return;
    }
    if((EP0DATA_0==usb_o_type_endpoint)&&(dev_status.configure==CONFIGURED)&&(EP0DATA_2==EPT_STALL)&&(EP0DATA_3==0x0)&&(EP0DATA_4==0x81))
    {   dev_status.ept1_stall=0x1;      //* mark endpoint as stalled
        EP1MODE=stall_inout;            //* stall traffic on endpoint 1
        usb_set_mode(MODE_STATUS_ONLY);
        return;
    }
    else
    {   usb_set_mode(stall_inout);
        return;
    }
}


/********************************************************************************/
/* function : usb_set_idle()                                                    */
/* created  : hw-chen                                                           */
/* descript : 設置空閑                                                          */
/*            this routine is entered whenever a set idle request is received.  */
/*            see the hid spec for the rules on setting idle periods.           */
/********************************************************************************/
void usb_set_idle(void)
{   if((EP0DATA_0!=usb_o_class_interface)&&(EP0DATA_0!=usb_o_class_endpoint))
    {   usb_set_mode(stall_inout);
        return;
    }
    if((EP0DATA_4)||(EP0DATA_5))
    {   usb_set_mode(stall_inout);
        return;
    }
    if((mouse_xmit_state.idle_period==0x0))//current idle setting is off. set both the new period and the counter
    {   mouse_xmit_state.idle_period = EP0DATA_3;
        mouse_xmit_state.idle_counter= mouse_xmit_state.idle_period;
        usb_set_mode(MODE_STATUS_ONLY);
        return;
    }
    if((mouse_xmit_state.idle_counter<=0x2)) // counter for current idle period is nearly expiring. leave it alone, but set new idle period
    {   mouse_xmit_state.idle_period = EP0DATA_3;
        usb_set_mode(MODE_STATUS_ONLY);
        return;
    }
    if(EP0DATA_3>mouse_xmit_state.idle_counter) //* new period is shorter than the old one.  Force current idle period to expire soon,and set new idle period
    {   mouse_xmit_state.idle_period = EP0DATA_3;
        mouse_xmit_state.idle_counter = 1;
    }
    else //new period is longer than old one. set new idle period, and adjust current period to be equal to the new period, minus the counts that have already expired for the old one
    {   mouse_xmit_state.idle_period  = EP0DATA_3;
        mouse_xmit_state.idle_counter = EP0DATA_3 - mouse_xmit_state.idle_period;
    }
    usb_set_mode(MODE_STATUS_ONLY);
    return;
}

/********************************************************************************/
/* function : usb_set_protocol()                                                */
/* created  : hw-chen                                                           */
/* descript : 設置協議                                                          */
/********************************************************************************/
void usb_set_protocol(void)
{   if(((EP0DATA_0!=usb_o_class_interface)&&(EP0DATA_0!=usb_o_class_endpoint))||(EP0DATA_4)||(EP0DATA_5)||(EP0DATA_2>REPT_PROTOCOL))
    {   usb_set_mode(stall_inout);
    }
    else
    {   dev_status.protocol = EP0DATA_2;    //set the new protocol
        usb_set_mode(MODE_STATUS_ONLY);         //acknowledge
    }
}

/********************************************************************************/
/* function : usb_stall_inout()                                                 */
/* created  : hw-chen                                                           */
/* descript : 停止端點0                                                         */
/********************************************************************************/
void usb_stall_inout(void)
{   usb_set_mode(stall_inout);
}

/********************************************************************************/
/* function : usb_pro_in_request()                                              */
/* created  : hw-chen                                                           */
/* descript : HOST通過ACK確認端點零的IN數據包                                   */
/*            對于端點零,只要SETUP或者OUT事務更新了,EP0CNT寄存器就不能寫,需要   */
/*            讀取它就解鎖                                                      */
/********************************************************************************/
void usb_pro_in_request(void)
{   byte_count=EP0CNT;
    byte_count=0x0;
    if((usb_transmit.length))               //* if we've stuff to send, load it into fifo
    {   byte_count=usb_load_ctrl_buffer();
    }
    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.
    if((dev_status.cur_addr&0x80))          //* 如果地址在SETUP階段更新了,需要在IN包更新地址
    {   USBCR=dev_status.cur_addr;          //* enable the new address
        dev_status.cur_addr&=0x7F;          //* and clear the new address flag
    }
}

/********************************************************************************/
/* function : usb_pro_stander_setup()                                           */
/* created  : hw-chen                                                           */
/* descript : 處理端點0的標準類型的SETUP包                                      */
/********************************************************************************/
void usb_pro_stander_setup(void)
{   switch(EP0DATA_1)
    {
    case GET_STATUS:
         usb_get_status();
         break;
    case CLR_FEATURE:
         usb_clr_feature();
         break;
    case SET_FEATURE:
         usb_set_feature();
         break;
    case SET_ADDRESS:
         usb_set_address();
         break;
    case GET_DESCRIPTOR:
         usb_get_descriptor();
         break;
    case GET_CONFIGURATION:
         usb_get_configuration();
         break;
    case SET_CONFIGURATION:
         usb_set_configuration();
         break;
    case GET_INTERFACE:
         usb_get_status();
         break;
    default:
         usb_stall_inout();
         break;
    }
}


/********************************************************************************/
/* function : usb_pro_class_setup()                                             */
/* created  : hw-chen                                                           */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频在线观看一区| 亚洲一区二区五区| 精品国产电影一区二区| 欧美人体做爰大胆视频| 精品视频色一区| 欧美日韩一本到| 欧美色视频一区| 欧美人与禽zozo性伦| 欧美高清视频www夜色资源网| 91久久精品一区二区三区| 91美女片黄在线观看91美女| 97久久久精品综合88久久| 92国产精品观看| 欧美伊人久久大香线蕉综合69| 色哟哟一区二区在线观看| 色婷婷av一区二区三区大白胸| 色丁香久综合在线久综合在线观看| 91美女片黄在线观看91美女| 在线观看免费亚洲| 欧美日韩精品一二三区| 69堂成人精品免费视频| 欧美成人女星排名| 久久久久亚洲蜜桃| 国产精品麻豆视频| 一区二区三区中文在线观看| 亚瑟在线精品视频| 玖玖九九国产精品| 国产99精品在线观看| 91亚洲永久精品| 欧美日韩电影一区| 精品粉嫩超白一线天av| 国产精品入口麻豆九色| 亚洲一区二区三区四区在线| 日本成人中文字幕| 国产**成人网毛片九色 | 免费xxxx性欧美18vr| 国产曰批免费观看久久久| 99久久99久久久精品齐齐| 欧美浪妇xxxx高跟鞋交| 国产三级精品三级| 亚洲国产中文字幕| 美国欧美日韩国产在线播放| 成人国产精品视频| 欧美日本在线播放| 国产精品视频免费看| 午夜精品久久久久久| 国精品**一区二区三区在线蜜桃| 99久久久久免费精品国产| 9191成人精品久久| 国产精品久久久久久久蜜臀| 亚洲激情第一区| 国产真实乱偷精品视频免| 一本到不卡免费一区二区| 欧美v国产在线一区二区三区| 日韩一区中文字幕| 久久精品国产99| 在线视频综合导航| 国产视频在线观看一区二区三区 | 日韩高清不卡一区二区三区| 国产成人免费在线观看| 678五月天丁香亚洲综合网| 国产欧美一区二区精品久导航| 亚洲已满18点击进入久久| 国产精品性做久久久久久| 欧美日韩三级一区二区| 国产精品卡一卡二| 免费观看成人鲁鲁鲁鲁鲁视频| 91一区二区在线| 国产日韩亚洲欧美综合| 日韩在线一区二区三区| 91麻豆成人久久精品二区三区| 欧美va天堂va视频va在线| 一区二区在线免费观看| 成人手机在线视频| 精品福利二区三区| 日本v片在线高清不卡在线观看| 91麻豆文化传媒在线观看| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲精品视频自拍| 丰满岳乱妇一区二区三区| 欧美大尺度电影在线| 午夜视频久久久久久| 色婷婷久久综合| 中文字幕一区二区三区av| 国产精品一区二区三区乱码| 日韩一区二区高清| 亚洲不卡av一区二区三区| 色综合久久天天| 国产精品美女久久久久久久久久久 | 国产欧美日韩激情| 免费人成精品欧美精品| 欧美婷婷六月丁香综合色| 亚洲精品v日韩精品| 不卡av在线免费观看| 久久精品一级爱片| 韩日av一区二区| 日韩精品中文字幕一区二区三区| 午夜私人影院久久久久| 欧美日韩黄色一区二区| 亚洲最大色网站| 欧美亚洲国产怡红院影院| 一区二区不卡在线播放 | 国产**成人网毛片九色 | 亚洲精品成人在线| 91影院在线观看| 亚洲柠檬福利资源导航| 91女神在线视频| 一区二区三区中文在线观看| 在线视频一区二区三| 亚洲精品v日韩精品| 欧美伊人久久久久久午夜久久久久| 亚洲综合色丁香婷婷六月图片| 欧美性视频一区二区三区| 亚洲国产精品自拍| 亚洲国产aⅴ天堂久久| 欧美电影在线免费观看| 国产乱码精品一品二品| 亚洲综合成人在线| 欧美一三区三区四区免费在线看| 国产高清精品在线| 日韩经典中文字幕一区| 国产精品网友自拍| 亚洲精品一区二区在线观看| 99re在线精品| 一区二区视频在线看| 99re66热这里只有精品3直播 | 久久婷婷综合激情| 激情另类小说区图片区视频区| 亚洲精品在线观| www.在线欧美| 午夜精品久久久久久久久久久| 欧美一区二区二区| 国产福利视频一区二区三区| 国产欧美日韩卡一| 在线免费观看不卡av| 蜜桃视频一区二区三区| 国产欧美日韩激情| 欧美优质美女网站| 麻豆精品一区二区综合av| 久久久久久夜精品精品免费| 99国内精品久久| 日韩**一区毛片| 国产亚洲一二三区| 91色综合久久久久婷婷| 日韩国产一二三区| 国产日韩成人精品| 欧美性猛交xxxx乱大交退制版| 免费看欧美女人艹b| 亚洲国产成人在线| 欧美三级电影一区| 激情国产一区二区 | 91啪九色porn原创视频在线观看| 丝袜亚洲另类丝袜在线| 中文字幕国产一区| 欧美日韩成人综合| 懂色中文一区二区在线播放| 五月婷婷激情综合| 国产精品久久毛片av大全日韩| 9191久久久久久久久久久| 不卡av免费在线观看| 久久国产夜色精品鲁鲁99| 综合久久综合久久| 精品福利一区二区三区免费视频| 色一情一乱一乱一91av| 国产一区日韩二区欧美三区| 亚洲成人精品在线观看| 国产精品久久久久影院老司| 日韩免费观看2025年上映的电影 | 欧美一区二区三区四区高清| 处破女av一区二区| 日本欧美肥老太交大片| 国产精品二区一区二区aⅴ污介绍| 在线亚洲欧美专区二区| 国产成人免费高清| 亚洲一区二区三区国产| 26uuu色噜噜精品一区二区| 日本特黄久久久高潮| 伊人性伊人情综合网| 欧美变态凌虐bdsm| 色婷婷激情久久| k8久久久一区二区三区| 日韩成人伦理电影在线观看| 中文字幕亚洲区| 久久久久久久久岛国免费| 精品视频1区2区| 不卡一区二区中文字幕| 午夜一区二区三区在线观看| 国产午夜亚洲精品午夜鲁丝片| 国产精品一区二区久激情瑜伽| 亚洲综合偷拍欧美一区色| 欧美高清在线一区二区| 欧美精品第1页| 欧美美女直播网站| 一本大道久久精品懂色aⅴ| 久久国产精品无码网站| 日韩**一区毛片| 亚洲成人在线免费| 国产精品美女一区二区三区 | 国产乱人伦偷精品视频免下载 | 亚洲国产精品一区二区久久|