本文主要是介绍linux lcd测试程序,Linxu S3C2440 LCD驱动 测试程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
主机:VM - RedHat 9.0
开发板:FL2440,linux-2.6.12
arm-linux-gcc:3.4.1
#include
#include
#include
#include
#include
#define RED_COLOR565 0x0F100
#define GREEN_COLOR565 0x007E0
#define BLUE_COLOR565 0x0001F
intmain(void)
{
intfd_fb = 0;
structfb_var_screeninfo vinfo;
structfb_fix_screeninfo finfo;
longintscreen_size = 0;
short*fbp565 = NULL;
intx = 0, y = 0;
fd_fb = open("/dev/fb0", O_RDWR);
if(!fd_fb)
{
printf("Error: cannot open framebuffer device.\n");
exit(1);
}
// Get fixed screen info
if(ioctl(fd_fb, FBIOGET_FSCREENINFO, &finfo))
{
printf("Error reading fixed information.\n");
exit(2);
}
// Get variable screen info
if(ioctl(fd_fb, FBIOGET_VSCREENINFO, &vinfo))
{
printf("Error reading variable information.\n");
exit(3);
}
// the size of the screen in bytes
screen_size = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
printf("%dx%d, %dbpp, screen_size = %d\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel, screen_size );
// map framebuffer to user memory
fbp565 = (short*)mmap(0, screen_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd_fb, 0);
if((int)fbp565 == -1)
{
printf("Error: failed to map framebuffer device to memory.\n");
exit(4);
}
if(vinfo.bits_per_pixel == 16)
{
printf("16 bpp framebuffer\n");
// Red Screen
printf("Red Screen\n");
for(y = 0; y
{
for(x = 0; x
{
*(fbp565 + y * vinfo.xres + x) = RED_COLOR565;
}
}
// Green Screen
printf("Green Screen\n");
for(y = vinfo.yres/3; y
{
for(x = 0; x
{
*(fbp565 + y * vinfo.xres + x) =GREEN_COLOR565;
}
}
// Blue Screen
printf("Blue Screen\n");
for(y = (vinfo.yres*2)/3; y
{
for(x = 0; x
{
*(fbp565 + y * vinfo.xres + x) = BLUE_COLOR565;
}
}
}
else
{
printf("warnning: bpp is not 16\n");
}
munmap(fbp565, screen_size);
close(fd_fb);
return0;
}#include
#include
#include
#include
#include
#define RED_COLOR565 0x0F100
#define GREEN_COLOR565 0x007E0
#define BLUE_COLOR565 0x0001F
int main(void)
{
int fd_fb = 0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long int screen_size = 0;
short *fbp565 = NULL;
int x = 0, y = 0;
fd_fb = open("/dev/fb0", O_RDWR);
if (!fd_fb)
{
printf("Error: cannot open framebuffer device.\n");
exit(1);
}
// Get fixed screen info
if (ioctl(fd_fb, FBIOGET_FSCREENINFO, &finfo))
{
printf("Error reading fixed information.\n");
exit(2);
}
// Get variable screen info
if (ioctl(fd_fb, FBIOGET_VSCREENINFO, &vinfo))
{
printf("Error reading variable information.\n");
exit(3);
}
// the size of the screen in bytes
screen_size = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
printf("%dx%d, %dbpp, screen_size = %d\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel, screen_size );
// map framebuffer to user memory
fbp565 = (short *)mmap(0, screen_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd_fb, 0);
if ((int)fbp565 == -1)
{
printf("Error: failed to map framebuffer device to memory.\n");
exit(4);
}
if(vinfo.bits_per_pixel == 16)
{
printf("16 bpp framebuffer\n");
// Red Screen
printf("Red Screen\n");
for(y = 0; y < vinfo.yres/3; y++)
{
for(x = 0; x < vinfo.xres ; x++)
{
*(fbp565 + y * vinfo.xres + x) = RED_COLOR565;
}
}
// Green Screen
printf("Green Screen\n");
for(y = vinfo.yres/3; y < (vinfo.yres*2)/3; y++)
{
for(x = 0; x < vinfo.xres; x++)
{
*(fbp565 + y * vinfo.xres + x) =GREEN_COLOR565;
}
}
// Blue Screen
printf("Blue Screen\n");
for(y = (vinfo.yres*2)/3; y < vinfo.yres; y++)
{
for(x = 0; x < vinfo.xres; x++)
{
*(fbp565 + y * vinfo.xres + x) = BLUE_COLOR565;
}
}
}
else
{
printf("warnning: bpp is not 16\n");
}
munmap(fbp565, screen_size);
close(fd_fb);
return 0;
}
测试结果,由上往下颜色分别为红、绿、蓝,图像有色差。
这篇关于linux lcd测试程序,Linxu S3C2440 LCD驱动 测试程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!