#!/usr/bin/python # Copyright 2015 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import logging import logging.handlers import common from autotest_lib.client.cros import constants from autotest_lib.client.cros import dark_resume_listener from autotest_lib.client.cros import xmlrpc_server from autotest_lib.client.cros.power import sys_power from autotest_lib.client.cros.power import power_utils class DarkResumeXmlRpcDelegate(xmlrpc_server.XmlRpcDelegate): """Exposes methods called remotely during dark resume autotests. All instance methods of this object without a preceding '_' are exposed via an XMLRPC server. This is not a stateless handler object, which means that if you store state inside the delegate, that state will remain around for future calls. """ def __init__(self): super(DarkResumeXmlRpcDelegate, self).__init__() self._listener = dark_resume_listener.DarkResumeListener() @xmlrpc_server.dbus_safe(None) def suspend_bg_for_dark_resume(self, suspend_for_secs): """ Suspends the system for dark resume. @param suspend_for_secs : If not 0, sets a rtc alarm to wake the system after|suspend_for_secs| secs. """ if suspend_for_secs == 0 : sys_power.suspend_bg_for_dark_resume() else: sys_power.do_suspend(suspend_for_secs) @xmlrpc_server.dbus_safe(None) def set_stop_resuspend(self, stop_resuspend): """ Stops resuspend on seeing a dark resume. @param stop_resuspend: Stops resuspend of the device on seeing a a dark resume if |stop_resuspend| is true. """ self._listener.stop_resuspend(stop_resuspend) @xmlrpc_server.dbus_safe(0) def get_dark_resume_count(self): """Gets the number of dark resumes that have occurred since this listener was created.""" return self._listener.count @xmlrpc_server.dbus_safe(False) def has_lid(self): """ Checks whether the DUT has lid. @return: Returns True if the device has a lid, False otherwise. """ return power_utils.has_lid() if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) handler = logging.handlers.SysLogHandler(address = '/dev/log') formatter = logging.Formatter( 'dark_resume_xmlrpc_server: [%(levelname)s] %(message)s') handler.setFormatter(formatter) logging.getLogger().addHandler(handler) logging.debug('dark_resume_xmlrpc_server main...') server = xmlrpc_server.XmlRpcServer( 'localhost', constants.DARK_RESUME_XMLRPC_SERVER_PORT) server.register_delegate(DarkResumeXmlRpcDelegate()) server.run()