/*函数功能简述: *对返回值说明:
*Author:ChenLei *File:main.c
*Greate Date:2011-10-31 13:10:20*/
//#include "includes.h"
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
//#include <asm/page.h>
//#include "myfb.h"
#define traceout printf
#define TRUE 1
#define FALSE 0
/* a framebuffer device structure */
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[20];
} FBDEV, *PFBDEV;
static FBDEV sfbdev;
// Initialize frame buffer
// char p[600*800*3]={0};
void change(char*p, char r, char g, char b);
int fb_open()
{
// int i = 0;
traceout("start");
memset(&sfbdev, 0, sizeof(FBDEV));
strcpy(sfbdev.dev, "/dev/fb0");
sfbdev.fb = open(sfbdev.dev, O_RDWR);
if (-1 == ioctl(sfbdev.fb, FBIOGET_VSCREENINFO, &(sfbdev.fb_var)))
{
traceout("ioctl FBIOGET_VSCREENINFO\n");
return FALSE;
}
if (-1 == ioctl(sfbdev.fb, FBIOGET_FSCREENINFO, &(sfbdev.fb_fix)))
{
traceout("ioctl FBIOGET_FSCREENINFO\n");
return FALSE;
}
/* map physics address to virtual address */
sfbdev.fb_mem_offset = (unsigned long)(sfbdev.fb_fix.smem_start) & (~0xfffff000);
sfbdev.fb_mem = (unsigned long int)mmap(NULL, sfbdev.fb_fix.smem_len + sfbdev.fb_mem_offset,
PROT_READ | PROT_WRITE, MAP_SHARED, sfbdev.fb, 0);
//char *p =NULL;
char p[600*800*3]={0};
char r,g,b;
int k=0,m=0;
typedef struct color{
char r;
char g;
char b;
} COLOR;
COLOR src[]={
{0xff,0xff,0xff},
{0xff,0x00,0x00},
{0x00,0xff,0x00},
{0x00,0x00,0xff},
{0x00,0x00,0x00}
};
while(1)
{
k=m%5;
m++;
change((char*)p,src[k].r,src[k].g,src[k].b);
sleep(2);
memcpy(( char *)sfbdev.fb_mem,p,600*800*3);
}
return TRUE;
}
void change(char *p, char r, char g, char b)
{
int i=0;
for(i=0;i<=800*600*3;i+=3)
{
p[i]=r;
p[i+1]=g;
p[i+2]=b;
}
// return p;
}
int main(int argc, char *argv[])
{
fb_open();
return 0;
}