⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 host_811.lst

📁 完整的usb_host_device源代码直接在keil下编译
💻 LST
📖 第 1 页 / 共 5 页
字号:
 481   1              {
 482   2                      if (setup->bmRequest & 0x80)                                    // host-to-device : IN token
 483   2                      {
 484   3                              pid  = PID_OUT; 
 485   3                              if(!usbXfer(usbaddr, ep0, PID_IN, 0, payload, wLen, pData))
 486   3                                      return FALSE;
 487   3                              payload = 0;
 488   3                      }
C51 COMPILER V7.50   HOST_811                                                              10/27/2005 20:00:37 PAGE 9   

 489   2                      else                                                                                    // device-to-host : OUT token
 490   2                      {                                                       
 491   3                              if(!usbXfer(usbaddr, ep0, PID_OUT, 0, payload, wLen, pData))
 492   3                                      return FALSE;
 493   3                      }
 494   2              }
 495   1      
 496   1              //----------------------------------------------------
 497   1              // Status stage IN or OUT zero-length data packet
 498   1              //----------------------------------------------------
 499   1              if(!usbXfer(usbaddr, ep0, pid, 0, payload, 0, NULL))
 500   1                      return FALSE;
 501   1      
 502   1              return TRUE;                                                                                    
 503   1      }
 504          
 505          //*****************************************************************************************
 506          // Control endpoint
 507          //*****************************************************************************************
 508          int VendorCmd(BYTE usbaddr,BYTE bReq,BYTE bCmd,WORD wValue,WORD wIndex,WORD wLen,BYTE *pData)
 509          { 
 510   1          xdata SetupPKG setup;
 511   1      
 512   1          setup.bmRequest  = bReq;
 513   1          setup.bRequest   = bCmd;
 514   1          setup.wValue     = wValue;
 515   1          setup.wIndex     = wIndex;
 516   1          setup.wLength    = WordSwap(wLen);
 517   1      
 518   1              return ep0Xfer(usbaddr, uDev[usbaddr].wPayLoad[0], &setup, pData);
 519   1      }
 520          
 521          //*****************************************************************************************
 522          // Set Device Address : 
 523          //*****************************************************************************************
 524          int SetAddress(WORD addr)
 525          {
 526   1              return VendorCmd(0,0,SET_ADDRESS, WordSwap(addr), 0, 0, NULL);
 527   1      }
 528          
 529          //*****************************************************************************************
 530          // Set Device Configuration : 
 531          //*****************************************************************************************
 532          int Set_Configuration(BYTE usbaddr, WORD wVal)
 533          {
 534   1              return VendorCmd(usbaddr, 0, SET_CONFIG, WordSwap(wVal), 0, 0, NULL);
 535   1      }
 536          
 537          //*****************************************************************************************
 538          // Get Device Descriptor : Device, Configuration, String
 539          //*****************************************************************************************
 540          int GetDesc(BYTE usbaddr, WORD wValue,  WORD wIndex, WORD wLen, BYTE *desc)
 541          { 
 542   1              return VendorCmd(usbaddr, 0x80, GET_DESCRIPTOR, wValue, wIndex, wLen, desc);
 543   1      }
 544          
 545          //*****************************************************************************************
 546          // HID Get_Desc :
 547          //*****************************************************************************************
 548          int GetHid_Desc(BYTE usbaddr, WORD wValue, WORD wLen, BYTE *desc)
 549          { 
 550   1              return VendorCmd(usbaddr, 0x81, GET_DESCRIPTOR, wValue, 0, wLen, desc);
C51 COMPILER V7.50   HOST_811                                                              10/27/2005 20:00:37 PAGE 10  

 551   1      }
 552          
 553          //*****************************************************************************************
 554          // GetHUBDesc :
 555          //*****************************************************************************************
 556          int GetHubDesc(BYTE usbaddr, WORD wValue, WORD wLen, BYTE *desc)
 557          { 
 558   1              return VendorCmd(usbaddr, 0xA0, GET_DESCRIPTOR, wValue, 0, wLen, desc);
 559   1      }
 560          
 561          //*****************************************************************************************
 562          // Get Status : (HUB)
 563          //*****************************************************************************************
 564          int GetStatus(BYTE usbaddr, BYTE *desc)
 565          { 
 566   1              return VendorCmd(usbaddr, 0x80, GET_STATUS, 0, 0, 2, desc);              
 567   1      }
 568          
 569          //*****************************************************************************************
 570          // PortFeature : (SET_FEATURE, CLEAR_FEATURE)
 571          //*****************************************************************************************
 572          int PortFeature(BYTE usbaddr, BYTE bReq, WORD wValue, BYTE cPort)
 573          { 
 574   1              return VendorCmd(usbaddr, 0x23, bReq, WordSwap(wValue), WordSwap((WORD)cPort), 0, NULL);                  
 575   1      }
 576          
 577          //*****************************************************************************************
 578          // GetPortStatus :
 579          //*****************************************************************************************
 580          int GetPortStatus(BYTE usbaddr, BYTE cPort, BYTE *desc)
 581          { 
 582   1              return VendorCmd(usbaddr, 0xA3, GET_STATUS, 0, WordSwap((WORD)cPort), 0x04, desc);
 583   1      }
 584          
 585          //*****************************************************************************************
 586          // GetDevInfo :
 587          //*****************************************************************************************
 588          WORD GetDevInfo(BYTE *DevInfo)
 589          { 
 590   1        BYTE EpAddr;
 591   1        int i;
 592   1        BYTE DescBufLen = 0;
 593   1      
 594   1                      for(EpAddr = 1; (EpAddr < MAX_DEV); EpAddr++)
 595   1                      {
 596   2                              if(uHub.bPortPresent[EpAddr])
 597   2                              {
 598   3                                                      DevInfo[DescBufLen++] = EpAddr;                                                 // USB Address
 599   3                                                      DevInfo[DescBufLen++]   = uHub.bPortNumber[EpAddr];                     // Port Number
 600   3                                                      DevInfo[DescBufLen++] = uHub.bPortSpeed[EpAddr];                        // Device Speed (from enum)
 601   3                                                      DevInfo[DescBufLen++] = uDev[EpAddr].bClass;                            // Class Type (from enum)
 602   3                                                      (WORD)DevInfo[DescBufLen++] = uDev[EpAddr].wVID;                        // VID
 603   3                                                      DescBufLen++;
 604   3                                                      (WORD)DevInfo[DescBufLen++] = uDev[EpAddr].wPID;                        // PID
 605   3                                                      DescBufLen++;
 606   3                                                      DevInfo[DescBufLen++] = (BYTE)uDev[EpAddr].wPayLoad[0]; // Ep0 MaxPktSize (max 64 bytes)
 607   3                                                      DevInfo[DescBufLen++] = uDev[EpAddr].bNumOfEPs;                 // Number of data endpoints
 608   3                                                      for(i=0;i<uDev[EpAddr].bNumOfEPs;i++)           // save all data endpoints info
 609   3                                                      {                                                                                               
 610   4                                                              DevInfo[DescBufLen++]   = uDev[EpAddr].bEPAddr[i+1];    // ep address/direction
 611   4                                                              DevInfo[DescBufLen++]   = uDev[EpAddr].bAttr[i+1];              // transfer type
 612   4                                                              (WORD)DevInfo[DescBufLen++] = uDev[EpAddr].wPayLoad[i+1];       // max data payload
C51 COMPILER V7.50   HOST_811                                                              10/27/2005 20:00:37 PAGE 11  

 613   4                                                              DescBufLen++;                                       // 2 byte payload
 614   4                                                              DevInfo[DescBufLen++]   = uDev[EpAddr].bInterval[i+1];  // polling interval
 615   4                                                      }       
 616   3                              }
 617   2                      }
 618   1                      return(DescBufLen);
 619   1      }
 620          
 621          //*****************************************************************************************
 622          // USB Data Endpoint Read/Write
 623          // wLen is in low byte first format
 624          //*****************************************************************************************
 625          int DataRW(BYTE usbaddr, BYTE epaddr, WORD wPayload, WORD wLen, BYTE *pData)
 626          {
 627   1              xdata BYTE pid = PID_OUT;
 628   1      
 629   1              if(epaddr & 0x80)       // get direction of transfer
 630   1                      pid = PID_IN;                           
 631   1      
 632   1              if(usbXfer(usbaddr,epaddr&0x0F,pid,0,wPayload,wLen,pData))
 633   1                      return TRUE;
 634   1      
 635   1              return FALSE;
 636   1      }
 637          
 638          //*****************************************************************************************
 639          // USB Device Enumeration Process
 640          // Support 1 confguration and interface #0 and alternate setting #0 only
 641          // Support up to 1 control endpoint + 4 data endpoint only
 642          //*****************************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -