From 42614396ea24f44fb26c18dd2c98b13162eabac6 Mon Sep 17 00:00:00 2001 From: hackbard <hackbard> Date: Wed, 18 Aug 2004 08:46:30 +0000 Subject: [PATCH] initial checkin of fbutil.c and Makefile --- Makefile | 10 ++++ fbutil.c | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 Makefile create mode 100644 fbutil.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3a28e2b --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +CFLAGS = -O3 -Wall +LIBS = +INCLUDES = +CC = gcc +OBJS = fbutil + +all: $(OBJS) + +clean: + rm -f $(OBJS) diff --git a/fbutil.c b/fbutil.c new file mode 100644 index 0000000..1edba2e --- /dev/null +++ b/fbutil.c @@ -0,0 +1,157 @@ +/* + * fbutil.c -- get/set framebuffer values + * + * hackbard@hackdaworld.dyndns.org + * + */ + +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> + +#include <linux/fb.h> + +#define MAXDEV 32 +#define DEVICE "/dev/fb/0" + +#define FIXED_INFO (1<<0) +#define VAR_INFO (1<<1) + +int usage() { + printf("usage:\n"); + printf("-d \t specify device (default %s)\n",DEVICE); + printf("-f \t print out fixed framebuffer info\n"); + printf("-v \t print out variable framebuffer info\n"); + printf("\n"); + return 1; +} + +int main(int argc,char **argv) { + + int i; + int fd; + char device[MAXDEV]; + unsigned char getmodes; + unsigned char setmodes; + + /* fb variables */ + struct fb_fix_screeninfo fixed_info; + struct fb_var_screeninfo var_info; + + strcpy(device,DEVICE); + getmodes=0; + setmodes=0; + + for(i=1;i<argc;i++) { + if(argv[i][0]=='-') { + switch(argv[i][1]) { + case 'd': + strncpy(device,argv[++i],MAXDEV-1); + break; + case 'f': + getmodes|=FIXED_INFO; + break; + case 'v': + getmodes|=VAR_INFO; + break; + default: + usage(); + return -1; + } + } + else { + usage(); + return -1; + } + } + + if((fd=open(device,O_RDWR))<0) { + printf("unable to open %s\n",device); + return -1; + } + + if(getmodes&FIXED_INFO) { + if(ioctl(fd,FBIOGET_FSCREENINFO,&fixed_info)<0) { + printf("cannot get fixed screen info\n"); + return -1; + } + printf("fixed screen info:\n"); + printf("id: %s\n",fixed_info.id); + printf("framebuffer memory: start=0x%x length=%u\n", + fixed_info.smem_start,fixed_info.smem_len); + printf("type: "); + if(fixed_info.type==FB_TYPE_PACKED_PIXELS) + printf("packed pixels\n"); + if(fixed_info.type==FB_TYPE_PLANES) + printf("non interleaved planes\n"); + if(fixed_info.type==FB_TYPE_INTERLEAVED_PLANES) + printf("interleaved planes\n"); + if(fixed_info.type==FB_TYPE_TEXT) + printf("text attributes\n"); + if(fixed_info.type==FB_TYPE_VGA_PLANES) + printf("ega/vga planes\n"); + printf("visual: "); + if(fixed_info.visual==FB_VISUAL_MONO01) + printf("monochrome 1=black, 0=white\n"); + if(fixed_info.visual==FB_VISUAL_MONO10) + printf("monochrome 1=white, 0=black\n"); + if(fixed_info.visual==FB_VISUAL_TRUECOLOR) + printf("true color\n"); + if(fixed_info.visual==FB_VISUAL_PSEUDOCOLOR) + printf("pseudo color\n"); + if(fixed_info.visual==FB_VISUAL_DIRECTCOLOR) + printf("direct color\n"); + if(fixed_info.visual==FB_VISUAL_STATIC_PSEUDOCOLOR) + printf("direct pseudo color\n"); + printf("hardware panning x/y: %c/%c\n", + fixed_info.xpanstep?'y':'n', + fixed_info.ypanstep?'y':'n'); + printf("hardware y wrap: %c\n",fixed_info.ywrapstep?'y':'n'); + printf("line length: %u bytes\n",fixed_info.line_length); + printf("mapped memory: start=0x%0x length=%u\n", + fixed_info.mmio_start,fixed_info.mmio_len); + printf("accel: %u (0 = no accel, > 0 see <linux/fb.h>)\n", + fixed_info.accel); + + } + + if(getmodes&VAR_INFO) { + if(ioctl(fd,FBIOGET_VSCREENINFO,&var_info)<0) { + printf("cannot get variable screen info\n"); + return -1; + } + printf("variable screen info:\n"); + printf("resolution: %ux%u, virtual %ux%u\n", + var_info.xres,var_info.yres, + var_info.xres_virtual,var_info.yres_virtual); + printf("bits per pixel: %u\n",var_info.bits_per_pixel); + printf("offsets: x=%u y=%u\n", + var_info.xoffset,var_info.yoffset); + printf("gray scale: %c\n",var_info.grayscale?'y':'n'); + printf("rgb:\n"); + printf("red: offset=%u length=%u msb=%c\n", + var_info.red.offset,var_info.red.length, + var_info.red.msb_right?'r':'l'); + printf("green: offset=%u length=%u msb=%c\n", + var_info.green.offset,var_info.green.length, + var_info.green.msb_right?'r':'l'); + printf("blue: offset=%u length=%u msb=%c\n", + var_info.blue.offset,var_info.blue.length, + var_info.blue.msb_right?'r':'l'); + printf("transparency: offset=%u length=%u msb=%c\n", + var_info.transp.offset,var_info.transp.length, + var_info.transp.msb_right?'r':'l'); + printf("non standard pixel format: %c\n", + var_info.nonstd?'y':'n'); + // printf("activate: + } + + close(fd); + + return 1; +} + -- 2.39.5