EDIT: Seife war schnellerhannebamb(el) hat geschrieben:laut tuxclock.h:MPC823 hat geschrieben:Bin gerade beim durchtesten der Funktionen was passiert wenn ....
wenn ich folgendes benutzeCode: 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 aberauskommentiere wird alles von Orange bis rot gezeichnetCode: Alles auswählen
PaintBox( 0, 0, 580, 10, FILL, WHITE ); // weiss gefülltes Rechteck
kann es sein dass die in PaintBox benutzte Funktion memset ein Bug hat ?.
Desweiteren suche ich auch noch mit welchen Farben man den Paintbox bzw dann memset füttern darfCode: Alles auswählen
memset(lbb + startx + sx + var_screeninfo.xres*(starty + sy), color, ex-sx + 1);
Martin
enum {TRANSP, WHITE, SKIN0, SKIN1, SKIN2, ORANGE, GREEN, YELLOW, RED};
Eigenes Plugin compilieren
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
Re: Eigenes Plugin compilieren
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
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
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
Martin
P.S ach ja und die ganze Box wird jetz immer automatisch zentriert und gezoomt
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
******************************************************************************/
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);
}
P.S ach ja und die ganze Box wird jetz immer automatisch zentriert und gezoomt
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: Eigenes Plugin compilieren
Naja, wenn du deinen Code falsch kommentierst, dann kann da hier niemand was dafürMPC823 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
und mit size habe ich das so aufgefasst das man einen startpunkt angibt und ex/ey nur sagen wie gross. das ist aber falsch !!!!!!!!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 ******************************************************************************/
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).
Zudem schmiert das ganze ab sobald ey in der PaintBox grösser wird als 555
Code: Alles auswählen
int k = 0.9; // Zoomfaktor 90% -> k = 90%/100%
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
Re: Eigenes Plugin compilieren
@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.
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.
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
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
Desweiteren ist das nicht mein Komentar sonder aus dem "orginal" Plugin von daher MEGALOL
Gruss Martin
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
@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
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
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
Auszug aus tuxclock.c von
http://cvs.tuxbox.org/cgi-bin/viewcvs.c ... iew=markup
Martin
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
Aber ich weiss ja es sind immer die anderen schuld das war schon immer soNaja, wenn du deinen Code falsch kommentierst, dann kann da hier niemand was dafür
Martin
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
um den float zu sparen weil das braucht man hier wirklich nicht habe ich an
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
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
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
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
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
Re: Eigenes Plugin compilieren
Wie sagt man: In erster Näherung ausreichendMPC823 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
-
- Interessierter
- Beiträge: 43
- Registriert: Dienstag 22. März 2005, 19:44
Re: Eigenes Plugin compilieren
Also wie du es schaffst mit 2 ints weniger Speicher zu verbrauchen als mit einem float würde mich durchaus interessierenum den float zu sparen weil das braucht man hier wirklich nicht habe ich an [...]
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
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
Martin
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: Eigenes Plugin compilieren
es sind 4 byte für einen int und 32 bit für einen float
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: Eigenes Plugin compilieren
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
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.
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
okay dann sind es 8 bit zu 32 Bit das ist ja nicht die Welt
Martin
Martin
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
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
tuxclock.h
Martin
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;
}
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;
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
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
Versteh das gerade mal gar nicht
Martin
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
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
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
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);
Das mit der Fernbedienung geht nun nach dem beenden also 2) gelöst aber 1) wird immer noch 2 mal durchlaufen
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
Re: Eigenes Plugin compilieren
Vgl.: http://freetype.sourceforge.net/freetyp ... ystem.htmlFTC_Manager_Done(manager);
FTC_Manager_Done( FTC_Manager manager );
Destroy a given manager after emptying it.
Vgl.: http://www.stillhq.com/freetype/doco/0. ... eType.htmlFT_Done_FreeType(library);
Ist also "Aufräumcode" für FreetypeFT_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.
Das
Vgl.:fcntl(rc, F_SETFL, O_NONBLOCK);
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
-
- Erleuchteter
- Beiträge: 448
- Registriert: Samstag 26. November 2005, 00:35
Re: Eigenes Plugin compilieren
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
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