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

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

?? usbcore.c

?? USB HID類軟固件代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
0x35, 0x75, //電
0x11, 0x81, //腦
0x08, 0x57, //圈
0x08, 0x57, //圈
0x84, 0x76, //的
0x55, 0x00, //U
0x53, 0x00, //S
0x42, 0x00, //B
0x13, 0x4e, //專
0x3a, 0x53, //區
0x20, 0x00, // 
0x48, 0x00, //H
0x74, 0x00, //t
0x74, 0x00, //t
0x70, 0x00, //p
0x3a, 0x00, //:
0x2f, 0x00, ///
0x2f, 0x00, ///
0x67, 0x00, //g
0x72, 0x00, //r
0x6f, 0x00, //o
0x75, 0x00, //u
0x70, 0x00, //p
0x2e, 0x00, //.
0x65, 0x00, //e
0x64, 0x00, //d
0x6e, 0x00, //n
0x63, 0x00, //c
0x68, 0x00, //h
0x69, 0x00, //i
0x6e, 0x00, //n
0x61, 0x00, //a
0x2e, 0x00, //.
0x63, 0x00, //c
0x6f, 0x00, //o
0x6d, 0x00, //m
0x2f, 0x00, ///
0x39, 0x00, //9
0x33, 0x00, //3
0x2f, 0x00  ///
};
/////////////////////////廠商字符串結束/////////////////////////////

//字符串“《圈圈教你玩USB》之用戶自定義的USB HID設備”的Unicode編碼
//8位小端格式
code uint8 ProductStringDescriptor[54]={
54,         //該描述符的長度為54字節
0x03,       //字符串描述符的類型編碼為0x03
0x0a, 0x30, //《
0x08, 0x57, //圈
0x08, 0x57, //圈
0x59, 0x65, //教
0x60, 0x4f, //你
0xa9, 0x73, //玩
0x55, 0x00, //U
0x53, 0x00, //S
0x42, 0x00, //B
0x0b, 0x30, //》
0x4b, 0x4e, //之
0x28, 0x75, //用
0x37, 0x62, //戶
0xea, 0x81, //自
0x9a, 0x5b, //定
0x49, 0x4e, //義
0x84, 0x76, //的
0x55, 0x00, //U
0x53, 0x00, //S
0x42, 0x00, //B
0x20, 0x00, // 
0x48, 0x00, //H
0x49, 0x00, //I
0x44, 0x00, //D
0xbe, 0x8b, //設
0x07, 0x59  //備
};
////////////////////////產品字符串結束////////////////////////////

//字符串“2008-07-19”的Unicode編碼
//8位小端格式
code uint8 SerialNumberStringDescriptor[22]={
22,         //該描述符的長度為22字節
0x03,       //字符串描述符的類型編碼為0x03
0x32, 0x00, //2
0x30, 0x00, //0
0x30, 0x00, //0
0x38, 0x00, //8
0x2d, 0x00, //-
0x30, 0x00, //0
0x37, 0x00, //7
0x2d, 0x00, //-
0x31, 0x00, //1
0x39, 0x00  //9
};
//////////////////////產品序列號字符串結束/////////////////////////

