Framebuffer应用程序编程实例
来源:互联网 发布:webkey 源码 编辑:程序博客网 时间:2024/06/04 20:15
Framebuffer应用程序编程实例
转载地址:http://hi.baidu.com/fenhuashu/item/f4e0fa9df1babafb291647f4
编程流程:
(1) 打开设备 open("/dev/fb0",O_RDWR);
(2) 获取framebuffer设备信息.ioctl(int fb,FBIOGET_FSCREENINFO,&finfo);
ioctl函数是实现对设备的信息获取和设定,
第一个参数为文件描述符,第二个参数为具体设备的参数,对于framebuffer,参数在linux/fb.h中定义的。
#define FBIOGET_VSCREENINFO 0x4600 //获取设备无关的数据信息fb_var_screeninfo
#define FBIOPUT_VSCREENINFO 0x4601 //设定设备无关的数据信息
#define FBIOGET_FSCREENINFO 0x4602 //获取设备无关的常值信息fb_fix_screeninfo
#define FBIOGETCMAP 0x4604 //获取设备无关颜色表信息
#define FBIOPUTCMAP 0x4605 //设定设备无关颜色表信息
#define FBIOPAN_DISPLAY 0x4606
#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor)
#define FBIOPUT_VSCREENINFO 0x4601 //设定设备无关的数据信息
#define FBIOGET_FSCREENINFO 0x4602 //获取设备无关的常值信息fb_fix_screeninfo
#define FBIOGETCMAP 0x4604 //获取设备无关颜色表信息
#define FBIOPUTCMAP 0x4605 //设定设备无关颜色表信息
#define FBIOPAN_DISPLAY 0x4606
#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor)
第三个参数是存放信息的结构体或者缓冲区
(3) 内存映射 mmap函数。
头文件:sys/mman.h
常用用法:mmap(0,screensize,PROT_RD |PROT_WR,MAP_SHARED,int fb,0)返回映射的首地址。
实例:
#include <unistd.h>#include <stdio.h>#include <fcntl.h>#include <linux/fb.h>#include <sys/mman.h>#include <stdlib.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 sav=0; /* open device*/ 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); } /* show these information*/ printf("vinfo.xres=%d\n",vinfo.xres); printf("vinfo.yres=%d\n",vinfo.yres); printf("vinfo.bits_per_bits=%d\n",vinfo.bits_per_pixel); printf("vinfo.xoffset=%d\n",vinfo.xoffset); printf("vinfo.yoffset=%d\n",vinfo.yoffset); printf("finfo.line_length=%d\n",finfo.line_length); /* Figure out the size of the screen in bytes */ screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; /* 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"); memset(fbp,0,screensize); /* Where we are going to put the pixel */ for(x=0;x<vinfo.xres;x ) for(y=0;y<vinfo.yres;y ) { location = (x vinfo.xoffset) * (vinfo.bits_per_pixel/8) (y vinfo.yoffset) * finfo.line_length; *(fbp location) = 0xff; /* blue */ *(fbp location 1) = 0x00; } munmap(fbp, screensize); /* release the memory */ close(fbfd); return 0;}
- Framebuffer应用程序编程实例
- Framebuffer编程 应用程序
- Framebuffer设备应用程序编程
- Framebuffer编程
- framebuffer 编程
- Framebuffer编程
- Framebuffer编程
- framebuffer 编程
- Framebuffer编程
- framebuffer编程
- Framebuffer 编程例子
- Framebuffer编程How-to
- Framebuffer编程How-to
- framebuffer的编程资料
- Framebuffer介绍与编程
- Framebuffer编程How-to
- S3C2440 framebuffer编程
- 亲自动手编程 framebuffer.
- C语言单链表创建,插入,删除
- 不用指针链表实现先入先出队列
- Inventor 2014 API 新功能 (5) 3D草图相交曲线
- Spring通过构造方法注入的四种方式
- VS2010 error LNK1123: 转换到 COFF 期间失败
- Framebuffer应用程序编程实例
- USB Core 九
- Android apk如何签名,为什么签名
- web服务器、应用服务器、http服务器区别
- hdu 2137 circumgyrate the string
- ALSA的ioctl - hwdep
- 错误3:对于初始化和赋值的模糊概念
- android图片缩放的2个代码
- Java乔晓松-使用Filter过滤器清除网页缓存