图片播放器(二):framebuffer基本操作代码

display###############

    fb.c                                         //fb文件
    Makefile

include###############
    fb.h


start.c                                                //最开始的文件

Makefile                                         //主Makefile
Makefile.build

 

fb.c

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

#include 

// 全局变量
unsigned int *pfb = NULL;
int           fb_fd = -1;


int fb_open(void)
{
	int ret = -1;
	
	struct fb_fix_screeninfo finfo = {{0},};
	struct fb_var_screeninfo vinfo = {{0},};
	
	// 第1步:打开设备
	fb_fd = open(FBDEVICE, O_RDWR);
	if (fb_fd < 0)
	{
		perror("open");
		return -1;
	}
	printf("open %s success.\n", FBDEVICE);
	
	// 第2步:获取设备的硬件信息
	ret = ioctl(fb_fd, FBIOGET_FSCREENINFO, &finfo);
	if (ret < 0)
	{
		perror("ioctl");
		return -1;
	}
	printf("smem_start = 0x%lx, smem_len = %u.\n", finfo.smem_start, finfo.smem_len);
	
	ret = ioctl(fb_fd, FBIOGET_VSCREENINFO, &vinfo);
	if (ret < 0)
	{
		perror("ioctl");
		return -1;
	}
	printf("xres = %u, yres = %u.\n", vinfo.xres, vinfo.yres);
	printf("xres_virtual = %u, yres_virtual = %u.\n", vinfo.xres_virtual, vinfo.yres_virtual);
	printf("bpp = %u.\n", vinfo.bits_per_pixel);

	
	// 第3步:进行mmap
	unsigned long len = vinfo.xres_virtual * vinfo.yres_virtual * vinfo.bits_per_pixel / 8;
	printf("len = %ld\n", len);
	pfb = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fb_fd, 0);
	if (NULL == pfb)
	{
		perror("mmap");
		return -1;
	}
	printf("pfb = %p.\n", pfb);
	


	return 0;
}

void fb_close(void)
{
	close(fb_fd);
}


void fb_draw_back(unsigned int width, unsigned int height, unsigned int color)
{
	unsigned int x, y;
	
	for (y=0; y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(项目学习)