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

Last change on this file since 16169 was 16169, checked in by gost, 9 years ago

[lcdpearl] zip code for weather forecast

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