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

Last change on this file since 15385 was 15385, checked in by gost, 8 years ago

[lcdpearl] adjustable

  • Property svn:executable set to *
File size: 9.5 KB
Line 
1#include "../../titan/struct.h"
2#include "../../titan/debug.h"
3#include "../../titan/header.h"
4
5char pluginname[] = "LCD Pearl";
6char plugindesc[] = "Extensions";
7char pluginpic[] = "%pluginpath%/lcdpearl1/lcdpearl.png";
8
9int pluginaktiv = 0;
10//struct skin* pluginmenu = NULL;
11//int pluginflag = 1; //don't show the plugin in pluginmanager
12
13struct stimerthread* LCD_Pearl1thread = NULL;
14int firststart = 0;
15
16void LCD_start_lcd4linux()
17{
18        int count = 0;
19        char* startlcd = ostrcat(getconfig("pluginpath", NULL), "/lcdpearl1/start.sh", 0, 0);
20
21        if(LCD_Pearl1thread == NULL)
22                return;
23        while (LCD_Pearl1thread->aktion != STOP && system("ps | grep -v grep | grep lcd4linux ") != 0) {
24                system(startlcd);
25                sleep(6);
26                count ++;
27                if(LCD_Pearl1thread == NULL)
28                        break;
29                if(count == 101) {
30                        textbox(_("Message"), _("ERROR cant start LCD driver"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 5, 0);
31                        LCD_Pearl1thread->aktion = STOP;
32                }
33        }
34        free(startlcd);startlcd=NULL;   
35}
36
37void LCD_Pearl1_thread()
38{
39       
40        char* tmpstr = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL, *timemerk = NULL, *sendermerk = NULL, *recmerk = NULL;
41       
42        struct skin* LCD_Pearl1 = getscreen("LCD_Pearl1");
43        struct skin* akttime = getscreennode(LCD_Pearl1, "akttime");
44       
45        struct skin* LCD_Play = getscreen("LCD_Play");
46        struct skin* akttimeplay = getscreennode(LCD_Play, "akttime");
47        struct skin* sprogress = getscreennode(LCD_Play, "progress");
48        struct skin* stitle = getscreennode(LCD_Play, "title1");
49        struct skin* spos = getscreennode(LCD_Play, "pos");
50        struct skin* slen = getscreennode(LCD_Play, "len");
51        struct skin* sreverse = getscreennode(LCD_Play, "reverse");
52       
53        struct skin* LCD_MC_Menu = getscreen("LCD_MC_Menu");
54        struct skin* akttimemc1 = getscreennode(LCD_MC_Menu, "akttime");
55               
56        int put = 0, typemerk = 0, type = 0;
57        int standby = 0;
58        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);
59        char* startlcd = ostrcat(getconfig("pluginpath", NULL), "/lcdpearl1/start.sh", 0, 0);
60
61        unsigned long long int pos = 0, len = 0, reverse = 0;
62        int playertype = 0;
63        int loopcount = 0;
64       
65        if(firststart == 1)
66                sleep(8);
67        firststart = 0;
68        status.write_png = 0;
69        if(ostrcmp(getconfig("write_fb_to_png", NULL), "yes") == 0)
70                status.write_png = 1;
71       
72        while (LCD_Pearl1thread->aktion != STOP) {
73
74                tmpstr = gettime(NULL, "%H:%M");
75               
76                // TV Programm läuft
77                if(status.infobaraktiv == 1)
78                {
79                        if(ostrcmp(getconfig("write_fb_to_png", NULL), "yes") == 0)
80                                status.write_png = 1;
81                        tmpstr2 = getaktchannelname(NULL);
82                        tmpstr3 = getrec(NULL, NULL);
83                        type = 1;
84                }
85                // Aufzeichnung wird abgespielt
86                else if(status.playspeed != 0 || status.play != 0 || status.pause != 0)
87                {
88                        status.write_png = 0;
89                        loopcount++ ;
90                        type = 2;
91                }
92                // Sonstige Anzeigen
93                else
94                {
95                        if(ostrcmp(getconfig("write_fb_to_png", NULL), "yes") == 0)
96                                status.write_png = 1;
97                        type = 999;
98                }
99               
100                if(typemerk != type)
101                {
102                        put = 1;
103                        typemerk = type;
104                        free(sendermerk);sendermerk=NULL;
105                        free(recmerk);recmerk=NULL;
106                        loopcount = 0;
107                }
108                else
109                        put = 0;
110
111                if(status.security == 1)
112                {
113                        if(status.standby == 1 && standby == 0)
114                        {
115                                system("killall lcd4linux");
116                                standby = 1;
117                        }
118                        if(status.standby == 0 && standby == 1)
119                        {
120                                system(startlcd);
121                                standby = 0;
122                        }
123               
124                        if(standby == 0)
125                        {
126                                if(ostrcmp(tmpstr, timemerk) != 0)
127                                {
128                                        free(timemerk);timemerk=NULL;
129                                        timemerk = ostrcat(tmpstr, "", 0, 0);
130                                        put = 1;
131                                } 
132                                if(type == 1)
133                                {
134                                        if(ostrcmp(tmpstr2, sendermerk) != 0)
135                                        {
136                                                free(sendermerk);sendermerk=NULL;
137                                                sendermerk = ostrcat(tmpstr2, "", 0, 0);
138                                                put = 1;
139                                        } 
140                                        if(tmpstr3 == NULL && recmerk != NULL)
141                                        {
142                                                put = 1;
143                                                free(recmerk);recmerk=NULL;
144                                        }
145                                        else if(tmpstr3 != NULL && recmerk == NULL)
146                                        {
147                                                free(recmerk);recmerk=NULL;
148                                                recmerk = ostrcat(tmpstr3, "", 0, 0);
149                                                put = 1;
150                                        }
151                                }
152                                else if(type == 2)
153                                {
154                                        if(loopcount >= 15)
155                                        {
156                                                put = 1;
157                                                loopcount = 0;
158                                        }
159                                }       
160                               
161                                if(put == 1)
162                                {
163                                        if(type == 1)
164                                        {
165                                                changetext(akttime, tmpstr);
166                                                drawscreen(LCD_Pearl1, 0);
167
168                                                //system(fbgrab);
169                                                //system("mv /tmp/.titanlcd1.png /tmp/titanlcd.png");
170                               
171                                                //system("/var/bin/fbgrab -f /tmp/titanlcd.raw -w 320 -h 240 -b 32 -i /tmp/titanlcd.png > /dev/null");
172                                                //system("xloadimage /tmp/titanlcd.png > /dev/null &");
173                                               
174                                        }
175                                        else if(type == 2)
176                                        {
177                                                if(status.mcaktiv == 1)
178                                                        playertype = 0;
179                                                else   
180                                                        playertype = getconfigint("playertype", NULL);
181                       
182                                                if(playertype == 1)
183                                                {
184                                                        unsigned long long int startpos = 0;
185                                                        playergetinfots(&len, &startpos, NULL, &pos, NULL);
186                                                        len = len / 90000;
187                                                        pos = (pos - startpos) / 90000;
188                                                }
189                                                else
190                                                {
191                                                        pos = playergetpts() / 90000;
192                                                        len = playergetlength();
193                                                }
194                                                if(pos < 0) pos = 0;
195                                                reverse = len - pos;
196                                                if(len == 0)
197                                                        sprogress->progresssize = 0;
198                                                else
199                                                        sprogress->progresssize = pos * 100 / len;
200                                               
201                                                tmpstr2 = convert_timesec(pos);
202                                                changetext(spos, tmpstr2);
203                                                free(tmpstr2); tmpstr2 = NULL;
204
205                                                tmpstr2 = convert_timesec(len);
206                                                changetext(slen, tmpstr2);
207                                                free(tmpstr2); tmpstr2 = NULL;
208
209                                                tmpstr2 = convert_timesec(reverse);
210                                                changetext(sreverse, tmpstr2);
211                                                free(tmpstr2); tmpstr2 = NULL;
212                                               
213                                                changetext(akttimeplay, tmpstr);
214                                                changetext(stitle, basename(status.playfile));
215                                                drawscreen(LCD_Play, 0);
216
217                                        //else if(type == 999 && status.mcaktiv == 1)
218                                        //else if(type == 999) 
219                                        //{
220                                                //changetext(akttimemc1, tmpstr);
221                                                //drawscreen(LCD_MC_Menu, 3);
222                                        //}
223                                        }
224                                }
225                        }
226                }
227                free(tmpstr); tmpstr = NULL;
228                free(tmpstr2); tmpstr2 = NULL;
229                free(tmpstr3); tmpstr3 = NULL;
230                //sleep(1);
231                usleep(500000);
232        }
233        free(timemerk);timemerk=NULL;
234        free(sendermerk);sendermerk=NULL;
235        free(recmerk);recmerk=NULL;
236        free(fbgrab);fbgrab=NULL;
237        free(startlcd);startlcd=NULL;
238        addconfig("lcd_pearl1_plugin_running", "no");
239        LCD_Pearl1thread = NULL;
240        drawscreen(LCD_Pearl1, 0);
241        status.write_png = 0;
242        return;
243}
244
245void LCD_Pearl1_main()
246{
247        if(LCD_Pearl1thread == NULL)
248        {
249                char* tmpstr = NULL;
250                tmpstr = ostrcat("cp ", getconfig("pluginpath", NULL), 0, 0);
251                tmpstr = ostrcat(tmpstr, "/lcdpearl1/start.png", 1, 0);
252                tmpstr = ostrcat(tmpstr, " /tmp/titanlcd.png", 1, 0);
253                system(tmpstr);
254                free(tmpstr); tmpstr=NULL;
255                //textbox(_("Message"), _("LCD Pearl1 starts ..."), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 5, 0);
256                addconfig("lcd_pearl1_plugin_running", "yes");
257                LCD_Pearl1thread = addtimer(&LCD_Pearl1_thread, START, 10000, 1, NULL, NULL, NULL);
258                addtimer(&LCD_start_lcd4linux, START, 10000, 1, NULL, NULL, NULL);
259                sleep(1);
260        }
261        else
262        {
263                //if (textbox(_("Message"), _("Stop LCD Pearl1 ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("exit", NULL), NULL, 0, NULL, 0, 600, 200, 5, 0) != 2);
264                //{
265                        LCD_Pearl1thread->aktion = STOP;
266                        system("echo ende > /tmp/titanlcd.png");
267                        sleep(1);
268                        system("killall lcd4linux");
269                //}
270        }
271}       
272                       
273//wird beim laden ausgefuehrt
274void init(void)
275{
276        char* tmpstr = NULL;
277        pluginaktiv = 1;
278        firststart = 1;
279       
280        tmpstr = ostrcat(getconfig("pluginpath", NULL), "/lcdpearl1/skin.xml", 0, 0);
281        readscreen(tmpstr, 116, 1);
282        free(tmpstr); tmpstr = NULL;
283        debug(10, "LCD Pearl loadet !!!");
284        tmpstr = getconfig("lcd_pearl1_plugin_running", NULL);
285        if(ostrcmp(tmpstr, "yes") == 0)
286                LCD_Pearl1_main();
287        tmpstr=NULL;
288}
289
290//wird beim entladen ausgefuehrt
291void deinit(void)
292{
293        delmarkedscreen(116);
294        pluginaktiv = 0;
295        system("echo ende > /tmp/titanlcd.png");
296        sleep(1);
297        system("killall lcd4linux");
298        debug(10, "LCD Pearl1 unloadet !!!");
299}
300
301
302//wird in der Pluginverwaltung bzw Menue ausfeguehrt
303void start(void)
304{
305        struct skin* pearl1_main = getscreen("pearl1_main");
306        struct skin* listbox = getscreennode(pearl1_main, "listbox");
307        struct skin* allmenu = getscreennode(pearl1_main, "allmenu");
308        struct skin* b3 = getscreennode(pearl1_main, "b3");
309        struct skin* tmp = NULL;
310       
311        int rcret = 0;
312        int startstop = 0;
313        int restart = 0;
314       
315  addchoicebox(allmenu, "no", _("nein"));
316  addchoicebox(allmenu, "yes", _("ja"));
317        setchoiceboxselection(allmenu, getconfig("write_fb_to_png", NULL));
318       
319        if(LCD_Pearl1thread != NULL)
320                changetext(b3, "STOP");
321        else
322                changetext(b3, "START");
323               
324        drawscreen(pearl1_main, 0);
325        addscreenrc(pearl1_main, listbox);
326        tmp = listbox->select;
327       
328        while(1)
329        {
330                addscreenrc(pearl1_main, tmp);
331                rcret = waitrc(pearl1_main, 0, 0);
332                tmp = listbox->select;
333               
334                if(rcret == getrcconfigint("rcexit", NULL))
335                        break;
336                if(rcret == getrcconfigint("rcgreen", NULL))
337                {
338                        addconfig("write_fb_to_png", allmenu->ret);
339                        restart = 1;
340                        break;
341                }
342                       
343                if(rcret == getrcconfigint("rcblue", NULL))
344                {
345                        startstop = 1;
346                        break;
347                }
348        }
349        delownerrc(pearl1_main);
350        clearscreen(pearl1_main);
351       
352        if(LCD_Pearl1thread != NULL && restart == 1)
353        {
354                LCD_Pearl1thread->aktion = STOP;
355                sleep(2);
356                LCD_Pearl1thread = addtimer(&LCD_Pearl1_thread, START, 10000, 1, NULL, NULL, NULL);
357                sleep(1);
358                return;
359        }
360        if(startstop == 1)
361        {
362                if(LCD_Pearl1thread != NULL)
363                {
364                        addconfig("lcd_pearl1_plugin_running", "no");
365                        LCD_Pearl1thread->aktion = STOP;
366                        sleep(1);
367                        system("killall lcd4linux");
368                        debug(10, "LCD Pearl1 unloadet !!!");   
369                        sleep(1);
370                }
371                else {
372                        addconfig("lcd_pearl1_plugin_running", "yes");
373                        LCD_Pearl1thread = addtimer(&LCD_Pearl1_thread, START, 10000, 1, NULL, NULL, NULL);
374                        addtimer(&LCD_start_lcd4linux, START, 10000, 1, NULL, NULL, NULL);
375                        sleep(1);
376                }
377        }
378        return;
379}
380
Note: See TracBrowser for help on using the repository browser.