raspberry pi port
[gpsp.git] / raspberrypi / rpi.c
CommitLineData
ffa573f8
D
1/* gameplaySP - raspberry backend
2 *
3 * Copyright (C) 2013 DPR <pribyl.email@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of
8 * the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include "../common.h"
21#include <sys/types.h>
22#include <sys/stat.h>
23#include "gles_video.h"
24#include "rpi.h"
25#include "bcm_host.h"
26
27u32 gamepad_config_map[PLAT_BUTTON_COUNT] =
28{
29 BUTTON_ID_UP, // Up
30 BUTTON_ID_LEFT, // Left
31 BUTTON_ID_DOWN, // Down
32 BUTTON_ID_RIGHT, // Right
33 BUTTON_ID_START, // Start
34 BUTTON_ID_SELECT, // Select
35 BUTTON_ID_L, // Ltrigger
36 BUTTON_ID_R, // Rtrigger
37 BUTTON_ID_FPS, // A
38 BUTTON_ID_A, // B
39 BUTTON_ID_B, // X
40 BUTTON_ID_MENU, // Y
41 BUTTON_ID_SAVESTATE, // 1
42 BUTTON_ID_LOADSTATE, // 2
43 BUTTON_ID_FASTFORWARD, // 3
44 BUTTON_ID_NONE, // 4
45 BUTTON_ID_MENU // Space
46};
47
48
49#define MAX_VIDEO_MEM (480*270*2)
50static int video_started=0;
51static uint16_t * video_buff;
52
53
54void gpsp_plat_init(void)
55{
56 int ret, w, h, fd;
57 //const char *layer_fb_name;
58 SDL_Surface* myVideoSurface;
59
60 bcm_host_init();
61
62 ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE);
63 if (ret != 0) {
64 fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
65 exit(1);
66 }
67
68 myVideoSurface = SDL_SetVideoMode( 0, 0, 16, SDL_SWSURFACE);
69 // Print out some information about the video surface
70 if (myVideoSurface == NULL) {
71 fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
72 exit(1);
73 }
74 SDL_ShowCursor(0);
75 fb_set_mode(240, 160, 0, 0, 0, 0);
76 screen_scale = 3;
77}
78
79void gpsp_plat_quit(void)
80{
81 if (video_started) {
82 video_close();
83 free(video_buff);
84 video_started=0;
85 }
86 SDL_Quit();
87}
88
89
90void *fb_flip_screen(void)
91{
92 video_draw(video_buff);
93 return video_buff;
94}
95
96void fb_wait_vsync(void)
97{
98}
99
100void fb_set_mode(int w, int h, int buffers, int scale,int filter, int filter2)
101{
102 if (video_started) {
103 video_close();
104 free(video_buff);
105 }
106 video_buff=malloc(w*h*sizeof(uint16_t));
107 memset(video_buff,0,w*h*sizeof(uint16_t));
108 video_init(w,h,filter);
109 video_started=1;
110}
111// vim:shiftwidth=2:expandtab