Eigenes Plugin compilieren

Games, Plugins, Utils, Tools, 3rdParty, etc...
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Re: Eigenes Plugin compilieren

Beitrag von hannebamb(el) »

hannebamb(el) hat geschrieben:
MPC823 hat geschrieben:Bin gerade beim durchtesten der Funktionen was passiert wenn ....


wenn ich folgendes benutze

Code: Alles auswählen

           PaintBox( 0,             0, 580, 10, FILL, WHITE ); // weiss gefülltes Rechteck
           PaintBox( 0,             40, 580, 50, FILL, ORANGE ); // orange gefülltes Rechteck
           PaintBox( 0,             80, 580, 100, FILL, GREEN ); // gruen gefülltes Rechteck
           PaintBox( 0,             120, 580, 140, FILL, YELLOW ); // gelb gefülltes Rechteck
           PaintBox( 0,             160, 580, 180, FILL, RED ); // rot gefülltes Rechteck

wird nur das weisse Rechteck gezeichnet die anderen nicht wenn ich aber

Code: Alles auswählen

           PaintBox( 0,             0, 580, 10, FILL, WHITE ); // weiss gefülltes Rechteck
auskommentiere wird alles von Orange bis rot gezeichnet

kann es sein dass die in PaintBox benutzte Funktion memset ein Bug hat ?.

Code: Alles auswählen

 memset(lbb + startx + sx + var_screeninfo.xres*(starty + sy), color, ex-sx + 1);
Desweiteren suche ich auch noch mit welchen Farben man den Paintbox bzw dann memset füttern darf

Martin
laut tuxclock.h:
enum {TRANSP, WHITE, SKIN0, SKIN1, SKIN2, ORANGE, GREEN, YELLOW, RED};
EDIT: Seife war schneller :-)
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

Das was ich da so schreibe sieht wild aus ohne ende weil ich durch das rumprobieren herausfinden will wie wo wann was.

So nun mal das womit ich rumprobiere und auch eine kleine Doku wie die Parameter wirklich zu verstehn sind den da habe ich wohl was missverstanden

bei PaintBox steht nämlich

Code: Alles auswählen

/******************************************************************************
 PaintBox
  paint a box
 \param sx,sy,ex,ey  : x,y position and size
 \param mode         : box mode
 \param color        : color
 \return             : none
 ******************************************************************************/
und mit size habe ich das so aufgefasst das man einen startpunkt angibt und ex/ey nur sagen wie gross. das ist aber falsch !!!!!!!!

sx,sy,ex,ey in Paintbox sind absolute Koordinaten innerhalb des Bildschirms . Das soll heissen wie unten Beschrieben ich kann mit sx,sy in der Paintbox mit (0,0) anfangen das wäre dann links oben bis maximal
aus dem Plugin übergeben Werten die zwar gleich bezeichnet sind aber so direkt nix miteinander zu tun haben, ex(max) Paint Box

also sx,sy,ex,ey die übergeben werte geben mir dann an das der z.B an PaintBox übergeben Wert ex nicht grösser sein darf als dem Plugin übergeben Wert (ex-sx) = ex(max) Paint Box

Zudem schmiert das ganze ab sobald ey in der PaintBox grösser wird als 555


Code: Alles auswählen