/********************************************************************
函數功能:延時x毫秒函數。
入口參數:x:延時的毫秒數。
返    回:無。
備    注:無。
********************************************************************/
void DelayXms(uint16 x)                
{
 uint16 i;
 uint16 j;
 for(i=0;i<x;i++)
 for(j=0;j<227;j++); //循環語句延時
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:USB斷開連接函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbDisconnect(void)
{
#ifdef DEBUG0
 Prints("斷開USB連接。\r\n");
#endif
 D12WriteCommand(D12_SET_MODE);  //寫設置模式命令
 D12WriteByte(0x06); //設置模式的第一字節
 D12WriteByte(0x47); //設置模式的第二字節
 DelayXms(1000);  //延遲1秒
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:USB連接函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbConnect(void)
{
#ifdef DEBUG0
 Prints("連接USB。\r\n");
#endif
 D12WriteCommand(D12_SET_MODE);  //寫設置模式命令
 D12WriteByte(0x16); //設置模式的第一字節
 D12WriteByte(0x47); //設置模式的第二字節
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:總線掛起中斷處理函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbBusSuspend(void)
{
#ifdef DEBUG0
 Prints("USB總線掛起。\r\n");
#endif
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:總線復位中斷處理函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbBusReset(void)
{
#ifdef DEBUG0
 Prints("USB總線復位。\r\n");
#endif
 Ep1InIsBusy=0; //復位后端點1輸入緩沖區空閑。
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:根據pData和SendLength將數據發送到端點0的函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbEp0SendData(void)
{
 //將數據寫到端點中去準備發送
 //寫之前要先判斷一下需要發送的數據是否比端點0
 //最大長度大,如果超過端點大小,則一次只能發送
 //最大包長的數據。端點0的最大包長在DeviceDescriptor[7]
 if(SendLength>DeviceDescriptor[7])
 {
  //按最大包長度發送
  D12WriteEndpointBuffer(1,DeviceDescriptor[7],pSendData);
  //發送后剩余字節數減少最大包長
  SendLength-=DeviceDescriptor[7];
  //發送一次后指針位置要調整
  pSendData+= DeviceDescriptor[7];
 }
 else
 {
  if(SendLength!=0)
  {
   //不夠最大包長,可以直接發送
   D12WriteEndpointBuffer(1,SendLength,pSendData);
   //發送完畢后,SendLength長度變為0
   SendLength=0;
  }
  else //如果要發送的數據包長度為0
  {
   if(NeedZeroPacket==1) //如果需要發送0長度數據
   {
    D12WriteEndpointBuffer(1,0,pSendData); //發送0長度數據包
    NeedZeroPacket=0; //清需要發送0長度數據包標志
   }
  }
 }
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函數功能:端點0輸出中斷處理函數。
入口參數:無。
返    回:無。
備    注:無。
********************************************************************/
void UsbEp0Out(void)
{
#ifdef DEBUG0
 Prints("USB端點0輸出中斷。\r\n");
#endif
 //讀取端點0輸出最后傳輸狀態,該操作清除中斷標志
 //并判斷第5位是否為1,如果是,則說明是建立包
 if(D12ReadEndpointLastStatus(0)&0x20)
 {
  D12ReadEndpointBuffer(0,16,Buffer); //讀建立過程數據
  D12AcknowledgeSetup(); //應答建立包
  D12ClearBuffer(); //清緩沖區
  //將緩沖數據填到設備請求的各字段中
  bmRequestType=Buffer[0];
  bRequest=Buffer[1];
  wValue=Buffer[2]+(((uint16)Buffer[3])<<8);
  wIndex=Buffer[4]+(((uint16)Buffer[5])<<8);
  wLength=Buffer[6]+(((uint16)Buffer[7])<<8);
  //下面的代碼判斷具體的請求,并根據不同的請求進行相關操作
  //如果D7位為1,則說明是輸入請求
  if((bmRequestType&0x80)==0x80)
  {
   //根據bmRequestType的D6~5位散轉,D6~5位表示請求的類型
   //0為標準請求,1為類請求,2為廠商請求。
   switch((bmRequestType>>5)&0x03)
   {
    case 0:  //標準請求
     #ifdef DEBUG0
      Prints("USB標準輸入請求:");
     #endif
     //USB協議定義了幾個標準輸入請求,我們實現這些標準請求即可
     //請求的代碼在bRequest中,對不同的請求代碼進行散轉
     //事實上,我們還需要對接收者進行散轉,因為不同的請求接收者
     //是不一樣的。接收者在bmRequestType的D4~D0位中定義。
     //我們這里為了簡化操作,有些就省略了對接收者的判斷。
     //例如獲取描述符的請求,只根據描述符的類型來區別。
     switch(bRequest)
     {
      case GET_CONFIGURATION: //獲取配置
       #ifdef DEBUG0
        Prints("獲取配置。\r\n");
       #endif
      break;
      
      case GET_DESCRIPTOR:  //獲取描述符
       #ifdef DEBUG0
        Prints("獲取描述符——");
       #endif
       //對描述符類型進行散轉,對于全速設備,
       //標準請求只支持發送到設備的設備、配置、字符串三種描述符
       switch((wValue>>8)&0xFF)
        {
         case DEVICE_DESCRIPTOR: //設備描述符
          #ifdef DEBUG0
           Prints("設備描述符。\r\n");
          #endif
          pSendData=DeviceDescriptor;  //需要發送的數據
          //判斷請求的字節數是否比實際需要發送的字節數多
          //這里請求的是設備描述符,因此數據長度就是
          //DeviceDescriptor[0]。如果請求的比實際的長,
          //那么只返回實際長度的數據
          if(wLength>DeviceDescriptor[0])
          {
           SendLength=DeviceDescriptor[0];
           if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數個數據包時
           {
            NeedZeroPacket=1; //需要返回0長度的數據包
           }
          }
          else
          {
           SendLength=wLength;
          }
          //將數據通過EP0返回
          UsbEp0SendData();
         break;
         
         case CONFIGURATION_DESCRIPTOR:  //配置描述符
          #ifdef DEBUG0
           Prints("配置描述符。\r\n");
          #endif
          pSendData=ConfigurationDescriptor; //需要發送的數據為配置描述符
          //判斷請求的字節數是否比實際需要發送的字節數多
          //這里請求的是配置描述符集合,因此數據長度就是
          //ConfigurationDescriptor[3]*256+ConfigurationDescriptor[2]。
          //如果請求的比實際的長,那么只返回實際長度的數據
          SendLength=ConfigurationDescriptor[3];
          SendLength=SendLength*256+ConfigurationDescriptor[2];
          if(wLength>SendLength)
          {
           if(SendLength%DeviceDescriptor[7]==0) //并且剛好是整數個數據包時
           {
            NeedZeroPacket=1; //需要返回0長度的數據包
           }
          }
          else
          {
           SendLength=wLength;
          }
          //將數據通過EP0返回
          UsbEp0SendData();
         break;
         
         case STRING_DESCRIPTOR:  //字符串描述符
          #ifdef DEBUG0
           Prints("字符串描述符");
          #endif
          switch(wValue&0xFF)  //根據wValue的低字節(索引值)散轉
          {
           case 0:  //獲取語言ID
            #ifdef DEBUG0
             Prints("(語言ID)。\r\n");
            #endif
            pSendData=LanguageId;
            SendLength=LanguageId[0];
           break;
           
           case 1:  //廠商字符串的索引值為1,所以這里為廠商字符串
           #ifdef DEBUG0
             Prints("(廠商描述)。\r\n");
            #endif
            pSendData=ManufacturerStringDescriptor;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三区av | 国产视频一区在线观看| 中文字幕乱码日本亚洲一区二区| 依依成人综合视频| 国产99久久久久久免费看农村| 在线精品亚洲一区二区不卡| 久久精品亚洲麻豆av一区二区| 亚洲国产一区视频| 不卡免费追剧大全电视剧网站| 69堂成人精品免费视频| 一区二区在线电影| 丰满少妇久久久久久久| 久久影院午夜片一区| 天堂在线一区二区| 欧美色男人天堂| 亚洲蜜臀av乱码久久精品| 国产精品一级片在线观看| 欧美老人xxxx18| 亚洲最大的成人av| 一本色道久久综合亚洲精品按摩| 国产欧美一区二区在线| 激情久久久久久久久久久久久久久久| 欧美日韩小视频| 亚洲一区二区在线观看视频| 一本久道中文字幕精品亚洲嫩| 国产精品久久久久久久久果冻传媒 | 精品综合免费视频观看| 欧美精品国产精品| 日韩1区2区日韩1区2区| 56国语精品自产拍在线观看| 日韩黄色小视频| 91精品欧美一区二区三区综合在| 亚洲自拍偷拍av| 欧美午夜片在线看| 视频一区二区三区入口| 日韩欧美你懂的| 久久精品99国产国产精| 精品区一区二区| 久久疯狂做爰流白浆xx| 欧美精品一区二区三区高清aⅴ | 91精品国产91综合久久蜜臀| 日本中文字幕一区二区有限公司| 欧美日韩一区三区| 三级不卡在线观看| 亚洲精品一区二区三区在线观看| 国产乱码精品一品二品| 国产精品麻豆网站| 欧洲av在线精品| 三级成人在线视频| 国产无一区二区| 日本韩国一区二区| 青青青爽久久午夜综合久久午夜 | 亚洲人成在线播放网站岛国| 欧美偷拍一区二区| 老司机精品视频线观看86| 久久久久久久久久久99999| 成人av网站在线观看| 一区二区三区四区不卡在线 | 91麻豆福利精品推荐| 亚洲制服丝袜av| 日韩视频一区二区在线观看| 国产九色sp调教91| 一区二区三区欧美在线观看| 日韩午夜在线观看| 国产69精品久久久久777| 亚洲精品免费视频| 日韩精品一区二区三区中文不卡| 国产成人精品免费看| 亚洲免费av高清| 欧美精品一区二区三区在线| 欧美综合一区二区三区| 国产精品69毛片高清亚洲| 亚洲国产一区二区三区青草影视| 久久综合久久鬼色中文字| 91国产丝袜在线播放| 国产在线视频一区二区三区| 伊人开心综合网| 国产欧美日韩视频在线观看| 欧美性大战久久久久久久蜜臀| 久久91精品国产91久久小草| 一级女性全黄久久生活片免费| 精品国产乱码久久久久久老虎| 91小视频免费观看| 国产成人午夜精品5599| 日本午夜精品一区二区三区电影| 亚洲图片另类小说| 国产婷婷色一区二区三区| 91精品国产色综合久久久蜜香臀| 99久久er热在这里只有精品66| 久久99日本精品| 一区二区三区免费在线观看| 国产欧美一区二区精品忘忧草| 欧美一卡2卡3卡4卡| 91久久国产综合久久| 成人午夜电影久久影院| 国产在线观看免费一区| 日韩黄色小视频| 午夜精品一区二区三区电影天堂| 亚洲欧洲国产日韩| 亚洲国产精品传媒在线观看| 精品国产制服丝袜高跟| 在线播放91灌醉迷j高跟美女 | 成人手机电影网| 国产伦精品一区二区三区免费 | 日韩女优av电影| 欧美一区二区三区在线观看视频| 色久优优欧美色久优优| 一本大道久久a久久综合| 91在线云播放| 色噜噜狠狠成人网p站| k8久久久一区二区三区| 成人av免费网站| 成人爱爱电影网址| 成人av电影观看| 不卡av免费在线观看| 不卡电影一区二区三区| 91亚洲国产成人精品一区二三| 风间由美一区二区三区在线观看| 国产福利91精品一区二区三区| 国产专区欧美精品| 国产成人精品一区二区三区网站观看 | 亚洲一区二区三区四区五区黄 | 欧美日韩成人综合| 欧美日韩性生活| 91精品国产综合久久福利| 欧美日韩在线播| 欧美一区二区三区视频免费| 欧美一级生活片| 久久综合九色综合97婷婷| 久久久久久久久一| 综合激情网...| 午夜av一区二区| 麻豆精品一区二区综合av| 九九九精品视频| 成人av一区二区三区| 91久久免费观看| 这里只有精品99re| 精品99久久久久久| 综合久久久久久| 青青草一区二区三区| 福利一区福利二区| 欧美性欧美巨大黑白大战| 精品国产麻豆免费人成网站| 欧美激情艳妇裸体舞| 亚洲国产欧美一区二区三区丁香婷| 日韩不卡一区二区| 成人18视频在线播放| 欧美日韩精品一区二区在线播放 | 亚洲日本一区二区| 亚洲国产一区二区视频| 韩国女主播成人在线观看| 97精品国产97久久久久久久久久久久| 欧美亚洲日本一区| 亚洲精品一区二区三区影院| 亚洲欧美日韩电影| 美女国产一区二区| 成人av免费在线观看| 日韩亚洲国产中文字幕欧美| 亚洲欧洲成人av每日更新| 久久电影国产免费久久电影 | 成人av免费网站| 日韩精品一区在线观看| 亚洲摸摸操操av| 国产成人无遮挡在线视频| 欧美精品一二三四| 中文字幕一区二区三区在线播放 | 色婷婷精品久久二区二区蜜臂av | 在线播放/欧美激情| 1区2区3区国产精品| 国内精品伊人久久久久影院对白| 在线视频国内一区二区| 欧美国产一区在线| 久久精品99久久久| 欧美日韩成人综合在线一区二区 | 免费成人深夜小野草| 色婷婷激情综合| 国产精品国产三级国产a| 国内精品免费**视频| 欧美高清性hdvideosex| 亚洲精品日产精品乱码不卡| 成人精品gif动图一区| 精品国内片67194| 日韩中文字幕亚洲一区二区va在线| 91亚洲国产成人精品一区二三| 久久亚洲一区二区三区明星换脸| 午夜电影一区二区三区| 欧美综合视频在线观看| 亚洲美女精品一区| 91麻豆国产福利在线观看| 亚洲日本电影在线| 97久久精品人人爽人人爽蜜臀| 国产丝袜欧美中文另类| 国产剧情一区二区三区| 久久色中文字幕| 国产精品66部| 国产精品污网站| 99久久免费国产| 一区二区三区资源| 欧美日韩黄色一区二区| 视频在线观看国产精品|