lots of changes
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index d11ab40..22c0314 100644
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -1,42 +1,63 @@
#!/usr/bin/env python
+import sys
import gobject
import dbus
import dbus.service
import dbus.mainloop.glib
+import System
DBUS_NAME = 'org.openbmc.control.Chassis'
-OBJ_NAME = '/org/openbmc/control/Chassis'
+OBJ_NAME = '/org/openbmc/control/Chassis/'+sys.argv[1]
POWER_OFF = 0
POWER_ON = 1
+process_config = System.BarreleyeProcesses()
+
+
+
class ChassisControlObject(dbus.service.Object):
def __init__(self,bus,name):
+ self.dbus_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.power_sequence = 0
dbus.service.Object.__init__(self,bus,name)
bus = dbus.SessionBus()
try:
- # Get PowerControl object
- power_control_service = bus.get_object('org.openbmc.control.Power','/org/openbmc/control/Power/0')
- self.power_control_iface = dbus.Interface(power_control_service, 'org.openbmc.control.Power')
- # Get ChassisIdentify object
- chassis_identify_service = bus.get_object('org.openbmc.leds.ChassisIdentify','/org/openbmc/leds/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.control.Host','/org/openbmc/control/Host/0')
- self.host_control_iface = dbus.Interface(host_control_service, 'org.openbmc.control.Host');
-
- bus.add_signal_receiver(self.power_button_signal_handler,
- dbus_interface = "org.openbmc.Button", signal_name = "ButtonPressed")
- bus.add_signal_receiver(self.power_good_signal_handler,
- dbus_interface = "org.openbmc.control.Power", signal_name = "PowerGood")
-
-
+ for bus_name in self.dbus_busses.keys():
+ self.request_name(bus_name,"",bus_name)
+ bus.add_signal_receiver(self.request_name,
+ dbus_interface = 'org.freedesktop.DBus',
+ signal_name = "NameOwnerChanged")
except dbus.exceptions.DBusException, e:
# TODO: not sure what to do if can't find other services
- print "Unable to find dependent services: ",e
+ print e
+ 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",
+ path="/org/openbmc/control/Power/PowerControl1")
+
+
+
+ def request_name(self, bus_name, a, b):
+ # bus added
+ if (len(b) > 0 ):
+ 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']
+ obj = bus.get_object(bus_name,obj_path+"/"+inst_name)
+ print "Interface: "+inst_name+","+objs['intf']
+ self.dbus_objects[inst_name] = dbus.Interface(obj, objs['intf'])
+
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='s')
@@ -48,7 +69,7 @@
in_signature='', out_signature='')
def setIdentify(self):
print "Turn on identify"
- self.identify_led_iface.setOn()
+ self.dbus_objects['ChassisIdentify1'].setOn()
return None
@@ -56,7 +77,7 @@
in_signature='', out_signature='')
def clearIdentify(self):
print "Turn off identify"
- r=self.identify_led_iface.setOff()
+ r=self.dbus_objects['ChassisIdentify1'].setOff()
return None
@dbus.service.method(DBUS_NAME,
@@ -65,7 +86,7 @@
print "Turn on power and boot"
self.power_sequence = 0
if (self.getPowerState()==0):
- self.power_control_iface.setPowerState(POWER_ON)
+ self.dbus_objects['PowerControl1'].setPowerState(POWER_ON)
self.power_sequence = 1
return None
@@ -73,13 +94,13 @@
in_signature='', out_signature='')
def setPowerOff(self):
print "Turn off power"
- self.power_control_iface.setPowerState(POWER_OFF);
+ self.dbus_objects['PowerControl1'].setPowerState(POWER_OFF);
return None
@dbus.service.method(DBUS_NAME,
in_signature='', out_signature='i')
def getPowerState(self):
- state = self.power_control_iface.getPowerState();
+ state = self.dbus_objects['PowerControl1'].getPowerState();
return state
@dbus.service.method(DBUS_NAME,
@@ -106,7 +127,7 @@
## Signal handler
def power_good_signal_handler(self):
if (self.power_sequence==1):
- self.host_control_iface.boot()
+ self.dbus_objects['HostControl1'].boot()
self.power_sequence = 2