void ShowBox(int iPos)
{
/******************************************************************************
 PaintBox
  paint a box
 \param sx,sy,ex,ey  : x,y position and size
 \param mode         : box mode
 \param color        : color
 \return             : none

Aufruf :
void PaintBox(int sx, int sy, int ex, int ey, int mode, int color)

!!!!! ey <= 555 sonst segmetaition fault

mode [FILL, GRID};
color kann m {TRANSP, WHITE, SKIN0, SKIN1, SKIN2, ORANGE, GREEN, YELLOW, RED};

aus gui.h
#define TCCHARSIZE      24
#define TCROWSIZE       28

 ******************************************************************************/
   int  i;                                                       // counter
   int  sxmax    = ex - sx;                                      //maximal darstellbarer x Bereich im Plugin
   int  symax    = ey - sy;                                      //maximal darstellbarer y Bereich im Plugin
/***************************************************************
Im Plugin dürfen nun die groessen Parameter die an PaintBox übergeben weden
Bsp void PaintBox(int x1, int y1 , int x2, int y2, int mode, int color)
innerhalb bestimtter Grössen liegen
0 <= x1 < X2 <= sxmax , 0 <= y1 < y2 <= symax

    P1(0/0)
      +-------------------------------------------+
      |   P3(xstart/ystart)                       |
      |    +---------------------------------+    |
      |    | Zeile 1 text1             text2 |    | mrows[0][lang]
      |    +---------------------------------+    |
      |    | Zeile 2 text1             text2 |    | mrows[1][lang]
      |    |                                 |    |
      |    |                                 |    |
      |    |        Pbox(x1/y1)              |    |
      |    |          +                      |    |
      |    |                Pbox(x2/y2)      |    |
      |    |                  +              |    |
      |    |                                 |    |
      |    | Zeile 10 text1            text2 |    | mrows[9][lang]
      |    +---------------------------------+    |
      |    | OK select, DBOX save, HOME exit |    | mrows[10][lang]
      |    +---------------------------------+    |
      |                                      P4   | P4(xstart + xpluginsize /ystart + ypluginsize )
      +-------------------------------------------+
                                                  P2(sxmax/symax)

****************************************************************/
   int  k        = 0.9;                                          // Zoomfaktor 90%   -> k = 90%/100%
   int  xpluginsize = sxmax * k;                                 // x Groesse des Plugin Fenster
   int  ypluginsize = symax * k;                                 // y Groesse des Plugin Fenster
   int  xstart = (sxmax - xpluginsize)/2;                        // Offset x Startpunkt des Plugin Fenster P3(x)
   int  ystart = (symax - ypluginsize)/2;                        // Offset y Startpunkt des Plugin Fenster P3)y)
                                                                 // Definition von Pbox(x1/y1) und Pbox(x2/y2)
   int  Pbox [2] [2] = {
                         {0,0},
                         {0,0}
                        };
   int  iHStart  = 0;                                            // start col (210) = sx
   int  iHSize   = 400;                                          // columns 
   int  iHEnd    = iHStart+iHSize;                               // end col = ex = Position
   int  sy       = TCCHARSIZE+TCROWSIZE-5;                       // rows step
   char tmpstr[9];                                               // temporary var for integer conversion
   printf("gui.c Line: %d\n",__LINE__);
// paint window box body
           Pbox[0] [0] = xstart;
           Pbox[0] [1] = ystart;
           Pbox[1] [0] = xstart + xpluginsize;
           Pbox[1] [1] = ystart + ypluginsize;
           printf("gui.c Line: %d Pbox(x1/y1) = (%d/%d)\n",__LINE__, Pbox[0] [0], Pbox[0] [1]);
           printf("gui.c Line: %d Pbox(x2/y2) = (%d/%d)\n",__LINE__, Pbox[1] [0], Pbox[1] [1]);
           printf("gui.c Line: %d\n",__LINE__);
           PaintBox( Pbox[0] [0], Pbox[0] [1], Pbox[1] [0], Pbox[1] [1], FILL, SKIN0 );
// paint Render Object inside Box
           RenderSObject(50,60,RED,OBJ_CIRCLE);
           printf("gui.c Line: %d\n",__LINE__);
   // copy all from bufer to screen
   memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
}
Martin

P.S ach ja und die ganze Box wird jetz immer automatisch zentriert und gezoomt
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Eigenes Plugin compilieren

Beitrag von seife »

MPC823 hat geschrieben:Das was ich da so schreibe sieht wild aus ohne ende weil ich durch das rumprobieren herausfinden will wie wo wann was.

So nun mal das womit ich rumprobiere und auch eine kleine Doku wie die Parameter wirklich zu verstehn sind den da habe ich wohl was missverstanden

bei PaintBox steht nämlich

Code: Alles auswählen

/******************************************************************************
 PaintBox
  paint a box
 \param sx,sy,ex,ey  : x,y position and size
 \param mode         : box mode
 \param color        : color
 \return             : none
 ******************************************************************************/
und mit size habe ich das so aufgefasst das man einen startpunkt angibt und ex/ey nur sagen wie gross. das ist aber falsch !!!!!!!!
Naja, wenn du deinen Code falsch kommentierst, dann kann da hier niemand was dafür ;)

Zudem schmiert das ganze ab sobald ey in der PaintBox grösser wird als 555
Wie gross ist denn Pbox[1] [1]? Ich vermute, dass einfach dein lbb überläuft, weil du unten zum Bild rausmalst (oder den zu klein alloziert hast).

Code: Alles auswählen

   int  k        = 0.9;                                          // Zoomfaktor 90%   -> k = 90%/100%
LOL ;) Ich gehe davon aus, dass du ohne Compilerwarnings kompilierst? ;-)
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Re: Eigenes Plugin compilieren

Beitrag von hannebamb(el) »

@MPC823: Respekt

Hast du das mit deiner Trennung "remotecontrol.c" "gui.c" und "main.c" hinbekommen ?

Was MPC823 glaub ich meinte mit den Parametern ist der aus tuxclock.c stammende code "PaintBox". Dieser hat die Parameter so da dranstehen, was offensichtlich falsch ist.
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

Also ich weiss nicht ob das nun baut oder nicht weil mir das um es zu verstehen erst mal egal ist. Ich habe auch meine funktionieren code (ohne int -> 0,9) gemacht. Das habe ich nur gleich mal vorgeshen das das mit dem zoom noch rein soll. Abgesehen habe davon habe ich immerhin gelernt das wenn man int durch int teil obwohl das dann gebrochen ration wäre kommen gerundete werte raus was ich als "lustig" empfand . weil wenn ich sagen wir mal grössenordungsmässig ein int von 600 mit 9 multiliziere und durch 10 teile die genauigkeit ausreicht da kommapixe eh nicht dargestellt werden.

Desweiteren ist das nicht mein Komentar sonder aus dem "orginal" Plugin von daher MEGALOL

Gruss Martin
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

@hannebamb(el)

nein das muss ich noch machen erst mal hat mich der fb auf trab gehalten ich habe eben keine 9 Jahre Erfahrung und mache das leider nicht im schlaf.

Das mit den 555 habe ich nur rausgefunden weil ich Werte debugt habe wan es abschmiert und wizigerweise sieht man das man wenn ex zu gross wird schreibt er in der neuen Zeile weiter das ist quasi wie ein pufferüberlauf.

Gruss Martin
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

Auszug aus tuxclock.c von
http://cvs.tuxbox.org/cgi-bin/viewcvs.c ... iew=markup

Code: Alles auswählen

/******************************************************************************
 PaintBox
  paint a box
 \param sx,sy,ex,ey  : x,y position and size
 \param mode         : box mode
 \param color        : color
 \return             : none
 ******************************************************************************/
void PaintBox(int sx, int sy, int ex, int ey, int mode, int color)
{
   int i;

   if (mode == FILL) {
      for (; sy <= ey; sy++) {
         memset(lbb + startx + sx + var_screeninfo.xres*(starty + sy), color, ex-sx + 1);
      }
   } else {
      for (i = sx; i <= ex; i++) {                               // hor line
         *(lbb+ startx+ i+ var_screeninfo.xres*(sy+starty))   = color;
         *(lbb+ startx+ i+ var_screeninfo.xres*(sy+1+starty)) = color;
         *(lbb+ startx+ i+ var_screeninfo.xres*(ey-1+starty)) = color;
         *(lbb+ startx+ i+ var_screeninfo.xres*(ey+starty))   = color;
      }
     for (i = sy; i <= ey; i++) {                                // ver line
        *(lbb+ startx+ sx+ var_screeninfo.xres*(i+starty))    = color;
        *(lbb+ startx+ sx+ 1+ var_screeninfo.xres*(i+starty)) = color;
        *(lbb+ startx+ ex- 1+ var_screeninfo.xres*(i+starty)) = color;
        *(lbb+ startx+ ex+ var_screeninfo.xres*(i+starty))    = color;
     }
   }
}

\param sx,sy,ex,ey : x,y position and size
Naja, wenn du deinen Code falsch kommentierst, dann kann da hier niemand was dafür ;)
Aber ich weiss ja es sind immer die anderen schuld das war schon immer so :gruebel:

Martin
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

um den float zu sparen weil das braucht man hier wirklich nicht habe ich an

Code: Alles auswählen

  int  k [2]       =  {9,10};                                   // Zoomfaktor 90%   -> (x * k[0])/k[1]


gedacht das ist ausreichend genau vor allem da man in Grössenordnungen von 2 bis 3 stelligen Zahlen rechnet und spart sinnlos Speicher verbraten macht zwar nix aus aber Schwaben sparen überall :wink:

sagen wir das OSD gibt in x Richtung 652 Pixel her, dann wäre mein Ergebnis 586, was gerade mal 0,001363327% falsch wäre.

Martin
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Re: Eigenes Plugin compilieren

Beitrag von hannebamb(el) »

MPC823 hat geschrieben:
sagen wir das OSD gibt in x Richtung 652 Pixel her, dann wäre mein Ergebnis 586, was gerade mal 0,001363327% falsch wäre.

Martin
Wie sagt man: In erster Näherung ausreichend :D
Cbot
Interessierter
Interessierter
Beiträge: 43
Registriert: Dienstag 22. März 2005, 19:44

Re: Eigenes Plugin compilieren

Beitrag von Cbot »

um den float zu sparen weil das braucht man hier wirklich nicht habe ich an [...]
Also wie du es schaffst mit 2 ints weniger Speicher zu verbrauchen als mit einem float würde mich durchaus interessieren ;)
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

Ich ging davon aus das wenn ich ein int mit einem float multipliziere bekomme ich als ergebnis ein float . Bin mir nicht ganz sicher ob der compiler immer für den jeweiligen datentyp das maximale im speicher reserviert oder nur das was er braucht. wenn er das was er nur braucht reserviert um das ergebnis abzuspeichern dann machts natürlich weniger aus. ich glaube es waren 4 byte für int und 32 byte für einen float. So dachte ich rechnen mit float brauche ich 2 mal float also 64 byte und beim rechnen als int brauche ich dann nur 8 byte mit abgeschnittenenm rest.

Martin
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Eigenes Plugin compilieren

Beitrag von seife »

es sind 4 byte für einen int und 32 bit für einen float

;)
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Eigenes Plugin compilieren

Beitrag von rhabarber1848 »

Sollten floating point-Operationen auf der Dbox nicht
vermieden werden, da diese keine FPU hat?

Deswegen wird doch zum Dekodieren von ogg-streams
die fixed point-Variante tremor (aka libvorbisidec)
genutzt statt der normalen libvorbis.
http://packages.debian.org/lenny/libvorbisidec-dev
libvorbisidec is an Ogg Vorbis audio decoder (also known as "tremor"), implemented with no floating point arithmetic. This makes it particularly amenable to use on systems which lack floating point hardware.
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

okay dann sind es 8 bit zu 32 Bit das ist ja nicht die Welt :D

Martin
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

Hänge mal wieder fest.

ich habe versucht den tuxclock source soweit zu reduzieren das nur noch der Fernbedienungscode aktiv sein sollte. Ich wollte mal schaun Auf was es da ankommt.
Zudem stelle ich mir die Frage wie ich rausfinden kann welche inludes nun überflüssig sind weil ich ja so direkt gar nicht weiss welche funktion nun was brauchen. Macht man das mit try und error und schaun obs dann noch geht ?

tuxclock.c

Code: Alles auswählen

