view TaskManager/Test/simple_pack/fb.cpp @ 78:3c6dec161ade

*** empty log message ***
author chiaki
date Tue, 19 Feb 2008 15:49:40 +0900
parents
children 4d6bd3c0d90b
line wrap: on
line source

#include <iostream>
#include <SDL.h>
#include <SDL_opengl.h>
#include <math.h>
#include <unistd.h>
#include "polygon.h"
#include "viewer.h"
#include "sys.h"
using namespace std;

void cleanup_fbdev() {
  munmap(fbptr, screensize);
  close(fd_framebuffer);
}

void send_current_error_msg(char *ptr) {
  fprintf( stderr, "%s\n", ptr);
}

void send_current_information(char *ptr) {
  fprintf( stdout, "%s\n", ptr);
}

int get_fbdev_addr(void) {
  struct fb_var_screeninfo vinfo;
  struct fb_fix_screeninfo finfo;
  char tmp[DIV_BYTE*10];

  int xres,yres, vbpp, line_len;

  /* open the file only for read */
  fd_framebuffer = open( DEVICE_NAME, O_RDWR);
  if( !fd_framebuffer ) {
    send_current_error_msg("Framebuffer device open error\n");
    exit(1);
  }
  send_current_information("The framebuffer device was opened\n");

  /* Get the fixed screen info */
  if( ioctl( fd_framebuffer, FBIOGET_FSCREENINFO, &finfo) ) {
    send_current_error_msg("Fixed information not gotton !");
    exit(2);
  }

  /* Get the flucture screen info */
  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 );

  /* calcurate screen size per byte */
  screensize = xres * yres * vbpp / DIV_BYTE;

  /* mapping device to memory */
  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("fbptr:%x\n",(unsigned int)fbptr);
  //munmap(fbptr, screensize);
  //close(fd_framebuffer);
  return (unsigned int)fbptr;
}