source: titan/titan/struct.h @ 10808

Last change on this file since 10808 was 10808, checked in by nit, 11 years ago

[titan] optimize epg read funktion

File size: 24.1 KB
Line 
1#ifndef STRUCT_H
2#define STRUCT_H
3
4#define _GNU_SOURCE
5
6#ifdef SIMULATE
7#include <mcheck.h>
8#endif
9
10#include <stdio.h>
11#include <stdlib.h>
12#include <stdint.h>
13#include <string.h>
14#include <libgen.h>
15#include <fcntl.h>
16#include <ctype.h>
17#include <linux/fb.h>
18#include <sys/ioctl.h>
19#include <sys/mman.h>
20#include <bpamem.h>
21#include <png.h>
22#include <jpeglib.h>
23#include <libmmeimage.h>
24#include <libintl.h>
25#include <locale.h>
26#include <math.h>
27#include <linux/input.h>
28#include <sys/wait.h>
29#include <time.h>
30#include <dirent.h>
31#include <fnmatch.h>
32#include <dlfcn.h>
33#include <pthread.h>
34#include <linux/dvb/frontend.h>
35#include <linux/dvb/dmx.h>
36#include <linux/dvb/audio.h>
37#include <linux/dvb/video.h>
38#include <sys/vfs.h>
39#include <inttypes.h>
40#include <sys/socket.h>
41#include <sys/un.h>
42#include <unistd.h>
43#include <zlib.h>
44#include <net/if.h>
45#include <netinet/in.h>
46#include <arpa/inet.h>
47#include <netdb.h>
48#include <errno.h>
49#include <linux/dvb/version.h>
50#include <setjmp.h>
51#include <sys/mount.h>
52#include <execinfo.h>
53#include <ifaddrs.h>
54#include <linux/dvb/ca.h>
55#include <poll.h>
56
57#ifndef SIMULATE
58#include <linux/stmfb.h>
59#endif
60
61//for freetype
62#include <ft2build.h>
63#include FT_FREETYPE_H
64#include FT_CACHE_H
65
66//for eplayer
67#ifdef EPLAYER3
68#include <common.h>
69#endif
70
71#ifdef EPLAYER4
72#include <gst/gst.h>
73#include <gst/pbutils/missing-plugins.h>
74#endif
75
76#define VERSION "1.2"
77#define PROGNAME "titan"
78#define COPYRIGHT "NIT"
79#define CRONTRIBUT "obi, black, dvboxer, oxygen, gost"
80
81#define _(x) gettext(x)
82#define MINMALLOC 4096
83#define SCROLLBARWIDTH 15
84#define SCROLLBARBORDERSIZE 1
85#define FONTPOSYOFFSET -3
86#define FB "fb0"
87#define FB1 "fb1"
88#define SKINFB "skinfb"
89#define ACCELFB "accelfb"
90#define CONFIGFILE PROGNAME".cfg"
91#define KILLPROG "killall -9 "PROGNAME
92#define REBOOT "init 6"
93#define FILELISTDELMARK 255
94#define PLUGINDELMARK 254
95#define MAXDVBADAPTER 2
96#define MAXFRONTENDDEV 4
97#define MAXDEMUXDEV 4
98#define MAXDEMUXDEVOPEN 10
99#define MAXAUDIODEV 4
100#define MAXVIDEODEV 4
101#define MAXCIDEV 4
102#define MAXCADEV 4
103#define MAXDVRDEV 4
104#define RCTIMEOUT 999999
105#define RCTHREADSTANDBY 999998
106#define MAXSERVICETYPE 10
107#define TSSIZE 188
108#define CHANNELCACHEMAX 1000
109#define MAXHTTPDCONN 20
110#define MAXHTMLLINE 300
111#define LISTHASHSIZE 27
112#define MAXCASESSION 16
113
114//CA Defines
115#define T_SB 0x80               //sb (h<--m)
116#define T_RCV 0x81              //receive (h-->m)
117#define T_CREATE_T_C 0x82       //create transport connection (h-->m)
118#define T_C_T_C_REPLY 0x83      //ctc reply (h<--m)
119#define T_DELETE_T_C 0x84       //delete tc (h<->m)
120#define T_D_T_C_REPLY 0x85      //dtc reply (h<->m)
121#define T_REQUEST_T_C 0x86      //request transport connection (h<--m)
122#define T_NEW_T_C 0x87          //new tc - reply to t_request (h-->m)
123#define T_T_C_ERROR 0x77        //error creating tc (h-->m)
124#define T_DATA_LAST 0xA0        //convey data from higher (h<->m)
125#define T_DATA_MORE 0xA1        //convey data from higher (h<->m)
126
127// VFD icons supported (more or less) on all boxes:
128typedef 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;
129
130#define MIN(a,b) (a < b ? a : b)
131#define MAX(a,b) (a > b ? a : b)
132
133#define bcdtoint(i) ((((i & 0xf0) >> 4) * 10) + (i & 0x0f))
134
135#define alpha_composite(composite, fg, alpha, bg) { \
136unsigned short temp = ((unsigned short)(fg)*(unsigned short)(alpha) +   \
137(unsigned short)(bg)*(unsigned short)(255 - (unsigned short)(alpha)) +  \
138(unsigned short)128);  \
139(composite) = (unsigned char)((temp + (temp >> 8)) >> 8); }
140
141enum {LEFT=20000, CENTER, RIGHT};
142enum {TOP=20000, MIDDLE, BOTTOM};
143enum {BOTTOMLEFT, BOTTOMRIGHT, TOPLEFT, TOPRIGHT};
144enum {LEFTRIGHT=1, TOPBOTTOM, LEFTMIDDLE, TOPMIDDLE};
145enum {NO, YES, AUTONO, AUTOYES};
146enum {UNDEF, LISTBOX, TEXTBOX, CHOICEBOX, INPUTBOX, INPUTBOXNUM, FILELIST, PROGRESSBAR, MENU, MULTIPROGRESSBAR, GRID, GRIDBR, TEXTBOXGRIDBR};
147enum {FRONTENDDEV, DEMUXDEV, VIDEODEV, AUDIODEV, CADEV, CIDEV, FRONTENDDEVDUMMY, DVRDEV};
148enum {TV, RADIO};
149enum {RECDIRECT, RECTIMER, RECTIMESHIFT, RECSTREAM, RECPLAY};
150enum {AC3 = 0, MPEGA = 1, DTS = 2, LPCM = 6, AAC = 8, AACHE = 9};
151enum {MPEGV = 0, MPEG4V = 4, H264 = 1};
152enum {ALLCHANNEL, SATCHANNEL, PROVIDERCHANNEL, AZCHANNEL, BOUQUETCHANNEL, SATLIST, PROVIDERLIST, AZLIST, MAINBOUQUETLIST};
153enum {NOMODE, MVMODE, RMMODE, CPMODE, PROTECTMODE};
154enum {NOTHING, CHANNEL, STILLPIC, RECORDDIRECT, RECORDTIMER, RECORDTIMESHIFT, RECORDSTREAM, TMPOTHER, RECORDPLAY};
155enum {START, PAUSE, STOP};
156enum {DEACTIVE, ACTIVE, INPAUSE, ERROR};
157enum {FUNCTEXT, FUNCPIC, FUNCPROGRESS};
158enum {CASESSIONCREATE, CASESSIONBUSY, CASESSIONDEL, CASESSIONSTART, CASESSIONFINAL, CARESFIRSTENQUIRY, CARESCHANGE, CARESENQUIRY, CADATETIMESEND, CAMMIIDLE, CAMMIDISPLAYREPLAY, CAMMIFAKEOK};
159
160struct queue
161{
162        //0-99 for ca module
163        int type;
164        int flag;
165        int len;
166        void* data;
167        struct queue* prev;
168        struct queue* next;
169};
170
171struct casession
172{
173        int inuse;
174        int sessionnr;
175        int action;
176        int state;
177};
178
179struct caslot
180{
181        struct casession casession[MAXCASESSION];
182        int connid;
183        int status;
184        int rlen;
185        unsigned char* rbuf;
186        char* name;
187        int fastrun;
188        int mmimanager;
189        int camanager;
190        int datetimemanager;
191        int appmanager;
192        int resmanager;
193};
194
195struct hdd
196{
197        char* device;
198        int partition;
199        unsigned long size;
200        char* filesystem;
201        char* label;
202        char* uuid;
203        char* vendor;
204        char* model;
205        int removable;
206        struct hdd* prev;
207        struct hdd* next;
208};
209
210struct scaninfo
211{
212        struct dvbdev* fenode;
213        struct transponder* tpnode;
214        struct skin* scanscreen;
215        struct skin* listbox;
216        int threadend;
217        int scantype;
218        int fetype;
219        int orbitalpos;
220        int timeout;
221        int onlyfree;
222        int clear;
223        char* satname;
224        int tpcount;
225        int tvcount;
226        int newtvcount;
227        int radiocount;
228        int newradiocount;
229        int datacount;
230        int newdatacount;
231} scaninfo;
232
233struct screensaver
234{
235        int type;
236        int speed;
237        int newposx;
238        int newposy;
239        struct skin* screen;
240        struct skin* screennode;
241        struct skin* filelist;
242        struct skin* aktnode;
243        struct pic* pic;
244        char* value;
245};
246
247struct playlist
248{
249        char* file;
250        struct playlist* prev;
251        struct playlist* next;
252};
253
254struct mainplaylist
255{
256        char* name;
257        char* filename;
258        struct playlist* playlist;
259        struct mainplaylist* prev;
260        struct mainplaylist* next;
261};
262
263struct epgrecord
264{
265        time_t begin;
266        time_t end;
267        int posx;
268        int size;
269        struct epgrecord* prev;
270        struct epgrecord* next;
271};
272
273struct download
274{
275        char* host;
276        char* page;
277        int port;
278        char* filename;
279        int connfd;
280        int proz;
281        unsigned int maxkb;
282        unsigned int aktkb;
283        int ret;
284};
285
286struct epgscanlist
287{
288        int serviceid;
289        unsigned long transponderid;
290        time_t scantime;
291        struct epgscanlist* prev;
292        struct epgscanlist* next;
293};
294
295struct rgba
296{
297        char r;
298        char g;
299        char b;
300        char a;
301};
302
303struct subclutentry
304{
305        unsigned char Y, Cr, Cb, T;
306        unsigned char valid;
307};
308
309struct subclut
310{
311        unsigned char clutid;
312        unsigned char clutversionnumber;
313        struct subclutentry entries2bit[4];
314        struct subclutentry entries4bit[16];
315        struct subclutentry entries8bit[256];
316        struct subclut *next;
317};
318
319struct subpagereg
320{
321        int regid;
322        int reghorizontaladdress;
323        int regverticaladdress;
324        int scaleposx, scaleposy;
325        struct subpagereg *next;
326};
327
328struct subregobj
329{
330        int objid;
331        int objtype;
332        int objproviderflag;
333        int objhorizontalpos;
334        int objverticalpos;
335        // not supported right now...
336        int foregroundpixel;
337        int backgroundpixel;
338        struct subregobj *next;
339};
340
341struct subreg
342{
343        int regid;
344        int versionnumber;
345        int height, width;
346        int scaleheight, scalewidth;
347        int depth;
348        unsigned char *buf;
349        struct rgba *palette;
350        int clutid;
351        int committed;
352        struct subregobj *objects;
353        struct subreg *next;
354};
355
356struct subpage
357{
358        int pageid;
359        time_t pagetimeout;
360        int pageversionnumber;
361        int state;
362        int pcssize;
363        struct subpagereg *pageregions;
364        struct subreg *regions;
365        struct subclut *cluts;
366        struct subpage *next;
367};
368
369struct bitstream
370{
371        unsigned char *data;
372        int size;
373        int avail;
374        int consumed;
375};
376
377//there are a copyrectimer function
378//if you change the struct you must change this funktion
379struct rectimer
380{
381        char* name;
382        time_t begin;
383        time_t end;
384        int repeate;
385        int afterevent;
386        char* pincode;
387        int disabled;
388        int justplay;
389        char* recpath;
390        int servicetype;
391        char* channellist;
392        int serviceid;
393        //0 = nothing
394        //1 = running
395        //2 = end
396        //3 = error
397        int status;
398        char* errstr;
399        struct service* servicenode;
400        unsigned long transponderid;
401        struct rectimer *prev;
402        struct rectimer *next;
403};
404
405struct inetwork
406{
407        int id;
408        char* device;
409        char* ip;
410        char* netmask;
411        char* mac;
412        char* broadcast;
413        int dhcp;
414        struct inetwork *prev;
415        struct inetwork *next;
416};
417
418struct rcmap
419{
420        char* name;
421        int key;
422        int newkey;
423        struct rcmap* next;
424};
425
426struct splitstr
427{
428        char* part;
429};
430
431struct channelcache
432{
433        int serviceid;
434        unsigned long transponderid;
435        struct channel* chnode;
436        struct channelcache* next;
437};
438
439struct filelist
440{
441        int type;
442        char* name;
443        char* shortname;
444        char* path;
445        char* imdbpath;
446        off64_t size;
447        time_t date;
448};
449
450struct skin
451{
452        char* name;
453        uint8_t type;
454        uint8_t wrap;
455        uint8_t bordersize;
456        uint8_t scrollbar;
457        uint16_t halign;
458        uint16_t valign;
459        int16_t posx;
460        int16_t posy;
461        int16_t width;
462        int16_t height;
463        long bordercol;
464        long deaktivcol;
465        long shadowcol;
466        uint8_t shadowsize;
467        uint8_t shadowpos;
468        uint8_t fontsize;
469        uint8_t fontsize2;
470        long fontcol;
471        long fontcol2;
472        char* font;
473        int16_t zorder;
474        int16_t titlealign;
475        char* title;
476        char* text;
477        char* text2;
478        long bgcol;
479        long bgcol2;
480        long titlebgcol;
481        long titlebgcol2;
482        long progresscol;
483        char* pic;
484        int16_t picwidth;
485        int16_t picheight;
486        uint16_t hspace;
487        uint16_t vspace;
488        char* (*skinfunc)(void*, void*);
489        char* param1;
490        char* param2;
491        char* parent;
492        char* input;
493        char* mask;
494        uint16_t textposx;
495        uint16_t textposx2;
496        int16_t gradient;
497        int16_t titlegradient;
498        uint8_t transparent;
499        uint8_t hidden;
500        uint8_t funcrettype;
501        int8_t charspace;
502        int8_t bordertype;
503        int16_t borderradius;
504        uint16_t bgspace;
505
506        uint8_t titlesize;
507        struct filelist* filelist;
508        struct skin* parentpointer;
509        char* ret;
510        char* choiceboxvalue;
511        unsigned int linecount;
512        unsigned int pagecount;
513        unsigned int poscount;
514        unsigned int gridcol;
515        int aktpage;
516        int aktline;
517        uint8_t scrollbarbordersize;
518        uint8_t prozposx;
519        uint8_t prozposy;
520        uint8_t prozwidth;
521        uint8_t prozheight;
522        uint8_t picprozwidth;
523        uint8_t del;
524        uint8_t picprozheight;
525        int16_t scrollbarheight;
526        int16_t progresssize;
527        int16_t scrollbarwidth;
528        int16_t scrollbarpos;
529        int16_t rposx;
530        int16_t rposy;
531        int16_t rwidth;
532        int16_t rheight;
533        int16_t rpicwidth;
534        int16_t rpicheight;
535        int16_t iposx;
536        int16_t iposy;
537        int16_t iwidth;
538        int16_t iheight;
539        char* handle;
540        char* handle1;
541        struct epgrecord* epgrecord;
542        char* pluginhandle;
543        struct skin *select;
544        struct skin *child;
545        struct skin *prev;
546        struct skin *next;
547};
548
549struct epg
550{
551        int eventid;
552        int version;
553        time_t starttime;
554        time_t endtime;
555        char* title;
556        char* subtitle;
557        char* desc;
558        int desclen;
559        int desccomplen;
560        int parentalrating;
561        struct epg* prev;
562        struct epg* next;
563};
564
565struct shutdowntimer
566{
567        int active,type; //type: 0=DeepStandby, 1=Standby
568        long long shutdown_time;
569};
570
571struct dvbdev
572{
573        char* dev;
574        int fd;
575        uint8_t type;
576        uint8_t adapter;
577        uint8_t devnr;
578        uint8_t felock;
579        struct transponder* felasttransponder;
580        struct transponder* feakttransponder;
581        int feloffrequency;
582        int feaktband;
583        int feaktpolarization;
584        int fedmxsource;
585        char* feaktlnb;
586        char* feaktdiseqc;
587        char* feshortname;
588        struct dvb_frontend_info* feinfo;
589        struct caslot* caslot;
590        struct dvbdev *next;
591};
592
593//there are a copytransponder and createtransponder function
594//if you change this struct you must change the function
595struct transponder
596{
597        unsigned long id;
598        uint8_t fetype;
599        uint8_t polarization;
600        uint8_t modulation;
601        uint8_t fec;
602        uint8_t pilot;
603        uint8_t rolloff;
604        uint8_t inversion;
605        uint8_t system;
606        uint8_t flag;
607        // 0 = unknown
608        // 1 = tunable
609        // 2 = not tunable
610        uint8_t tunablestatus;
611        int orbitalpos;
612        unsigned int frequency;
613        int symbolrate;
614        struct transponder *next;
615};
616
617struct provider
618{
619        int providerid;
620        char* name;
621        int flag;
622        struct provider *prev;
623        struct provider *next;
624};
625
626struct subtitle
627{
628        char* name;
629        int16_t pid;
630        int16_t type;
631        int16_t id1;
632        int16_t id2;
633        struct subtitle* next;
634};
635
636struct esinfo
637{
638        int streamtype;
639        int reserved1;
640        int pid;
641        int reserved2;
642        struct esinfo* next;
643};
644
645struct cadesc
646{
647        int len;
648        int systemid;
649        int reserved;
650        int pid;
651        char* privat;
652        struct cadesc* next;
653};
654
655struct pmt
656{
657        int programnumber;
658        int reserved1;
659        int versionnumber;
660        int currentnextindicator;
661        int reserved2;
662};
663
664struct audiotrack
665{
666        char* name;
667        uint8_t audiocodec;
668        int16_t audiopid;
669        struct audiotrack* next;
670};
671
672//there are a createchannel function
673//if you change this struct you must change the function
674struct channel
675{
676        char* name;
677        unsigned long transponderid;
678        int providerid;
679        int serviceid;
680        int servicetype;
681        uint8_t flag;
682        uint8_t crypt;
683        int8_t videocodec;
684        int8_t audiocodec;
685        int16_t videopid;
686        int16_t audiopid;
687        int16_t ac3audiopid;
688        int16_t txtpid;
689        int16_t pcrpid;
690        int16_t pmtpid;
691        uint8_t protect;
692        struct transponder *transponder;
693        struct provider *provider;
694        struct audiotrack *audiotrack;
695        struct subtitle *subtitle;
696        struct pmt *pmt;
697        struct cadesc *cadesc;
698        struct esinfo *esinfo;
699        struct epg *epg;
700        struct channel *prev;
701        struct channel *next;
702};
703
704struct sat
705{
706        char* name;
707        int orbitalpos;
708        int flag;
709        int fetype;
710        int scan;
711        struct sat *prev;
712        struct sat *next;
713};
714
715struct service
716{
717        int type;
718        struct dvbdev *fedev;
719        struct dvbdev *dmxaudiodev;
720        struct dvbdev *dmxvideodev;
721        struct dvbdev *dmxpcrdev;
722        struct dvbdev *dmxsubtitledev;
723        struct dvbdev *audiodev;
724        struct dvbdev *videodev;
725        struct transponder *transponder;
726        struct channel *channel;
727        unsigned char *pmtbuf;
728        int pmtlen;
729        int recdmxstart;
730        int recdstfd;
731        int recsrcfd;
732        int camsockfd;
733        time_t recendtime;
734        size_t reclastsync;
735        off64_t rectotal;
736        int reccount;
737        char* recname;
738        struct service *next;
739};
740
741struct stimerthread
742{
743        int delay;
744        int count;
745        int notfirst;
746        pthread_attr_t attr;
747        pthread_t thread;
748        int status;
749        int aktion;
750        void* param1;
751        void* param2;
752        void* (*func)(struct stimerthread*, void*, void*);
753        struct stimerthread* next;
754};
755
756struct hddparm
757{
758        char* device;
759        int read;
760        int write;
761        int sleeptime;
762        int notchanged;
763};
764
765struct status
766{
767        //deaktivates child protect if greater then akttime
768        time_t protecttime;
769        char* boxtype;
770        pthread_t mainthread;
771        //videosize from stream
772        video_size_t videosize;
773        time_t videosizevalid;
774        //radius for rounded border
775        int borderradius;
776        int picbordersize;
777        int titlelinesize;
778        char* oldchannellist;
779        char* oldrchannellist;
780        //0 border
781        //1 fullbar
782        int listboxselecttype;
783        //0 camd.socket
784        //1 pmt.tmp
785        int pmtmode;
786        //timer for del old epg entrys
787        time_t deloldepg;
788        //0 dektiv
789        //1 only scan
790        //2 only whitlist
791        //3 scan and whitelist
792        int epglistmode;
793        // 1 manual
794        // 2 from standby
795        int startmode;
796        jmp_buf longjumpbuf;
797        pthread_mutex_t drawingmutex;
798        pthread_mutex_t rectimermutex;
799        pthread_mutex_t servicemutex;
800        pthread_mutex_t epgmutex;
801        pthread_mutex_t channelmutex;
802        pthread_mutex_t timerthreadmutex;
803        pthread_mutex_t audiotrackmutex;
804        pthread_mutex_t subtitlemutex;
805        pthread_mutex_t dmxdevmutex;
806        pthread_mutex_t rcmutex;
807        pthread_mutex_t queuemutex;
808        pthread_mutex_t clistmutex;
809        pthread_mutex_t hddmutex;
810        // mutex for VFD handling
811        pthread_mutex_t vfdmutex;
812        off64_t recsplitsize;
813        char* gateway;
814        char* dnsserver1;
815        char* dnsserver2;
816        int fasttextrender;
817        // 1 release all menus
818        int menurelease;
819        int play;
820        int pause;
821        int playspeed;
822        int random;
823        int repeat;
824        int epgdays;
825        int spinnertime;
826        int spinnerspeed;
827        int hangtime;
828        int timeupdatecount;
829        int maxsat;
830        int markmodus;
831        // 1 from main prog
832        // 2 from a thread
833        int standby;
834        char* tmp;
835        // rc filedescriptor
836        int fdrc;
837        // rc filedescriptor for simulating keypress (fifo)
838        int fdrcsim;
839        int writeconfig;
840        int writeownconfig;
841        int writercconfig;
842        int writeskinconfig;
843        int writechannel;
844        int writetransponder;
845        int writeprovider;
846        int writemainbouquet;
847        int writebouquet;
848        int writemainplaylist;
849        int writeplaylist;
850        int writesat;
851        int writerectimer;
852        int writeepgscanlist;
853        // 1 mute is aktiv
854        int mute;
855        // 1 spinner is aktiv
856        int spinner;
857        // 1 infobar is aktiv
858        // 2 infobar is aktiv (with wait befor show)
859        // 3 infobar is aktiv (no autohide)
860        int infobar;
861        // with infobar to display
862        int infobarnr;
863        // 0 is for mute screen
864        struct skin *drawallways[1];
865        char* drawallwaysbg[1];
866        int usedirectfb;
867        // count how long last rcwait (shows spinner if to long)
868        time_t sec;
869        // if set to a value != 0, rcwait returns this number
870        int rckey;
871        struct skin* skinerr;
872        // 0 calc and draw
873        // 1 calc only without hidden nodes
874        // 2 calc only with hidden nodes
875        int screencalc;
876        // 0 deaktiv
877        // 1 struct filelist filled
878        // 2 struct filelist and show filesize
879        // 3 struct filelist and show filedate
880        int filelistextend;
881        pthread_attr_t timerthreadattr;
882        pthread_t timerthread;
883        int timerthreadstatus;
884        int timerthreadaktion;
885        pthread_attr_t subthreadattr;
886        pthread_t subthread;
887        int subthreadstatus;
888        int subthreadaktion;
889        int subthreadpid;
890        // epg thread pointer
891        struct stimerthread* epgthread;
892        // epgscanlist thread pointer
893        struct stimerthread* epgscanlistthread;
894        // httpd thread pointer
895        struct stimerthread* httpthread;
896        struct service* aktservice;
897        struct service* lastservice;
898        struct channel* markedchannel;
899        char* configfile;
900        // for bouquet channel numbering
901        int bouquetnr[MAXSERVICETYPE];
902        int servicetype;
903        struct shutdowntimer *sd_timer;
904        // akt pos in channel cache
905        int channelcachepos;
906        // aktivate/deaktivate auto updatevfd
907        int updatevfd;
908        // count for recording
909        int recording;
910        // count for streaming
911        int streaming;
912        // timeshift running = 1
913        int timeshift;
914        // ts playing running = 1
915        int playing;
916        // if set to a skin (screenpointer) only this screen has rc
917        struct skin* rcowner;
918        // timerstuktur fuer autores
919        struct stimerthread* restimer;
920        //spindown USB/HDD
921        struct hddparm hdd[3];
922        struct stimerthread* hddsleeptimer;
923
924} status;
925
926struct fb
927{
928        int dev;
929        char *name;
930        int fd;
931        unsigned char *fb;
932        unsigned long *fblong;
933        int width;
934        int height;
935        int pitch;
936        unsigned long fixfbsize;
937        unsigned long varfbsize;
938        int colbytes;
939        struct fb *next;
940};
941
942struct rc
943{
944        int key;
945        void (*rcfunc)(struct skin*, struct skin*);
946        struct skin *screen;
947        struct skin *screennode;
948        struct skin *owner;
949        struct rc *next;
950};
951
952struct clist
953{
954        char *key;
955        char *value;
956        char *def;
957        char *tmp;
958        struct clist *next;
959};
960
961struct bouquet
962{
963        int nr;
964        int serviceid;
965        unsigned long transponderid;
966        struct channel *channel;
967        struct bouquet *prev;
968        struct bouquet *next;
969};
970
971struct mainbouquet
972{
973        char *name;
974        int type;
975        char *filename;
976        struct bouquet *bouquet;
977        struct mainbouquet *prev;
978        struct mainbouquet *next;
979};
980
981struct pic
982{
983        char* name;
984        unsigned char* picbuf;
985        // < 0 when picbuf is normal mem (hw jpg)
986        int memfd;
987        unsigned long width;
988        unsigned long height;
989        unsigned long rowbytes;
990        int channels;
991        int del;
992        struct pic* next;
993};
994
995struct font
996{
997        char *name;
998        FT_Error error;
999        FTC_Manager manager;
1000        FTC_SBitCache cache;
1001        FTC_ImageTypeRec desc;
1002        FT_Face face;
1003        FT_UInt prev_glyphindex;
1004        FT_Bool use_kerning;
1005        struct font *next;
1006};
1007
1008#define HILO(x) (x##_hi << 8 | x##_lo)
1009
1010/*
1011#define HILO2(x) (x##1 << 8 | x##2)
1012#define HILO3(x) (x##1 << 16 | x##2 << 8 | x##3)
1013#define HILO4(x) (x##4 << 24 | x##2 << 16 | x##3 << 8 | x##4)
1014
1015#define MjdToEpochTime(x) ((HILO(x)-40587)*86400)
1016#define BcdTimeToSeconds(x) ((3600 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \
1017                             (60 * ((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF))) + \
1018                             ((10*((x##_s & 0xF0)>>4)) + (x##_s & 0xF)))
1019#define BcdTimeToMinutes(x) ((60 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \
1020                             (((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF))))
1021#define BcdCharToInt(x) (10*((x & 0xF0)>>4) + (x & 0xF))
1022#define CheckBcdChar(x) ((((x & 0xF0)>>4) <= 9) && \
1023                         ((x & 0x0F) <= 9))
1024#define CheckBcdSignedChar(x) ((((x & 0xF0)>>4) >= 0) && (((x & 0xF0)>>4) <= 9) && \
1025                         ((x & 0x0F) >= 0) && ((x & 0x0F) <= 9))
1026
1027#define GetSectionLength(x) HILO(((si_tab_t *)(x))->section_length)
1028#define GetServiceId(x) HILO(((eit_t *)(x))->service_id)
1029#define GetLastTableId(x) ((eit_t *)(x))->segment_last_table_id
1030#define GetSegmentLastSectionNumber(x) ((eit_t *)(x))->segment_last_section_number
1031#define GetPrivateDataSpecifier(x) HILO4(((descr_private_data_specifier_t *)x)->private_data_specifier)
1032*/
1033
1034struct eit
1035{
1036        u_char table_id                               /*:8*/;
1037        u_char section_length_hi                      :4;
1038        u_char                                        :3;
1039        u_char section_syntax_indicator               :1;
1040        u_char section_length_lo                      /*:8*/;
1041        u_char service_id_hi                          /*:8*/;
1042        u_char service_id_lo                          /*:8*/;
1043        u_char current_next_indicator                 :1;
1044        u_char version_number                         :5;
1045        u_char                                        :2;
1046        u_char section_number                         /*:8*/;
1047        u_char last_section_number                    /*:8*/;
1048        u_char transport_stream_id_hi                 /*:8*/;
1049        u_char transport_stream_id_lo                 /*:8*/;
1050        u_char original_network_id_hi                 /*:8*/;
1051        u_char original_network_id_lo                 /*:8*/;
1052        u_char segment_last_section_number            /*:8*/;
1053        u_char segment_last_table_id                  /*:8*/;
1054        u_char data[]; /* struct eitevent */
1055};
1056#define EITLEN sizeof(struct eit)
1057#define GETEITSECLEN(x) HILO(((struct eit*)(x))->section_length)
1058
1059struct eitevent
1060{
1061        u_char event_id_hi                            /*:8*/;
1062        u_char event_id_lo                            /*:8*/;
1063        u_char mjd_hi                                 /*:8*/;
1064        u_char mjd_lo                                 /*:8*/;
1065        u_char start_time_h                           /*:8*/;
1066        u_char start_time_m                           /*:8*/;
1067        u_char start_time_s                           /*:8*/;
1068        u_char duration_h                             /*:8*/;
1069        u_char duration_m                             /*:8*/;
1070        u_char duration_s                             /*:8*/;
1071        u_char descriptors_loop_length_hi             :4;
1072        u_char free_ca_mode                           :1;
1073        u_char running_status                         :3;
1074        u_char descriptors_loop_length_lo             /*:8*/;
1075        u_char data[];
1076};
1077#define EITEVENTLEN sizeof(struct eitevent)
1078#define GETEITDESCLEN(x) HILO(((struct eitevent *)x)->descriptors_loop_length)
1079
1080struct eitshortevent
1081{
1082        u_char descriptor_tag                         /*:8*/;
1083        u_char descriptor_length                      /*:8*/;
1084        u_char lang_code1                             /*:8*/;
1085        u_char lang_code2                             /*:8*/;
1086        u_char lang_code3                             /*:8*/;
1087        u_char event_name_length                      /*:8*/;
1088        u_char data[];
1089};
1090#define EITSHORTEVENTLEN sizeof(struct eitshortevent)
1091
1092struct eitlongevent
1093{
1094        u_char descriptor_tag                         /*:8*/;
1095        u_char descriptor_length                      /*:8*/;
1096        u_char last_descriptor_number                 :4;
1097        u_char descriptor_number                      :4;
1098        u_char lang_code1                             /*:8*/;
1099        u_char lang_code2                             /*:8*/;
1100        u_char lang_code3                             /*:8*/;
1101        u_char length_of_items                        /*:8*/;
1102        u_char data[]; /* struct eitlongeventitem */
1103};
1104#define EITLONGEVENTLEN sizeof(struct eitlongevent)
1105
1106struct eitlongeventitem
1107{
1108        u_char item_description_length               /*:8*/;
1109        u_char data[];
1110};
1111#define EITLONGEVENTITEMLEN sizeof(struct eitlongeventitem)
1112
1113struct eitlinkage
1114{
1115        u_char descriptor_tag                 /*:8*/;
1116        u_char descriptor_length              /*:8*/;
1117        u_char transport_stream_id_hi         /*:8*/;
1118        u_char transport_stream_id_lo         /*:8*/;
1119        u_char original_network_id_hi         /*:8*/;
1120        u_char original_network_id_lo         /*:8*/;
1121        u_char service_id_hi                  /*:8*/;
1122        u_char service_id_lo                  /*:8*/;
1123        u_char linkage_type                   /*:8*/;
1124};
1125#define EITLLINKAGELEN sizeof(struct eitlinkage)
1126
1127struct parentalrating
1128{
1129        u_char descriptor_tag                 /*:8*/;
1130        u_char descriptor_length              /*:8*/;
1131        u_char data[]; //struct parental_rating_item
1132};
1133#define PARENTALRATINGLEN sizeof(struct parentalrating)
1134
1135struct parentalratingitem
1136{
1137   u_char lang_code1                          /*:8*/;
1138   u_char lang_code2                          /*:8*/;
1139   u_char lang_code3                          /*:8*/;
1140   u_char rating                              /*:8*/;
1141};
1142#define PARENTALRATINGITEMLEN sizeof(struct parentalratingitem)
1143
1144#endif
Note: See TracBrowser for help on using the repository browser.