/**
  tuxclock
  ========
  Version: 0.01 alpha by Blazej Bartyzel "blesb", at 2009-05-28
  Print page format: landscape
  program construct is based on TuxMail vom Thomas "LazyT" 2005

  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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  If this software will be used in commertial products and source code are
  not included or not offer for customer, please contact FSF or me over
  forum http://tuxbox-forum.dreambox-fan.de/forum/.

  Some assumption:
  ----------------
   Value 255 of FB colortab is always r=0x0000 g=0x0000 b=0x0000 t=0xFFFF
   I use FB control from TuxCal daemon and hope it havent errors ;-)
   all return value of function are set unix-like: zero all ok, non zero some error
   all config parameter are number (speed and simplicity of code)

  Program detail:
  ---------------

 (Future) functions:
  (none)

 ToDo & Ideas
  - ? autostart row in menu => set and delete /var/etc/.tuxclock
  - editline for number
  - screensaver

 Open problems:
  - use search function for find and user total transparency color (?255)
*/

#include "tuxclock.h"

/******************************************************************************
 GetRCCode (is coming form tuxmail)
  read key from remote control
 \param   : none
 \return  : rccode or -1 is key is'nt pressed
 ******************************************************************************/
#if HAVE_DVB_API_VERSION == 3
int GetRCCode()
{
   static __u16 rc_last_key = KEY_RESERVED;

   if (read(rc, &ev, sizeof(ev)) == sizeof(ev)) {
      if (ev.value) {
         if (ev.code != rc_last_key) {
            rc_last_key = ev.code;
            switch (ev.code) {
               case KEY_UP:         rccode = RC_UP;      break;
               case KEY_DOWN:       rccode = RC_DOWN;    break;
               case KEY_LEFT:       rccode = RC_LEFT;    break;
               case KEY_RIGHT:      rccode = RC_RIGHT;   break;
               case KEY_OK:         rccode = RC_OK;      break;
               case KEY_0:          rccode = RC_0;       break;
               case KEY_1:          rccode = RC_1;       break;
               case KEY_2:          rccode = RC_2;       break;
               case KEY_3:          rccode = RC_3;       break;
               case KEY_4:          rccode = RC_4;       break;
               case KEY_5:          rccode = RC_5;       break;
               case KEY_6:          rccode = RC_6;       break;
               case KEY_7:          rccode = RC_7;       break;
               case KEY_8:          rccode = RC_8;       break;
               case KEY_9:          rccode = RC_9;       break;
               case KEY_RED:        rccode = RC_RED;     break;
               case KEY_GREEN:      rccode = RC_GREEN;   break;
               case KEY_YELLOW:     rccode = RC_YELLOW;  break;
               case KEY_BLUE:       rccode = RC_BLUE;    break;
               case KEY_VOLUMEUP:   rccode = RC_PLUS;    break;
               case KEY_VOLUMEDOWN: rccode = RC_MINUS;   break;
               case KEY_MUTE:       rccode = RC_MUTE;    break;
               case KEY_HELP:       rccode = RC_HELP;    break;
               case KEY_SETUP:      rccode = RC_DBOX;    break;
               case KEY_HOME:       rccode = RC_HOME;    break;
               case KEY_POWER:      rccode = RC_STANDBY; break;
               default:             rccode = -1;
            }
         } else { rccode = -1; }
      } else {
         rccode = -1;
         rc_last_key = KEY_RESERVED;
      }
   }
   return rccode;
}
#else
int GetRCCode()
{
   static unsigned short LastKey = -1;

   read(rc, &rccode, sizeof(rccode));
   if (rccode != LastKey) {
      LastKey = rccode;
      if ((rccode & 0xFF00) == 0x5C00) {
         switch (rccode) {
            case RC1_UP:      rccode = RC_UP;      break;
            case RC1_DOWN:    rccode = RC_DOWN;    break;
            case RC1_LEFT:    rccode = RC_LEFT;    break;
            case RC1_RIGHT:   rccode = RC_RIGHT;   break;
            case RC1_OK:      rccode = RC_OK;      break;
            case RC1_0:       rccode = RC_0;       break;
            case RC1_1:       rccode = RC_1;       break;
            case RC1_2:       rccode = RC_2;       break;
            case RC1_3:       rccode = RC_3;       break;
            case RC1_4:       rccode = RC_4;       break;
            case RC1_5:       rccode = RC_5;       break;
            case RC1_6:       rccode = RC_6;       break;
            case RC1_7:       rccode = RC_7;       break;
            case RC1_8:       rccode = RC_8;       break;
            case RC1_9:       rccode = RC_9;       break;
            case RC1_RED:     rccode = RC_RED;     break;
            case RC1_GREEN:   rccode = RC_GREEN;   break;
            case RC1_YELLOW:  rccode = RC_YELLOW;  break;
            case RC1_BLUE:    rccode = RC_BLUE;    break;
            case RC1_PLUS:    rccode = RC_PLUS;    break;
            case RC1_MINUS:   rccode = RC_MINUS;   break;
            case RC1_MUTE:    rccode = RC_MUTE;    break;
            case RC1_HELP:    rccode = RC_HELP;    break;
            case RC1_DBOX:    rccode = RC_DBOX;    break;
            case RC1_HOME:    rccode = RC_HOME;    break;
            case RC1_STANDBY: rccode = RC_STANDBY; break;
         }
      } else { rccode &= 0x003F; }
   } else { rccode = -1; }
   return rccode;
}
#endif




