PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Framebuffer



Pug
30-01-2002, 14:50
Hi ,

Ich versuche gerade den Framebuffer anzusteuern, aber mehr als eine weiße Linie ist irgendwie nicht drin ;-(((

Wenn ich die RGB - Werte ändere hat das leider keinen einfluß auf die Farbe der Linie ;-(.

Anbei poste ich mal den Source, evtl. findet ja jemand beim Drüberschauen was....




#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>


struct fb_var_screeninfo FB_vinfo;
struct fb_fix_screeninfo FB_finfo;
int FB_Filehandle=0;
char *FB_p2mem=NULL;
long int FB_screensize=0;

int FB_open()
{
char *fbp;

FB_Filehandle = open ("/dev/fb0", O_RDWR);
if (!FB_Filehandle)
{
return 1;
}

if (ioctl (FB_Filehandle, FBIOGET_FSCREENINFO, &FB_finfo))
{
return 2;
}

if (ioctl (FB_Filehandle, FBIOGET_VSCREENINFO, &FB_vinfo))
{
return 3;
}

FB_screensize = FB_vinfo.xres * FB_vinfo.yres * FB_vinfo.bits_per_pixel /8;
fbp = (char *) mmap (0,FB_screensize, PROT_READ | PROT_WRITE, MAP_SHARED, FB_Filehandle,0);
if ((int) fbp ==-1)
{
return 4;
}
FB_p2mem = fbp;
return 0;
}



int FB_close()
{
munmap(FB_p2mem,FB_screensize);
close (FB_Filehandle);
return 0;
}


int FB_setpixel(int x, int y, int col)
{
long int location=0;
location = (x+FB_vinfo.xoffset)*(FB_vinfo.bits_per_pixel/8)+(y+FB_vinfo.yoffset) * FB_finfo.line_length;
*(FB_p2mem + location)= 255;
*(FB_p2mem + location+1)= 0;
*(FB_p2mem + location+2)= 255;
*(FB_p2mem + location+3)= 0;
return 0;
}



int main()
{
char t;
int x=0, y=0, i=0;




if (FB_open())
{
printf ("Fehler beim öffnen von /dev/fb0\n");
}


printf ("\n>> Versuche eine Linie an y=100 zu zeichen");
x=0;
y=100;



for (i=0;i<1024;i++)
{
FB_setpixel(x+i,y,100);
}


t=getchar();
if (FB_close())
{
printf ("Fehler beim schliessen von /dev/fb0");
}
return (0);
}






Ich werf mir jetzt erstmal ne Aspirin ein ;-).....

Gruß und Danke im Vorraus


Pug