Frontpanel Buttons Dreambox (getestet auf DM7k)

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von hannebamb(el) »

Hi,

mindestens auf der DM7k und der DM56k fukntionieren die Frontpanel Buttons mit Neutrino nicht.
Folgender Patch behebt das:

Code: Alles auswählen

--- rcinput.cpp.orig    2011-07-26 23:29:15.000000000 +0200
+++ rcinput.cpp 2011-07-26 23:21:42.000000000 +0200
@@ -69,7 +69,8 @@
 #include <fstream>             // used for reading conf file

 #if defined HAVE_DREAMBOX_HARDWARE || defined HAVE_IPBOX_HARDWARE
-const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/rawir2"};
+const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/rawir2", "/dev/dbox/fpkeys0"};
+int bu_read=0;
 #define RC_standby_release (KEY_MAX + 1)
 typedef struct { __u16 code; } t_input_event;
 #elif defined(HAVE_TRIPLEDRAGON)
@@ -1603,6 +1604,7 @@
                        if ((fd_rc[i] != -1) &&
                            (FD_ISSET(fd_rc[i], &rfds)))
                        {
+
 #ifdef HAVE_TRIPLEDRAGON
                                int count = 0;
                                /* clear the input queue and process only the latest event
@@ -1611,10 +1613,19 @@
                                while (read(fd_rc[i], &ev, sizeof(t_input_event)) == sizeof(t_input_event))
                                        count++;
                                if (count)
-#else
+#endif
+#ifdef HAVE_DREAMBOX_HARDWARE
+                               if(i==1)
+                               {
+                                   //read was from fpkeys device
+                                   bu_read=1;
+                               }
+#endif
+#ifndef HAVE_TRIPLEDRAGON
                                if (read(fd_rc[i], &ev, sizeof(t_input_event)) == sizeof(t_input_event))
 #endif
                                {
+                                       //printf("Code red is: %04hx\n",ev.code);
                                        uint trkey = translate(ev.code);
 #if defined HAVE_DREAMBOX_HARDWARE || defined HAVE_IPBOX_HARDWARE
                                        if (ev.code == 0xff)
@@ -2254,11 +2265,54 @@
                case 0x00: return RC_0;
                case 0x01: return RC_1;
                case 0x02: return RC_2;
-               case 0x03: return RC_3;
+               case 0x03: if (bu_read==1)
+                           {
+                               //read from fpkeys device
+                               bu_read=0;
+                               return RC_down;
+                               break;
+                           }
+                           else
+                           {
+                               return RC_3;
+                               break;
+                           }
                case 0x04: return RC_4;
-               case 0x05: return RC_5;
-               case 0x06: return RC_6;
-               case 0x07: return RC_7;
+               case 0x05:  if (bu_read==1)
+                           {
+                               //read from fpkeys device
+                               bu_read=0;
+                               return RC_up;
+                               break;
+                           }
+                           else
+                           {
+                               return RC_5;
+                           }
+               case 0x06: if (bu_read==1)
+                           {
+                               //read from fpkeys device
+                               bu_read=0;
+                               return RC_standby;
+                               break;
+                           }
+                           else
+                           {
+                               return RC_6;
+                               break;
+                           }
+               case 0x07: if (bu_read==1)
+                           {
+                               //read from fpkeys device
+                               bu_read=0;
+                               //we just exit here. from fpkeys, 0x7 is key_release
+                               break;
+                           }
+                           else
+                           {
+                               return RC_7;
+                               break;
+                           }
                case 0x08: return RC_8;
                case 0x09: return RC_9;
                case 0x0a: return RC_plus;
--- rcinput.h.orig      2011-07-26 23:32:24.000000000 +0200
+++ rcinput.h   2011-07-27 08:38:34.000000000 +0200
@@ -127,12 +127,13 @@

                int             fd_pipe_high_priority[2];
                int             fd_pipe_low_priority[2];
-#if defined(OLD_RC_API) || defined(HAVE_TRIPLEDRAGON)
+#if defined(HAVE_TRIPLEDRAGON)
 #define NUMBER_OF_EVENT_DEVICES 1
-#else /* OLD_RC_API */
+#else
 #define NUMBER_OF_EVENT_DEVICES 2
 #endif /* OLD_RC_API */
                int             fd_rc[NUMBER_OF_EVENT_DEVICES];
+               int             fd_bu;
                int             fd_keyb;
                int             fd_event;
Es sollte nichts auf anderen Boxen kaputt machen, es sei denn jemand compiliert noch OLD_RC_API auf dbox2
Bitte testen, ob es doch Nebenwirkungen hat.

Gruß

HB

EDIT: War nen Typo drin, gefixt
bosmann
Einsteiger
Einsteiger
Beiträge: 268
Registriert: Sonntag 3. September 2006, 14:13

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von bosmann »

bei 5620-er hat es leider nicht geklappt. front-tasten immer noch tot.
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von hannebamb(el) »

OK.
Bei der DM500 funktioniert es laut Rückinfo
mach doch mal nen

Code: Alles auswählen

ls /dev/dbox
Vielleicht heisst das device bei der dm5620 anders

Gruß

HB
bosmann
Einsteiger
Einsteiger
Beiträge: 268
Registriert: Sonntag 3. September 2006, 14:13

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von bosmann »

~ > ls /dev/dbox
avs0 event0 fp0 fpkeys0 pig0 rc0 saa0
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von seife »

Rein vom coding style und der lesbarkeit her fände ich sowas besser:

Code: Alles auswählen

    if (bu_read == 1)
    {
        /* frontpanel code */
        switch(code)
        {
            case 0x03: ...
            case 0x05: ...
            case 0x07: ...
        }
    }
    else
    {
        /* remotecontrol code */
        switch(code)
Ich finde das weniger verwirrend zu lesen. Aber als nicht betroffener mag ich mich da nicht einmischen :-)
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von hannebamb(el) »

OK, ich bau's mal um :)
bin für sowas immer dankbar


@bosmann:
ich schick dir mal nen diff mit nen paar printf drin.
Evtl. schickt die 5620 andere keys vom frontpanel her
bosmann
Einsteiger
Einsteiger
Beiträge: 268
Registriert: Sonntag 3. September 2006, 14:13

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von bosmann »

dm5620 hat auch ein zahlendisplay. im enigma funktioniert es, im neutrino nicht
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von rhabarber1848 »

ungetestet: EDIT: Patch ist im CVS
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Frontpanel Buttons Dreambox (getestet auf DM7k)

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:dream_fpkeys.diff
240 Downloads im ULC, keine negative Rückmeldung, committed to CVS:
http://article.gmane.org/gmane.comp.vid ... x.scm/3207