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