📄 upsd3400_upsd_usb.lst
字号:
300 2 {
301 3 USB_FIFO[i] = *pTransmitBufferEP0++;
302 3 }
303 2 bytesToTransmitEP0 -= nBytes;
C51 COMPILER V7.50 UPSD3400_UPSD_USB 09/13/2005 18:00:20 PAGE 6
304 2 USIZE = nBytes;
305 2
306 2 if (ZLPacket)
307 2 {
308 3 pTransmitBufferEP0 = NULL;
309 3 bytesToTransmitEP0 = 255;
310 3 }
311 2 }
312 1 }
313
314
315
316
317
318
319
320 void OnGetStatus()
321 /******************************************************************************
322 Function : void OnGetStatus()
323 Parameters : none
324 Description: Handler for GET_STATUS requests.
325 ******************************************************************************/
326 {
327 1 USEL = INDIR | SELEP0; //select EP0 OUT
328 1 UCON |= TOGGLE; //DATA1
329 1 UCON |= ENABLE_FIFO;
330 1
331 1
332 1 if((setupPacket.wIndex.lo == 0x00) & (setupPacket.wIndex.hi == 0x00))
333 1 {
334 2 USB_FIFO[0] = ((BM_ATTRIBUTES & 0x40)>>6); //|(remotewakeupen<<1);
335 2 // Not supported - Suba 05/18/2005
336 2 //Added macro for device powered/bus powered status instead of hard coding - Suba 05/26/2005
337 2 USB_FIFO[1] = 0;
338 2 }
339 1 else if((setupPacket.wIndex.lo == 0x81) & (setupPacket.wIndex.hi == 0x00))
340 1 {
341 2 //endpoint1
342 2 if(ep1state == US_EPSTALL)
343 2 {
344 3 USB_FIFO[0] = 1;
345 3 }
346 2 else
347 2 {
348 3 USB_FIFO[0] = 0;
349 3 }
350 2 USB_FIFO[1] = 0;
351 2 }
352 1 //added get status support for endpoint 0x01(EP3_ADDR)
353 1 else if((setupPacket.wIndex.lo == 0x01) & (setupPacket.wIndex.hi == 0x00))
354 1 {
355 2 //endpoint1
356 2 if(ep1state == US_EPSTALL)
357 2 {
358 3 USB_FIFO[0] = 1;
359 3 }
360 2 else
361 2 {
362 3 USB_FIFO[0] = 0;
363 3 }
364 2 USB_FIFO[1] = 0;
365 2 }
C51 COMPILER V7.50 UPSD3400_UPSD_USB 09/13/2005 18:00:20 PAGE 7
366 1 else
367 1 {
368 2 STALL_EP0(); // No features currently implemented, so stall EP0
369 2 return;
370 2 }
371 1 USIZE = 0x02;
372 1
373 1 bytesToTransmitEP0 = 0;
374 1 }
375
376
377
378
379
380
381 void OnClearFeature()
382 /******************************************************************************
383 Function : void OnClearFeature()
384 Parameters : none
385 Description: Handler for ClearFeature()
386 ******************************************************************************/
387 {
388 1 /* //clear device remote wakeup enable- not supported Suba 05/
-18/2005
389 1 if((setupPacket.wValue.lo == 0x01)&&(setupPacket.wIndex.lo== 0x00))
390 1 {
391 1 remotewakeupen = 0x00;
392 1 }
393 1 //clear EP1 STALL
394 1 else
395 1 */
396 1 if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo == EP1_ADDR))
397 1 {
398 2 ep1state = US_EPDEFAULT;
399 2
400 2 USEL = INDIR | SELEP1;
401 2 UCON &= ~STALL;
402 2 }
403 1 //Suba 05/18/2005 - added clear feature support for EP3_ADDR-0x01
404 1 else
405 1
406 1 if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo == EP3_ADDR))
407 1 {
408 2 ep1state = US_EPDEFAULT;
409 2
410 2 USEL = INDIR | SELEP1;
411 2 UCON &= ~STALL;
412 2 }
413 1 else
414 1 {
415 2 STALL_EP0();
416 2 return;
417 2 }
418 1 TransmitZeroLengthEP0();
419 1 }
420
421
422
423
424
425
426
C51 COMPILER V7.50 UPSD3400_UPSD_USB 09/13/2005 18:00:20 PAGE 8
427 void OnSetFeature()
428 /******************************************************************************
429 Function : void OnSetFeature()
430 Parameters : none
431 Description: Handler for Set_FEATURE requests.
432 ******************************************************************************/
433 {//set device remote wakeup enable-not supported Suba 05/18/2005
434 1 /*if((setupPacket.wValue.lo == 0x01)&&(setupPacket.wIndex.lo== 0x00))
435 1 {
436 1
437 1 remotewakeupen = 0x01; //device remote wakeup
438 1 }
439 1 //set EP1 STALL
440 1 else*/ if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo== EP1_ADDR))
441 1 {
442 2 ep1state = US_EPSTALL; //EP halt
443 2 USEL = INDIR | SELEP1;
444 2 UCON |= STALL;
445 2 }
446 1 //Suba 05/18/2005 - added set feature support for EP3_ADDR-0x01
447 1 else if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo== EP3_ADDR))
448 1 {
449 2 ep1state = US_EPSTALL; //EP halt
450 2 USEL = OUTDIR | SELEP1;
451 2 UCON |= STALL;
452 2 }
453 1 else
454 1 {
455 2 STALL_EP0();
456 2 return;
457 2 }
458 1
459 1 TransmitZeroLengthEP0();
460 1 }
461
462
463
464
465
466 void OnSetAddress()
467 /******************************************************************************
468 Function : void OnSetAddress()
469 Parameters : none
470 Description: Handler for SET_ADDRESS packets
471 ******************************************************************************/
472 {
473 1 usbState = US_ADDRESSED;
474 1 TransmitZeroLengthEP0();
475 1 }
476
477
478
479
480
481 void OnGetDescriptor()
482 /******************************************************************************
483 Function : void OnGetDescriptor()
484 Parameters : none
485 Description: Handler for GET_DESCRIPTOR() requests
486 ******************************************************************************/
487 {
488 1 data unsigned int bytesRequested;
C51 COMPILER V7.50 UPSD3400_UPSD_USB 09/13/2005 18:00:20 PAGE 9
489 1
490 1 switch (setupPacket.wValue.hi)
491 1 {
492 2 case DT_DEVICE:
493 2 {
494 3 pTransmitBufferEP0 = (unsigned char*) &deviceDesc;
495 3 bytesToTransmitEP0 = sizeof(deviceDesc);
496 3 break;
497 3 }
498 2
499 2 case DT_CONFIGURATION:
500 2 {
501 3 pTransmitBufferEP0 = (unsigned char*) &configDesc;
502 3 bytesToTransmitEP0 = configDesc.wTotalLength.lo;
503 3 break;
504 3 }
505 2
506 2 case DT_STRING:
507 2 {
508 3 pTransmitBufferEP0 = (unsigned char*) stringDescTable[setupPacket.wValue.lo<4?setupPacket.wValue.lo:
-4];
509 3 bytesToTransmitEP0 = *pTransmitBufferEP0; // choose requested string
510 3 break;
511 3 }
512 2
513 2 default:
514 2 {
515 3 STALL_EP0(); // Unrecognized descriptor, so stall EP0
516 3 return;
517 3 }
518 2 }
519 1
520 1 bytesRequested = (setupPacket.wLength.hi << 8) | setupPacket.wLength.lo;
521 1 if (bytesToTransmitEP0 > bytesRequested)
522 1 {
523 2 bytesToTransmitEP0 = bytesRequested; //adjust size if host wants shorter data
524 2 }
525 1
526 1 UCON &= ~TOGGLE; // Set DATA0
527 1 TransmitEP0();
528 1 }
529
530
531
532
533
534
535
536
537
538
539 void OnSetDescriptor()
540 /******************************************************************************
541 Function : void OnSetDescriptor()
542 Parameters : none
543 Description: Handler for SET_DESCRIPTOR request
544 ******************************************************************************/
545 {
546 1 STALL_EP0();
547 1 }
548
549
C51 COMPILER V7.50 UPSD3400_UPSD_USB 09/13/2005 18:00:20 PAGE 10
550
551
552
553
554
555
556 void OnGetConfiguration()
557 /******************************************************************************
558 Function : void OnGetConfiguration()
559 Parameters : none
560 Description: Handler for GET_CONFIGURATION request
561 ******************************************************************************/
562 {
563 1
564 1 USEL = INDIR | SELEP0; //select EP0 OUT
565 1 UCON |= TOGGLE; //Expect DATA1
566 1 USB_FIFO[0] = confignum;
567 1
568 1 USIZE = 1;
569 1 bytesToTransmitEP0 = 0x00;
570 1 }
571
572
573
574
575
576
577
578 void OnSetConfiguration()
579 /******************************************************************************
580 Function : void OnSetConfiguration()
581 Parameters : none
582 Description: Handler for SET_CONFIGURATION requests.
583 ******************************************************************************/
584 {
585 1 //Suba 05/18/2005-added the following code to comply chap 9 test
586 1 if ((setupPacket.wValue.lo == 0)||(setupPacket.wValue.lo == 1) )
587 1 { //if set configuration command is issued with a 1 set the state; if it is
588 2 //issued with a 1 or 0, send NULL packet and store config value sent.
589 2 if (setupPacket.wValue.lo == 1)
590 2 usbState = US_CONFIGURED;
591 2 TransmitZeroLengthEP0();
592 2 confignum = setupPacket.wValue.lo;
593 2 }
594 1 else//all other values send request error by stalling endpoint 0.
595 1 STALL_EP0(); // stall EP0
596 1 }
597
598 //Suba 05/18/2005 - commented out the following code as it failed chap9 test
599
600
601 // if (setupPacket.wValue.lo == 0) // configuration value is 0 => address state
602 // {
603 // if (usbState == US_CONFIGURED)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -