source: titan/titan/struct.h @ 24439

Last change on this file since 24439 was 24439, checked in by andyjetset, 10 years ago

titan switch v1.35

File size: 37.2 KB
Line 
1/*****************************************************/
2/* this file is part of the tiTan / tiTanNIT Project */
3/* and allowed only for use with this.               */
4/*                                                   */
5/* copyright by NIT                                  */
6/*****************************************************/
7
8#ifndef STRUCT_H
9#define STRUCT_H
10
11#define _GNU_SOURCE
12
13#ifdef SIMULATE
14#include <mcheck.h>
15#endif
16
17#include <stdio.h>
18#include <stdlib.h>
19#include <stdint.h>
20#include <string.h>
21#include <libgen.h>
22#include <fcntl.h>
23#include <ctype.h>
24#include <linux/fb.h>
25#include <sys/ioctl.h>
26#include <sys/mman.h>
27#include <png.h>
28#include <jpeglib.h>
29#include <libintl.h>
30#include <locale.h>
31#include <math.h>
32#include <linux/input.h>
33#include <sys/wait.h>
34#include <time.h>
35#include <dirent.h>
36#include <fnmatch.h>
37#include <dlfcn.h>
38#include <pthread.h>
39#include <linux/dvb/frontend.h>
40#include <linux/dvb/dmx.h>
41#include <linux/dvb/audio.h>
42#include <linux/dvb/video.h>
43#include <sys/vfs.h>
44#include <inttypes.h>
45#include <sys/socket.h>
46#include <sys/un.h>
47#include <unistd.h>
48#include <zlib.h>
49#include <net/if.h>
50#include <netinet/in.h>
51#include <arpa/inet.h>
52#include <netdb.h>
53#include <errno.h>
54#include <linux/dvb/version.h>
55#include <setjmp.h>
56#include <sys/mount.h>
57#include <execinfo.h>
58#include <ifaddrs.h>
59#include <linux/dvb/ca.h>
60#include <poll.h>
61#include <sys/utsname.h>
62#include <regex.h>
63#include <mntent.h>
64#include <termios.h>
65
66//for freetype
67#include <ft2build.h>
68#include FT_FREETYPE_H
69#include FT_CACHE_H
70
71//for eplayer
72#ifdef EPLAYER3
73#include <common.h>
74#include <subtitle.h>
75#endif
76
77#ifdef EPLAYER4
78#include <gst/gst.h>
79#include <gst/pbutils/missing-plugins.h>
80#endif
81
82#ifdef DVDPLAYER
83#include <ddvdlib.h>
84#endif
85
86
87#define OVERSION "1.35"
88#define PROGNAME "titan"
89#define COPYRIGHT "NIT"
90#define CRONTRIBUT "obi, black, dvboxer, oxygen, gost"
91#define PLUGINVERSION 0
92
93#define _(x) gettext(x)
94#define MINMALLOC 4096
95#define SCROLLBARWIDTH 15
96#define SCROLLBARBORDERSIZE 1
97#define FONTPOSYOFFSET -3
98#define FB "fb0"
99#define FB1 "fb1"
100#define SKINFB "skinfb"
101#define ACCELFB "accelfb"
102#define CONFIGFILE PROGNAME".cfg"
103#define KILLPROG "killall -9 "PROGNAME
104#define REBOOT "init 6"
105#define FILELISTDELMARK 255
106#define PLUGINDELMARK 254
107#define MAXDVBADAPTER 1
108#define MAXFRONTENDDEV 2
109#define MAXDEMUXDEV 4
110#define MAXDEMUXDEVOPEN 10
111#define MAXAUDIODEV 1
112#define MAXVIDEODEV 2
113#define MAXCIDEV 4
114#define MAXCADEV 4
115#define MAXDVRDEV 4
116#define MAXSCDEV 2
117#define RCTIMEOUT 999999
118#define RCTHREADSTANDBY 999998
119#define MAXSERVICETYPE 10
120#define CHANNELCACHEMAX 1000
121#define MEDIADBCACHEMAX 1000
122#define TRANSPONDERCACHEMAX 500
123#define MAXHTTPDCONN 20
124#define MAXHTMLLINE 300
125#define MAXRGUIDCONN 1
126#define LISTHASHSIZE 27
127#define MAXCASESSION 16
128#define MAXCASERVICE 20
129#define MAXLONGKEY 10
130#define MAXSAT 64
131#define MAXBGDOWNLOAD 5
132#define EPGSCANLOG "/tmp/epgscan.log"
133#define MAXCHANNELHISTORY 6
134#define HILO(x) (x##_hi << 8 | x##_lo)
135#define HILO32(x) (x##_hi << 24 | x##_mh << 16 | x##_ml << 8 | x##_lo)
136#define SERIALDEV "/dev/ttyAS0"
137#define MAXTOKENS 256
138#define MAXSTACKTRACE 30
139#define MAXSTACKTRACEFUNC 20
140
141#define USBDEVICE_SUPER_MAGIC 0x9fa2
142#define EXT2_SUPER_MAGIC 0xEF53
143#define EXT3_SUPER_MAGIC 0xEF53
144#define SMB_SUPER_MAGIC 0x517B
145#define NFS_SUPER_MAGIC 0x6969
146#define MSDOS_SUPER_MAGIC 0x4d44
147
148//Start Function Entry Point
149#define STARTFUNC
150
151//CA Defines
152#define T_SB 0x80               //sb (h<--m)
153#define T_RCV 0x81              //receive (h-->m)
154#define T_CREATE_T_C 0x82       //create transport connection (h-->m)
155#define T_C_T_C_REPLY 0x83      //ctc reply (h<--m)
156#define T_DELETE_T_C 0x84       //delete tc (h<->m)
157#define T_D_T_C_REPLY 0x85      //dtc reply (h<->m)
158#define T_REQUEST_T_C 0x86      //request transport connection (h<--m)
159#define T_NEW_T_C 0x87          //new tc - reply to t_request (h-->m)
160#define T_T_C_ERROR 0x77        //error creating tc (h-->m)
161#define T_DATA_LAST 0xA0        //convey data from higher (h<->m)
162#define T_DATA_MORE 0xA1        //convey data from higher (h<->m)
163
164//Alarm Signal used as timeout
165#define ALARMTIMEOUT 1
166#define ALARMSTARTTIME(x) if(ALARMTIMEOUT == 1) {alarm(x);}
167#define ALARMSTOPTIME if(ALARMTIMEOUT == 1) {alarm(0);}
168
169// VFD icons supported (more or less) on all boxes:
170typedef enum { VFD_USB = 0x10, VFD_HD, VFD_HDD, VFD_LOCK, VFD_BT, VFD_MP3, VFD_MUSIC, VFD_DD, VFD_MAIL, VFD_MUTE, VFD_PLAY, VFD_PAUSE, VFD_FF, VFD_FR, VFD_REC, VFD_CLOCK } vfdicons;
171
172#define OMIN(a,b) (a < b ? a : b)
173#define OMAX(a,b) (a > b ? a : b)
174
175#define bcdtoint(i) ((((i & 0xf0) >> 4) * 10) + (i & 0x0f))
176
177#define alpha_composite(composite, fg, alpha, ralpha, bg) { (composite) = ((fg)*(alpha) + (bg)*(ralpha)) >> 8; }
178
179enum {LEFT=20000, CENTER, RIGHT, TEXTCENTER, TEXTRIGHT};
180enum {TOP=20000, MIDDLE, BOTTOM, TEXTMIDDLE, TEXTBOTTOM};
181enum {BOTTOMLEFT, BOTTOMRIGHT, TOPLEFT, TOPRIGHT};
182enum {LEFTRIGHT=1, TOPBOTTOM, LEFTMIDDLE, TOPMIDDLE};
183enum {NO, YES, AUTONO, AUTOYES};
184enum {UNDEF=0, LISTBOX=1, TEXTBOX=2, CHOICEBOX=4, INPUTBOX=8, INPUTBOXNUM=16, FILELIST=32, PROGRESSBAR=64, MENU=128, MULTIPROGRESSBAR=256, GRID=512, GRIDBR=1024, PASSWORD=2048};
185enum {FRONTENDDEV, DEMUXDEV, VIDEODEV, AUDIODEV, CADEV, CIDEV, FRONTENDDEVDUMMY, DVRDEV, SCDEV};
186enum {TV, RADIO};
187enum {RECDIRECT, RECTIMER, RECTIMESHIFT, RECSTREAM, RECPLAY};
188enum {AC3 = 0, MPEGA = 1, DTS = 2, LPCM = 6, AAC = 8, AACHE = 9};
189enum {MPEGV = 0, MPEG4V = 4, H264 = 1, VC1 = 10};
190enum {ALLCHANNEL, SATCHANNEL, PROVIDERCHANNEL, AZCHANNEL, BOUQUETCHANNEL, SATLIST, PROVIDERLIST, AZLIST, MAINBOUQUETLIST};
191enum {NOMODE, MVMODE, RMMODE, CPMODE, PROTECTMODE, EDITMODE};
192enum {NOTHING, CHANNEL, STILLPIC, RECORDDIRECT, RECORDTIMER, RECORDTIMESHIFT, RECORDSTREAM, TMPOTHER, RECORDPLAY};
193enum {START, PAUSE, STOP};
194enum {DEACTIVE, ACTIVE, INPAUSE, ERROR};
195enum {FUNCTEXT, FUNCPIC, FUNCPROGRESS};
196enum {CASESSIONCREATE, CASESSIONBUSY, CASESSIONDEL, CASESSIONSTART, CASESSIONFINAL, CARESFIRSTENQUIRY, CARESCHANGE, CARESENQUIRY, CADATETIMESEND, CAMMIIDLE, CAMMIDISPLAYREPLAY, CAMMIFAKEOK};
197
198#ifdef BETA
199struct stacktrace
200{
201        int pos;
202        pthread_t thread;
203        void* func[MAXSTACKTRACEFUNC];
204};
205struct stacktrace stacktrace[MAXSTACKTRACE];
206#endif
207
208struct lastsubtitle
209{
210        uint64_t transponderid;
211        int serviceid;
212        int16_t subtitlepid;
213        int16_t subtitleid2;
214        struct lastsubtitle* next;
215};
216
217struct newsletter
218{
219        unsigned long nr;
220        char* date;
221        char* title;
222        char* text;
223        struct newsletter* next;
224};
225
226struct oldentry
227{
228        void* entry;
229        //0 = epg
230        int type;
231        time_t del;
232        struct oldentry* next;
233};
234
235struct unicable
236{
237        char* manufacturer;
238        char* product;
239        int scr1;
240        int scr2;
241        int scr3;
242        int scr4;
243        int scr5;
244        int scr6;
245        int scr7;
246        int scr8;
247        int lofl;
248        int lofh;
249        struct unicable* next;
250        struct unicable* prev;
251};
252
253struct id3tag
254{
255        int version;
256        char* title;
257        char* artist;
258        char* album;
259        char* year;
260        char* comment;
261        char* genrecode;
262        char* genretext;
263        char* poster;
264        int track;
265        int len;
266        int picturetype;
267        unsigned int picturepos;
268        unsigned int picturelen;
269};
270
271struct id3genre
272{
273        int code;
274        char text[30];
275};
276
277struct regex
278{
279        char* match1;
280        char* match2;
281        char* match3;
282        char* match4;
283        char* match5;
284        char* match6;
285        char* match7;
286        char* match8;
287        char* match9;
288        char* match10;
289};
290
291struct imdb
292{
293        char* title;
294        char* year;
295        char* rated;
296        char* released;
297        char* genre;
298        char* director;
299        char* writer;
300        char* actors;
301        char* plot;
302        char* poster;
303        char* runtime;
304        char* rating;
305        char* votes;
306        char* id;
307        char* thumb;
308};
309
310struct imdbapi
311{
312        char* title;
313        char* year;
314        char* rated;
315        char* released;
316        char* genre;
317        char* director;
318        char* writer;
319        char* actors;
320        char* plot;
321        char* poster;
322        char* runtime;
323        char* rating;
324        char* votes;
325        char* id;
326};
327
328struct tmdb
329{
330        char* title;
331        char* year;
332        char* rated;
333        char* released;
334        char* genre;
335        char* runtime;
336        char* plot;
337        char* postermid;
338        char* rating;
339        char* votes;
340        char* id;
341        char* backdrop;
342        char* imdbid;
343        char* orgname;
344        char* language;
345        char* type;
346        char* score;
347        char* cover;
348        char* thumb;
349        char* mvi;
350        struct tmdb* prev;
351        struct tmdb* next;
352};
353
354struct mediadbfilter
355{
356        struct mediadb* node;
357        int count;
358        struct mediadbfilter* prev;
359        struct mediadbfilter* next;
360};
361
362struct mediadbcategory
363{
364        int type;
365        char* name;
366        struct mediadbcategory* prev;
367        struct mediadbcategory* next;
368};
369
370struct mediadb
371{
372        char* id;
373        int type;
374        char* title;
375        int year;
376        char* released;
377        char* runtime;
378        char* genre;
379        char* director;
380        char* writer;
381        char* actors;
382        char* plot;
383        char* poster;
384        int rating;
385        int votes;
386        char* path;
387        char* file;
388        char* shortname;
389        char* fileinfo;
390        time_t timestamp;
391        //bit 31: manual change
392        int flag;
393        int backdropcount;
394        struct mediadb* prev;
395        struct mediadb* next;
396};
397
398struct mediadbcache
399{
400        char* path;
401        char* file;
402        struct mediadb* mediadbnode;
403        struct mediadbcache* next;
404};
405
406struct mostzap
407{
408        int serviceid;
409        uint64_t transponderid;
410        int count;
411        struct mostzap* prev;
412        struct mostzap* next;
413};
414
415struct menulist
416{
417        char* name;
418        char* text;
419        char* pic;
420        char* param;
421        char* param1;
422        char* param2;
423        char* param3;
424        int deaktiv;
425        int defaultentry;
426        struct menulist* next;
427};
428
429struct channelhistory
430{
431        struct channel* chnode;
432        char* channellist;
433};
434
435struct queue
436{
437        //0-99 for ca module
438        //101 for thumb thread
439        int type;
440        int flag;
441        int len;
442        void* data;
443        void* data1;
444        struct queue* prev;
445        struct queue* next;
446};
447
448struct casession
449{
450        int inuse;
451        int sessionnr;
452        int action;
453        int state;
454        int mmimanager;
455        int camanager;
456        int datetimemanager;
457        int appmanager;
458        int resmanager;
459        char* mmititle;
460        char* mmisubtitle;
461        char* mmitext;
462        char* mmibottom;
463};
464
465struct caslot
466{
467        struct casession casession[MAXCASESSION];
468        int connid;
469        int poll;
470        int status;
471        int rlen;
472        unsigned char* rbuf;
473        char* name;
474        int fastrun;
475        char* caids;
476};
477
478struct hdd
479{
480        char* device;
481        int partition;
482        unsigned long size;
483        char* filesystem;
484        char* label;
485        char* uuid;
486        char* vendor;
487        char* model;
488        int removable;
489        int read;
490        int write;
491        int sleeptime;
492        int notchanged;
493        struct hdd* prev;
494        struct hdd* next;
495};
496
497struct scaninfo
498{
499        struct dvbdev* fenode;
500        struct transponder* tpnode;
501        struct skin* scanscreen;
502        struct skin* listbox;
503        int threadend;
504        int scantype;
505        int fetype;
506        int orbitalpos;
507        int timeout;
508        int onlyfree;
509        int networkscan;
510        int clear;
511        int blindscan;
512        char* satname;
513        int tpcount;
514        int tpmax;
515        int tpnew;
516        int tvcount;
517        int newtvcount;
518        int radiocount;
519        int newradiocount;
520        int datacount;
521        int newdatacount;
522        int blindcount;
523        int newblindcount;
524        int changename;
525        unsigned int blindmax;
526} scaninfo;
527
528struct screensaver
529{
530        int type;
531        int speed;
532        int newposx;
533        int newposy;
534        int flag;
535        struct skin* screen;
536        struct skin* screennode;
537        struct skin* filelist;
538        struct skin* aktnode;
539        struct pic* pic;
540        char* value;
541        char* path;
542};
543
544struct playlist
545{
546        char* file;
547        struct playlist* prev;
548        struct playlist* next;
549};
550
551struct mainplaylist
552{
553        char* name;
554        char* filename;
555        struct playlist* playlist;
556        struct mainplaylist* prev;
557        struct mainplaylist* next;
558};
559
560struct epgrecord
561{
562        time_t begin;
563        time_t end;
564        int posx;
565        int size;
566        struct epgrecord* prev;
567        struct epgrecord* next;
568};
569
570struct download
571{
572        char* host;
573        char* page;
574        int port;
575        char* filename;
576        char* auth;
577        int connfd;
578        int proz;
579        unsigned int maxkb;
580        unsigned int aktkb;
581        int ret;
582        int timeout;
583        int flag;
584};
585
586struct copyfile
587{
588        char* from;
589        char* to;
590        int proz;
591        int filecount;
592        int maxfilecount;
593        off64_t maxkb;
594        off64_t aktkb;
595        int stop;
596        int ret;
597        int flag;
598};
599
600struct epgscanlist
601{
602        int serviceid;
603        uint64_t transponderid;
604        time_t scantime;
605        struct epgscanlist* prev;
606        struct epgscanlist* next;
607        char* name;
608};
609
610struct rgba
611{
612        char r;
613        char g;
614        char b;
615        char a;
616};
617
618struct subclutentry
619{
620        unsigned char Y, Cr, Cb, T;
621        unsigned char valid;
622};
623
624struct subclut
625{
626        unsigned char clutid;
627        unsigned char clutversionnumber;
628        struct subclutentry entries2bit[4];
629        struct subclutentry entries4bit[16];
630        struct subclutentry entries8bit[256];
631        struct subclut *next;
632};
633
634struct subpagereg
635{
636        int regid;
637        int reghorizontaladdress;
638        int regverticaladdress;
639        int scaleposx, scaleposy;
640        struct subpagereg *next;
641};
642
643struct subregobj
644{
645        int objid;
646        int objtype;
647        int objproviderflag;
648        int objhorizontalpos;
649        int objverticalpos;
650        // not supported right now...
651        int foregroundpixel;
652        int backgroundpixel;
653        struct subregobj *next;
654};
655
656struct subreg
657{
658        int regid;
659        int versionnumber;
660        int height, width;
661        int scaleheight, scalewidth;
662        int depth;
663        unsigned char *buf;
664        struct rgba *palette;
665        int clutid;
666        int committed;
667        struct subregobj *objects;
668        struct subreg *next;
669};
670
671struct subpage
672{
673        int pageid;
674        time_t pagetimeout;
675        int pageversionnumber;
676        int state;
677        int pcssize;
678        struct subpagereg *pageregions;
679        struct subreg *regions;
680        struct subclut *cluts;
681        struct subpage *next;
682};
683
684struct bitstream
685{
686        unsigned char *data;
687        int size;
688        int avail;
689        int consumed;
690};
691
692//there are a copyrectimer function
693//if you change the struct you must change this funktion
694struct rectimer
695{
696        char* name;
697        char* timestamp;
698        time_t begin;
699        time_t end;
700        int repeate;
701        int afterevent;
702        char* pincode;
703        int disabled;
704        int justplay;
705        char* recpath;
706        int servicetype;
707        char* channellist;
708        int serviceid;
709        //0 = nothing
710        //1 = running
711        //2 = end
712        //3 = error
713        //4 = epgscan timer activ
714        //5 = epgscan timer not activ
715        int status;
716        char* errstr;
717        struct service* servicenode;
718        uint64_t transponderid;
719        struct rectimer *prev;
720        struct rectimer *next;
721};
722
723struct inetwork
724{
725        char* device;
726        char* ip;
727        char* netmask;
728        char* mac;
729        char* broadcast;
730        //0 = static
731        //1 = dhcp
732        //2 = off
733        int type;
734        int found;
735        //flag 1 = used in titan
736        int flag;
737        struct inetwork *prev;
738        struct inetwork *next;
739};
740
741struct rcmap
742{
743        char* name;
744        int key;
745        int newkey;
746        struct rcmap* next;
747};
748
749struct splitstr
750{
751        char* part;
752};
753
754struct channelcache
755{
756        int serviceid;
757        uint64_t transponderid;
758        struct channel* chnode;
759        struct channelcache* next;
760};
761
762struct transpondercache
763{
764        uint64_t transponderid;
765        struct transponder* tpnode;
766        struct transpondercache* next;
767};
768
769struct filelist
770{
771        int type;
772        int view;
773        off64_t size;
774        time_t date;
775};
776
777struct skin
778{
779        char* name;
780        unsigned int type;
781        uint8_t wrap;
782        uint8_t bordersize;
783        uint8_t scrollbar;
784        uint16_t halign;
785        uint16_t valign;
786        int16_t posx;
787        int16_t posy;
788        int16_t width;
789        int16_t height;
790        long bordercol;
791        long deaktivcol;
792        long shadowcol;
793        uint8_t shadowsize;
794        uint8_t shadowpos;
795        uint8_t fontsize;
796        uint8_t fontsize2;
797        long fontcol;
798        long fontcol2;
799        char* font;
800        int16_t zorder;
801        int16_t titlealign;
802        char* title;
803        char* text;
804        char* text2;
805        long bgcol;
806        long bgcol2;
807        long titlebgcol;
808        long titlebgcol2;
809        long progresscol;
810        char* selectpic;
811        char* pic;
812        int16_t picwidth;
813        int16_t picheight;
814        uint16_t hspace;
815        uint16_t vspace;
816        char* (*skinfunc)(struct skin*, void*, void*);
817        char* param1;
818        char* param2;
819        char* parent;
820        char* input;
821        char* mask;
822        uint16_t textposx;
823        uint16_t textposx2;
824        int16_t gradient;
825        int16_t titlegradient;
826        uint8_t transparent;
827        uint8_t hidden;
828        uint8_t funcrettype;
829        int8_t charspace;
830        int8_t bordertype;
831        int16_t borderradius;
832        uint16_t bgspace;
833        uint8_t picquality;
834
835        uint8_t titlesize;
836        struct filelist* filelist;
837        struct skin* parentpointer;
838        char* ret;
839        char* choiceboxvalue;
840        unsigned int linecount;
841        unsigned int pagecount;
842        unsigned int poscount;
843        unsigned int gridcol;
844        int aktpage;
845        int aktline;
846        uint8_t scrollbarbordersize;
847        uint8_t prozposx;
848        uint8_t prozposy;
849        uint8_t prozwidth;
850        uint8_t prozheight;
851        uint8_t picprozwidth;
852        uint8_t del;
853        uint8_t picprozheight;
854        int16_t scrollbarheight;
855        int16_t progresssize;
856        int16_t scrollbarwidth;
857        int16_t scrollbarpos;
858        int16_t rposx;
859        int16_t rposy;
860        int16_t rwidth;
861        int16_t rheight;
862        int16_t rpicwidth;
863        int16_t rpicheight;
864        int16_t iposx;
865        int16_t iposy;
866        int16_t iwidth;
867        int16_t iheight;
868        char* handle;
869        char* handle1;
870        struct epgrecord* epgrecord;
871        char* pluginhandle;
872        uint8_t locked;
873        uint8_t picmem;
874        //bit 0: 1 = node is drawed
875        uint8_t flag;
876        struct skin *select;
877        struct skin *child;
878        struct skin *prev;
879        struct skin *next;
880};
881
882struct style
883{
884        char* name;
885        int16_t posx;
886        int16_t posy;
887        int16_t width;
888        int16_t height;
889        int16_t picwidth;
890        int16_t picheight;
891        uint16_t textposx;
892        uint16_t textposx2;
893        uint16_t halign;
894        uint16_t valign;
895        uint16_t hspace;
896        uint16_t vspace;
897        uint16_t bgspace;
898        int16_t borderradius;
899        int16_t titlealign;
900        int16_t zorder;
901        int16_t gradient;
902        int16_t titlegradient;
903        uint8_t picquality;
904        uint8_t hidden;
905        uint8_t wrap;
906        uint8_t scrollbar;
907        uint8_t bordersize;
908        int8_t bordertype;
909        uint8_t shadowsize;
910        uint8_t shadowpos;
911        uint8_t fontsize;
912        uint8_t fontsize2;
913        int8_t charspace;
914        uint8_t transparent;
915        uint8_t prozposx;
916        uint8_t prozposy;
917        uint8_t prozwidth;
918        uint8_t prozheight;
919        uint8_t picprozwidth;
920        uint8_t picprozheight;
921        uint8_t funcrettype;
922        uint8_t picmem;
923        long bordercol;
924        long deaktivcol;
925        long progresscol;
926        long shadowcol;
927        long fontcol;
928        long fontcol2;
929        long titlebgcol;
930        long titlebgcol2;
931        long bgcol;
932        long bgcol2;
933        char* font;
934        char* pic;
935        char* param1;
936        char* param2;
937        char* input;
938        char* mask;
939        char* (*skinfunc)(struct skin*, void*, void*);
940        struct style* next;
941};
942
943struct epg
944{
945        int eventid;
946        int version;
947        time_t starttime;
948        time_t endtime;
949        char* title;
950        char* subtitle;
951        char* desc;
952        int desclen;
953        int desccomplen;
954        int parentalrating;
955        struct epg* prev;
956        struct epg* next;
957};
958
959struct shutdowntimer
960{
961        int active,type; //type: 0=DeepStandby, 1=Standby
962        long long shutdown_time;
963};
964
965struct dvbdev
966{
967        char* dev;
968        int fd;
969        uint8_t type;
970        uint8_t adapter;
971        uint8_t devnr;
972        uint8_t felock;
973        uint8_t deactive;
974        struct transponder* felasttransponder;
975        struct transponder* feakttransponder;
976        int feunicable;
977        unsigned int feloffrequency;
978        int feaktband;
979        int feaktpolarization;
980        fe_sec_voltage_t feaktvolt;
981        fe_sec_tone_mode_t feakttone;
982        int fedmxsource;
983        char* feaktnr;
984        char* feshortname;
985        struct dvb_frontend_info* feinfo;
986        struct caslot* caslot;
987        struct dvbdev *next;
988};
989
990//there are a copytransponder and createtransponder function
991//if you change this struct you must change the function
992struct transponder
993{
994        uint64_t id;
995        uint8_t fetype;
996        uint8_t polarization;
997        uint8_t modulation;
998        uint8_t fec;
999        uint8_t pilot;
1000        uint8_t rolloff;
1001        uint8_t inversion;
1002        uint8_t system;
1003        uint8_t flag;
1004        // 0 = unknown
1005        // 1 = tunable
1006        // 2 = not tunable
1007        uint8_t tunablestatus;
1008        int orbitalpos;
1009        unsigned int frequency;
1010        unsigned int symbolrate;
1011        int encoding;
1012        time_t lastepg;
1013        struct transponder *next;
1014};
1015
1016struct provider
1017{
1018        int providerid;
1019        char* name;
1020        int flag;
1021        struct provider *prev;
1022        struct provider *next;
1023};
1024
1025struct subtitle
1026{
1027        char* name;
1028        int16_t subtype;
1029        int16_t pid;
1030        int16_t type;
1031        int16_t id1;
1032        int16_t id2;
1033        struct subtitle* next;
1034};
1035
1036struct esinfo
1037{
1038        int streamtype;
1039        int pid;
1040        struct esinfo* next;
1041};
1042
1043struct cadesc
1044{
1045        int pid;
1046        int len;
1047        int systemid;
1048        int reserved;
1049        int capid;
1050        char* privat;
1051        struct cadesc* next;
1052};
1053
1054struct pmt
1055{
1056        int programnumber;
1057        int versionnumber;
1058        int currentnextindicator;
1059};
1060
1061struct audiotrack
1062{
1063        char* name;
1064        uint8_t audiocodec;
1065        int16_t audiopid;
1066        int16_t rdspid;
1067        struct audiotrack* next;
1068};
1069
1070struct linkedchannel
1071{
1072        uint64_t transponderid;
1073        int serviceid;
1074        time_t starttime;
1075        time_t endtime;
1076        struct linkedchannel* next;
1077};
1078
1079//there are a createchannel function
1080//if you change this struct you must change the function
1081struct channel
1082{
1083        char* name;
1084        uint64_t transponderid;
1085        int providerid;
1086        int serviceid;
1087        int servicetype;
1088        uint8_t flag;
1089        uint8_t crypt;
1090        int8_t videocodec;
1091        int8_t audiocodec;
1092        int16_t videopid;
1093        int16_t audiopid;
1094        int16_t ac3audiopid;
1095        int16_t txtpid;
1096        int16_t pcrpid;
1097        int16_t pmtpid;
1098        int16_t aitpid;
1099        uint8_t protect;
1100        char* hbbtvurl;
1101        struct transponder *transponder;
1102        struct provider *provider;
1103        struct audiotrack *audiotrack;
1104        struct subtitle *subtitle;
1105        struct linkedchannel *linkedchannel;
1106        struct pmt *pmt;
1107        struct cadesc *cadesc;
1108        struct esinfo *esinfo;
1109        struct epg *epg;
1110        struct channel *prev;
1111        struct channel *next;
1112};
1113
1114struct sat
1115{
1116        char* name;
1117        int orbitalpos;
1118        int flag;
1119        int fetype;
1120        int scan;
1121        struct sat *prev;
1122        struct sat *next;
1123};
1124
1125struct service
1126{
1127        int type;
1128        char* channellist;
1129        struct dvbdev *fedev;
1130        struct dvbdev *dmxaudiodev;
1131        struct dvbdev *dmxvideodev;
1132        struct dvbdev *dmxpcrdev;
1133        struct dvbdev *dmxsubtitledev;
1134        struct dvbdev *audiodev;
1135        struct dvbdev *videodev;
1136        struct transponder *transponder;
1137        struct channel *channel;
1138        unsigned char *pmtbuf;
1139        int pmtlen;
1140        int recdmxstart;
1141        int recdstfd;
1142        int recsrcfd;
1143        time_t recendtime;
1144        char* rectimestamp;
1145        size_t reclastsync;
1146        off64_t rectotal;
1147        int reccount;
1148        int tssize;
1149        char* recname;
1150        unsigned long long lenpts;
1151        unsigned long long startpts;
1152        unsigned long long endpts;
1153        unsigned long long bitrate;
1154        off64_t endoffile;
1155        struct service *next;
1156};
1157
1158struct caservice
1159{
1160        struct service* service;
1161        struct channel* channel;
1162        int count;
1163        int camsockfd;
1164        struct caslot* caslot;
1165        int camanager;
1166        char* capmt;
1167        int capmtlen;
1168        int cmdpos;
1169};
1170
1171struct stimerthread
1172{
1173        int delay;
1174        int count;
1175        int notfirst;
1176        pthread_attr_t attr;
1177        pthread_t thread;
1178        int status;
1179        int aktion;
1180        //bit 0: 1 = stop allwas on titan end
1181        int flag;
1182        void* param1;
1183        void* param2;
1184        void* (*func)(struct stimerthread*, void*, void*);
1185        struct stimerthread* next;
1186};
1187
1188struct hddparm
1189{
1190        char* device;
1191        int read;
1192        int write;
1193        int sleeptime;
1194        int notchanged;
1195};
1196
1197struct marker
1198{
1199        off64_t pos;
1200        off64_t time;
1201        char* timetext;
1202        struct marker* prev;
1203        struct marker* next;
1204};
1205
1206struct status
1207{
1208        int longkeycode[MAXLONGKEY];
1209        //aktivate extra featers
1210        int expertmodus;
1211        //http user:passwd
1212        char* httpauth;
1213        //set to 1 if channellist or channelnr open
1214        int channelswitch;
1215        //deaktivates child protect if greater then akttime
1216        time_t protecttime;
1217        char* boxtype;
1218        pthread_t mainthread;
1219        //videosize from stream
1220        video_size_t videosize;
1221        time_t videosizevalid;
1222        //radius for rounded border
1223        int borderradius;
1224        int picbordersize;
1225        int titlelinesize;
1226        //0 border
1227        //1 fullbar
1228        int listboxselecttype;
1229        //0 camd.socket
1230        //1 pmt.tmp
1231        int pmtmode;
1232        //timer for del old epg entrys
1233        time_t deloldepg;
1234        //write epg periodic to medium
1235        time_t writeperiodicepg;
1236        //0 dektiv
1237        //1 only scan
1238        //2 only whitlist
1239        //3 scan and whitelist
1240        int epglistmode;
1241        // 1 manual
1242        // 2 from standby
1243        int startmode;
1244        jmp_buf longjumpbuf;
1245        pthread_mutex_t drawingmutex;
1246        pthread_mutex_t rectimermutex;
1247        pthread_mutex_t servicemutex;
1248        pthread_mutex_t epgmutex;
1249        pthread_mutex_t channelmutex;
1250        pthread_mutex_t timerthreadmutex;
1251        pthread_mutex_t audiotrackmutex;
1252        pthread_mutex_t subtitlemutex;
1253        pthread_mutex_t linkedchannelmutex;
1254        pthread_mutex_t dmxdevmutex;
1255        pthread_mutex_t rcmutex;
1256        pthread_mutex_t queuemutex;
1257        pthread_mutex_t clistmutex;
1258        pthread_mutex_t hddmutex;
1259        pthread_mutex_t tsseekmutex;
1260        pthread_mutex_t accelfbmutex;
1261        pthread_mutex_t mediadbmutex;
1262        pthread_mutex_t oldentrymutex;
1263        pthread_mutex_t newslettermutex;
1264        pthread_mutex_t tithekmutex;
1265        pthread_mutex_t inetworkmutex;
1266        pthread_mutex_t textboxmutex;
1267        pthread_mutex_t setaktresmutex;
1268        pthread_mutex_t waitrcmutex;
1269        // mutex for VFD handling
1270        pthread_mutex_t vfdmutex;
1271        off64_t recsplitsize;
1272        char* gateway;
1273        char* dnsserver1;
1274        char* dnsserver2;
1275        int fasttextrender;
1276        // 1 release all menus
1277        int menurelease;
1278        int play;
1279        int pause;
1280        int playspeed;
1281        int slowspeed;
1282        int random;
1283        int repeat;
1284        int epgdays;
1285        int spinnertime;
1286        int spinnerspeed;
1287        int hangtime;
1288        int timeupdatecount;
1289        int markmodus;
1290        // 1 from main prog
1291        // 2 from a thread
1292        int standby;
1293        char* tmp;
1294        // rc filedescriptor
1295        int fdrc;
1296        // rc filedescriptor for tuxtxt
1297        int fdrctxt;
1298        int writeconfig;
1299        int writeownconfig;
1300        int writercconfig;
1301        int writeskinconfig;
1302        int writechannel;
1303        int writetransponder;
1304        int writeprovider;
1305        int writemainbouquet;
1306        int writebouquet;
1307        int writemainplaylist;
1308        int writeplaylist;
1309        int writesat;
1310        int writerectimer;
1311        int writeepgscanlist;
1312        int writemostzap;
1313        int writemediadb;
1314        int writelastsubtitle;
1315        int writechannelslot;
1316        // 1 mute is aktiv
1317        int mute;
1318        // 1 spinner is aktiv
1319        int spinner;
1320        // 1 infobar is aktiv
1321        // 2 infobar is aktiv (with wait befor show)
1322        // 3 infobar is aktiv (no autohide)
1323        int infobar;
1324        // with infobar to display
1325        int infobarnr;
1326        // 0 is for mute screen
1327        struct skin *drawallways[1];
1328        char* drawallwaysbg[1];
1329        int usedirectfb;
1330        // count how long last rcwait (shows spinner if to long)
1331        time_t sec;
1332        // if set to a value != 0, rcwait returns this number
1333        int rckey;
1334        struct skin* skinerr;
1335        pthread_attr_t timerthreadattr;
1336        pthread_t timerthread;
1337        int timerthreadstatus;
1338        int timerthreadaktion;
1339        pthread_attr_t subthreadattr;
1340        pthread_t subthread;
1341        int subthreadstatus;
1342        int subthreadaktion;
1343        int subthreadpid;
1344        int subthreadid2;
1345        // epg thread pointer
1346        struct stimerthread* epgthread;
1347        // epgscanlist thread pointer
1348        struct stimerthread* epgscanlistthread;
1349        // httpd thread pointer
1350        struct stimerthread* httpthread;
1351        // rguid thread pointer
1352        struct stimerthread* rguithread;
1353        // mediadb thread pointer
1354        struct stimerthread* mediadbthread;
1355        // newsletter thread pointer
1356        struct stimerthread* newsletterthread;
1357        // thumb thread pointer
1358        struct stimerthread* thumbthread;
1359        // rectimer thread
1360        struct stimerthread* rectimerthread;
1361        // rguid sock filedescriptor for rguid
1362        int rguidfd;
1363        struct service* aktservice;
1364        struct service* lastservice;
1365        struct service* pipservice;
1366        struct channel* markedchannel;
1367        //if we are in a epg screen, this is the showen channel
1368        struct channel* epgchannel;
1369        char* configfile;
1370        // for bouquet channel numbering
1371        int bouquetnr[MAXSERVICETYPE];
1372        int servicetype;
1373        struct shutdowntimer *sd_timer;
1374        // akt pos in channel cache
1375        int channelcachepos;
1376        // aktivate/deaktivate auto updatevfd
1377        int updatevfd;
1378        // count for recording
1379        int recording;
1380        // count for streaming
1381        int streaming;
1382        // timeshift running = 1, ending = 2
1383        int timeshift;
1384        // 0 = normal, 1 = permanent timeshift
1385        int timeshifttype;
1386        // position in timeshiftfile to seek
1387        off64_t timeshiftpos;
1388        // ask if timeshift is running and switch channel
1389        int asktimeshift;
1390        // ts playing running = 1
1391        int playing;
1392        // if set to a skin (screenpointer) only this screen has rc
1393        struct skin* rcowner;
1394        struct skin* rcstandby;
1395        // timerstuktur fuer autores
1396        struct stimerthread* restimer;
1397        // spindown USB/HDD
1398        struct hddparm hdd[3];
1399        struct stimerthread* addhddall;
1400        // save old rotor position
1401        int rotoroldorbitalpos;
1402        // security check
1403        int security;
1404        // set to 1 if tvpic size is changed
1405        int tvpic;
1406        // timestamp for rc action
1407        time_t lastrcaction;
1408        // show timeline in channellist for each channel
1409        int showchanneltimeline;
1410        // see player.h for details
1411        int playercan;
1412                //Code von infobar.h aktiv = 1
1413        int infobaraktiv;
1414        //Name der Datei die abgespielt wird
1415        char* playfile;
1416        //Code MC aktiv = 1
1417        int mcaktiv;
1418        //greater 0 aktivate screen animation
1419        int screenanim;
1420        int screenanimspeed;
1421        //for auto increase audio vol
1422        int volautochange;
1423        int volautochangevalue;
1424        //for powerofftimer
1425        time_t fixpowerofftime;
1426        //for write FB in File
1427        int write_png;
1428        int write_jpg;
1429        //holds oversize value for blitter
1430        int leftoffset;
1431        int rightoffset;
1432        int topoffset;
1433        int bottomoffset;
1434        //background picture for all screens
1435        char* bgpic;
1436        //time for next picmem timeout check
1437        time_t picmemtimeout;
1438        time_t defpicmemtimeout;
1439        //show not tunable channel hidden (0)) or deaktive (1) in channellist
1440        int channellistview;
1441        //for blockmove in channellist
1442        int moveblockcount;
1443        //name ob file who played from webig
1444        char* webplayfile;
1445        //status of mediadbthread
1446        int mediadbthreadstatus;
1447        //for save mediadb in scan
1448        time_t mediadbsavetime;
1449        //colors / pic for selection
1450        long markcol;
1451        long filelistselectcol;
1452        long listboxselectcol;
1453        char* selectpic;
1454        //check if cam can decrypt channel
1455        int checkcamdecrypt;
1456        //don't send privat part of cadescriptor in capmt
1457        int caskipprivat;
1458        //send all caids or only caids cam can
1459        int casendallcaids;
1460        //show hidden files in filelist
1461        int showhiddenfiles;
1462        //mediadb
1463        int mediadbfiles;
1464        //show infobar on program change
1465        int infobarprogram;
1466        //for auto increase audio vol (mute)
1467        int volmute;
1468        int secondzap;
1469        //pointer to marker for recordings
1470        struct marker* playmarker;
1471        int autosubtitle;
1472        //save timeshift start time
1473        time_t timeshiftstart;
1474        int crosscontrol;
1475        int autochangechannelname;
1476        //tuxtext is running
1477        int tuxtxt;
1478        //on some fat32 hdd it takes very long to get free size
1479        int showrecfreesize;
1480        int firstunicablewait;
1481        //path for imdbfolder
1482        char* imdbfolderpath;
1483        int virtualzap;
1484        int fontsizeadjust;
1485} status;
1486
1487struct fb
1488{
1489        int dev;
1490        char *name;
1491        int fd;
1492        unsigned char *fb;
1493        unsigned long *fblong;
1494        int width;
1495        int height;
1496        int pitch;
1497        unsigned long fixfbsize;
1498        unsigned long varfbsize;
1499        int colbytes;
1500        struct fb *next;
1501};
1502
1503struct rc
1504{
1505        int key;
1506        void (*rcfunc)(struct skin*, struct skin*, int screencalc, int filelistview, int flag);
1507        struct skin *screen;
1508        struct skin *screennode;
1509        struct skin *owner;
1510        struct rc *next;
1511};
1512
1513struct clist
1514{
1515        char *key;
1516        char *value;
1517        char *def;
1518        char *tmp;
1519        struct clist *next;
1520};
1521
1522struct bouquet
1523{
1524        int nr;
1525        int serviceid;
1526        uint64_t transponderid;
1527        struct channel *channel;
1528        struct bouquet *prev;
1529        struct bouquet *next;
1530};
1531
1532struct channelslot
1533{
1534        int slot;
1535        int serviceid;
1536        uint64_t transponderid;
1537        struct channelslot *next;
1538};
1539
1540struct mainbouquet
1541{
1542        char *name;
1543        int type;
1544        char *filename;
1545        struct bouquet *bouquet;
1546        struct mainbouquet *prev;
1547        struct mainbouquet *next;
1548};
1549
1550struct pic
1551{
1552        char* name;
1553        unsigned char* picbuf;
1554        // < 0 when picbuf is normal mem (hw jpg)
1555        int memfd;
1556        unsigned long width;
1557        unsigned long height;
1558        unsigned long rowbytes;
1559        int channels;
1560  int timeout;
1561  time_t lastaccess;
1562        int del;
1563        struct pic* next;
1564};
1565
1566struct font
1567{
1568        char *name;
1569        FT_Error error;
1570        FTC_Manager manager;
1571        FTC_SBitCache cache;
1572        FTC_ImageTypeRec desc;
1573        FT_Face face;
1574        FT_UInt prev_glyphindex;
1575        FT_Bool use_kerning;
1576        struct font *next;
1577};
1578
1579//structure for write fb to File
1580struct writeFBfile
1581{
1582        unsigned char* ActBuf;
1583        unsigned char* buf1;
1584        unsigned char* buf2;
1585} writeFBfile;
1586
1587struct eit
1588{
1589        u_char table_id                               /*:8*/;
1590        u_char section_length_hi                      :4;
1591        u_char                                        :3;
1592        u_char section_syntax_indicator               :1;
1593        u_char section_length_lo                      /*:8*/;
1594        u_char service_id_hi                          /*:8*/;
1595        u_char service_id_lo                          /*:8*/;
1596        u_char current_next_indicator                 :1;
1597        u_char version_number                         :5;
1598        u_char                                        :2;
1599        u_char section_number                         /*:8*/;
1600        u_char last_section_number                    /*:8*/;
1601        u_char transport_stream_id_hi                 /*:8*/;
1602        u_char transport_stream_id_lo                 /*:8*/;
1603        u_char original_network_id_hi                 /*:8*/;
1604        u_char original_network_id_lo                 /*:8*/;
1605        u_char segment_last_section_number            /*:8*/;
1606        u_char segment_last_table_id                  /*:8*/;
1607        u_char data[]; /* struct eitevent */
1608};
1609#define EITLEN sizeof(struct eit)
1610#define GETEITSECLEN(x) HILO(((struct eit*)(x))->section_length)
1611
1612struct eitevent
1613{
1614        u_char event_id_hi                            /*:8*/;
1615        u_char event_id_lo                            /*:8*/;
1616        u_char mjd_hi                                 /*:8*/;
1617        u_char mjd_lo                                 /*:8*/;
1618        u_char start_time_h                           /*:8*/;
1619        u_char start_time_m                           /*:8*/;
1620        u_char start_time_s                           /*:8*/;
1621        u_char duration_h                             /*:8*/;
1622        u_char duration_m                             /*:8*/;
1623        u_char duration_s                             /*:8*/;
1624        u_char descriptors_loop_length_hi             :4;
1625        u_char free_ca_mode                           :1;
1626        u_char running_status                         :3;
1627        u_char descriptors_loop_length_lo             /*:8*/;
1628        u_char data[];
1629};
1630#define EITEVENTLEN sizeof(struct eitevent)
1631#define GETEITDESCLEN(x) HILO(((struct eitevent *)x)->descriptors_loop_length)
1632
1633struct eitshortevent
1634{
1635        u_char descriptor_tag                         /*:8*/;
1636        u_char descriptor_length                      /*:8*/;
1637        u_char lang_code1                             /*:8*/;
1638        u_char lang_code2                             /*:8*/;
1639        u_char lang_code3                             /*:8*/;
1640        u_char event_name_length                      /*:8*/;
1641        u_char data[];
1642};
1643#define EITSHORTEVENTLEN sizeof(struct eitshortevent)
1644
1645struct eitlongevent
1646{
1647        u_char descriptor_tag                         /*:8*/;
1648        u_char descriptor_length                      /*:8*/;
1649        u_char last_descriptor_number                 :4;
1650        u_char descriptor_number                      :4;
1651        u_char lang_code1                             /*:8*/;
1652        u_char lang_code2                             /*:8*/;
1653        u_char lang_code3                             /*:8*/;
1654        u_char length_of_items                        /*:8*/;
1655        u_char data[]; /* struct eitlongeventitem */
1656};
1657#define EITLONGEVENTLEN sizeof(struct eitlongevent)
1658
1659struct eitlongeventitem
1660{
1661        u_char item_description_length               /*:8*/;
1662        u_char data[];
1663};
1664#define EITLONGEVENTITEMLEN sizeof(struct eitlongeventitem)
1665
1666struct eitlinkage
1667{
1668        u_char descriptor_tag                 /*:8*/;
1669        u_char descriptor_length              /*:8*/;
1670        u_char transport_stream_id_hi         /*:8*/;
1671        u_char transport_stream_id_lo         /*:8*/;
1672        u_char original_network_id_hi         /*:8*/;
1673        u_char original_network_id_lo         /*:8*/;
1674        u_char service_id_hi                  /*:8*/;
1675        u_char service_id_lo                  /*:8*/;
1676        u_char linkage_type                   /*:8*/;
1677};
1678#define EITLLINKAGELEN sizeof(struct eitlinkage)
1679
1680struct parentalrating
1681{
1682        u_char descriptor_tag                 /*:8*/;
1683        u_char descriptor_length              /*:8*/;
1684        u_char data[]; //struct parental_rating_item
1685};
1686#define PARENTALRATINGLEN sizeof(struct parentalrating)
1687
1688struct parentalratingitem
1689{
1690        u_char lang_code1                    /*:8*/;
1691        u_char lang_code2                    /*:8*/;
1692        u_char lang_code3                    /*:8*/;
1693        u_char rating                        /*:8*/;
1694};
1695#define PARENTALRATINGITEMLEN sizeof(struct parentalratingitem)
1696
1697struct rst //table id 0x71
1698{
1699        u_char table_id                     /*:8*/;
1700        u_char section_syntax_indicator         :1;
1701        u_char reserved_1                       :1;
1702        u_char reserved_2                       :2;
1703        u_int section_length                   :12;
1704};
1705#define RSTLEN sizeof(struct rst)
1706
1707struct rstitem
1708{
1709        u_char transponder_stream_id_hi     /*:8*/;
1710        u_char transponder_stream_id_lo     /*:8*/;
1711        u_char original_network_id_hi       /*:8*/;
1712        u_char original_network_id_lo       /*:8*/;
1713        u_char service_id_hi                /*:8*/;
1714        u_char service_id_lo                /*:8*/;
1715        u_char event_id_hi                  /*:8*/;
1716        u_char event_id_lo                  /*:8*/;
1717        u_char reserved_1                       :5;
1718        u_char running_status                   :3;
1719};
1720#define RSTITEMLEN sizeof(struct rstitem)
1721
1722struct mhwchannel
1723{
1724        u_char  network_id_hi;
1725        u_char  network_id_lo;
1726        u_char  transponder_id_hi;
1727        u_char  transponder_id_lo;
1728        u_char  channel_id_hi;
1729        u_char  channel_id_lo;
1730        u_char  name[16];
1731};
1732#define MHWCHANNELLEN sizeof(struct mhwchannel)
1733
1734struct mhwtitle
1735{
1736        u_char table_id                       :8;
1737        u_char section_length_hi              :4;
1738        u_char                                :2;
1739        u_char dummy                          :1;
1740        u_char section_syntax_indicator       :1;
1741        u_char section_length_lo              :8;
1742        u_char channel_id                     :8;
1743        u_char theme_id                       :8;
1744        u_char hours                                  :5;
1745        u_char day                            :3;
1746        u_char summary_available              :1;
1747        u_char                                      :1;
1748        u_char minutes                        :6;
1749        u_char                                :8;
1750        u_char                                :8;
1751        u_char duration_hi                    :8;
1752        u_char duration_lo                    :8;
1753        u_char title                          [23];
1754        u_char ppv_id_hi                      :8;
1755        u_char ppv_id_mh                      :8;
1756        u_char ppv_id_ml                      :8;
1757        u_char ppv_id_lo                      :8;
1758        u_char program_id_hi                  :8;
1759        u_char program_id_mh                  :8;
1760        u_char program_id_ml                  :8;
1761        u_char program_id_lo                  :8;
1762        u_char                                :8;
1763        u_char                                :8;
1764        u_char                                :8;
1765        u_char                                :8;
1766};
1767#define MHWTITLELEN sizeof(struct mhwtitle)
1768
1769struct mhwsummary
1770{
1771        u_char table_id                       :8;
1772        u_char section_length_hi              :4;
1773        u_char                                :2;
1774        u_char dummy                          :1;
1775        u_char section_syntax_indicator       :1;
1776        u_char section_length_lo              :8;
1777        u_char program_id_hi                  :8;
1778        u_char program_id_mh                  :8;
1779        u_char program_id_ml                  :8;
1780        u_char program_id_lo                  :8;
1781        u_char                                :8;
1782        u_char                                :8;
1783        u_char                                :8;
1784        u_char nb_replays                     :8;
1785};
1786#define MHWSUMMARYLEN sizeof(struct mhwsummary)
1787
1788struct mhw2channel
1789{
1790        u_char network_id_hi;
1791        u_char network_id_lo;
1792        u_char transponder_id_hi;
1793        u_char transponder_id_lo;
1794        u_char channel_id_hi;
1795        u_char channel_id_lo;
1796        u_char                                :8;
1797        u_char                                :8;
1798};
1799
1800struct extepgcache
1801{
1802        long id;
1803        struct epg* epgnode;
1804        struct extepgcache* next;
1805};
1806
1807struct extepgchannel
1808{
1809        long id;
1810        int serviceid;
1811        uint64_t transponderid;
1812        struct extepgchannel* next;
1813};
1814
1815struct extepgconfig
1816{
1817        uint64_t transponderid;
1818        int type;
1819        char* file;
1820        int channelpid;
1821        int titlepid[8];
1822        int summarypid[8];
1823        struct extepgconfig* next;
1824};
1825
1826struct blacklist
1827{
1828  char* file;
1829  struct splitstr* splitstr;
1830  int count;
1831};
1832
1833typedef struct sci_modes
1834{
1835        int emv2000;
1836        int dma;
1837        int man_act;
1838        int rw_mode;
1839} scimodes;
1840
1841typedef struct sci_parameters
1842{
1843        u_char T;
1844        unsigned long fs;
1845        unsigned long ETU;
1846        unsigned long WWT;
1847        unsigned long CWT;
1848        unsigned long BWT;
1849        unsigned long EGT;
1850        unsigned long clock_stop_polarity;
1851        u_char check;
1852        u_char P;
1853        u_char I;
1854        u_char U;
1855} sciparameters;
1856
1857#endif
Note: See TracBrowser for help on using the repository browser.