fbee

annotate src/sys_linuxfb.c @ 1:2471e9b63432

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 07 Feb 2013 16:03:32 +0200
parents
children
rev   line source
nuclear@1 1 #include <stdio.h>
nuclear@1 2 #include <string.h>
nuclear@1 3 #include <errno.h>
nuclear@1 4 #include <unistd.h>
nuclear@1 5 #include <fcntl.h>
nuclear@1 6 #include <sys/ioctl.h>
nuclear@1 7 #include <sys/select.h>
nuclear@1 8 #include <linux/fb.h>
nuclear@1 9
nuclear@1 10 static int fbfd;
nuclear@1 11 static void *framebuf;
nuclear@1 12
nuclear@1 13 static int width, height, bpp;
nuclear@1 14 static int dirty;
nuclear@1 15
nuclear@1 16 int fbee_sys_init(void)
nuclear@1 17 {
nuclear@1 18 struct fb_var_screeninfo sinf;
nuclear@1 19 struct termios termios;
nuclear@1 20
nuclear@1 21 /* open framebuffer device */
nuclear@1 22 if((fbfd = open("/dev/fb0", O_RDWR)) == -1) {
nuclear@1 23 fprintf(stderr, "failed to open /dev/fb0: %s\n", strerror(errno));
nuclear@1 24 return -1;
nuclear@1 25 }
nuclear@1 26
nuclear@1 27 if(ioctl(fbfd, FBIOGET_VSCREENINFO, &sinf) == -1) {
nuclear@1 28 fprintf(stderr, "failed to retreive screen information for fb0: %s\n", strerror(errno));
nuclear@1 29 close(fbfd);
nuclear@1 30 fbfd = -1;
nuclear@1 31 return -1;
nuclear@1 32 }
nuclear@1 33 width = sinf.width;
nuclear@1 34 height = sinf.height;
nuclear@1 35 bpp = sinf.bits_per_pixel;
nuclear@1 36
nuclear@1 37 if((framebuf = mmap(0, width * height * bpp / 8, PROT_READ | PROT_WRITE,
nuclear@1 38 MAP_SHARED, fbfd, 0)) == (void*)-1) {
nuclear@1 39 fprintf(stderr, "failed to map framebuffer: %s\n", strerror(errno));
nuclear@1 40 return -1;
nuclear@1 41 }
nuclear@1 42
nuclear@1 43
nuclear@1 44 /* set terminal in raw mode */
nuclear@1 45 if(tcgetattr(0, &termios) == -1) {
nuclear@1 46 fprintf(stderr, "failed to get terminal information: %s\n", strerror(errno));
nuclear@1 47 munmap(framebuf, width * height * bpp / 8);
nuclear@1 48 return -1;
nuclear@1 49 }
nuclear@1 50
nuclear@1 51 /* open /dev/psaux for mouse input */
nuclear@1 52 if((mousefd = open("/dev/psaux", O_RDONLY | O_NONBLOCK)) == -1) {
nuclear@1 53 fprintf(stderr, "Failed to open the mouse device: %s, mouse will be unavailable.\n", strerror(errno));
nuclear@1 54 }
nuclear@1 55
nuclear@1 56 return 0;
nuclear@1 57 }