Пример #1
0
        public async Task SetPowerSettingsAsync(PowerSettings settings, OnSetPowerSettingsDelegate onSetPowerSettings)
        {
            _powerSettingsToSet = settings ?? throw new ArgumentNullException(nameof(settings));
            _onSetPowerSettings = onSetPowerSettings ?? throw new ArgumentNullException(nameof(onSetPowerSettings));

            // Checking if power changed
            await LoadPowerSettingsAsync(OnGetPowerSettings_SetPowerSettingsPathway);
        }
Пример #2
0
        private void OnGetPowerResponse(float power)
        {
            var settings = new PowerSettings
            {
                Power = power
            };

            _onGetPowerSettings(settings);
        }
 /// <summary>
 /// Handles PowerScheduler event messages.
 /// Used to keep track of changes to the idle timeout
 /// </summary>
 /// <param name="args">PowerSchedulerEventArgs for a specific message</param>
 private void GenericStandbyHandler_OnPowerSchedulerEvent(PowerSchedulerEventArgs args)
 {
   switch (args.EventType)
   {
     case PowerSchedulerEventType.SettingsChanged:
       PowerSettings settings = args.GetData<PowerSettings>();
       if (settings != null)
         _timeout = settings.IdleTimeout;
       break;
   }
 }
Пример #4
0
        private void OnGetPowerSettings_SetPowerSettingsPathway(PowerSettings settings)
        {
            if (Math.Abs(settings.Power - _powerSettingsToSet.Power) <= PowerSigma)
            {
                _onSetPowerSettings();
                return;
            }

            _setPowerCommand.SetResponseDelegate(OnSetPowerResponse);
            _setPowerCommand.SendSetPowerCommand(_powerSettingsToSet.Power);
        }
Пример #5
0
 /// <summary>
 /// Handles settings changed events
 /// </summary>
 /// <param name="args">PowerScheduler event arguments</param>
 private void ScheduledRecordingsHandler_OnPowerSchedulerEvent(PowerSchedulerEventArgs args)
 {
     switch (args.EventType)
     {
     case PowerSchedulerEventType.SettingsChanged:
         PowerSettings settings = args.GetData <PowerSettings>();
         if (settings != null)
         {
             _idleTimeout = settings.IdleTimeout;
         }
         break;
     }
 }
Пример #6
0
            /// <summary>
            /// Send a power command to a server
            /// </summary>
            /// <param name="serverId">the server id</param>
            /// <param name="signal">the signal</param>
            /// <returns>the result of the command</returns>
            /// <exception cref="MissingCredentialsException"></exception>
            public async Task <bool> SendSignal(string serverId, PowerSettings signal)
            {
                if (_web == null)
                {
                    throw new MissingCredentialsException(MissingCredentials);
                }
                var data = new NameValueCollection {
                    ["signal"] = signal.ToString()
                };
                var result = await _web.Post($"client/servers/{serverId}/power", data);

                return(string.IsNullOrEmpty(result));
            }
