📄 tunerapp.c
字号:
goto _label_instructions; uStart = strtol(argv[argi+1], NULL, 10); uEnd = strtol(argv[argi+2], NULL, 10); argi = argi + 3; break; case 'I': interactive = TRUE; argi = argi + 1; break; } // end switch } //end while if( tunerapiOpen( &tunerapiCfg, &(listTunerContext[nTuners])) != RM_OK ) { printf("tunerapiOpen() failed\n"); goto main_exit; } MPRINT(("Created and SELECTED Tuner %ld\n", nTuners)); selectedTuner = nTuners; nTuners++; if( (uStart != 0) && (uEnd != 0) ) { SCAN_RESULT_T scanresult_T; if( tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_TunerLowestFrequency, &pd_U) != RM_OK ) printf("unexpected error, tunerapiGetProperty(TunerLowestFrequency failed\n"); if( uStart < pd_U.uFrequency ) { printf("start frequency too low for selected tuner, set to lowest frequency\n"); uStart = pd_U.uFrequency; } if( tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_TunerHighestFrequency, &pd_U) != RM_OK ) printf("unexpected error, tunerapiGetProperty(TunerHighestFrequency failed\n"); if( uEnd > pd_U.uFrequency ) { printf("end frequency too high for selected tuner, set to highest frequency\n"); uEnd = pd_U.uFrequency; } printf("tunerapiScan() %ld to %ld .....\n", uStart, uEnd); r = tunerapiScan(listTunerContext[selectedTuner], uStart, uEnd, &scanresult_T); switch (r) { default: case RM_ERROR: printf("error\n"); break; case RM_NOT_FOUND: printf("no frequencies found\n"); break; case RM_OK: printf("found frequency and tuner set to %ld\n", scanresult_T.uFrequency); break; } } if( (initialFrequency) != 0 ) { if( tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_TunerLowestFrequency, &pd_U) != RM_OK ) printf("unexpected error, tunerapiGetProperty(TunerLowestFrequency failed\n"); if( initialFrequency < pd_U.uFrequency ) { printf("start frequency too low for selected tuner, set to lowest frequency\n"); initialFrequency = pd_U.uFrequency; } if( tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_TunerHighestFrequency, &pd_U) != RM_OK ) printf("unexpected error, tunerapiGetProperty(TunerHighestFrequency failed\n"); if( initialFrequency > pd_U.uFrequency ) { printf("end frequency too high for selected tuner, set to highest frequency\n"); initialFrequency = pd_U.uFrequency; } pd_U.uFrequency = initialFrequency; //if( (r = tunerapiSetProperty(listTunerContext[selectedTuner], TunerApiProperty_TuneFrequency, &pd_U)) == RM_OK ) if( (r = tunerapiTune(listTunerContext[selectedTuner], initialFrequency)) == RM_OK ) printf("*Tuner %i - Changed to Frequency %li\n", selectedTuner, initialFrequency); else printf("!Tuner %i - tunerChangeChannel() to Frequency %li Failed with %d\n", selectedTuner, initialFrequency, r); { do { if( (r = tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_SignalStatus, &pd_U)) == RM_OK ) { printf("*Tuner %d - tunerapiGetProperty(SignalStatus) = %s\n", selectedTuner, (pd_U.nSignalStatus==TunerSignalStatus_CarrierOk)?"Locked":"no signal"); } else { printf("!Tuner %d - tunerapiGetProperty(SignalStatus) FAILED %d\n", selectedTuner, r); } mum_usleep(1000); } while( pd_U.nSignalStatus == TunerSignalStatus_Searching ); if( (r = tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_TuneFrequency, &pd_U)) != RM_OK ) printf("!Tuner %d - tunerapiGetProperty(TuneFrequency) FAILED %d\n", selectedTuner, r); else printf("*Tuner %d - Tune Frequency = %ld, This is only the CENTER, may have offsets(Dvb-T)\n", selectedTuner, pd_U.uFrequency); if( (r = tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_SignalStrength, &pd_U)) != RM_OK ) printf("!Tuner %d - tunerapiGetProperty(SignalStrength) FAILED %d, May be ok for ANALOG Tuners\n", selectedTuner, r); else printf("*Tuner %d - Signal Strength = %li\n", selectedTuner, pd_U.iSignalStrength); } } if( interactive == FALSE ) { // DON"T CLOSE TUNER ON EXIT so that we stay tuned to the channel! closeTunerOnExit = FALSE; goto main_exit; } } // end if (cmd line only application) // interactive mode // Right now, this shows you how you can do a RE-OPEN to switch modes quickly. { TUNERAPI_CFG tunerapiCfg; TUNERAPI_PROPERTY_DATA_U pd_U; memset(&tunerapiCfg, 0, sizeof(TUNERAPI_CFG)); tunerapiCfg.pI2Cal_Context = (TUNERAPI_CONTEXT*) &i2cConfig; tunerapiCfg.nTunerInput = TunerInput_First; show_commands(); while(1) { printf("> "); if( fgets( aBuffer, 255, stdin) != NULL ) { switch( aBuffer[0] ) { case 'M': { // this is the only multimode tuner that I have printf("*Philips TUV1236D Tuner selected\n"); tunerapiCfg.nTunerModel = TunerModel_Philips_TUV1236D; tunerapiCfg.I2CAddress[0] = 0x14; tunerapiCfg.I2CAddress[1] = 0x16; switch ( aBuffer[2] ) { case 'b': tunerapiCfg.nTunerMode = TunerMode_Analog_tvBG; printf("*Mode Analog tvBG selected\n"); break; case 'i': tunerapiCfg.nTunerMode = TunerMode_Analog_tvI; printf("*Mode Analog tvI selected\n"); break; case 'd': tunerapiCfg.nTunerMode = TunerMode_Analog_tvDK; printf("*Mode Analog tvDK selected\n"); break; case 'l': tunerapiCfg.nTunerMode = TunerMode_Analog_tvL; printf("*Mode Analog tvL selected\n"); break; case '1': tunerapiCfg.nTunerMode = TunerMode_Analog_tvL1; printf("*Mode Analog tvL1 selected\n"); break; case 'm': tunerapiCfg.nTunerMode = TunerMode_Analog_tvM; printf("*Mode Analog tvM selected\n"); break; case 'j': tunerapiCfg.nTunerMode = TunerMode_Analog_tvMJapan; printf("*Mode Analog tvM Japan selected\n"); break; case 'p': tunerapiCfg.nTunerMode = TunerMode_Atsc_Parallel; printf("*Mode Atsc Parallel selected\n"); break; case 's': tunerapiCfg.nTunerMode = TunerMode_Atsc_Serial; printf("*Mode Atsc Serial selected\n"); break; case 't': tunerapiCfg.nTunerMode = TunerMode_DvbT_Parallel; printf("*Mode Dvb-T parallel selected\n"); break; case 'u': tunerapiCfg.nTunerMode = TunerMode_DvbT_Serial; printf("*Mode Dvb-T Serial selected\n"); break; default: break; } if( tunerapiOpen( &tunerapiCfg, &(listTunerContext[selectedTuner])) != RM_OK ) printf("tunerapiOpen() failed\n"); } break; case 'C': { sscanf( aBuffer+2, "%ld", &initialFrequency ); if( (r = tunerapiTune(listTunerContext[selectedTuner], initialFrequency)) == RM_OK ) printf("*Tuner %i - Changed to Frequency %li\n", selectedTuner, initialFrequency); else printf("!Tuner %i - tunerChangeChannel() to Frequency %li Failed with %d\n", selectedTuner, initialFrequency, r); { do { if( (r = tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_SignalStatus, &pd_U)) == RM_OK ) { printf("*Tuner %d - tunerapiGetProperty(SignalStatus) = %s\n", selectedTuner, (pd_U.nSignalStatus==TunerSignalStatus_CarrierOk)?"Locked":"no signal"); } else { printf("!Tuner %d - tunerapiGetProperty(SignalStatus) FAILED %d\n", selectedTuner, r); } mum_usleep(1000); } while( pd_U.nSignalStatus == TunerSignalStatus_Searching ); if( (r = tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_TuneFrequency, &pd_U)) != RM_OK ) printf("!Tuner %d - tunerapiGetProperty(TuneFrequency) FAILED %d\n", selectedTuner, r); else printf("*Tuner %d - Tune Frequency = %ld, This is only the CENTER, may have offsets(Dvb-T)\n", selectedTuner, pd_U.uFrequency); if( (r = tunerapiGetProperty(listTunerContext[selectedTuner], TunerApiProperty_SignalStrength, &pd_U)) != RM_OK ) printf("!Tuner %d - tunerapiGetProperty(SignalStrength) FAILED %d, May be ok for ANALOG Tuners\n", selectedTuner, r); else printf("*Tuner %d - Signal Strength = %li\n", selectedTuner, pd_U.iSignalStrength); } } break; case 'q': case 'Q': goto main_exit; break; } // end switch } else { show_commands(); } // end if ( fgets() ) } } main_exit: { RMint32 i; for( i = 0; i < nTuners; i++ ) { // If I don't close, I'm leaking memory! // Obviously for testing only.... if( closeTunerOnExit ) { MPRINT(("*main Closing Tuners..\n")); if( (r = tunerapiClose(listTunerContext[i])) != RM_OK ) MPRINT(("main !tunerClose FAILED %d\n", r)); } } } mum_exit(pGBus, pLLAD); return 0;}void show_commands(void){ printf("\n"); printf(" ? - this screen\n\n"); printf(" q - quit\n\n");}RMvoid show_cmdline(char* appname){ printf("%s [i] [T tuner-type] [C channel-frequency] [M mode] [S scan-start scan-stop] [H] [A low-i2c-address high-i2c-address]\n", appname); printf("Example: %s T 1 C 56750000 S 56000000 57000000 A 0x14 0x16\n", appname); printf("\n"); printf("T - 1 = philips tuv1236d\n"); printf(" 2 = philips fq1216me\n"); printf(" 3 - philips tu1216\n"); printf("\n"); printf("M - b = pal B/G\n"); printf(" i = pal I\n"); printf(" d = pal D/K\n"); printf(" l = L\n"); printf(" 1 = L'\n"); printf(" m = ntsc M\n"); printf(" j = ntsc M Japan\n"); printf(" p = ATSC parallel\n"); printf(" s = ATSC serial\n"); printf(" t = DVB-T parallel\n"); printf(" u = DVB-T serial\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -