📄 sl811.lst
字号:
349 2 len-=usbstack.wLen;
350 2 usbstack.buffer=usbstack.buffer+usbstack.wLen;
351 2 //DelayUs(10);
352 2 }
353 1 return TRUE;
354 1 }
355
356 unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len)
357 {
358 1 usbstack.usbaddr=0x1;
359 1 usbstack.endpoint=usbstack.epbulkin;
360 1 usbstack.pid=PID_IN;
361 1 usbstack.wPayload=64;
362 1 usbstack.wLen=len;
363 1 usbstack.buffer=pBuffer;
364 1 if(usbstack.wLen)
C51 COMPILER V7.50 SL811 11/02/2007 09:31:23 PAGE 7
365 1 {
366 2 if(!usbXfer())
367 2 return FALSE;
368 2 }
369 1 return TRUE;
370 1 }
371 //*****************************************************************************************
372 // Control endpoint
373 //*****************************************************************************************
374 //void VendorCmd(void)
375 //{
376 // ep0Xfer();
377 //}
378
379 //*****************************************************************************************
380 // Set Device Address :
381 //*****************************************************************************************
382 unsigned char SetAddress(unsigned char addr)
383 {
384 1 usbstack.usbaddr=0;
385 1 usbstack.setup.bmRequest=0;
386 1 usbstack.setup.bRequest=SET_ADDRESS;
387 1 usbstack.setup.wValue=addr;
388 1 usbstack.setup.wIndex=0;
389 1 usbstack.setup.wLength=0;
390 1 //usbstack.buffer=&usbstack.setup;
391 1 return ep0Xfer();
392 1
393 1 }
394
395 //*****************************************************************************************
396 // Set Device Configuration :
397 //*****************************************************************************************
398 unsigned char Set_Configuration(void)
399 {
400 1 //usbstack.usbaddr=usbaddr;
401 1 //usbstack.
402 1 usbstack.setup.bmRequest=0;
403 1 usbstack.setup.bRequest=SET_CONFIG;
404 1 //usbstack.setup.wValue=wVal;
405 1 usbstack.setup.wIndex=0;
406 1 usbstack.setup.wLength=0;
407 1 usbstack.buffer=NULL;
408 1 return ep0Xfer();
409 1
410 1 }
411
412 //*****************************************************************************************
413 // Get Device Descriptor : Device, Configuration, String
414 //*****************************************************************************************
415 unsigned char GetDesc(void)
416 {
417 1
418 1 usbstack.setup.bmRequest=0x80;
419 1 usbstack.setup.bRequest=GET_DESCRIPTOR;
420 1 usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
421 1
422 1 usbstack.wPayload=uDev.wPayLoad[0];
423 1 //usbstack.buffer=&usbstack.setup;
424 1 return ep0Xfer();
425 1 }
426
C51 COMPILER V7.50 SL811 11/02/2007 09:31:23 PAGE 8
427 //*****************************************************************************************
428 // USB Data Endpoint Read/Write
429 // wLen is in low byte first format
430 //*****************************************************************************************
431 /*
432 unsigned char DataRW(BYTE epaddr)
433 {
434 //xdata BYTE pid = PID_OUT;
435
436 usbstack.pid=PID_OUT;
437 usbstack.endpoint=epaddr&0x0F;
438
439 if(epaddr & 0x80) // get direction of transfer
440 usbstack.pid = PID_IN;
441
442 if(usbXfer())
443 return TRUE;
444
445 return FALSE;
446 }
447 */
448
449 //*****************************************************************************************
450 // USB Device Enumeration Process
451 // Support 1 confguration and interface #0 and alternate setting #0 only
452 // Support up to 1 control endpoint + 4 data endpoint only
453 //*****************************************************************************************
454 unsigned char EnumUsbDev(BYTE usbaddr)
455 {
456 1 unsigned char i; // always reset USB transfer address
457 1 unsigned char uAddr = 0; // for enumeration to Address #0
458 1 unsigned char epLen;
459 1 //unsigned short strLang;
460 1
461 1 pDevDesc pDev;
462 1 pCfgDesc pCfg;
463 1 pIntfDesc pIfc;
464 1 pEPDesc pEnp;
465 1 //------------------------------------------------
466 1 // Reset only Slave device attached directly
467 1 //------------------------------------------------
468 1 uDev.wPayLoad[0] = 64; // default 64-byte payload of Endpoint 0, address #0
469 1 if(usbaddr == 1) // bus reset for the device attached to SL811HS only
470 1 USBReset(); // that will always have the USB address = 0x01 (for a hub)
471 1
472 1 DelayMs(25);
473 1
474 1 //i = SL811Read(EP0Status);
475 1 //i=SL811Read(IntStatus);
476 1 //------------------------------------------------
477 1 // Get USB Device Descriptors on EP0 & Addr 0
478 1 // with default 64-byte payload
479 1 //------------------------------------------------
480 1 pDev =(pDevDesc)DBUF; // ask for 64 bytes on Addr #0
481 1
482 1 usbstack.usbaddr=uAddr;
483 1 usbstack.setup.wValue=DEVICE;
484 1 usbstack.setup.wIndex=0;
485 1 usbstack.setup.wLength=18;
486 1 //usbstack.setup.wLength=sbstack.setup.wLength);
487 1 usbstack.buffer=DBUF;
488 1
C51 COMPILER V7.50 SL811 11/02/2007 09:31:23 PAGE 9
489 1 if (!GetDesc()) // and determine the wPayload size
490 1 return FALSE; // get correct wPayload of Endpoint 0
491 1 uDev.wPayLoad[0]=pDev->bMaxPacketSize0;// on current non-zero USB address
492 1
493 1 //------------------------------------------------
494 1 // Set Slave USB Device Address
495 1 //------------------------------------------------
496 1 if (!SetAddress(usbaddr)) // set to specific USB address
497 1 return FALSE; //
498 1 uAddr = usbaddr; // transfer using this new address
499 1
500 1 //------------------------------------------------
501 1 // Get USB Device Descriptors on EP0 & Addr X
502 1 //------------------------------------------------
503 1 pDev =(pDevDesc)DBUF;
504 1 usbstack.usbaddr=uAddr;
505 1
506 1 usbstack.setup.wLength=pDev->bLength;
507 1 usbstack.setup.wValue=DEVICE;
508 1 usbstack.setup.wIndex=0;
509 1
510 1 //usbstack.setup.wLength=0x12;//(unsigned short)DBUF[0];//pDev->bLength;
511 1 usbstack.buffer=DBUF;
512 1
513 1 if (!GetDesc())
514 1 return FALSE; // For this current device:
515 1 uDev.wVID = pDev->idVendor; // save VID
516 1 uDev.wPID = pDev->idProduct; // save PID
517 1 uDev.iMfg = pDev->iManufacturer; // save Mfg Index
518 1 uDev.iPdt = pDev->iProduct; // save Product Index
519 1
520 1 //------------------------------------------------
521 1 // Get String Descriptors
522 1 //------------------------------------------------
523 1 /*
524 1 pStr = (pStrDesc)DBUF;
525 1
526 1 usbstack.usbaddr=uAddr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -