@@ -67,6 +67,7 @@ int check_frontend (struct dvbfe_handle
struct dvbfe_info fe_info;
unsigned int samples = 0;
FILE *ttyFile=NULL;
+ int got_info;
// We dont write the "beep"-codes to stdout but to /dev/tty1.
// This is neccessary for Thin-Client-Systems or Streaming-Boxes
@@ -89,39 +90,59 @@ int check_frontend (struct dvbfe_handle
}
do {
- if (dvbfe_get_info(fe, FE_STATUS_PARAMS, &fe_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0) != FE_STATUS_PARAMS) {
+ got_info = dvbfe_get_info(fe, FE_STATUS_PARAMS, &fe_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0);
+ if (got_info & DVBFE_INFO_LOCKSTATUS) {
+ printf ("status %c%c%c%c%c | ",
+ fe_info.signal ? 'S' : ' ',
+ fe_info.carrier ? 'C' : ' ',
+ fe_info.viterbi ? 'V' : ' ',
+ fe_info.sync ? 'Y' : ' ',
+ fe_info.lock ? 'L' : ' ');
+ } else {
fprintf(stderr, "Problem retrieving frontend information: %m\n");
+ printf ("status ----- | ");
}
- printf ("status %c%c%c%c%c | ",
- fe_info.signal ? 'S' : ' ',
- fe_info.carrier ? 'C' : ' ',
- fe_info.viterbi ? 'V' : ' ',
- fe_info.sync ? 'Y' : ' ',
- fe_info.lock ? 'L' : ' ');
-
if (human_readable) {
- // SNR should be in units of 0.1 dB but some drivers do
- // not follow that rule, thus this heuristic.
- if (fe_info.snr < 1000)
- printf ("signal %3u%% | snr %4.1fdB | ber %d | unc %d | ",
- (fe_info.signal_strength * 100) / 0xffff,
- fe_info.snr / 10.,
- fe_info.ber,
- fe_info.ucblocks);
- else
- printf ("signal %3u%% | snr %3u%% | ber %d | unc %d | ",
- (fe_info.signal_strength * 100) / 0xffff,
- (fe_info.snr * 100) / 0xffff,
- fe_info.ber,
- fe_info.ucblocks);
+ if (got_info & DVBFE_INFO_SIGNAL_STRENGTH)
+ printf ("signal %3u%% | ", (fe_info.signal_strength * 100) / 0xffff);
+ else
+ printf ("signal ---%% | ");
+ if (got_info & DVBFE_INFO_SNR) {
+ // SNR should be in units of 0.1 dB but some drivers do
+ // not follow that rule, thus this heuristic.
+ if (fe_info.snr < 1000)
+ printf ("snr %4.1fdB | ", fe_info.snr / 10.);
+ else
+ printf ("snr %3u%% | ", (fe_info.snr * 100) / 0xffff);
+ } else
+ printf ("snr ---- | ");
+ if (got_info & DVBFE_INFO_BER)
+ printf ("ber %d | ", fe_info.ber);
+ else
+ printf ("ber - | ");
+ if (got_info & DVBFE_INFO_UNCORRECTED_BLOCKS)
+ printf ("unc %d | ", fe_info.ucblocks);
+ else
+ printf ("unc - | ");
} else {
- printf ("signal %04x | snr %04x | ber %08x | unc %08x | ",
- fe_info.signal_strength,
- fe_info.snr,
- fe_info.ber,
- fe_info.ucblocks);
+ if (got_info & DVBFE_INFO_SIGNAL_STRENGTH)
+ printf ("signal %04x | ", fe_info.signal_strength);
+ else
+ printf ("signal ---- | ");
+ if (got_info & DVBFE_INFO_SNR)
+ printf ("snr %04x | ", fe_info.snr);
+ else
+ printf ("snr ---- | ");
+ if (got_info & DVBFE_INFO_BER)
+ printf ("ber %08x | ", fe_info.ber);
+ else
+ printf ("ber -------- | ");
+ if (got_info & DVBFE_INFO_UNCORRECTED_BLOCKS)
+ printf ("unc %08x | ", fe_info.ucblocks);
+ else
+ printf ("unc -------- | ");
}
if (fe_info.lock)