Пример #7
0
        public bool SendSignal(string ServerId, PowerSettings signal)
        {
            var data = new NameValueCollection();

            data["signal"] = signal.ToString();
            if (Post("client/servers/" + ServerId + "/power", data) != "")
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Пример #8
0
        public float GetBrightness()
        {
            uint percentage;

            if (PowerSettings.GetPowerSource() == PowerLineStatus.Offline)
            {
                percentage = ReadDCBrightness();
            }
            else
            {
                percentage = ReadACBrightness();
            }
            return(((float)percentage) / 100);
        }
Пример #9
0
    /// <summary>
    /// Loads the standby configuration
    /// </summary>
    private void LoadSettings()
    {
      bool changed = false;
      bool boolSetting;
      int intSetting;
      string stringSetting;
      PowerSetting powerSetting;

      Log.Debug("PS: LoadSettings()");

      // Load initial settings only once
      if (_settings == null)
      {
        using (Settings reader = new MPSettings())
        {

          // Check if update of old PS settings is necessary
          if (reader.GetValue("psclientplugin", "ExpertMode") == "")
          {
            // Initialise list of old and new settings names to update
            List<String[]> settingNames = new List<String[]>();
            settingNames.Add(new String[] { "homeonly", "HomeOnly" });
            settingNames.Add(new String[] { "idletimeout", "IdleTimeout" });
            settingNames.Add(new String[] { "shutdownenabled", "ShutdownEnabled" });
            settingNames.Add(new String[] { "shutdownmode", "ShutdownMode" });

            // Update settings names
            foreach (String[] settingName in settingNames)
            {
              String settingValue = reader.GetValue("psclientplugin", settingName[0]);
              if (settingValue != "")
              {
                reader.RemoveEntry("psclientplugin", settingName[0]);
                reader.SetValue("psclientplugin", settingName[1], settingValue);
              }
            }
          }

          _settings = new PowerSettings();
          changed = true;

          // Set constant values (needed for backward compatibility)
          _settings.ForceShutdown = false;
          _settings.ExtensiveLogging = false;
          _settings.PreNoShutdownTime = 300;
          _settings.CheckInterval = 15;

          // Check if we only should suspend in MP's home window
          boolSetting = reader.GetValueAsBool("psclientplugin", "HomeOnly", false);
          powerSetting = _settings.GetSetting("HomeOnly");
          powerSetting.Set<bool>(boolSetting);
          Log.Debug("PS: Only allow standby when on home window: {0}", boolSetting);

          // Get external command
          stringSetting = reader.GetValueAsString("psclientplugin", "Command", String.Empty);
          powerSetting = _settings.GetSetting("Command");
          powerSetting.Set<string>(stringSetting);
          Log.Debug("PS: Run command on power state change: {0}", stringSetting);

          // Check if we should unmute the master volume
          boolSetting = reader.GetValueAsBool("psclientplugin", "UnmuteMasterVolume", true);
          powerSetting = _settings.GetSetting("UnmuteMasterVolume");
          powerSetting.Set<bool>(boolSetting);
          Log.Debug("PS: Unmute master volume: {0}", boolSetting);

          // Detect single-seat
          string tvPluginDll = Config.GetSubFolder(Config.Dir.Plugins, "windows") + @"\" + "TvPlugin.dll";
          if (File.Exists(tvPluginDll))
          {
            string hostName = reader.GetValueAsString("tvservice", "hostname", String.Empty);
            if (hostName != String.Empty && PowerManager.IsLocal(hostName))
            {
              _singleSeat = true;
              Log.Info("PS: Detected single-seat setup - TV-Server on local system");
            }
            else if (hostName == String.Empty)
            {
              _singleSeat = false;
              Log.Info("PS: Detected standalone client setup - no TV-Server configured");
            }
            else
            {
              _singleSeat = false;
              Log.Info("PS: Detected remote client setup - TV-Server on \"{0}\"", hostName);

              RemotePowerControl.HostName = hostName;
              Log.Debug("PS: Set RemotePowerControl.HostName: {0}", hostName);
            }
          }
          else
          {
            _singleSeat = false;
            Log.Info("PS: Detected standalone client setup - no TV-Plugin installed");
          }

          // Standalone client has local standby / wakeup settings
          if (!_singleSeat)
          {
            // Check if PowerScheduler should actively put the system into standby
            boolSetting = reader.GetValueAsBool("psclientplugin", "ShutdownEnabled", false);
            _settings.ShutdownEnabled = boolSetting;
            Log.Debug("PS: PowerScheduler forces system to go to standby when idle: {0}", boolSetting);

            if (_settings.ShutdownEnabled)
            {
              // Check configured shutdown mode
              intSetting = reader.GetValueAsInt("psclientplugin", "ShutdownMode", 0);
              _settings.ShutdownMode = (ShutdownMode)intSetting;
              Log.Debug("PS: Shutdown mode: {0}", _settings.ShutdownMode.ToString());
            }

            // Get idle timeout
            if (_settings.ShutdownEnabled)
            {
              intSetting = reader.GetValueAsInt("psclientplugin", "IdleTimeout", 30);
              _settings.IdleTimeout = intSetting;
              Log.Debug("PS: Standby after: {0} minutes", intSetting);
            }

            // Check configured pre-wakeup time (can only be configured by editing MediaPortal.xml)
            intSetting = reader.GetValueAsInt("psclientplugin", "PreWakeupTime", 60);
            _settings.PreWakeupTime = intSetting;
            Log.Debug("PS: Pre-wakeup time: {0} seconds", intSetting);

            // Check configured pre-no-standby time (can only be configured by editing MediaPortal.xml)
            intSetting = reader.GetValueAsInt("psclientplugin", "PreNoStandbyTime", 300);
            _settings.PreNoShutdownTime = intSetting;
            Log.Debug("PS: Pre-no-standby time: {0} seconds", intSetting);

            // Check if PowerScheduler should wakeup the system automatically
            intSetting = reader.GetValueAsInt("psclientplugin", "Profile", 0);
            if (intSetting == 2)
              boolSetting = false;  // Notebook
            else
              boolSetting = true;   // HTPC, Desktop
            _settings.WakeupEnabled = boolSetting;
            Log.Debug("PS: Wakeup system for various events: {0}", boolSetting);
          }
        }
      }

      // (Re-)Load settings every check interval
      if (_singleSeat)
      {
        // Connect to local tvservice (RemotePowerControl)
        if (RemotePowerControl.Instance != null && RemotePowerControl.Isconnected)
        {
          // Check if PowerScheduler should actively put the system into standby
          boolSetting = RemotePowerControl.Instance.PowerSettings.ShutdownEnabled;
          if (_settings.ShutdownEnabled != boolSetting)
          {
            _settings.ShutdownEnabled = boolSetting;
            Log.Debug("PS: Server plugin setting - PowerScheduler forces system to go to standby when idle: {0}", boolSetting);
            changed = true;
          }

          if (_settings.ShutdownEnabled)
          {
            // Get configured shutdown mode from local tvservice
            intSetting = (int)RemotePowerControl.Instance.PowerSettings.ShutdownMode;
            if ((int)_settings.ShutdownMode != intSetting)
            {
              _settings.ShutdownMode = (ShutdownMode)intSetting;
              Log.Debug("PS: Server plugin setting - Shutdown mode: {0}", _settings.ShutdownMode.ToString());
              changed = true;
            }
          }

          // Get idle timeout from local tvservice
          intSetting = RemotePowerControl.Instance.PowerSettings.IdleTimeout;
          if (_settings.IdleTimeout != intSetting)
          {
            _settings.IdleTimeout = intSetting;
            Log.Debug("PS: Server plugin setting - {0}: {1} minutes", (_settings.ShutdownEnabled ? "Standby after" : "System idle timeout"), intSetting);
            changed = true;
          }

          // Get configured pre-wakeup time from local tvservice
          intSetting = RemotePowerControl.Instance.PowerSettings.PreWakeupTime;
          if (_settings.PreWakeupTime != intSetting)
          {
            _settings.PreWakeupTime = intSetting;
            Log.Debug("PS: Pre-wakeup time: {0} seconds", intSetting);
            changed = true;
          }

          // Check if PowerScheduler should wakeup the system automatically
          boolSetting = RemotePowerControl.Instance.PowerSettings.WakeupEnabled;
          if (_settings.WakeupEnabled != boolSetting)
          {
            _settings.WakeupEnabled = boolSetting;
            Log.Debug("PS: Server plugin setting - Wakeup system for various events: {0}", boolSetting);
            changed = true;
          }
        }
        else
        {
          Log.Error("PS: Cannot connect to local tvservice to load settings");
        }
      }
      else
      {
        // Get active idle timeout for standalone client if standby is handled by Windows
        if (!_settings.ShutdownEnabled)
        {
          intSetting = (int)PowerManager.GetActivePowerSetting(PowerManager.SystemPowerSettingType.STANDBYIDLE) / 60;
          if (_settings.IdleTimeout != intSetting)
          {
            _settings.IdleTimeout = intSetting;
            Log.Debug("PS: System idle timeout: {0} minutes", intSetting);
            changed = true;
          }
        }
      }

      // Send message in case any setting has changed
      if (changed)
      {
        PowerSchedulerEventArgs args = new PowerSchedulerEventArgs(PowerSchedulerEventType.SettingsChanged);
        args.SetData<PowerSettings>(_settings.Clone());
        SendPowerSchedulerEvent(args);
      }
    }
Пример #10
0
    private bool LoadSettings()
    {
      bool changed = false;
      PowerSetting setting;
      PowerSchedulerEventArgs args;

      if (_settings == null)
      {
        _settings = new PowerSettings();
        _settings.ExtensiveLogging = true;
        _settings.ShutdownEnabled = true;
        _settings.WakeupEnabled = true;
      }

      using (Settings reader = new MPSettings())
      {
        // Only detect singleseat/multiseat once
        if (!_refreshSettings)
        {
          setting = _settings.GetSetting("SingleSeat");
          string stringSetting = reader.GetValueAsString("tvservice", "hostname", String.Empty);
                    
          if (stringSetting == String.Empty)
          {
            Log.Info("Detected client-only setup - using local methods to suspend/hibernate system");
            setting.Set<bool>(false);
          }
          else if (Network.IsSingleSeat())
          {
            Log.Info("PowerScheduler: detected a singleseat setup - delegating suspend/hibernate requests to tvserver");
            setting.Set<bool>(true);
          }
          else
          {
            Log.Info("PowerScheduler: detected a multiseat setup - using local methods to suspend/hibernate system");
            setting.Set<bool>(false);

            stringSetting = reader.GetValueAsString("tvservice", "hostname", String.Empty);
            RemotePowerControl.HostName = stringSetting;
            Log.Info("PowerScheduler: set hostname to {0}", stringSetting);
          }
          changed = true;

          // From now on, only refresh the required settings on subsequent LoadSettings() calls
          _refreshSettings = true;
        }

        // Check if logging should be verbose
        bool boolSetting = reader.GetValueAsBool("psclientplugin", "extensivelogging", false);
        if (_settings.ExtensiveLogging != boolSetting)
        {
          _settings.ExtensiveLogging = boolSetting;
          Log.Debug("Extensive logging enabled: {0}", boolSetting);
          changed = true;
        }

        // Check if we only should suspend in MP's home window
        boolSetting = reader.GetValueAsBool("psclientplugin", "homeonly", true);
        setting = _settings.GetSetting("HomeOnly");
        if (setting.Get<bool>() != boolSetting)
        {
          setting.Set<bool>(boolSetting);
          LogVerbose("Only allow standby when in home screen: {0}", boolSetting);
          changed = true;
        }
        // Check if we should force the system into standby
        boolSetting = reader.GetValueAsBool("psclientplugin", "forceshutdown", false);
        if (_settings.ForceShutdown != boolSetting)
        {
          _settings.ForceShutdown = boolSetting;
          LogVerbose("Force system into standby: {0}", boolSetting);
          changed = true;
        }
        // Check configured PowerScheduler shutdown enabled
        boolSetting = reader.GetValueAsBool("psclientplugin", "shutdownenabled", false);
        if (_settings.ShutdownEnabled != boolSetting)
        {
          _settings.ShutdownEnabled = boolSetting;
          LogVerbose("shutdown enabled locally set to: {0}", boolSetting);
          changed = true;
        }

        // Check configured PowerScheduler idle timeout
        int intSetting = reader.GetValueAsInt("psclientplugin", "idletimeout", 5);
        if (_settings.IdleTimeout != intSetting)
        {
          _settings.IdleTimeout = intSetting;
          LogVerbose("idle timeout locally set to: {0} minutes", intSetting);
          changed = true;
        }

        // Check configured pre-wakeup time
        intSetting = reader.GetValueAsInt("psclientplugin", "prewakeup", 60);
        if (_settings.PreWakeupTime != intSetting)
        {
          _settings.PreWakeupTime = intSetting;
          LogVerbose("pre-wakeup time set to: {0} seconds", intSetting);
          changed = true;
        }

        // Check configured pre-wakeup time
        intSetting = reader.GetValueAsInt("psclientplugin", "prenoshutdown", 120);
        if (_settings.PreNoShutdownTime != intSetting)
        {
          _settings.PreNoShutdownTime = intSetting;
          LogVerbose("pre-shutdown time set to: {0} seconds", intSetting);
          changed = true;
        }

        // Check with what interval the system status should be checked
        intSetting = reader.GetValueAsInt("psclientplugin", "checkinterval", 25);
        if (_settings.CheckInterval != intSetting)
        {
          _settings.CheckInterval = intSetting;
          LogVerbose("Check interval is set to {0} seconds", intSetting);
          _timer.Interval = intSetting * 1000;
          changed = true;
        }
        // Check configured shutdown mode
        intSetting = reader.GetValueAsInt("psclientplugin", "shutdownmode", 2);
        if ((int)_settings.ShutdownMode != intSetting)
        {
          _settings.ShutdownMode = (ShutdownMode)intSetting;
          LogVerbose("Shutdown mode set to {0}", _settings.ShutdownMode);
          changed = true;
        }

        // Send message in case any setting has changed
        if (changed)
        {
          args = new PowerSchedulerEventArgs(PowerSchedulerEventType.SettingsChanged);
          args.SetData<PowerSettings>(_settings.Clone());
          SendPowerSchedulerEvent(args);
        }
      }
      return true;
    }
Пример #11
0
        /// <summary>
        /// Init power settings form
        /// </summary>
        /// <param name="selectedProfile"></param>
        public PowerSettingsForm(PowerSettings recommendedSettingsAC, PowerSettings recommendedSettingsDC)
        {
            InitializeComponent();

            // Show DC settings only if there is a DC power source
            if (PowerManager.HasDCPowerSource)
            {
                this.Width = 656; // needs more space for DC options

                checkBoxAllowAwayModeAC.Text   += " on AC";
                checkBoxRequirePasswordAC.Text += " on AC";
                checkBoxHybridSleepAC.Text     += " on AC";
                labelIdleTimeoutAC2.Text       += " on AC";
                labelHibernateAfterAC2.Text    += " on AC";
                checkBoxAllowWakeTimersAC.Text += " on AC";
                labelLidCloseActionAC.Text     += " on AC";
                labelPowerButtonActionAC.Text  += " on AC";
                labelSleepButtonActionAC.Text  += " on AC";
                labelWhenSharingMediaAC.Text   += " on AC";

                checkBoxAllowAwayModeDC.Visible       = true;
                checkBoxRequirePasswordDC.Visible     = true;
                checkBoxHybridSleepDC.Visible         = true;
                labelIdleTimeoutDC1.Visible           = true;
                numericUpDownIdleTimeoutDC.Visible    = true;
                labelIdleTimeoutDC2.Visible           = true;
                labelHibernateAfterDC1.Visible        = true;
                numericUpDownHibernateAfterDC.Visible = true;
                labelHibernateAfterDC2.Visible        = true;
                checkBoxAllowWakeTimersDC.Visible     = true;
                labelLidCloseActionDC.Visible         = true;
                comboBoxLidCloseActionDC.Visible      = true;
                labelPowerButtonActionDC.Visible      = true;
                comboBoxPowerButtonActionDC.Visible   = true;
                labelSleepButtonActionDC.Visible      = true;
                comboBoxSleepButtonActionDC.Visible   = true;
                labelWhenSharingMediaDC.Visible       = true;
                comboBoxWhenSharingMediaDC.Visible    = true;
            }

            // Show lid close options only if there is a lid
            if (!PowerManager.HasLid)
            {
                labelLidCloseActionAC.Visible    = false;
                comboBoxLidCloseActionAC.Visible = false;
                labelLidCloseActionDC.Visible    = false;
                comboBoxLidCloseActionDC.Visible = false;
            }

            // Show hibernate options only if system can hibernate
            if (!PowerManager.CanHibernate)
            {
                labelHibernateAfterAC1.Visible        = false;
                numericUpDownHibernateAfterAC.Visible = false;
                labelHibernateAfterAC2.Visible        = false;
                labelHibernateAfterDC1.Visible        = false;
                numericUpDownHibernateAfterDC.Visible = false;
                labelHibernateAfterDC2.Visible        = false;

                checkBoxHybridSleepAC.Visible = false;
                checkBoxHybridSleepDC.Visible = false;
            }

            // Hide unused options and modify button actions for Windows XP
            if (Environment.OSVersion.Version.Major < 6)
            {
                checkBoxAllowAwayModeAC.Visible = false;
                checkBoxAllowAwayModeDC.Visible = false;

                checkBoxRequirePasswordAC.Visible = false;
                checkBoxRequirePasswordDC.Visible = false;

                checkBoxHybridSleepAC.Visible = false;
                checkBoxHybridSleepDC.Visible = false;

                checkBoxAllowWakeTimersAC.Visible = false;
                checkBoxAllowWakeTimersDC.Visible = false;

                comboBoxLidCloseActionAC.Items.Add("Ask User");
                comboBoxLidCloseActionDC.Items.Add("Ask User");
                comboBoxPowerButtonActionAC.Items.Add("Ask User");
                comboBoxPowerButtonActionDC.Items.Add("Ask User");
                comboBoxSleepButtonActionAC.Items.Add("Ask User");
                comboBoxSleepButtonActionDC.Items.Add("Ask User");

                labelWhenSharingMediaAC.Visible    = false;
                comboBoxWhenSharingMediaAC.Visible = false;
                labelWhenSharingMediaDC.Visible    = false;
                comboBoxWhenSharingMediaDC.Visible = false;
            }

            _recommendedSettingsAC = recommendedSettingsAC;
            _recommendedSettingsDC = recommendedSettingsDC;

            LoadSystemSettings();
        }
Пример #12
0
 public LCDDataReader()
 {
     brightness = new BrightnessData();
     this.currentPowerScheme = PowerSettings.GetActivePowerScheme();
 }
Пример #13
0
 private void OnEnable()
 {
     t = target as PowerSettings;
 }
Пример #14
0
    /// <summary>
    /// Refreshes the standby configuration
    /// </summary>
    private void LoadSettings()
    {
      int setting;
      bool changed = false;

      if (_settings == null)
        _settings = new PowerSettings();

      TvBusinessLayer layer = new TvBusinessLayer();

      // Check if PowerScheduler should log verbose debug messages
      if (_settings.ExtensiveLogging !=
          Convert.ToBoolean(layer.GetSetting("PowerSchedulerExtensiveLogging", "false").Value))
      {
        _settings.ExtensiveLogging = !_settings.ExtensiveLogging;
        Log.Debug("PowerScheduler: extensive logging enabled: {0}", _settings.ExtensiveLogging);
        changed = true;
      }
      // Check if PowerScheduler should actively put the system into standby
      if (_settings.ShutdownEnabled !=
          Convert.ToBoolean(layer.GetSetting("PowerSchedulerShutdownActive", "false").Value))
      {
        _settings.ShutdownEnabled = !_settings.ShutdownEnabled;
        LogVerbose("PowerScheduler: entering standby is enabled: {0}", _settings.ShutdownEnabled);
        changed = true;
      }
      // Check if PowerScheduler should wakeup the system automatically
      if (_settings.WakeupEnabled != Convert.ToBoolean(layer.GetSetting("PowerSchedulerWakeupActive", "false").Value))
      {
        _settings.WakeupEnabled = !_settings.WakeupEnabled;
        LogVerbose("PowerScheduler: automatic wakeup is enabled: {0}", _settings.WakeupEnabled);
        changed = true;
      }
      // Check if PowerScheduler should force the system into suspend/hibernate
      if (_settings.ForceShutdown != Convert.ToBoolean(layer.GetSetting("PowerSchedulerForceShutdown", "false").Value))
      {
        _settings.ForceShutdown = !_settings.ForceShutdown;
        LogVerbose("PowerScheduler: force shutdown enabled: {0}", _settings.ForceShutdown);
        changed = true;
      }
      // Check if PowerScheduler should reinitialize the TVController after wakeup
      if (_settings.ReinitializeController !=
          Convert.ToBoolean(layer.GetSetting("PowerSchedulerReinitializeController", "false").Value))
      {
        _settings.ReinitializeController = !_settings.ReinitializeController;
        LogVerbose("PowerScheduler: Reinitialize controller on wakeup: {0}", _settings.ReinitializeController);
        changed = true;
      }

      PowerSetting pSetting = _settings.GetSetting("ExternalCommand");
      string sSetting = layer.GetSetting("PowerSchedulerCommand", String.Empty).Value;
      if (!sSetting.Equals(pSetting.Get<string>()))
      {
        pSetting.Set<string>(sSetting);
        LogVerbose("PowerScheduler: Run external command before standby / after resume: {0}", sSetting);
        changed = true;
      }

      // Check configured PowerScheduler idle timeout
      setting = Int32.Parse(layer.GetSetting("PowerSchedulerIdleTimeout", "5").Value);
      if (_settings.IdleTimeout != setting)
      {
        _settings.IdleTimeout = setting;
        LogVerbose("PowerScheduler: idle timeout set to: {0} minutes", _settings.IdleTimeout);
        changed = true;
      }
      // Check configured pre-wakeup time
      setting = Int32.Parse(layer.GetSetting("PowerSchedulerPreWakeupTime", "60").Value);
      if (_settings.PreWakeupTime != setting)
      {
        _settings.PreWakeupTime = setting;
        LogVerbose("PowerScheduler: pre-wakeup time set to: {0} seconds", _settings.PreWakeupTime);
        changed = true;
      }

      // Check configured pre-no-shutdown time
      setting = Int32.Parse(layer.GetSetting("PowerSchedulerPreNoShutdownTime", "120").Value);
      if (_settings.PreNoShutdownTime != setting)
      {
        _settings.PreNoShutdownTime = setting;
        LogVerbose("PowerScheduler: pre-no-shutdown time set to: {0} seconds", _settings.PreNoShutdownTime);
        changed = true;
      }

      // Check if check interval needs to be updated
      setting = Int32.Parse(layer.GetSetting("PowerSchedulerCheckInterval", "60").Value);
      if (_settings.CheckInterval != setting)
      {
        _settings.CheckInterval = setting;
        LogVerbose("PowerScheduler: Check interval set to {0} seconds", _settings.CheckInterval);
        _reloadInterval = setting;
        changed = true;
      }
      // Check configured shutdown mode
      setting = Int32.Parse(layer.GetSetting("PowerSchedulerShutdownMode", "2").Value);
      if ((int)_settings.ShutdownMode != setting)
      {
        _settings.ShutdownMode = (ShutdownMode)setting;
        LogVerbose("PowerScheduler: Shutdown mode set to {0}", _settings.ShutdownMode);
        changed = true;
      }

      // Check allowed stop time
      setting = Int32.Parse(layer.GetSetting("PowerSchedulerStandbyAllowedEnd", "24").Value);
      if (_settings.AllowedSleepStopTime != setting)
      {
        _settings.AllowedSleepStopTime = setting;
        LogVerbose("PowerScheduler: Standby allowed until {0} o' clock", _settings.AllowedSleepStopTime);
        changed = true;
      }

      // Check configured allowed start time
      setting = Int32.Parse(layer.GetSetting("PowerSchedulerStandbyAllowedStart", "0").Value);
      if (_settings.AllowedSleepStartTime != setting)
      {
        _settings.AllowedSleepStartTime = setting;
        LogVerbose("PowerScheduler: Standby allowed starting at {0} o' clock", _settings.AllowedSleepStartTime);
        changed = true;
      }

      // Send message in case any setting has changed
      if (changed)
      {
        PowerSchedulerEventArgs args = new PowerSchedulerEventArgs(PowerSchedulerEventType.SettingsChanged);
        args.SetData<PowerSettings>(_settings.Clone());
        SendPowerSchedulerEvent(args);
      }
    }
Пример #15
0
    /// <summary>
    /// Init power settings form
    /// </summary>
    /// <param name="selectedProfile"></param>
    public PowerSettingsForm(PowerSettings recommendedSettingsAC, PowerSettings recommendedSettingsDC)
    {
      InitializeComponent();

      // Show DC settings only if there is a DC power source
      if (PowerManager.HasDCPowerSource)
      {
        this.Width = 656; // needs more space for DC options

        checkBoxAllowAwayModeAC.Text += " on AC";
        checkBoxRequirePasswordAC.Text += " on AC";
        checkBoxHybridSleepAC.Text += " on AC";
        labelIdleTimeoutAC2.Text += " on AC";
        labelHibernateAfterAC2.Text += " on AC";
        checkBoxAllowWakeTimersAC.Text += " on AC";
        labelLidCloseActionAC.Text += " on AC";
        labelPowerButtonActionAC.Text += " on AC";
        labelSleepButtonActionAC.Text += " on AC";
        labelWhenSharingMediaAC.Text += " on AC";

        checkBoxAllowAwayModeDC.Visible = true;
        checkBoxRequirePasswordDC.Visible = true;
        checkBoxHybridSleepDC.Visible = true;
        labelIdleTimeoutDC1.Visible = true;
        numericUpDownIdleTimeoutDC.Visible = true;
        labelIdleTimeoutDC2.Visible = true;
        labelHibernateAfterDC1.Visible = true;
        numericUpDownHibernateAfterDC.Visible = true;
        labelHibernateAfterDC2.Visible = true;
        checkBoxAllowWakeTimersDC.Visible = true;
        labelLidCloseActionDC.Visible = true;
        comboBoxLidCloseActionDC.Visible = true;
        labelPowerButtonActionDC.Visible = true;
        comboBoxPowerButtonActionDC.Visible = true;
        labelSleepButtonActionDC.Visible = true;
        comboBoxSleepButtonActionDC.Visible = true;
        labelWhenSharingMediaDC.Visible = true;
        comboBoxWhenSharingMediaDC.Visible = true;
      }

      // Show lid close options only if there is a lid
      if (!PowerManager.HasLid)
      {
        labelLidCloseActionAC.Visible = false;
        comboBoxLidCloseActionAC.Visible = false;
        labelLidCloseActionDC.Visible = false;
        comboBoxLidCloseActionDC.Visible = false;
      }

      // Show hibernate options only if system can hibernate
      if (!PowerManager.CanHibernate)
      {
        labelHibernateAfterAC1.Visible = false;
        numericUpDownHibernateAfterAC.Visible = false;
        labelHibernateAfterAC2.Visible = false;
        labelHibernateAfterDC1.Visible = false;
        numericUpDownHibernateAfterDC.Visible = false;
        labelHibernateAfterDC2.Visible = false;

        checkBoxHybridSleepAC.Visible = false;
        checkBoxHybridSleepDC.Visible = false;
      }

      // Hide unused options and modify button actions for Windows XP
      if (Environment.OSVersion.Version.Major < 6)
      {
        checkBoxAllowAwayModeAC.Visible = false;
        checkBoxAllowAwayModeDC.Visible = false;

        checkBoxRequirePasswordAC.Visible = false;
        checkBoxRequirePasswordDC.Visible = false;

        checkBoxHybridSleepAC.Visible = false;
        checkBoxHybridSleepDC.Visible = false;

        checkBoxAllowWakeTimersAC.Visible = false;
        checkBoxAllowWakeTimersDC.Visible = false;

        comboBoxLidCloseActionAC.Items.Add("Ask User");
        comboBoxLidCloseActionDC.Items.Add("Ask User");
        comboBoxPowerButtonActionAC.Items.Add("Ask User");
        comboBoxPowerButtonActionDC.Items.Add("Ask User");
        comboBoxSleepButtonActionAC.Items.Add("Ask User");
        comboBoxSleepButtonActionDC.Items.Add("Ask User");

        labelWhenSharingMediaAC.Visible = false;
        comboBoxWhenSharingMediaAC.Visible = false;
        labelWhenSharingMediaDC.Visible = false;
        comboBoxWhenSharingMediaDC.Visible = false;
      }

      _recommendedSettingsAC = recommendedSettingsAC;
      _recommendedSettingsDC = recommendedSettingsDC;

      LoadSystemSettings();
    }
Пример #16
0
 public static extern PowerSettings.EXECUTION_STATE SetThreadExecutionState(PowerSettings.EXECUTION_STATE esFlags);
Пример #17
0
    /// <summary>
    /// Loads the standby configuration
    /// </summary>
    private void LoadSettings()
    {
      bool changed = false;
      bool boolSetting;
      int intSetting;
      string stringSetting;
      PowerSetting powerSetting;

      Log.Debug("PS: LoadSettings()");

      TvBusinessLayer layer = new TvBusinessLayer();

      // Load initial settings only once
      if (_settings == null)
      {
        // Check if update of old PS settings is necessary
        Setting setting = layer.GetSetting("PowerSchedulerExpertMode");
        if (setting.Value == "")
        {
          setting.Remove();

          // Initialise list of old and new settings to update
          List<String[]> settingNames = new List<String[]>();
          settingNames.Add(new String[] { "PreventStandybyWhenSpecificSharesInUse", "PowerSchedulerActiveShares" });
          settingNames.Add(new String[] { "PreventStandybyWhenSharesInUse", "PowerSchedulerActiveSharesEnabled" });
          settingNames.Add(new String[] { "PowerSchedulerEpgCommand", "PowerSchedulerEPGCommand" });
          settingNames.Add(new String[] { "PreventStandbyWhenGrabbingEPG", "PowerSchedulerEPGPreventStandby" });
          settingNames.Add(new String[] { "WakeupSystemForEPGGrabbing", "PowerSchedulerEPGWakeup" });
          settingNames.Add(new String[] { "EPGWakeupConfig", "PowerSchedulerEPGWakeupConfig" });
          settingNames.Add(new String[] { "NetworkMonitorEnabled", "PowerSchedulerNetworkMonitorEnabled" });
          settingNames.Add(new String[] { "NetworkMonitorIdleLimit", "PowerSchedulerNetworkMonitorIdleLimit" });
          settingNames.Add(new String[] { "PowerSchedulerPreNoShutdownTime", "PowerSchedulerPreNoStandbyTime" });
          settingNames.Add(new String[] { "PowerSchedulerShutdownActive", "PowerSchedulerShutdownEnabled" });
          settingNames.Add(new String[] { "PowerSchedulerStandbyAllowedStart", "PowerSchedulerStandbyHoursFrom" });
          settingNames.Add(new String[] { "PowerSchedulerStandbyAllowedEnd", "PowerSchedulerStandbyHoursTo" });

          // Update settings names
          foreach (String[] settingName in settingNames)
          {
            setting = layer.GetSetting(settingName[0], "---");
            if (setting.Value != "---")
            {
              setting.Tag = settingName[1];
              setting.Persist();
            }
            else
            {
              setting.Remove();
            }
          }
        }

        _settings = new PowerSettings();
        changed = true;

        // Set constant values (needed for backward compatibility)
        _settings.ForceShutdown = false;
        _settings.ExtensiveLogging = false;
        _settings.CheckInterval = 15;
      }

      // Check if PowerScheduler should actively put the system into standby
      boolSetting = Convert.ToBoolean(layer.GetSetting("PowerSchedulerShutdownEnabled", "false").Value);
      if (_settings.ShutdownEnabled != boolSetting)
      {
        _settings.ShutdownEnabled = boolSetting;
        Log.Debug("PS: PowerScheduler forces system to go to standby when idle: {0}", boolSetting);
        changed = true;
      }

      if (_settings.ShutdownEnabled)
      {
        // Check configured shutdown mode
        intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerShutdownMode", "0").Value);
        if ((int)_settings.ShutdownMode != intSetting)
        {
          _settings.ShutdownMode = (ShutdownMode)intSetting;
          Log.Debug("PS: Shutdown mode: {0}", _settings.ShutdownMode.ToString());
          changed = true;
        }
      }

      // Get idle timeout
      if (_settings.ShutdownEnabled)
        intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerIdleTimeout", "30").Value);
      else
        intSetting = (int)PowerManager.GetActivePowerSetting(PowerManager.SystemPowerSettingType.STANDBYIDLE) / 60;
      if (_settings.IdleTimeout != intSetting)
      {
        _settings.IdleTimeout = intSetting;
        Log.Debug("PS: {0}: {1} minutes", (_settings.ShutdownEnabled ? "Standby after" : "System idle timeout"), intSetting);
        changed = true;
      }

      // Check configured pre-wakeup time
      intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerPreWakeupTime", "60").Value);
      if (_settings.PreWakeupTime != intSetting)
      {
        _settings.PreWakeupTime = intSetting;
        Log.Debug("PS: Pre-wakeup time: {0} seconds", intSetting);
        changed = true;
      }

      // Check configured pre-no-standby time
      intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerPreNoStandbyTime", "300").Value);
      if (_settings.PreNoShutdownTime != intSetting)
      {
        _settings.PreNoShutdownTime = intSetting;
        Log.Debug("PS: Pre-no-standby time: {0} seconds", intSetting);
        changed = true;
      }

      // Check allowed start time
      intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerStandbyHoursFrom", "0").Value);
      if (_settings.AllowedSleepStartTime != intSetting)
      {
        _settings.AllowedSleepStartTime = intSetting;
        Log.Debug("PS: Standby allowed from {0} o' clock", _settings.AllowedSleepStartTime);
        changed = true;
      }

      // Check allowed stop time
      intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerStandbyHoursTo", "24").Value);
      if (_settings.AllowedSleepStopTime != intSetting)
      {
        _settings.AllowedSleepStopTime = intSetting;
        Log.Debug("PS: Standby allowed until {0} o' clock", _settings.AllowedSleepStopTime);
        changed = true;
      }

      // Check allowed start time on weekend
      intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerStandbyHoursOnWeekendFrom", "0").Value);
      if (_settings.AllowedSleepStartTimeOnWeekend != intSetting)
      {
        _settings.AllowedSleepStartTimeOnWeekend = intSetting;
        Log.Debug("PS: Standby allowed from {0} o' clock on weekend", _settings.AllowedSleepStartTimeOnWeekend);
        changed = true;
      }

      // Check allowed stop time on weekend
      intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerStandbyHoursOnWeekendTo", "24").Value);
      if (_settings.AllowedSleepStopTimeOnWeekend != intSetting)
      {
        _settings.AllowedSleepStopTimeOnWeekend = intSetting;
        Log.Debug("PS: Standby allowed until {0} o' clock on weekend", _settings.AllowedSleepStopTimeOnWeekend);
        changed = true;
      }

      // Check if PowerScheduler should wakeup the system automatically
      intSetting = Int32.Parse(layer.GetSetting("PowerSchedulerProfile", "0").Value);
      if (intSetting == 2)
        boolSetting = false;  // Notebook
      else
        boolSetting = true;   // HTPC, Desktop, Server
      if (_settings.WakeupEnabled != boolSetting)
      {
        _settings.WakeupEnabled = boolSetting;
        Log.Debug("PS: Wakeup system for varios events: {0}", boolSetting);
        changed = true;
      }

      // Check if PowerScheduler should reinitialize the TVService after wakeup
      boolSetting = Convert.ToBoolean(layer.GetSetting("PowerSchedulerReinitializeController", "false").Value);
      if (_settings.ReinitializeController != boolSetting)
      {
        _settings.ReinitializeController = boolSetting;
        Log.Debug("PS: Reinitialize TVService on wakeup: {0}", boolSetting);
        changed = true;
      }

      // Get external command
      powerSetting = _settings.GetSetting("Command");
      stringSetting = layer.GetSetting("PowerSchedulerCommand", String.Empty).Value;
      if (!stringSetting.Equals(powerSetting.Get<string>()))
      {
        powerSetting.Set<string>(stringSetting);
        Log.Debug("PS: Run command on power state change: {0}", stringSetting);
        changed = true;
      }

      // Send message in case any setting has changed
      if (changed)
      {
        PowerSchedulerEventArgs args = new PowerSchedulerEventArgs(PowerSchedulerEventType.SettingsChanged);
        args.SetData<PowerSettings>(_settings.Clone());
        SendPowerSchedulerEvent(args);
      }
    }