summaryrefslogtreecommitdiffstats
path: root/settings_manager.py
diff options
context:
space:
mode:
authornkskjames <nkskjames@gmail.com>2016-01-25 17:03:05 -0600
committernkskjames <nkskjames@gmail.com>2016-01-25 17:03:05 -0600
commit8ca30e800018d4300db6997cd266f8700467e516 (patch)
treef809f1e169288f76ccd9559b7a63688248651cba /settings_manager.py
parent6121081ba4fba86bbf2ef42202131bbba3745e93 (diff)
parent4c60e5ec7bc4567a13fc5ffea0cb51e7850fa9b5 (diff)
downloadphosphor-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-xsettings_manager.py94
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()
+
OpenPOWER on IntegriCloud