source: titan/titan/struct.h @ 12226

Last change on this file since 12226 was 12226, checked in by nit, 9 years ago

[titan] make longkey dynamic

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};
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        // mutex for VFD handling
844        pthread_mutex_t vfdmutex;
845        off64_t recsplitsize;
846        char* gateway;
847        char* dnsserver1;
848        char* dnsserver2;
849        int fasttextrender;
850        // 1 release all menus
851        int menurelease;
852        int play;
853        int pause;
854        int playspeed;
855        int random;
856        int repeat;
857        int epgdays;
858        int spinnertime;
859        int spinnerspeed;
860        int hangtime;
861        int timeupdatecount;
862        int maxsat;
863        int markmodus;
864        // 1 from main prog
865        // 2 from a thread
866        int standby;
867        char* tmp;
868        // rc filedescriptor
869        int fdrc;
870        // rc filedescriptor for simulating keypress (fifo)
871        int fdrcsim;
872        int writeconfig;
873        int writeownconfig;
874        int writercconfig;
875        int writeskinconfig;
876        int writechannel;
877        int writetransponder;
878        int writeprovider;
879        int writemainbouquet;
880        int writebouquet;
881        int writemainplaylist;
882        int writeplaylist;
883        int writesat;
884        int writerectimer;
885        int writeepgscanlist;
886        // 1 mute is aktiv
887        int mute;
888        // 1 spinner is aktiv
889        int spinner;
890        // 1 infobar is aktiv
891        // 2 infobar is aktiv (with wait befor show)
892        // 3 infobar is aktiv (no autohide)
893        int infobar;
894        // with infobar to display
895        int infobarnr;
896        // 0 is for mute screen
897        struct skin *drawallways[1];
898        char* drawallwaysbg[1];
899        int usedirectfb;
900        // count how long last rcwait (shows spinner if to long)
901        time_t sec;
902        // if set to a value != 0, rcwait returns this number
903        int rckey;
904        struct skin* skinerr;
905        // 0 calc and draw
906        // 1 calc only without hidden nodes
907        // 2 calc only with hidden nodes
908        int screencalc;
909        // 0 deaktiv
910        // 1 struct filelist filled
911        // 2 struct filelist and show filesize
912        // 3 struct filelist and show filedate
913        int filelistextend;
914        pthread_attr_t timerthreadattr;
915        pthread_t timerthread;
916        int timerthreadstatus;
917        int timerthreadaktion;
918        pthread_attr_t subthreadattr;
919        pthread_t subthread;
920        int subthreadstatus;
921        int subthreadaktion;
922        int subthreadpid;
923        // epg thread pointer
924        struct stimerthread* epgthread;
925        // epgscanlist thread pointer
926        struct stimerthread* epgscanlistthread;
927        // httpd thread pointer
928        struct stimerthread* httpthread;
929        struct service* aktservice;
930        struct service* lastservice;
931        struct channel* markedchannel;
932        char* configfile;
933        // for bouquet channel numbering
934        int bouquetnr[MAXSERVICETYPE];
935        int servicetype;
936        struct shutdowntimer *sd_timer;
937        // akt pos in channel cache
938        int channelcachepos;
939        // aktivate/deaktivate auto updatevfd
940        int updatevfd;
941        // count for recording
942        int recording;
943        // count for streaming
944        int streaming;
945        // timeshift running = 1
946        int timeshift;
947        // ts playing running = 1
948        int playing;
949        // if set to a skin (screenpointer) only this screen has rc
950        struct skin* rcowner;
951        // timerstuktur fuer autores
952        struct stimerthread* restimer;
953        //spindown USB/HDD
954        struct hddparm hdd[3];
955        struct stimerthread* addhddall;
956
957} status;
958
959struct fb
960{
961        int dev;
962        char *name;
963        int fd;
964        unsigned char *fb;
965        unsigned long *fblong;
966        int width;
967        int height;
968        int pitch;
969        unsigned long fixfbsize;
970        unsigned long varfbsize;
971        int colbytes;
972        struct fb *next;
973};
974
975struct rc
976{
977        int key;
978        void (*rcfunc)(struct skin*, struct skin*, int flag);
979        struct skin *screen;
980        struct skin *screennode;
981        struct skin *owner;
982        struct rc *next;
983};
984
985struct clist
986{
987        char *key;
988        char *value;
989        char *def;
990        char *tmp;
991        struct clist *next;
992};
993
994struct bouquet
995{
996        int nr;
997        int serviceid;
998        unsigned long transponderid;
999        struct channel *channel;
1000        struct bouquet *prev;
1001        struct bouquet *next;
1002};
1003
1004struct mainbouquet
1005{
1006        char *name;
1007        int type;
1008        char *filename;
1009        struct bouquet *bouquet;
1010        struct mainbouquet *prev;
1011        struct mainbouquet *next;
1012};
1013
1014struct pic
1015{
1016        char* name;
1017        unsigned char* picbuf;
1018        // < 0 when picbuf is normal mem (hw jpg)
1019        int memfd;
1020        unsigned long width;
1021        unsigned long height;
1022        unsigned long rowbytes;
1023        int channels;
1024        int del;
1025        struct pic* next;
1026};
1027
1028struct font
1029{
1030        char *name;
1031        FT_Error error;
1032        FTC_Manager manager;
1033        FTC_SBitCache cache;
1034        FTC_ImageTypeRec desc;
1035        FT_Face face;
1036        FT_UInt prev_glyphindex;
1037        FT_Bool use_kerning;
1038        struct font *next;
1039};
1040
1041#define HILO(x) (x##_hi << 8 | x##_lo)
1042
1043/*
1044#define HILO2(x) (x##1 << 8 | x##2)
1045#define HILO3(x) (x##1 << 16 | x##2 << 8 | x##3)
1046#define HILO4(x) (x##4 << 24 | x##2 << 16 | x##3 << 8 | x##4)
1047
1048#define MjdToEpochTime(x) ((HILO(x)-40587)*86400)
1049#define BcdTimeToSeconds(x) ((3600 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \
1050                             (60 * ((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF))) + \
1051                             ((10*((x##_s & 0xF0)>>4)) + (x##_s & 0xF)))
1052#define BcdTimeToMinutes(x) ((60 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \
1053                             (((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF))))
1054#define BcdCharToInt(x) (10*((x & 0xF0)>>4) + (x & 0xF))
1055#define CheckBcdChar(x) ((((x & 0xF0)>>4) <= 9) && \
1056                         ((x & 0x0F) <= 9))
1057#define CheckBcdSignedChar(x) ((((x & 0xF0)>>4) >= 0) && (((x & 0xF0)>>4) <= 9) && \
1058                         ((x & 0x0F) >= 0) && ((x & 0x0F) <= 9))
1059
1060#define GetSectionLength(x) HILO(((si_tab_t *)(x))->section_length)
1061#define GetServiceId(x) HILO(((eit_t *)(x))->service_id)
1062#define GetLastTableId(x) ((eit_t *)(x))->segment_last_table_id
1063#define GetSegmentLastSectionNumber(x) ((eit_t *)(x))->segment_last_section_number
1064#define GetPrivateDataSpecifier(x) HILO4(((descr_private_data_specifier_t *)x)->private_data_specifier)
1065*/
1066
1067struct eit
1068{
1069        u_char table_id                               /*:8*/;
1070        u_char section_length_hi                      :4;
1071        u_char                                        :3;
1072        u_char section_syntax_indicator               :1;
1073        u_char section_length_lo                      /*:8*/;
1074        u_char service_id_hi                          /*:8*/;
1075        u_char service_id_lo                          /*:8*/;
1076        u_char current_next_indicator                 :1;
1077        u_char version_number                         :5;
1078        u_char                                        :2;
1079        u_char section_number                         /*:8*/;
1080        u_char last_section_number                    /*:8*/;
1081        u_char transport_stream_id_hi                 /*:8*/;
1082        u_char transport_stream_id_lo                 /*:8*/;
1083        u_char original_network_id_hi                 /*:8*/;
1084        u_char original_network_id_lo                 /*:8*/;
1085        u_char segment_last_section_number            /*:8*/;
1086        u_char segment_last_table_id                  /*:8*/;
1087        u_char data[]; /* struct eitevent */
1088};
1089#define EITLEN sizeof(struct eit)
1090#define GETEITSECLEN(x) HILO(((struct eit*)(x))->section_length)
1091
1092struct eitevent
1093{
1094        u_char event_id_hi                            /*:8*/;
1095        u_char event_id_lo                            /*:8*/;
1096        u_char mjd_hi                                 /*:8*/;
1097        u_char mjd_lo                                 /*:8*/;
1098        u_char start_time_h                           /*:8*/;
1099        u_char start_time_m                           /*:8*/;
1100        u_char start_time_s                           /*:8*/;
1101        u_char duration_h                             /*:8*/;
1102        u_char duration_m                             /*:8*/;
1103        u_char duration_s                             /*:8*/;
1104        u_char descriptors_loop_length_hi             :4;
1105        u_char free_ca_mode                           :1;
1106        u_char running_status                         :3;
1107        u_char descriptors_loop_length_lo             /*:8*/;
1108        u_char data[];
1109};
1110#define EITEVENTLEN sizeof(struct eitevent)
1111#define GETEITDESCLEN(x) HILO(((struct eitevent *)x)->descriptors_loop_length)
1112
1113struct eitshortevent
1114{
1115        u_char descriptor_tag                         /*:8*/;
1116        u_char descriptor_length                      /*:8*/;
1117        u_char lang_code1                             /*:8*/;
1118        u_char lang_code2                             /*:8*/;
1119        u_char lang_code3                             /*:8*/;
1120        u_char event_name_length                      /*:8*/;
1121        u_char data[];
1122};
1123#define EITSHORTEVENTLEN sizeof(struct eitshortevent)
1124
1125struct eitlongevent
1126{
1127        u_char descriptor_tag                         /*:8*/;
1128        u_char descriptor_length                      /*:8*/;
1129        u_char last_descriptor_number                 :4;
1130        u_char descriptor_number                      :4;
1131        u_char lang_code1                             /*:8*/;
1132        u_char lang_code2                             /*:8*/;
1133        u_char lang_code3                             /*:8*/;
1134        u_char length_of_items                        /*:8*/;
1135        u_char data[]; /* struct eitlongeventitem */
1136};
1137#define EITLONGEVENTLEN sizeof(struct eitlongevent)
1138
1139struct eitlongeventitem
1140{
1141        u_char item_description_length               /*:8*/;
1142        u_char data[];
1143};
1144#define EITLONGEVENTITEMLEN sizeof(struct eitlongeventitem)
1145
1146struct eitlinkage
1147{
1148        u_char descriptor_tag                 /*:8*/;
1149        u_char descriptor_length              /*:8*/;
1150        u_char transport_stream_id_hi         /*:8*/;
1151        u_char transport_stream_id_lo         /*:8*/;
1152        u_char original_network_id_hi         /*:8*/;
1153        u_char original_network_id_lo         /*:8*/;
1154        u_char service_id_hi                  /*:8*/;
1155        u_char service_id_lo                  /*:8*/;
1156        u_char linkage_type                   /*:8*/;
1157};
1158#define EITLLINKAGELEN sizeof(struct eitlinkage)
1159
1160struct parentalrating
1161{
1162        u_char descriptor_tag                 /*:8*/;
1163        u_char descriptor_length              /*:8*/;
1164        u_char data[]; //struct parental_rating_item
1165};
1166#define PARENTALRATINGLEN sizeof(struct parentalrating)
1167
1168struct parentalratingitem
1169{ 
1170   u_char lang_code1                          /*:8*/;
1171   u_char lang_code2                          /*:8*/;
1172   u_char lang_code3                          /*:8*/;
1173   u_char rating                              /*:8*/;
1174};
1175#define PARENTALRATINGITEMLEN sizeof(struct parentalratingitem)
1176
1177#endif
Note: See TracBrowser for help on using the repository browser.