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
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