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

📄 upsd3400_upsd_usb.lst

📁 uPSD34xx Disk driver
💻 LST
📖 第 1 页 / 共 3 页
字号:
 300   2           {
 301   3            USB_FIFO[i] = *pTransmitBufferEP0++;
 302   3           }
 303   2          bytesToTransmitEP0 -= nBytes;
C51 COMPILER V7.50   UPSD3400_UPSD_USB                                                     09/13/2005 18:00:20 PAGE 6   

 304   2          USIZE = nBytes;
 305   2      
 306   2          if (ZLPacket)
 307   2           {
 308   3            pTransmitBufferEP0 = NULL;
 309   3            bytesToTransmitEP0 = 255;
 310   3           }
 311   2         }
 312   1       }
 313          
 314          
 315          
 316          
 317          
 318          
 319          
 320          void OnGetStatus()
 321          /******************************************************************************
 322           Function   : void OnGetStatus()
 323           Parameters : none
 324           Description: Handler for GET_STATUS requests.
 325           ******************************************************************************/
 326           {
 327   1        USEL  = INDIR | SELEP0;                    //select EP0 OUT
 328   1        UCON |= TOGGLE;                            //DATA1
 329   1        UCON |= ENABLE_FIFO;
 330   1      
 331   1        
 332   1        if((setupPacket.wIndex.lo == 0x00) & (setupPacket.wIndex.hi == 0x00))
 333   1         {
 334   2          USB_FIFO[0] = ((BM_ATTRIBUTES & 0x40)>>6); //|(remotewakeupen<<1);
 335   2              // Not supported - Suba 05/18/2005
 336   2              //Added macro for device powered/bus powered status instead of hard coding - Suba 05/26/2005
 337   2          USB_FIFO[1] = 0;
 338   2         }
 339   1        else if((setupPacket.wIndex.lo == 0x81) & (setupPacket.wIndex.hi == 0x00))
 340   1         {
 341   2                                                   //endpoint1
 342   2          if(ep1state == US_EPSTALL)
 343   2           {
 344   3            USB_FIFO[0] = 1;
 345   3           }
 346   2          else
 347   2           {
 348   3            USB_FIFO[0] = 0;
 349   3           }
 350   2          USB_FIFO[1] = 0;
 351   2         }
 352   1         //added get status support for endpoint 0x01(EP3_ADDR)
 353   1         else if((setupPacket.wIndex.lo == 0x01) & (setupPacket.wIndex.hi == 0x00))
 354   1         {
 355   2                                                   //endpoint1
 356   2          if(ep1state == US_EPSTALL)
 357   2           {
 358   3            USB_FIFO[0] = 1;
 359   3           }
 360   2          else
 361   2           {
 362   3            USB_FIFO[0] = 0;
 363   3           }
 364   2          USB_FIFO[1] = 0;
 365   2         }
C51 COMPILER V7.50   UPSD3400_UPSD_USB                                                     09/13/2005 18:00:20 PAGE 7   

 366   1        else
 367   1         {
 368   2          STALL_EP0();                // No features currently implemented, so stall EP0
 369   2          return;
 370   2         }
 371   1        USIZE = 0x02;
 372   1      
 373   1        bytesToTransmitEP0 = 0;
 374   1       }
 375          
 376          
 377          
 378          
 379          
 380          
 381          void OnClearFeature()
 382          /******************************************************************************
 383           Function   : void OnClearFeature()
 384           Parameters : none
 385           Description: Handler for ClearFeature()
 386           ******************************************************************************/
 387           {
 388   1        /*                                           //clear device remote wakeup enable- not supported Suba 05/
             -18/2005
 389   1        if((setupPacket.wValue.lo == 0x01)&&(setupPacket.wIndex.lo== 0x00))
 390   1         {
 391   1          remotewakeupen = 0x00;
 392   1         }
 393   1                                                   //clear EP1 STALL
 394   1        else
 395   1         */
 396   1        if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo == EP1_ADDR))
 397   1         {
 398   2          ep1state = US_EPDEFAULT;
 399   2      
 400   2          USEL =  INDIR | SELEP1;
 401   2          UCON &= ~STALL;
 402   2         }
 403   1         //Suba 05/18/2005 - added clear feature support for EP3_ADDR-0x01
 404   1        else
 405   1        
 406   1        if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo == EP3_ADDR))
 407   1         {
 408   2          ep1state = US_EPDEFAULT;
 409   2      
 410   2          USEL =  INDIR | SELEP1;
 411   2          UCON &= ~STALL;
 412   2         } 
 413   1        else
 414   1         {
 415   2          STALL_EP0();
 416   2          return;
 417   2         }
 418   1        TransmitZeroLengthEP0();
 419   1       }
 420          
 421          
 422          
 423          
 424          
 425          
 426          
