lots of changes
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index ae48df0..6fb8fb3 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -43,10 +43,18 @@
'system_state' : 'STANDBY',
'start_process' : True,
'monitor_process' : True,
- 'process_name' : 'inventory_manager.py',
+ 'process_name' : 'inventory_items.py',
'heartbeat' : 'no',
'instances' : [ { 'name' : 'Barreleye' } ]
}
+SYSTEM_CONFIG['org.openbmc.control.PciePresent'] = {
+ 'system_state' : 'POWERING_ON',
+ 'start_process' : True,
+ 'monitor_process' : False,
+ 'process_name' : 'pcie_slot_present.exe',
+ 'heartbeat' : 'no',
+ 'instances' : [ { 'name' : 'Slots_0' } ]
+ }
SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
@@ -140,15 +148,7 @@
'monitor_process' : True,
'process_name' : 'sensor_host_status.exe',
'heartbeat' : "no",
- 'instances' : [ { 'name' : 'HostStatus_0',
- 'properties' : {
- 'org.openbmc.SensorIpmi': {
- 'sensor_id' : 43,
- },
- }
-
- }
- ]
+ 'instances' : [ { 'name' : 'HostStatus_0' } ]
}
SYSTEM_CONFIG['org.openbmc.leds.ChassisIdentify'] = {
'system_state' : 'STANDBY',
@@ -224,80 +224,149 @@
'name' : True,
'user_label' : True,
'location' : True,
- 'state' : True,
+ 'state' : True,
'cache' : True
}
+INVENTORY_ROOT = '/org/openbmc/inventory/items'
FRU_INSTANCES = {
- '/system' :
+ '<inventory_root>/system' :
{
- 'ftype' : Openbmc.FRU_TYPES['SYSTEM'],
- 'fru' : True,
+ 'fru_type' : Openbmc.FRU_TYPES['SYSTEM'],
+ 'is_fru' : True,
},
- '/system/motherboard' :
+ '<inventory_root>/system/io_board' :
{
- 'ftype' : Openbmc.FRU_TYPES['MAIN_PLANAR'],
+ 'fru_type' : Openbmc.FRU_TYPES['MAIN_PLANAR'],
'manufacturer' : 'FOXCONN',
- 'fru' : True,
- 'fru_id' : 31,
- 'location' : 'C0',
+ 'is_fru' : True,
+ 'location' : 'C1',
},
- '/system/fan0' :
+
+ '<inventory_root>/system/motherboard' :
{
- 'ftype' : Openbmc.FRU_TYPES['FAN'],
+ 'fru_type' : Openbmc.FRU_TYPES['MAIN_PLANAR'],
+ 'manufacturer' : 'FOXCONN',
+ 'is_fru' : True,
+ 'location' : 'C0',
+ },
+ '<inventory_root>/system/fan0' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['FAN'],
'manufacturer' : 'DELTA',
- 'fru' : True,
- 'location' : 'F0',
+ 'is_fru' : True,
+ 'location' : 'F0',
},
- '/system/fan1' :
+ '<inventory_root>/system/fan1' :
{
- 'ftype' : Openbmc.FRU_TYPES['FAN'],
+ 'fru_type' : Openbmc.FRU_TYPES['FAN'],
'manufacturer' : 'DELTA',
- 'fru' : True,
- 'location' : 'F1',
+ 'is_fru' : True,
+ 'location' : 'F1',
},
- '/system/motherboard/bmc' :
+ '<inventory_root>/system/io_board/bmc' :
{
- 'ftype' : Openbmc.FRU_TYPES['BMC'],
+ 'fru_type' : Openbmc.FRU_TYPES['BMC'],
'manufacturer' : 'ASPEED',
- 'fru' : True,
+ 'is_fru' : False,
},
- '/system/motherboard/cpu0' :
+ '<inventory_root>/system/motherboard/cpu0' :
{
- 'ftype' : Openbmc.FRU_TYPES['CPU'],
+ 'fru_type' : Openbmc.FRU_TYPES['CPU'],
'manufacturer' : 'IBM',
- 'fru' : True,
- 'location' : 'P0',
- 'fru_id' : 10,
+ 'is_fru' : True,
+ 'location' : 'P0',
},
- '/system/motherboard/cpu0/core0' :
+ '<inventory_root>/system/motherboard/cpu0/core0' :
{
- 'ftype' : Openbmc.FRU_TYPES['CORE'],
- 'fru' : False,
- 'sensor_id' : 1,
+ 'fru_type' : Openbmc.FRU_TYPES['CORE'],
+ 'is_fru' : False,
},
- '/system/motherboard/cpu0/core1' :
+ '<inventory_root>/system/motherboard/cpu0/core1' :
{
- 'ftype' : Openbmc.FRU_TYPES['CORE'],
- 'fru' : False,
- 'sensor_id' : 2,
+ 'fru_type' : Openbmc.FRU_TYPES['CORE'],
+ 'is_fru' : False,
},
- '/system/motherboard/dimm0' :
+ '<inventory_root>/system/motherboard/dimm0' :
{
- 'ftype' : Openbmc.FRU_TYPES['DIMM'],
- 'fru' : True,
- 'fru_id' : 12,
- 'sensor_id' : 20,
+ 'fru_type' : Openbmc.FRU_TYPES['DIMM'],
+ 'is_fru' : True,
},
- '/system/motherboard/dimm1' :
+ '<inventory_root>/system/motherboard/dimm1' :
{
- 'ftype' : Openbmc.FRU_TYPES['DIMM'],
- 'fru' : True,
- 'fru_id' : 13,
- 'sensor_id' : 21,
+ 'fru_type' : Openbmc.FRU_TYPES['DIMM'],
+ 'is_fru' : True,
},
+ '<inventory_root>/system/io_board/pcie_left_slot_riser' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['RISER_CARD'],
+ 'user_label' : 'Left Slot Riser',
+ 'is_fru' : True,
+ },
+ '<inventory_root>/system/io_board/pcie_right_slot_riser' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['RISER_CARD'],
+ 'user_label' : 'Right Slot Riser',
+ 'is_fru' : True,
+ },
+ '<inventory_root>/system/io_board/pcie_x16_slot_riser' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['RISER_CARD'],
+ 'user_label' : 'PCIE x16 Slot Riser',
+ 'is_fru' : True,
+ },
+ '<inventory_root>/system/io_board/pcie_slot0' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['PCIE_CARD'],
+ 'user_label' : 'OCP Mezz card 0',
+ 'is_fru' : True,
+ },
+ '<inventory_root>/system/io_board/pcie_slot1' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['PCIE_CARD'],
+ 'user_label' : 'OCP Mezz card 1',
+ 'is_fru' : True,
+ },
+ '<inventory_root>/system/io_board/pcie_slot2' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['PCIE_CARD'],
+ 'user_label' : 'OCP Mezz card 2',
+ 'is_fru' : True,
+ },
+ '<inventory_root>/system/io_board/pcie_mezz0' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['PCIE_CARD'],
+ 'user_label' : 'OCP Mezz card 0',
+ 'is_fru' : True,
+ },
+ '<inventory_root>/system/io_board/pcie_mezz1' :
+ {
+ 'fru_type' : Openbmc.FRU_TYPES['PCIE_CARD'],
+ 'user_label' : 'OCP Mezz card 1',
+ 'is_fru' : True,
+ },
+
}
+ID_LOOKUP = {
+ 'FRU' : {
+ '14' : '<inventory_root>/system/motherboard/dimm0',
+ },
+ 'SENSOR' : {
+ '21' : '<inventory_root>/system/motherboard/dimm0',
+ '14' : '/org/openbmc/sensors/HostStatus_0',
+ },
+ 'GPIO_PRESENT' : {
+ 'SLOT0_RISER_PRESENT' : '<inventory_root>/system/io_board/pcie_left_slot_riser',
+ 'SLOT1_RISER_PRESENT' : '<inventory_root>/system/io_board/pcie_right_slot_riser',
+ 'SLOT2_RISER_PRESENT' : '<inventory_root>/system/io_board/pcie_x16_slot_riser',
+ 'SLOT0_PRESENT' : '<inventory_root>/system/io_board/pcie_slot0',
+ 'SLOT1_PRESENT' : '<inventory_root>/system/io_board/pcie_slot1',
+ 'SLOT2_PRESENT' : '<inventory_root>/system/io_board/pcie_slot2',
+ 'MEZZ0_PRESENT' : '<inventory_root>/system/io_board/pcie_mezz0',
+ 'MEZZ1_PRESENT' : '<inventory_root>/system/io_board/pcie_mezz1',
+ }
+}
GPIO_CONFIG = {}
GPIO_CONFIG['FSI_CLK'] = { 'gpio_num': 4, 'direction': 'out' }
@@ -307,5 +376,14 @@
GPIO_CONFIG['CRONUS_SEL'] = { 'gpio_num': 6, 'direction': 'out' }
GPIO_CONFIG['PGOOD'] = { 'gpio_num': 23, 'direction': 'in' }
GPIO_CONFIG['IDENTIFY'] = { 'gpio_num': 34, 'direction': 'out' }
-GPIO_CONFIG['POWER_BUTTON'] = { 'gpio_num': 32, 'direction': 'in' }
+GPIO_CONFIG['POWER_BUTTON'] = { 'gpio_num': 32, 'direction': 'in' }
+GPIO_CONFIG['SLOT0_RISER_PRESENT'] = { 'gpio_num': 104, 'direction': 'in' }
+GPIO_CONFIG['SLOT1_RISER_PRESENT'] = { 'gpio_num': 105, 'direction': 'in' }
+GPIO_CONFIG['SLOT2_RISER_PRESENT'] = { 'gpio_num': 106, 'direction': 'in' }
+GPIO_CONFIG['SLOT0_PRESENT'] = { 'gpio_num': 107, 'direction': 'in' }
+GPIO_CONFIG['SLOT1_PRESENT'] = { 'gpio_num': 108, 'direction': 'in' }
+GPIO_CONFIG['SLOT2_PRESENT'] = { 'gpio_num': 109, 'direction': 'in' }
+GPIO_CONFIG['MEZZ0_PRESENT'] = { 'gpio_num': 112, 'direction': 'in' }
+GPIO_CONFIG['MEZZ1_PRESENT'] = { 'gpio_num': 113, 'direction': 'in' }
+
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index 625f36c..af7e79b 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -15,6 +15,7 @@
'FAN' : 5,
'BMC' : 6,
'CORE' : 7,
+ 'PCIE_CARD' : 8,
}
FRU_STATES = {
'NORMAL' : 0,
@@ -56,30 +57,39 @@
def get_objs(bus,bus_name,path,objects):
- obj = bus.get_object(bus_name,path)
+ #print ">>>>>>>>>>>>>>>>>>>>>>>>>>>> "+bus_name+"; "+path
+ tmp_path = path
+ if (path == ""):
+ tmp_path="/"
+ obj = bus.get_object(bus_name,tmp_path)
introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
#print introspect_iface.Introspect()
tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
root = tree.getroot()
+ parent = True
for node in root.iter('node'):
- if (node.attrib.has_key('name') == False):
- for intf in node.iter('interface'):
- intf_name = intf.attrib['name']
- if (intf_name.find(BUS_PREFIX)==0):
- parts=path.split('/')
- instance = parts[len(parts)-1]
- if (objects.has_key(instance) == False):
- objects[instance] = {}
- objects[instance]['PATH'] = path
- objects[instance]['INIT'] = []
- for method in intf.iter('method'):
- if (method.attrib['name'] == "init"):
- objects[instance]['INIT'].append(intf_name)
+ for intf in node.iter('interface'):
+ intf_name = intf.attrib['name']
+ #if (intf_name.find(BUS_PREFIX)==0):
+ parts=path.split('/')
+ instance = parts[len(parts)-1]
+ if (objects.has_key(instance) == False):
+ objects[instance] = {}
+ objects[instance]['PATH'] = path
+ objects[instance]['INIT'] = []
+ for method in intf.iter('method'):
+ if (method.attrib['name'] == "init"):
+ objects[instance]['INIT'].append(intf_name)
- else:
+ if (node.attrib.has_key('name') == True):
node_name = node.attrib['name']
- if (node_name != path):
- get_objs(bus,bus_name,path+"/"+node.attrib['name'],objects)
+ if (parent == False):
+ get_objs(bus,bus_name,path+"/"+node_name,objects)
+ else:
+ if (node_name != "" and node_name != path):
+ get_objs(bus,bus_name,node_name,objects)
+
+ parent = False
class DbusProperty:
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
new file mode 100644
index 0000000..f679fee
--- /dev/null
+++ b/bin/inventory_items.py
@@ -0,0 +1,135 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+import cPickle
+import json
+
+if (len(sys.argv) < 2):
+ print "Usage: inventory_items.py [system name]"
+ exit(1)
+System = __import__(sys.argv[1])
+import Openbmc
+
+
+INTF_NAME = 'org.openbmc.InventoryItem'
+DBUS_NAME = 'org.openbmc.managers.Inventory'
+
+FRUS = System.FRU_INSTANCES
+FRU_PATH = System.FRU_PATH
+
+class Inventory(dbus.service.Object):
+ def __init__(self,bus,name):
+ dbus.service.Object.__init__(self,bus,name)
+ self.objects = [ ]
+
+ def addItem(self,item):
+ self.objects.append(item)
+
+ @dbus.service.method("org.openbmc.managers.Inventory",
+ in_signature='', out_signature='a{sa{sv}}')
+ def getItems(self):
+ tmp_obj = {}
+ for item in self.objects:
+ tmp_obj[str(item.item['name'])]=item.getItemDict()
+ return tmp_obj
+
+
+
+class InventoryItem(dbus.service.Object):
+ def __init__(self,bus,name):
+ dbus.service.Object.__init__(self,bus,name)
+ ## store all properties in a dict so can easily
+ ## send on dbus
+ self.item = {
+ 'name' : name,
+ 'is_fru' : False,
+ 'fru_type' : 0,
+ 'state' : 0,
+ 'data' : { 'manufacturer' : "" }
+ }
+ #self.name = name
+ #self.is_fru = False
+ #self.fru_type = 0
+ self.cache = True
+ #self.state = 0
+
+ def getItemDict(self):
+ return self.item
+
+ @dbus.service.signal('org.openbmc.EventLog')
+ def EventLog(self, priority, message, rc):
+ pass
+
+ @dbus.service.method('org.openbmc.InventoryItem',
+ in_signature='a{sv}', out_signature='')
+ def update(self,data):
+ ## translate dbus data into basic data types
+ for k in data.keys():
+ d = Openbmc.DbusProperty(k,data[k])
+ self.item['data'][str(k)] = d.getBaseValue()
+ self.saveToCache()
+
+ @dbus.service.method("org.openbmc.SensorValue",
+ in_signature='y', out_signature='')
+ def setValue(self,data):
+ self.item['state'] = data
+ #self.saveToCache()
+ print "Update Fru State: "+str(self.item['state'])
+
+ def isCached(self):
+ return self.cache
+
+ def getCacheFilename(self):
+ global FRU_PATH
+ name = self.item['name'].replace('/','.')
+ filename = FRU_PATH+name[1:]+".fru"
+ return filename
+
+ def saveToCache(self):
+ if (self.isCached() == False):
+ return
+ print "Caching: "+self.item['name']
+ # TODO: error handling
+ output = open(self.getCacheFilename(), 'wb')
+ ## just pickle dict not whole object
+ cPickle.dump(self.item['data'],output)
+ output.close()
+
+ def loadFromCache(self):
+ if (self.isCached() == False):
+ return;
+ ## overlay with pickled data
+ filename=self.getCacheFilename()
+ if (os.path.isfile(filename)):
+ print "Loading from cache: "+filename
+ # TODO: error handling
+ p = open(filename, 'rb')
+ data2 = cPickle.load(p)
+ for k in data2.keys():
+ self.item['data'][k] = data2[k]
+
+
+
+if __name__ == '__main__':
+ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+ bus = dbus.SessionBus()
+ name = dbus.service.BusName(DBUS_NAME,bus)
+ mainloop = gobject.MainLoop()
+ obj_parent = Inventory(bus, '/org/openbmc/managers/Inventory')
+
+ for f in FRUS.keys():
+ obj_path=f.replace("<inventory_root>",System.INVENTORY_ROOT)
+ obj = InventoryItem(bus,obj_path)
+ obj.is_fru = FRUS[f]['is_fru']
+ obj.fru_type = FRUS[f]['fru_type']
+ obj.loadFromCache();
+ obj_parent.addItem(obj)
+
+ print "Running Inventory Manager"
+ mainloop.run()
+
diff --git a/bin/inventory_manager.py b/bin/inventory_manager.py
deleted file mode 100644
index 75cc390..0000000
--- a/bin/inventory_manager.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import cPickle
-import json
-
-if (len(sys.argv) < 2):
- print "Usage: inventory_manager.py [system name]"
- exit(1)
-System = __import__(sys.argv[1])
-import Openbmc
-
-DBUS_NAME = 'org.openbmc.managers.Inventory'
-OBJ_NAME = '/org/openbmc/managers/Inventory'
-FRUS = System.FRU_INSTANCES
-FRU_PATH = System.FRU_PATH
-
-## accessor class to FRU data structure
-class Fru:
- def __init__(self,fru):
- ## validation
- if (FRUS.has_key(fru) == False):
- # TODO: event log
- raise Exception("Invalid FRU path: "+fru)
-
- self.fru = fru
-
- def getField(self,field):
- if (FRUS[self.fru].has_key(field) == False):
- # TODO: event log
- raise Exception("Invalid field: "+field)
-
- return FRUS[self.fru][field]
-
- def isFru(self):
- return FRUS[self.fru]['fru']
-
- def update(self,data):
- for k in data.keys():
- FRUS[self.fru][k] = data[k]
-
- def isCached(self):
- return True
-
- def getCacheFilename(self):
- global FRU_PATH
- name = self.fru.replace('/','.')
- filename = FRU_PATH+name[1:]+".fru"
- return filename
-
- def saveToCache(self):
- if (self.isCached() == False):
- return
- print "Caching: "+self.fru
- # TODO: error handling
- output = open(self.getCacheFilename(), 'wb')
- ## just pickle dict not whole object
- cPickle.dump(FRUS[self.fru],output)
- output.close()
-
- def loadFromCache(self):
- if (self.isCached() == False):
- return;
- ## overlay with pickled data
- filename=self.getCacheFilename()
- if (os.path.isfile(filename)):
- print "Loading from cache: "+filename
- # TODO: error handling
- p = open(filename, 'rb')
- data2 = cPickle.load(p)
- for k in data2.keys():
- FRUS[self.fru][k] = data2[k]
-
- def __str__(self):
- r = "Fru: "+str(self.fru_id)+"\n"
- for f in self.data.keys():
- r = r+f+" = "+str(self.data[f])+"\n"
- return r
-
-
-
-class InventoryManager(dbus.service.Object):
- def __init__(self,bus,name):
- dbus.service.Object.__init__(self,bus,name)
-
- bus.add_signal_receiver(self.UpdateFruHandler,
- dbus_interface = "org.openbmc.sensors.IpmiBt",
- signal_name = 'UpdateFru')
-
- bus.add_signal_receiver(self.SetSensorHandler,
- dbus_interface = "org.openbmc.sensors.IpmiBt",
- signal_name = "SetSensor")
-
- self.fru_db = {}
- self.fru_id_lookup = {}
- self.sensor_id_lookup = {}
-
- for fru_path in FRUS.keys():
- self.addFru(fru_path)
- f = FRUS[fru_path]
- if (f.has_key('fru_id')):
- self.fru_id_lookup[f['fru_id']] = fru_path
- if (f.has_key('sensor_id')):
- self.sensor_id_lookup[f['sensor_id']] = fru_path
-
- @dbus.service.signal('org.openbmc.EventLog')
- def EventLog(self, priority, message, rc):
- pass
-
- def UpdateFruHandler(self,fru_id,data):
- self.updateFruFromId(fru_id,data)
-
- def SetSensorHandler(self,sensor_id,data):
- fru_path = self.getFruSensor(sensor_id)
- if (fru_path != ""):
- state = { 'state' : data }
- self.updateFru(fru_path,state)
-
- @dbus.service.method(DBUS_NAME,
- in_signature='y', out_signature='s')
- def getFruSensor(self,sensor_id):
- if (self.sensor_id_lookup.has_key(sensor_id) == False):
- return ""
- return self.sensor_id_lookup[sensor_id]
-
- def addFru(self,fru_path):
- new_fru = Fru(fru_path)
- new_fru.loadFromCache()
- self.fru_db[fru_path] = new_fru
-
- @dbus.service.method(DBUS_NAME,
- in_signature='ia{sv}', out_signature='')
- def updateFruFromId(self,fru_id,data):
- iid = int(fru_id)
- if (self.fru_id_lookup.has_key(iid) == False):
- self.EventLog(1,"FRU ID not found: "+str(iid),1)
- else:
- self.updateFru(self.fru_id_lookup[iid],data)
-
-
- @dbus.service.method(DBUS_NAME,
- in_signature='sa{sv}', out_signature='')
- def updateFru(self,fru_path,data):
- ## translate dbus data into basic data types
- clean_data = {}
- for k in data.keys():
- d = Openbmc.DbusProperty(k,data[k])
- clean_data[str(k)] = d.getBaseValue()
-
- if (self.fru_db.has_key(fru_path)):
- ## update properties then save to cache
- print "Updating FRU: "+fru_path
- self.fru_db[fru_path].update(clean_data)
- self.fru_db[fru_path].saveToCache()
-
-
- @dbus.service.method(DBUS_NAME,
- in_signature='', out_signature='a{sa{sv}}')
- def getFrus(self):
- return FRUS
-
-
-if __name__ == '__main__':
- dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
- bus = dbus.SessionBus()
- name = dbus.service.BusName(DBUS_NAME,bus)
- obj = InventoryManager(bus,OBJ_NAME)
- mainloop = gobject.MainLoop()
-
- print "Running Inventory Manager"
- mainloop.run()
-
diff --git a/bin/ipmi_example.py b/bin/ipmi_example.py
index 1d0061d..290fc33 100644
--- a/bin/ipmi_example.py
+++ b/bin/ipmi_example.py
@@ -10,21 +10,12 @@
import Openbmc
-DBUS_NAME = 'org.openbmc.sensors.IpmiBt'
-OBJ_NAME = '/org/openbmc/sensors/IpmiBt'
+SENSOR_INTERFACE = "org.openbmc.SensorValue"
class IpmiBt(dbus.service.Object):
def __init__(self,bus,name):
dbus.service.Object.__init__(self,bus,name)
- @dbus.service.signal('org.openbmc.sensors.IpmiBt')
- def SetSensor(self, ipmi_id, value):
- pass
-
- @dbus.service.signal('org.openbmc.sensors.IpmiBt')
- def UpdateFru(self, ipmi_id, data):
- pass
-
def getWatchdog():
obj = bus.get_object('org.openbmc.watchdog.Host',
@@ -47,17 +38,16 @@
if __name__ == '__main__':
- dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+ #dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
- name = dbus.service.BusName(DBUS_NAME,bus)
- obj = IpmiBt(bus,OBJ_NAME)
- mainloop = gobject.MainLoop()
+ #name = dbus.service.BusName(DBUS_NAME,bus)
+ #mainloop = gobject.MainLoop()
cmd = sys.argv[1]
data = None
ipmi_id = dbus.Byte(0)
if (len(sys.argv) > 2):
- ipmi_id = dbus.Byte(int(sys.argv[2]))
+ ipmi_id = sys.argv[2]
if (len(sys.argv)>3):
data = sys.argv[3]
@@ -68,18 +58,36 @@
intf = getChassisControl()
intf.powerOff()
elif (cmd == "setsensor"):
- obj.SetSensor(ipmi_id,dbus.Byte(int(data)))
+ intf_sys = Openbmc.getManagerInterface(bus,"System")
+ obj_info = intf_sys.getObjectFromId("SENSOR",ipmi_id)
+ obj_path = obj_info['obj_path']
+ bus_name = obj_info['bus_name']
+ if (obj_path != "" and bus_name != ""):
+ obj = bus.get_object(bus_name,obj_path)
+ intf = dbus.Interface(obj,SENSOR_INTERFACE)
+ intf.setValue(dbus.Byte(int(data)))
+
elif (cmd == "getsensors"):
intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
data = intf_sens.getSensors()
prettyPrint(data)
elif (cmd == "updatefru"):
d = { 'manufacturer' : data }
- obj.UpdateFru(ipmi_id,d)
+ intf_sys = Openbmc.getManagerInterface(bus,"System")
+ obj_info = intf_sys.getObjectFromId("FRU",ipmi_id)
+ obj_path = obj_info['obj_path']
+ bus_name = obj_info['bus_name']
+ if (obj_path != "" and bus_name != ""):
+ obj = bus.get_object(bus_name,obj_path)
+ intf = dbus.Interface(obj,"org.openbmc.InventoryItem")
+ intf.update(d)
+
elif (cmd == "getfrus"):
intf_fru = Openbmc.getManagerInterface(bus,"Inventory")
- data = intf_fru.getFrus()
- prettyPrint(data)
+ data = intf_fru.getItems()
+ for i in data:
+ for k in data[i].keys():
+ print k+" = "+str(data[i][k])
elif (cmd == "pokewatchdog"):
intf = self.getWatchdog()
intf.poke()
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 1bc90a3..a5b8023 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -2,7 +2,6 @@
import sys
import subprocess
-#from gi.repository import GObject
import gobject
import dbus
import dbus.service
@@ -41,15 +40,23 @@
signal_name = "EventLog",
path_keyword='path')
-
-
self.current_state = ""
self.system_states = {}
+ self.bus_name_lookup = {}
+
for bus_name in System.SYSTEM_CONFIG.keys():
sys_state = System.SYSTEM_CONFIG[bus_name]['system_state']
if (self.system_states.has_key(sys_state) == False):
self.system_states[sys_state] = []
self.system_states[sys_state].append(bus_name)
+
+ ## replace symbolic path in ID_LOOKUP
+ for category in System.ID_LOOKUP:
+ for key in System.ID_LOOKUP[category]:
+ val = System.ID_LOOKUP[category][key]
+ new_val = val.replace("<inventory_root>",System.INVENTORY_ROOT)
+ System.ID_LOOKUP[category][key] = new_val
+
self.SystemStateHandler("INIT")
print "SystemManager Init Done"
@@ -86,7 +93,27 @@
method()
self.current_state = state_name
-
+
+ @dbus.service.method(DBUS_NAME,
+ in_signature='ss', out_signature='a{ss}')
+ def getObjectFromId(self,category,key):
+ bus_name = ""
+ obj_path = ""
+
+ if (System.ID_LOOKUP.has_key(category)):
+ if (System.ID_LOOKUP[category].has_key(key)):
+ obj_path = System.ID_LOOKUP[category][key]
+ else:
+ print "ERROR: key not found: "+category+","+key
+
+ if (self.bus_name_lookup.has_key(obj_path)):
+ bus_name = self.bus_name_lookup[obj_path]
+ else:
+ print "ERROR: bus name not found for: "+obj_path
+ r = { 'bus_name' : bus_name, 'obj_path' : obj_path }
+ return r
+
+
def start_process(self,bus_name):
if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
process_name = System.BIN_PATH+System.SYSTEM_CONFIG[bus_name]['process_name']
@@ -154,11 +181,13 @@
def NewBusHandler(self, bus_name, a, b):
if (len(b) > 0 and bus_name.find(Openbmc.BUS_PREFIX) == 0):
+ objects = {}
+ Openbmc.get_objs(bus,bus_name,"",objects)
+ for instance_name in objects.keys():
+ self.bus_name_lookup[objects[instance_name]['PATH']] = bus_name
+
if (System.SYSTEM_CONFIG.has_key(bus_name)):
System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
- objects = {}
- Openbmc.get_objs(bus,bus_name,Openbmc.OBJ_PREFIX,objects)
-
for instance_name in objects.keys():
obj_path = objects[instance_name]['PATH']
for instance in System.SYSTEM_CONFIG[bus_name]['instances']: