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

Last change on this file since 14027 was 14027, checked in by gost, 12 years ago

[lcdpearl] extension

  • Property svn:executable set to *
File size: 7.4 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;
15int draw = 0;
16
17#include "lcdpearl_grep.h"
18
19void LCD_start_lcd4linux()
20{
21        int count = 0;
22        char* startlcd = ostrcat(getconfig("pluginpath", NULL), "/lcdpearl1/start.sh", 0, 0);
23        while (draw == 0 && LCD_Pearl1thread != NULL)
24        {
25                sleep(1);
26        }
27        sleep(2);
28        if(LCD_Pearl1thread == NULL)
29                return;
30        while (LCD_Pearl1thread->aktion != STOP && system("ps | grep -v grep | grep lcd4linux ") != 0) {
31                system(startlcd);
32                sleep(6);
33                count ++;
34                if(LCD_Pearl1thread == NULL)
35                        break;
36                if(count == 101) {
37                        textbox(_("Message"), _("ERROR cant start LCD driver"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 5, 0);
38                        LCD_Pearl1thread->aktion = STOP;
39                }
40        }
41        free(startlcd);startlcd=NULL;   
42}
43
44void LCD_Pearl1_thread()
45{
46       
47        char* tmpstr = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL, *timemerk = NULL, *sendermerk = NULL, *recmerk = NULL;
48       
49        struct skin* LCD_Pearl1 = getscreen("LCD_Pearl1");
50        struct skin* akttime = getscreennode(LCD_Pearl1, "akttime");
51       
52        struct skin* LCD_Play = getscreen("LCD_Play");
53        struct skin* akttimeplay = getscreennode(LCD_Play, "akttime");
54        struct skin* sprogress = getscreennode(LCD_Play, "progress");
55        struct skin* title = getscreennode(LCD_Play, "title");
56        struct skin* spos = getscreennode(LCD_Play, "pos");
57        struct skin* slen = getscreennode(LCD_Play, "len");
58        struct skin* sreverse = getscreennode(LCD_Play, "reverse");
59       
60        struct skin* LCD_MC_Dummy = getscreen("LCD_MC_Menu");
61        struct skin* akttimemc1 = getscreennode(LCD_MC_Menu, "akttime");
62               
63        int put = 0, typemerk = 0, type = 0;
64        int standby = 0;
65        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);
66        char* startlcd = ostrcat(getconfig("pluginpath", NULL), "/lcdpearl1/start.sh", 0, 0);
67
68        unsigned long long int pos = 0, len = 0, reverse = 0;
69        int playertype = 0;
70        int loopcount = 0;
71       
72        if(firststart == 1)
73                sleep(8);
74        addtimer(&lcd_raw_event, START, 10000, 1, NULL, NULL, NULL);   
75        firststart = 0;
76        draw = 0;
77       
78        while (LCD_Pearl1thread->aktion != STOP) {
79
80                tmpstr = gettime(NULL, "%H:%M");
81               
82                if(status.infobaraktiv == 1)
83                {
84                        tmpstr2 = getaktchannelname(NULL);
85                        tmpstr3 = getrec(NULL, NULL);
86                        type = 1;
87                }
88                else if(status.playspeed != 0 || status.play != 0 || status.pause != 0)
89                {
90                        loopcount++ ;
91                        type = 2;
92                }
93                else
94                {
95                        type = 999;
96                }
97               
98                if(typemerk != type)
99                {
100                        put = 1;
101                        typemerk = type;
102                        free(sendermerk);sendermerk=NULL;
103                        free(recmerk);recmerk=NULL;
104                        loopcount = 0;
105                }
106                else
107                        put = 0;
108               
109                if(draw == 0)
110                        put = 1;
111               
112                if(status.security == 1)
113                {
114                        if(status.standby == 1 && standby == 0)
115                        {
116                                system("killall lcd4linux");
117                                standby = 1;
118                        }
119                        if(status.standby == 0 && standby == 1)
120                        {
121                                system(startlcd);
122                                standby = 0;
123                        }
124               
125                        if(standby == 0)
126                        {
127                                if(ostrcmp(tmpstr, timemerk) != 0)
128                                {
129                                        free(timemerk);timemerk=NULL;
130                                        timemerk = ostrcat(tmpstr, "", 0, 0);
131                                        put = 1;
132                                }
133                                if(type == 1)
134                                {
135                                        if(ostrcmp(tmpstr2, sendermerk) != 0)
136                                        {
137                                                free(sendermerk);sendermerk=NULL;
138                                                sendermerk = ostrcat(tmpstr2, "", 0, 0);
139                                                put = 1;
140                                        }
141                                        if(tmpstr3 == NULL && recmerk != NULL)
142                                        {
143                                                put = 1;
144                                                free(recmerk);recmerk=NULL;
145                                        }
146                                        else if(tmpstr3 != NULL && recmerk == NULL)
147                                        {
148                                                free(recmerk);recmerk=NULL;
149                                                recmerk = ostrcat(tmpstr3, "", 0, 0);
150                                                put = 1;
151                                        }
152                                }
153                                else if(type == 2)
154                                {
155                                        if(loopcount >= 15)
156                                        {
157                                                put = 1;
158                                                loopcount = 0;
159                                        }
160                                }       
161                               
162                                if(put == 1)
163                                {
164                                        if(type == 1)
165                                        {
166                                                changetext(akttime, tmpstr);
167                                                if(drawscreen(LCD_Pearl1, 0) == 0)
168                                                        draw = 1;
169                                                else
170                                                        draw = 0;
171                                                //system(fbgrab);
172                                                //system("mv /tmp/.titanlcd1.png /tmp/titanlcd.png");
173                               
174                                                //system("/var/bin/fbgrab -f /tmp/titanlcd.raw -w 320 -h 240 -b 32 -i /tmp/titanlcd.png > /dev/null");
175                                                //system("xloadimage /tmp/titanlcd.png > /dev/null &");
176                                               
177                                        }
178                                        else if(type == 2)
179                                        {
180                                                if(status.mcaktiv == 1)
181                                                        playertype = 0;
182                                                else   
183                                                        playertype = getconfigint("playertype", NULL);
184                       
185                                                if(playertype == 1)
186                                                {
187                                                        unsigned long long int startpos = 0;
188                                                        playergetinfots(&len, &startpos, NULL, &pos, NULL);
189                                                        len = len / 90000;
190                                                        pos = (pos - startpos) / 90000;
191                                                }
192                                                else
193                                                {
194                                                        pos = playergetpts() / 90000;
195                                                        len = playergetlength();
196                                                }
197                                                if(pos < 0) pos = 0;
198                                                reverse = len - pos;
199                                                if(len == 0)
200                                                        sprogress->progresssize = 0;
201                                                else
202                                                        sprogress->progresssize = pos * 100 / len;
203                                               
204                                                tmpstr2 = convert_timesec(pos);
205                                                changetext(spos, tmpstr2);
206                                                free(tmpstr2); tmpstr2 = NULL;
207
208                                                tmpstr2 = convert_timesec(len);
209                                                changetext(slen, tmpstr2);
210                                                free(tmpstr2); tmpstr2 = NULL;
211
212                                                tmpstr2 = convert_timesec(reverse);
213                                                changetext(sreverse, tmpstr2);
214                                                free(tmpstr2); tmpstr2 = NULL;
215                                               
216                                                changetext(akttimeplay, tmpstr);
217                                                changetext(title, basename(status.playfile));
218                                                if (drawscreen(LCD_Play, 0) == 0)
219                                                        draw = 1;
220                                                else
221                                                        draw = 0;       
222                                        }
223                                        else if(type == 999 && status.mcaktiv == 1)
224                                        {
225                                                changetext(akttimemc1, tmpstr);
226                                                drawscreen(LCD_MC_Menu, 0);
227                                        }
228                                }
229                        }
230                }
231                free(tmpstr); tmpstr = NULL;
232                free(tmpstr2); tmpstr2 = NULL;
233                free(tmpstr3); tmpstr3 = NULL;
234                sleep(1);
235        }
236        free(timemerk);timemerk=NULL;
237        free(sendermerk);sendermerk=NULL;
238        free(recmerk);recmerk=NULL;
239        free(fbgrab);fbgrab=NULL;
240        free(startlcd);startlcd=NULL;
241        addconfig("lcd_pearl1_plugin_running", "no");
242        LCD_Pearl1thread = NULL;
243        drawscreen(LCD_Pearl1, 0);
244        return;
245}
246
247void LCD_Pearl1_main()
248{
249        if(LCD_Pearl1thread == NULL)
250        {
251                textbox(_("Message"), _("LCD Pearl1 starts ..."), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 5, 0);
252                addconfig("lcd_pearl1_plugin_running", "yes");
253                LCD_Pearl1thread = addtimer(&LCD_Pearl1_thread, START, 10000, 1, NULL, NULL, NULL);
254                addtimer(&LCD_start_lcd4linux, START, 10000, 1, NULL, NULL, NULL);
255                sleep(1);
256        }
257        else
258        {
259                if (textbox(_("Message"), _("Stop LCD Pearl1 ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("exit", NULL), NULL, 0, NULL, 0, 600, 200, 5, 0) != 2);
260                {
261                        LCD_Pearl1thread->aktion = STOP;
262                        system("echo ende > /tmp/titanlcd.png");
263                        sleep(1);
264                        system("killall lcd4linux");
265                }
266        }
267}       
268                       
269//wird beim laden ausgefuehrt
270void init(void)
271{
272        char* tmpstr = NULL;
273        pluginaktiv = 1;
274        firststart = 1;
275       
276        tmpstr = ostrcat(getconfig("pluginpath", NULL), "/lcdpearl1/skin.xml", 0, 0);
277        readscreen(tmpstr, 116, 1);
278        free(tmpstr); tmpstr = NULL;
279        debug(10, "LCD Pearl loadet !!!");
280        tmpstr = getconfig("lcd_pearl1_plugin_running", NULL);
281        if(ostrcmp(tmpstr, "yes") == 0)
282                LCD_Pearl1_main();
283        tmpstr=NULL;
284}
285
286//wird beim entladen ausgefuehrt
287void deinit(void)
288{
289        delmarkedscreen(116);
290        pluginaktiv = 0;
291        system("echo ende > /tmp/titanlcd.png");
292        sleep(1);
293        system("killall lcd4linux");
294        debug(10, "LCD Pearl1 unloadet !!!");
295}
296
297
298//wird in der Pluginverwaltung bzw Menue ausfeguehrt
299void start(void)
300{
301        LCD_Pearl1_main();
302}
Note: See TracBrowser for help on using the repository browser.