| <title>DVB CA Device</title> | |
| <para>The DVB CA device controls the conditional access hardware. It can be accessed through | |
| <emphasis role="tt">/dev/dvb/adapter0/ca0</emphasis>. Data types and and ioctl definitions can be accessed by | |
| including <emphasis role="tt">linux/dvb/ca.h</emphasis> in your application. | |
| </para> | |
| <section id="ca_data_types"> | |
| <title>CA Data Types</title> | |
| <section id="ca_slot_info_t"> | |
| <title>ca_slot_info_t</title> | |
| <programlisting> | |
| /⋆ slot interface types and info ⋆/ | |
| typedef struct ca_slot_info_s { | |
| int num; /⋆ slot number ⋆/ | |
| int type; /⋆ CA interface this slot supports ⋆/ | |
| #define CA_CI 1 /⋆ CI high level interface ⋆/ | |
| #define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/ | |
| #define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/ | |
| #define CA_SC 128 /⋆ simple smart card interface ⋆/ | |
| unsigned int flags; | |
| #define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/ | |
| #define CA_CI_MODULE_READY 2 | |
| } ca_slot_info_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca_descr_info_t"> | |
| <title>ca_descr_info_t</title> | |
| <programlisting> | |
| typedef struct ca_descr_info_s { | |
| unsigned int num; /⋆ number of available descramblers (keys) ⋆/ | |
| unsigned int type; /⋆ type of supported scrambling system ⋆/ | |
| #define CA_ECD 1 | |
| #define CA_NDS 2 | |
| #define CA_DSS 4 | |
| } ca_descr_info_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca_cap_t"> | |
| <title>ca_cap_t</title> | |
| <programlisting> | |
| typedef struct ca_cap_s { | |
| unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/ | |
| unsigned int slot_type; /⋆ OR of all supported types ⋆/ | |
| unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/ | |
| unsigned int descr_type;/⋆ OR of all supported types ⋆/ | |
| } ca_cap_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca_msg_t"> | |
| <title>ca_msg_t</title> | |
| <programlisting> | |
| /⋆ a message to/from a CI-CAM ⋆/ | |
| typedef struct ca_msg_s { | |
| unsigned int index; | |
| unsigned int type; | |
| unsigned int length; | |
| unsigned char msg[256]; | |
| } ca_msg_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca_descr_t"> | |
| <title>ca_descr_t</title> | |
| <programlisting> | |
| typedef struct ca_descr_s { | |
| unsigned int index; | |
| unsigned int parity; | |
| unsigned char cw[8]; | |
| } ca_descr_t; | |
| </programlisting> | |
| </section></section> | |
| <section id="ca_function_calls"> | |
| <title>CA Function Calls</title> | |
| <section id="ca_fopen"> | |
| <title>open()</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use.</para> | |
| <para>When an open() call has succeeded, the device will be ready for use. | |
| The significance of blocking or non-blocking mode is described in the | |
| documentation for functions where there is a difference. It does not affect the | |
| semantics of the open() call itself. A 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. Only one user can open the CA Device in O_RDWR | |
| mode. All other attempts to open the device in this mode will fail, and an error | |
| code will be returned.</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="ca_fclose"> | |
| <title>close()</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This system call closes a previously opened audio device.</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> |