android6.0.1 适配移植,Android6.0.1 移植:显示系统(一)--测试framebuffer

#include #include#include#include#include#include#include#include#include

/*可编程信息

struct fb_var_screeninfo {

__u32 xres; //x轴像素点数量

__u32 yres; //y轴像素点数量

__u32 xres_virtual; //虚拟屏x轴

__u32 yres_virtual; //虚拟屏y轴

__u32 xoffset;

__u32 yoffset;

__u32 bits_per_pixel; //色深

__u32 grayscale;

struct fb_bitfield red; //fb缓存的R\G\B位域

struct fb_bitfield green;

struct fb_bitfield blue;

struct fb_bitfield transp;

__u32 nonstd;

__u32 activate;

__u32 height; //屏幕的高度

__u32 width; //屏幕的宽度

__u32 accel_flags;

__u32 pixclock;

__u32 left_margin;

__u32 right_margin;

__u32 upper_margin;

__u32 lower_margin;

__u32 hsync_len;

__u32 vsync_len;

__u32 sync;

__u32 vmode;

__u32 rotate;

__u32 colorspace;

__u32 reserved[4];

};

固定信息

struct fb_fix_screeninfo {

char id[16]; //标识符

unsigned long smem_start; //fb缓存的起始位置

__u32 smem_len; //fb缓存的大小

__u32 type;

__u32 type_aux;

__u32 visual;

__u16 xpanstep;

__u16 ypanstep;

__u16 ywrapstep;

__u32 line_length;

unsigned long mmio_start; //内存映射I/O的开始位置

__u32 mmio_len; //内存映射I/O的长度

__u32 accel;

__u16 capabilities;

__u16 reserved[2];

}*/

char *fb_addr;

unsigned fb_size;void print_screen(char *buf,int width,intheight);int main(int argc,char *argv[])

{int fd=0;structfb_fix_screeninfo fb_fix;structfb_var_screeninfo fb_var;char *env=NULL;short *picture;intret;

env="/dev/graphics/fb0";//env="/sys/class/graphics/fb0";

fd=open(env,O_RDWR);

printf("aplex test v2 \n");

printf("fd= %s\n",env);

ioctl(fd,FBIOGET_FSCREENINFO,&fb_fix);

printf("fb_fix.line_length=%u\n",fb_fix.line_length);

printf("fb_fix.accel=%u\n",fb_fix.accel);

ioctl(fd,FBIOGET_VSCREENINFO,&fb_var);

printf("fb_var.xres=%u\n",fb_var.xres);

printf("fb_var.yres=%u\n",fb_var.yres);

printf("fb_var.xres_virtual=%u\n",fb_var.xres_virtual);

printf("fb_var.yres_virtual=%u\n",fb_var.yres_virtual);

fb_size=fb_var.yres*fb_fix.line_length;/*fb_addr的获取,是很核心的步骤,表示成功获得了framebuffer设备*/fb_addr=(char *)mmap(NULL,fb_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

picture=(char *)malloc(fb_var.yres*fb_fix.line_length);

memset(picture,0xFF,fb_var.yres*fb_fix.line_length);/*注意,这里对颜色的赋值只是一次赋一半值,也就是一个字节,8bit*/

/*而事实上,一个像素的颜色值是16bit*/

/*0xFFFF就是白色*/

/*介绍一下16bit的颜色的类型,颜色是由RGB组成,如果是565排列,

则依次为Red Green Blue

11111 111111 11111*/print_screen(picture,fb_var.xres,fb_var.yres);return 0;

}void print_screen(char *buf,int width,intheight)

{short *t_data=(short *)buf;short *t_fb_addr=(short *)fb_addr;int bytew=width<<1; /*像素数乘以2即是字节数,因为颜色深度是2个字节(16bit)*/

while(--height>=0)

{

memcpy(t_fb_addr,t_data,bytew);/*一行的数据赋值*/t_fb_addr+=width;

t_data+=width;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值