#include #include #include #include #include #include #include #include #include "hardware.h" volatile unsigned int* pallsw = (unsigned int*)(CLPS7111_VIRT_BASE+PALLSW); volatile unsigned int* palmsw = (unsigned int*)(CLPS7111_VIRT_BASE+PALMSW); static void draw_box(char* fbp, int x, int y, int w, int h, int c) { c += c<<4; while (h>0) { memset(fbp+y*160+x/2,c,w/2); ++y; --h; } } int main(int argc, char*argv[]) { int fbfd = 0; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize = 0; char *fbp = 0; int x = 0, y = 0; //long int location = 0; int i,j; int w = 320/8; int h = 240/8; unsigned int pl,pm; // save pallette pl = *pallsw; pm = *palmsw; /* Open the file for reading and writing */ fbfd = open("/dev/fb0", O_RDWR); if (!fbfd) { fprintf(stderr,"fbtest: cannot open framebuffer device\n"); exit(1); } /* Get fixed screen information */ if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) { fprintf(stderr,"fbtest: reading fixed information\n"); exit(2); } /* Get variable screen information */ if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) { fprintf(stderr,"fbtest: reading variable information\n"); exit(3); } /* Figure out the size of the screen in bytes */ screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; /* Map the device to memory */ fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0); if ((int)fbp == -1) { fprintf(stderr,"fbtest: failed to map framebuffer device to memory\n"); exit(4); } /* clear screen */ memset(fbp,0,screensize); /* printf("xres = %d\n",vinfo.xres); printf("yres = %d\n",vinfo.yres); printf("bpp = %d\n",vinfo.bits_per_pixel); printf("line = %d\n",finfo.line_length); printf("size = %d\n",screensize); */ // set pallette *pallsw = 0x76543210; *palmsw = 0xfedcba98; for (j=0; j<4; ++j) { y = h/2 + j*h*2; for (i=0; i<4; ++i) { x = w/2 + i*w*2; draw_box(fbp, x, y, w, h, (j<<2)+i); } } // wait for enter char buf[16]; fgets(buf,10,stdin); /* restore pallette and clear screen */ *pallsw = pl; *palmsw = pm; memset(fbp,0,screensize); munmap(fbp, screensize); close(fbfd); return 0; }