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

📄 host2131.lst

📁 keyword:usb host sl8
💻 LST
📖 第 1 页 / 共 2 页
字号:
 272          		if(SETUPDAT[1] == SL_STRING_DESCP)
 273          		{
 274                    pStr = (pStrDesc)DBUF;
 275                    pStr->bLength = 0;
 276                    if(GetDesc(EpAddr,(WORD)(0x02<<8)|STRING,0x0904,4,DBUF)) 
 277                    { // get iManufacturer
 278          			DescBufLen = pStr->bLength; // set string length			
 279                      if(!GetDesc(EpAddr,(WORD)(0x02<<8)|STRING,0x0904,pStr->bLength,DBUF)) 		
 280                        DescBufLen = 0;
 281                    }
 282          		}
 283          
 284          		addr = DBUF;
 285          		len = (DescBufLen<ReqLen) ? DescBufLen : ReqLen;
 286          		if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 287          		{
 288          			while(len)					// Move requested data through EP0IN one packet at a time.
 289          			{
 290          				if(len < EP0BUFF_SIZE)
 291          					bc = len;
 292          				else
 293          					bc = EP0BUFF_SIZE;
 294          
 295          				for(i=0; i<bc; i++)
C51 COMPILER V6.10  HOST2131                                                               09/04/2002 22:22:07 PAGE 6   

 296          						*(IN0BUF+i) = *((BYTE xdata *)addr+i);
 297          				IN0BC = (BYTE)bc;       // Arm endpoint
 298          				addr += bc;
 299          				len -= bc;
 300          				while(EP0CS & 0x04);    // Wait for INBSY to clear
 301          			}
 302                      IN0BC = 0x00;             // arm endp, # bytes to xfr
 303                      EP0CS |= bmBIT1;          // ack handshake phase of device request
 304          		}
 305          		break;
 306              }
 307              case SL_REFRESH:
 308          	{
 309          		addr = DBUF;
 310          	    len = GetDevInfo(DBUF);
 311          
 312          		if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 313          		{
 314          			while(len)					// Move requested data through EP0IN one packet at a time.
 315          			{
 316          				if(len < EP0BUFF_SIZE)
 317          					bc = len;
 318          				else
 319          					bc = EP0BUFF_SIZE;
 320          
 321          				for(i=0; i<bc; i++)
 322          						*(IN0BUF+i) = *((BYTE xdata *)addr+i);
 323          				IN0BC = (BYTE)bc;       // Arm endpoint
 324          				addr += bc;
 325          				len -= bc;
 326          				while(EP0CS & 0x04);    // Wait for INBSY to clear
 327          			}
 328                      IN0BC = 0x00;             // arm endp, # bytes to xfr
 329                      EP0CS |= bmBIT1;          // ack handshake phase of device request
 330          		}
 331                break;
 332              }
 333          
 334              case SL_DATA_XFER_START:                  // Data Transfer with ds Dev
 335          	{
 336          		EpAddr = SETUPDAT[2];		// Get address and length
 337          		EpIdx = SETUPDAT[4];
 338          		len = SETUPDAT[6];
 339          
 340          		addr = OUT_DATA;
 341          		if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 342          		{
 343          	        retDataRW = DataRW(EpAddr,EpIdx,64,len,OUT_DATA);
 344                      if((remainder) && (remainder < len))
 345                        len -= remainder;
 346          			if(!retDataRW)
 347          			{
 348          				bc = 0;
 349          				IN0BC = (BYTE)bc;       // Arm endpoint
 350          				while(EP0CS & 0x04);    // Wait for INBSY to clear
 351          				break;
 352          			}
 353          			while(len)					// Move requested data through EP0IN 
 354          			{							// one packet at a time.
 355          
 356          				if(len < EP0BUFF_SIZE)
 357          					bc = len;
C51 COMPILER V6.10  HOST2131                                                               09/04/2002 22:22:07 PAGE 7   

 358          				else
 359          					bc = EP0BUFF_SIZE;
 360          
 361          					for(i=0; i<bc; i++)
 362          						*(IN0BUF+i) = *((BYTE xdata *)addr+i);
 363          
 364          				IN0BC = (BYTE)bc;       // Arm endpoint
 365          
 366          				addr += bc;
 367          				len -= bc;
 368          
 369          				while(EP0CS & 0x04);    // Wait for INBSY to clear
 370          			}
 371          		}
 372          		else if(SETUPDAT[0] == 0x40)    // if (DIR=OUT)
 373          		{
 374          			while(len)					// Move new data through EP0OUT 
 375          			{							// one packet at a time.
 376          				OUT0BC = 0;  // Clear bytecount to allow new data in; also stops NAKing
 377          
 378          				while(EP0CS & 0x08);
 379          
 380          				bc = OUT0BC; // Get the new bytecount
 381          
 382          					for(i=0; i<bc; i++)
 383          						 *((BYTE xdata *)addr+i) = *(OUT0BUF+i);
 384          
 385          				addr += bc;
 386          				len -= bc;
 387          			}
 388          	       retDataRW = DataRW(EpAddr,EpIdx,64,bc,OUT_DATA);
 389          		}
 390          		break;
 391              }
 392              case SL_TOGGLE_DS_REFRESH:
 393          	{
 394          	  dsPoll = !dsPoll;         // toggle downstream poll
 395                *IN0BUF = SETUPDAT[1];    // return command type
 396                IN0BC = 0x01;             // arm endp, # bytes to xfr
 397                EP0CS |= bmBIT1;          // ack handshake phase of device request
 398                break;
 399              }
 400          
 401              case SL_SHOW_REGS:
 402          	{
 403          		addr = REGBUFF;
 404          		len = 16;
 405          		for(RegAddr=0; RegAddr<len; RegAddr++)
 406                    REGBUFF[RegAddr] = SL811Read(RegAddr);
 407          
 408          		if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 409          		{
 410          			while(len)					// Move requested data through EP0IN one packet at a time.
 411          			{
 412          				if(len < EP0BUFF_SIZE)
 413          					bc = len;
 414          				else
 415          					bc = EP0BUFF_SIZE;
 416          
 417          				for(i=0; i<bc; i++)
 418          						*(IN0BUF+i) = *((BYTE xdata *)addr+i);
 419          				IN0BC = (BYTE)bc;       // Arm endpoint
C51 COMPILER V6.10  HOST2131                                                               09/04/2002 22:22:07 PAGE 8   

 420          				addr += bc;
 421          				len -= bc;
 422          				while(EP0CS & 0x04);    // Wait for INBSY to clear
 423          			}
 424                      IN0BC = 0x00;             // arm endp, # bytes to xfr
 425                      EP0CS |= bmBIT1;          // ack handshake phase of device request
 426          		}
 427                  break;
 428              }
 429          
 430          
 431              default:
 432              {
 433                break;
 434              }
 435            }
 436            return( FALSE );              // no errors, cmd handled okay
 437          }
 438          
 439          //-----------------------------------------------------------------------------
 440          // USB Interrupt Handlers
 441          //	The following functions are called by the USB interrupt jump table.
 442          //-----------------------------------------------------------------------------
 443          
 444          // Setup Data Available Interrupt Handler
 445          void ISR_Sudav(void) interrupt 0
 446          {
 447          	GotSUD = TRUE;				// Set flag
 448          	EZUSB_IRQ_CLEAR();
 449          	USBIRQ = bmSUDAV;			// Clear SUDAV IRQ
 450          }
 451          
 452          // Setup Token Interrupt Handler
 453          void ISR_Sutok(void) interrupt 0
 454          {
 455          	EZUSB_IRQ_CLEAR();
 456          	USBIRQ = bmSUTOK;			// Clear SUTOK IRQ
 457          }
 458          
 459          void ISR_Sof(void) interrupt 0
 460          {
 461          	EZUSB_IRQ_CLEAR();
 462          	USBIRQ = bmSOF;				// Clear SOF IRQ
 463          }
 464          
 465          void ISR_Ures(void) interrupt 0
 466          {
 467          	EZUSB_IRQ_CLEAR();
 468          	USBIRQ = bmURES;			// Clear URES IRQ
 469          }
 470          
 471          void ISR_IBN(void) interrupt 0
 472          {
 473          }
 474          
 475          void ISR_Susp(void) interrupt 0
 476          {
 477          	Sleep = TRUE;
 478          	EZUSB_IRQ_CLEAR();
 479          	USBIRQ = bmSUSP;
 480          }
 481          
C51 COMPILER V6.10  HOST2131                                                               09/04/2002 22:22:07 PAGE 9   

 482          void ISR_Ep0in(void) interrupt 0
 483          {
 484          }
 485          
 486          void ISR_Ep0out(void) interrupt 0
 487          {
 488          }
 489          
 490          void ISR_Ep1in(void) interrupt 0
 491          {
 492          }
 493          
 494          void ISR_Ep1out(void) interrupt 0
 495          {
 496          	int i;
 497          
 498          	for(i=0;i<OUT1BC;i++)
 499          		HOSTCMD[i] = OUT1BUF[i];
 500          
 501          	OUT1BC = 0;
 502          	BULK_OUT_DONE = TRUE;
 503           	EZUSB_IRQ_CLEAR();
 504             	OUT07IRQ = bmEP1;
 505          }
 506          
 507          void ISR_Ep2in(void) interrupt 0
 508          {
 509          }
 510          
 511          void ISR_Ep2out(void) interrupt 0
 512          {
 513          }
 514          
 515          void ISR_Ep3in(void) interrupt 0
 516          {
 517          }
 518          
 519          void ISR_Ep3out(void) interrupt 0
 520          {
 521          }
 522          
 523          void ISR_Ep4in(void) interrupt 0
 524          {
 525          }
 526          
 527          void ISR_Ep4out(void) interrupt 0
 528          {
 529          }
 530          
 531          void ISR_Ep5in(void) interrupt 0
 532          {
 533          }
 534          
 535          void ISR_Ep5out(void) interrupt 0
 536          {
 537          }
 538          
 539          void ISR_Ep6in(void) interrupt 0
 540          {
 541          }
 542          
 543          void ISR_Ep6out(void) interrupt 0
C51 COMPILER V6.10  HOST2131                                                               09/04/2002 22:22:07 PAGE 10  

 544          {
 545          }
 546          
 547          void ISR_Ep7in(void) interrupt 0
 548          {
 549          }
 550          
 551          void ISR_Ep7out(void) interrupt 0
 552          {
 553          }

C51 COMPILATION COMPLETE.  0 WARNING(S),  6 ERROR(S)

⌨️ 快捷键说明

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