source: titan/titan/titan.c @ 15272

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

[titan] hold bgpic in memory

File size: 20.5 KB
Line 
1#include "struct.h"
2#include "header.h"
3#include "debug.h"
4#include "crc32.h"
5#include "sock.h"
6
7
8#define SYSCODE 0
9
10struct clist *config[LISTHASHSIZE] = {NULL};
11struct clist *ownconfig[LISTHASHSIZE] = {NULL};
12struct clist *rcconfig[LISTHASHSIZE] = {NULL};
13struct clist *skinconfig[LISTHASHSIZE] = {NULL};
14struct skin *skin = NULL;
15struct fb *fb = NULL;
16struct fb* skinfb = NULL;
17struct fb* accelfb = NULL;
18struct fb* fb1 = NULL;
19struct fb* lcdskinfb = NULL;
20struct font *font = NULL;
21struct rc *rc = NULL;
22struct dvbdev *dvbdev = NULL;
23struct channel *channel = NULL;
24struct transponder *transponder = NULL;
25struct provider *provider = NULL;
26struct sat *sat = NULL;
27struct service *service = NULL;
28struct mainbouquet *mainbouquet = NULL;
29struct mainplaylist *mainplaylist = NULL;
30struct pic *pic = NULL;
31struct rcmap *rcmap = NULL;
32struct inetwork *inetwork = NULL;
33struct stimerthread *stimerthread = NULL;
34struct rectimer *rectimer = NULL;
35struct subpage* subpage = NULL, *oldsubpage = NULL;
36struct epgscanlist* epgscanlist = NULL;
37struct screensaver* screensaver = NULL;
38struct channelcache* channelcache[CHANNELCACHEMAX] = {NULL};
39struct transpondercache* transpondercache[TRANSPONDERCACHEMAX] = {NULL};
40struct hdd* hdd = NULL;
41struct queue* queue = NULL;
42struct caservice caservice[MAXCASERVICE];
43struct channelhistory channelhistory[MAXCHANNELHISTORY];
44
45#ifdef SH4
46#include "sh4port.h"
47#endif
48
49#ifdef MIPSEL
50#include "mipselport.h"
51#endif
52
53#ifdef I386
54#include "i386port.h"
55#endif
56
57#include "ipkg.h"
58#include "queue.h"
59#include "channelcache.h"
60#include "transpondercache.h"
61#include "strconvert.h"
62#include "numinput.h"
63#include "textinput.h"
64#include "radiotext.h"
65#include "list.h"
66#include "config.h"
67#include "defaults.h"
68#include "ownconfig.h"
69#include "rcconfig.h"
70#include "skinconfig.h"
71#include "global.h"
72#include "stream.h"
73#include "dvbdev.h"
74#include "rotorcalc.h"
75#include "frontenddev.h"
76#include "dmxdev.h"
77#include "videodev.h"
78#include "audiodev.h"
79#include "cidev.h"
80#include "cadev.h"
81#ifdef CAMSUPP
82#include "ca.h"
83#endif
84#include "dvrdev.h"
85#include "cam.h"
86#include "dvb.h"
87#include "fb.h"
88#include "font.h"
89#include "rcmap.h"
90#include "rc.h"
91#include "sat.h"
92#include "transponder.h"
93#include "provider.h"
94#include "channel.h"
95#include "bouquets.h"
96#include "mainbouquets.h"
97#include "playlist.h"
98#include "mainplaylist.h"
99#include "pic.h"
100#include "filelist.h"
101#include "skinfunc.h"
102#include "skin.h"
103#include "inputhelp.h"
104#include "rcfunc.h"
105#include "listbox.h"
106#include "choicebox.h"
107#include "vfd.h"
108#include "timerthread.h"
109#include "service.h"
110#include "player.h"
111#include "dvdplayer.h"
112#include "timeshift.h"
113#include "record.h"
114#include "zap.h"
115#include "showiframe.h"
116#include "epgrecord.h"
117#include "multiepg.h"
118#include "gmultiepg.h"
119#include "epg.h"
120#include "epgscan.h"
121#include "menulist.h"
122#include "videomode.h"
123#include "inetwork.h"
124#include "keyactions.h"
125#include "scart.h"
126#include "standby.h"
127#include "dir.h"
128#include "spinner.h"
129#include "lnbconfig.h"
130#include "diseqcconfig.h"
131#include "tunerconfig.h"
132#include "epgsettings.h"
133#include "listedit.h"
134#include "channellist.h"
135#include "vfdisplay.h"
136#include "videosettings.h"
137#include "textbox.h"
138#include "autores.h"
139#include "language.h"
140#include "about.h"
141#include "serviceinfo.h"
142#include "avsettings.h"
143#include "mute.h"
144#include "volume.h"
145#include "timezone.h"
146#include "adjust.h"
147#include "skinadjust.h"
148#include "blindscanadjust.h"
149#include "moduleconfig.h"
150#include "possetup.h"
151#include "rectimer.h"
152#include "pin.h"
153#include "plugin.h"
154#include "recordpath.h"
155#include "subtitle.h"
156#include "audiotrack.h"
157#include "linkedchannel.h"
158#include "powerofftimer.h"
159#include "skinselector.h"
160#include "play.h"
161#include "satfinder.h"
162#include "menu.h"
163#include "channelbynr.h"
164#include "infobar.h"
165#include "network.h"
166#include "harddisk.h"
167#include "httpdfunc.h"
168#include "httpd.h"
169#include "download.h"
170#include "screensaver.h"
171#include "screensaveradjust.h"
172#include "scan.h"
173#include "restoredefault.h"
174#include "help.h"
175#include "httpdsettings.h"
176#include "epgsearch.h"
177#include "inadyn.h"
178#include "rguid.h"
179#include "channelhistroy.h"
180//#include "cardreader.h"
181//#include "sci.h"
182
183#define TIMECODE ""
184
185int createstartscreen()
186{
187        addscreen("<screen name=framebuffer/>", 0, 0);
188        if(skin == NULL)
189        {
190                err("can't set framebuffer skin");
191                return 1;
192        }
193        addscreen("<screen name=skinerror/>", 0, 0);
194        status.skinerr = getscreen("skinerror");
195        skin->width = skinfb->width;
196        skin->height = skinfb->height;
197        skin->iwidth = skinfb->width;
198        skin->iheight = skinfb->height;
199        skin->rwidth = skinfb->width;
200        skin->rheight = skinfb->height;
201        skin->bgcol = 0;
202        skin->transparent = 255;
203        skin->flag = 1;
204
205        return 0;
206}
207
208//exitcode: 1 power off
209//exitcode: 2 restart
210//exitcode: 3 Gui restart
211//flag: 0 do not check record
212//flag: 1 check record
213//flag: 2 check record / do write config
214//flag: 3 check record with timeout
215//flag: 4 check record with increase fixpowerofftime
216void oshutdown(int exitcode, int flag)
217{
218        debug(1000, "in");
219        struct service* servicenode = service;
220        void* threadstatus;
221        int i = 0, faststop = 0, ret = 0;
222        char* tmpstr = NULL;
223        struct skin* logo = getscreen("logo");
224
225        //check if record running
226        if((flag == 1 || flag == 2 || flag == 3 || flag == 4) && (status.recording > 0 || getrectimerbytimediff(300) != NULL))
227        {
228                if(flag == 4 && status.fixpowerofftime > 1)
229                {
230                                status.fixpowerofftime = time(NULL) + 900; //check powerofftimer again in 15min
231                                return;
232                }
233                int timeout = 0;
234                if(flag == 3 || flag == 4) timeout = 15;
235                if(textbox(_("Message"), _("Found running record\nor record is starting in next time.\nRealy shutdown ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, timeout, 1) == 2)
236                        return;
237        }
238
239        ret = servicestop(status.aktservice, 1, 0);
240        if(ret == 1) return;
241       
242        if(exitcode == 1)
243                tmpstr = getconfig("powerofflogo", NULL);
244        else if(exitcode == 2)
245                tmpstr = getconfig("restartlogo", NULL);
246        else if(exitcode == 3)
247                tmpstr = getconfig("guirestartlogo", NULL);
248               
249        if(tmpstr != NULL)
250        {
251                changepic(logo, tmpstr);
252                tmpstr = NULL;
253                drawscreen(logo, 0);
254        }
255        else
256                clearfball();
257
258        //stop all records
259        while(servicenode != NULL)
260        {
261                servicenode->recendtime = 1;
262                servicenode = servicenode->next;
263        }
264
265        faststop = getconfigint("faststop", NULL);
266
267        // Free memory, semaphores, etc. and say goodbye
268        if(faststop == 0) cleanupvfd();
269
270        tmpstr = oitoa(status.servicetype);
271        addconfig("servicetype", tmpstr);
272        free(tmpstr); tmpstr = NULL;
273
274        status.sec = 0;
275
276        if(flag != 2)
277        {
278                int epgsave = getconfigint("epgsave", NULL);
279                if((epgsave == 1 && exitcode == 3) || epgsave == 2)
280                        writeallconfig(1); //do not save epg
281                else
282                        writeallconfig(0); //save epg
283        }
284
285        if(faststop == 0)
286        {
287                //stop timer thread
288                i = 0;
289                status.timerthreadaktion = STOP;
290                while(status.timerthreadstatus != DEACTIVE)
291                {
292                        usleep(100000);
293                        i++; if(i > 20) break;
294                }
295
296                if(i > 20)
297                {
298                        err("detect hanging timer thread");
299                }
300                else
301                        pthread_join(status.timerthread, &threadstatus);
302                pthread_attr_destroy(&status.timerthreadattr);
303
304                // free timerthread struct and stop all timer sub threads
305                freetimer(0);
306
307                status.skinerr = NULL;
308                free(status.gateway);
309                free(status.dnsserver1);
310                free(status.dnsserver2);
311                free(status.boxtype);
312                free(status.httpauth);
313                free(status.bgpic);
314
315                freeservice();
316
317                freescreen();
318                freepic();
319                freefont();
320                deinitfont();
321
322                freerectimer();
323                freechannelhistory();
324                freesat();
325                freeallplaylist();
326                freemainplaylist();
327                freeallbouquet();
328                freemainbouquet();
329                freechannel(0);
330                freetransponder();
331                freeprovider();
332                freeownconfig();
333                freeepgscanlist();
334                freercconfig();
335                freeskinconfig();
336                freequeue();
337                freehdd(0);
338
339                free(status.configfile);
340                freeconfig();
341
342                freedvbdev();
343
344                closefb(fb);
345                freefb();
346
347                closerc();
348                freerc();
349                freercmap();
350                free_shutdowntimervar();
351                freeinetwork();
352        }
353        else
354                freetimer(1);
355
356        starthttpd(0);
357        startrguid(0);
358        initmutex(0);
359
360        debug(1000, "out");
361        exit(exitcode);
362}
363
364int main(int argc, char *argv[])
365{
366        debug(1000, "in");
367        int ret = 0, serviceret = 0, skincheck = 0;
368        char* tmpstr = NULL;
369        struct sigaction sa;
370        struct stimerthread *tmpthread = NULL;
371
372#ifdef SIMULATE
373        // for mem leak debug
374        setenv("MALLOC_TRACE", "/home/nit/titan/m.txt", 1);
375        mtrace();
376        status.security = 1;
377#endif
378
379        printf("[%s] copyright by %s - version %s\n", PROGNAME, COPYRIGHT, OVERSION);
380        printf("[%s] crontribut: %s\n", PROGNAME, CRONTRIBUT);
381
382        sa.sa_handler = (void *)sighandler;
383        sigemptyset(&sa.sa_mask);
384        sa.sa_flags = SA_RESTART;
385        sigaction(SIGUSR1, &sa, NULL);
386        sigaction(SIGSEGV, &sa, NULL);
387        sigaction(SIGBUS, &sa, NULL);
388        sigaction(SIGABRT, &sa, NULL);
389
390        status.rguidfd = -1;
391        status.sec = time(NULL);
392        status.mainthread = pthread_self();
393
394        if(argc > 1)
395                status.configfile = ostrcat(argv[1], "", 0, 0);
396        else
397                status.configfile = ostrcat(CONFIGFILE, "", 0, 0);
398
399        printf("[%s] using config: %s\n", PROGNAME, status.configfile);
400        ret = readconfig(status.configfile, config);
401        if(ret != 0)
402                return 100;
403        readconfig(getconfig("ownconfig", NULL), ownconfig);
404        readconfig(getconfig("rcconfig", NULL), rcconfig);
405
406        skincheck = checkskin();
407        readconfig(getconfig("skinconfig", NULL), skinconfig);
408
409        setprogress(100);
410        setdefaults();
411        setdebuglevel();
412        initmutex(1);
413        initvfd();
414
415        if(checkbox("UFS922") == 1)
416                setfanspeed(-1, 0);
417
418        ret = setvideomode(getconfig("av_videomode", NULL), 0);
419
420        ret = setpolicy(getconfig("av_policy", NULL));
421        ret = setaspect(getconfig("av_aspect", NULL));
422        ret = setcolorformat(getconfig("av_colorformat", NULL));
423        ret = setaudiosource(getconfig("av_audiosource", NULL));
424        ret = setac3(getconfig("av_ac3mode", NULL));
425        ret = setmode3d(getconfig("av_mode3d", NULL));
426        ret = setvfdbrightness(getconfigint("vfdbrightness", NULL));
427        ret = addinetworkall(NULL);
428       
429#ifndef SIMULATE
430        int skipsecurety = 0;
431        if(skipsecurety == 0)
432        {
433                if(ostrcmp(string_newline(gettimeinfo()), TIMECODE) == 1)
434                {       
435                        destroy();
436                        exit(100);
437                }
438                if(ostrcmp(string_newline(gettimeinfovar()), TIMECODE) == 1)
439                {
440                        destroy();
441                        exit(100);
442                }
443                if(checkreseller() != 0)
444                {
445                        destroy();
446                        exit(100);
447                }
448                if(getsysinfo() != SYSCODE)
449                {
450                        destroy();
451                        exit(100);
452                }
453                if(file_exist("/mnt/swapextensions/etc/.vnumber") == 1)
454                {
455                        destroy();
456                        exit(100);
457                }
458                if(checkflash() != 0)
459                {
460                        destroy();
461                        exit(100);
462                }
463                char* tmpstr2 = NULL;
464                tmpstr2 = getcpuid();
465                checkserial(tmpstr2);
466                free(tmpstr2), tmpstr2 = NULL;
467        }
468        else
469                status.security = 1;
470#endif
471
472        ret = initfont();
473        if(ret != 0)
474                return 100;
475        ret = openfont(getconfig("fontfile1", NULL));
476        if(ret != 0)
477        {
478                err("open fontfile1 font");
479                return 100;
480        }
481        openfont(getconfig("fontfile2", NULL));
482        openfont(getconfig("fontfile3", NULL));
483        openfont(getconfig("fontfile4", NULL));
484        openfont(getconfig("fontfile5", NULL));
485
486        //skin defined fonts
487        openfont(getskinconfig("fontfile1", NULL));
488        openfont(getskinconfig("fontfile2", NULL));
489        openfont(getskinconfig("fontfile3", NULL));
490        openfont(getskinconfig("fontfile4", NULL));
491        openfont(getskinconfig("fontfile5", NULL));
492
493        setvol(getconfigint("vol", NULL));
494
495        setlang(getconfig("lang", NULL));
496        initlocale(getconfig("localepath", NULL));
497
498        fb = openfb(getconfig("fbdev", NULL), 0);
499        if(fb == NULL)
500                return 100;
501        clearfball();
502        enablemanualblit();
503
504        tmpstr = getconfig("fb1dev", NULL);
505        if(tmpstr != NULL)
506                fb1 = openfb(tmpstr, 1);
507        tmpstr = NULL;
508
509        if(status.usedirectfb != 1)
510        {
511                skinfb = addfb(SKINFB, 0, getconfigint("skinfbwidth", NULL), getconfigint("skinfbheight", NULL), 4, fb->fd, fb->fb + fb->varfbsize, fb->fixfbsize);
512                if(skinfb != NULL)
513                {
514                        ret = getfbsize(0);
515                        if(ret > 0)
516                                accelfb = addfb(ACCELFB, 0, ret / 4, 1, 4, fb->fd, skinfb->fb + skinfb->varfbsize, fb->fixfbsize);
517                }
518                else
519                {
520                        debug(100, "use directfb");
521                        status.usedirectfb = 1;
522                }
523        }
524
525        if(status.usedirectfb == 1)
526        {
527                skinfb = fb;
528                ret = getfbsize(0);
529                if(ret > 0)
530                        accelfb = addfb(ACCELFB, 0, ret / 4, 1, 4, fb->fd, skinfb->fb + skinfb->varfbsize, fb->fixfbsize);
531        }
532
533        if(lcdskinfb == NULL) {
534                unsigned char *mmapfb = malloc(4 * 320 * 240);
535                /* dev=999 ist LCD Buffer */
536                lcdskinfb = addfb("lcdskinfb", 999, 320, 240, 4, -1, mmapfb, 4 * 320 * 240);
537                mmapfb = NULL;
538        }
539
540        ret = createstartscreen();
541        if(ret != 0) return 100;
542
543        //from here we can use starterror screen
544        ret = openrc();
545        if(ret != 0)
546        {
547                tmpstr = ostrcat(tmpstr, _("Error: open rc device !!"), 1, 0);
548                goto starterror;
549        }
550        ret = openrcsim();
551        if(ret != 0)
552        {
553                tmpstr = ostrcat(tmpstr, _("Error: open rcsim device !!"), 1, 0);
554                goto starterror;
555        }
556
557        if(fegetdev() < 1)
558        {
559                tmpstr = ostrcat(tmpstr, _("Error: no frontend device found !!"), 1, 0);
560                err("no frontend device found");
561                goto starterror;
562        }
563        if(dmxgetdev() < 1)
564        {
565                tmpstr = ostrcat(tmpstr, _("Error: no demux device found !!"), 1, 0);
566                err("no demux device found");
567                goto starterror;
568        }
569        if(videogetdev() < 1)
570        {
571                tmpstr = ostrcat(tmpstr, _("Error: no video device found !!"), 1, 0);
572                err("no video device found");
573                goto starterror;
574        }
575        if(audiogetdev() < 1)
576        {
577                tmpstr = ostrcat(tmpstr, _("Error: no audio device found !!"), 1, 0);
578                err("no audio device found");
579                goto starterror;
580        }
581        ret = fecreatedummy();
582        ret = cagetdev();
583        ret = cigetdev();
584        ret = dvrgetdev();
585
586        //check skin
587        if(skincheck > 0)
588        {
589
590                tmpstr = ostrcat(tmpstr, _("Error: skin not found !!"), 1, 0);
591                err("skin not found");
592                goto starterror;
593        }
594
595        ret = readsat(getconfig("satfile", NULL));
596        ret = readtransponder(getconfig("transponderfile", NULL));
597        ret = readprovider(getconfig("providerfile", NULL));
598        ret = readchannel(getconfig("channelfile", NULL));
599        ret = readtransponderencoding(getconfig("transponderencodingfile", NULL));
600
601        status.aktservice = addservice(NULL);
602        status.lastservice = addservice(NULL);
603
604        //check if startchannel defined
605        char* startchannellist = getconfig("startchannellist", NULL);
606        int startserviceid = getconfigint("startserviceid", NULL);
607        unsigned long starttransponderid = getconfiglu("starttransponderid", NULL);
608        int startservicetype = getconfigint("startservicetype", NULL);
609        if(startchannellist != NULL && startserviceid != 0)
610        {
611                if(startservicetype == 0)
612                {
613                        addconfig("channellist", startchannellist);
614                        addconfigint("serviceid", startserviceid);
615                        addconfiglu("transponderid", starttransponderid);
616                }
617                else
618                {
619                        addconfig("rchannellist", startchannellist);
620                        addconfigint("rserviceid", startserviceid);
621                        addconfiglu("rtransponderid", starttransponderid);
622                }
623                addconfigint("servicetype", startservicetype);
624        }
625
626        //tune to channel
627        if(status.servicetype == 0)
628                serviceret = servicestart(getchannel(getconfigint("serviceid", NULL), getconfiglu("transponderid", NULL)), getconfig("channellist", NULL), NULL, 0);
629        else
630                serviceret = servicestart(getchannel(getconfigint("rserviceid", NULL), getconfiglu("rtransponderid", NULL)), getconfig("rchannellist", NULL),  NULL, 0);
631
632        ret = readscreen(getconfig("skinfile", NULL), 0, 0);
633        ret = readmainbouquet(getconfig("bouquetfile", NULL));
634        ret = readallbouquet();
635        ret = readmainplaylist(getconfig("playlistfile", NULL));
636        ret = readallplaylist();
637        ret = readrcmap(getconfig("rcmapfile", NULL));
638        ret = readepgscanlist(getconfig("epgchannelfile", NULL));
639        ret = settimezone(getconfig("timezone", NULL));
640
641        //start timer thread
642        status.timerthreadaktion = START;
643        pthread_attr_init(&status.timerthreadattr);
644        pthread_attr_setstacksize(&status.timerthreadattr, 50000);
645        pthread_attr_setdetachstate(&status.timerthreadattr, PTHREAD_CREATE_JOINABLE);
646        ret = pthread_create(&status.timerthread, &status.timerthreadattr, timerthreadfunc, NULL);
647        if(ret)
648        {
649                tmpstr = ostrcat(tmpstr, _("Error: create timer thread !!"), 1, 0);
650                err("create timer thread");
651                goto starterror;
652        }
653
654        addtimer(&checkdate, START, 2000, -1, NULL, NULL, NULL);
655        if((checkbox("ATEMIO500") == 0) && (checkbox("ATEMIO510") == 0))
656                addtimer(&updatevfd, START, 1000, -1, NULL, NULL, NULL);
657
658        //first wizzard
659        if(getconfigint("nofirstwizzard", NULL) == 0)
660        {
661                if(file_exist("/tmp/.scart"))
662                {
663                        setvideomode("pal", 0);
664                        changefbresolution("pal");
665                }
666
667                autoresolution();
668firstwizzardstep1:
669                if(checkbox("ATEMIO510") == 0)
670                {
671                        status.updatevfd = PAUSE;
672                        screenavsettings(1);
673                        //this screen can reload the skin (on language change)
674                        //all skin changes before here than are deleted
675                        if(screenlanguage(2) == 2) return 100;
676                        screentunerconfig();
677                        screennetwork_adapter();
678                        writevfd("Setting OK ?");
679                        if(textbox(_("First Wizzard"), _("Settings OK ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0) == 2)
680                        {
681                                goto firstwizzardstep1;
682                        }
683                }
684                char* msg = NULL;
685                msg = command("cat /etc/imageinfo");
686                textbox(_("Info"), _(msg), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 680, 30, 0);
687                free(msg), msg = NULL;
688//              getserial();
689               
690                writevfd("");
691                status.updatevfd = START;
692                drawscreen(skin, 0);
693                addconfig("nofirstwizzard", "1");
694        }
695        else
696        {
697                // workaround, remove bootlogo on startup
698                drawscreen(skin, 0);
699
700                //check servicestart
701                if(serviceret != 21) // no message if startchannel empty
702                        servicecheckret(serviceret, 0);
703        }
704
705        //start spinner thread
706        addtimer(&checkspinner, START, 2000, -1, NULL, NULL, NULL);
707        //start auto shutdown thread
708        addtimer(&checkshutdowntimer, START, 10000, -1, NULL, NULL, NULL);
709
710        status.lastrcaction = time(NULL);
711        ret = loadplugin();
712        setosdtransparent(getskinconfigint("osdtransparent", NULL));
713        ret = readrectimer(getconfig("rectimerfile", NULL));
714        ret = setsaturation(getconfigint("vs_saturation", NULL));
715        ret = setbrightness(getconfigint("vs_brightness", NULL));
716        ret = setcontrast(getconfigint("vs_contrast", NULL));
717        ret = settint(getconfigint("vs_tint", NULL));
718       
719        //set skinentrys locked
720#ifndef SIMULATE
721        if(status.security == 0) setskinnodeslocked(1);
722#endif
723
724        //start epg thread
725        status.epgthread = addtimer(&epgthreadfunc, START, 1000, -1, NULL, NULL, NULL);
726        //start record timer thread
727        addtimer(&checkrectimer, START, 10000, -1, NULL, NULL, NULL);
728        //check if cam socket connected
729        addtimer(&checkcam, START, 3000, -1, NULL, NULL, NULL);
730        //start stream server
731        tmpthread = addtimer(&streamthreadfunc, START, 10000, -1, NULL, NULL, NULL);
732        if(tmpthread != NULL)
733        {
734                tmpthread->flag = setbit(tmpthread->flag, 0);
735                tmpthread = NULL;
736        }
737        //start epg scanlist
738        status.epgscanlistthread = addtimer(&epgscanlistthread, START, 1000, 1, NULL, NULL, NULL);
739        //get pmt
740        addtimer(&dvbgetpmtthread, START, 2000, -1, NULL, NULL, NULL);
741        //check hdd
742        status.addhddall = addtimer(&addhddall, START, 6000, -1, NULL, NULL, NULL);
743        //check net
744        addtimer(&addinetworkall, START, 15000, -1, NULL, NULL, NULL);
745#ifdef CAMSUPP
746        //start ca slot watching threads
747        castart();
748#endif
749        //check skin nodes locked
750        addtimer(&ckeckskinnodeslockedthread, START, 1000, 1, NULL, NULL, NULL);
751        //check if box starts from a record
752        addtimer(&checkboxstartthread, START, 1000, 1, NULL, NULL, NULL);
753        //check net
754        addtimer(&ckeckkillnetthread, START, 1000, 1, NULL, NULL, NULL);
755
756        //start webserver
757        starthttpd(1);
758       
759        //start rguid
760        startrguid(1);
761
762        //init the player
763        playerinit(argc, argv);
764
765        system(getconfig("skriptaftertv", NULL));
766
767        //must called direct befor screeninfobar
768        if(getconfigint("saverun", NULL) == 1)
769        {
770                if(sigsetjmp(status.longjumpbuf, 1) != 0)
771                {
772                        err("set sigsegjump");
773                }
774        }
775       
776        //check free space in /var
777        if(getfreespace("/var") / 1024 < 5) //5kb
778        {
779                textbox(_("Message"), _("Free space in /var to little!\nThis can make problems!"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 7, 0);
780        }
781
782        //wait a little for epg to show in infobar
783        sleep(1);
784        screeninfobar();
785
786        //for testign screens
787        //screenmanualscan();
788        //screeninputhelp();
789        //screendownload("test", "www.orf.at", NULL, 80, "test.html", 0);
790        //screenrectimer();
791        //screenepgsettings();
792        //screenlnb("1");
793        //screendiseqc("1");
794        //screenlanguage();
795        //screenvideosettings();
796        //screenskinselect();
797        //screenrectimer();
798        //screennetwork_adapter(2);
799        //screenpin();
800        //screenchannellist();
801        //recordstart(channel, RECDIRECT);
802        //mc_main();
803        //screenmc_videoplayer();
804        //screenserviceinfo();
805        //screentunerconfig();
806        //screenvfdisplay();
807        //screenavsettings(1);
808        //screenadjust();
809        //subtitlestart();
810
811        debug(1000, "out");
812        oshutdown(1, 1);
813        return 0;
814
815starterror:
816        addscreen("<screen hspace=5 vspace=5 type=textbox name=starterror posx=center posy=center bordersize=2 bordercol=#ffffff fontsize=30 fontcol=#ffffff width=600 height=150/>", 0, 0);
817        struct skin *starterror = getscreen("starterror");
818        if(tmpstr == NULL)
819                tmpstr = ostrcat(tmpstr, _("Unknown Error."), 1, 0);
820        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
821        tmpstr = ostrcat(tmpstr, _("Automatic stop in 5 seconds."), 1, 0);
822        changetext(starterror, _(tmpstr));
823        drawscreen(starterror, 0);
824        sleep(5);
825        free(tmpstr);
826        return 100;
827}
Note: See TracBrowser for help on using the repository browser.