source: titan/titan/titan.c @ 18302

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

[titan] add unicable assistent

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