source: trunk/module-dvbapi.h @ 5375

Last change on this file since 5375 was 5373, checked in by _network, 8 years ago

correct some declarations

File size: 8.6 KB
Line 
1#ifdef HAVE_DVBAPI
2
3#ifndef MODULEDVBAPI_H_
4#define MODULEDVBAPI_H_
5
6
7#include <sys/un.h>
8#include <dirent.h>
9
10#define TYPE_ECM 1
11#define TYPE_EMM 2
12
13//api
14#define DVBAPI_3    0
15#define DVBAPI_1    1
16#define STAPI       2
17#define COOLAPI     3
18
19#define TMPDIR  "/tmp/"
20#define STANDBY_FILE    "/tmp/.pauseoscam"
21#define ECMINFO_FILE    "/tmp/ecm.info"
22
23#ifdef COOL
24#define MAX_DEMUX 3
25#else
26#define MAX_DEMUX 5
27#endif
28#define MAX_CAID 50
29#define ECM_PIDS 30
30#define MAX_FILTER 10
31
32#ifndef FALSE
33#define FALSE 0
34#endif
35
36#ifndef TRUE
37#define TRUE 1
38#endif
39
40#define BOX_COUNT 6
41
42struct box_devices
43{
44    char *path;
45    char *ca_device;
46    char *demux_device;
47    char *cam_socket_path;
48};
49
50struct s_ecmpids
51{
52    uint16_t CAID;
53    uint32_t PROVID;
54    uint16_t ECM_PID;
55    uint16_t EMM_PID;
56    int8_t irdeto_numchids;
57    int8_t irdeto_curchid;
58    int32_t irdeto_chids;
59    int32_t irdeto_cycle;
60    int8_t checked;
61    int8_t status;
62    unsigned char table;
63    int8_t index;
64    uint32_t streams;
65};
66
67typedef struct filter_s
68{
69    uint32_t fd; //FilterHandle
70    int32_t pidindex;
71    int32_t pid;
72    uint16_t type;
73    int32_t count;
74#ifdef WITH_STAPI
75    int32_t NumSlots;
76    uint32_t    SlotHandle[10];
77    uint32_t    BufferHandle[10];
78#endif
79} FILTERTYPE;
80
81struct s_emmpids
82{
83    uint16_t CAID;
84    uint32_t PROVID;
85    uint16_t PID;
86    uint8_t type;
87};
88
89#ifdef WITH_STAPI
90struct STDEVICE
91{
92    char name[20];
93    uint32_t    SessionHandle;
94    uint32_t    SignalHandle;
95    pthread_t thread;
96    struct filter_s demux_fd[MAX_DEMUX][MAX_FILTER];
97};
98
99struct read_thread_param
100{
101    int32_t id;
102    struct s_client *cli;
103};
104
105#define BUFFLEN 1024
106#define PROCDIR "/proc/stpti4_core/"
107#define PTINUM 10
108#define SLOTNUM 20
109#endif
110
111typedef struct demux_s
112{
113    int8_t demux_index;
114    FILTERTYPE demux_fd[MAX_FILTER];
115    int32_t ca_mask;
116    int8_t adapter_index;
117    int32_t socket_fd;
118    int8_t ECMpidcount;
119    struct s_ecmpids ECMpids[ECM_PIDS];
120    int8_t EMMpidcount;
121    struct s_emmpids EMMpids[ECM_PIDS];
122    int8_t STREAMpidcount;
123    uint16_t STREAMpids[ECM_PIDS];
124    int16_t pidindex;
125    int16_t curindex;
126    int8_t tries;
127    int8_t max_status;
128    uint16_t program_number;
129    unsigned char lastcw[2][8];
130    int8_t emm_filter;
131    uchar hexserial[8];
132    struct s_reader *rdr;
133    char pmt_file[30];
134    int32_t pmt_time;
135#ifdef WITH_STAPI
136    uint32_t DescramblerHandle[PTINUM];
137    int32_t desc_pidcount;
138    uint32_t slot_assc[PTINUM][SLOTNUM];
139#endif
140} DEMUXTYPE;
141
142struct s_dvbapi_priority
143{
144    char type; // p or i
145    uint16_t caid;
146    uint32_t provid;
147    uint16_t srvid;
148    uint16_t chid;
149    uint16_t ecmpid;
150    uint16_t mapcaid;
151    uint32_t mapprovid;
152    int16_t delay;
153    int8_t force;
154#ifdef WITH_STAPI
155    char devname[30];
156    char pmtfile[30];
157    int8_t disablefilter;
158#endif
159    struct s_dvbapi_priority *next;
160};
161
162
163#define DMX_FILTER_SIZE 16
164
165
166//dvbapi 1
167typedef struct dmxFilter
168{
169    uint8_t     filter[DMX_FILTER_SIZE];
170    uint8_t     mask[DMX_FILTER_SIZE];
171} dmxFilter_t;
172
173struct dmxSctFilterParams
174{
175    uint16_t            pid;
176    dmxFilter_t          filter;
177    uint32_t             timeout;
178    uint32_t             flags;
179#define DMX_CHECK_CRC       1
180#define DMX_ONESHOT     2
181#define DMX_IMMEDIATE_START 4
182#define DMX_BUCKET      0x1000  /* added in 2005.05.18 */
183#define DMX_KERNEL_CLIENT   0x8000
184};
185
186#define DMX_START1        _IOW('o',41,int)
187#define DMX_STOP1         _IOW('o',42,int)
188#define DMX_SET_FILTER1       _IOW('o',43,struct dmxSctFilterParams *)
189//------------------------------------------------------------------
190
191
192//dbox2+ufs
193typedef struct dmx_filter
194{
195    uint8_t  filter[DMX_FILTER_SIZE];
196    uint8_t  mask[DMX_FILTER_SIZE];
197    uint8_t  mode[DMX_FILTER_SIZE];
198} dmx_filter_t;
199
200
201struct dmx_sct_filter_params
202{
203    uint16_t        pid;
204    dmx_filter_t        filter;
205    uint32_t        timeout;
206    uint32_t        flags;
207#define DMX_CHECK_CRC       1
208#define DMX_ONESHOT     2
209#define DMX_IMMEDIATE_START 4
210#define DMX_KERNEL_CLIENT   0x8000
211};
212
213typedef struct ca_descr {
214    uint32_t index;
215    uint32_t parity;    /* 0 == even, 1 == odd */
216    unsigned char cw[8];
217} ca_descr_t;
218
219typedef struct ca_pid {
220    uint32_t pid;
221    int32_t index;      /* -1 == disable*/
222} ca_pid_t;
223
224#define DMX_START       _IO('o', 41)
225#define DMX_STOP        _IO('o', 42)
226#define DMX_SET_FILTER  _IOW('o', 43, struct dmx_sct_filter_params)
227
228#define CA_SET_DESCR        _IOW('o', 134, ca_descr_t)
229#define CA_SET_PID      _IOW('o', 135, ca_pid_t)
230// --------------------------------------------------------------------
231
232#ifdef AZBOX
233#include "openxcas/openxcas_api.h"
234#include "openxcas/openxcas_message.h"
235
236int32_t openxcas_provid, openxcas_seq, openxcas_filter_idx, openxcas_stream_id, openxcas_cipher_idx, openxcas_busy;
237unsigned char openxcas_cw[16];
238uint16_t openxcas_sid, openxcas_caid, openxcas_ecm_pid, openxcas_video_pid, openxcas_audio_pid, openxcas_data_pid;
239
240void azbox_openxcas_ecm_callback(int32_t stream_id, uint32_t sequence, int32_t cipher_index, uint32_t caid, unsigned char *ecm_data, int32_t l, uint16_t pid);
241void azbox_openxcas_ex_callback(int32_t stream_id, uint32_t seq, int32_t idx, uint32_t pid, unsigned char *ecm_data, int32_t l);
242void azbox_send_dcw(struct s_client *client, ECM_REQUEST *er);
243void * azbox_main(void * cli);
244#endif
245
246#ifdef COOL
247int32_t coolapi_set_filter (int32_t fd, int32_t num, int32_t pid, byte * flt, byte * mask);
248int32_t coolapi_remove_filter (int32_t fd, int32_t num);
249int32_t coolapi_open_device (int32_t demux_index, int32_t demux_id);
250int32_t coolapi_close_device(int32_t fd);
251int32_t coolapi_write_cw(int32_t mask, uint16_t *STREAMpids, int32_t count, ca_descr_t * ca_descr);
252int32_t coolapi_set_pid (int32_t demux_id, int32_t num, int32_t index, int32_t pid);
253void coolapi_close_all();
254static void dvbapi_write_cw(int32_t demux_id, uchar *cw, int32_t index);
255#endif
256
257#ifdef WITH_STAPI
258static int32_t stapi_open();
259static int32_t stapi_set_filter(int32_t demux_id, uint16_t pid, uchar *filter, uchar *mask, int32_t num, char *pmtfile);
260static int32_t stapi_remove_filter(int32_t demux_id, int32_t num, char *pmtfile);
261static int32_t stapi_set_pid(int32_t demux_id, int32_t num, int32_t index, uint16_t pid, char *pmtfile);
262static int32_t stapi_write_cw(int32_t demux_id, uchar *cw, uint16_t *, int32_t, char *pmtfile);
263static int32_t stapi_do_set_filter(int32_t demux_id, FILTERTYPE *filter, uint16_t *pids, int32_t pidcount, uchar *filt, uchar *mask, int32_t dev_id);
264static int32_t stapi_do_remove_filter(int32_t demux_id, FILTERTYPE *filter, int32_t dev_id);
265static void *stapi_read_thread(void *);
266
267uint32_t oscam_stapi_Capability(char *name);
268char *oscam_stapi_LibVersion(void);
269uint32_t oscam_stapi_Open(char *name, uint32_t *sessionhandle);
270uint32_t oscam_stapi_SignalAllocate(uint32_t sessionhandle, uint32_t *signalhandle);
271uint32_t oscam_stapi_FilterAllocate(uint32_t sessionhandle, uint32_t *filterhandle);
272uint32_t oscam_stapi_SlotInit(uint32_t sessionhandle, uint32_t signalhandle, uint32_t *bufferhandle, uint32_t *slothandle, uint16_t pid);
273uint32_t oscam_stapi_FilterSet(uint32_t filterhandle, uchar *filt, uchar *mask);
274uint32_t oscam_stapi_FilterAssociate(uint32_t filterhandle, uint32_t slothandle);
275uint32_t oscam_stapi_SlotDeallocate(uint32_t slothandle);
276uint32_t oscam_stapi_BufferDeallocate(uint32_t bufferhandle);
277uint32_t oscam_stapi_FilterDeallocate(uint32_t filterhandle);
278uint32_t oscam_stapi_Close(uint32_t sessionhandle);
279uint32_t oscam_stapi_CheckVersion();
280uint32_t oscam_stapi_DescramblerAssociate(uint32_t deschandle, uint32_t slot);
281uint32_t oscam_stapi_DescramblerDisassociate(uint32_t deschandle, uint32_t slot);
282uint32_t oscam_stapi_DescramblerAllocate(uint32_t sessionhandle, uint32_t *deschandle);
283uint32_t oscam_stapi_DescramblerDeallocate(uint32_t deschandle);
284uint32_t oscam_stapi_DescramblerSet(uint32_t deschandle, int32_t parity, uchar *cw);
285uint32_t oscam_stapi_SignalWaitBuffer(uint32_t signalhandle, uint32_t *qbuffer, int32_t timeout);
286uint32_t oscam_stapi_BufferReadSection(uint32_t bufferhandle, uint32_t *filterlist, int32_t maxfilter, uint32_t *filtercount, int32_t *crc, uchar *buf, int32_t bufsize, uint32_t *size);
287uint32_t oscam_stapi_SignalAbort(uint32_t signalhandle);
288uint32_t oscam_stapi_PidQuery(char *name, uint16_t pid);
289uint32_t oscam_stapi_BufferFlush(uint32_t bufferhandle);
290uint32_t oscam_stapi_SlotClearPid(uint32_t slot);
291#endif
292
293void dvbapi_stop_descrambling(int);
294void dvbapi_process_input(int32_t demux_id, int32_t filter_num, uchar *buffer, int32_t len);
295int32_t dvbapi_open_device(int32_t, int32_t, int);
296int32_t dvbapi_stop_filternum(int32_t demux_index, int32_t num);
297int32_t dvbapi_stop_filter(int32_t demux_index, int32_t type);
298struct s_dvbapi_priority *dvbapi_check_prio_match(int32_t demux_id, int32_t pidindex, char type);
299
300#ifdef WITH_STAPI
301    #define cs_log(x...)    cs_log("stapi: "x)
302    #ifdef WITH_DEBUG
303        #define cs_debug_mask(x,y...)   cs_debug_mask(x,"stapi: "y)
304    #endif
305#else
306    #define cs_log(x...)    cs_log("dvbapi: "x)
307    #ifdef WITH_DEBUG
308        #define cs_debug_mask(x,y...)   cs_debug_mask(x,"dvbapi: "y)
309    #endif
310#endif
311
312#endif // MODULEDVBAPI_H_
313#endif // WITH_DVBAPI
Note: See TracBrowser for help on using the repository browser.