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