Files
v4l2_libs/include/libdvbv5/dvb-fe.h
svcmobrel-release 3ead3e7dec Updating prebuilts and/or headers
60e29f95ea52df4407d771330897813cdb38340f - libv4lconvert/libv4lsyscall-priv.h
1f1d1e05443c4b824cd697c0ce5efa9ea1277964 - libv4lconvert/ov518-decomp.c
f4d73412805f12fa08dd79a43798a7f8d7acece9 - libv4lconvert/pac207.c
cc3f3e94a21795990610e63887c30528bde7b42e - libv4lconvert/bayer.c
3c49d99b9753208a9c1c2a9c738a1e7ad291ca22 - libv4lconvert/jpeg_memsrcdest.h
3271d74d02e2f33c16e3e50aeb1268eb9c440782 - libv4lconvert/rgbyuv.c
1949e23fe99ccd0a05dcd084848f6d38b0af7ab6 - libv4lconvert/hm12.c
4eff5c1a5e0b99ce4d6e9aa63645d9628467fdc3 - libv4lconvert/sn9c2028-decomp.c
b2c19c2eac71d39d3fb883cdc159a69c2afa8fd6 - libv4lconvert/ov511-decomp.c
84c9c3812d4b5f237c8cd616d37fc1161a212acc - libv4lconvert/se401.c
463725aa4dd3fecaf89c0b8bbf4747f8f7577935 - libv4lconvert/jpeg.c
fbbffd8182b4fe2e85289b6e784f70cba7ea7b1d - libv4lconvert/sq905c.c
db3c69c666e451c5d4ef6d1b5a3117f4b128baa4 - libv4lconvert/libv4lconvert-priv.h
8b7644ac3d5c4161cfb6dcc2a34013f4c379c665 - libv4lconvert/libv4lconvert.export
22fd03618c218ae14ba59a5aab5f30b0acd2b6ea - libv4lconvert/Makefile
72953a5a3a56b0188d35f49246356b9c8c35756c - libv4lconvert/helper.c
66dd7958319442bd52ba40ede28fbfe31bb4e074 - libv4lconvert/cpia1.c
1d9c446cd8a232da87bd79acebc93e018ec72499 - libv4lconvert/jidctflt.c
cc8982bb6f753249181c715fe6430ffefc78c23b - libv4lconvert/stv0680.c
25130d299463897a09e8b9adf72389dac2e89fa4 - libv4lconvert/tinyjpeg-internal.h
22a502c238e48f4b939c81de41feccfc7c366766 - libv4lconvert/Makefile.dGPU
fb3344cfa8df97688332ee4fd3b17968437e8ad5 - libv4lconvert/helper-funcs.h
5430e46abb1ac7039ed0309ca338237533ff29c9 - libv4lconvert/sn9c20x.c
d6c1aba89bbcb6fef46a6f22b7ea01025435c44d - libv4lconvert/Makefile.am
3e8e6c1fb85e3c4b58c4e9b2b0a223ddc793edcb - libv4lconvert/libv4lconvert.pc.in
6ad4947dca51a7e67e056561cdb445d6c354d23c - libv4lconvert/libv4lconvert.c
ff7444c48a8da88f8a466cfb138e30e585828cb3 - libv4lconvert/jl2005bcd.c
803c4d0b9364050eda163452b8792e62e221ab6d - libv4lconvert/tinyjpeg.h
f061a4e0e45ca8e0dbab630dd477e19a6c915fda - libv4lconvert/spca501.c
07f8e7c84abfbbe76d49d8bfd1f4eae6ea39a90b - libv4lconvert/jpgl.c
fa751ff0f78845f3b4591396710df3b165bc8d11 - libv4lconvert/mr97310a.c
be9e3bf3d7d1086b6eed0c1bf2f574c2b1737c00 - libv4lconvert/tinyjpeg.c
033894511bd7e8a374a52486889658faa17918c4 - libv4lconvert/flip.c
b694b6348e035b3da880824c2c2768145c9b5199 - libv4lconvert/jpeg_memsrcdest.c
725c9b8d0bfadba566cf200921e602961cb12705 - libv4lconvert/spca561-decompress.c
ddd39b2fe0e2a86a6c64031ccc0d36edfd9b0f1a - libv4lconvert/sn9c10x.c
f08c902ecd48c2739956606b502fc0b8e4007703 - libv4lconvert/crop.c
dae9c69b7f019d7d4494cd56e2cf757e8510824a - libv4lconvert/processing/whitebalance.c
0390d660eb130f0e580832bcf8ad5069010d2696 - libv4lconvert/processing/libv4lprocessing.h
a54c2cb0439e606af01d0b4f02704f411819d98c - libv4lconvert/processing/libv4lprocessing.c
ebf12bcf99f35fb9c400b04a1439e68598268249 - libv4lconvert/processing/gamma.c
33ab91b54108e8c24cbb80c5c335d96391d440b2 - libv4lconvert/processing/libv4lprocessing-priv.h
7da402829dbff238ca6ac829c037a85476185db6 - libv4lconvert/processing/autogain.c
1e08fb01a598d71e3fc69656c4f2291f7dc13105 - libv4lconvert/control/libv4lcontrol.h
19a7fd04cdeba61172f281806d030472dee79fcd - libv4lconvert/control/libv4lcontrol.c
70f4992835e964b2698473971904375333e3659b - libv4lconvert/control/libv4lcontrol-priv.h
9d456d1772885d900865a8958c0291e13d509de5 - libv4l2/v4l2convert.c
7fa618184ff89737d13164be0b79e227d81f398c - libv4l2/log.c
d1f2b6f016cfb90c616d848418feb915e3737fa7 - libv4l2/libv4l2.c
766aaca553b0166eb736557e44ad42b69464aa53 - libv4l2/libv4l2.export
e6516370c43e4869e05a540d2e4ef584ac64890a - libv4l2/v4l2-plugin.c
752cb342c44989a8c172e3280e220a6fa2ec86b5 - libv4l2/Makefile
4ba98a607592ed0b8327b387af354544c65c9b67 - libv4l2/v4l2-plugin-android.c
2542aabb7fbff4b1a09faaadec6006c4410a6d10 - libv4l2/libv4l2-priv.h
ffecae84262f548deac1da0fa51f1aba6b6f96a0 - libv4l2/Makefile.dGPU
8e335567bf404eeb3d180dd384309f687f2ab944 - libv4l2/Makefile.am
cbcee4426c19c168c6f49d04af3a0b2e30c0b681 - libv4l2/libv4l2.pc.in
c84a9a115a21d1fd20da0f6ca3df7b46dd23cd2a - include/config.h
1edc439e6c0fc98513fa4a69557eb6221d043be0 - include/libv4l2.h
6feb5b2b8c99c99712dd1ea7fe9ab674d58bf86b - include/libv4l1.h
bc44111fd6b2f0374a9fc67b1b23666c5c498b2c - include/libv4l2rds.h
f751b481c4a9203345cdbb6459d0f2882f7cdbd9 - include/libv4lconvert.h
f2b73fa5ab10ea7038e58bd9a4461d8e16316249 - include/libv4l1-videodev.h
94434b9692371b7d5f54ddef2141d22d90079ce9 - include/libv4l-plugin.h
c8b4fc511833f0993fa740a529e1f61e0f5a216f - include/libdvbv5/mpeg_es.h
fb8d640da36b6a156cbe0ef12dc25468de89a2a1 - include/libdvbv5/dvb-sat.h
9a2b20076d6728b5799096e4149e33a73119e1ef - include/libdvbv5/desc_sat.h
ac87e3306569dae329809f27ef227c5d50f0b60e - include/libdvbv5/desc_event_short.h
efa3a711499f68ae370d49d98dc1963bf6bafcd8 - include/libdvbv5/desc_extension.h
ad13bfa0b1642fc72cca387e62bc193974c8d5ee - include/libdvbv5/atsc_header.h
b867a2e7941d718aa64b2f6a1402322b616cb2da - include/libdvbv5/pmt.h
bdf514383ca0afe981cf4fd6af86440db2dc6667 - include/libdvbv5/pat.h
96db22ef84892a36d5df3cffa0b30d5bad01939c - include/libdvbv5/desc_logical_channel.h
92d4c28148d0b537c8afc289e1a76de68435cba0 - include/libdvbv5/dvb-scan.h
7544b5fb8f621a9c637c40d8f7a2a71f6ab4bd63 - include/libdvbv5/desc_hierarchy.h
b72b6d1ffcdd81e3e631c7c20bb30e5c287dc7ff - include/libdvbv5/vct.h
9d523ee179af955a687662996050ee3cfaacf2ab - include/libdvbv5/crc32.h
6e6fd4c61c1f61006c63214cbe4868d49428ddb9 - include/libdvbv5/mpeg_pes.h
d7a096d51e3050c8f52e0e2111d88b71a5313da1 - include/libdvbv5/dvb-demux.h
5b4a5e7fb30a7f28118be012837e73a7151d2619 - include/libdvbv5/cat.h
30e9a7240938943de2725f2b335b19ad320179a5 - include/libdvbv5/header.h
4c412880f0c49cd00cb16e56eed082c4744211a5 - include/libdvbv5/countries.h
e81b7f75c11f175cf365fc7fb535e80828f10e24 - include/libdvbv5/dvb-file.h
2560f18846a535a2c02e1ae449511e731f11c011 - include/libdvbv5/desc_ca_identifier.h
c18291ff9009bfe71a2c7c6f0fce75331dc95e30 - include/libdvbv5/sdt.h
44ab16a8d4eae09690c71a6301927c1da55dda6d - include/libdvbv5/descriptors.h
188fc2cbec97288787a7f66554a4b6288224f980 - include/libdvbv5/desc_isdbt_delivery.h
c1212a9308d96730de547648d3cda2fc144d0e29 - include/libdvbv5/desc_atsc_service_location.h
7fb0966c6a1ccdf1a8844aed4a94d4ae1d02fcd7 - include/libdvbv5/dvb-fe.h
40a06b5375dbc0de88a15d26cc6c1e9a505119bc - include/libdvbv5/eit.h
22c83d133e5c1d2648efb3028e0d89c970d0aad4 - include/libdvbv5/desc_partial_reception.h
1ba874a7cad36ff31e4af3bfb37b98c05063d6b2 - include/libdvbv5/desc_event_extended.h
146f4f53fc49c66b59905249c0142efffd72fc54 - include/libdvbv5/desc_network_name.h
100c02ce3bc364ddff895c75f4fb1f928a748d2d - include/libdvbv5/desc_cable_delivery.h
7645dda247bcd45628afbb74ec2707a47050992e - include/libdvbv5/nit.h
73b7b0cf684de0e8a4eae49a8521f81b411d7b72 - include/libdvbv5/desc_ts_info.h
6bd2ed0beaf6aa4838e239198564fd8e1d20a3a1 - include/libdvbv5/desc_t2_delivery.h
d562371bb8a3b961c4d63a0f5618453bdff4bcd3 - include/libdvbv5/dvb-log.h
ef979f3276cc3cad6e947865a42643fbba860c69 - include/libdvbv5/mgt.h
2f55ba765c689500401111747bb381b5aca77b30 - include/libdvbv5/desc_ca.h
450fab787e61210c0c5f527df92c31c90b44a113 - include/libdvbv5/desc_service.h
cabecc6d7c9fdf1c437273bd6a746bf83c156f72 - include/libdvbv5/desc_frequency_list.h
5e2dfc1d9a71805389e9a7932812695d0309050c - include/libdvbv5/dvb-frontend.h
7a6093b13354d054cac78ea118a96e813cac3395 - include/libdvbv5/atsc_eit.h
9b5cfad4a5f41cbf886507da6e79b07314827b32 - include/libdvbv5/desc_language.h
98365b48442b9e3abb58101983b5da8c14f78289 - include/libdvbv5/dvb-v5-std.h
4fe7def34ff640fc5e327b3596298169fdfe2f1c - include/libdvbv5/mpeg_ts.h
02168c58e3c772f116f075085579ac4a8422e819 - include/libdvbv5/desc_terrestrial_delivery.h

