blob: eba512b1b15a57086b54f1013fe789f03c237859 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
\devsec{DVB CA Device}
The DVB CA device controls the conditional access hardware.
It can be accessed through \texttt{/dev/ost/ca}.
\devsubsec{CA Data Types}
\devsubsubsec{ca\_slot\_info\_t}
\label{caslotinfo}
\begin{verbatim}
/* 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;
\end{verbatim}
\devsubsubsec{ca\_descr\_info\_t}
\label{cadescrinfo}
\begin{verbatim}
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;
\end{verbatim}
\devsubsubsec{ca\_cap\_t}
\label{cacap}
\begin{verbatim}
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;
\end{verbatim}
\devsubsubsec{ca\_msg\_t}
\label{camsg}
\begin{verbatim}
/* 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;
\end{verbatim}
\devsubsubsec{ca\_descr\_t}
\label{cadescr}
\begin{verbatim}
typedef struct ca_descr_s {
unsigned int index;
unsigned int parity;
unsigned char cw[8];
} ca_descr_t;
\end{verbatim}
\clearpage
\devsubsec{CA Function Calls}
\function{open()}{
int open(const char *deviceName, int flags);}{
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.
}{
const char *deviceName & Name of specific video device.\\
int flags & A bit-wise OR of the following flags:\\
& \hspace{1em} O\_RDONLY read-only access\\
& \hspace{1em} O\_RDWR read/write access\\
& \hspace{1em} O\_NONBLOCK open in non-blocking mode \\
& \hspace{1em} (blocking mode is the default)\\
}{
ENODEV & Device driver not loaded/available.\\
EINTERNAL & Internal error.\\
EBUSY & Device or resource busy.\\
EINVAL & Invalid argument.\\
}
\function{close()}{
int close(int fd);}{
This system call closes a previously opened audio device.
}{
int fd & File descriptor returned by a previous call to open().\\
}{
EBADF & fd is not a valid open file descriptor.\\
}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "dvbapi"
%%% End:
|