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

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

?? usbcore.c

?? 基于AT91SAM7S64單片機的UsbHid的實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
            NeedZeroPacket=1; //需要返回0長度的數據包
           }
          }
          else
          {
           SendLength=wLength;
          }
          //將數據通過EP0返回
          UsbEp0SendData();
         break;
                 
         default:  //其它描述符
          #ifdef DEBUG0
           Prints("其他描述符,描述符代碼:");
           PrintHex((wValue>>8)&0xFF);
           Prints("\r\n");
          #endif
         break;
        }
       break;
      
      case GET_INTERFACE: //獲取接口
       #ifdef DEBUG0
        Prints("獲取接口。\r\n");
       #endif
      break;
      
      case GET_STATUS: //獲取狀態
       #ifdef DEBUG0
        Prints("獲取狀態。\r\n");
       #endif
      break;
      
      case SYNCH_FRAME: //同步幀
       #ifdef DEBUG0
        Prints("同步幀。\r\n");
       #endif
      break;
      
      default:  //未定義的標準請求
       #ifdef DEBUG0
        Prints("錯誤:未定義的標準輸入請求。\r\n");
       #endif       
      break;
     }
    break;
    
    case 1:  //類請求
     #ifdef DEBUG0
      Prints("USB類輸入請求:\r\n");
     #endif
     switch(bRequest)
     {     
      default:
       #ifdef DEBUG0
        Prints("未知類請求。\r\n");
       #endif
       SendLength=0;
       NeedZeroPacket=1;
      break;
     }
    //判斷請求的字節數是否比實際需要發送的字節數多
    //如果請求的比實際的長,那么只返回實際長度的數據
    if(wLength>SendLength)
    {
     if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數個數據包時
     {
      NeedZeroPacket=1; //需要返回0長度的數據包
     }
    }
    else
    {
     SendLength=wLength;
    }
    //將數據通過EP0返回
    UsbEp0SendData();
    break;
    
    case 2:  //廠商請求
     #ifdef DEBUG0
      Prints("USB廠商輸入請求:\r\n");
     #endif
    break;
    
    default: //未定義的請求。這里只顯示一個報錯信息。
     #ifdef DEBUG0
      Prints("錯誤:未定義的輸入請求。\r\n");
     #endif
    break;
   }
  }
  //否則說明是輸出請求
  else //if(bmRequestType&0x80==0x80)之else
  {
   //根據bmRequestType的D6~5位散轉,D6~5位表示請求的類型
   //0為標準請求,1為類請求,2為廠商請求。
   switch((bmRequestType>>5)&0x03)
   {
    case 0:  //標準請求
     #ifdef DEBUG0
      Prints("USB標準輸出請求:");
     #endif
     //USB協議定義了幾個標準輸出請求,我們實現這些標準請求即可
     //請求的代碼在bRequest中,對不同的請求代碼進行散轉
     switch(bRequest)
     {
      case CLEAR_FEATURE: //清除特性
       #ifdef DEBUG0
        Prints("清除特性。\r\n");
       #endif
      break;
      
      case SET_ADDRESS:  //設置地址
       #ifdef DEBUG0
        Prints("設置地址。地址為:");
        PrintHex(wValue&0xFF); //顯示所設置的地址
        Prints("\r\n");
       #endif
       //設置地址沒有數據過程,直接進入到狀態過程,返回一個0長度的數據包
       SendLength=0;
       NeedZeroPacket=1;
       //將數據通過EP0返回
       UsbEp0SendData();
       UsbChipWriteAddress(wValue&0xFF); //wValue中的低字節是設置的地址值
      break;
      
      case SET_CONFIGURATION: //設置配置
       #ifdef DEBUG0
        Prints("設置配置。\r\n");
       #endif
       //wValue的低字節為配置的值,如果該值為非0,才能使能非0端點。        
       //保存當前配置值
       ConfigValue=wValue&0xFF;
       //設置芯片的config值     
       UsbChipSetConfig(ConfigValue); 
         
       //使能非0端點。非0端點只有在設置為非0的配置后才能使能。
       UsbChipSetEndpointEnable(ConfigValue);
      
       //返回一個0長度的狀態數據包
       SendLength=0;
       NeedZeroPacket=1;
       //將數據通過EP0返回
       UsbEp0SendData();
      break;
      
      case SET_DESCRIPTOR: //設置描述符
       #ifdef DEBUG0
        Prints("設置描述符。\r\n");
       #endif
      break;
      
      case SET_FEATURE: //設置特性
       #ifdef DEBUG0
        Prints("設置特性。\r\n");
       #endif
      break;

      case SET_INTERFACE: //設置接口
       #ifdef DEBUG0
        Prints("設置接口。\r\n");
       #endif
      break;      
      
      default:  //未定義的標準請求
       #ifdef DEBUG0
        Prints("錯誤:未定義的標準輸出請求。\r\n");
        Prints("未知請求。\r\n");        
       #endif
        //只需要返回一個0長度的數據包即可
        SendLength=0;
        NeedZeroPacket=1;
        //將數據通過EP0返回
        UsbEp0SendData();
      break;
     }
    break;
    
    case 1:  //類請求
     #ifdef DEBUG0
      Prints("USB類輸出請求:");
     #endif
     switch(bRequest)
     {
      case SET_IDLE:
       #ifdef DEBUG0
        Prints("設置空閑。\r\n");
       #endif
       //只需要返回一個0長度的數據包即可
       SendLength=0;
       NeedZeroPacket=1;
       //將數據通過EP0返回
       UsbEp0SendData();
      break;
      
      default:
       #ifdef DEBUG0
        Prints("未知請求。\r\n");
       #endif        
        //只需要返回一個0長度的數據包即可
        SendLength=0;
        NeedZeroPacket=1;
        //將數據通過EP0返回
        UsbEp0SendData();
      break;
     }
    break;
    
    case 2:  //廠商請求
     #ifdef DEBUG0
      Prints("USB廠商輸出請求:\r\n");
     #endif
    break;
    
    default: //未定義的請求。這里只顯示一個報錯信息。
     #ifdef DEBUG0
      Prints("錯誤:未定義的輸出請求。\r\n");
     #endif
    break;
   }
  }
 }
 //普通數據輸出
 else //判斷setup包之else
 {
  ClrCsr(0,1<<7);  //設置DIR為0
  UsbEp0DataOut(); //處理標準請求的數據部分
 }
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:端點0輸入中斷處理函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbEp0In(void)
{
#ifdef DEBUG0
 Prints("USB端點0輸入中斷。\r\n");
#endif
 //清除端點0的輸入完成中斷標志位
 ClrCsr(0,1<<0);
 
 //發送剩余的字節數
 UsbEp0SendData();
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:端點1輸入中斷處理函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbEp1In(void)
{
#ifdef DEBUG0
 Prints("USB端點1輸入中斷。\r\n");
#endif
 //清除端點1的輸入完成中斷標志位
 ClrCsr(1,1<<0);
 //端點1輸入處于空閑狀態
 Ep1InIsBusy=0;
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:端點2輸出中斷處理函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbEp2Out(void)
{
 uint8 Buf[64],Len;
 
#ifdef DEBUG0
 Prints("USB端點2輸出中斷。\r\n");
#endif
 
 //清除端點2輸出的中斷標志位
 //無操作
  
 //讀取端點2的數據。返回值為實際讀到的數據字節數
 Len=UsbChipReadEndpointBuffer(2,64,Buf);
 //清除端點緩沖區
 UsbChipClearBuffer(2);
 if(Len!=8) return;  //如果長度不是8,說明不是我們應用程序發送的數據,直接返回
 //輸出報告第1字節為LED狀態,某位為1時,表示LED亮。
 if(Buf[0]&0x02) //LED2
 {
  OnLed2();
 }
 else
 {
  OffLed2();
 }
 if(Buf[0]&0x04) //LED3
 {
  OnLed3();
 }
 else
 {
  OffLed3();
 }
 if(Buf[0]&0x08) //LED4
 {
  OnLed4();
 }
 else
 {
  OffLed4();
 }
 
 LcdSetPoint(0,24);   //設置位置
 LcdPrints("1 2 3 4 5 6 7 8");  //顯示位置
 LcdSetPoint(0,32);
 //在LCD上也顯示按鍵狀態
 for(Len=0;Len<8;Len++)
 {
  if(Buf[0]&(1<<Len))
  {
   LcdPrints("* ");
  }
  else
  {
   LcdPrints("  ");
  }
 }
 LcdRefresh();  //刷新LCD
 
 //輸出報告的第二字節非0時,清除發送計數器Count。
 if(Buf[1]!=0)
 {
  Count=0;
 }
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:端點3輸入中斷處理函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbEp3In(void)
{
#ifdef DEBUG0
 Prints("USB端點3輸入中斷。\r\n");
#endif
 //清除端點3的輸入完成中斷標志位
 ClrCsr(3,1<<0);
 //端點3輸入處于空閑狀態
 Ep3InIsBusy=0;
}
////////////////////////End of function//////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩不卡一区| 久久一区二区三区四区| 日韩免费一区二区| 亚洲欧洲精品天堂一级 | 欧美综合一区二区三区| 日韩欧美不卡在线观看视频| 成人欧美一区二区三区白人| 久久91精品国产91久久小草| 欧美亚洲综合色| 中文字幕精品—区二区四季| 久久激情五月激情| 欧美日韩的一区二区| 一区二区三区视频在线观看| 国产成人av自拍| 久久综合九色综合97婷婷| 亚洲成人免费影院| 91成人国产精品| 自拍偷自拍亚洲精品播放| 国产精品一二三区| 精品福利av导航| 久久99蜜桃精品| 日韩欧美一级片| 蜜桃久久久久久| 欧美精品久久99久久在免费线| 亚洲精品乱码久久久久久| 91在线视频网址| 中文字幕一区在线| 97国产一区二区| 综合久久给合久久狠狠狠97色| 成人午夜在线免费| 国产精品久久久久一区二区三区共| 国产精品一区二区男女羞羞无遮挡 | 99麻豆久久久国产精品免费优播| 久久女同精品一区二区| 91色porny蝌蚪| 国产一区久久久| 欧美tk—视频vk| 免费av网站大全久久| 欧美一区二区三区在线观看| 日韩国产精品久久久久久亚洲| 欧美乱妇一区二区三区不卡视频 | 精品国产伦一区二区三区观看体验 | 免费看精品久久片| 精品国产一区二区国模嫣然| 激情久久五月天| 国产亚洲一本大道中文在线| 成人午夜大片免费观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产人久久人人人人爽| 波多野洁衣一区| 亚洲综合另类小说| 日韩免费观看2025年上映的电影| 国产一区二区毛片| 国产精品国模大尺度视频| 在线看日韩精品电影| 奇米777欧美一区二区| 欧美成人伊人久久综合网| 国产黄色精品网站| 亚洲黄色尤物视频| 日韩亚洲欧美高清| 丁香五精品蜜臀久久久久99网站 | 性做久久久久久| 99re这里都是精品| 亚洲精品视频一区| 3d动漫精品啪啪一区二区竹菊| 九色综合狠狠综合久久| 久久精品视频免费| 欧美色图第一页| 国产综合成人久久大片91| 国产精品美女www爽爽爽| 欧美撒尿777hd撒尿| 国内成人精品2018免费看| 亚洲精品乱码久久久久久| 日韩一区二区视频在线观看| 91一区二区在线| 蜜臀av一区二区| 亚洲精品ww久久久久久p站| 日韩欧美一区二区在线视频| 91在线观看成人| 亚洲韩国精品一区| 欧美在线free| 国产大陆亚洲精品国产| 亚洲成a人v欧美综合天堂| 欧美激情一区二区三区不卡| 51午夜精品国产| 色综合天天综合狠狠| 狠狠色狠狠色综合系列| 亚洲国产视频直播| 中文字幕亚洲一区二区av在线 | 国产精品国产三级国产普通话99| 制服丝袜成人动漫| 在线免费观看不卡av| 成熟亚洲日本毛茸茸凸凹| 久久国产尿小便嘘嘘尿| 亚洲尤物视频在线| 日韩美女精品在线| 国产午夜精品一区二区三区四区| 日韩一区二区在线看| 欧美精品在线一区二区| 色综合亚洲欧洲| www.欧美.com| 成人性生交大片免费看中文 | av一二三不卡影片| 国产在线精品不卡| 精品一区二区三区在线观看国产| 亚洲成人av电影| 亚洲成人7777| 午夜在线成人av| 亚洲成人免费av| 性感美女久久精品| 亚洲成人高清在线| 性做久久久久久免费观看欧美| 亚洲一区二区三区国产| 亚洲自拍偷拍av| 亚洲一二三四区不卡| 亚洲国产综合91精品麻豆| 亚洲高清久久久| 午夜精品免费在线| 日本在线不卡视频| 美女视频一区二区| 久久精品国产成人一区二区三区| 久久疯狂做爰流白浆xx| 美女精品一区二区| 狠狠色狠狠色综合系列| 国产成人亚洲综合a∨猫咪 | 久久精品国产一区二区| 久久精品国产99国产精品| 精品午夜久久福利影院 | 美女mm1313爽爽久久久蜜臀| 免费在线观看一区二区三区| 激情深爱一区二区| 国产不卡一区视频| 91麻豆免费在线观看| 欧美日韩一区中文字幕| 6080午夜不卡| 国产欧美精品一区二区色综合朱莉 | 中文字幕在线不卡一区| 亚洲免费电影在线| 三级在线观看一区二区| 久久国产三级精品| 99精品在线免费| 欧美一区二视频| 国产欧美精品区一区二区三区| 综合欧美一区二区三区| 丝袜a∨在线一区二区三区不卡| 久久成人免费网站| av成人动漫在线观看| 欧美人牲a欧美精品| 精品福利视频一区二区三区| 亚洲视频狠狠干| 久久精品国产999大香线蕉| eeuss国产一区二区三区| 欧美日韩国产免费一区二区| 久久影院午夜论| 亚洲一区在线观看网站| 国产一区二区成人久久免费影院| 91亚洲精品一区二区乱码| 日韩亚洲欧美中文三级| 亚洲男人电影天堂| 国产一区二区三区高清播放| 91福利在线免费观看| 久久众筹精品私拍模特| 午夜精品福利一区二区蜜股av| 国产成人精品午夜视频免费| 在线成人小视频| 亚洲人成网站在线| 国产一区二区三区免费看| 欧美三级日本三级少妇99| 中文一区二区在线观看| 久久不见久久见中文字幕免费| 欧美四级电影在线观看| 国产精品丝袜一区| 久久99久久99小草精品免视看| 欧美性xxxxx极品少妇| 亚洲国产经典视频| 久久99精品久久久| 欧美高清激情brazzers| 亚洲美女屁股眼交| 粉嫩av一区二区三区粉嫩| 欧美v亚洲v综合ⅴ国产v| 亚洲第一在线综合网站| 91极品视觉盛宴| 国产精品久久毛片av大全日韩| 国产九九视频一区二区三区| 制服丝袜中文字幕亚洲| 亚洲国产成人va在线观看天堂| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩国产美| 亚洲欧美激情视频在线观看一区二区三区| 国产伦精品一区二区三区免费| 日韩一区二区三区精品视频| 亚洲大尺度视频在线观看| 在线精品亚洲一区二区不卡| 中文字幕一区不卡| 99久久精品99国产精品| 最新成人av在线| 色婷婷精品久久二区二区蜜臂av| 国产精品久久国产精麻豆99网站| 成人av先锋影音| 1000部国产精品成人观看|