From: GetAway Date: Sun, 29 Apr 2018 16:39:57 +0000 (+0200) Subject: logomask 1.4: run as daemon; fix help screen hd51 X-Git-Url: https://git.webhop.me/?a=commitdiff_plain;h=f2b2716092295caa5469174fbb2b4992b0057535;p=logomask.git logomask 1.4: run as daemon; fix help screen hd51 - add pid file logomask.pid - add some keys for hd51 - fix rc input for hd51 - fix new param timing.infobar_tv - change logomask.sh script --- diff --git a/io.c b/io.c index 81c3d8b..79d14b8 100644 --- a/io.c +++ b/io.c @@ -50,7 +50,11 @@ int RCKeyPressed(void) { if(read(rc, &ev, sizeof(ev)) == sizeof(ev)) { +#if HAVE_ARM_HARDWARE + if(ev.value && ev.code) +#else if(ev.value) +#endif { rccode=ev.code; return 1; @@ -71,7 +75,6 @@ int GetRCCode(void) } rv=rccode; // while(RCKeyPressed()); - return rv; } diff --git a/logomask.c b/logomask.c index eb12efd..af6f9fb 100644 --- a/logomask.c +++ b/logomask.c @@ -1,5 +1,37 @@ +/* + * logomask - d-box2 linux project + * + * (C) 2009 by SnowHead + * (C) 2018 by GetAway + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/* + Options: + -d Debugmode: Don't fork, additionally generate debugging messages + + Signal handling: + + SIGUSR1: Toggles debug mode +*/ + #include #include +#include #include "logomask.h" #include "gfx.h" @@ -8,7 +40,7 @@ extern int FSIZE_MED; extern int FSIZE_SMALL; -#define CL_VERSION "1.3" +#define CL_VERSION "1.4" #define MAX_MASK 16 // TRANSP, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, TURQUOISE, @@ -32,6 +64,26 @@ char tstr[BUFSIZE]; int xpos=0,ypos=0,sdat=0,big=0,secs=1; int wxh, wyh; gpixel lpix; +int run=1, debug=0; + +void signal_handler(int signum) +{ + switch (signum) { + case SIGUSR1: + debug = !debug; + printf("\ndebug = %d\n", debug); + break; + case SIGTERM: + printf("[logomask] Received signal %d, quitting\n", signum); + run=0; + break; + default: + printf("[logomask] Received signal %d, quitting\n", signum); + unlink(PID_FILE); + exit(2); + break; + } +} void TrimString(char *strg) { @@ -79,7 +131,8 @@ int rv=-1; { rv=-1; } -// printf("%s\n%s=%s -> %d\n",tstr,entry,cfptr,rv); + if (debug) + printf("%s\n%s=%s -> %d\n",tstr,entry,cfptr,rv); } fclose(nfh); } @@ -146,7 +199,6 @@ void yscal(int *yp, int *yw, int syp, int syw, double scal) * logomask Main ******************************************************************************/ - int main (int argc, char **argv) { int i,j,m,found,loop=1,mask=0,test=0,pmode=0,lmode=0,pmode43=1,lmode43=1,mchanged=1,mchanged43=1,cchanged=2,mwait,tv; @@ -154,16 +206,71 @@ int main (int argc, char **argv) int xp[4][MAX_MASK][8],yp[4][MAX_MASK][8],xw[4][MAX_MASK][8],yw[4][MAX_MASK][8],valid[MAX_MASK],xxp,xxw,yyp,yyw,nmsk=0; gpixel tp, cmc, mc[MAX_MASK]; double sc131=1.16666666667, sc132=1.193, sc23=1.33333333333; - FILE *fh; + FILE *fh, *f, *pidfp; char *cpt1,*cpt2; + int opt; - if(argc==2 && strstr(argv[1],"test")!=NULL) - { - test=1; + while ((opt = getopt(argc, argv, "dt")) > 0) { + switch (opt) { + case 'd': + debug = 1; + break; + case 't': + test = 1; + break; + default: + fprintf(stderr, + "Usage: %s [-d]\n" + "-d : debug mode\n" + "-t : test mode\n" + "\n", argv[0]); + return EXIT_FAILURE; + } + } + signal(SIGTERM, signal_handler); + signal(SIGUSR1, signal_handler); + + f = fopen(PID_FILE, "r"); + int existing_pid; + if (f != 0) { + fscanf(f, "%d", &existing_pid); + fprintf(stderr, + "Running instance with PID %d.\n" + "If not, delete %s.\n", existing_pid, PID_FILE); + exit(EXIT_FAILURE); + } + if (!debug) { + pid_t pid = fork(); + switch (pid) { + case -1: /* can't fork */ + perror("fork"); + return -1; + case 0: /* child, process becomes a daemon */ + if (setsid() == -1) { + perror("setsid"); + return -1; + } + chdir("/"); + break; + default: /* parent returns to calling process */ + f = fopen(PID_FILE, "w"); + fprintf(f, "%d\n", pid); + fclose(f); + return 0; + } } +#if HAVE_COOL_HARDWARE + printf("logomask Version %s for Coolstream\n",CL_VERSION); +#elif HAVE_ARM_HARDWARE + printf("logomask Version %s for Armbox\n",CL_VERSION); +#else printf("logomask Version %s\n",CL_VERSION); - if((mwait=Read_Neutrino_Cfg("timing.infobar"))<0) - mwait=6; +#endif + if((mwait=Read_Neutrino_Cfg("timing.infobar_tv"))<0) { + /* for compatibility */ + if((mwait=Read_Neutrino_Cfg("timing.infobar"))<0) + mwait=6; + } if((tv=Read_Neutrino_Cfg("video_Format"))<0) tv=3; --tv; @@ -279,6 +386,8 @@ int main (int argc, char **argv) } fclose(fh); } + if (debug) + printf("[logomask] get pmode43 = %d\n", pmode43); } system("pzapit -gi > /tmp/logomask.chan"); @@ -405,7 +514,8 @@ int main (int argc, char **argv) } if(mask) { -//printf("[logomask] pmode=%d,pmode43=%d\n",pmode,pmode43); + if (debug) + printf("[logomask] aspectratio = %d, pmode43 = %d\n", pmode, pmode43); for(m=0; m5) - { - if(access("/tmp/.logomask_kill",0)!=-1) - { - loop=0; - } - } +// if(++loop>5) +// { + loop=run; +/// } } } @@ -465,8 +573,8 @@ int main (int argc, char **argv) free(lbb); munmap(lfb, fix_screeninfo.smem_len); close(fb); - remove("/tmp/.logomask_kill"); remove("/tmp/logomask.*"); - return 0; + unlink(PID_FILE); + exit(0); } diff --git a/logomask.h b/logomask.h index de2a810..e735cfe 100644 --- a/logomask.h +++ b/logomask.h @@ -30,6 +30,7 @@ #define NCF_FILE CONFIGDIR "/neutrino.conf" #define CFG_FILE CONFIGDIR "/logomask.conf" +#define PID_FILE "/tmp/logomask.pid" #define BUFSIZE 4096 @@ -60,7 +61,7 @@ #define KEY_POWER 116 #define KEY_HELP 138 #define KEY_HOME 102 -#define KEY_EXIT 174 +#define KEY_EXIT 174 #define KEY_SETUP 141 #define KEY_PAGEUP 104 #define KEY_PAGEDOWN 109 @@ -72,25 +73,42 @@ #define KEY_TVR 0x179 #define KEY_TTX 0x184 -#define KEY_COOL 0x1A1 -#define KEY_FAV 0x16C -#define KEY_EPG 0x16D -#define KEY_VF 0x175 +#define KEY_FAVORITES 0x16c +#define KEY_EPG 0x16d -#define KEY_SAT 0x17D #define KEY_SKIPP 0x197 -#define KEY_SKIPM 0x19C -#define KEY_TS 0x167 +#define KEY_SKIPM 0x19c #define KEY_AUDIO 0x188 -#define KEY_REW 0x0A8 -#define KEY_FWD 0x09F +#define KEY_REW 0x0a8 #define KEY_HOLD 0x077 -#define KEY_REC 0x0A7 -#define KEY_STOP 0x080 -#define KEY_PLAY 0x0CF +#define KEY_REC 0x0a7 +#define KEY_STOP 128 +#define KEY_PLAY 207 + +#ifdef HAVE_COOL_HARDWARE +#define KEY_FWD 0x09f +#endif +#ifdef HAVE_ARM_HARDWARE +#define KEY_FWD 0x0d0 +#endif + +// Coolstream +#define KEY_COOL 0x1a1 +#define KEY_VF 0x175 +#define KEY_SAT 0x17d +#define KEY_TS 0x167 + +// AX/Mutant +#define KEY_PROGRAM 0x16a /* TIME */ +#define KEY_RADIO 0x181 +#define KEY_VIDEO 0x189 /* LIST */ +#define KEY_BOOKMARKS 156 /* CONTEXT */ +#define KEY_NEXTSONG 163 +#define KEY_PLAYPAUSE 164 +#define KEY_PREVIOUSSONG 165 //devs -int fb, rc; +int fb, rc, pid; //framebuffer stuff diff --git a/logomask.sh b/logomask.sh index e5d948d..7b67c9a 100755 --- a/logomask.sh +++ b/logomask.sh @@ -1,8 +1,11 @@ #!/bin/sh -if pidof logomask > /dev/null; then - touch /tmp/.logomask_kill +PIDFILE=/tmp/logomask.pid + +if [ -e $PIDFILE ]; then + echo "stopping logomask" + read PID < $PIDFILE && kill -TERM $PID else - logomask & + logomask fi exit 0 diff --git a/logoset.c b/logoset.c index 001e163..fd1ad9b 100644 --- a/logoset.c +++ b/logoset.c @@ -1,3 +1,25 @@ +/* + * logoset - d-box2 linux project + * + * (C) 2009 by SnowHead + * (C) 2018 by GetAway + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + #include #include #include @@ -17,7 +39,7 @@ static unsigned char AST_FILE[] = "/var/etc/init.d/S9L_logomask"; static unsigned char AST_TEXT[] = "#!/bin/sh\n(sleep 20; logomask) &\n"; unsigned char FONT[64] = FONTDIR "/pakenham.ttf"; -#define CL_VERSION "1.3a" +#define CL_VERSION "1.4a" #define MAX_MASK 16 // TRANSP, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, TURQUOISE, @@ -95,6 +117,18 @@ int rv=-1; return rv; } +int read_pid (char *pidfile) +{ + FILE *fd; + int pid; + + if (!(fd=fopen(pidfile,"r"))) + return 0; + fscanf(fd,"%d", &pid); + fclose(fd); + return pid; +} + /****************************************************************************** * logoset Main ******************************************************************************/ @@ -174,7 +208,13 @@ int main (int argc, char **argv) system("pzapit -vm43 1"); } - system("touch /tmp/.logomask_kill"); + int pid; + if ((pid = read_pid(PID_FILE))) { + if (kill(pid, SIGTERM) == 0) + printf("[logoset] logomask stopped\n"); + else + printf("[logoset] could not stop logomask PID %i\n", pid); + } fb = open(FB_DEVICE, O_RDWR); @@ -689,7 +729,8 @@ int main (int argc, char **argv) } } break; - + + case KEY_SKIPP: case KEY_PAGEUP: if(nmsk>1) { @@ -714,7 +755,8 @@ int main (int argc, char **argv) lpix.lpixel=mc[amsk].lpixel; } break; - + + case KEY_SKIPM: case KEY_PAGEDOWN: if(nmsk>1) { @@ -740,7 +782,8 @@ int main (int argc, char **argv) } break; - case KEY_FAV: + case KEY_VIDEO: + case KEY_FAVORITES: if(amsk>=0) { changed=1; @@ -852,13 +895,25 @@ int main (int argc, char **argv) if(nmsk) RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+abs(xw[amsk][pmode]), yp[amsk][pmode]+yw[amsk][pmode], GRID, make_color((xw[amsk][pmode]>0)?((kmode)?LBLUE:LYELLOW):LRED, &tp)); RenderString("Maskensteuerung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); - RenderString("Blau : Umschalten auf Positionseinstellung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); - RenderString("Gelb : Umschalten auf Größeneinstellung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); - RenderString("Grün : Maske hinzufügen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); - RenderString("Rot : Maske löschen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); - RenderString("PgUp : nächste Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); - RenderString("PgDn : vorherige Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); - RenderString("Fav : Maske aktivieren/deaktivieren", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("Blau : Umschalten auf Positionseinstellung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("Gelb : Umschalten auf Größeneinstellung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("Grün : Maske hinzufügen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("Rot : Maske löschen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); +#if HAVE_COOL_HARDWARE + RenderString("PgUp : nächste Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("PgDn : vorherige Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("Fav : Maske aktivieren/deaktivieren", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); +#elif HAVE_ARM_HARDWARE + RenderString("> : nächste Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("< : vorherige Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("List : Maske aktivieren/deaktivieren", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); +#else +//FIXME! maybe other HW other Keys + RenderString("PgUp : nächste Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("PgDn : vorherige Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); + RenderString("Fav : Maske aktivieren/deaktivieren", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); +#endif + RenderString("Maskenfarbe", tsx, tsy+=(2*tdy), txw, LEFT, tsz, tcol); RenderString("Mute : Maskenfarbe aus Vorgabe auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); RenderString("1,4,7 : Farbton Rot erhöhen, auf Mitte setzen, verringern", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); @@ -871,7 +926,11 @@ int main (int argc, char **argv) RenderString("0 : Autostart von logomask ausschalten", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); else RenderString("0 : Autostart von logomask einschalten", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); +#if HAVE_COOL_HARDWARE RenderString("? : Hilfetext ein/ausschalten", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); +#elif HAVE_ARM_HARDWARE + RenderString("Help : Hilfetext ein/ausschalten", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); +#endif RenderString("Exit : Abbrechen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); RenderString("OK : Speichern und Beenden", tsx, tsy+=tdy, txw, LEFT, tsz, tcol); } @@ -945,9 +1004,8 @@ int main (int argc, char **argv) close(fb); CloseRC(); - remove("/tmp/.logomask_kill"); remove("/tmp/logomaskset.*"); - system("logomask &"); + system("logomask"); return 0; } diff --git a/logoset.h b/logoset.h index 7cd0136..724e531 100644 --- a/logoset.h +++ b/logoset.h @@ -32,6 +32,7 @@ #ifndef FONTDIR #define FONTDIR "/share/fonts" #endif +#define PID_FILE "/tmp/logomask.pid" #define BUFSIZE 4096 @@ -62,7 +63,7 @@ #define KEY_POWER 116 #define KEY_HELP 138 #define KEY_HOME 102 -#define KEY_EXIT 174 +#define KEY_EXIT 174 #define KEY_SETUP 141 #define KEY_PAGEUP 104 #define KEY_PAGEDOWN 109 @@ -74,22 +75,39 @@ #define KEY_TVR 0x179 #define KEY_TTX 0x184 -#define KEY_COOL 0x1A1 -#define KEY_FAV 0x16C -#define KEY_EPG 0x16D -#define KEY_VF 0x175 +#define KEY_FAVORITES 0x16c +#define KEY_EPG 0x16d -#define KEY_SAT 0x17D #define KEY_SKIPP 0x197 -#define KEY_SKIPM 0x19C -#define KEY_TS 0x167 +#define KEY_SKIPM 0x19c #define KEY_AUDIO 0x188 -#define KEY_REW 0x0A8 -#define KEY_FWD 0x09F +#define KEY_REW 0x0a8 #define KEY_HOLD 0x077 -#define KEY_REC 0x0A7 -#define KEY_STOP 0x080 -#define KEY_PLAY 0x0CF +#define KEY_REC 0x0a7 +#define KEY_STOP 128 +#define KEY_PLAY 207 + +#ifdef HAVE_COOL_HARDWARE +#define KEY_FWD 0x09f +#endif +#ifdef HAVE_ARM_HARDWARE +#define KEY_FWD 0x0d0 +#endif + +// Coolstream +#define KEY_COOL 0x1a1 +#define KEY_VF 0x175 +#define KEY_SAT 0x17d +#define KEY_TS 0x167 + +// AX/Mutant +#define KEY_PROGRAM 0x16a /* TIME */ +#define KEY_RADIO 0x181 +#define KEY_VIDEO 0x189 /* LIST */ +#define KEY_BOOKMARKS 156 /* CONTEXT */ +#define KEY_NEXTSONG 163 +#define KEY_PLAYPAUSE 164 +#define KEY_PREVIOUSSONG 165 //freetype stuff diff --git a/starter_logomask.c b/starter_logomask.c index ea3a613..852e6da 100644 --- a/starter_logomask.c +++ b/starter_logomask.c @@ -1,7 +1,5 @@ /* - * $Id$ - * - * shellexec - d-box2 linux project + * logomask - d-box2 linux project * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by