/******************************************************************************
 pOK
  work function for OK Key
 \param  iPos  : row position
 \return       : none
 ******************************************************************************/
void pOK(int iPos)
{
   switch (iPos) {
      case 0:
         break;
      case 1:
         // set x clock pos
         break;
      case 2:
         // set y clock pos
         break;
      case 3:
         // set char size
         break;
      case 4:
         // set text color
         break;
      case 5:
         // set background color
         break;
      case 6:
         // set clock type HHMMSS HHMM
         break;
      case 7:
         // set screensaver with date
        break;
      case 8:
         // start screensaver
         // ************* yet not implemented ;-) comming soon :-)
         break;
   }
   return;
}


/******************************************************************************
 plugin_exec
  main function of plugin
 \param  par  : plugins parameter
 \return      : none
 ******************************************************************************/
void plugin_exec(PluginParam *par) {
   int iPos;                                                     // menu position
   int tmp;                                                      // temporary variable

   fb = rc = sx = ex = sy = ey = -1;
   for (; par; par = par->next) {
      if (!strcmp(par->id, P_ID_FBUFFER))      { fb = atoi(par->val); }
      else if (!strcmp(par->id, P_ID_RCINPUT)) { rc = atoi(par->val); }
      else if (!strcmp(par->id, P_ID_OFF_X))   { sx = atoi(par->val); }
      else if (!strcmp(par->id, P_ID_END_X))   { ex = atoi(par->val); }
      else if (!strcmp(par->id, P_ID_OFF_Y))   { sy = atoi(par->val); }
      else if (!strcmp(par->id, P_ID_END_Y))   { ey = atoi(par->val); }
   }
   if (fb == -1 || rc == -1 || sx == -1 || ex == -1 || sy == -1 || ey == -1) {
      printf("Uebergabewerte an das Plugin falsch oder fehlerhaft");
      return;
   }

#if HAVE_DVB_API_VERSION == 3
   read(rc, &ev, sizeof(ev));
#else
   read(rc, &rccode, sizeof(rccode));
#endif
   fcntl(rc, F_SETFL, fcntl(rc, F_GETFL) &~ O_NONBLOCK);

   // program loop
   iPos = 0;
   tmp  = 0;                                                     // now: 0 - no RESTART signal
   printf("tuxclock.c Line: %d\n",__LINE__);
   do {
//      ShowMenu(iPos);                                            // show menu
      switch ((rccode = GetRCCode())) {                          // read key
         case RC_UP:
            if (iPos > 0) iPos--;
            printf("Up pressed\n");
            break;
         case RC_DOWN:
            if (iPos < 8) iPos++;
            printf("Down pressed\n");
            break;
         case RC_OK:
//            pOK(iPos);
            printf("OK pressed\n");
            break;
         case RC_HELP:                                           // change menu language
            printf("Help pressed\n");
            break;
         case RC_DBOX:                                           // save config file
            printf("DBOX pressed\n");
            break;
         case RC_HOME:                                           // only exit
            printf("Home pressed\n");
            break;
         case RC_PLUS:                                           // increment or toggle
            printf("+ pressed\n");
            break;
         case RC_MINUS:                                          // decrement or toggle
            printf("- pressed\n");
            break;
         default:                                                // other keys
            continue;
      }
   } while (rccode != RC_HOME);                                  // end program loop
   return;
}
tuxclock.h

