# DVB CA Device

The DVB CA device controls the conditional access hardware. It can be accessed through /dev/dvb/adapter0/ca0. Data types and and ioctl definitions can be accessed by including linux/dvb/ca.h in your application.

# CA Data Types

## ca_slot_info_t

     /⋆ 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;

## ca_descr_info_t

     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;

## ca_cap_t

     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;

## ca_msg_t

     /⋆ 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;

## ca_descr_t

     typedef struct ca_descr_s {
    	 unsigned int index;
    	 unsigned int parity;
    	 unsigned char cw[8];
     } ca_descr_t;

# CA Function Calls

## open()

DESCRIPTION

This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use.

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.

SYNOPSIS

int open(const char ⋆deviceName, int flags);

PARAMETERS

const char *deviceName | Name of specific video device.
int flags | A bit-wise OR of the following flags:
| O_RDONLY read-only access
| O_RDWR read/write access
| O_NONBLOCK open in non-blocking mode
| (blocking mode is the default)

ERRORS

ENODEV | Device driver not loaded/available.
EINTERNAL | Internal error.
EBUSY | Device or resource busy.
EINVAL | Invalid argument.

## close()

DESCRIPTION

This system call closes a previously opened audio device.

SYNOPSIS

int close(int fd);

PARAMETERS

int fd | File descriptor returned by a previous call to open().

ERRORS

EBADF | fd is not a valid open file descriptor.