source: titan/titan/struct.h @ 12308

Last change on this file since 12308 was 12308, checked in by gost, 9 years ago

[titan] fix seek 5 sec when TS

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