C51 COMPILER V7.50   UPSD3400_UPSD_USB                                                     09/13/2005 18:00:20 PAGE 8   

 427          void OnSetFeature()
 428          /******************************************************************************
 429           Function   : void OnSetFeature()
 430           Parameters : none
 431           Description: Handler for Set_FEATURE requests.
 432           ******************************************************************************/
 433           {//set device remote wakeup enable-not supported Suba 05/18/2005
 434   1        /*if((setupPacket.wValue.lo == 0x01)&&(setupPacket.wIndex.lo== 0x00))
 435   1         {
 436   1      
 437   1          remotewakeupen = 0x01;                   //device remote wakeup
 438   1         }
 439   1                                                   //set EP1 STALL
 440   1        else*/ if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo== EP1_ADDR))
 441   1         {
 442   2          ep1state = US_EPSTALL;                   //EP halt
 443   2          USEL     = INDIR | SELEP1;
 444   2          UCON    |= STALL;
 445   2         }
 446   1         //Suba 05/18/2005 - added set feature support for EP3_ADDR-0x01
 447   1        else if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo== EP3_ADDR))
 448   1         {
 449   2          ep1state = US_EPSTALL;                   //EP halt
 450   2          USEL     = OUTDIR | SELEP1;
 451   2          UCON    |= STALL;
 452   2         }
 453   1        else
 454   1         {
 455   2          STALL_EP0();
 456   2          return;
 457   2         }
 458   1      
 459   1        TransmitZeroLengthEP0();
 460   1       }
 461          
 462          
 463          
 464          
 465          
 466          void OnSetAddress()
 467          /******************************************************************************
 468           Function   : void OnSetAddress()
 469           Parameters : none
 470           Description: Handler for SET_ADDRESS packets
 471           ******************************************************************************/
 472           {
 473   1        usbState = US_ADDRESSED;
 474   1        TransmitZeroLengthEP0();
 475   1       }
 476          
 477          
 478          
 479          
 480          
 481          void OnGetDescriptor()
 482          /******************************************************************************
 483           Function   : void OnGetDescriptor()
 484           Parameters : none
 485           Description: Handler for GET_DESCRIPTOR() requests
 486           ******************************************************************************/
 487           {
 488   1        data unsigned int bytesRequested;
C51 COMPILER V7.50   UPSD3400_UPSD_USB                                                     09/13/2005 18:00:20 PAGE 9   

 489   1      
 490   1        switch (setupPacket.wValue.hi)
 491   1         {
 492   2          case DT_DEVICE:
 493   2           {
 494   3            pTransmitBufferEP0 = (unsigned char*) &deviceDesc;
 495   3            bytesToTransmitEP0 = sizeof(deviceDesc);
 496   3            break;
 497   3           }
 498   2      
 499   2          case DT_CONFIGURATION:
 500   2           {
 501   3            pTransmitBufferEP0 = (unsigned char*) &configDesc;
 502   3            bytesToTransmitEP0 = configDesc.wTotalLength.lo;
 503   3            break;
 504   3           }
 505   2      
 506   2          case DT_STRING:
 507   2           {
 508   3            pTransmitBufferEP0 = (unsigned char*) stringDescTable[setupPacket.wValue.lo<4?setupPacket.wValue.lo:
             -4];
 509   3            bytesToTransmitEP0 = *pTransmitBufferEP0;         // choose requested string
 510   3            break;
 511   3           }
 512   2      
 513   2          default:
 514   2           {
 515   3            STALL_EP0();                        // Unrecognized descriptor, so stall EP0
 516   3            return;
 517   3           }
 518   2         }
 519   1      
 520   1        bytesRequested = (setupPacket.wLength.hi << 8) | setupPacket.wLength.lo;
 521   1        if (bytesToTransmitEP0 > bytesRequested)
 522   1         {
 523   2          bytesToTransmitEP0 = bytesRequested;  //adjust size if host wants shorter data
 524   2         }
 525   1      
 526   1        UCON &= ~TOGGLE;                           // Set DATA0
 527   1        TransmitEP0();
 528   1       }
 529          
 530          
 531          
 532          
 533          
 534          
 535          
 536          
 537          
 538          
 539          void OnSetDescriptor()
 540          /******************************************************************************
 541           Function   : void OnSetDescriptor()
 542           Parameters : none
 543           Description: Handler for SET_DESCRIPTOR request
 544           ******************************************************************************/
 545           {
 546   1        STALL_EP0();
 547   1       }
 548          
 549          
C51 COMPILER V7.50   UPSD3400_UPSD_USB                                                     09/13/2005 18:00:20 PAGE 10  

 550          
 551          
 552          
 553          
 554          
 555          
 556          void OnGetConfiguration()
 557          /******************************************************************************
 558           Function   : void OnGetConfiguration()
 559           Parameters : none
 560           Description: Handler for GET_CONFIGURATION request
 561           ******************************************************************************/
 562           {
 563   1      
 564   1        USEL        = INDIR | SELEP0;              //select EP0 OUT
 565   1        UCON       |= TOGGLE;                      //Expect DATA1
 566   1        USB_FIFO[0] = confignum;
 567   1      
 568   1        USIZE       = 1;
 569   1        bytesToTransmitEP0 = 0x00;
 570   1       }
 571          
 572          
 573          
 574          
 575          
 576          
 577          
 578          void OnSetConfiguration()
 579          /******************************************************************************
 580           Function   : void OnSetConfiguration()
 581           Parameters : none
 582           Description: Handler for SET_CONFIGURATION requests.
 583           ******************************************************************************/
 584           {
 585   1       //Suba 05/18/2005-added the following code to comply chap 9 test
 586   1       if ((setupPacket.wValue.lo == 0)||(setupPacket.wValue.lo == 1) )
 587   1        {     //if set configuration command is issued with a 1 set the state; if it is 
 588   2        //issued with a 1 or 0, send NULL packet and store config value sent.
 589   2         if (setupPacket.wValue.lo == 1)
 590   2              usbState = US_CONFIGURED;
 591   2         TransmitZeroLengthEP0();
 592   2         confignum = setupPacket.wValue.lo;
 593   2        }
 594   1        else//all other values send request error by stalling endpoint 0.
 595   1          STALL_EP0();                             // stall EP0
 596   1       }
 597          
 598                   //Suba 05/18/2005 - commented out the following code as it failed chap9 test
 599                      
 600          
 601           // if (setupPacket.wValue.lo == 0)     // configuration value is 0 => address state
 602           //  {
 603           //   if (usbState == US_CONFIGURED)

⌨️ 快捷键说明

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