📄 ctrlreq.lst
字号:
281 4 EP1CS = EP1CS & (~bmEP_SESTALL) | bmEP_CLRTOG;
282 4 break;
283 4 case bmEP2MAP:
284 4 EP2CS = EP2CS & (~bmEP_SESTALL) | bmEP_CLRTOG;
285 4 break;
286 4 default:
287 4 USB_STALL_EP0();
288 4 return;
289 4 }
290 3 }
291 2 else
292 2 {
293 3 USB_STALL_EP0();
294 3 return;
295 3 }
296 2 break;
297 2 default:
298 2 USB_STALL_EP0(); // Send STALL
299 2 return;
300 2 }
301 1 EP0TXCNT = 0;
302 1 EP0TXCS = EP0TXCS | bmTX0_EN;
C51 COMPILER V7.50 CTRLREQ 04/17/2007 10:42:46 PAGE 6
303 1 while (EP0TXCS & bmTX0_EN);
304 1 }
305 /*$PAGE*/
306
307 /*
308 *********************************************************************************************************
309 * DR_SETFEATURE
310 *
311 * Description: Set feature
312 *
313 * Arguments : none
314 *
315 * Returns : none
316 *********************************************************************************************************
317 */
318 void DR_SetFeature (void)
319 {
320 1 switch (SetupData[0])
321 1 {
322 2 case FT_DEVICE:
323 2 if (SetupData[2] == 1)
324 2 {
325 3 Rwuen = TRUE;
326 3 }
327 2 else if (SetupData[2] == 2)
328 2 {
329 3 break;
330 3 }
331 2 else
332 2 {
333 3 USB_STALL_EP0();
334 3 return;
335 3 }
336 2 break;
337 2 case FT_ENDPOINT:
338 2 if (SetupData[2] == 0)
339 2 {
340 3 switch (SetupData[4] & 0x0F)
341 3 {
342 4 case bmEP1MAP:
343 4 EP1CS = EP1CS | bmEP_SESTALL;
344 4 break;
345 4 case bmEP2MAP:
346 4 EP2CS = EP2CS | bmEP_SESTALL;
347 4 break;
348 4 default:
349 4 USB_STALL_EP0();
350 4 return;
351 4 }
352 3 }
353 2 else
354 2 {
355 3 USB_STALL_EP0();
356 3 return;
357 3 }
358 2 break;
359 2 default:
360 2 USB_STALL_EP0(); // Send STALL
361 2 return;
362 2 }
363 1 EP0TXCNT = 0;
364 1 EP0TXCS = EP0TXCS | bmTX0_EN;
C51 COMPILER V7.50 CTRLREQ 04/17/2007 10:42:46 PAGE 7
365 1 while (EP0TXCS & bmTX0_EN);
366 1 }
367 /*$PAGE*/
368
369 /*
370 *********************************************************************************************************
371 * DR_SETADDRESS
372 *
373 * Description: Set address
374 *
375 * Arguments : none
376 *
377 * Returns : none
378 *********************************************************************************************************
379 */
380 void DR_SetAddress (void)
381 {
382 1 EP0TXCNT = 0; // Write data length
383 1 EP0TXCS = EP0TXCS | bmTX0_EN; // Enable TX
384 1 while (EP0TXCS & bmTX0_EN); // Wait complete
385 1 if (EP0TXCS & bmTX0_ACK)
386 1 {
387 2 USBFADDR = SetupData[2]; // Set address
388 2 }
389 1 }
390 /*$PAGE*/
391
392 /*
393 *********************************************************************************************************
394 * DR_GETDESCRIPTOR
395 *
396 * Description: Get descriptor
397 *
398 * Arguments : none
399 *
400 * Returns : none
401 *********************************************************************************************************
402 */
403 void DR_GetDescriptor (void)
404 {
405 1 switch (SetupData[3])
406 1 {
407 2 case GD_DEVICE:
408 2 GD_DeviceDscr();
409 2 break;
410 2 case GD_CONFIGURATION:
411 2 if (HighSpeed)
412 2 {
413 3 GD_ConfigDscr();
414 3 }
415 2 else
416 2 {
417 3 GD_OtherConfigDscr();
418 3 }
419 2 break;
420 2 case GD_STRING:
421 2 GD_String();
422 2 break;
423 2 case GD_DEVICE_QUALIFIER:
424 2 GD_DeviceQualDscr();
425 2 break;
426 2 case GD_OTHER_SPEED_CONFIGURATION:
C51 COMPILER V7.50 CTRLREQ 04/17/2007 10:42:46 PAGE 8
427 2 if (!HighSpeed)
428 2 {
429 3 GD_ConfigDscr();
430 3 }
431 2 else
432 2 {
433 3 GD_OtherConfigDscr();
434 3 }
435 2 break;
436 2 default:
437 2 USB_STALL_EP0();
438 2 }
439 1 }
440 /*$PAGE*/
441
442 /*
443 *********************************************************************************************************
444 * DR_GETCONFIGURATION
445 *
446 * Description: Get configuration
447 *
448 * Arguments : none
449 *
450 * Returns : none
451 *********************************************************************************************************
452 */
453 void DR_GetConfiguration (void)
454 {
455 1 EP0TXDAT = Configuration;
456 1 EP0TXCNT = 1;
457 1 EP0TXCS = EP0TXCS | bmTX0_EN;
458 1 while (EP0TXCS & bmTX0_EN);
459 1 }
460 /*$PAGE*/
461
462 /*
463 *********************************************************************************************************
464 * DR_SETCONFIGURATION
465 *
466 * Description: Set configuration
467 *
468 * Arguments : none
469 *
470 * Returns : none
471 *********************************************************************************************************
472 */
473 void DR_SetConfiguration (void)
474 {
475 1 Configuration = SetupData[2];
476 1 EP0TXCNT = 0;
477 1 EP0TXCS = EP0TXCS | bmTX0_EN;
478 1 while (EP0TXCS & bmTX0_EN);
479 1 }
480 /*$PAGE*/
481
482 /*
483 *********************************************************************************************************
484 * DR_GETINTERFACE
485 *
486 * Description: Get interface
487 *
488 * Arguments : none
C51 COMPILER V7.50 CTRLREQ 04/17/2007 10:42:46 PAGE 9
489 *
490 * Returns : none
491 *********************************************************************************************************
492 */
493 void DR_GetInterface (void)
494 {
495 1 EP0TXDAT = AlternateSetting; // Write data
496 1 EP0TXCNT = 1; // Write data length
497 1 EP0TXCS = EP0TXCS | bmTX0_EN; // Enable TX
498 1 while (EP0TXCS & bmTX0_EN);
499 1 }
500 /*$PAGE*/
501
502 /*
503 *********************************************************************************************************
504 * DR_SETINTERFACE
505 *
506 * Description: Set interface
507 *
508 * Arguments : none
509 *
510 * Returns : none
511 *********************************************************************************************************
512 */
513 void DR_SetInterface (void)
514 {
515 1 AlternateSetting = SetupData[2];
516 1 EP0TXCNT = 0;
517 1 EP0TXCS = EP0TXCS | bmTX0_EN;
518 1 while (EP0TXCS & bmTX0_EN);
519 1 }
520 /*$PAGE*/
521
522 /*
523 *********************************************************************************************************
524 * GD_DEVICEDSCR
525 *
526 * Description: Get device descriptor
527 *
528 * Arguments : none
529 *
530 * Returns : none
531 *********************************************************************************************************
532 */
533 void GD_DeviceDscr (void)
534 {
535 1 BOOLEAN ShortPacket;
536 1 INT8U i = 0, j, count, SendSize;
537 1
538 1 count = SetupData[6];
539 1 ShortPacket = FALSE;
540 1 if (count > DSCR_DEVICE_LEN)
541 1 {
542 2 count = DSCR_DEVICE_LEN;
543 2 ShortPacket = TRUE;
544 2 }
545 1
546 1 while (count)
547 1 {
548 2 if (count < PacketSize)
549 2 {
550 3 SendSize = count;
C51 COMPILER V7.50 CTRLREQ 04/17/2007 10:42:46 PAGE 10
551 3 }
552 2 else
553 2 {
554 3 SendSize = PacketSize;
555 3 }
556 2 count = count - SendSize;
557 2 for (j = 0; j < SendSize; j++)
558 2 {
559 3 EP0TXDAT = DeviceDscr[i++];
560 3 }
561 2 EP0TXCNT = SendSize;
562 2 EP0TXCS = EP0TXCS | bmTX0_EN;
563 2 while (EP0TXCS & bmTX0_EN);
564 2 }
565 1 if (ShortPacket && (SendSize == PacketSize))
566 1 {
567 2 EP0TXCNT = 0;
568 2 EP0TXCS = EP0TXCS | bmTX0_EN;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -