Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 33 additions & 34 deletions main-ui/devices/gkd/gkd_device.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import re
import socket
import subprocess
from apps.miyoo.miyoo_app_finder import MiyooAppFinder
from controller.controller_inputs import ControllerInput
from controller.sdl.sdl2_controller_interface import Sdl2ControllerInterface
Expand All @@ -18,7 +16,7 @@
from utils.logger import PyUiLogger

class GKDDevice(DeviceCommon):

def __init__(self):
self.button_remapper = ButtonRemapper(self.system_config)
self.game_utils = MiyooTrimGameSystemUtils()
Expand All @@ -44,31 +42,31 @@ def capture_framebuffer(self):

def restore_framebuffer(self):
pass

def power_off_cmd(self):
return "poweroff"

def reboot_cmd(self):
return "reboot"

def _set_lumination_to_config(self):
with open("/sys/class/backlight/backlight/brightness", "w") as f:
f.write(str(self.map_backlight_from_10_to_full_255(self.system_config.backlight)))

def _set_contrast_to_config(self):
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
"179:contrast:"+str(self.system_config.contrast * 5)])

def _set_saturation_to_config(self):
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
"179:saturation:"+str(self.system_config.saturation * 5)])

def _set_brightness_to_config(self):
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
"179:brightness:"+str(self.system_config.brightness * 5)])

def _set_hue_to_config(self):
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
ProcessRunner.run(["modetest", "-M", "rockchip", "-a", "-w",
"179:hue:"+str(self.system_config.hue * 5)])

def get_volume(self):
Expand All @@ -78,13 +76,12 @@ def sleep(self):
# system handles this, not sure if implementing
pass


def run_game(self, rom_info):
return MiyooTrimCommon.run_game(self, rom_info)

def run_cmd(self, args, dir = None, is_power_cmd = False):
MiyooTrimCommon.run_cmd(self, args, dir, is_power_cmd)

def run_app(self, folder,launch):
MiyooTrimCommon.run_app(self, folder,launch)

Expand All @@ -93,7 +90,7 @@ def map_digital_input(self, sdl_input):
if(ControllerInput.UNKNOWN == mapping):
PyUiLogger.get_logger().error(f"Unknown input {sdl_input}")
return mapping

def map_key(self, key_code):
if(116 == key_code):
return ControllerInput.POWER_BUTTON
Expand All @@ -105,7 +102,6 @@ def map_key(self, key_code):
PyUiLogger.get_logger().debug(f"Unrecognized keycode {key_code}")
return None


def special_input(self, controller_input, length_in_seconds):
if(ControllerInput.POWER_BUTTON == controller_input):
if(length_in_seconds < 1):
Expand Down Expand Up @@ -166,8 +162,13 @@ def get_ip_addr_text(self):
return "No USB adapter"

try:
wlan_addrs = psutil.net_if_addrs().get("wlan0")
eth_addrs = psutil.net_if_addrs().get("eth0")
all_addrs = psutil.net_if_addrs()
for k in all_addrs.keys():
if k.startswith("wlan"):
wlan_addrs = all_addrs.get(k)
break

eth_addrs = all_addrs.get("eth0")

wlan_addrs = wlan_addrs if wlan_addrs else []
eth_addrs = eth_addrs if eth_addrs else []
Expand All @@ -189,16 +190,15 @@ def disable_wifi(self):
self.system_config.reload_config()
self.system_config.set_wifi(0)
self.system_config.save_config()
ProcessRunner.run(["connmanctl", "disable", "wifi"])
ProcessRunner.run(["rfkill", "block", "wifi"])
self.get_wifi_status.force_refresh()
self.get_ip_addr_text.force_refresh()

def enable_wifi(self):
self.system_config.reload_config()
self.system_config.set_wifi(1)
self.system_config.save_config()
ProcessRunner.run(["systemctl", "restart", "connman"])
ProcessRunner.run(["connmanctl", "enable", "wifi"])
ProcessRunner.run(["rfkill", "unblock", "wifi"])
self.get_wifi_status.force_refresh()
self.get_ip_addr_text.force_refresh()

Expand All @@ -207,31 +207,30 @@ def get_charge_status(self):
#Probably need to find the power and not just usb
with open("/sys/class/power_supply/usb/online", "r") as f:
ac_online = int(f.read().strip())

if(ac_online):
return ChargeStatus.CHARGING
else:
return ChargeStatus.DISCONNECTED

@throttle.limit_refresh(15)
def get_battery_percent(self):
with open("/sys/class/power_supply/battery/capacity", "r") as f:
return int(f.read().strip())
return int(f.read().strip())
return 0

def get_app_finder(self):
return MiyooAppFinder()

def parse_favorites(self) -> list[GameEntry]:
return self.miyoo_games_file_parser.parse_favorites()

