diff options
author | nkskjames <nkskjames@gmail.com> | 2016-01-25 17:03:05 -0600 |
---|---|---|
committer | nkskjames <nkskjames@gmail.com> | 2016-01-25 17:03:05 -0600 |
commit | 8ca30e800018d4300db6997cd266f8700467e516 (patch) | |
tree | f809f1e169288f76ccd9559b7a63688248651cba /settings_manager.py | |
parent | 6121081ba4fba86bbf2ef42202131bbba3745e93 (diff) | |
parent | 4c60e5ec7bc4567a13fc5ffea0cb51e7850fa9b5 (diff) | |
download | phosphor-settingsd-8ca30e800018d4300db6997cd266f8700467e516.tar.gz phosphor-settingsd-8ca30e800018d4300db6997cd266f8700467e516.zip |
Merge pull request #1 from anoo1/settings
Create the settings dbus object.
Diffstat (limited to 'settings_manager.py')
-rwxr-xr-x | settings_manager.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/settings_manager.py b/settings_manager.py new file mode 100755 index 0000000..53ce7fb --- /dev/null +++ b/settings_manager.py @@ -0,0 +1,94 @@ +#!/usr/bin/python -u + +import gobject +import dbus +import dbus.service +import dbus.mainloop.glib +import Openbmc +import settings_file as s + +DBUS_NAME = 'org.openbmc.settings.Host' +OBJ_NAME = '/org/openbmc/settings/host0' +CONTROL_INTF = 'org.openbmc.Settings' + +# TODO Save settings in tmp until persistant storage is available +# Path where the settings are stored in the BMC +SETTINGS_PATH = '/tmp/' + +class HostSettingsObject(Openbmc.DbusProperties): + def __init__(self,bus,name): + Openbmc.DbusProperties.__init__(self) + dbus.service.Object.__init__(self,bus,name) + + # Listen to changes in the property values and sync them to the BMC + bus.add_signal_receiver(self.settings_signal_handler, + dbus_interface = "org.freedesktop.DBus.Properties", + signal_name = "PropertiesChanged", + path = "/org/openbmc/settings/host0") + + # Create the dbus properties + for i in s.SETTINGS['host'].iterkeys(): + self.sname = s.SETTINGS['host'][i]['name'] + self.stype = s.SETTINGS['host'][i]['type'] + self.svalue = s.SETTINGS['host'][i]['default'] + self.bmcvalue = self.svalue # Default BMC value to file value + self.set_settings_property() + + # Check if the requested value is the same as the current one in the BMC + def check_settings_need_update(self): + filepath = SETTINGS_PATH + self.sname + update = True + try: + with open(filepath, 'r') as f: + self.bmcvalue = f.read() # Upate BMC value with value on system + if self.bmcvalue == self.svalue: + update = False + except (IOError): + pass + return update + + # Create dbus properties based on bmc value. This will be either a value + # previously set, or the default file value if the BMC value does not exist. + def set_settings_property(self): + update = self.check_settings_need_update() + if update == True: + self.svalue = self.bmcvalue # Update svalue with the value that will be used + if self.stype=="i": + self.Set(DBUS_NAME,self.sname,self.svalue) + elif self.stype=="s": + self.Set(DBUS_NAME,self.sname,str(self.svalue)) + + # Save the settings to the BMC. This will write the settings value in + # individual files named by the property name to the BMC. + def set_system_settings(self): + update = self.check_settings_need_update() + if update == True: + filepath = SETTINGS_PATH + self.sname + with open(filepath, 'w') as f: + f.write(str(self.svalue)) + + # Signal handler for when one ore more settings properties were updated. + # This will sync the changes to the BMC. + def settings_signal_handler(self, interface_name, changed_properties, invalidated_properties): + data = changed_properties + for i in data: + self.sname = i + self.svalue = data[i] + self.set_system_settings() + + # Placeholder signal. Needed to register the settings interface. + @dbus.service.signal(DBUS_NAME,signature='s') + def SettingsUpdated(self,sname): + pass + +if __name__ == '__main__': + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + bus = Openbmc.getDBus() + name = dbus.service.BusName(DBUS_NAME, bus) + obj = HostSettingsObject(bus, OBJ_NAME) + mainloop = gobject.MainLoop() + + print "Running HostSettingsService" + mainloop.run() + |