| <title>DVB Frontend API</title> | |
| <para>The DVB frontend device controls the tuner and DVB demodulator | |
| hardware. It can be accessed through <emphasis | |
| role="tt">/dev/dvb/adapter0/frontend0</emphasis>. Data types and and | |
| ioctl definitions can be accessed by including <emphasis | |
| role="tt">linux/dvb/frontend.h</emphasis> in your application.</para> | |
| <para>DVB frontends come in three varieties: DVB-S (satellite), DVB-C | |
| (cable) and DVB-T (terrestrial). Transmission via the internet (DVB-IP) | |
| is not yet handled by this API but a future extension is possible. For | |
| DVB-S the frontend device also supports satellite equipment control | |
| (SEC) via DiSEqC and V-SEC protocols. The DiSEqC (digital SEC) | |
| specification is available from | |
| <ulink url="http://www.eutelsat.com/satellites/4_5_5.html">Eutelsat</ulink>.</para> | |
| <para>Note that the DVB API may also be used for MPEG decoder-only PCI | |
| cards, in which case there exists no frontend device.</para> | |
| <section id="frontend_types"> | |
| <title>Frontend Data Types</title> | |
| <section id="frontend_type"> | |
| <title>frontend type</title> | |
| <para>For historical reasons frontend types are named after the type of modulation used in | |
| transmission.</para> | |
| <programlisting> | |
| typedef enum fe_type { | |
| FE_QPSK, /⋆ DVB-S ⋆/ | |
| FE_QAM, /⋆ DVB-C ⋆/ | |
| FE_OFDM /⋆ DVB-T ⋆/ | |
| } fe_type_t; | |
| </programlisting> | |
| </section> | |
| <section id="frontend_caps"> | |
| <title>frontend capabilities</title> | |
| <para>Capabilities describe what a frontend can do. Some capabilities can only be supported for | |
| a specific frontend type.</para> | |
| <programlisting> | |
| typedef enum fe_caps { | |
| FE_IS_STUPID = 0, | |
| FE_CAN_INVERSION_AUTO = 0x1, | |
| FE_CAN_FEC_1_2 = 0x2, | |
| FE_CAN_FEC_2_3 = 0x4, | |
| FE_CAN_FEC_3_4 = 0x8, | |
| FE_CAN_FEC_4_5 = 0x10, | |
| FE_CAN_FEC_5_6 = 0x20, | |
| FE_CAN_FEC_6_7 = 0x40, | |
| FE_CAN_FEC_7_8 = 0x80, | |
| FE_CAN_FEC_8_9 = 0x100, | |
| FE_CAN_FEC_AUTO = 0x200, | |
| FE_CAN_QPSK = 0x400, | |
| FE_CAN_QAM_16 = 0x800, | |
| FE_CAN_QAM_32 = 0x1000, | |
| FE_CAN_QAM_64 = 0x2000, | |
| FE_CAN_QAM_128 = 0x4000, | |
| FE_CAN_QAM_256 = 0x8000, | |
| FE_CAN_QAM_AUTO = 0x10000, | |
| FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000, | |
| FE_CAN_BANDWIDTH_AUTO = 0x40000, | |
| FE_CAN_GUARD_INTERVAL_AUTO = 0x80000, | |
| FE_CAN_HIERARCHY_AUTO = 0x100000, | |
| FE_CAN_MUTE_TS = 0x80000000, | |
| FE_CAN_CLEAN_SETUP = 0x40000000 | |
| } fe_caps_t; | |
| </programlisting> | |
| </section> | |
| <section id="frontend_info"> | |
| <title>frontend information</title> | |
| <para>Information about the frontend ca be queried with FE_GET_INFO.</para> | |
| <programlisting> | |
| struct dvb_frontend_info { | |
| char name[128]; | |
| fe_type_t type; | |
| uint32_t frequency_min; | |
| uint32_t frequency_max; | |
| uint32_t frequency_stepsize; | |
| uint32_t frequency_tolerance; | |
| uint32_t symbol_rate_min; | |
| uint32_t symbol_rate_max; | |
| uint32_t symbol_rate_tolerance; /⋆ ppm ⋆/ | |
| uint32_t notifier_delay; /⋆ ms ⋆/ | |
| fe_caps_t caps; | |
| }; | |
| </programlisting> | |
| </section> | |
| <section id="frontend_diseqc"> | |
| <title>diseqc master command</title> | |
| <para>A message sent from the frontend to DiSEqC capable equipment.</para> | |
| <programlisting> | |
| struct dvb_diseqc_master_cmd { | |
| uint8_t msg [6]; /⋆ { framing, address, command, data[3] } ⋆/ | |
| uint8_t msg_len; /⋆ valid values are 3...6 ⋆/ | |
| }; | |
| </programlisting> | |
| </section> | |
| <section role="subsection"> | |
| <title>diseqc slave reply</title> | |
| <para>A reply to the frontend from DiSEqC 2.0 capable equipment.</para> | |
| <programlisting> | |
| struct dvb_diseqc_slave_reply { | |
| uint8_t msg [4]; /⋆ { framing, data [3] } ⋆/ | |
| uint8_t msg_len; /⋆ valid values are 0...4, 0 means no msg ⋆/ | |
| int timeout; /⋆ return from ioctl after timeout ms with ⋆/ | |
| }; /⋆ errorcode when no message was received ⋆/ | |
| </programlisting> | |
| </section> | |
| <section id="frontend_diseqc_slave_reply"> | |
| <title>diseqc slave reply</title> | |
| <para>The voltage is usually used with non-DiSEqC capable LNBs to switch the polarzation | |
| (horizontal/vertical). When using DiSEqC epuipment this voltage has to be switched | |
| consistently to the DiSEqC commands as described in the DiSEqC spec.</para> | |
| <programlisting> | |
| typedef enum fe_sec_voltage { | |
| SEC_VOLTAGE_13, | |
| SEC_VOLTAGE_18 | |
| } fe_sec_voltage_t; | |
| </programlisting> | |
| </section> | |
| <section id="frontend_sec_tone"> | |
| <title>SEC continuous tone</title> | |
| <para>The continous 22KHz tone is usually used with non-DiSEqC capable LNBs to switch the | |
| high/low band of a dual-band LNB. When using DiSEqC epuipment this voltage has to | |
| be switched consistently to the DiSEqC commands as described in the DiSEqC | |
| spec.</para> | |
| <programlisting> | |
| typedef enum fe_sec_tone_mode { | |
| SEC_TONE_ON, | |
| SEC_TONE_OFF | |
| } fe_sec_tone_mode_t; | |
| </programlisting> | |
| </section> | |
| <section id="frontend_sec_burst"> | |
| <title>SEC tone burst</title> | |
| <para>The 22KHz tone burst is usually used with non-DiSEqC capable switches to select | |
| between two connected LNBs/satellites. When using DiSEqC epuipment this voltage has to | |
| be switched consistently to the DiSEqC commands as described in the DiSEqC | |
| spec.</para> | |
| <programlisting> | |
| typedef enum fe_sec_mini_cmd { | |
| SEC_MINI_A, | |
| SEC_MINI_B | |
| } fe_sec_mini_cmd_t; | |
| </programlisting> | |
| <para></para> | |
| </section> | |
| <section id="frontend_status"> | |
| <title>frontend status</title> | |
| <para>Several functions of the frontend device use the fe_status data type defined | |
| by</para> | |
| <programlisting> | |
| typedef enum fe_status { | |
| FE_HAS_SIGNAL = 0x01, /⋆ found something above the noise level ⋆/ | |
| FE_HAS_CARRIER = 0x02, /⋆ found a DVB signal ⋆/ | |
| FE_HAS_VITERBI = 0x04, /⋆ FEC is stable ⋆/ | |
| FE_HAS_SYNC = 0x08, /⋆ found sync bytes ⋆/ | |
| FE_HAS_LOCK = 0x10, /⋆ everything's working... ⋆/ | |
| FE_TIMEDOUT = 0x20, /⋆ no lock within the last ~2 seconds ⋆/ | |
| FE_REINIT = 0x40 /⋆ frontend was reinitialized, ⋆/ | |
| } fe_status_t; /⋆ application is recommned to reset ⋆/ | |
| </programlisting> | |
| <para>to indicate the current state and/or state changes of the frontend hardware. | |
| </para> | |
| </section> | |
| <section id="frontend_params"> | |
| <title>frontend parameters</title> | |
| <para>The kind of parameters passed to the frontend device for tuning depend on | |
| the kind of hardware you are using. All kinds of parameters are combined as an | |
| union in the FrontendParameters structure:</para> | |
| <programlisting> | |
| struct dvb_frontend_parameters { | |
| uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/ | |
| /⋆ intermediate frequency in kHz for QPSK ⋆/ | |
| fe_spectral_inversion_t inversion; | |
| union { | |
| struct dvb_qpsk_parameters qpsk; | |
| struct dvb_qam_parameters qam; | |
| struct dvb_ofdm_parameters ofdm; | |
| } u; | |
| }; | |
| </programlisting> | |
| <para>For satellite QPSK frontends you have to use the <constant>QPSKParameters</constant> member defined by</para> | |
| <programlisting> | |
| struct dvb_qpsk_parameters { | |
| uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ | |
| fe_code_rate_t fec_inner; /⋆ forward error correction (see above) ⋆/ | |
| }; | |
| </programlisting> | |
| <para>for cable QAM frontend you use the <constant>QAMParameters</constant> structure</para> | |
| <programlisting> | |
| struct dvb_qam_parameters { | |
| uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ | |
| fe_code_rate_t fec_inner; /⋆ forward error correction (see above) ⋆/ | |
| fe_modulation_t modulation; /⋆ modulation type (see above) ⋆/ | |
| }; | |
| </programlisting> | |
| <para>DVB-T frontends are supported by the <constant>OFDMParamters</constant> structure | |
| </para> | |
| <programlisting> | |
| struct dvb_ofdm_parameters { | |
| fe_bandwidth_t bandwidth; | |
| fe_code_rate_t code_rate_HP; /⋆ high priority stream code rate ⋆/ | |
| fe_code_rate_t code_rate_LP; /⋆ low priority stream code rate ⋆/ | |
| fe_modulation_t constellation; /⋆ modulation type (see above) ⋆/ | |
| fe_transmit_mode_t transmission_mode; | |
| fe_guard_interval_t guard_interval; | |
| fe_hierarchy_t hierarchy_information; | |
| }; | |
| </programlisting> | |
| <para>In the case of QPSK frontends the <constant>Frequency</constant> field specifies the intermediate | |
| frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of | |
| the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and | |
| OFDM frontends the Frequency specifies the absolute frequency and is given in | |
| Hz. | |
| </para> | |
| <para>The Inversion field can take one of these values: | |
| </para> | |
| <programlisting> | |
| typedef enum fe_spectral_inversion { | |
| INVERSION_OFF, | |
| INVERSION_ON, | |
| INVERSION_AUTO | |
| } fe_spectral_inversion_t; | |
| </programlisting> | |
| <para>It indicates if spectral inversion should be presumed or not. In the automatic setting | |
| (<constant>INVERSION_AUTO</constant>) the hardware will try to figure out the correct setting by | |
| itself. | |
| </para> | |
| <para>The possible values for the <constant>FEC_inner</constant> field are | |
| </para> | |
| <programlisting> | |
| typedef enum fe_code_rate { | |
| FEC_NONE = 0, | |
| FEC_1_2, | |
| FEC_2_3, | |
| FEC_3_4, | |
| FEC_4_5, | |
| FEC_5_6, | |
| FEC_6_7, | |
| FEC_7_8, | |
| FEC_8_9, | |
| FEC_AUTO | |
| } fe_code_rate_t; | |
| </programlisting> | |
| <para>which correspond to error correction rates of 1/2, 2/3, etc., no error correction or auto | |
| detection. | |
| </para> | |
| <para>For cable and terrestrial frontends (QAM and OFDM) one also has to specify the quadrature | |
| modulation mode which can be one of the following: | |
| </para> | |
| <programlisting> | |
| typedef enum fe_modulation { | |
| QPSK, | |
| QAM_16, | |
| QAM_32, | |
| QAM_64, | |
| QAM_128, | |
| QAM_256, | |
| QAM_AUTO | |
| } fe_modulation_t; | |
| </programlisting> | |
| <para>Finally, there are several more parameters for OFDM: | |
| </para> | |
| <programlisting> | |
| typedef enum fe_transmit_mode { | |
| TRANSMISSION_MODE_2K, | |
| TRANSMISSION_MODE_8K, | |
| TRANSMISSION_MODE_AUTO | |
| } fe_transmit_mode_t; | |
| </programlisting> | |
| <programlisting> | |
| typedef enum fe_bandwidth { | |
| BANDWIDTH_8_MHZ, | |
| BANDWIDTH_7_MHZ, | |
| BANDWIDTH_6_MHZ, | |
| BANDWIDTH_AUTO | |
| } fe_bandwidth_t; | |
| </programlisting> | |
| <programlisting> | |
| typedef enum fe_guard_interval { | |
| GUARD_INTERVAL_1_32, | |
| GUARD_INTERVAL_1_16, | |
| GUARD_INTERVAL_1_8, | |
| GUARD_INTERVAL_1_4, | |
| GUARD_INTERVAL_AUTO | |
| } fe_guard_interval_t; | |
| </programlisting> | |
| <programlisting> | |
| typedef enum fe_hierarchy { | |
| HIERARCHY_NONE, | |
| HIERARCHY_1, | |
| HIERARCHY_2, | |
| HIERARCHY_4, | |
| HIERARCHY_AUTO | |
| } fe_hierarchy_t; | |
| </programlisting> | |
| </section> | |
| <section id="frontend_events"> | |
| <title>frontend events</title> | |
| <programlisting> | |
| struct dvb_frontend_event { | |
| fe_status_t status; | |
| struct dvb_frontend_parameters parameters; | |
| }; | |
| </programlisting> | |
| </section> | |
| </section> | |
| <section id="frontend_fcalls"> | |
| <title>Frontend Function Calls</title> | |
| <section id="frontend_f_open"> | |
| <title>open()</title> | |
| <para>DESCRIPTION</para> | |
| <informaltable><tgroup cols="1"><tbody><row> | |
| <entry align="char"> | |
| <para>This system call opens a named frontend device (/dev/dvb/adapter0/frontend0) | |
| for subsequent use. Usually the first thing to do after a successful open is to | |
| find out the frontend type with FE_GET_INFO.</para> | |
| <para>The device can be opened in read-only mode, which only allows monitoring of | |
| device status and statistics, or read/write mode, which allows any kind of use | |
| (e.g. performing tuning operations.) | |
| </para> | |
| <para>In a system with multiple front-ends, it is usually the case that multiple devices | |
| cannot be open in read/write mode simultaneously. As long as a front-end | |
| device is opened in read/write mode, other open() calls in read/write mode will | |
| either fail or block, depending on whether non-blocking or blocking mode was | |
| specified. A front-end device opened in blocking mode can later be put into | |
| non-blocking mode (and vice versa) using the F_SETFL command of the fcntl | |
| system call. This is a standard system call, documented in the Linux manual | |
| page for fcntl. When an open() call has succeeded, the device will be ready | |
| for use in the specified mode. This implies that the corresponding hardware is | |
| powered up, and that other front-ends may have been powered down to make | |
| that possible.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS</para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int open(const char ⋆deviceName, int flags);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>const char | |
| *deviceName</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Name of specific video device.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int flags</para> | |
| </entry><entry | |
| align="char"> | |
| <para>A bit-wise OR of the following flags:</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>O_RDONLY read-only access</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>O_RDWR read/write access</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>O_NONBLOCK open in non-blocking mode</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>(blocking mode is the default)</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>ENODEV</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device driver not loaded/available.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EBUSY</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device or resource busy.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Invalid argument.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_f_close"> | |
| <title>close()</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This system call closes a previously opened front-end device. After closing | |
| a front-end device, its corresponding hardware might be powered down | |
| automatically.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int close(int fd);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_read_status"> | |
| <title>FE_READ_STATUS</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call returns status information about the front-end. This call only | |
| requires read-only access to the device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = FE_READ_STATUS, | |
| fe_status_t ⋆status);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_READ_STATUS for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>struct fe_status_t | |
| *status</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Points to the location where the front-end status word is | |
| to be stored.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>status points to invalid address.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_read_ber"> | |
| <title>FE_READ_BER</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call returns the bit error rate for the signal currently | |
| received/demodulated by the front-end. For this command, read-only access to | |
| the device is sufficient.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = FE_READ_BER, | |
| uint32_t ⋆ber);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_READ_BER for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>uint32_t *ber</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The bit error rate is stored into *ber.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>ber points to invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ENOSIGNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>There is no signal, thus no meaningful bit error rate. Also | |
| returned if the front-end is not turned on.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ENOSYS</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Function not available for this device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_read_snr"> | |
| <title>FE_READ_SNR</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call returns the signal-to-noise ratio for the signal currently received | |
| by the front-end. For this command, read-only access to the device is sufficient.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = FE_READ_SNR, int16_t | |
| ⋆snr);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_READ_SNR for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int16_t *snr</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The signal-to-noise ratio is stored into *snr.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>snr points to invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ENOSIGNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>There is no signal, thus no meaningful signal strength | |
| value. Also returned if front-end is not turned on.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ENOSYS</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Function not available for this device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_read_signal_strength"> | |
| <title>FE_READ_SIGNAL_STRENGTH</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call returns the signal strength value for the signal currently received | |
| by the front-end. For this command, read-only access to the device is sufficient.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl( int fd, int request = | |
| FE_READ_SIGNAL_STRENGTH, int16_t ⋆strength);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_READ_SIGNAL_STRENGTH for this | |
| command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int16_t *strength</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The signal strength value is stored into *strength.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>status points to invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ENOSIGNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>There is no signal, thus no meaningful signal strength | |
| value. Also returned if front-end is not turned on.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ENOSYS</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Function not available for this device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_read_ub"> | |
| <title>FE_READ_UNCORRECTED_BLOCKS</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call returns the number of uncorrected blocks detected by the device | |
| driver during its lifetime. For meaningful measurements, the increment in block | |
| count during a specific time interval should be calculated. For this command, | |
| read-only access to the device is sufficient.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>Note that the counter will wrap to zero after its maximum count has been | |
| reached.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl( int fd, int request = | |
| FE_READ_UNCORRECTED_BLOCKS, uint32_t ⋆ublocks);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_READ_UNCORRECTED_BLOCKS for this | |
| command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>uint32_t *ublocks</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The total number of uncorrected blocks seen by the driver | |
| so far.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>ublocks points to invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ENOSYS</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Function not available for this device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_set_fe"> | |
| <title>FE_SET_FRONTEND</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call starts a tuning operation using specified parameters. The result | |
| of this call will be successful if the parameters were valid and the tuning could | |
| be initiated. The result of the tuning operation in itself, however, will arrive | |
| asynchronously as an event (see documentation for FE_GET_EVENT and | |
| FrontendEvent.) If a new FE_SET_FRONTEND operation is initiated before | |
| the previous one was completed, the previous operation will be aborted in favor | |
| of the new one. This command requires read/write access to the device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = FE_SET_FRONTEND, | |
| struct dvb_frontend_parameters ⋆p);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_SET_FRONTEND for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>struct | |
| dvb_frontend_parameters | |
| *p</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Points to parameters for tuning operation.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>p points to invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Maximum supported symbol rate reached.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_get_fe"> | |
| <title>FE_GET_FRONTEND</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call queries the currently effective frontend parameters. For this | |
| command, read-only access to the device is sufficient.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = FE_GET_FRONTEND, | |
| struct dvb_frontend_parameters ⋆p);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_SET_FRONTEND for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>struct | |
| dvb_frontend_parameters | |
| *p</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Points to parameters for tuning operation.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>p points to invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Maximum supported symbol rate reached.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_get_event"> | |
| <title>FE_GET_EVENT</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call returns a frontend event if available. If an event is not | |
| available, the behavior depends on whether the device is in blocking or | |
| non-blocking mode. In the latter case, the call fails immediately with errno | |
| set to EWOULDBLOCK. In the former case, the call blocks until an event | |
| becomes available.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>The standard Linux poll() and/or select() system calls can be used with the | |
| device file descriptor to watch for new events. For select(), the file descriptor | |
| should be included in the exceptfds argument, and for poll(), POLLPRI should | |
| be specified as the wake-up condition. Since the event queue allocated is | |
| rather small (room for 8 events), the queue must be serviced regularly to avoid | |
| overflow. If an overflow happens, the oldest event is discarded from the queue, | |
| and an error (EOVERFLOW) occurs the next time the queue is read. After | |
| reporting the error condition in this fashion, subsequent FE_GET_EVENT | |
| calls will return events from the queue as usual.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>For the sake of implementation simplicity, this command requires read/write | |
| access to the device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = QPSK_GET_EVENT, | |
| struct dvb_frontend_event ⋆ev);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_GET_EVENT for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>struct | |
| dvb_frontend_event | |
| *ev</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Points to the location where the event,</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>if any, is to be stored.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>ev points to invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EWOULDBLOCK</para> | |
| </entry><entry | |
| align="char"> | |
| <para>There is no event pending, and the device is in | |
| non-blocking mode.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EOVERFLOW</para> | |
| </entry><entry | |
| align="char"> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>Overflow in event queue - one or more events were lost.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_get_info"> | |
| <title>FE_GET_INFO</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call returns information about the front-end. This call only requires | |
| read-only access to the device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para> int ioctl(int fd, int request = FE_GET_INFO, struct | |
| dvb_frontend_info ⋆info);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_GET_INFO for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>struct | |
| dvb_frontend_info | |
| *info</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Points to the location where the front-end information is | |
| to be stored.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>info points to invalid address.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_diseqc_reset_overload"> | |
| <title>FE_DISEQC_RESET_OVERLOAD</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>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.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = | |
| FE_DISEQC_RESET_OVERLOAD);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_DISEQC_RESET_OVERLOAD for this | |
| command.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EPERM</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Permission denied (needs read/write access).</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error in the device driver.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_diseqc_send_master_cmd"> | |
| <title>FE_DISEQC_SEND_MASTER_CMD</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call is used to send a a DiSEqC command.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = | |
| FE_DISEQC_SEND_MASTER_CMD, struct | |
| dvb_diseqc_master_cmd ⋆cmd);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_DISEQC_SEND_MASTER_CMD for this | |
| command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>struct | |
| dvb_diseqc_master_cmd | |
| *cmd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Pointer to the command to be transmitted.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Seq points to an invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The data structure referred to by seq is invalid in some | |
| way.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EPERM</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Permission denied (needs read/write access).</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error in the device driver.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_diseqc_recv_slave_reply"> | |
| <title>FE_DISEQC_RECV_SLAVE_REPLY</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call is used to receive reply to a DiSEqC 2.0 command.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = | |
| FE_DISEQC_RECV_SLAVE_REPLY, struct | |
| dvb_diseqc_slave_reply ⋆reply);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_DISEQC_RECV_SLAVE_REPLY for this | |
| command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>struct | |
| dvb_diseqc_slave_reply | |
| *reply</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Pointer to the command to be received.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Seq points to an invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The data structure referred to by seq is invalid in some | |
| way.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EPERM</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Permission denied (needs read/write access).</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error in the device driver.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_diseqc_send_burst"> | |
| <title>FE_DISEQC_SEND_BURST</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl call is used to send a 22KHz tone burst.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = | |
| FE_DISEQC_SEND_BURST, fe_sec_mini_cmd_t burst);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_DISEQC_SEND_BURST for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>fe_sec_mini_cmd_t | |
| burst</para> | |
| </entry><entry | |
| align="char"> | |
| <para>burst A or B.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid file descriptor.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EFAULT</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Seq points to an invalid address.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The data structure referred to by seq is invalid in some | |
| way.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EPERM</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Permission denied (needs read/write access).</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error in the device driver.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_set_tone"> | |
| <title>FE_SET_TONE</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This call is used to set the generation of the continuous 22kHz tone. This call | |
| requires read/write permissions.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = FE_SET_TONE, | |
| fe_sec_tone_mode_t tone);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_SET_TONE for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>fe_sec_tone_mode_t | |
| tone</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The requested tone generation mode (on/off).</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>ENODEV</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device driver not loaded/available.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EBUSY</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device or resource busy.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Invalid argument.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EPERM</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File not opened with read permissions.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error in the device driver.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="fe_set_voltage"> | |
| <title>FE_SET_VOLTAGE</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This call is used to set the bus voltage. This call requires read/write | |
| permissions.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = FE_SET_VOLTAGE, | |
| fe_sec_voltage_t voltage);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_SET_VOLTAGE for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>fe_sec_voltage_t | |
| voltage</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The requested bus voltage.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>ENODEV</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device driver not loaded/available.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EBUSY</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device or resource busy.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Invalid argument.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EPERM</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File not opened with read permissions.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error in the device driver.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="frontend_enable_high_lnb_volt"> | |
| <title>FE_ENABLE_HIGH_LNB_VOLTAGE</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>If high != 0 enables slightly higher voltages instead of 13/18V (to compensate | |
| for long cables). This call requires read/write permissions. Not all DVB | |
| adapters support this ioctl.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(int fd, int request = | |
| FE_ENABLE_HIGH_LNB_VOLTAGE, int high);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals FE_SET_VOLTAGE for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int high</para> | |
| </entry><entry | |
| align="char"> | |
| <para>The requested bus voltage.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>ERRORS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>ENODEV</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device driver not loaded/available.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EBUSY</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device or resource busy.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Invalid argument.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EPERM</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File not opened with read permissions.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error in the device driver.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| </section> | |
| &sub-isdbt; |