def parse_recents(self) -> list[GameEntry]:
return self.miyoo_games_file_parser.parse_recents()

def is_bluetooth_enabled(self):
return False



def disable_bluetooth(self):
pass

Expand All @@ -246,10 +245,10 @@ def get_bluetooth_scanner(self):

def get_favorites_path(self):
return "/mnt/SDCARD/Saves/pyui-favorites.json"

def get_recents_path(self):
return "/mnt/SDCARD/Saves/pyui-recents.json"

def get_apps_config_path(self):
return "/mnt/SDCARD/Saves/pyui-apps.json"

Expand All @@ -276,16 +275,16 @@ def remap_buttons(self):

def supports_wifi(self):
return True

def get_game_system_utils(self):
return self.game_utils

def get_roms_dir(self):
return "/mnt/SDCARD/Roms/"

def take_snapshot(self, path):
return None

def supports_brightness_calibration():
return True

Expand Down Expand Up @@ -320,4 +319,4 @@ def check_for_button_remap(self, input):

@throttle.limit_refresh(1)
def post_present_operations(self):
self.clear_display_cache_if_memory_full("MemAvailable", 100)
self.clear_display_cache_if_memory_full("MemAvailable", 100)
64 changes: 30 additions & 34 deletions main-ui/devices/gkd/gkd_pixel2.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from pathlib import Path
import os
import subprocess
import threading
from audio.audio_player_delegate_sdl2 import AudioPlayerDelegateSdl2
from controller.controller_inputs import ControllerInput
Expand All @@ -10,16 +9,14 @@
from controller.key_watcher_controller_dataclasses import InputResult, KeyEvent
from devices.miyoo.miyoo_games_file_parser import MiyooGamesFileParser
from devices.gkd.gkd_device import GKDDevice
from devices.gkd.connman_wifi_scanner import ConnmanWiFiScanner
from devices.gkd.connman_wifi_menu import ConnmanWifiMenu
from devices.gkd.nm_wifi_scanner import NmWiFiScanner
from devices.gkd.nm_wifi_menu import NmWifiMenu
from devices.std_in_based_send_event_binary_helper import StdInBasedSendEventBinaryHelper
from devices.utils.file_watcher import FileWatcher
from devices.utils.process_runner import ProcessRunner
from menus.settings.timezone_menu import TimezoneMenu
from utils import throttle

from utils.ffmpeg_image_utils import FfmpegImageUtils
from utils.logger import PyUiLogger
from utils.py_ui_config import PyUiConfig

class GKDPixel2(GKDDevice):
Expand All @@ -31,7 +28,7 @@ def __init__(self, device_name, main_ui_mode):
self._load_system_config("/mnt/SDCARD/Saves/gkd-pixel2-system.json", source)

