diff options
author | EliteTK <tomasz.kramkowski@gmail.com> | 2014-05-24 13:05:18 +0100 |
---|---|---|
committer | EliteTK <tomasz.kramkowski@gmail.com> | 2014-05-24 13:05:18 +0100 |
commit | 39c3721ca16d2dfdbd8e5488e7d1f57a6d54310e (patch) | |
tree | fcec9d101136a5b004ffc3fc1cc6a66dc848a6e5 /sofbcode.c | |
parent | 5bbcb1f542c239ce1e9b5a7d3c7214a7bf001d6a (diff) | |
parent | a530bad7a6ea2778129db0dc26c446d9f6df6ddd (diff) | |
download | c-stuff-39c3721ca16d2dfdbd8e5488e7d1f57a6d54310e.tar.gz c-stuff-39c3721ca16d2dfdbd8e5488e7d1f57a6d54310e.tar.xz c-stuff-39c3721ca16d2dfdbd8e5488e7d1f57a6d54310e.zip |
Merge branch 'master' of https://github.com/EliteTK/c-stuff
Merge
Diffstat (limited to 'sofbcode.c')
-rw-r--r-- | sofbcode.c | 66 |
1 files changed, 66 insertions, 0 deletions
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 <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <linux/fb.h> +#include <sys/mman.h> + +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; +} |