| <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"> |
| <title>ca_slot_info_t</title> |
| <programlisting> |
| typedef struct ca_slot_info { |
| 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_DESCR 8 /⋆ built-in descrambler ⋆/ |
| #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"> |
| <title>ca_descr_info_t</title> |
| <programlisting> |
| typedef struct ca_descr_info { |
| 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-caps"> |
| <title>ca_caps_t</title> |
| <programlisting> |
| typedef struct ca_caps { |
| 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"> |
| <title>ca_msg_t</title> |
| <programlisting> |
| /⋆ a message to/from a CI-CAM ⋆/ |
| typedef struct ca_msg { |
| unsigned int index; |
| unsigned int type; |
| unsigned int length; |
| unsigned char msg[256]; |
| } ca_msg_t; |
| </programlisting> |
| |
| </section> |
| <section id="ca-descr"> |
| <title>ca_descr_t</title> |
| <programlisting> |
| typedef struct ca_descr { |
| unsigned int index; |
| unsigned int parity; |
| unsigned char cw[8]; |
| } ca_descr_t; |
| </programlisting> |
| </section> |
| |
| <section id="ca-pid"> |
| <title>ca-pid</title> |
| <programlisting> |
| typedef struct ca_pid { |
| unsigned int pid; |
| int index; /⋆ -1 == disable⋆/ |
| } ca_pid_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>RETURN VALUE</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>RETURN VALUE</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> |