if(main_ui_mode):
self.miyoo_games_file_parser = MiyooGamesFileParser()
self.miyoo_games_file_parser = MiyooGamesFileParser()
threading.Thread(target=self.monitor_wifi, daemon=True).start()
threading.Thread(target=self.startup_init, daemon=True).start()
self.config_watcher_thread, self.config_watcher_thread_stop_event = FileWatcher().start_file_watcher(
Expand All @@ -48,17 +45,16 @@ def __init__(self, device_name, main_ui_mode):
power_key_polling_thread = threading.Thread(target=self.power_key_watcher.poll_keyboard, daemon=True)
power_key_polling_thread.start()
# Done to try to account for external systems editting the config file

super().__init__()


def startup_init(self, include_wifi=True):
self._set_lumination_to_config()
self._set_contrast_to_config()
self._set_saturation_to_config()
self._set_brightness_to_config()
self._set_hue_to_config()

#Untested
@throttle.limit_refresh(5)
def is_hdmi_connected(self):
Expand All @@ -84,7 +80,7 @@ def get_scale_factor(self):
return 2.25
else:
return 1

def supports_brightness_calibration(self):
return False

Expand All @@ -102,15 +98,15 @@ def get_image_utils(self):


def get_controller_interface(self):
key_mappings = {}
key_mappings = {}
key_mappings[KeyEvent(1, 304, 0)] = [InputResult(ControllerInput.B, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 304, 1)] = [InputResult(ControllerInput.B, KeyState.PRESS)]
key_mappings[KeyEvent(1, 305, 0)] = [InputResult(ControllerInput.A, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 305, 1)] = [InputResult(ControllerInput.A, KeyState.PRESS)]
key_mappings[KeyEvent(1, 307, 0)] = [InputResult(ControllerInput.X, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 307, 1)] = [InputResult(ControllerInput.X, KeyState.PRESS)]
key_mappings[KeyEvent(1, 308, 0)] = [InputResult(ControllerInput.Y, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 308, 1)] = [InputResult(ControllerInput.Y, KeyState.PRESS)]
key_mappings[KeyEvent(1, 305, 0)] = [InputResult(ControllerInput.A, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 305, 1)] = [InputResult(ControllerInput.A, KeyState.PRESS)]
key_mappings[KeyEvent(1, 307, 0)] = [InputResult(ControllerInput.X, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 307, 1)] = [InputResult(ControllerInput.X, KeyState.PRESS)]
key_mappings[KeyEvent(1, 308, 0)] = [InputResult(ControllerInput.Y, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 308, 1)] = [InputResult(ControllerInput.Y, KeyState.PRESS)]

key_mappings[KeyEvent(1, 544, 1)] = [InputResult(ControllerInput.DPAD_UP, KeyState.PRESS)]
key_mappings[KeyEvent(1, 544, 0)] = [InputResult(ControllerInput.DPAD_UP, KeyState.RELEASE)]
Expand All @@ -121,35 +117,35 @@ def get_controller_interface(self):
key_mappings[KeyEvent(1, 547, 1)] = [InputResult(ControllerInput.DPAD_RIGHT, KeyState.PRESS)]
key_mappings[KeyEvent(1, 547, 0)] = [InputResult(ControllerInput.DPAD_RIGHT, KeyState.RELEASE)]

key_mappings[KeyEvent(1, 310, 1)] = [InputResult(ControllerInput.L1, KeyState.PRESS)]
key_mappings[KeyEvent(1, 310, 0)] = [InputResult(ControllerInput.L1, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 312, 1)] = [InputResult(ControllerInput.L2, KeyState.PRESS)]
key_mappings[KeyEvent(1, 312, 0)] = [InputResult(ControllerInput.L2, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 310, 1)] = [InputResult(ControllerInput.L1, KeyState.PRESS)]
key_mappings[KeyEvent(1, 310, 0)] = [InputResult(ControllerInput.L1, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 312, 1)] = [InputResult(ControllerInput.L2, KeyState.PRESS)]
key_mappings[KeyEvent(1, 312, 0)] = [InputResult(ControllerInput.L2, KeyState.RELEASE)]

key_mappings[KeyEvent(1, 311, 1)] = [InputResult(ControllerInput.R1, KeyState.PRESS)]
key_mappings[KeyEvent(1, 311, 0)] = [InputResult(ControllerInput.R1, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 313, 1)] = [InputResult(ControllerInput.R2, KeyState.PRESS)]
key_mappings[KeyEvent(1, 313, 0)] = [InputResult(ControllerInput.R2, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 311, 1)] = [InputResult(ControllerInput.R1, KeyState.PRESS)]
key_mappings[KeyEvent(1, 311, 0)] = [InputResult(ControllerInput.R1, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 313, 1)] = [InputResult(ControllerInput.R2, KeyState.PRESS)]
key_mappings[KeyEvent(1, 313, 0)] = [InputResult(ControllerInput.R2, KeyState.RELEASE)]

key_mappings[KeyEvent(1, 315, 1)] = [InputResult(ControllerInput.START, KeyState.PRESS)]
key_mappings[KeyEvent(1, 315, 1)] = [InputResult(ControllerInput.START, KeyState.PRESS)]
key_mappings[KeyEvent(1, 315, 0)] = [InputResult(ControllerInput.START, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 314, 1)] = [InputResult(ControllerInput.SELECT, KeyState.PRESS)]
key_mappings[KeyEvent(1, 314, 1)] = [InputResult(ControllerInput.SELECT, KeyState.PRESS)]
key_mappings[KeyEvent(1, 314, 0)] = [InputResult(ControllerInput.SELECT, KeyState.RELEASE)]

key_mappings[KeyEvent(1, 704, 1)] = [InputResult(ControllerInput.MENU, KeyState.PRESS)]
key_mappings[KeyEvent(1, 704, 0)] = [InputResult(ControllerInput.MENU, KeyState.RELEASE)]
key_mappings[KeyEvent(1, 704, 0)] = [InputResult(ControllerInput.MENU, KeyState.RELEASE)]

return KeyWatcherController(event_path="/dev/input/event2", mapping_provider=DictKeyMappingProvider(key_mappings))

def get_device_name(self):
return self.device_name

def get_audio_system(self):
return self.audio_player

def get_core_name_overrides(self, core_name):
return [core_name, core_name+"-64"]

def supports_timezone_setting(self):
return True

Expand All @@ -174,10 +170,10 @@ def might_require_surface_format_conversion(self):
return True # RA save state images don't seem to load w/o conversion?

def get_wifi_menu(self):
return ConnmanWifiMenu()
return NmWifiMenu()

def get_new_wifi_scanner(self):
return ConnmanWiFiScanner()
return NmWiFiScanner()

def volume_up(self):
StdInBasedSendEventBinaryHelper.send_key_down_and_up("/dev/input/event1",115)
Expand Down
Loading