Code: Alles auswählen

/**
  tuxclock
  =========
  Version: 0.01 alpha by Blazej Bartyzel "blesb", at 2009-05-28
  Print page format: landscape
  program construct is based on TuxMail vom Thomas "LazyT" 2005

  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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  If this software will be used in commertial products and source code are
  not included or not offer for customer, please contact FSF or me over
  forum http://tuxbox-forum.dreambox-fan.de/forum/.

*/

#include "config.h"
#if !defined(HAVE_DVB_API_VERSION) && defined(HAVE_OST_DMX_H)
#define HAVE_DVB_API_VERSION 1
#endif
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <netdb.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <time.h>
#include <syslog.h>
#include <linux/fb.h>
#include <zlib.h>
#include <malloc.h>
#if HAVE_DVB_API_VERSION == 3
#include <linux/input.h>
#endif
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_CACHE_H
#include FT_CACHE_SMALL_BITMAPS_H
#include <plugin.h>

#if HAVE_DVB_API_VERSION == 1
#define   RC1_0       0x5C00
#define   RC1_1       0x5C01
#define   RC1_2       0x5C02
#define   RC1_3       0x5C03
#define   RC1_4       0x5C04
#define   RC1_5       0x5C05
#define   RC1_6       0x5C06
#define   RC1_7       0x5C07
#define   RC1_8       0x5C08
#define   RC1_9       0x5C09
#define   RC1_STANDBY 0x5C0C
#define   RC1_UP      0x5C0E
#define   RC1_DOWN    0x5C0F
#define   RC1_PLUS    0x5C16
#define   RC1_MINUS   0x5C17
#define   RC1_HOME    0x5C20
#define   RC1_DBOX    0x5C27
#define   RC1_MUTE    0x5C28
#define   RC1_RED     0x5C2D
#define   RC1_RIGHT   0x5C2E
#define   RC1_LEFT    0x5C2F
#define   RC1_OK      0x5C30
#define   RC1_BLUE    0x5C3B
#define   RC1_YELLOW  0x5C52
#define   RC1_GREEN   0x5C55
#define   RC1_HELP    0x5C82
#endif
#define   RC_0        0x00
#define   RC_1        0x01
#define   RC_2        0x02
#define   RC_3        0x03
#define   RC_4        0x04
#define   RC_5        0x05
#define   RC_6        0x06
#define   RC_7        0x07
#define   RC_8        0x08
#define   RC_9        0x09
#define   RC_RIGHT    0x0A
#define   RC_LEFT     0x0B
#define   RC_UP       0x0C
#define   RC_DOWN     0x0D
#define   RC_OK       0x0E
#define   RC_MUTE     0x0F
#define   RC_STANDBY  0x10
#define   RC_GREEN    0x11
#define   RC_YELLOW   0x12
#define   RC_RED      0x13
#define   RC_BLUE     0x14
#define   RC_PLUS     0x15
#define   RC_MINUS    0x16
#define   RC_HELP     0x17
#define   RC_DBOX     0x18
#define   RC_HOME     0x1F
#define   FONT FONTDIR "/pakenham.ttf"

FT_Library       library;
FTC_Manager      manager;
FTC_SBitCache    cache;
FTC_SBit         sbit;
#ifdef OLDFT
FTC_ImageDesc    desc;
#else
FTC_ImageTypeRec desc;
#endif
FT_Face          face;
FT_UInt          prev_glyphindex;
FT_Bool          use_kerning;

