Update based on decky usage
This commit is contained in:
parent
6be093eec9
commit
1fbc6f1e0f
|
|
@ -13,7 +13,8 @@ DRIVER_STATE_FILE_PATH = '/dev/shm/xr_driver_state'
|
||||||
|
|
||||||
CONTROL_FLAGS = ['recenter_screen', 'recalibrate', 'sbs_mode', 'refresh_device_license']
|
CONTROL_FLAGS = ['recenter_screen', 'recalibrate', 'sbs_mode', 'refresh_device_license']
|
||||||
SBS_MODE_VALUES = ['unset', 'enable', 'disable']
|
SBS_MODE_VALUES = ['unset', 'enable', 'disable']
|
||||||
KNOWN_EXTERNAL_MODES = ['virtual_display', 'sideview', 'none']
|
MANAGED_EXTERNAL_MODES = ['virtual_display', 'sideview', 'none']
|
||||||
|
VR_LITE_OUTPUT_MODES = ['mouse', 'joystick']
|
||||||
|
|
||||||
def parse_boolean(value, default):
|
def parse_boolean(value, default):
|
||||||
if not value:
|
if not value:
|
||||||
|
|
@ -63,17 +64,6 @@ class XRDriverIPC:
|
||||||
self.config_file_path = os.path.join(self.user_home, ".xreal_driver_config")
|
self.config_file_path = os.path.join(self.user_home, ".xreal_driver_config")
|
||||||
self.config_script_path = os.path.join(self.user_home, "bin/xreal_driver_config")
|
self.config_script_path = os.path.join(self.user_home, "bin/xreal_driver_config")
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
|
|
||||||
def config_to_headset_mode(self, config):
|
|
||||||
if config['disabled'] or (config['output_mode'] == "external_only" and config['external_mode'] == 'none'):
|
|
||||||
return "disabled"
|
|
||||||
if config['output_mode'] == "external_only" and config['external_mode'] != 'none':
|
|
||||||
if config['external_mode'] in KNOWN_EXTERNAL_MODES:
|
|
||||||
return config['external_mode']
|
|
||||||
|
|
||||||
return "other"
|
|
||||||
|
|
||||||
return "vr_lite"
|
|
||||||
|
|
||||||
def retrieve_config(self):
|
def retrieve_config(self):
|
||||||
config = {}
|
config = {}
|
||||||
|
|
@ -103,29 +93,14 @@ class XRDriverIPC:
|
||||||
}
|
}
|
||||||
|
|
||||||
return config
|
return config
|
||||||
|
|
||||||
def headset_mode_to_config(self, headset_mode, joystick_mode):
|
|
||||||
if headset_mode == "virtual_display":
|
|
||||||
return { 'disabled': False, 'output_mode': 'external_only', 'external_mode': 'virtual_display' }
|
|
||||||
if headset_mode == "vr_lite":
|
|
||||||
return { 'disabled': False, 'output_mode': 'joystick' if joystick_mode else 'mouse', 'external_mode': 'none' }
|
|
||||||
if headset_mode == "sideview":
|
|
||||||
return { 'disabled': False, 'output_mode': 'external_only', 'external_mode': 'sideview' }
|
|
||||||
if headset_mode == "other":
|
|
||||||
# leave external_mode unset so it doesn't override the current value
|
|
||||||
return { 'disabled': False, 'output_mode': 'external_only' }
|
|
||||||
if headset_mode == "disabled":
|
|
||||||
return { 'disabled': True, 'external_mode': 'none' }
|
|
||||||
|
|
||||||
return { }
|
async def write_config(self, config):
|
||||||
|
|
||||||
def write_config(self, config):
|
|
||||||
try:
|
try:
|
||||||
output = ""
|
output = ""
|
||||||
|
|
||||||
# remove the UI's "view" data, translate back to config values, and merge them in
|
# remove the UI's "view" data, translate back to config values, and merge them in
|
||||||
view = config.pop('ui_view', None)
|
view = config.pop('ui_view', None)
|
||||||
config.update(self.headset_mode_to_config(view['headset_mode'], view['is_joystick_mode']))
|
config.update(self.headset_mode_to_config(view['headset_mode'], view['is_joystick_mode'], config['external_mode']))
|
||||||
|
|
||||||
for key, value in config.items():
|
for key, value in config.items():
|
||||||
if key != "updated":
|
if key != "updated":
|
||||||
|
|
@ -145,10 +120,51 @@ class XRDriverIPC:
|
||||||
f.write(output)
|
f.write(output)
|
||||||
|
|
||||||
# Atomically replace the old config file with the new one
|
# Atomically replace the old config file with the new one
|
||||||
os.replace(temp_file, self.config_file_path)
|
os.replace(temp_file, CONFIG_FILE_PATH)
|
||||||
os.chmod(self.config_file_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH | stat.S_IWOTH)
|
os.chmod(CONFIG_FILE_PATH, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH | stat.S_IWOTH)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"Error writing config {e}")
|
decky_plugin.logger.error(f"Error writing config {e}")
|
||||||
|
|
||||||
|
def filter_to_other_external_modes(self, external_modes):
|
||||||
|
return [mode for mode in external_modes if mode not in MANAGED_EXTERNAL_MODES]
|
||||||
|
|
||||||
|
def headset_mode_to_config(self, headset_mode, joystick_mode, external_modes):
|
||||||
|
new_external_modes = self.filter_to_other_external_modes(external_modes)
|
||||||
|
|
||||||
|
config = {}
|
||||||
|
if headset_mode == "virtual_display":
|
||||||
|
new_external_modes.append("virtual_display")
|
||||||
|
config['output_mode'] = "external_only"
|
||||||
|
config['disabled'] = False
|
||||||
|
elif headset_mode == "vr_lite":
|
||||||
|
config['output_mode'] = "joystick" if joystick_mode else "mouse"
|
||||||
|
config['disabled'] = False
|
||||||
|
elif headset_mode == "sideview":
|
||||||
|
new_external_modes.append("sideview")
|
||||||
|
config['output_mode'] = "external_only"
|
||||||
|
config['disabled'] = False
|
||||||
|
else:
|
||||||
|
config['output_mode'] = "external_only"
|
||||||
|
|
||||||
|
has_external_mode = len(new_external_modes) > 0
|
||||||
|
if not has_external_mode:
|
||||||
|
new_external_modes.append("none")
|
||||||
|
config['external_mode'] = new_external_modes
|
||||||
|
|
||||||
|
return config
|
||||||
|
|
||||||
|
def config_to_headset_mode(self, config):
|
||||||
|
if not config or config['disabled']:
|
||||||
|
return "disabled"
|
||||||
|
|
||||||
|
if config['output_mode'] in VR_LITE_OUTPUT_MODES:
|
||||||
|
return "vr_lite"
|
||||||
|
|
||||||
|
managed_mode = next((mode for mode in MANAGED_EXTERNAL_MODES if mode in config['external_mode']), None)
|
||||||
|
if managed_mode and managed_mode != "none":
|
||||||
|
return managed_mode
|
||||||
|
|
||||||
|
return "disabled"
|
||||||
|
|
||||||
def write_control_flags(self, control_flags):
|
def write_control_flags(self, control_flags):
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue