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