From 43b2d6c59aaac0aa17b81043b641149105a0315d Mon Sep 17 00:00:00 2001 From: EliteTK Date: Tue, 25 Feb 2014 16:18:35 +0000 Subject: Working on framebuffer graphics. --- sofbcode.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 sofbcode.c (limited to 'sofbcode.c') diff --git a/sofbcode.c b/sofbcode.c new file mode 100644 index 0000000..e4b9d3d --- /dev/null +++ b/sofbcode.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include + +int main() +{ + int fbfd = 0; + struct fb_var_screeninfo vinfo; + struct fb_fix_screeninfo finfo; + long int screensize = 0; + char *fbp = 0; + int x = 0, y = 0; + long int location = 0; + int count ; + + /* Open the file for reading and writing */ + fbfd = open("/dev/fb0", O_RDWR); + if (!fbfd) { + printf("Error: cannot open framebuffer device.\n"); + exit(1); + } + printf("The framebuffer device was opened successfully.\n"); + /* Get fixed screen information */ + if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) { + printf("Error reading fixed information.\n"); + exit(2); + } + + /* Get variable screen information */ + if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) { + printf("Error reading variable information.\n"); + exit(3); + } + + /* Figure out the size of the screen in bytes */ + screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; + printf("\nScreen size is %d",screensize); + printf("\nVinfo.bpp = %d",vinfo.bits_per_pixel); + + /* Map the device to memory */ + fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fbfd, 0); + if ((int)fbp == -1) { + printf("Error: failed to map framebuffer device to memory.\n"); + exit(4); + } + printf("The framebuffer device was mapped to memory successfully.\n"); + + + x = 100; y = 100; /* Where we are going to put the pixel */ + + /* Figure out where in memory to put the pixel */ + location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + (y+vinfo.yoffset) * finfo.line_length; + for(count = 1 ;count < 100 ;count++) + { + *(fbp + location) = 255; /* Some blue */ + *(fbp + location + count) = 0; /* A little green */ + *(fbp + location + count + 1) = 0; /* A lot of red */ + *(fbp + location + count + 2) = 0; /* No transparency */ + } + munmap(fbp, screensize); + close(fbfd); + return 0; +} -- cgit v1.2.3-54-g00ecf