gpsp/raspberrypi/rpi.c

112 lines
2.9 KiB
C

/* gameplaySP - raspberry backend
*
* Copyright (C) 2013 DPR <pribyl.email@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "../common.h"
#include <sys/types.h>
#include <sys/stat.h>
#include "gles_video.h"
#include "rpi.h"
#include "bcm_host.h"
u32 gamepad_config_map[PLAT_BUTTON_COUNT] =
{
BUTTON_ID_UP, // Up
BUTTON_ID_LEFT, // Left
BUTTON_ID_DOWN, // Down
BUTTON_ID_RIGHT, // Right
BUTTON_ID_START, // Start
BUTTON_ID_SELECT, // Select
BUTTON_ID_L, // Ltrigger
BUTTON_ID_R, // Rtrigger
BUTTON_ID_FPS, // A
BUTTON_ID_A, // B
BUTTON_ID_B, // X
BUTTON_ID_MENU, // Y
BUTTON_ID_SAVESTATE, // 1
BUTTON_ID_LOADSTATE, // 2
BUTTON_ID_FASTFORWARD, // 3
BUTTON_ID_NONE, // 4
BUTTON_ID_MENU // Space
};
#define MAX_VIDEO_MEM (480*270*2)
static int video_started=0;
static uint16_t * video_buff;
void gpsp_plat_init(void)
{
int ret, w, h, fd;
//const char *layer_fb_name;
SDL_Surface* myVideoSurface;
bcm_host_init();
ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE);
if (ret != 0) {
fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
exit(1);
}
myVideoSurface = SDL_SetVideoMode( 0, 0, 16, SDL_SWSURFACE);
// Print out some information about the video surface
if (myVideoSurface == NULL) {
fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
exit(1);
}
SDL_ShowCursor(0);
fb_set_mode(240, 160, 0, 0, 0, 0);
screen_scale = 3;
}
void gpsp_plat_quit(void)
{
if (video_started) {
video_close();
free(video_buff);
video_started=0;
}
SDL_Quit();
}
void *fb_flip_screen(void)
{
video_draw(video_buff);
return video_buff;
}
void fb_wait_vsync(void)
{
}
void fb_set_mode(int w, int h, int buffers, int scale,int filter, int filter2)
{
if (video_started) {
video_close();
free(video_buff);
}
video_buff=malloc(w*h*sizeof(uint16_t));
memset(video_buff,0,w*h*sizeof(uint16_t));
video_init(w,h,filter);
video_started=1;
}
// vim:shiftwidth=2:expandtab