\r
#include <pico/pico_int.h>\r
\r
+#define LAYER_MEM_SIZE (320*240*2 * 4)\r
+\r
static struct vout_fbdev *main_fb, *layer_fb;\r
// g_layer_* - in use, g_layer_c* - configured custom\r
int g_layer_cx, g_layer_cy, g_layer_cw, g_layer_ch;\r
{ 0, 0, 0 }\r
};\r
\r
+static const struct menu_keymap key_pbtn_map[] =\r
+{\r
+ { KEY_UP, PBTN_UP },\r
+ { KEY_DOWN, PBTN_DOWN },\r
+ { KEY_LEFT, PBTN_LEFT },\r
+ { KEY_RIGHT, PBTN_RIGHT },\r
+ /* Pandora */\r
+ { KEY_END, PBTN_MOK },\r
+ { KEY_PAGEDOWN, PBTN_MBACK },\r
+ { KEY_HOME, PBTN_MA2 },\r
+ { KEY_PAGEUP, PBTN_MA3 },\r
+ { KEY_LEFTCTRL, PBTN_MENU },\r
+ { KEY_RIGHTSHIFT, PBTN_L },\r
+ { KEY_RIGHTCTRL, PBTN_R },\r
+ /* "normal" keyboards */\r
+ { KEY_ENTER, PBTN_MOK },\r
+ { KEY_ESC, PBTN_MBACK },\r
+ { KEY_SEMICOLON, PBTN_MA2 },\r
+ { KEY_APOSTROPHE, PBTN_MA3 },\r
+ { KEY_BACKSLASH, PBTN_MENU },\r
+ { KEY_LEFTBRACE, PBTN_L },\r
+ { KEY_RIGHTBRACE, PBTN_R },\r
+};\r
+\r
+static const struct in_pdata pandora_evdev_pdata = {\r
+ .defbinds = in_evdev_defbinds,\r
+ .key_map = key_pbtn_map,\r
+ .kmap_size = sizeof(key_pbtn_map) / sizeof(key_pbtn_map[0]),\r
+};\r
+\r
void pemu_prep_defconfig(void)\r
{\r
defaultConfig.EmuOpt |= EOPT_VSYNC|EOPT_16BPP;\r
currentConfig.CPUclock = plat_target_cpu_clock_get();\r
}\r
\r
-static void osd_text(int x, int y, const char *text)\r
-{\r
- int len = strlen(text)*8;\r
- int i, h;\r
-\r
- len++;\r
- if (x + len > g_screen_width)\r
- len = g_screen_width - x;\r
-\r
- for (h = 0; h < 8; h++) {\r
- unsigned short *p;\r
- p = (unsigned short *)g_screen_ptr + x + g_screen_width*(y + h);\r
- for (i = len; i > 0; i--, p++)\r
- *p = (*p>>2) & 0x39e7;\r
- }\r
- emu_text_out16(x, y, text);\r
-}\r
-\r
static void draw_cd_leds(void)\r
{\r
int old_reg;\r
void pemu_finalize_frame(const char *fps, const char *notice)\r
{\r
if (notice && notice[0])\r
- osd_text(2, g_osd_y, notice);\r
+ emu_osd_text16(2, g_osd_y, notice);\r
if (fps && fps[0] && (currentConfig.EmuOpt & EOPT_SHOW_FPS))\r
- osd_text(g_osd_fps_x, g_osd_y, fps);\r
+ emu_osd_text16(g_osd_fps_x, g_osd_y, fps);\r
if ((PicoAHW & PAHW_MCD) && (currentConfig.EmuOpt & EOPT_EN_CD_LEDS))\r
draw_cd_leds();\r
}\r
{\r
struct omapfb_plane_info pi;\r
struct omapfb_mem_info mi;\r
+ int is_enabled;\r
+ int retval = 0;\r
int ret;\r
\r
ret = ioctl(fd, OMAPFB_QUERY_PLANE, &pi);\r
}\r
\r
/* must disable when changing stuff */\r
- if (pi.enabled) {\r
+ is_enabled = pi.enabled;\r
+ if (is_enabled) {\r
pi.enabled = 0;\r
ret = ioctl(fd, OMAPFB_SETUP_PLANE, &pi);\r
if (ret != 0)\r
perror("SETUP_PLANE");\r
+ else\r
+ is_enabled = 0;\r
}\r
\r
- mi.size = 320*240*2*4;\r
- ret = ioctl(fd, OMAPFB_SETUP_MEM, &mi);\r
- if (ret != 0) {\r
- perror("SETUP_MEM");\r
- return -1;\r
+ if (mi.size < LAYER_MEM_SIZE) {\r
+ unsigned int size_old = mi.size;\r
+\r
+ mi.size = LAYER_MEM_SIZE;\r
+ ret = ioctl(fd, OMAPFB_SETUP_MEM, &mi);\r
+ if (ret != 0) {\r
+ perror("SETUP_MEM");\r
+ fprintf(stderr, "(requested %u, had %u)\n",\r
+ mi.size, size_old);\r
+ return -1;\r
+ }\r
}\r
\r
pi.pos_x = x;\r
pi.enabled = enabled;\r
\r
ret = ioctl(fd, OMAPFB_SETUP_PLANE, &pi);\r
- if (ret != 0) {\r
+ if (ret == 0) {\r
+ is_enabled = pi.enabled;\r
+ }\r
+ else {\r
perror("SETUP_PLANE");\r
- return -1;\r
+ retval = -1;\r
}\r
\r
- return 0;\r
+ plat_target_switch_layer(1, is_enabled);\r
+\r
+ return retval;\r
}\r
\r
int pnd_setup_layer(int enabled, int x, int y, int w, int h)\r
\r
pnd_menu_init();\r
\r
- in_evdev_init(in_evdev_defbinds);\r
+ // default ROM path\r
+ strcpy(rom_fname_loaded, "/media");\r
+\r
+ in_evdev_init(&pandora_evdev_pdata);\r
in_probe();\r
plat_target_setup_input();\r
\r