int fb, rc;



int startx, starty, sx, ex, sy, ey;

#if HAVE_DVB_API_VERSION == 3
struct input_event ev;
#endif

unsigned short rccode;


:gruebel: Martin
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

erst wenn ich "if (iPos > 0) iPos--;" auskommentiere kann man mit der FB durchprobieren mit dem "orginalcode" läuft es nicht

Versteh das gerade mal gar nicht

Martin
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

Also es liegt daran :

Wenn die "bestimmten" Zeilen auskommentiert sind dann sieht man das bei jedem Tastendruck auf der Fb die Funktion GetRCCode() 2 mal durchlaufen wird obwohl das ja nur einmal aufgefufen wird. Das heisst wiederum das irgendwie im Puffer was doppelt drin ist.

Vermutlich wird deshalb beim ersten mal starten die schleife durchlaufen in der die OK Taste abgefragt wird. Deshalb wird dann in der Funktion pOK(iPos); aufgerufen. In der hatte ich aber keine Anweisung drin. Dort blieb es dann hängen

Was aber ein Problem ist :

1) obwohl GetRCCode() im code nur einmal aufgerufen wird wird es zweimal durchlaufen
2) beim beenden des Plugins geht die Fernbedienung nicht mehr

Warum 1) so ist könnte ich nur Vermuten das im Puffer noch was steht und der nicht ordentlich geleert wird zu 2) könnte ich nur Vermuten das es hoffentlich was mit 1) zu tun hat

Martin

PS

wenn ich vor return beim Beenden

Code: Alles auswählen

   FTC_Manager_Done(manager);
   FT_Done_FreeType(library);
   fcntl(rc, F_SETFL, O_NONBLOCK);
hinzufüge geht die FB wieder nach dem Beneden. vermutlich gibt einer der Befehle oder die Kombination das device wieder frei. Kann biite jemand was zu den Drei aufrufen schreiben was die machen über die suchfunktion im Forum habe ich nichts gefunden.

Das mit der Fernbedienung geht nun nach dem beenden also 2) gelöst aber 1) wird immer noch 2 mal durchlaufen
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Re: Eigenes Plugin compilieren

Beitrag von hannebamb(el) »

FTC_Manager_Done(manager);
Vgl.: http://freetype.sourceforge.net/freetyp ... ystem.html
FTC_Manager_Done( FTC_Manager manager );

Destroy a given manager after emptying it.
FT_Done_FreeType(library);
Vgl.: http://www.stillhq.com/freetype/doco/0. ... eType.html
FT_Done_FreeType
Section: Misc. Reference Manual Pages (3)
Index Return to Main Contents
NAME
FT_Done_FreeType
DESCRIPTION

Destroys a given FreeType library object and all of its childs, including resources, drivers, faces, sizes, etc.
Ist also "Aufräumcode" für Freetype

Das
fcntl(rc, F_SETFL, O_NONBLOCK);
Vgl.:
http://opengroup.org/onlinepubs/0079087 ... fcntl.html

bezieht sich auf die modifikation des filedesciptors
Vielleicht hast du durch vorherige aufrufe den rc blockiert ?

Ist manchmal schwierig mit ein paar Brocken etwas zu sehen

Gruss

HB
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Re: Eigenes Plugin compilieren

Beitrag von MPC823 »

Ja das stimmt vor allem wenn man mit so manchen sachen erst mal gar nix anfangen kann.

Also grob gesäubert geht nun app und rccode getrennt. Nun bin ich dabei aus

app und gui und app und rccode -> auf app rccode und gui zu kommen das wäre dann glaube ich übersichtlich genug.

Ein Freund wies mich noch daraufhin das es sinnvoll wäre das rc flag beim starten des plugins auszulesen um es wieder in den zustand zurückzusetzten in dem man es beim Starten vorfand wer weiss .Im augenblick scheint es so zu sein das Neutrino das Flag zurückgesetzt erwartet aber wer weiss vileicht ist es auch mal irgendwann anders.

Gruss Martin