first commit
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
new file mode 100644
index 0000000..6c01c39
--- /dev/null
+++ b/bin/chassis_control.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+
+class ChassisControlObject(dbus.service.Object):
+ def __init__(self,bus,name):
+ self.power_state=0
+ dbus.service.Object.__init__(self,bus,name)
+ bus = dbus.SessionBus()
+ try:
+ # Get PowerControl object
+ power_control_service = bus.get_object('org.openbmc.PowerControl','/org/openbmc/PowerControl/0')
+ self.power_control_iface = dbus.Interface(power_control_service, 'org.openbmc.PowerControl')
+ # Get ChassisIdentify object
+ chassis_identify_service = bus.get_object('org.openbmc.ChassisIdentify','/org/openbmc/ChassisIdentify/0')
+ self.identify_led_iface = dbus.Interface(chassis_identify_service, 'org.openbmc.Led');
+ # Get HostControl object
+ host_control_service = bus.get_object('org.openbmc.HostControl','/org/openbmc/HostControl/0')
+ self.host_control_iface = dbus.Interface(host_control_service, 'org.openbmc.HostControl');
+
+
+ except dbus.exceptions.DBusException, e:
+ # TODO: not sure what to do if can't find other services
+ print "Unable to find dependent services: ",e
+
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='', out_signature='s')
+ def getID(self):
+ return id
+
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='', out_signature='')
+ def setIdentify(self):
+ print "Turn on identify"
+ self.identify_led_iface.setOn()
+ return None
+
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='', out_signature='')
+ def clearIdentify(self):
+ print "Turn off identify"
+ r=self.identify_led_iface.setOff()
+ return None
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='', out_signature='')
+ def setPowerOn(self):
+ print "Turn on power and boot"
+ self.power_state=0
+ if (self.getPowerState()==0):
+ self.power_control_iface.setPowerState(1)
+ self.power_state=1
+ return None
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='', out_signature='')
+ def setPowerOff(self):
+ print "Turn off power"
+ self.power_control_iface.setPowerState(0);
+ return None
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='', out_signature='i')
+ def getPowerState(self):
+ state = self.power_control_iface.getPowerState();
+ return state
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='', out_signature='')
+ def setDebugMode(self):
+ return None
+
+ @dbus.service.method("org.openbmc.ChassisControl",
+ in_signature='i', out_signature='')
+ def setPowerPolicy(self,policy):
+ return None
+
+ ## Signal handler
+ def power_button_signal_handler(self):
+ # only power on if not currently powered on
+ state = self.getPowerState()
+ if state == 0:
+ self.setPowerOn()
+ elif state == 1:
+ self.setPowerOff();
+
+ # TODO: handle long press and reset
+
+ ## Signal handler
+ def power_good_signal_handler(self):
+ if (self.power_state==1):
+ self.host_control_iface.boot()
+ self.power_state=2
+
+
+
+if __name__ == '__main__':
+ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+ bus = dbus.SessionBus()
+ name = dbus.service.BusName("org.openbmc.ChassisControl", bus)
+ object = ChassisControlObject(bus, '/org/openbmc/ChassisControl')
+ mainloop = gobject.MainLoop()
+ bus.add_signal_receiver(object.power_button_signal_handler, dbus_interface = "org.openbmc.Button", signal_name = "ButtonPressed")
+ bus.add_signal_receiver(object.power_good_signal_handler, dbus_interface = "org.openbmc.PowerControl", signal_name = "PowerGood")
+
+ print "Running ChassisControlService"
+ mainloop.run()
+