📄 host2131.lst
字号:
281 5 }
282 4 }
283 3
284 3 addr = DBUF;
285 3 len = (DescBufLen<ReqLen) ? DescBufLen : ReqLen;
286 3 if(SETUPDAT[0] == 0xC0) // if (DIR=IN)
287 3 {
288 4 while(len) // Move requested data through EP0IN one packet at a time.
289 4 {
290 5 if(len < EP0BUFF_SIZE)
291 5 bc = len;
292 5 else
293 5 bc = EP0BUFF_SIZE;
294 5
295 5 for(i=0; i<bc; i++)
296 5 *(IN0BUF+i) = *((BYTE xdata *)addr+i);
297 5 IN0BC = (BYTE)bc; // Arm endpoint
298 5 addr += bc;
299 5 len -= bc;
300 5 while(EP0CS & 0x04); // Wait for INBSY to clear
301 5 }
C51 COMPILER V7.06 HOST2131 07/13/2004 18:08:14 PAGE 6
302 4 IN0BC = 0x00; // arm endp, # bytes to xfr
303 4 EP0CS |= bmBIT1; // ack handshake phase of device request
304 4 }
305 3 break;
306 3 }
307 2 case SL_REFRESH:
308 2 {
309 3 addr = DBUF;
310 3 len = GetDevInfo(DBUF);
311 3
312 3 if(SETUPDAT[0] == 0xC0) // if (DIR=IN)
313 3 {
314 4 while(len) // Move requested data through EP0IN one packet at a time.
315 4 {
316 5 if(len < EP0BUFF_SIZE)
317 5 bc = len;
318 5 else
319 5 bc = EP0BUFF_SIZE;
320 5
321 5 for(i=0; i<bc; i++)
322 5 *(IN0BUF+i) = *((BYTE xdata *)addr+i);
323 5 IN0BC = (BYTE)bc; // Arm endpoint
324 5 addr += bc;
325 5 len -= bc;
326 5 while(EP0CS & 0x04); // Wait for INBSY to clear
327 5 }
328 4 IN0BC = 0x00; // arm endp, # bytes to xfr
329 4 EP0CS |= bmBIT1; // ack handshake phase of device request
330 4 }
331 3 break;
332 3 }
333 2
334 2 case SL_DATA_XFER_START: // Data Transfer with ds Dev
335 2 {
336 3 EpAddr = SETUPDAT[2]; // Get address and length
337 3 EpIdx = SETUPDAT[4];
338 3 len = SETUPDAT[6];
339 3
340 3 addr = OUT_DATA;
341 3 if(SETUPDAT[0] == 0xC0) // if (DIR=IN)
342 3 {
343 4 retDataRW = DataRW(EpAddr,EpIdx,64,len,OUT_DATA);
344 4 if((remainder) && (remainder < len))
345 4 len -= remainder;
346 4 if(!retDataRW)
347 4 {
348 5 bc = 0;
349 5 IN0BC = (BYTE)bc; // Arm endpoint
350 5 while(EP0CS & 0x04); // Wait for INBSY to clear
351 5 break;
352 5 }
353 4 while(len) // Move requested data through EP0IN
354 4 { // one packet at a time.
355 5
356 5 if(len < EP0BUFF_SIZE)
357 5 bc = len;
358 5 else
359 5 bc = EP0BUFF_SIZE;
360 5
361 5 for(i=0; i<bc; i++)
362 5 *(IN0BUF+i) = *((BYTE xdata *)addr+i);
363 5
C51 COMPILER V7.06 HOST2131 07/13/2004 18:08:14 PAGE 7
364 5 IN0BC = (BYTE)bc; // Arm endpoint
365 5
366 5 addr += bc;
367 5 len -= bc;
368 5
369 5 while(EP0CS & 0x04); // Wait for INBSY to clear
370 5 }
371 4 }
372 3 else if(SETUPDAT[0] == 0x40) // if (DIR=OUT)
373 3 {
374 4 while(len) // Move new data through EP0OUT
375 4 { // one packet at a time.
376 5 OUT0BC = 0; // Clear bytecount to allow new data in; also stops NAKing
377 5
378 5 while(EP0CS & 0x08);
379 5
380 5 bc = OUT0BC; // Get the new bytecount
381 5
382 5 for(i=0; i<bc; i++)
383 5 *((BYTE xdata *)addr+i) = *(OUT0BUF+i);
384 5
385 5 addr += bc;
386 5 len -= bc;
387 5 }
388 4 retDataRW = DataRW(EpAddr,EpIdx,64,bc,OUT_DATA);
389 4 }
390 3 break;
391 3 }
392 2 case SL_TOGGLE_DS_REFRESH:
393 2 {
394 3 dsPoll = !dsPoll; // toggle downstream poll
395 3 *IN0BUF = SETUPDAT[1]; // return command type
396 3 IN0BC = 0x01; // arm endp, # bytes to xfr
397 3 EP0CS |= bmBIT1; // ack handshake phase of device request
398 3 break;
399 3 }
400 2
401 2 case SL_SHOW_REGS:
402 2 {
403 3 addr = REGBUFF;
404 3 len = 16;
405 3 for(RegAddr=0; RegAddr<len; RegAddr++)
406 3 REGBUFF[RegAddr] = SL811Read(RegAddr);
407 3
408 3 if(SETUPDAT[0] == 0xC0) // if (DIR=IN)
409 3 {
410 4 while(len) // Move requested data through EP0IN one packet at a time.
411 4 {
412 5 if(len < EP0BUFF_SIZE)
413 5 bc = len;
414 5 else
415 5 bc = EP0BUFF_SIZE;
416 5
417 5 for(i=0; i<bc; i++)
418 5 *(IN0BUF+i) = *((BYTE xdata *)addr+i);
419 5 IN0BC = (BYTE)bc; // Arm endpoint
420 5 addr += bc;
421 5 len -= bc;
422 5 while(EP0CS & 0x04); // Wait for INBSY to clear
423 5 }
424 4 IN0BC = 0x00; // arm endp, # bytes to xfr
425 4 EP0CS |= bmBIT1; // ack handshake phase of device request
C51 COMPILER V7.06 HOST2131 07/13/2004 18:08:14 PAGE 8
426 4 }
427 3 break;
428 3 }
429 2
430 2
431 2 default:
432 2 {
433 3 break;
434 3 }
435 2 }
436 1 return( FALSE ); // no errors, cmd handled okay
437 1 }
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 1 GotSUD = TRUE; // Set flag
448 1 EZUSB_IRQ_CLEAR();
449 1 USBIRQ = bmSUDAV; // Clear SUDAV IRQ
450 1 }
451
452 // Setup Token Interrupt Handler
453 void ISR_Sutok(void) interrupt 0
454 {
455 1 EZUSB_IRQ_CLEAR();
456 1 USBIRQ = bmSUTOK; // Clear SUTOK IRQ
457 1 }
458
459 void ISR_Sof(void) interrupt 0
460 {
461 1 EZUSB_IRQ_CLEAR();
462 1 USBIRQ = bmSOF; // Clear SOF IRQ
463 1 }
464
465 void ISR_Ures(void) interrupt 0
466 {
467 1 EZUSB_IRQ_CLEAR();
468 1 USBIRQ = bmURES; // Clear URES IRQ
469 1 }
470
471 void ISR_IBN(void) interrupt 0
472 {
473 1 }
474
475 void ISR_Susp(void) interrupt 0
476 {
477 1 Sleep = TRUE;
478 1 EZUSB_IRQ_CLEAR();
479 1 USBIRQ = bmSUSP;
480 1 }
481
482 void ISR_Ep0in(void) interrupt 0
483 {
484 1 }
485
486 void ISR_Ep0out(void) interrupt 0
487 {
C51 COMPILER V7.06 HOST2131 07/13/2004 18:08:14 PAGE 9
488 1 }
489
490 void ISR_Ep1in(void) interrupt 0
491 {
492 1 }
493
494 void ISR_Ep1out(void) interrupt 0
495 {
496 1 int i;
497 1
498 1 for(i=0;i<OUT1BC;i++)
499 1 HOSTCMD[i] = OUT1BUF[i];
500 1
501 1 OUT1BC = 0;
502 1 BULK_OUT_DONE = TRUE;
503 1 EZUSB_IRQ_CLEAR();
504 1 OUT07IRQ = bmEP1;
505 1 }
506
507 void ISR_Ep2in(void) interrupt 0
508 {
509 1 }
510
511 void ISR_Ep2out(void) interrupt 0
512 {
513 1 }
514
515 void ISR_Ep3in(void) interrupt 0
516 {
517 1 }
518
519 void ISR_Ep3out(void) interrupt 0
520 {
521 1 }
522
523 void ISR_Ep4in(void) interrupt 0
524 {
525 1 }
526
527 void ISR_Ep4out(void) interrupt 0
528 {
529 1 }
530
531 void ISR_Ep5in(void) interrupt 0
532 {
533 1 }
534
535 void ISR_Ep5out(void) interrupt 0
536 {
537 1 }
538
539 void ISR_Ep6in(void) interrupt 0
540 {
541 1 }
542
543 void ISR_Ep6out(void) interrupt 0
544 {
545 1 }
546
547 void ISR_Ep7in(void) interrupt 0
548 {
549 1 }
C51 COMPILER V7.06 HOST2131 07/13/2004 18:08:14 PAGE 10
550
551 void ISR_Ep7out(void) interrupt 0
552 {
553 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2090 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 64
PDATA SIZE = ---- ----
DATA SIZE = 6 17
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -