source: titan/plugins/lcdpearl1/lcdpearl1.c @ 24694

Last change on this file since 24694 was 24694, checked in by obi, 7 years ago

fix lscsamsung / pearl

  • Property svn:executable set to *
File size: 16.2 KB
Line 
1#include "../../titan/struct.h"
2#include "../../titan/debug.h"
3#include "../../titan/header.h"
4
5#include "lcd_weather.h"
6
7char pluginname[] = "LCD Pearl";
8char plugindesc[] = "Extensions";
9char pluginpic[] = "%pluginpath%/lcdpearl1/lcdpearl.png";
10
11int pluginaktiv = 0;
12int pluginversion = PLUGINVERSION;
13//struct skin* pluginmenu = NULL;
14//int pluginflag = 1; //don't show the plugin in pluginmanager
15
16struct stimerthread* LCD_Pearl1thread = NULL;
17
18int firststart = 0;
19
20void weather_getline(FILE* fd, char* fileline)
21{
22        fgets(fileline, 256, fd);
23        if(fileline[0] == '#' || fileline[0] == '\n')
24                return;
25        if(fileline[strlen(fileline) - 1] == '\n')
26                fileline[strlen(fileline) - 1] = '\0';
27        if(fileline[strlen(fileline) - 1] == '\r')
28                fileline[strlen(fileline) - 1] = '\0';
29}
30
31void LCD_start_lcd4linux()
32{
33        int count = 0;
34        char* startlcd = createpluginpath("/lcdpearl1/start.sh", 0);
35
36        if(LCD_Pearl1thread == NULL)
37                return;
38        while (LCD_Pearl1thread->aktion != STOP && system("ps | grep -v grep | grep lcd4linux ") != 0) {
39                system(startlcd);
40                sleep(6);
41                count ++;
42                if(LCD_Pearl1thread == NULL)
43                        break;
44                if(count == 101) {
45                        textbox(_("Message"), _("ERROR cant start LCD driver"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 5, 0);
46                        LCD_Pearl1thread->aktion = STOP;
47                }
48        }
49        free(startlcd); startlcd=NULL; 
50}
51
52void LCD_Pearl1_thread()
53{
54       
55        struct skin* LCD_Pearl1 = NULL;
56        struct skin* LCD_Pearl1_Standby = NULL;
57        struct skin* day0_t = NULL;
58        struct skin* day0_i = NULL;
59        struct skin* day1_t = NULL;
60        struct skin* day1_i = NULL;
61        struct skin* day2_t = NULL;
62        struct skin* day2_i = NULL;
63        struct skin* day3_t = NULL;
64        struct skin* day3_i = NULL;
65        struct skin* akttime = NULL;
66        struct skin* akttime_Standby = NULL;
67       
68       
69        char* tmpstr = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL, *timemerk = NULL, *sendermerk = NULL, *recmerk = NULL;
70        FILE *fd = NULL;
71        char *fileline = NULL;
72        int weatherwrite = 999;
73        int weatherref = 0;
74       
75        if(ostrcmp(getconfig("lcd_pearl1_plugin_wetter", NULL), "yes") == 0)
76        {
77                LCD_Pearl1 = getscreen("LCD_Pearl1_Wetter");
78                day0_t = getscreennode(LCD_Pearl1, "day0_t");
79                day0_i = getscreennode(LCD_Pearl1, "day0_i");
80                day1_t = getscreennode(LCD_Pearl1, "day1_t");
81                day1_i = getscreennode(LCD_Pearl1, "day1_i");
82                day2_t = getscreennode(LCD_Pearl1, "day2_t");
83                day2_i = getscreennode(LCD_Pearl1, "day2_i");
84                day3_t = getscreennode(LCD_Pearl1, "day3_t");
85                day3_i = getscreennode(LCD_Pearl1, "day3_i");
86                if(file_exist("/tmp/lcdweather"))
87                        system("rm /tmp/lcdweather");
88                weatherwrite = 0;
89        }
90        else
91                LCD_Pearl1 = getscreen("LCD_Pearl1");   
92        akttime = getscreennode(LCD_Pearl1, "akttime");
93       
94        struct skin* LCD_Play = getscreen("LCD_Play");
95        struct skin* akttimeplay = getscreennode(LCD_Play, "akttime");
96        struct skin* sprogress = getscreennode(LCD_Play, "progress");
97        struct skin* stitle = getscreennode(LCD_Play, "title1");
98        struct skin* spos = getscreennode(LCD_Play, "pos");
99        struct skin* slen = getscreennode(LCD_Play, "len");
100        struct skin* sreverse = getscreennode(LCD_Play, "reverse");
101       
102        //struct skin* LCD_MC_Menu = getscreen("LCD_MC_Menu");
103        //struct skin* akttimemc1 = getscreennode(LCD_MC_Menu, "akttime");
104       
105                       
106        if(ostrcmp(getconfig("lcd_pearl1_plugin_standby", NULL), "yes") == 0)
107        {
108                LCD_Pearl1_Standby = getscreen("LCD_Pearl1_Standby");
109                akttime_Standby = getscreennode(LCD_Pearl1_Standby, "akttime");
110        }
111               
112        int put = 0, typemerk = 0, type = 0;
113        int standby = 0;
114       
115        char* fbgrab = createpluginpath("/lcdpearl1/fbgrab", 0);
116        fbgrab = ostrcat(fbgrab, " -f /tmp/titanlcd.raw -w 320 -h 240 -b 32 -i /tmp/.titanlcd1.png > /dev/null", 1, 0);
117       
118        char* startlcd = createpluginpath("/lcdpearl1/start.sh", 0);
119
120        unsigned long long int pos = 0, len = 0, reverse = 0;
121        int playertype = 0;
122        int loopcount = 0;
123       
124        if(firststart == 1)
125                sleep(8);
126        firststart = 0;
127        status.write_png = 0;
128        if(ostrcmp(getconfig("write_fb_to_png", NULL), "yes") == 0)
129                status.write_png = 1;
130       
131        while (LCD_Pearl1thread->aktion != STOP) {
132
133                tmpstr = gettime(NULL, "%H:%M");
134               
135                // TV Programm läuft
136                if(status.infobaraktiv == 1)
137                {
138                        if(ostrcmp(getconfig("write_fb_to_png", NULL), "yes") == 0)
139                                status.write_png = 1;
140                        tmpstr2 = getaktchannelname(NULL);
141                        tmpstr3 = getrec(NULL, NULL);
142                        type = 1;
143                }
144                // Aufzeichnung wird abgespielt
145                else if(status.playspeed != 0 || status.play != 0 || status.pause != 0)
146                {
147                        status.write_png = 0;
148                        loopcount++ ;
149                        type = 2;
150                }
151                // Sonstige Anzeigen
152                else
153                {
154                        if(ostrcmp(getconfig("write_fb_to_png", NULL), "yes") == 0)
155                                status.write_png = 1;
156                        type = 999;
157                }
158               
159                if(typemerk != type)
160                {
161                        put = 1;
162                        typemerk = type;
163                        free(sendermerk);sendermerk=NULL;
164                        free(recmerk);recmerk=NULL;
165                        loopcount = 0;
166                }
167                else
168                        put = 0;
169
170                if(status.security == 1)
171                {
172                        if(status.standby > 0 && standby == 0)
173                        {
174                                if(ostrcmp(getconfig("lcd_pearl1_plugin_standby", NULL), "yes") == 0)
175                                        standby = 2;
176                                else {
177                                        system("killall lcd4linux");
178                                        standby = 1;
179                                }
180                        }
181                        if(status.standby == 0 && standby > 0)
182                        {
183                                if(standby == 1)
184                                        system(startlcd);
185                                standby = 0;
186                                put = 1;
187                        }
188
189                        if(weatherthread == NULL && weatherwrite == 0)
190                        {
191                                if(file_exist("/tmp/lcdweather"))
192                                        put = 1;
193                        }                       
194                       
195                        if(ostrcmp(tmpstr, timemerk) != 0)
196                        {
197                                free(timemerk);timemerk=NULL;
198                                timemerk = ostrcat(tmpstr, "", 0, 0);
199                                put = 1;
200                        }               
201
202                        if(standby == 0)
203                        {
204                                if(type == 1)
205                                {
206                                        if(ostrcmp(tmpstr2, sendermerk) != 0)
207                                        {
208                                                free(sendermerk);sendermerk=NULL;
209                                                sendermerk = ostrcat(tmpstr2, "", 0, 0);
210                                                put = 1;
211                                        } 
212                                        if(tmpstr3 == NULL && recmerk != NULL)
213                                        {
214                                                put = 1;
215                                                free(recmerk);recmerk=NULL;
216                                        }
217                                        else if(tmpstr3 != NULL && recmerk == NULL)
218                                        {
219                                                free(recmerk);recmerk=NULL;
220                                                recmerk = ostrcat(tmpstr3, "", 0, 0);
221                                                put = 1;
222                                        }
223                                }
224                                else if(type == 2)
225                                {
226                                        if(loopcount >= 15)
227                                        {
228                                                put = 1;
229                                                loopcount = 0;
230                                        }
231                                }       
232                               
233                                if(put == 1)
234                                {
235                                        if(type == 1)
236                                        {
237                                                // Wettervorhersage
238                                                if(ostrcmp(getconfig("lcd_pearl1_plugin_wetter", NULL), "yes") == 0)
239                                                {
240                                                        if(weatherwrite == 0)
241                                                        {
242                                                                if(weatherthread == NULL)
243                                                                {
244                                                                        if(!file_exist("/tmp/lcdweather"))
245                                                                                weatherthread = addtimer(&lcd_writeweather, START, 10000, 1, NULL, NULL, NULL);
246                                                                        else
247                                                                        {
248                                                                                fileline = malloc(256);
249                                                                                if(fileline != NULL)
250                                                                                {
251                                                                                        fd = fopen("/tmp/lcdweather", "r");
252                                                                                        if(fd != NULL)
253                                                                                        {
254                                                                                                weather_getline(fd, fileline);weather_getline(fd, fileline);weather_getline(fd, fileline);
255                                                                                                weather_getline(fd, fileline);
256                                                                                                changetext(day0_t, fileline);
257                                                                                                weather_getline(fd, fileline);
258                                                                                                weather_getline(fd, fileline);
259                                                                                                changepic(day0_i, fileline);
260                                                                                               
261                                                                                                weather_getline(fd, fileline);weather_getline(fd, fileline);
262                                                                                                weather_getline(fd, fileline);
263                                                                                                changetext(day1_t, fileline);
264                                                                                                weather_getline(fd, fileline);
265                                                                                                weather_getline(fd, fileline);
266                                                                                                changepic(day1_i, fileline);
267                                                                                               
268                                                                                                weather_getline(fd, fileline);weather_getline(fd, fileline);
269                                                                                                weather_getline(fd, fileline);
270                                                                                                changetext(day2_t, fileline);
271                                                                                                weather_getline(fd, fileline);
272                                                                                                weather_getline(fd, fileline);
273                                                                                                changepic(day2_i, fileline);
274                                                                                               
275                                                                                                weather_getline(fd, fileline);weather_getline(fd, fileline);
276                                                                                                weather_getline(fd, fileline);
277                                                                                                changetext(day3_t, fileline);
278                                                                                                weather_getline(fd, fileline);
279                                                                                                weather_getline(fd, fileline);
280                                                                                                changepic(day3_i, fileline);
281                                                                                                fclose(fd);
282                                                                                        }
283                                                                                        free(fileline); fileline=NULL;
284                                                                                }
285                                                                                weatherwrite = 1;
286                                                                        }                                                               
287                                                                }
288                                                        }               
289                                                }
290                                               
291                                                changetext(akttime, tmpstr);
292                                                drawscreen(LCD_Pearl1, 0, 0);
293
294                                                //system(fbgrab);
295                                                //system("mv /tmp/.titanlcd1.png /tmp/titanlcd.png");
296                               
297                                                //system("/var/bin/fbgrab -f /tmp/titanlcd.raw -w 320 -h 240 -b 32 -i /tmp/titanlcd.png > /dev/null");
298                                                //system("xloadimage /tmp/titanlcd.png > /dev/null &");
299                                               
300                                        }
301                                        else if(type == 2)
302                                        {
303                                                if(status.mcaktiv == 1)
304                                                        playertype = 0;
305                                                else   
306                                                        playertype = getconfigint("playertype", NULL);
307                       
308                                                if(playertype == 1)
309                                                {
310                                                        unsigned long long int startpos = 0;
311                                                        playergetinfots(&len, &startpos, NULL, &pos, NULL, 0);
312                                                        len = len / 90000;
313                                                        pos = (pos - startpos) / 90000;
314                                                }
315                                                else
316                                                {
317                                                        pos = playergetpts() / 90000;
318                                                        len = playergetlength();
319                                                }
320                                                if(pos < 0) pos = 0;
321                                                reverse = len - pos;
322                                                if(len == 0)
323                                                        sprogress->progresssize = 0;
324                                                else
325                                                        sprogress->progresssize = pos * 100 / len;
326                                               
327                                                tmpstr2 = convert_timesec(pos);
328                                                changetext(spos, tmpstr2);
329                                                free(tmpstr2); tmpstr2 = NULL;
330
331                                                tmpstr2 = convert_timesec(len);
332                                                changetext(slen, tmpstr2);
333                                                free(tmpstr2); tmpstr2 = NULL;
334
335                                                tmpstr2 = convert_timesec(reverse);
336                                                changetext(sreverse, tmpstr2);
337                                                free(tmpstr2); tmpstr2 = NULL;
338                                               
339                                                changetext(akttimeplay, tmpstr);
340                                                changetext(stitle, basename(status.playfile));
341                                                drawscreen(LCD_Play, 0, 0);
342
343                                        //else if(type == 999 && status.mcaktiv == 1)
344                                        //else if(type == 999) 
345                                        //{
346                                                //changetext(akttimemc1, tmpstr);
347                                                //drawscreen(LCD_MC_Menu, 0, 3);
348                                        //}
349                                        }
350                                }
351                        }
352                        else 
353                        {
354                                if(standby == 2)
355                                {       
356                                        if(put == 1)
357                                        {       
358                                                changetext(akttime_Standby, tmpstr);
359                                                drawscreen(LCD_Pearl1_Standby, 0, 0);
360                                                put = 0;
361                                        }
362                                }
363                        }
364                }
365                free(tmpstr); tmpstr = NULL;
366                free(tmpstr2); tmpstr2 = NULL;
367                free(tmpstr3); tmpstr3 = NULL;
368
369                do
370                {
371                        //sleep(1);
372                        usleep(500000);
373                }while ( status.aktservice->type == TMPOTHER ); //virtual zap
374               
375                if(ostrcmp(getconfig("lcd_pearl1_plugin_wetter", NULL), "yes") == 0)
376                {
377                        weatherref = weatherref + 1;
378                        if(weatherref == 7200)
379                        {
380                                weatherwrite = 0;
381                                system("rm /tmp/lcdweather");
382                                weatherref = 0;
383                        }
384                }
385
386        }
387        free(timemerk);timemerk=NULL;
388        free(sendermerk);sendermerk=NULL;
389        free(recmerk);recmerk=NULL;
390        free(fbgrab);fbgrab=NULL;
391        free(startlcd);startlcd=NULL;
392        addconfig("lcd_pearl1_plugin_running", "no");
393        LCD_Pearl1thread = NULL;
394        drawscreen(LCD_Pearl1, 0, 0);
395        status.write_png = 0;
396        return;
397}
398
399void LCD_Pearl1_main()
400{
401        if(LCD_Pearl1thread == NULL)
402        {
403                char* tmpstr = NULL;
404               
405                tmpstr = createpluginpath("/lcdpearl1/start.png", 0);
406                tmpstr = ostrcat("cp ", tmpstr, 0, 1);
407                tmpstr = ostrcat(tmpstr, " /tmp/titanlcd.png", 1, 0);
408               
409                system(tmpstr);
410                free(tmpstr); tmpstr=NULL;
411                //textbox(_("Message"), _("LCD Pearl1 starts ..."), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 5, 0);
412                addconfig("lcd_pearl1_plugin_running", "yes");
413                LCD_Pearl1thread = addtimer(&LCD_Pearl1_thread, START, 10000, 1, NULL, NULL, NULL);
414                addtimer(&LCD_start_lcd4linux, START, 10000, 1, NULL, NULL, NULL);
415                sleep(1);
416        }
417        else
418        {
419                //if (textbox(_("Message"), _("Stop LCD Pearl1 ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("exit", NULL), NULL, 0, NULL, 0, 600, 200, 5, 0) != 2);
420                //{
421                        LCD_Pearl1thread->aktion = STOP;
422                        system("echo ende > /tmp/titanlcd.png");
423                        sleep(1);
424                        system("killall lcd4linux");
425                //}
426        }
427}       
428                       
429//wird beim laden ausgefuehrt
430void init(void)
431{
432        char* tmpstr = NULL;
433        pluginaktiv = 1;
434        firststart = 1;
435
436        tmpstr = createpluginpath("/lcdpearl1/skin2.xml", 0);
437               
438        if(!file_exist(tmpstr))
439        {
440                free(tmpstr); tmpstr = NULL;
441                tmpstr = createpluginpath("/lcdpearl1/skin.xml", 0);
442        }
443
444        printf("use skin: %s\n", tmpstr);
445
446        readscreen(tmpstr, 116, 1);
447        free(tmpstr); tmpstr = NULL;
448        debug(10, "LCD Pearl loadet !!!");
449        tmpstr = getconfig("lcd_pearl1_plugin_running", NULL);
450        if(ostrcmp(tmpstr, "yes") == 0)
451                LCD_Pearl1_main();
452        tmpstr=NULL;
453}
454
455//wird beim entladen ausgefuehrt
456void deinit(void)
457{
458        delmarkedscreen(116);
459        pluginaktiv = 0;
460        system("echo ende > /tmp/titanlcd.png");
461        sleep(1);
462        system("killall lcd4linux");
463        debug(10, "LCD Pearl1 unloadet !!!");
464}
465
466
467//wird in der Pluginverwaltung bzw Menue ausfeguehrt
468void start(void)
469{
470        struct skin* pearl1_main = getscreen("pearl1_main");
471        struct skin* listbox = getscreennode(pearl1_main, "listbox");
472        struct skin* allmenu = getscreennode(pearl1_main, "allmenu");
473        struct skin* aktstandby = getscreennode(pearl1_main, "aktstandby");
474        struct skin* wettervor = getscreennode(pearl1_main, "wettervor");
475        struct skin* wettervorort = getscreennode(pearl1_main, "wettervorort");
476        //struct skin* wettervorplz = getscreennode(pearl1_main, "wettervorplz");
477        //struct skin* wettervorland = getscreennode(pearl1_main, "wettervorland");
478        struct skin* b3 = getscreennode(pearl1_main, "b3");
479        struct skin* tmp = NULL;
480       
481        int rcret = 0;
482        int startstop = 0;
483        int restart = 0;
484       
485  if(getconfig("lcd_pearl1_plugin_wetter", NULL) == NULL || ostrcmp(getconfig("lcd_pearl1_plugin_wetter", NULL), "no")  == 0)
486  {
487        wettervorort->hidden = YES;
488        //wettervorplz->hidden = YES;
489        //wettervorland->hidden = YES;
490  }
491   
492  addchoicebox(allmenu, "no", _("nein"));
493  addchoicebox(allmenu, "yes", _("ja"));
494        setchoiceboxselection(allmenu, getconfig("write_fb_to_png", NULL));
495       
496        addchoicebox(aktstandby, "no", _("nein"));
497  addchoicebox(aktstandby, "yes", _("ja"));
498        setchoiceboxselection(aktstandby, getconfig("lcd_pearl1_plugin_standby", NULL));
499       
500        addchoicebox(wettervor, "no", _("nein"));
501  addchoicebox(wettervor, "yes", _("ja"));
502        setchoiceboxselection(wettervor, getconfig("lcd_pearl1_plugin_wetter", NULL));
503       
504        //changemask(wettervorplz, "0000");
505        //if(getconfig("lcd_pearl1_plugin_wetterplz", NULL) == NULL)
506        //      changeinput(wettervorplz, "10407");
507        //else
508        //      changeinput(wettervorplz, getconfig("lcd_pearl1_plugin_wetterplz", NULL));
509               
510        //changemask(wettervorland, "abcdefghijklmnopqrstuvwxyz");
511        //if(getconfig("lcd_pearl1_plugin_wetterland", NULL) == NULL)
512        //      changeinput(wettervorland, "Germany");
513        //else
514        //      changeinput(wettervorland, getconfig("lcd_pearl1_plugin_wetterland", NULL));
515               
516        changemask(wettervorort, "abcdefghijklmnopqrstuvwxyz");
517        if(getconfig("lcd_pearl1_plugin_wetterort", NULL) == NULL)
518                changeinput(wettervorort, "Berlin        ");
519        else
520                changeinput(wettervorort, getconfig("lcd_pearl1_plugin_wetterort", NULL));
521               
522       
523        if(LCD_Pearl1thread != NULL)
524                changetext(b3, "STOP");
525        else
526                changetext(b3, "START");
527               
528        drawscreen(pearl1_main, 0, 0);
529        addscreenrc(pearl1_main, listbox);
530        tmp = listbox->select;
531       
532        while(1)
533        {
534                addscreenrc(pearl1_main, tmp);
535                rcret = waitrc(pearl1_main, 0, 0);
536                tmp = listbox->select;
537               
538                if((rcret == getrcconfigint("rcleft", NULL) || rcret == getrcconfigint("rcright", NULL)) && listbox->select != NULL && ostrcmp(listbox->select->name, "wettervor") == 0)
539                {
540                        if(ostrcmp(wettervor->ret, "yes") == 0)
541                        {
542                                wettervorort->hidden = NO;
543                                //wettervorplz->hidden = NO;
544                        //wettervorland->hidden = NO;
545                        } else {
546                                wettervorort->hidden = YES;
547                                //wettervorplz->hidden = YES;
548                        //wettervorland->hidden = YES;
549                }
550                       
551                        drawscreen(pearl1_main, 0, 0);
552                }
553                                       
554                if(rcret == getrcconfigint("rcexit", NULL))
555                        break;
556                if(rcret == getrcconfigint("rcgreen", NULL))
557                {
558                        addconfig("write_fb_to_png", allmenu->ret);
559                        addconfig("lcd_pearl1_plugin_standby", aktstandby->ret);
560                        addconfig("lcd_pearl1_plugin_wetter", wettervor->ret);
561                        addconfig("lcd_pearl1_plugin_wetterort", wettervorort->ret);
562                        //addconfig("lcd_pearl1_plugin_wetterplz", wettervorplz->ret);
563                        //addconfig("lcd_pearl1_plugin_wetterland", wettervorland->ret);
564                        restart = 1;
565                        break;
566                }
567                       
568                if(rcret == getrcconfigint("rcblue", NULL))
569                {
570                        startstop = 1;
571                        break;
572                }
573        }
574        delownerrc(pearl1_main);
575        clearscreen(pearl1_main);
576       
577        if(LCD_Pearl1thread != NULL && restart == 1)
578        {
579                LCD_Pearl1thread->aktion = STOP;
580                sleep(2);
581                LCD_Pearl1thread = addtimer(&LCD_Pearl1_thread, START, 10000, 1, NULL, NULL, NULL);
582                sleep(1);
583                return;
584        }
585        if(startstop == 1)
586        {
587                if(LCD_Pearl1thread != NULL)
588                {
589                        addconfig("lcd_pearl1_plugin_running", "no");
590                        LCD_Pearl1thread->aktion = STOP;
591                        sleep(1);
592                        system("killall lcd4linux");
593                        debug(10, "LCD Pearl1 unloadet !!!");   
594                        sleep(1);
595                }
596                else {
597                        addconfig("lcd_pearl1_plugin_running", "yes");
598                        firststart = 1;
599                        LCD_Pearl1_main();
600                        //LCD_Pearl1thread = addtimer(&LCD_Pearl1_thread, START, 10000, 1, NULL, NULL, NULL);
601                        //addtimer(&LCD_start_lcd4linux, START, 10000, 1, NULL, NULL, NULL);
602                        //sleep(1);
603                }
604        }
605}
Note: See TracBrowser for help on using the repository browser.