Преглед на файлове

make keymap work with Instant Play

Signed-off-by: Michel-FK <michel.stempin@funkey-project.com>
Michel-FK преди 3 години
родител
ревизия
240b8fea15

+ 107 - 8
FunKey/board/funkey/rootfs-overlay/usr/local/sbin/keymap

@@ -1,14 +1,113 @@
 #!/bin/sh
 
-# Check number of args
-if [ ${#} -ne 1 ]; then
-    echo "Usage: $(basename ${0}) keymap_file"
+# Uncomment the following line to get debug info
+#set -x
+
+SELF=$(basename ${0})
+LAST_MAPPING="/mnt/FunKey/.last_mapping.key"
+FIFO="/tmp/fkgpiod.fifo"
+
+usage() {
+    echo "Usage: ${SELF} default"
+    echo "       ${SELF} load <config_file>"
+    echo "       ${SELF} resume"
+    echo "       ${SELF} rom <rom_path>"
+    echo "       ${SELF} save <config_file>"
     exit 1
+}
+
+log() {
+    logger -t "${SELF}[$$]" "$*"
+}
+
+write_fifo() {
+    echo "${1}" >"${FIFO}" 2>/dev/null
+}
+
+# Check number of args
+if [ ${#} -lt 1 ]; then
+    usage
 fi
-if [ "${1}" = "reset" ]; then
-    keymap_file="/etc/fkgpiod.conf"
-else
-    keymap_file="${1}"
+
+# Create FIFO it it does not exist yet
+if [ ! -p "${FIFO}" ]; then
+    rm -f "${FIFO}"
+    log "FIFO does not exist, create it"
+    mkfifo "${FIFO}"
+    chmod 0640 "${FIFO}"
 fi
-echo "LOAD ${keymap_file}" >/tmp/fkgpiod.fifo 2>/dev/null
+
+case "${1}" in
+    default)
+	if [ ${#} -ne 1 ]; then
+	    usage
+	fi
+	log "default: LOAD /etc/fkgpiod.conf"
+	write_fifo "LOAD /etc/fkgpiod.conf"
+	;;
+
+    load)
+	if [ ${#} -ne 2 ]; then
+	    usage
+	fi
+	config_file="${2}"
+	log "load: LOAD ${config_file}"
+	write_fifo "LOAD ${config_file}"
+	log "load: SAVE ${LAST_MAPPING}"
+	write_fifo "SAVE ${LAST_MAPPING}"
+	;;
+
+    resume)
+	if [ ${#} -ne 1 ]; then
+	    usage
+	fi
+	if [ -f "${LAST_MAPPING}" ]; then
+	    log "resume: LOAD ${LAST_MAPPING}"
+	    write_fifo "LOAD ${LAST_MAPPING}"
+	fi
+	;;
+
+    rom)
+	if [ ${#} -gt 2 ]; then
+	    usage
+	elif [ ${#} -eq 1 ]; then
+	    console_keymap=""
+	    rom_keymap=""
+	else
+	    rom_path="${2}"
+	    console_keymap="$(dirname "${rom_path}")/default_config.key"
+	    rom_keymap="${rom_path%.*}.key"
+	fi
+	if [ -f "${console_keymap}" ]; then
+	    log "rom: LOAD ${console_keymap}"
+	    write_fifo "LOAD ${console_keymap}"
+	fi
+	for desktop_file in $(ls /opk/*.desktop 2>/dev/null); do
+	    opk_keymap=$(grep FK-Keymap= "${desktop_file}" | cut -d '=' -f 2)
+	    if [ -f "${opk_keymap}" ]; then
+		log "rom: LOAD ${opk_keymap}"
+	       	write_fifo "LOAD ${opk_keymap}"
+	    fi
+	done
+	if [ -f "${rom_keymap}" ]; then
+	    log "rom: LOAD ${rom_keymap}"
+	    write_fifo "LOAD ${rom_keymap}"
+	fi
+	log "rom: SAVE ${LAST_MAPPING}"
+	write_fifo "SAVE ${LAST_MAPPING}"
+	;;
+
+    save)
+	if [ ${#} -ne 2 ]; then
+	    usage
+	fi
+	config_file="${2}"
+	log "save: SAVE ${config_file}"
+	write_fifo "SAVE ${config_file}"
+	;;
+
+    *)
+	usage
+	;;
+esac
 exit 0

+ 3 - 1
FunKey/board/funkey/rootfs-overlay/usr/local/sbin/start_launcher

@@ -22,11 +22,13 @@ cp "/usr/games/lynxboot.img" "/usr/games/mednafen-09x.cfg" "${MEDNAFEN_HOME}/"
 
 # Launch Previous Game if any
 if [ -f "${INSTANT_PLAY_FILE}" ]; then
+    keymap resume
     echo "Found Instant Play file, restarting previous game with command: "$(head -n 1 "${INSTANT_PLAY_FILE}")
     rm -f "${RESUME_PLAY_FILE}"
     mv "${INSTANT_PLAY_FILE}" "${RESUME_PLAY_FILE}"
     source "${RESUME_PLAY_FILE}"
     rm -f "${RESUME_PLAY_FILE}"
+    keymap default
     termfix_all
 fi
 
@@ -64,7 +66,7 @@ while true; do
 		termfix_all
 
 		# In case retrofe/opkrun quits with errors, reset default key mapping
-		keymap reset
+		keymap default
     fi
 
     # WD to prevent 100% CPU

+ 1 - 1
FunKey/package/fkgpiod/fkgpiod.mk

@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-FKGPIOD_VERSION = fkgpiod-FunKey-1.0.0
+FKGPIOD_VERSION = 20b1a37
 FKGPIOD_SITE_METHOD = git
 FKGPIOD_SITE = https://github.com/FunKey-Project/fkgpiod.git
 FKGPIOD_SITE_LICENSE = GPL-2.1+

+ 1 - 1
FunKey/package/libopk/libopk.mk

@@ -3,7 +3,7 @@
 # libopk
 #
 #############################################################
-LIBOPK_VERSION = libopk-FunKey-1.0.2
+LIBOPK_VERSION = 4ad3eb6
 LIBOPK_SITE_METHOD = git
 LIBOPK_SITE = https://github.com/FunKey-Project/libopk.git
 

+ 1 - 1
FunKey/package/retrofe/retrofe.mk

@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-RETROFE_VERSION = RetroFE-FunKey-1.1.2
+RETROFE_VERSION = 9a9989d
 RETROFE_SITE_METHOD = git
 RETROFE_SITE = https://github.com/FunKey-Project/RetroFE.git
 RETROFE_DEPENDENCIES = gstreamer1 gst1-plugins-base sdl sdl_image sdl_mixer sdl_sound sdl_ttf libglib2 sqlite zlib

+ 1 - 1
Recovery/package/fkgpiod/fkgpiod.mk

@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-FKGPIOD_VERSION = e74f688
+FKGPIOD_VERSION = 20b1a37
 FKGPIOD_SITE_METHOD = git
 FKGPIOD_SITE = https://github.com/FunKey-Project/fkgpiod.git
 FKGPIOD_SITE_LICENSE = GPL-2.1+