int main2 ()
{
const char *devfile = "/dev/graphics/fb0";
long int screensize = 0;
int fbFd = 0;
/* Open the file for reading and writing */
fbFd = open (devfile, O_RDWR);
LOGI("NativeFramebuffer 2 fbFd = %d",fbFd);
if (fbFd == -1)
{
perror ("Error: cannot open framebuffer device");
exit (1);
}
// int b = ioctl (fbFd, FBIOBLANK , &vinfo);//表示调用sep4020fb_blank函数清空液晶屏;
// LOGI("NativeFramebuffer 2 FBIOBLANK = %d ", b);
//获取finfo信息并显示
if (ioctl (fbFd, FBIOGET_FSCREENINFO, &finfo) == -1)
{
perror ("Error reading fixed information");
exit (2);
}
// printFixedInfo ();
//获取vinfo信息并显示
if (ioctl (fbFd, FBIOGET_VSCREENINFO, &vinfo) == -1)
{
perror ("Error reading variable information");
exit (3);
}
// printVariableInfo ();
/* Figure out the size of the screen in bytes */
screensize = finfo.smem_len;//fb的缓存长度
// screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;;
LOGI("NativeFramebuffer 2 vinfo.xoffset = %ld ,yoffset = %d "
",xres_virtual = %d, xres = %d , yres = %d ,yres_virtual = %d",
vinfo.xoffset, vinfo.yoffset,vinfo.xres_virtual,vinfo.xres, vinfo.yres, vinfo.yres_virtual);
LOGI("NativeFramebuffer 2 screensize = %ld",screensize);
LOGI("NativeFramebuffer 2 vinfo.yoffset = %d",vinfo.yoffset);
// if ( toggle ){
// vinfo.yoffset = 1;
// pDstBuf = FB_PAddress+g_u32VpostBufMapSize/2;
// } else {
// vinfo.yoffset = vinfo.yres;
// pDstBuf = FB_PAddress;
// }
// int a = ioctl (fbFd, FBIOPAN_DISPLAY, &vinfo);
// LOGI("NativeFramebuffer 2 FBIOPAN_DISPLAY = %d",a);
/* Map the device to memory */
frameBuffer =(char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fbFd, 0);
if (frameBuffer == MAP_FAILED)
{
perror ("Error: Failed to map framebuffer device to memory");
exit (4);
}
// memset(frameBuffer, 0, screensize);
//drawRect_rgb16 (vinfo.xres *3 / 8, vinfo.yres * 3 / 8,vinfo.xres / 4, vinfo.yres / 4,0xff00ff00);//实现画矩形
drawline_rgb16(50,80,260,0,0xffff0000,0);
drawline_rgb16(160,10,0,180,0xff00ff00,1);//可以画出一个交叉的十字,坐标都是自己设的。
sleep (2);
printf (" Done.\n");
// int a = ioctl (fbFd, FBIOPAN_DISPLAY, &vinfo);
// LOGI("NativeFramebuffer 2 FBIOPAN_DISPLAY = %d ", a);
munmap (frameBuffer, screensize); //解除内存映射,与mmap对应
close (fbFd);
return 0;
}