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

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

?? usbcore.lst

?? 此源代碼為雙接口法USB鍵盤鼠標開發源代碼
?? LST
?? 第 1 頁 / 共 5 頁
字號:
 745          /********************************************************************
 746          函數功能:USB斷開連接函數。
 747          入口參數:無。
 748          返    回:無。
 749          備    注:無。
 750          ********************************************************************/
 751          void UsbDisconnect(void)
 752          {
 753   1      #ifdef DEBUG0
 754   1       Prints("斷開USB連接。\r\n");
 755   1      #endif
 756   1       D12WriteCommand(D12_SET_MODE);  //寫設置模式命令
 757   1       D12WriteByte(0x06); //設置模式的第一字節
 758   1       D12WriteByte(0x47); //設置模式的第二字節
 759   1       DelayXms(1000);  //延遲1秒
 760   1      }
 761          ////////////////////////End of function//////////////////////////////
 762          
 763          /********************************************************************
 764          函數功能:USB連接函數。
 765          入口參數:無。
 766          返    回:無。
 767          備    注:無。
 768          ********************************************************************/
 769          void UsbConnect(void)
 770          {
 771   1      #ifdef DEBUG0
 772   1       Prints("連接USB。\r\n");
 773   1      #endif
 774   1       D12WriteCommand(D12_SET_MODE);  //寫設置模式命令
 775   1       D12WriteByte(0x16); //設置模式的第一字節
 776   1       D12WriteByte(0x47); //設置模式的第二字節
 777   1      }
 778          ////////////////////////End of function//////////////////////////////
 779          
 780          /********************************************************************
 781          函數功能:總線掛起中斷處理函數。
 782          入口參數:無。
 783          返    回:無。
 784          備    注:無。
 785          ********************************************************************/
 786          void UsbBusSuspend(void)
 787          {
 788   1      #ifdef DEBUG0
 789   1       Prints("USB總線掛起。\r\n");
 790   1      #endif
 791   1      }
 792          ////////////////////////End of function//////////////////////////////
 793          
 794          /********************************************************************
 795          函數功能:總線復位中斷處理函數。
 796          入口參數:無。
 797          返    回:無。
 798          備    注:無。
 799          ********************************************************************/
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:36 PAGE 14  

 800          void UsbBusReset(void)
 801          {
 802   1      #ifdef DEBUG0
 803   1       Prints("USB總線復位。\r\n");
 804   1      #endif
 805   1       Ep1InIsBusy=0; //復位后端點1輸入緩沖區空閑。
 806   1       Ep2InIsBusy=0; //復位后端點2輸入緩沖區空閑。
 807   1      }
 808          ////////////////////////End of function//////////////////////////////
 809          
 810          /********************************************************************
 811          函數功能:根據pData和SendLength將數據發送到端點0的函數。
 812          入口參數:無。
 813          返    回:無。
 814          備    注:無。
 815          ********************************************************************/
 816          void UsbEp0SendData(void)
 817          {
 818   1       //將數據寫到端點中去準備發送
 819   1       //寫之前要先判斷一下需要發送的數據是否比端點0
 820   1       //最大長度大,如果超過端點大小,則一次只能發送
 821   1       //最大包長的數據。端點0的最大包長在DeviceDescriptor[7]
 822   1       if(SendLength>DeviceDescriptor[7])
 823   1       {
 824   2        //按最大包長度發送
 825   2        D12WriteEndpointBuffer(1,DeviceDescriptor[7],pSendData);
 826   2        //發送后剩余字節數減少最大包長
 827   2        SendLength-=DeviceDescriptor[7];
 828   2        //發送一次后指針位置要調整
 829   2        pSendData+= DeviceDescriptor[7];
 830   2       }
 831   1       else
 832   1       {
 833   2        if(SendLength!=0)
 834   2        {
 835   3         //不夠最大包長,可以直接發送
 836   3         D12WriteEndpointBuffer(1,SendLength,pSendData);
 837   3         //發送完畢后,SendLength長度變為0
 838   3         SendLength=0;
 839   3        }
 840   2        else //如果要發送的數據包長度為0
 841   2        {
 842   3         if(NeedZeroPacket==1) //如果需要發送0長度數據
 843   3         {
 844   4          D12WriteEndpointBuffer(1,0,pSendData); //發送0長度數據包
 845   4          NeedZeroPacket=0; //清需要發送0長度數據包標志
 846   4         }
 847   3        }
 848   2       }
 849   1      }
 850          ////////////////////////End of function//////////////////////////////
 851          
 852          /********************************************************************
 853          函數功能:端點0輸出中斷處理函數。
 854          入口參數:無。
 855          返    回:無。
 856          備    注:無。
 857          ********************************************************************/
 858          void UsbEp0Out(void)
 859          {
 860   1      #ifdef DEBUG0
 861   1       Prints("USB端點0輸出中斷。\r\n");
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:36 PAGE 15  

 862   1      #endif
 863   1       //讀取端點0輸出最后傳輸狀態,該操作清除中斷標志
 864   1       //并判斷第5位是否為1,如果是,則說明是建立包
 865   1       if(D12ReadEndpointLastStatus(0)&0x20)
 866   1       {
 867   2        D12ReadEndpointBuffer(0,16,Buffer); //讀建立過程數據
 868   2        D12AcknowledgeSetup(); //應答建立包
 869   2        D12ClearBuffer(); //清緩沖區
 870   2        //將緩沖數據填到設備請求的各字段中
 871   2        bmRequestType=Buffer[0];
 872   2        bRequest=Buffer[1];
 873   2        wValue=Buffer[2]+(((uint16)Buffer[3])<<8);
 874   2        wIndex=Buffer[4]+(((uint16)Buffer[5])<<8);
 875   2        wLength=Buffer[6]+(((uint16)Buffer[7])<<8);
 876   2        //下面的代碼判斷具體的請求,并根據不同的請求進行相關操作
 877   2        //如果D7位為1,則說明是輸入請求
 878   2        if((bmRequestType&0x80)==0x80)
 879   2        {
 880   3         //根據bmRequestType的D6~5位散轉,D6~5位表示請求的類型
 881   3         //0為標準請求,1為類請求,2為廠商請求。
 882   3         switch((bmRequestType>>5)&0x03)
 883   3         {
 884   4          case 0:  //標準請求
 885   4           #ifdef DEBUG0
 886   4            Prints("USB標準輸入請求:");
 887   4           #endif
 888   4           //USB協議定義了幾個標準輸入請求,我們實現這些標準請求即可
 889   4           //請求的代碼在bRequest中,對不同的請求代碼進行散轉
 890   4           //事實上,我們還需要對接收者進行散轉,因為不同的請求接收者
 891   4           //是不一樣的。接收者在bmRequestType的D4~D0位中定義。
 892   4           //我們這里為了簡化操作,有些就省略了對接收者的判斷。
 893   4           //例如獲取描述符的請求,只根據描述符的類型來區別。
 894   4           switch(bRequest)
 895   4           {
 896   5            case GET_CONFIGURATION: //獲取配置
 897   5             #ifdef DEBUG0
 898   5              Prints("獲取配置。\r\n");
 899   5             #endif
 900   5            break;
 901   5            
 902   5            case GET_DESCRIPTOR:  //獲取描述符
 903   5             #ifdef DEBUG0
 904   5              Prints("獲取描述符——");
 905   5             #endif
 906   5             //對描述符類型進行散轉,對于全速設備,
 907   5             //標準請求只支持發送到設備的設備、配置、字符串三種描述符
 908   5             switch((wValue>>8)&0xFF)
 909   5              {
 910   6               case DEVICE_DESCRIPTOR: //設備描述符
 911   6                #ifdef DEBUG0
 912   6                 Prints("設備描述符。\r\n");
 913   6                #endif
 914   6                pSendData=DeviceDescriptor;  //需要發送的數據
 915   6                //判斷請求的字節數是否比實際需要發送的字節數多
 916   6                //這里請求的是設備描述符,因此數據長度就是
 917   6                //DeviceDescriptor[0]。如果請求的比實際的長,
 918   6                //那么只返回實際長度的數據
 919   6                if(wLength>DeviceDescriptor[0])
 920   6                {
 921   7                 SendLength=DeviceDescriptor[0];
 922   7                 if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數個數據包時
 923   7                 {
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:36 PAGE 16  

 924   8                  NeedZeroPacket=1; //需要返回0長度的數據包
 925   8                 }
 926   7                }
 927   6                else
 928   6                {
 929   7                 SendLength=wLength;
 930   7                }
 931   6                //將數據通過EP0返回
 932   6                UsbEp0SendData();
 933   6               break;
 934   6               
 935   6               case CONFIGURATION_DESCRIPTOR:  //配置描述符
 936   6                #ifdef DEBUG0
 937   6                 Prints("配置描述符。\r\n");
 938   6                #endif
 939   6                pSendData=ConfigurationDescriptor; //需要發送的數據為配置描述符
 940   6                //判斷請求的字節數是否比實際需要發送的字節數多
 941   6                //這里請求的是配置描述符集合,因此數據長度就是
 942   6                //ConfigurationDescriptor[3]*256+ConfigurationDescriptor[2]。
 943   6                //如果請求的比實際的長,那么只返回實際長度的數據
 944   6                SendLength=ConfigurationDescriptor[3];
 945   6                SendLength=SendLength*256+ConfigurationDescriptor[2];
 946   6                if(wLength>SendLength)
 947   6                {
 948   7                 if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數個數據包時
 949   7                 {
 950   8                  NeedZeroPacket=1; //需要返回0長度的數據包
 951   8                 }
 952   7                }
 953   6                else
 954   6                {
 955   7                 SendLength=wLength;
 956   7                }
 957   6                //將數據通過EP0返回
 958   6                UsbEp0SendData();
 959   6               break;
 960   6               
 961   6               case STRING_DESCRIPTOR:  //字符串描述符
 962   6                #ifdef DEBUG0
 963   6                 Prints("字符串描述符");
 964   6                #endif
 965   6                switch(wValue&0xFF)  //根據wValue的低字節(索引值)散轉
 966   6                {
 967   7                 case 0:  //獲取語言ID
 968   7                  #ifdef DEBUG0
 969   7                   Prints("(語言ID)。\r\n");
 970   7                  #endif
 971   7                  pSendData=LanguageId;
 972   7                  SendLength=LanguageId[0];
 973   7                 break;
 974   7                 
 975   7                 case 1:  //廠商字符串的索引值為1,所以這里為廠商字符串
 976   7                 #ifdef DEBUG0
 977   7                   Prints("(廠商描述)。\r\n");
 978   7                  #endif
 979   7                  pSendData=ManufacturerStringDescriptor;
 980   7                  SendLength=ManufacturerStringDescriptor[0];
 981   7                 break;
 982   7                 
 983   7                 case 2:  //產品字符串的索引值為2,所以這里為產品字符串
 984   7                 #ifdef DEBUG0
 985   7                   Prints("(產品描述)。\r\n");
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:36 PAGE 17  

 986   7                  #endif
 987   7                  pSendData=ProductStringDescriptor;
 988   7                  SendLength=ProductStringDescriptor[0];
 989   7                 break;
 990   7                 
 991   7                 case 3:  //產品序列號的索引值為3,所以這里為序列號
 992   7                 #ifdef DEBUG0
 993   7                   Prints("(產品序列號)。\r\n");
 994   7                  #endif
 995   7                  pSendData=SerialNumberStringDescriptor;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产人妖系列| 日本欧美韩国一区三区| 日韩欧美色综合| 欧美浪妇xxxx高跟鞋交| 欧美性一级生活| 91精品在线观看入口| 欧美日本一区二区三区四区| 在线精品视频免费观看| 色播五月激情综合网| 在线中文字幕一区二区| 在线一区二区三区四区| 欧美午夜电影网| 日韩三区在线观看| 2014亚洲片线观看视频免费| 国产欧美日韩视频在线观看| 综合欧美亚洲日本| 亚洲主播在线观看| 免费成人在线观看| 高清国产午夜精品久久久久久| 国产a久久麻豆| 欧美亚洲日本一区| 精品久久久久久久久久久久久久久久久 | 一区二区视频在线看| 亚洲一卡二卡三卡四卡| 麻豆freexxxx性91精品| 国产mv日韩mv欧美| 欧美性做爰猛烈叫床潮| 久久亚洲精精品中文字幕早川悠里 | 懂色一区二区三区免费观看| 97se亚洲国产综合自在线不卡| 欧美性做爰猛烈叫床潮| 久久婷婷成人综合色| 一区二区三区精品在线观看| 另类小说色综合网站| 91尤物视频在线观看| 日韩精品一区二区三区蜜臀| 中文字幕视频一区二区三区久| 亚洲一区二区欧美| 国产成人综合网| 91精品国产色综合久久久蜜香臀| 国产亚洲短视频| 天天综合色天天| 91一区二区在线| 国产丝袜美腿一区二区三区| 亚洲国产精品自拍| 国产91精品入口| 日韩午夜激情视频| 亚洲一区二区视频| 不卡免费追剧大全电视剧网站| 日韩一区二区三区在线视频| 又紧又大又爽精品一区二区| 国产.精品.日韩.另类.中文.在线.播放 | 国产欧美精品一区二区色综合| 午夜欧美视频在线观看| 99国产精品久久久| 中文字幕乱码一区二区免费| 久久99精品久久久久婷婷| 欧美日韩高清不卡| 亚洲国产一区二区a毛片| jiyouzz国产精品久久| 久久精品亚洲国产奇米99| 日韩精品乱码免费| 在线观看av一区二区| 亚洲三级在线免费观看| 国产精品99精品久久免费| 精品久久久久久综合日本欧美| 日韩精品成人一区二区在线| 欧美色网一区二区| 一区二区三区不卡在线观看| 日本韩国精品一区二区在线观看| 国产精品黄色在线观看| 99久久久久久| 亚洲免费av高清| 在线国产电影不卡| 五月婷婷综合网| 91精品国产综合久久久久久久久久 | 日韩三区在线观看| 青青草97国产精品免费观看| 日韩欧美综合一区| 久久国产日韩欧美精品| 久久美女高清视频| jlzzjlzz亚洲日本少妇| 亚洲在线观看免费| 欧美性一区二区| 男男成人高潮片免费网站| 日韩视频中午一区| 国产精品一区二区三区四区| 中文字幕色av一区二区三区| 成人国产一区二区三区精品| 亚洲三级在线播放| 欧美日韩激情一区二区三区| 日本美女一区二区三区| 久久久久久久久一| 97精品国产露脸对白| 偷拍自拍另类欧美| 精品国产自在久精品国产| 丁香激情综合国产| 亚洲国产精品麻豆| 精品福利视频一区二区三区| 国产不卡视频在线播放| 亚洲一区二区美女| 久久蜜桃av一区精品变态类天堂| 91在线视频网址| 日本不卡一区二区| 国产精品午夜久久| 91麻豆精品久久久久蜜臀| 国产成人综合视频| 亚洲国产日韩a在线播放性色| 欧美成人video| 91亚洲大成网污www| 日本美女视频一区二区| 亚洲天堂a在线| 亚洲精品一区二区三区福利| 91视视频在线观看入口直接观看www | 成人福利在线看| 日日嗨av一区二区三区四区| 中文字幕欧美国产| 91精品国产综合久久久久久久久久 | 中文字幕在线不卡| 91精品麻豆日日躁夜夜躁| 99在线视频精品| 久久国产成人午夜av影院| 亚洲欧美日韩小说| 久久精品在线观看| 欧美一区二区三区四区五区 | 亚洲女人的天堂| 日韩片之四级片| 欧美日韩精品系列| 91免费视频观看| 国产精品亚洲视频| 精品一区二区三区久久| 日本色综合中文字幕| 亚洲综合色噜噜狠狠| 国产精品视频你懂的| 久久久午夜电影| 精品奇米国产一区二区三区| 欧美日韩成人在线| 欧美色图第一页| 91国偷自产一区二区开放时间 | 成人午夜碰碰视频| 久久精品av麻豆的观看方式| 午夜激情一区二区| 亚洲午夜免费视频| 亚洲一区二区成人在线观看| 自拍偷拍亚洲欧美日韩| 最新欧美精品一区二区三区| 久久久久久黄色| 久久精品视频在线免费观看| 久久综合av免费| 26uuu色噜噜精品一区二区| 日韩欧美成人午夜| 日韩欧美国产午夜精品| 日韩视频一区二区| 精品久久久久一区| 精品国产在天天线2019| 26uuu亚洲婷婷狠狠天堂| 久久午夜电影网| 国产欧美日韩综合精品一区二区| 2021久久国产精品不只是精品| 久久午夜羞羞影院免费观看| 久久日韩粉嫩一区二区三区| 国产欧美精品国产国产专区| 国产精品欧美一区二区三区| 亚洲欧美激情小说另类| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲成人www| 九九视频精品免费| 成人精品亚洲人成在线| 色综合久久综合网97色综合| 欧美在线视频日韩| 精品国偷自产国产一区| 国产欧美精品国产国产专区| 亚洲精品欧美二区三区中文字幕| 亚洲一卡二卡三卡四卡无卡久久| 热久久久久久久| 国产成人aaa| 欧美色图天堂网| 久久影院午夜片一区| 自拍偷自拍亚洲精品播放| 一区av在线播放| 精品综合免费视频观看| 成a人片国产精品| 4438亚洲最大| 亚洲欧洲性图库| 日韩一区精品字幕| 成人国产免费视频| 欧美一区二区三区在线观看| 国产精品全国免费观看高清 | 日韩免费看网站| 亚洲激情六月丁香| 国产精品88av| 欧美日韩国产美女| 国产精品视频观看| 热久久免费视频| 91精品1区2区| 国产精品久久久久影院亚瑟 | 日韩精品一级中文字幕精品视频免费观看 | 午夜精品久久久久久久| 风间由美一区二区三区在线观看| 欧美高清你懂得|