This is an automatic generated email to let you know that the following patch were queued at the http://git.linuxtv.org/v4l-utils.git tree:
Subject: libdvbv5: Check if the stats is valid and return it to userspace Author: Mauro Carvalho Chehab <[email protected]> Date: Sun Aug 19 13:50:12 2012 -0300 Signed-off-by: Mauro Carvalho Chehab <[email protected]> lib/include/dvb-fe.h | 5 +-- lib/libdvbv5/dvb-fe.c | 56 ++++++++++++++++++++++++++++++------------------ 2 files changed, 37 insertions(+), 24 deletions(-) --- http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=68b20e2d1a159b966261a36139e7252b760d9415 diff --git a/lib/include/dvb-fe.h b/lib/include/dvb-fe.h index b2c3587..c9b2185 100644 --- a/lib/include/dvb-fe.h +++ b/lib/include/dvb-fe.h @@ -60,6 +60,7 @@ enum dvbv3_emulation_type { struct dvb_v5_stats { struct dtv_property prop[DTV_MAX_STATS]; + int valid[DTV_MAX_STATS]; }; @@ -130,9 +131,7 @@ int dvb_fe_get_parms(struct dvb_v5_fe_parms *parms); /* Get statistics */ int dvb_fe_retrieve_stats(struct dvb_v5_fe_parms *parms, - unsigned cmd, uint32_t *value); -int dvb_fe_store_stats(struct dvb_v5_fe_parms *parms, - unsigned cmd, uint32_t value); + unsigned cmd, uint32_t *value); int dvb_fe_get_stats(struct dvb_v5_fe_parms *parms); /* Get both status statistics and dvb parameters */ diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c index 8ed73b6..eadabf6 100644 --- a/lib/libdvbv5/dvb-fe.c +++ b/lib/libdvbv5/dvb-fe.c @@ -657,13 +657,16 @@ ret: } int dvb_fe_retrieve_stats(struct dvb_v5_fe_parms *parms, - unsigned cmd, uint32_t *value) + unsigned cmd, uint32_t *value) { - int i; + int i, valid; for (i = 0; i < DTV_MAX_STATS; i++) { if (parms->stats.prop[i].cmd != cmd) continue; *value = parms->stats.prop[i].u.data; + valid = parms->stats.valid[i]; + if (!valid) + return EINVAL; return 0; } dvb_logerr("%s not found on retrieve", @@ -672,14 +675,16 @@ int dvb_fe_retrieve_stats(struct dvb_v5_fe_parms *parms, return EINVAL; } -int dvb_fe_store_stats(struct dvb_v5_fe_parms *parms, - unsigned cmd, uint32_t value) +static int dvb_fe_store_stats(struct dvb_v5_fe_parms *parms, + unsigned cmd, uint32_t value, + int valid) { int i; for (i = 0; i < DTV_MAX_STATS; i++) { if (parms->stats.prop[i].cmd != cmd) continue; parms->stats.prop[i].u.data = value; + parms->stats.valid[i] = valid; return 0; } dvb_logerr("%s not found on store", @@ -690,33 +695,42 @@ int dvb_fe_store_stats(struct dvb_v5_fe_parms *parms, int dvb_fe_get_stats(struct dvb_v5_fe_parms *parms) { - fe_status_t status; - uint32_t ber, ucb; - uint16_t strength, snr; - int i; + fe_status_t status = 0; + uint32_t ber= 0, ucb = 0; + uint16_t strength = 0, snr = 0; + int i, valid; if (ioctl(parms->fd, FE_READ_STATUS, &status) == -1) { dvb_perror("FE_READ_STATUS"); - status = -1; - } - dvb_fe_store_stats(parms, DTV_STATUS, status); + valid = 0; + } else + valid = 1; + dvb_fe_store_stats(parms, DTV_STATUS, status, valid); if (ioctl(parms->fd, FE_READ_BER, &ber) == -1) - ber = 0; - dvb_fe_store_stats(parms, DTV_BER, ber); + valid = 0; + else + valid = 1; + dvb_fe_store_stats(parms, DTV_BER, ber, valid); if (ioctl(parms->fd, FE_READ_SIGNAL_STRENGTH, &strength) == -1) - strength = (uint16_t) -1; - dvb_fe_store_stats(parms, DTV_SIGNAL_STRENGTH, strength); + valid = 0; + else + valid = 1; + + dvb_fe_store_stats(parms, DTV_SIGNAL_STRENGTH, strength, valid); if (ioctl(parms->fd, FE_READ_SNR, &snr) == -1) - snr = (uint16_t) -1; - dvb_fe_store_stats(parms, DTV_SNR, snr); + valid = 0; + else + valid = 1; + dvb_fe_store_stats(parms, DTV_SNR, snr, valid); if (ioctl(parms->fd, FE_READ_UNCORRECTED_BLOCKS, &ucb) == -1) - ucb = 0; - dvb_fe_store_stats(parms, DTV_UNCORRECTED_BLOCKS, snr); - + valid = 0; + else + valid = 1; + dvb_fe_store_stats(parms, DTV_UNCORRECTED_BLOCKS, snr, valid); if (parms->verbose > 1) { dvb_log("Status: "); @@ -754,7 +768,7 @@ int dvb_fe_get_event(struct dvb_v5_fe_parms *parms) dvb_log (" %s", fe_status_name[i].name); } } - dvb_fe_store_stats(parms, DTV_STATUS, status); + dvb_fe_store_stats(parms, DTV_STATUS, status, 1); dvb_fe_retrieve_parm(parms, DTV_FREQUENCY, &event.parameters.frequency); dvb_fe_retrieve_parm(parms, DTV_INVERSION, &event.parameters.inversion); _______________________________________________ linuxtv-commits mailing list [email protected] http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits
