📄 example_full.lst
字号:
377 1 /* program channel using desired frequency and bandwidth */
378 1 if ( DRX_Ctrl( &demod, DRX_CTRL_SET_CHANNEL, &channelParams ) != DRX_STS_OK )
379 1 {
380 2 XERROR("failure: error programming desired channel\n");
381 2 }
382 1 XPRINTF("channel programmed... waiting for lock\n");
383 1
384 1 /* wait for the system to achieve MPEG lock */
385 1 start = DRXBSP_HST_Clock();
386 1 everLocked = FALSE;
387 1 do
388 1 {
389 2 if ( DRX_Ctrl( &demod, DRX_CTRL_LOCK_STATUS, &lockStatus ) != DRX_STS_OK )
390 2 {
391 3 XERROR("error retrieving lock status\n");
392 3 }
393 2
394 2 /* check for any type of lock */
395 2 if ( lockStatus != DRX_NOT_LOCKED )
396 2 {
397 3 everLocked = TRUE;
398 3 }
399 2
400 2 /* update time passed */
401 2 delta = DRXBSP_HST_Clock() - start;
402 2
403 2 /* check for timeouts */
404 2 if ( delta > LOCK_TIMEOUT_MPEG )
405 2 {
406 3 break; /* total timeout */
407 3 }
408 2 if ( (delta > LOCK_TIMEOUT_ANY) && (everLocked == FALSE) )
409 2 {
410 3 break; /* no lock to be expected */
C51 COMPILER V8.02 EXAMPLE_FULL 02/11/2009 09:41:00 PAGE 8
411 3 }
412 2 } while( lockStatus != DRX_LOCKED );
413 1
414 1 if ( lockStatus != DRX_LOCKED )
415 1 {
416 2 XERROR("cannot lock to signal\n");
417 2 }
418 1 XPRINTF("lock achieved\n");
419 1
420 1 XPRINTF("\n");
421 1
422 1 /*-----------------------------------------------------------------------*/
423 1 /* (5) Retrieve channel parameters */
424 1 /*-----------------------------------------------------------------------*/
425 1
426 1 /* let system stabilize */
427 1 XWAITMSECS( 1000 );
428 1
429 1 XPRINTF("retrieving channel parameters...");
430 1 /* channel parameters found by the system are stored in channelParams */
431 1 if ( DRX_Ctrl( &demod, DRX_CTRL_GET_CHANNEL, &channelParams) != DRX_STS_OK )
432 1 {
433 2 XERROR("error retrieving channel parameters\n");
434 2 }
435 1
436 1 /* print channel parameters */
437 1 XPRINTF( "\nDetected channel parameters:\n" );
438 1 XPRINTF( "Frequency : %d kHz\n" , channelParams.frequency );
439 1 XPRINTF( "Bandwidth : %s\n" , DRX_STR_BANDWIDTH( channelParams.bandwidth ) );
440 1 XPRINTF( "FFT mode : %s\n" , DRX_STR_FFTMODE( channelParams.fftmode ) );
441 1 XPRINTF( "Guard interval : %s\n" , DRX_STR_GUARD( channelParams.guard ) );
442 1 XPRINTF( "Constellation : %s\n" , DRX_STR_CONSTELLATION( channelParams.constellation ) );
443 1 XPRINTF( "Code rate : %s\n" , DRX_STR_CODERATE( channelParams.coderate ) );
444 1 XPRINTF( "Hierarchy : %s\n" , DRX_STR_HIERARCHY( channelParams.hierarchy ) );
445 1 XPRINTF( "Priority : %s\n" , DRX_STR_PRIORITY( channelParams.priority ) );
446 1 XPRINTF( "Mirroring : %s\n" , DRX_STR_MIRROR( channelParams.mirror ) );
447 1 XPRINTF( "\n" );
448 1
449 1 /* channel parameters according to the TPS info are stored in TPSInfo */
450 1 if ( DRX_Ctrl( &demod, DRX_CTRL_TPS_INFO, &TPSInfo) != DRX_STS_OK )
451 1 {
452 2 XERROR("error retrieving TPS info\n");
453 2 }
454 1
455 1 XPRINTF("\n");
456 1
457 1 /*-----------------------------------------------------------------------*/
458 1 /* (6) Show signal quality and strength */
459 1 /*-----------------------------------------------------------------------*/
460 1
461 1 /* Let system stabilize */
462 1 XWAITMSECS( 200 );
463 1
464 1 XPRINTF( "Measuring signal quality...\n" );
465 1 if ( DRX_Ctrl( &demod, DRX_CTRL_SIG_QUALITY, &sigQuality ) != DRX_STS_OK )
466 1 {
467 2 XERROR("error retrieving signal quality (possibly demod out of lock)\n");
468 2 }
469 1 if ( DRX_Ctrl( &demod, DRX_CTRL_SIG_STRENGTH, &sigStrength ) != DRX_STS_OK )
470 1 {
471 2 XERROR("error retrieving signal strength\n");
472 2 }
C51 COMPILER V8.02 EXAMPLE_FULL 02/11/2009 09:41:00 PAGE 9
473 1
474 1 #if ( SHOW_SIGNAL_QUALITY_AS_FLOATS )
475 1 XPRINTF( "\nMeasured values (floats) : \n" );
476 1 XPRINTF( "BER(PreViterbi) = %f\n" ,
477 1 ( (float) sigQuality.preViterbiBER / (float) sigQuality.scaleFactorBER ) );
478 1 XPRINTF( "BER(PostViterbi) = %f\n" ,
479 1 ( (float) sigQuality.postViterbiBER / (float) sigQuality.scaleFactorBER ) );
480 1 XPRINTF( "Packet Errors = %d\n" ,
481 1 ( sigQuality.packetError ) );
482 1 XPRINTF( "MER = %f dB\n" ,
483 1 ( (float) sigQuality.MER / 10.0 ) );
484 1 XPRINTF( "Signal Strength = %f %%\n" ,
485 1 ( (float) sigStrength * 100.0 / 1023.0 ) );
486 1 #endif
487 1
488 1 #if ( SHOW_SIGNAL_QUALITY_AS_INTEGERS )
489 1 XPRINTF( "\nMeasured values (integers) : \n" );
490 1 XPRINTF( "BER(PreViterbi) = %d.%6.6d\n" ,
491 1 (sigQuality.preViterbiBER/sigQuality.scaleFactorBER) ,
492 1 (sigQuality.preViterbiBER%sigQuality.scaleFactorBER) );
493 1 XPRINTF( "BER(PostViterbi) = %d.%6.6d\n" ,
494 1 (sigQuality.postViterbiBER/sigQuality.scaleFactorBER) ,
495 1 (sigQuality.postViterbiBER%sigQuality.scaleFactorBER) );
496 1 XPRINTF( "Packet Errors = %d\n" , sigQuality.packetError );
497 1 XPRINTF( "MER = %3d.%1.1d dB\n" ,
498 1 (sigQuality.MER/10) ,
499 1 (sigQuality.MER%10) );
500 1 XPRINTF( "Signal Strength = %4d (range 0 to 1023)\n" ,
501 1 sigStrength );
502 1 #endif
503 1
504 1 #if ( SHOW_SIGNAL_QUALITY_AS_INDICATORS )
505 1 {
506 2 u16_t indicatorQuality, indicatorStrength;
507 2
508 2 /* map signal quality to a useful range from 0 to 100 */
509 2 /* In this case, MER range from 8- to 28+ dB range is mapped */
510 2 indicatorQuality = 0;
511 2 if ( sigQuality.MER > 80 )
512 2 {
513 3 indicatorQuality = (sigQuality.MER - 80) / 2;
514 3 if ( indicatorQuality > 100 )
515 3 {
516 4 indicatorQuality = 100;
517 4 }
518 3 }
519 2
520 2 /* map signal strength to a useful range from 0 to 100 */
521 2 /* Depending on the hardware, this might need some midification */
522 2 indicatorStrength = 100;
523 2 if ( sigStrength < 1000 )
524 2 {
525 3 indicatorStrength = sigStrength/10;
526 3 }
527 2
528 2 XPRINTF("\nMeasured values (indicator mapping) : \n");
529 2 XPRINTF( ("Signal Quality = %3d %%\n") , indicatorQuality );
530 2 XPRINTF( ("Signal Strength = %3d %%\n") , indicatorStrength );
531 2 }
532 1 #endif
533 1
534 1 XWAITKEYPRESSED( "\nPress enter to terminate system.\n" );
C51 COMPILER V8.02 EXAMPLE_FULL 02/11/2009 09:41:00 PAGE 10
535 1
536 1 /*-----------------------------------------------------------------------*/
537 1 /* (7) Terminate system */
538 1 /*-----------------------------------------------------------------------*/
539 1
540 1 /* close demodulator */
541 1 if ( DRX_Close( &demod ) != DRX_STS_OK )
542 1 {
543 2 XERROR("failure: error closing demodulator instance\n");
544 2 }
545 1 XPRINTF("DRX demodulator instance closed\n");
546 1
547 1 /* terminate driver */
548 1 if ( DRX_Term() != DRX_STS_OK )
549 1 {
550 2 XERROR("failure: error terminating DRX driver\n");
551 2 }
552 1 XPRINTF("DRX driver terminated\n");
553 1
554 1 if ( DRXBSP_HST_Term() != DRX_STS_OK )
555 1 {
556 2 XERROR("failure: error terminating host bsp\n");
557 2 }
558 1 XPRINTF("Host bsp terminated\n");
559 1
560 1 if ( DRXBSP_I2C_Term() != DRX_STS_OK )
561 1 {
562 2 XERROR("failure: error terminating i2c\n");
563 2 }
564 1 XPRINTF("I2C terminated\n");
565 1
566 1 XWAITKEYPRESSED( "\nPress enter to quit.\n" );
567 1 return 0;
568 1 }
569
570
571 /*============================================================================*/
572 /* END OF FILE */
573
C51 COMPILATION COMPLETE. 0 WARNING(S), 2 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -