source: titan/titan/struct.h @ 15271

Last change on this file since 15271 was 15271, checked in by nit, 10 years ago

[titan] add bgpic= to skinconfig, a background picture for all screens

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