#include #include #include #include #include int main(int argc, char **argv) { int fbfd = 0; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize = 0; unsigned char *fbp = 0; /* Open the file for reading and writing */ fbfd = open("/dev/fb0", O_RDWR); if (!fbfd) { perror("open /dev/fb0"); exit(1); } /* Get fixed screen information */ if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) { perror("finfo"); exit(2); } printf("ID: %s, len: %d\n", finfo.id, finfo.smem_len); printf("Framebuffer type %d: ", finfo.type); switch (finfo.type) { case FB_TYPE_PACKED_PIXELS: printf("packed pixels\n"); break; case FB_TYPE_PLANES: printf("non interleaved planes\n"); break; case FB_TYPE_INTERLEAVED_PLANES: printf("interleaved planes\n"); break; case FB_TYPE_TEXT: printf("text/attributes\n"); break; case FB_TYPE_VGA_PLANES: printf("EGA/VGA planes\n"); break; default: printf("unknown\n"); break; } printf("Framebuffer visual %d: ", finfo.visual); switch (finfo.visual) { case FB_VISUAL_MONO01: printf("monochr 1=black 0=white\n"); break; case FB_VISUAL_MONO10: printf("monochr 1=white 0=black\n"); break; case FB_VISUAL_TRUECOLOR: printf("true colour\n"); break; case FB_VISUAL_PSEUDOCOLOR: printf("pseudo colour\n"); break; case FB_VISUAL_DIRECTCOLOR: printf("direct colour\n"); break; case FB_VISUAL_STATIC_PSEUDOCOLOR: printf("fixed pseudo colour\n"); break; default: printf("unknown\n"); break; } printf("line len: %d, accel: %d\n", finfo.line_length, finfo.accel); /* Get variable screen information */ if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) { perror("vinfo"); exit(3); } printf("xres: %d, yres: %d, ", vinfo.xres, vinfo.yres); printf("xoff: %d, yoff: %d\n", vinfo.xoffset, vinfo.yoffset); printf("bits per pixel: %d\n", vinfo.bits_per_pixel); printf(" Offset Length MSBR\n"); printf("red %7d %7d %d\n", vinfo.red.offset, vinfo.red.length, vinfo.red.msb_right); printf("green %7d %7d %d\n", vinfo.green.offset, vinfo.green.length, vinfo.green.msb_right); printf("blue %7d %7d %d\n", vinfo.blue.offset, vinfo.blue.length, vinfo.blue.msb_right); printf("transp %7d %7d %d\n", vinfo.transp.offset, vinfo.transp.length, vinfo.transp.msb_right); /* Figure out the size of the screen in bytes */ screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; printf("screen size: %d\n", screensize); /* Map the device to memory */ fbp = (unsigned char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0); if ((int)fbp == -1) { perror("mmap"); exit(4); } printf("screen mapped successfully\n"); munmap(fbp, screensize); close(fbfd); return 0; }