]> git.webhop.me Git - logomask.git/commitdiff
logomask 1.4: run as daemon; fix help screen hd51 master
authorGetAway <get-away@t-online.de>
Sun, 29 Apr 2018 16:39:57 +0000 (18:39 +0200)
committerGetAway <get-away@t-online.de>
Sun, 29 Apr 2018 16:39:57 +0000 (18:39 +0200)
 - 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

io.c
logomask.c
logomask.h
logomask.sh
logoset.c
logoset.h
starter_logomask.c

diff --git a/io.c b/io.c
index 81c3d8b29f3fdaf3e15c0763ddca1feffccefe93..79d14b878dfa49b7e582df3f5ae61831bf221890 100644 (file)
--- 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;
 }
 
index eb12efda8d406cf5fe3587d2cf2c6fe85b425739..af6f9fb5ed230bf48840475d4c3037a6316be5da 100644 (file)
@@ -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 <string.h>
 #include <time.h>
+#include <signal.h>
 #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; m<nmsk; m++)
                                {
                                        if(valid[m])
@@ -427,17 +537,15 @@ int main (int argc, char **argv)
                                                                }
                                                        }
                                                }
-//printf("[logomask]mask%d: xxp=%d, xxw=%d, yyp=%d, yyw=%d\n",m+1,xxp,xxw,yyp,yyw);
+                                               if (debug)
+                                                       printf("[logomask] mask%d: xxp=%d, xxw=%d, yyp=%d, yyw=%d\n",m+1,xxp,xxw,yyp,yyw);
                                        }
                                }
                        }
-                       if(++loop>5)
-                       {
-                               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);
 }
 
index de2a8109c2df3d2f64fd88315778420be6df00e6..e735cfec1a80ebc20d7d0ba0947ccdf0a1e46c5a 100644 (file)
@@ -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
 
 #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
 
index e5d948da1642fb0b9bb5470e85f60ddf8f182474..7b67c9a5a0db46d12a59a0738e38203cb9b50c93 100755 (executable)
@@ -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
index 001e163289fea5a3f487ebcc9e10e6244b88116a..fd1ad9b432bd892c6508f757a329611062466181 100644 (file)
--- 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 <string.h>
 #include <time.h>
 #include <linux/input.h>
@@ -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;
 }
 
index 7cd01364a5f658f8048bcaf3b112640cb20db4e4..724e5311a67409b20de2f1220df3ed2c1cb1a00a 100644 (file)
--- 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
 
 #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
 
index ea3a6133a2f87cd043ce033bb9322fd5d05291e8..852e6da6fc57b4b339f8699d5963ba09b4d9c737 100644 (file)
@@ -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