From: Mauro Carvalho Chehab Date: Sat, 19 Jan 2013 14:15:00 +0000 (-0200) Subject: dvb-fe: Add a method to report PER X-Git-Tag: v4l-utils-0.9.4~85 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ded03342ab76a30e16e2cc9b1e00ee281e2cd0fd;p=platform%2Fupstream%2Fv4l-utils.git dvb-fe: Add a method to report PER Signed-off-by: Mauro Carvalho Chehab --- diff --git a/lib/include/dvb-fe.h b/lib/include/dvb-fe.h index daf2dc3..52898d1 100644 --- a/lib/include/dvb-fe.h +++ b/lib/include/dvb-fe.h @@ -152,6 +152,8 @@ int dvb_fe_get_stats(struct dvb_v5_fe_parms *parms); float dvb_fe_retrieve_ber(struct dvb_v5_fe_parms *parms, unsigned layer, enum fecap_scale_params *scale); +float dvb_fe_retrieve_per(struct dvb_v5_fe_parms *parms, unsigned layer, + enum fecap_scale_params *scale); /* Get both status statistics and dvb parameters */ diff --git a/lib/include/dvb-v5-std.h b/lib/include/dvb-v5-std.h index 351ed88..037453c 100644 --- a/lib/include/dvb-v5-std.h +++ b/lib/include/dvb-v5-std.h @@ -60,10 +60,11 @@ extern const void *dvb_v5_attr_names[]; #define DTV_STATUS (DTV_MAX_USER_COMMAND + 1) #define DTV_BER (DTV_MAX_USER_COMMAND + 2) +#define DTV_PER (DTV_MAX_USER_COMMAND + 3) -#define DTV_MAX_STAT_COMMAND DTV_BER +#define DTV_MAX_STAT_COMMAND DTV_PER -#define DTV_NUM_STATS_PROPS 8 /* 6 from DVBv5.10 API plus Status and BER */ +#define DTV_NUM_STATS_PROPS 9 /* 6 from DVBv5.10 API plus Status, BER and PER */ enum dvb_sat_polarization { POLARIZATION_OFF = 0, @@ -74,7 +75,7 @@ enum dvb_sat_polarization { }; extern const char *dvb_sat_pol_name[6]; -extern const char *dvb_user_name[13]; +extern const char *dvb_user_name[14]; extern const void *dvb_user_attr_names[]; #endif diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c index 38a68ee..a14e83c 100644 --- a/lib/libdvbv5/dvb-fe.c +++ b/lib/libdvbv5/dvb-fe.c @@ -801,6 +801,28 @@ float dvb_fe_retrieve_ber(struct dvb_v5_fe_parms *parms, unsigned layer, return ber32; } +float dvb_fe_retrieve_per(struct dvb_v5_fe_parms *parms, unsigned layer, + enum fecap_scale_params *scale) +{ + uint64_t n, d; + + if (!parms->stats.has_per[layer]) { + *scale = FE_SCALE_NOT_AVAILABLE; + return -1; + } + + d = parms->stats.cur[layer].block_count - parms->stats.prev[layer].block_count; + if (!d) { + *scale = FE_SCALE_NOT_AVAILABLE; + return -1; + } + *scale = FE_SCALE_COUNTER; + + n = parms->stats.cur[layer].block_error - parms->stats.prev[layer].block_error; + + return ((float)n)/d; +} + static void dvb_fe_update_counters(struct dvb_v5_fe_parms *parms) { struct dtv_stats *error, *count; diff --git a/lib/libdvbv5/dvb-v5-std.c b/lib/libdvbv5/dvb-v5-std.c index c7101eb..cde7691 100644 --- a/lib/libdvbv5/dvb-v5-std.c +++ b/lib/libdvbv5/dvb-v5-std.c @@ -221,7 +221,7 @@ const char *dvb_sat_pol_name[6] = { [5] = NULL, }; -const char *dvb_user_name[13] = { +const char *dvb_user_name[14] = { [DTV_POLARIZATION - DTV_USER_COMMAND_START] = "POLARIZATION", [DTV_VIDEO_PID - DTV_USER_COMMAND_START] = "VIDEO PID", [DTV_AUDIO_PID - DTV_USER_COMMAND_START] = "AUDIO PID", @@ -234,7 +234,8 @@ const char *dvb_user_name[13] = { [DTV_FREQ_BPF - DTV_USER_COMMAND_START] = "FREQ BPF", [DTV_STATUS - DTV_USER_COMMAND_START] = "STATUS", [DTV_BER - DTV_USER_COMMAND_START] = "BER", - [12] = NULL, + [DTV_PER - DTV_USER_COMMAND_START] = "PER", + [13] = NULL, }; const void *dvb_user_attr_names[] = {