📄 host2131.lst
字号:
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 + -