1 /*
2  * libdvbca - interface onto raw CA devices
3  *
4  * Copyright (C) 2006 Andrew de Quincey (adq_dvb@lidskialf.net)
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19  */
20 
21 #ifndef LIBDVBCA_H
22 #define LIBDVBCA_H 1
23 
24 #ifdef __cplusplus
25 extern "C"
26 {
27 #endif
28 
29 #include <stdint.h>
30 
31 /**
32  * The types of CA interface we support.
33  */
34 #define DVBCA_INTERFACE_LINK 0
35 #define DVBCA_INTERFACE_HLCI 1
36 
37 /**
38  * States a CAM in a slot can be in.
39  */
40 #define DVBCA_CAMSTATE_MISSING 0
41 #define DVBCA_CAMSTATE_INITIALISING 1
42 #define DVBCA_CAMSTATE_READY 2
43 
44 
45 /**
46  * Open a CA device. Multiple CAMs can be accessed through a CA device.
47  *
48  * @param adapter Index of the DVB adapter.
49  * @param cadevice Index of the CA device on that adapter (usually 0).
50  * @return A unix file descriptor on success, or -1 on failure.
51  */
52 extern int dvbca_open(int adapter, int cadevice);
53 
54 /**
55  * Reset a CAM.
56  *
57  * @param fd File handle opened with dvbca_open.
58  * @param slot Slot where the requested CAM is in.
59  * @return 0 on success, -1 on failure.
60  */
61 extern int dvbca_reset(int fd, uint8_t slot);
62 
63 /**
64  * Get the interface type of a CAM.
65  *
66  * @param fd File handle opened with dvbca_open.
67  * @param slot Slot where the requested CAM is in.
68  * @return One of the DVBCA_INTERFACE_* values, or -1 on failure.
69  */
70 extern int dvbca_get_interface_type(int fd, uint8_t slot);
71 
72 /**
73  * Get the state of a CAM.
74  *
75  * @param fd File handle opened with dvbca_open.
76  * @param slot Slot where the requested CAM is in.
77  * @return One of the DVBCA_CAMSTATE_* values, or -1 on failure.
78  */
79 extern int dvbca_get_cam_state(int fd, uint8_t slot);
80 
81 /**
82  * Write a message to a CAM using a link-layer interface.
83  *
84  * @param fd File handle opened with dvbca_open.
85  * @param slot Slot where the requested CAM is in.
86  * @param connection_id Connection ID of the message.
87  * @param data Data to write.
88  * @param data_length Number of bytes to write.
89  * @return 0 on success, or -1 on failure.
90  */
91 extern int dvbca_link_write(int fd, uint8_t slot, uint8_t connection_id,
92 			    uint8_t *data, uint16_t data_length);
93 
94 /**
95  * Read a message from a CAM using a link-layer interface.
96  *
97  * @param fd File handle opened with dvbca_open.
98  * @param slot Slot where the responding CAM is in.
99  * @param connection_id Destination for the connection ID the message came from.
100  * @param data Data that was read.
101  * @param data_length Max number of bytes to read.
102  * @return Number of bytes read on success, or -1 on failure.
103  */
104 extern int dvbca_link_read(int fd, uint8_t *slot, uint8_t *connection_id,
105 			   uint8_t *data, uint16_t data_length);
106 
107 // FIXME how do we determine which CAM slot of a CA is meant?
108 /**
109  * Write a message to a CAM using an HLCI interface.
110  *
111  * @param fd File handle opened with dvbca_open.
112  * @param data Data to write.
113  * @param data_length Number of bytes to write.
114  * @return 0 on success, or -1 on failure.
115  */
116 extern int dvbca_hlci_write(int fd, uint8_t *data, uint16_t data_length);
117 
118 // FIXME how do we determine which CAM slot of a CA is meant?
119 /**
120  * Read a message from a CAM using an HLCI interface.
121  *
122  * @param fd File handle opened with dvbca_open.
123  * @param app_tag Application layer tag giving the message type to read.
124  * @param data Data that was read.
125  * @param data_length Max number of bytes to read.
126  * @return Number of bytes read on success, or -1 on failure.
127  */
128 extern int dvbca_hlci_read(int fd, uint32_t app_tag, uint8_t *data,
129 			   uint16_t data_length);
130 
131 #ifdef __cplusplus
132 }
133 #endif
134 
135 #endif // LIBDVBCA_H
136