.. -*- coding: utf-8; mode: rst -*-

.. _ca_data_types:

*************
CA Data Types
*************


.. c:type:: ca_slot_info

ca_slot_info_t
==============


.. code-block:: c

    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;


.. c:type:: ca_descr_info

ca_descr_info_t
===============


.. code-block:: c

    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;


.. c:type:: ca_caps

ca_caps_t
=========


.. code-block:: c

    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;


.. c:type:: ca_msg

ca_msg_t
========


.. code-block:: c

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


.. c:type:: ca_descr

ca_descr_t
==========


.. code-block:: c

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


.. c:type:: ca_pid

ca-pid
======


.. code-block:: c

    typedef struct ca_pid {
	unsigned int pid;
	int index;      /* -1 == disable*/
    } ca_pid_t;
