/*

framebuffer简单测试程序 

网上转载 很多次 的程序 :-)

*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <asm/page.h>
#include <linux/fb.h>
#define TRUE 1
#define FALSE 2 typedef struct fbdev{
int fb;
unsigned long fb_mem_offset;
unsigned long fb_mem;
struct fb_fix_screeninfo fb_fix;
struct fb_var_screeninfo fb_var;
char dev[];
} FBDEV, *PFBDEV; int fb_open(PFBDEV pFbdev)
{
pFbdev->fb = open(pFbdev->dev, O_RDWR);
if(pFbdev->fb < )
{
printf("Error opening %s: %m. Check kernel config\n", pFbdev->dev);
return FALSE;
}
if (- == ioctl(pFbdev->fb,FBIOGET_VSCREENINFO,&(pFbdev->fb_var)))
{
printf("ioctl FBIOGET_VSCREENINFO\n");
return FALSE;
}
if (- == ioctl(pFbdev->fb,FBIOGET_FSCREENINFO,&(pFbdev->fb_fix)))
{
printf("ioctl FBIOGET_FSCREENINFO\n");
return FALSE;
} pFbdev->fb_mem_offset = (unsigned long)(pFbdev->fb_fix.smem_start) & (~PAGE_MASK);
pFbdev->fb_mem = (unsigned long int)mmap(NULL, pFbdev->fb_fix.smem_len +
pFbdev->fb_mem_offset,
PROT_READ | PROT_WRITE, MAP_SHARED, pFbdev->fb, );
if (-1L == (long) pFbdev->fb_mem)
{
printf("mmap error! mem:%ld offset:%ld\n", pFbdev->fb_mem,
pFbdev->fb_mem_offset);
return FALSE;
} return TRUE;
} void fb_close(PFBDEV pFbdev)
{
close(pFbdev->fb);
pFbdev->fb=-;
} void fb_memset (void *addr, int c, size_t len)
{
memset(addr, c, len);
} void draw_dot (PFBDEV pFbdev, uint32_t x, uint32_t y, uint8_t r, uint8_t g, uint8_t b)
{
unsigned int offset;
if (-1L == (long) pFbdev->fb_mem)
{
printf("mmap error! mem:%ld offset:%ld\n", pFbdev->fb_mem,
pFbdev->fb_mem_offset);
return;
} offset = y*pFbdev->fb_fix.line_length+*x;
fb_memset((void*)(pFbdev->fb_mem + pFbdev->fb_mem_offset + offset), b, );
fb_memset((void*)(pFbdev->fb_mem + pFbdev->fb_mem_offset + offset + ), g, );
} int main(void)
{
FBDEV fb;
memset(&fb, , sizeof(FBDEV));
strcpy(fb.dev, "/dev/fb0");
if(fb_open(&fb)==FALSE)
{
printf("open frame buffer error\n");
return ;
} printf("depth(bits per pixel) = %d\n",fb.fb_var.bits_per_pixel);
printf("smemlen = %d\n",fb.fb_fix.smem_len);
printf("fix_line(in byte) = %d\n",fb.fb_fix.line_length); int i,j;
for(i=; i<; ++i)
for(j = ;j<;++j)
{
draw_dot(&fb,i,j,0xff,0xff,0xff);
} fb_close(&fb);
return ;
}

framebuffer测试程序的更多相关文章

  1. Linux framebuffer测试程序

    Linux framebuffer的框架非常简单, 对于应用程序就是操作一块内存(俗称帧缓存), 当然也有可能是双缓存, 一般用于高帧率场景, 一块帧在填充数据时, 另一块在显示, 接着对调过来, 那 ...

  2. sc7731 Android 5.1 LCD驱动简明笔记之二

    此篇笔记基于sc7731 - android 5.1,对lcd的framebuffer做一个简明笔记. 一共分为两大部分:第一部分,关于LCD的硬件方面的:第二部分,关于lcd核心处理(framebu ...

  3. 调试 lvgl 的一个例子

    发现一个新的 vector graphic 的库,用 C 写的,效果丰富,接口简单,而且是 MIT License,所以想试一试.因为它支持 framebuffer,所以,在 linux 上先走一个. ...

  4. 嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示

    在基于Linux的视频监控采集系统中,摄像头采集到的一帧视频图像数据一般都是经过硬件自动压缩成jpeg格式的,然后再保存到摄像头设备的缓冲区.如果要把采集到的jpeg格式显示在本地LCD屏上,由于我们 ...

  5. uboot-tiny4412启动流程(下)----如何将自己的裸板测试程序加入uboot中启动测试

    今天在工作上搞了一天高通的芯片uboot程序,目的是希望将一个裸板的程序移植到uboot中,并且开机让它运行.这个芯片是NXP4330,目前是高通的一个芯片,基于ARM-contexA9架构,那么就跟 ...

  6. 十四、使用framebuffer填充纯色

    简单描述一下framebuffer的使用,它其实就相当于将屏幕上的像素映射到内存中,改变内存中的内容后屏幕自动就变颜色了. 首先要调用open("/dev/fb0", O_RDWR ...

  7. V4L2 camera 驱动 capture测试程序【转】

    转自:http://blog.csdn.net/kickxxx/article/details/6336346 在网上找了一个测试程序, 看了看,是根据capture.c修改的.测试步骤如下 . gc ...

  8. 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法

    引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...

  9. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

随机推荐

  1. leetcode-easy-trees-Maximum Depth of Binary Tree

    mycode  92.69% # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x ...

  2. windows运维常用命令

    devmgmt.msc  设备管理器msconfig     启动项命令mstsc        远程登录diskmgmt.msc 磁盘管理  calc.exe     计算器shutdown -r ...

  3. VASP表面计算步骤小结

    原文链接:http://blog.sciencenet.cn/blog-478347-374981.html 一.概述 vasp用“slab” 模型来模拟表面体系结构.      vasp计算表面的大 ...

  4. cocoapods [!] Unable to find a pod with name, author, summary, or description matching `xx`

    pod search MJRefresh的时候报错 [!] Unable to find a pod with name, author, summary, or description matchi ...

  5. Android 调用相机、相册功能

    清单文件中增加对应权限,动态申请权限(此部分请参考Android 动态申请权限,在此不作为重点描述) private static final int REQUEST_CODE_ALBUM = 100 ...

  6. delphi dbgrid数据导出为excel

    uses Excel2000,ComObj; procedure F_Form.Button1Click(Sender: TObject);var    myExcel:TExcel;    Int_ ...

  7. zabbix使用脚本监控

    参照:http://www.cnblogs.com/zhongkai-27/p/9984597.html

  8. squid代理docker

    http://www.dockone.io/article/1380https://www.cnblogs.com/lixiaolun/p/7449017.html 为docker设置代理 创建目录 ...

  9. mybatis整合spring,使用org.mybatis.spring.mapper.MapperScannerConfigurer扫描出现问题

    <!-- 加载配置文件 --> <context:property-placeholder location="classpath:db.properties" ...

  10. ubuntu中写sh脚本

    批量执行命令 https://jingyan.baidu.com/article/3052f5a121c8ac97f21f8661.html 批量执行脚本也是可行的! 如,main.sh内写   sh ...