Change-Id: I9171be045a8449f064603120422debb54883a76d
2023-08-03 21:11:13 -07:00

772 lines
26 KiB
C

/*
* Copyright (c) 2011-2014 - Mauro Carvalho Chehab
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation version 2
* of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*/
#ifndef _DVB_FE_H
#define _DVB_FE_H
#include <stdio.h>
#include <errno.h>
#include <stdint.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <string.h>
#include "dvb-frontend.h"
#include "dvb-sat.h"
#include "dvb-log.h"
/**
* @file dvb-fe.h
* @ingroup frontend
* @brief Provides interfaces to deal with DVB frontend.
* @copyright GNU General Public License version 2 (GPLv2)
* @author Mauro Carvalho Chehab
*
* The libdvbv5 API works with a set of key/value properties.
* There are two types of properties:
*
* - The ones defined at the Kernel's frontent API, that are found at
* /usr/include/linux/dvb/frontend.h (actually, it uses a local copy
* of that file, stored at ./include/linux/dvb/frontend.h)
*
* - Some extra properties used by libdvbv5. Those can be found at
* lib/include/libdvbv5/dvb-v5-std.h and start at DTV_USER_COMMAND_START.
*
* Just like the DTV properties, the stats are cached. That warrants that
* all stats are got at the same time, when dvb_fe_get_stats() is called.
*
* @par Bug Report
* Please submit bug reports and patches to linux-media@vger.kernel.org
*/
/**
* @def ARRAY_SIZE(array)
* @brief Calculates the number of elements of an array
* @ingroup ancillary
*/
#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
/**
* @def MAX_DELIVERY_SYSTEMS
* @brief Max number of delivery systems for a given frontend.
* @ingroup frontend
*/
#define MAX_DELIVERY_SYSTEMS 20
#ifndef _DOXYGEN
/*
* There are a few aliases for other properties. Those are needed just
* to avoid breaking apps that depend on the library but shoudn't be used
* anymore on newer apps.
*/
#define DTV_MAX_STATS DTV_NUM_STATS_PROPS
#define DTV_SIGNAL_STRENGTH DTV_STAT_SIGNAL_STRENGTH
#define DTV_SNR DTV_STAT_CNR
#define DTV_UNCORRECTED_BLOCKS DTV_STAT_ERROR_BLOCK_COUNT
#endif
/**
* @struct dvb_v5_fe_parms
* @ingroup frontend
* @brief Keeps data needed to handle the DVB frontend
*
* @param info Contains the DVB info properties (RO)
* @param version Version of the Linux DVB API (RO)
* @param has_v5_stats A value different than 0 indicates that the
* frontend supports DVBv5 stats (RO)
* @param current_sys Currently selected delivery system (RO)
* @param num_systems Number of delivery systems (RO)
* @param systems Delivery systems supported by the hardware (RO)
* @param legacy_fe A value different than 0 indicates a legacy
* Kernel driver using DVBv3 API only, or that
* DVBv3 only mode was forced by the client (RO)
* @param abort Client should set it to abort a pending
* operation like DTV scan (RW)
* @param lna: Sets the LNA mode 0 disables; 1 enables, -1 uses
* auto mode (RW)
* @param lnb LNBf description (RW)
* @param sat_number Number of the satellite (used by DISEqC setup) (RW)
* @param freq_bpf SCR/Unicable band-pass filter frequency to use, in kHz
* @param verbose Verbosity level of the library (RW)
* @param dvb_logfunc Function used to write log messages (RO)
* @param default_charset Name of the charset used by the DVB standard (RW)
* @param output_charset Name of the charset to output (system specific) (RW)
*
* @details The fields marked as RO should not be changed by the client, as otherwise
* undesired effects may happen. The ones marked as RW are ok to either read
* or write by the client.
*/
struct dvb_v5_fe_parms {
/* Information visible to the client - don't override those values */
struct dvb_frontend_info info;
uint32_t version;
int has_v5_stats;
fe_delivery_system_t current_sys;
int num_systems;
fe_delivery_system_t systems[MAX_DELIVERY_SYSTEMS];
int legacy_fe;
/* The values below are specified by the library client */
/* Flags from the client to the library */
int abort;
/* Linear Amplifier settings */
int lna;
/* Satellite settings */
const struct dvb_sat_lnb *lnb;
int sat_number;
unsigned freq_bpf;
unsigned diseqc_wait;
/* Function to write DVB logs */
unsigned verbose;
dvb_logfunc logfunc;
/* Charsets to be used by the conversion utilities */
char *default_charset;
char *output_charset;
};
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Allocates a dummy frontend structure
* @ingroup frontend
*
* @details This is useful for some applications that may want to just use the
* frontend structure internally, without associating it with a real hardware
*
* @return Returns a pointer to a dummy struct, or NULL if no memory.
*/
struct dvb_v5_fe_parms *dvb_fe_dummy(void);
/**
* @brief Opens a frontend and allocates a structure to work with
* @ingroup frontend
*
* @param adapter Number of the adapter to open
* @param frontend Number of the frontend to open
* @param verbose Verbosity level of the messages that will be
* printed
* @param use_legacy_call Force to use the DVBv3 calls, instead of using
* the DVBv5 API
* @param logfunc Callback function to be called when a log event
* happens. Can either store the event into a file
* or to print it at the TUI/GUI. If NULL, the
* library will use its internal handler.
* @param flags Flags to be passed to open. Currently only two
* flags are supported: O_RDONLY or O_RDWR.
* Using O_NONBLOCK may hit unexpected issues.
*
* @todo Add/check support for O_NONBLOCK at the scan routines.
*
* @details This function should be called before using any other function at
* the frontend library (or the other alternatives: dvb_fe_open() or
* dvb_fe_dummy().
*
* In general, this is called using O_RDWR, except if all that it is wanted
* is to check the DVB frontend statistics.
*
* @return Returns a pointer to an allocated data pointer or NULL on error.
*/
struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int frontend,
unsigned verbose,
unsigned use_legacy_call,
dvb_logfunc logfunc,
int flags);
/**
* @brief Opens a frontend and allocates a structure to work with
* @ingroup frontend
*
* @param adapter Number of the adapter to open
* @param frontend Number of the frontend to open
* @param verbose Verbosity level of the messages that will be
* printed
* @param use_legacy_call Force to use the DVBv3 calls, instead of using
* the DVBv5 API
*
* @details This function should be called before using any other function at
* the frontend library (or the other alternatives: dvb_fe_open2() or
* dvb_fe_dummy().
*
* @return Returns a pointer to an allocated data pointer or NULL on error.
*/
struct dvb_v5_fe_parms *dvb_fe_open(int adapter, int frontend,
unsigned verbose,
unsigned use_legacy_call);
/**
* @brief Opens a frontend and allocates a structure to work with
* @ingroup frontend
*
* @param adapter Number of the adapter to open
* @param frontend Number of the frontend to open
* @param verbose Verbosity level of the messages that will be
* printed
* @param use_legacy_call Force to use the DVBv3 calls, instead of using
* the DVBv5 API
* @param logfunc Callback function to be called when a log event
* happens. Can either store the event into a file
* or to print it at the TUI/GUI.
*
* @details This function should be called before using any other function at
* the frontend library (or the other alternatives: dvb_fe_open() or
* dvb_fe_dummy().
*
* @return Returns a pointer to an allocated data pointer or NULL on error.
*/
struct dvb_v5_fe_parms *dvb_fe_open2(int adapter, int frontend,
unsigned verbose, unsigned use_legacy_call,
dvb_logfunc logfunc);
/**
* @brief Closes the frontend and frees allocated resources
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
*/
void dvb_fe_close(struct dvb_v5_fe_parms *parms);
/**
* @brief Returns the string name associated with a DVBv5 command
* @ingroup frontend
*
* @param cmd DVBv5 or libdvbv5 property
*
* @details This function gets an integer argument (cmd) and returns a string
* that corresponds to the name of that property.
*
* @return it returns a string that corresponds to the property name.
* For example:
* dvb_cmd_name(DTV_GUARD_INTERVAL) would return "GUARD_INTERVAL"
* It also returns names for the properties used internally by libdvbv5.
*/
const char *dvb_cmd_name(int cmd);
/**
* @brief Returns an string array with the valid string values associated with a DVBv5 command
* @ingroup frontend
*
* @param cmd DVBv5 or libdvbv5 property
*
* @return it returns a string array that corresponds to the names associated
* with the possible values for that property, when available.
* For example:
* dvb_cmd_name(DTV_CODE_RATE_HP) would return an array with the
* possible values for the code rates:
* { "1/2", "2/3", ... NULL }
* @note The array always ends with NULL.
*/
const char *const *dvb_attr_names(int cmd);
/* Get/set delivery system parameters */
/**
* @brief Retrieves the value of a DVBv5/libdvbv5 property
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param cmd DVBv5 or libdvbv5 property
* @param value Pointer to an uint32_t where the value will be stored.
*
* This reads the value of a property stored at the cache. Before using it,
* a dvb_fe_get_parms() is likely required.
*
* @return Return 0 if success, EINVAL otherwise.
*/
int dvb_fe_retrieve_parm(const struct dvb_v5_fe_parms *parms,
unsigned cmd, uint32_t *value);
/**
* @brief Stores the value of a DVBv5/libdvbv5 property
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param cmd DVBv5 or libdvbv5 property
* @param value Pointer to an uint32_t where the value will be stored.
*
* This stores the value of a property at the cache. The value will only
* be send to the hardware after calling dvb_fe_set_parms().
*
* @return Return 0 if success, EINVAL otherwise.
*/
int dvb_fe_store_parm(struct dvb_v5_fe_parms *parms,
unsigned cmd, uint32_t value);
/**
* @brief Sets the delivery system
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param sys delivery system to be selected
*
* This function changes the delivery system of the frontend. By default,
* the libdvbv5 will use the first available delivery system. If another
* delivery system is desirable, this function should be called before being
* able to store the properties for the new delivery system via
* dvb_fe_store_parm().
*
* @return Return 0 if success, EINVAL otherwise.
*/
int dvb_set_sys(struct dvb_v5_fe_parms *parms,
fe_delivery_system_t sys);
/**
* @brief Make dvb properties reflect the current standard
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param sys delivery system to be selected
*
* This function prepares the properties cache for a given delivery system.
*
* It is automatically called by dvb_set_sys(), and should not be normally
* called, except when dvb_fe_dummy() is used.
*
* @return Return 0 if success, EINVAL otherwise.
*/
int dvb_add_parms_for_sys(struct dvb_v5_fe_parms *parms,
fe_delivery_system_t sys);
/**
* @brief Sets the delivery system
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened
* device
* @param desired_system delivery system to be selected
*
* This function changes the delivery system of the frontend. By default,
* the libdvbv5 will use the first available delivery system. If another
* delivery system is desirable, this function should be called before being
* able to store the properties for the new delivery system via
* dvb_fe_store_parm().
*
* This function is an enhanced version of dvb_set_sys(). It has an special
* logic inside to work with Kernels that supports only DVBv3.
*
* @return Return 0 if success, EINVAL otherwise.
*/
int dvb_set_compat_delivery_system(struct dvb_v5_fe_parms *parms,
uint32_t desired_system);
/**
* @brief Prints all the properties at the cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
*
* Used mostly for debugging issues.
*/
void dvb_fe_prt_parms(const struct dvb_v5_fe_parms *parms);
/**
* @brief Prints all the properties at the cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
*
* Writes the properties stored at the DVB cache at the DVB hardware. At
* return, some properties could have a different value, as the frontend
* may not support the values set.
*
* @return Return 0 if success, EINVAL otherwise.
*/
int dvb_fe_set_parms(struct dvb_v5_fe_parms *parms);
/**
* @brief Prints all the properties at the cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
*
* Gets the properties from the DVB hardware. The values will only reflect
* what's set at the hardware if the frontend is locked.
*
* @return Return 0 if success, EINVAL otherwise.
*/
int dvb_fe_get_parms(struct dvb_v5_fe_parms *parms);
/*
* statistics functions
*/
/**
* @brief Retrieve the stats for a DTV layer from cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param cmd DVBv5 or libdvbv5 property
* @param layer DTV layer
*
* Gets the value for one stats cache, on a given layer. Layer 0 is
* always present. On DTV standards that doesn't have layers, it returns
* the same value as dvb_fe_retrieve_stats() for layer = 0.
*
* For DTV standards with multiple layers, like ISDB, layer=1 is layer 'A',
* layer=2 is layer 'B' and layer=3 is layer 'C'. Please notice that not all
* frontends support per-layer stats. Also, the layer value is only valid if
* the layer exists at the original stream.
* Also, on such standards, layer 0 is typically a mean value of the layers,
* or a sum of events (if FE_SCALE_COUNTER).
*
* For it to be valid, dvb_fe_get_stats() should be called first.
*
* @return It returns a struct dtv_stats if succeed or NULL otherwise.
*/
struct dtv_stats *dvb_fe_retrieve_stats_layer(struct dvb_v5_fe_parms *parms,
unsigned cmd, unsigned layer);
/**
* @brief Retrieve the stats for a DTV layer from cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param cmd DVBv5 or libdvbv5 property
* @param value DTV value pointer
*
* Gets the value for one stats property for layer = 0.
*
* For it to be valid, dvb_fe_get_stats() should be called first.
*
* @return The returned value is 0 if success, EINVAL otherwise.
*/
int dvb_fe_retrieve_stats(struct dvb_v5_fe_parms *parms,
unsigned cmd, uint32_t *value);
/**
* @brief Retrieve the stats from the Kernel
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
*
* Updates the stats cache from the available stats at the Kernel.
*
* @return The returned value is 0 if success, EINVAL otherwise.
*/
int dvb_fe_get_stats(struct dvb_v5_fe_parms *parms);
/**
* @brief Retrieve the BER stats from cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param layer DTV layer
* @param scale retrieves the scale
*
* Gets the value for BER stats from stats cache, on a given layer. Layer 0 is
* always present. On DTV standards that doesn't have layers, it returns
* the same value as dvb_fe_retrieve_stats() for layer = 0.
*
* For DTV standards with multiple layers, like ISDB, layer=1 is layer 'A',
* layer=2 is layer 'B' and layer=3 is layer 'C'. Please notice that not all
* frontends support per-layer stats. Also, the layer value is only valid if
* the layer exists at the original stream.
* Also, on such standards, layer 0 is typically a mean value of the layers,
* or a sum of events (if FE_SCALE_COUNTER).
*
* For it to be valid, dvb_fe_get_stats() should be called first.
*
* @return It returns a float number for the BER value.
* If the statistics is not available for any reason, scale will be equal to
* FE_SCALE_NOT_AVAILABLE.
*/
float dvb_fe_retrieve_ber(struct dvb_v5_fe_parms *parms, unsigned layer,
enum fecap_scale_params *scale);
/**
* @brief Retrieve the PER stats from cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param layer DTV layer
*
* Gets the value for BER stats from stats cache, on a given layer. Layer 0 is
* always present. On DTV standards that doesn't have layers, it returns
* the same value as dvb_fe_retrieve_stats() for layer = 0.
*
* For DTV standards with multiple layers, like ISDB, layer=1 is layer 'A',
* layer=2 is layer 'B' and layer=3 is layer 'C'. Please notice that not all
* frontends support per-layer stats. Also, the layer value is only valid if
* the layer exists at the original stream.
* Also, on such standards, layer 0 is typically a mean value of the layers,
* or a sum of events (if FE_SCALE_COUNTER).
*
* For it to be valid, dvb_fe_get_stats() should be called first.
*
* @return A negative value indicates error.
*/
float dvb_fe_retrieve_per(struct dvb_v5_fe_parms *parms, unsigned layer);
/**
* @brief Retrieve the quality stats from cache
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param layer DTV layer
*
* Gets a quality measure for a given layer. Layer 0 is
* always present. On DTV standards that doesn't have layers, it returns
* the same value as dvb_fe_retrieve_stats() for layer = 0.
*
* For DTV standards with multiple layers, like ISDB, layer=1 is layer 'A',
* layer=2 is layer 'B' and layer=3 is layer 'C'. Please notice that not all
* frontends support per-layer stats. Also, the layer value is only valid if
* the layer exists at the original stream.
* Also, on such standards, layer 0 is typically a mean value of the layers,
* or a sum of events (if FE_SCALE_COUNTER).
*
* For it to be valid, dvb_fe_get_stats() should be called first.
*
* @return returns an enum dvb_quantity, where DVB_QUAL_UNKNOWN means that
* the stat isnot available.
*/
enum dvb_quality dvb_fe_retrieve_quality(struct dvb_v5_fe_parms *parms,
unsigned layer);
/**
* @brief Ancillary function to sprintf on ENG format
* @ingroup frontend
*
* @param buf buffer to store the value
* @param len buffer length
* @param val value to be printed
*
* On ENG notation, the exponential value should be multiple of 3. This is
* good to display some values, like BER.
*
* @return At return, it shows the actual size of the print. A negative value
* indicates an error.
*/
int dvb_fe_snprintf_eng(char *buf, int len, float val);
/**
* @brief Ancillary function to sprintf on ENG format
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param cmd DVBv5 or libdvbv5 property
* @param display_name String with the name of the property to be shown
* @param layer DTV Layer
* @param buf buffer to store the value
* @param len buffer length
* @param show_layer_name a value different than zero shows the layer name, if
* the layer is bigger than zero.
*
* This function calls internally dvb_fe_retrieve_stats_layer(). It allows to
* print a DVBv5 statistics value into a string. An extra property is available
* (DTV_QUALITY) with prints either one of the values: Poor, Ok or Good,
* depending on the overall measures.
*
* @return: It returns the length of the printed data. A negative value
* indicates an error.
*/
int dvb_fe_snprintf_stat(struct dvb_v5_fe_parms *parms, uint32_t cmd,
char *display_name, int layer,
char **buf, int *len, int *show_layer_name);
/**
* @brief Get both status statistics and dvb parameters
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
*
* That's similar of calling both dvb_fe_get_parms() and dvb_fe_get_stats().
*
* @return It returns 0 if success or an errorno otherwise.
*/
int dvb_fe_get_event(struct dvb_v5_fe_parms *parms);
/*
* Other functions, associated to SEC/LNB/DISEqC
*
* The functions below are just wrappers for the Kernel calls, in order to
* manually control satellite systems.
*
* Instead of using most them, the best is to set the LNBf parameters, and let
* the libdvbv5 to automatically handle the calls.
*
* NOTE: It currently lacks support for two ioctl's:
* FE_DISEQC_RESET_OVERLOAD used only on av7110.
* Spec says:
* If the bus has been automatically powered off due to power overload,
* this ioctl call restores the power to the bus. The call requires read/write
* access to the device. This call has no effect if the device is manually
* powered off. Not all DVB adapters support this ioctl.
*
* FE_DISHNETWORK_SEND_LEGACY_CMD is used on av7110, budget, gp8psk and stv0299
* Spec says:
* WARNING: This is a very obscure legacy command, used only at stv0299
* driver. Should not be used on newer drivers.
* It provides a non-standard method for selecting Diseqc voltage on the
* frontend, for Dish Network legacy switches.
* As support for this ioctl were added in 2004, this means that such dishes
* were already legacy in 2004.
*
* So, it doesn't make much sense on implementing support for them.
*/
/**
* @brief DVB ioctl wrapper for setting SEC voltage
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param on a value different than zero indicates to enable
* voltage on a Satellite Equipment Control (SEC)
* @param v18 if on != 0, a value different than zero means 18 Volts;
* zero means 13 Volts.
*
* If dvb_v5_fe_parms::lnb is set, this is controlled automatically.
*/
int dvb_fe_sec_voltage(struct dvb_v5_fe_parms *parms, int on, int v18);
/**
* @brief DVB ioctl wrapper for setting SEC tone
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param tone tone setting, as defined by DVB fe_sec_tone_mode_t type
*
* If dvb_v5_fe_parms::lnb is set, this is controlled automatically.
*/
int dvb_fe_sec_tone(struct dvb_v5_fe_parms *parms, fe_sec_tone_mode_t tone);
/**
* @brief DVB ioctl wrapper for setting LNBf high voltage
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param on a value different than zero indicates to produce
* lightly higher voltages instead of 13/18V, in order
* to compensate for long cables.
*/
int dvb_fe_lnb_high_voltage(struct dvb_v5_fe_parms *parms, int on);
/**
* @brief DVB ioctl wrapper for setting SEC DiSeqC tone burst to select between
* satellite A or B
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param mini_b if different than zero, sends a 22 KHz tone burst to
* select satellite B. Otherwise, sends tone to select
* satellite A.
*
* Valid only on certain DISEqC arrangements.
*
* If dvb_v5_fe_parms::lnb is set, this is controlled automatically.
*/
int dvb_fe_diseqc_burst(struct dvb_v5_fe_parms *parms, int mini_b);
/**
* @brief DVB ioctl wrapper for setting SEC DiSeqC command
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param len size of the DiSEqC command
* @param buf DiSEqC command to be sent
*
* If dvb_v5_fe_parms::lnb is set, this is controlled automatically.
*/
int dvb_fe_diseqc_cmd(struct dvb_v5_fe_parms *parms, const unsigned len,
const unsigned char *buf);
/**
* @brief DVB ioctl wrapper for getting SEC DiSEqC reply
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param len size of the DiSEqC command
* @param buf DiSEqC command to be sent
* @param timeout maximum time to receive the command, in ms.
*
* If dvb_v5_fe_parms::lnb is set, this is controlled automatically.
*/
int dvb_fe_diseqc_reply(struct dvb_v5_fe_parms *parms, unsigned *len, char *buf,
int timeout);
/**
* @brief DVB Ancillary routine to check if a given Delivery system is satellite
* @ingroup frontend
*
* @param delivery_system delivery system to be selected
*/
int dvb_fe_is_satellite(uint32_t delivery_system);
/**
* @brief Set default country variant of delivery systems like ISDB-T
* @ingroup frontend
*
* @param parms struct dvb_v5_fe_parms pointer to the opened device
* @param country default country, in ISO 3166-1 two letter code. If
* NULL, default charset is guessed from locale environment
* variables.
*
* @return 0 if success or an errorno otherwise.
*
* "COUNTRY" property in dvb_fe_set_parm() overrides the setting.
*/
int dvb_fe_set_default_country(struct dvb_v5_fe_parms *parms,
const char *country);
#ifdef __cplusplus
}
#endif
/*
* Arrays from dvb-v5.h
*
* Those arrays can be used to translate from a DVB property into a name.
*
* No need to directly access them from userspace, as dvb_attr_names()
* already handles them into a more standard way.
*/
#ifndef _DOXYGEN
extern const unsigned fe_bandwidth_name[8];
extern const char *dvb_v5_name[71];
extern const void *dvb_v5_attr_names[];
extern const char *delivery_system_name[20];
extern const char *fe_code_rate_name[14];
extern const char *fe_modulation_name[15];
extern const char *fe_transmission_mode_name[10];
extern const unsigned fe_bandwidth_name[8];
extern const char *fe_guard_interval_name[12];
extern const char *fe_hierarchy_name[6];
extern const char *fe_voltage_name[4];
extern const char *fe_tone_name[3];
extern const char *fe_inversion_name[4];
extern const char *fe_pilot_name[4];
extern const char *fe_rolloff_name[5];
#endif
#endif