Mercurial > hg > Game > Cerium
view TaskManager/Test/simple_pack/fb.cpp @ 180:e3b7776b1420 draft
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
author | gongo@localhost.localdomain |
---|---|
date | Mon, 22 Dec 2008 16:09:57 +0900 |
parents | 4d6bd3c0d90b |
children |
line wrap: on
line source
/* * fbtst.c * 2006.7.19 Kensuke Ooyu */ #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <linux/fb.h> #include <linux/fs.h> #include <sys/mman.h> #include <sys/ioctl.h> #include <stdlib.h> #include <iostream> using namespace std; #define DEVICE_NAME "/dev/fb0" #define DIV_BYTE 8 #define X_PIXEL_MAX 320 #define Y_LINE_MAX 240 #define BORDER1 80 #define BORDER2 160 #define COLOR_RED 0xf800 #define COLOR_GREEN 0x07e0 #define COLOR_BLUE 0x001f #define COLOR_WHITE 0xffff #define COLOR_BLACK 0x0000 #define COLOR_YELLOW 0xffe0 /* function prototype */ void send_current_error_msg(const char *ptr); void send_current_information(const char *ptr); int get_fbdev_addr(void) { int fd_framebuffer ; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize ; long int location; char *fbptr ; char tmp[DIV_BYTE*10]; int x , y ; int xres,yres,vbpp,line_len; unsigned short tcolor ; /* 読み書き用にファイルを開く */ fd_framebuffer = open( DEVICE_NAME , O_RDWR); if ( !fd_framebuffer ) { send_current_error_msg("Framebuffer device open error !"); exit(1); } send_current_information("The framebuffer device was opened !"); /* 固定スクリーン情報取得 */ if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) { send_current_error_msg("Fixed information not gotton !"); exit(2); } /* 変動スクリーン情報取得 */ if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) { send_current_error_msg("Variable information not gotton !"); exit(3); } xres = vinfo.xres ; yres = vinfo.yres ; vbpp = vinfo.bits_per_pixel ; line_len = finfo.line_length ; sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp); send_current_information( tmp ); /* バイト単位でのスクリーンのサイズを計算 */ screensize = xres * yres * vbpp / DIV_BYTE ; /* デバイスをメモリにマップする */ fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE,MAP_SHARED,fd_framebuffer,0); if ( (int)fbptr == -1 ) { send_current_error_msg("Don't get framebuffer device to memory !"); exit(4); } send_current_information("The framebuffer device was mapped !"); printf("fb: %x \n",fbptr); return (int)fbptr; //munmap(fbptr,screensize); //close(fd_framebuffer); //return 0; } void send_current_error_msg(const char *ptr) { fprintf( stderr , "%s\n" , ptr ); } void send_current_information(const char *ptr) { fprintf( stdout , "%s\n" , ptr ); }