X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fplat_pandora.c;h=b6447cf9703c73d828a2bf97178b9605b8001e48;hp=2522b0b066a910cefb198dbafaa480e51c8f80c8;hb=d81b8e972678928ffece2d38213de8048f5e872d;hpb=b07c18e8645a17be916266820ae564e0d320cc1a diff --git a/frontend/plat_pandora.c b/frontend/plat_pandora.c index 2522b0b0..b6447cf9 100644 --- a/frontend/plat_pandora.c +++ b/frontend/plat_pandora.c @@ -14,12 +14,16 @@ #include #include #include +#include #include #include "common/input.h" +#include "linux/in_evdev.h" #include "plugin_lib.h" #include "plat.h" +#include "plat_omap.h" #include "main.h" +#include "menu.h" static const char * const pandora_gpio_keys[KEY_MAX + 1] = { [0 ... KEY_MAX] = NULL, @@ -53,7 +57,7 @@ static const struct in_default_bind in_evdev_defbinds[] = { { KEY_RIGHTCTRL, IN_BINDTYPE_PLAYER12, DKEY_R1 }, { KEY_Q, IN_BINDTYPE_PLAYER12, DKEY_L2 }, { KEY_P, IN_BINDTYPE_PLAYER12, DKEY_R2 }, - { KEY_TAB, IN_BINDTYPE_EMU, SACTION_MINIMIZE }, + { KEY_MENU, IN_BINDTYPE_EMU, SACTION_MINIMIZE }, { KEY_SPACE, IN_BINDTYPE_EMU, SACTION_ENTER_MENU }, { KEY_1, IN_BINDTYPE_EMU, SACTION_SAVE_STATE }, { KEY_2, IN_BINDTYPE_EMU, SACTION_LOAD_STATE }, @@ -61,22 +65,152 @@ static const struct in_default_bind in_evdev_defbinds[] = { { KEY_4, IN_BINDTYPE_EMU, SACTION_NEXT_SSLOT }, { KEY_5, IN_BINDTYPE_EMU, SACTION_TOGGLE_FSKIP }, { KEY_6, IN_BINDTYPE_EMU, SACTION_SCREENSHOT }, + { KEY_7, IN_BINDTYPE_EMU, SACTION_TOGGLE_RENDERER }, { 0, 0, 0 } }; -int plat_pandora_init(void) +static const char pnd_script_base[] = "sudo -n /usr/pandora/scripts"; +static char **pnd_filter_list; + +static void scan_for_filters(void) +{ + struct dirent *ent; + int i, count = 0; + char **mfilters; + char buff[64]; + DIR *dir; + + dir = opendir("/etc/pandora/conf/dss_fir"); + if (dir == NULL) { + perror("filter opendir"); + return; + } + + while (1) { + errno = 0; + ent = readdir(dir); + if (ent == NULL) { + if (errno != 0) + perror("readdir"); + break; + } + + if (ent->d_type != DT_REG && ent->d_type != DT_LNK) + continue; + + count++; + } + + if (count == 0) + return; + + mfilters = calloc(count + 1, sizeof(mfilters[0])); + if (mfilters == NULL) + return; + + rewinddir(dir); + for (i = 0; (ent = readdir(dir)); ) { + size_t len; + + if (ent->d_type != DT_REG && ent->d_type != DT_LNK) + continue; + + len = strlen(ent->d_name); + + // skip pre-HF5 extra files + if (len >= 3 && strcmp(ent->d_name + len - 3, "_v3") == 0) + continue; + if (len >= 3 && strcmp(ent->d_name + len - 3, "_v5") == 0) + continue; + + // have to cut "_up_h" for pre-HF5 + if (len > 5 && strcmp(ent->d_name + len - 5, "_up_h") == 0) + len -= 5; + + if (len > sizeof(buff) - 1) + continue; + + strncpy(buff, ent->d_name, len); + buff[len] = 0; + mfilters[i] = strdup(buff); + if (mfilters[i] != NULL) + i++; + } + closedir(dir); + + pnd_filter_list = mfilters; + menu_set_filter_list((void *)mfilters); +} + +int plat_init(void) { + int gpiokeys_id; + + plat_omap_init(); + in_evdev_init(in_evdev_defbinds); in_probe(); - in_set_config(in_name_to_id("evdev:gpio-keys"), IN_CFG_KEY_NAMES, + gpiokeys_id = in_name_to_id("evdev:gpio-keys"); + in_set_config(gpiokeys_id, IN_CFG_KEY_NAMES, pandora_gpio_keys, sizeof(pandora_gpio_keys)); + in_set_config(gpiokeys_id, IN_CFG_DEFAULT_DEV, NULL, 0); in_adev[0] = in_name_to_id("evdev:nub0"); in_adev[1] = in_name_to_id("evdev:nub1"); + scan_for_filters(); + return 0; } -static const char pnd_script_base[] = "sudo -n /usr/pandora/scripts"; +void plat_finish(void) +{ + plat_omap_finish(); +} + +static void apply_lcdrate(int pal) +{ + char buf[128]; + + snprintf(buf, sizeof(buf), "%s/op_lcdrate.sh %d", + pnd_script_base, pal ? 50 : 60); + system(buf); +} + +static void apply_filter(int which) +{ + char buf[128]; + int i; + + if (pnd_filter_list == NULL) + return; + + for (i = 0; i < which; i++) + if (pnd_filter_list[i] == NULL) + return; + + if (pnd_filter_list[i] == NULL) + return; + + snprintf(buf, sizeof(buf), "%s/op_videofir.sh %s", + pnd_script_base, pnd_filter_list[i]); + system(buf); +} + +void plat_gvideo_open(int is_pal) +{ + static int old_pal = -1, old_filter = -1; + + if (is_pal != old_pal) { + apply_lcdrate(is_pal); + old_pal = is_pal; + } + if (filter != old_filter) { + apply_filter(filter); + old_filter = filter; + } + + plat_omap_gvideo_open(); +} int plat_cpu_clock_get(void) { @@ -113,3 +247,12 @@ int plat_get_bat_capacity(void) } return ret; } + +void plat_step_volume(int is_up) +{ +} + +void plat_trigger_vibrate(int is_strong) +{ +} +