lots of changes
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index 4be1afc..455030b 100644
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -7,7 +7,7 @@
import dbus.mainloop.glib
DBUS_NAME = 'org.openbmc.control.Chassis'
-OBJ_NAME = '/org/openbmc/control/Chassis/'+sys.argv[1]
+OBJ_NAME = '/org/openbmc/control/'+sys.argv[1]
POWER_OFF = 0
POWER_ON = 1
@@ -20,61 +20,37 @@
dbus.service.Object.__init__(self,bus,name)
## load utilized objects
- self.dbus_busses = {
- 'org.openbmc.control.Power' :
- [ { 'name' : 'PowerControl1' , 'intf' : 'org.openbmc.control.Power' } ],
- 'org.openbmc.leds.ChassisIdentify' :
- [ { 'name' : 'ChassisIdentify1', 'intf' : 'org.openbmc.control.Chassis' } ],
- 'org.openbmc.control.Host' :
- [ { 'name' : 'HostControl1', 'intf' : 'org.openbmc.control.Host' } ]
+ self.dbus_objects = {
+ 'power_control' : {
+ 'bus_name' : 'org.openbmc.control.Power',
+ 'object_name' : '/org/openbmc/control/SystemPower_0',
+ 'interface_name' : 'org.openbmc.control.Power'
+ },
+ 'identify_led' : {
+ 'bus_name' : 'org.openbmc.leds.ChassisIdentify',
+ 'object_name' : '/org/openbmc/leds/ChassisIdentify_0',
+ 'interface_name' : 'org.openbmc.Led'
+ }
}
- self.power_sequence = 0
+ #self.power_sequence = 0
self.reboot = 0
self.last_power_state = 0
bus = dbus.SessionBus()
- ## add signal handler to detect when new objects show up on dbus
- bus.add_signal_receiver(self.request_name,
- dbus_interface = 'org.freedesktop.DBus',
- signal_name = "NameOwnerChanged")
bus.add_signal_receiver(self.power_button_signal_handler,
dbus_interface = "org.openbmc.Button", signal_name = "ButtonPressed",
- path="/org/openbmc/buttons/ButtonPower/PowerButton1" )
- bus.add_signal_receiver(self.power_good_signal_handler,
- dbus_interface = "org.openbmc.control.Power", signal_name = "PowerGood")
- bus.add_signal_receiver(self.power_lost_signal_handler,
- dbus_interface = "org.openbmc.control.Power", signal_name = "PowerLost")
+ path="/org/openbmc/buttons/PowerButton_0" )
bus.add_signal_receiver(self.host_watchdog_signal_handler,
dbus_interface = "org.openbmc.Watchdog", signal_name = "WatchdogError")
- bus.add_signal_receiver(self.host_status_signal_handler,
- dbus_interface = "org.openbmc.SensorMatch", signal_name = "SensorMatch",
- path="/org/openbmc/sensors/HostStatus/HostStatus1")
+ bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
- try:
- for bus_name in self.dbus_busses.keys():
- self.request_name(bus_name,"",bus_name)
- except:
- ## its ok if this fails. hotplug will detect too
- print "Warning: One of processes not started yet."
- pass
-
-
- def request_name(self, bus_name, a, b):
- # bus added
- if (len(b) > 0 ):
- ## if bus in required list for this object, then save a pointer to interface
- ## for method calls
- if (self.dbus_busses.has_key(bus_name)):
- obj_path = "/"+bus_name.replace('.','/')
- for objs in self.dbus_busses[bus_name]:
- inst_name = objs['name']
- print "Chassis control: "+inst_name
- obj = bus.get_object(bus_name,obj_path+"/"+inst_name)
- self.dbus_objects[inst_name] = dbus.Interface(obj, objs['intf'])
-
+ def getInterface(self,name):
+ o = self.dbus_objects[name]
+ obj = bus.get_object(o['bus_name'],o['object_name'])
+ return dbus.Interface(obj,o['interface_name'])
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='s')
@@ -85,40 +61,56 @@
in_signature='', out_signature='')
def setIdentify(self):
print "Turn on identify"
- self.dbus_objects['ChassisIdentify1'].setOn()
+ intf = self.getInterface('identify_led')
+ intf.setOn()
return None
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='')
def clearIdentify(self):
- print "Turn off identify"
- r=self.dbus_objects['ChassisIdentify1'].setOff()
+ print "Turn on identify"
+ intf = self.getInterface('identify_led')
+ intf.setOff()
return None
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='')
- def setPowerOn(self):
+ def powerOn(self):
print "Turn on power and boot"
- self.power_sequence = 0
self.reboot = 0
if (self.getPowerState()==0):
- self.dbus_objects['PowerControl1'].setPowerState(POWER_ON)
- self.power_sequence = 1
+ intf = self.getInterface('power_control')
+ intf.setPowerState(POWER_ON)
return None
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='')
- def setPowerOff(self):
- self.power_sequence = 0
+ def powerOff(self):
print "Turn off power"
- self.dbus_objects['PowerControl1'].setPowerState(POWER_OFF);
+ intf = self.getInterface('power_control')
+ intf.setPowerState(POWER_OFF)
+ return None
+
+ @dbus.service.method(DBUS_NAME,
+ in_signature='', out_signature='')
+ def softPowerOff(self):
+ print "Soft off power"
+ ## Somehow tell host to shutdown via ipmi
+ return None
+
+ @dbus.service.method(DBUS_NAME,
+ in_signature='', out_signature='')
+ def reboot(self):
+ print "Rebooting"
+ self.reboot=1
+ intf.softPowerOff()
return None
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='i')
def getPowerState(self):
- state = self.dbus_objects['PowerControl1'].getPowerState();
- return state
+ intf = self.getInterface('power_control')
+ return intf.getPowerState()
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='')
@@ -132,36 +124,26 @@
## Signal handler
+
+ def SystemStateHandler(self,state_name):
+ if (state_name == "POWERED_OFF" and self.reboot==1):
+ self.powerOn()
+
+
def power_button_signal_handler(self):
# toggle power
state = self.getPowerState()
if state == POWER_OFF:
- self.setPowerOn()
+ self.powerOn()
elif state == POWER_ON:
- self.setPowerOff();
+ self.powerOff();
# TODO: handle long press and reset
- ## Signal handlers
- def power_good_signal_handler(self):
- if (self.power_sequence==1):
- self.dbus_objects['HostControl1'].boot()
- self.power_sequence = 2
-
- def host_status_signal_handler(self,value):
- if (value == BOOTED and self.power_sequence==2):
- self.power_sequence=0
- print "Host booted"
-
- def power_lost_signal_handler(self):
- ## Reboot if power is lost but reboot requested
- if (self.reboot == 1):
- self.setPowerOn()
-
def host_watchdog_signal_handler(self):
- print "Watchdog Error, Rebooting"
+ print "Watchdog Error, Hard Rebooting"
self.reboot = 1
- self.setPowerOff()
+ self.powerOff()
if __name__ == '__main__':