📄 sl811.lst
字号:
381 3 usbstack.pid = PID_IN;
382 3 }
383 2 }
384 1 //DelayMs(10);
385 1 //----------------------------------------------------
386 1 // Status stage IN or OUT zero-length data packet
387 1 //----------------------------------------------------
388 1 usbstack.wLen=0;
389 1 if(!usbXfer())
390 1 return FALSE;
391 1
392 1 return TRUE;
393 1
394 1 }
395
396
397 unsigned char epBulkSend(unsigned char *pBuffer,unsigned int len)
398 {
399 1 usbstack.usbaddr=0x1;
400 1 usbstack.endpoint=usbstack.epbulkout;
401 1 usbstack.pid=PID_OUT;
402 1 usbstack.wPayload=64;
403 1 usbstack.wLen=len;
404 1 usbstack.buffer=pBuffer;
405 1 /*
406 1 while(len>0)
407 1 {
408 1 if (len > usbstack.wPayload)
409 1 usbstack.wLen = usbstack.wPayload;
410 1 else
411 1 usbstack.wLen = len;
412 1 while(!usbXfer());
413 1 //DelayMs(10);
414 1 //return FALSE;
415 1 len-=usbstack.wLen;
416 1 usbstack.buffer=usbstack.buffer+usbstack.wLen;
417 1 //DelayUs(10);
418 1 }
419 1 */
420 1 if(usbstack.wLen)
421 1 {
422 2 while(!usbXfer());
423 2 }
424 1 return TRUE;
425 1 }
426
C51 COMPILER V7.00 SL811 09/22/2005 17:57:50 PAGE 8
427 unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len)
428 {
429 1 usbstack.usbaddr=0x1;
430 1 usbstack.endpoint=usbstack.epbulkin;
431 1 usbstack.pid=PID_IN;
432 1 usbstack.wPayload=64;
433 1 usbstack.wLen=len;
434 1 usbstack.buffer=pBuffer;
435 1 if(usbstack.wLen)
436 1 {
437 2 while(!usbXfer());
438 2 //return FALSE;
439 2 }
440 1 return TRUE;
441 1 }
442 //*****************************************************************************************
443 // Control endpoint
444 //*****************************************************************************************
445 //void VendorCmd(void)
446 //{
447 // ep0Xfer();
448 //}
449
450 //*****************************************************************************************
451 // Set Device Address :
452 //*****************************************************************************************
453 unsigned char SetAddress(unsigned char addr)
454 {
455 1 usbstack.usbaddr=0;
456 1 usbstack.setup.bmRequest=0;
457 1 usbstack.setup.bRequest=SET_ADDRESS;
458 1 usbstack.setup.wValue=addr;
459 1 usbstack.setup.wIndex=0;
460 1 usbstack.setup.wLength=0;
461 1 //usbstack.buffer=&usbstack.setup;
462 1 return ep0Xfer();
463 1
464 1 }
465
466 //*****************************************************************************************
467 // Set Device Configuration :
468 //*****************************************************************************************
469 unsigned char Set_Configuration(void)
470 {
471 1 //usbstack.usbaddr=usbaddr;
472 1 //usbstack.
473 1 usbstack.setup.bmRequest=0;
474 1 usbstack.setup.bRequest=SET_CONFIG;
475 1 //usbstack.setup.wValue=wVal;
476 1 usbstack.setup.wIndex=0;
477 1 usbstack.setup.wLength=0;
478 1 usbstack.buffer=NULL;
479 1 return ep0Xfer();
480 1
481 1 }
482
483 //*****************************************************************************************
484 // Get Device Descriptor : Device, Configuration, String
485 //*****************************************************************************************
486 unsigned char GetDesc(void)
487 {
488 1
C51 COMPILER V7.00 SL811 09/22/2005 17:57:50 PAGE 9
489 1 usbstack.setup.bmRequest=0x80;
490 1 usbstack.setup.bRequest=GET_DESCRIPTOR;
491 1 usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
492 1
493 1 usbstack.wPayload=uDev.wPayLoad[0];
494 1 //usbstack.buffer=&usbstack.setup;
495 1 return ep0Xfer();
496 1 }
497
498 //*****************************************************************************************
499 // USB Data Endpoint Read/Write
500 // wLen is in low byte first format
501 //*****************************************************************************************
502 /*
503 unsigned char DataRW(BYTE epaddr)
504 {
505 //xdata BYTE pid = PID_OUT;
506
507 usbstack.pid=PID_OUT;
508 usbstack.endpoint=epaddr&0x0F;
509
510 if(epaddr & 0x80) // get direction of transfer
511 usbstack.pid = PID_IN;
512
513 if(usbXfer())
514 return TRUE;
515
516 return FALSE;
517 }
518 */
519
520 //*****************************************************************************************
521 // USB Device Enumeration Process
522 // Support 1 confguration and interface #0 and alternate setting #0 only
523 // Support up to 1 control endpoint + 4 data endpoint only
524 //*****************************************************************************************
525 unsigned char EnumUsbDev(BYTE usbaddr)
526 {
527 1 unsigned char i; // always reset USB transfer address
528 1 unsigned char uAddr = 0; // for enumeration to Address #0
529 1 unsigned char epLen;
530 1 //unsigned short strLang;
531 1
532 1 pDevDesc pDev;
533 1 pCfgDesc pCfg;
534 1 pIntfDesc pIfc;
535 1 pEPDesc pEnp;
536 1 //------------------------------------------------
537 1 // Reset only Slave device attached directly
538 1 //------------------------------------------------
539 1 uDev.wPayLoad[0] = 64; // default 64-byte payload of Endpoint 0, address #0
540 1 if(usbaddr == 1) // bus reset for the device attached to SL811HS only
541 1 USBReset(); // that will always have the USB address = 0x01 (for a hub)
542 1
543 1 // DelayMs(25);
544 1 DelayMs(10);
545 1
546 1 //i = SL811Read(EP0Status);
547 1 //i=SL811Read(IntStatus);
548 1 //------------------------------------------------
549 1 // Get USB Device Descriptors on EP0 & Addr 0
550 1 // with default 64-byte payload
C51 COMPILER V7.00 SL811 09/22/2005 17:57:50 PAGE 10
551 1 //------------------------------------------------
552 1 pDev =(pDevDesc)DBUF; // ask for 64 bytes on Addr #0
553 1
554 1 usbstack.usbaddr=uAddr;
555 1 usbstack.setup.wValue=DEVICE;
556 1 usbstack.setup.wIndex=0;
557 1 usbstack.setup.wLength=18;
558 1 //usbstack.setup.wLength=sbstack.setup.wLength);
559 1 usbstack.buffer=DBUF;
560 1
561 1 if (!GetDesc()) // and determine the wPayload size
562 1 return FALSE; // get correct wPayload of Endpoint 0
563 1
564 1 #ifdef ZLH_DEBUG
565 1 disp_data(2,"C1");
566 1 #endif
567 1
568 1 uDev.wPayLoad[0]=pDev->bMaxPacketSize0;// on current non-zero USB address
569 1
570 1 //------------------------------------------------
571 1 // Set Slave USB Device Address
572 1 //------------------------------------------------
573 1 if (!SetAddress(usbaddr)) // set to specific USB address
574 1 return FALSE; //
575 1 uAddr = usbaddr; // transfer using this new address
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -