source: titan/titan/struct.h @ 15278

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

[titan] first step thump creater

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