- fix Building without Nagra not possible at Nagra_Merlin https://trac.streamboard...
[oscam.git] / extapi / coolapi.h
blob7fb1d7ca17a3e9bb0cec8ce292af7b4f4295d073
1 #ifndef _COOLAPI_H_
2 #define _COOLAPI_H_
4 /* timeouts in ETU */
5 typedef struct
7 uint16_t CardActTime;
8 uint16_t CardDeactTime;
9 uint16_t ATRSTime;
10 uint16_t ATRDTime;
11 uint32_t BLKTime;
12 uint32_t CHTime;
13 uint8_t CHGuardTime;
14 uint8_t BKGuardTime;
15 } CNXT_SMC_TIMEOUT;
17 typedef struct
19 uint8_t TXRetries;
20 uint8_t RXRetries;
21 } CNXT_SMC_RETRIES;
23 typedef enum
25 CNXT_SMC_CONV_DIRECT = 0,
26 CNXT_SMC_CONV_INVERSE,
27 CNXT_SMC_CONV_LAST = CNXT_SMC_CONV_INVERSE
28 } CNXT_SMC_CONVENTION;
30 typedef struct
32 CNXT_SMC_CONVENTION convention;
33 uint8_t protocol;
34 uint8_t FI;
35 uint8_t N;
36 uint8_t DI;
37 uint8_t PI1;
38 uint8_t PI2;
39 uint8_t II;
40 uint8_t historical[15];
41 uint8_t length;
42 CNXT_SMC_RETRIES retries;
43 uint8_t filterprotocolbytes;
44 } CNXT_SMC_COMM;
46 typedef struct
48 uint8_t *pStartAddress;
49 uint8_t *pEndAddress;
50 uint8_t *pWriteAddress;
51 uint8_t *pReadAddress;
52 } CNXT_CBUF_POINTERS;
54 /* These functions are implemented in libnxp and are used in coolstream */
55 int32_t cnxt_cbuf_init(void *);
56 int32_t cnxt_cbuf_get_used(void *buffer, uint32_t * bytes_used);
57 int32_t cnxt_cbuf_attach(void *handle, int32_t type, void * channel);
58 int32_t cnxt_cbuf_detach(void *handle, int32_t type, void * channel);
59 int32_t cnxt_cbuf_close(void * handle);
60 int32_t cnxt_cbuf_read_data(void * handle, void *buffer, uint32_t size, uint32_t * ret_size);
61 int32_t cnxt_cbuf_flush(void * handle, int);
62 int32_t cnxt_cbuf_removed_data(void *handle, uint32_t bytes);
63 int32_t cnxt_cbuf_get_pointers(void *handle, CNXT_CBUF_POINTERS *buffer_pointers);
65 void cnxt_kal_initialize(void);
66 void cnxt_kal_terminate(void);
67 void cnxt_drv_init(void);
68 void cnxt_drv_term(void);
70 int32_t cnxt_dmx_init(void *);
71 int32_t cnxt_dmx_close(void * handle);
72 int32_t cnxt_dmx_channel_close(void * channel);
73 int32_t cnxt_dmx_open_filter(void * handle, void *flt);
74 int32_t cnxt_dmx_close_filter(void * filter);
75 int32_t cnxt_dmx_channel_attach(void * channel, int32_t param1, int32_t param2, void * buffer);
76 int32_t cnxt_dmx_channel_detach(void * channel, int32_t param1, int32_t param2, void * buffer);
77 int32_t cnxt_dmx_channel_attach_filter(void * channel, void * filter);
78 int32_t cnxt_dmx_channel_detach_filter(void * channel, void * filter);
79 int32_t cnxt_dmx_set_channel_buffer(void * channel, int32_t param1, void * buffer);
80 int32_t cnxt_dmx_set_channel_pid(void * channel, uint32_t pid);
81 int32_t cnxt_dmx_get_channel_from_pid(void * device, uint16_t pid, void * channel);
82 int32_t cnxt_dmx_set_channel_key(void * channel, int32_t param1, uint32_t parity, unsigned char *cw, uint32_t len);
83 int32_t cnxt_dmx_channel_ctrl(void * channel, int32_t param1, int32_t param2);
85 int32_t cnxt_smc_init(void *);
87 int32_t cnxt_smc_open(void *cool_handle, int32_t *, void *, void *);
88 int32_t cnxt_smc_enable_flow_control(void *cool_handle, int32_t enable);
89 int32_t cnxt_smc_get_state(void *cool_handle, int32_t *state);
90 int32_t cnxt_smc_get_clock_freq(void *cool_handle, uint32_t *clk);
91 int32_t cnxt_smc_reset_card(void *cool_handle, int32_t timeout, void *, void *);
92 int32_t cnxt_smc_get_atr(void *cool_handle, unsigned char *buf, int32_t *buflen);
93 int32_t cnxt_smc_get_comm_parameters(void *cool_handle, CNXT_SMC_COMM *comm);
94 int32_t cnxt_smc_get_config_timeout(void *cool_handle, CNXT_SMC_TIMEOUT *timeout);
95 int32_t cnxt_smc_set_config_timeout(void *cool_handle, CNXT_SMC_TIMEOUT timeout);
96 int32_t cnxt_smc_set_convention(void *cool_handle, CNXT_SMC_CONVENTION conv);
97 int32_t cnxt_smc_start_pps(void *cool_handle, uint8_t *params, uint8_t *response, uint8_t *len, int32_t setfd);
98 int32_t cnxt_smc_get_F_D_factors(void *cool_handle, uint16_t *F, uint8_t *D);
99 int32_t cnxt_smc_set_F_D_factors(void *cool_handle, uint16_t F, uint8_t D);
100 int32_t cnxt_smc_read_write(void *cool_handle, int8_t async, uint8_t *sent, uint32_t size, uint8_t *cardbuffer, uint32_t *cardbuflen, int32_t rw_timeout, void *tag);
101 int32_t cnxt_smc_set_clock_freq(void *cool_handle, int32_t clk);
102 int32_t cnxt_smc_set_filter_protocol_bytes(void *cool_handle, int32_t enable);
103 int32_t cnxt_smc_close(void *cool_handle);
105 /* Error checking */
106 #define CNXT_STATUS_ERRORS 108
107 static const char* const cnxt_status[CNXT_STATUS_ERRORS] = {
108 "OK",
109 "ALREADY_INIT",
110 "NOT_INIT",
111 "INTERNAL_ERROR",
112 "BAD_HANDLE",
113 "BAD_PARAMETER",
114 "BAD_LENGTH",
115 "BAD_UNIT",
116 "RESOURCE_ERROR",
117 "CLOSED_HANDLE",
118 "TIMEOUT",
119 "NOT_ATTACHED",
120 "NOT_SUPPORTED",
121 "REOPENED_HANDLE",
122 "INVALID",
123 "DESTROYED",
124 "DISCONNECTED",
125 "BUSY",
126 "IN_USE",
127 "CANCELLED",
128 "UNDEFINED",
129 "UNKNOWN",
130 "NOT_FOUND",
131 "NOT_AVAILABLE",
132 "NOT_COMPATIBLE",
133 "NOT_IMPLEMENTED",
134 "EMPTY",
135 "FULL",
136 "FAILURE",
137 "ALREADY_ATTACHED",
138 "ALREADY_DONE",
139 "ASLEEP",
140 "BAD_ATTACHMENT",
141 "BAD_COMMAND",
142 "BAD_GPIO",
143 "BAD_INDEX",
144 "BAD_MODE",
145 "BAD_PID",
146 "BAD_PLANE",
147 "BAD_PTR",
148 "BAD_RECT",
149 "BAD_RGN_HANDLE",
150 "BAD_SIZE",
151 "INT_HANDLED",
152 "INT_NOT_HANDLED",
153 "NOT_SET",
154 "NOT_HOOKED",
155 "CC_NOT_ENABLED",
156 "CLOSED_RGN",
157 "COMPLETE",
158 "DEMOD_ERROR",
159 "INVALID_NODE",
160 "DUPLICATE_NODE",
161 "HARDWARE_NOT_FOUND",
162 "HDCP_AUTH_FAILED",
163 "HDCP_BAD_BKSV",
164 "ILLEGAL_OPERATION",
165 "INCOMPATIBLE_FORMATS",
166 "INVALID_DEVICE",
167 "INVALID_EDGE",
168 "INVALID_NUMBER",
169 "INVALID_STATE",
170 "INVALID_TYPE",
171 "NO_BUFFER",
172 "NO_DESTINATION_BUF",
173 "NO_OSD",
174 "NO_PALETTE",
175 "NO_ACK",
176 "RECEIVER_HDMI_INCAPABLE",
177 "RECEIVER_NOT_ATTACHED",
178 "ADJUSTED",
179 "CLIPPED",
180 "CLIPRECT_ADJUSTED",
181 "NOT_ALIGNED",
182 "FIXUP_OK",
183 "FIXUP_OPTION_ERROR",
184 "FIXUP_ZERO_RECT",
185 "UNABLE_TO_FIXUP_AND_PRESERVE",
186 "UNABLE_TO_FIXUP_X",
187 "UNABLE_TO_FIXUP_Y",
188 "OUT_OF_BOUNDS",
189 "OUTSIDE_CLIP_RECT",
190 "RECT_CLIPPED",
191 "RECT_ENCLOSED",
192 "RECT_FIXED_UP",
193 "RECT_INCLUDES",
194 "RECT_NO_OVERLAP",
195 "RECT_OVERLAP",
196 "RECT_ZERO_AREA",
197 "SERVICE_LIST_NOT_READY",
198 "SERVICE_LIST_READY",
199 "STOPPED",
200 "SUSPENDED",
201 "TERMINATED",
202 "TOO_MUCH_DATA",
203 "WIPE_NONE",
204 "NOT_STOPPED",
205 "INT_NOT_COMPLETE",
206 "NOT_ALLOWED",
207 "DUPLICATE_PID",
208 "MAX_FILTERS_ATTACHED",
209 "HW_NOT_READY",
210 "OUTPUT_BUF_FULL",
211 "REJECTED",
212 "INVALID_PID",
213 "EOF",
214 "BOF",
215 "MISSING_DATA"
218 #define coolapi_check_error(label, ret) \
219 do { \
220 if (ret) { \
221 cs_log("[%s:%d] %s: API ERROR %d (%s%s)", \
222 __func__, \
223 __LINE__ , \
224 label, \
225 ret, \
226 ret > CNXT_STATUS_ERRORS ? "UNKNOWN" : "CNXT_STATUS_", \
227 ret > CNXT_STATUS_ERRORS ? "" : cnxt_status[ret] \
228 ); \
230 } while(0)
232 #if defined(HAVE_DVBAPI) && (defined(WITH_COOLAPI) || defined(WITH_SU980) || defined(WITH_COOLAPI2))
233 extern void coolapi_open_all(void);
234 extern void coolapi_close_all(void);
235 #else
236 static inline void coolapi_open_all(void) { }
237 static inline void coolapi_close_all(void) { }
238 #endif
240 #endif