From 51464165c15076be308937eba38d418cb8cfcf65 Mon Sep 17 00:00:00 2001 From: Marc Bonnici Date: Mon, 24 Jul 2017 17:36:02 +0100 Subject: [PATCH] RTConfig: Added android runtime config Added a runtime config for android specific settings, currently supported are screen brightness, rotation and airplane mode. --- wa/framework/target/runtime_config.py | 76 ++++++++++++++++++- .../target/runtime_parameter_manager.py | 4 +- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/wa/framework/target/runtime_config.py b/wa/framework/target/runtime_config.py index bd952e4c..88f33de9 100644 --- a/wa/framework/target/runtime_config.py +++ b/wa/framework/target/runtime_config.py @@ -4,7 +4,7 @@ from collections import defaultdict, OrderedDict from wa.framework.exception import ConfigError from wa.framework.plugin import Plugin, Parameter from wa.utils.misc import resolve_cpus, resolve_unique_domain_cpus -from wa.utils.types import caseless_string +from wa.utils.types import caseless_string, enum from devlib.exception import TargetError from devlib.utils.misc import unique @@ -809,3 +809,77 @@ class CpuidleRuntimeConfig(RuntimeConfig): if state.name not in common_idle_states: common_idle_states.append(state) return common_idle_states + +ScreenOrientation = enum(['NATURAL', 'LEFT', 'INVERTED', 'RIGHT']) + + +class AndroidRuntimeConfig(RuntimeConfig): + + name = 'rt-android' + + @staticmethod + def set_brightness(obj, value): + if value is not None: + obj.config['brightness'] = value + + @staticmethod + def set_airplane_mode(obj, value): + if value is not None: + obj.config['airplane_mode'] = value + + @staticmethod + def set_rotation(obj, value): + if value is not None: + obj.config['rotation'] = value.value + + def __init__(self, target): + self.config = defaultdict(dict) + super(AndroidRuntimeConfig, self).__init__(target) + + def initialize(self): + if self.target.os != 'android': + return + + param_name = 'brightness' + self._runtime_params[param_name] = \ + RuntimeParameter(param_name, kind=int, + constraint=lambda x: 0 <= x <= 255, + default=127, + setter=self.set_brightness, + description=""" + Specify the screen brightness to be set for + the device + """) + param_name = 'airplane_mode' + self._runtime_params[param_name] = \ + RuntimeParameter(param_name, kind=bool, + setter=self.set_airplane_mode, + description=""" + Specify whether airplane mode should be + enabled for the device + """) + param_name = 'rotation' + self._runtime_params[param_name] = \ + RuntimeParameter(param_name, kind=ScreenOrientation, + setter=self.set_rotation, + description=""" + Specify the screen orientation for the device + """) + + def check_target(self): + if self.target.os != 'android': + raise ConfigError('Target does not appear to be running Android') + + def validate_parameters(self): + pass + + def commit(self): + if 'airplane_mode' in self.config: + self.target.set_airplane_mode(self.config['airplane_mode']) + if 'brightness' in self.config: + self.target.set_brightness(self.config['brightness']) + if 'rotation' in self.config: + self.target.set_rotation(self.config['rotation']) + + def clear(self): + self.config = {} diff --git a/wa/framework/target/runtime_parameter_manager.py b/wa/framework/target/runtime_parameter_manager.py index c7fe4099..0c8fc4f4 100644 --- a/wa/framework/target/runtime_parameter_manager.py +++ b/wa/framework/target/runtime_parameter_manager.py @@ -5,7 +5,8 @@ from wa.framework.exception import ConfigError from wa.framework.target.runtime_config import (SysfileValuesRuntimeConfig, HotplugRuntimeConfig, CpufreqRuntimeConfig, - CpuidleRuntimeConfig) + CpuidleRuntimeConfig, + AndroidRuntimeConfig) from wa.utils.types import obj_dict @@ -17,6 +18,7 @@ class RuntimeParameterManager(object): HotplugRuntimeConfig, CpufreqRuntimeConfig, CpuidleRuntimeConfig, + AndroidRuntimeConfig, ] def __init__(self, target):