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