updated flashing
diff --git a/bin/download_manager.py b/bin/download_manager.py
index a079efb..06e8773 100755
--- a/bin/download_manager.py
+++ b/bin/download_manager.py
@@ -23,13 +23,13 @@
bus.add_signal_receiver(self.DownloadHandler,
dbus_interface = "org.openbmc.Flash", signal_name = "Download")
- @dbus.service.signal(DBUS_NAME,signature='s')
- def DownloadComplete(self,outfile):
+ @dbus.service.signal(DBUS_NAME,signature='ss')
+ def DownloadComplete(self,outfile,filename):
print "Download Complete: "+outfile
return outfile
- @dbus.service.signal(DBUS_NAME)
- def DownloadError(self):
+ @dbus.service.signal(DBUS_NAME,signature='s')
+ def DownloadError(self,filename):
pass
def DownloadHandler(self,url,filename):
@@ -39,11 +39,11 @@
print "Downloading: "+filename+" from "+url
outfile = System.FLASH_DOWNLOAD_PATH+"/"+filename
client.download(filename,outfile)
- self.DownloadComplete(outfile)
+ self.DownloadComplete(outfile,filename)
except Exception as e:
print "ERROR DownloadManager: "+str(e)
- self.DownloadError()
+ self.DownloadError(filename)
diff --git a/bin/flash_manager.py b/bin/flash_manager.py
deleted file mode 100755
index 43a1899..0000000
--- a/bin/flash_manager.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import tftpy
-
-
-
-DBUS_NAME = 'org.openbmc.managers.Flash'
-OBJ_NAME = '/org/openbmc/managers/Flash'
-TFTP_PORT = 69
-DOWNLOAD_DIR = '/tmp'
-
-class FlashManagerObject(dbus.service.Object):
- def __init__(self,bus,name):
- self.dbus_objects = { }
- self.status = { 'bios' : 'OK', 'bmc' : 'OK' }
- dbus.service.Object.__init__(self,bus,name)
- ## load utilized objects
- self.dbus_objects = {
- 'bios' : {
- 'bus_name' : 'org.openbmc.flash.Bios',
- 'object_name' : '/org/openbmc/flash/Bios_0',
- 'interface_name' : 'org.openbmc.Flash'
- },
- 'bmc' : {
- 'bus_name' : 'org.openbmc.flash.Bmc',
- 'object_name' : '/org/openbmc/flash/Bmc_0',
- 'interface_name' : 'org.openbmc.Flash'
- }
- }
- bus.add_signal_receiver(self.UpdatedHandler,
- dbus_interface = "org.openbmc.Flash", signal_name = "Updated", path_keyword='path')
-
-
- def UpdatedHandler(self,path = None):
- print "Flash update finish: "+path
- for flash in self.dbus_objects:
- if (path == self.dbus_objects[flash]['object_name']):
- self.status[flash] = 'OK'
-
- 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='a{ss}')
- def getStatus(self):
- return self.status
-
- @dbus.service.method(DBUS_NAME,
- in_signature='sss', out_signature='')
- def updateFromTftp(self,flash,url,filename):
- if (self.dbus_objects.has_key(flash) == False):
- print "ERROR FlashManager: Not a valid flash device: "+flash
- return
- try:
- ## need to make download async
- self.status[flash]="DOWNLOADING"
- filename = str(filename)
- client = tftpy.TftpClient(url, TFTP_PORT)
- print "Downloading: "+filename+" from "+url
- outfile = DOWNLOAD_DIR+"/"+filename
- client.download(filename,outfile)
- intf = self.getInterface(flash)
- self.status[flash]="FLASHING"
- intf.update(outfile)
-
- except Exception as e:
- print "ERROR FlashManager: "+str(e)
- self.status="ERROR"
-
-
-
-if __name__ == '__main__':
- dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
- bus = Openbmc.getDBus()
- name = dbus.service.BusName(DBUS_NAME, bus)
- obj = FlashManagerObject(bus, OBJ_NAME)
- mainloop = gobject.MainLoop()
-
- print "Running Flash Manager"
- mainloop.run()
-
diff --git a/bin/ipmi_example.py b/bin/ipmi_example.py
index 63d5df4..87b93a6 100755
--- a/bin/ipmi_example.py
+++ b/bin/ipmi_example.py
@@ -89,10 +89,14 @@
for i in data:
for k in data[i].keys():
print k+" = "+str(data[i][k])
- elif (cmd == "updatefw"):
+ elif (cmd == "updatefwftp"):
obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
intf = dbus.Interface(obj,"org.openbmc.Flash")
intf.updateViaTftp(sys.argv[2],sys.argv[3])
+ elif (cmd == "updatefwfile"):
+ obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
+ intf = dbus.Interface(obj,"org.openbmc.Flash")
+ intf.update(sys.argv[2])
elif (cmd == "fwstatus"):
intf = Openbmc.getManagerInterface(bus,"Flash")
status = intf.getStatus()
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 7ea3f02..000a60b 100755
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -33,7 +33,6 @@
bus.add_signal_receiver(self.NewBusHandler,
dbus_interface = 'org.freedesktop.DBus',
signal_name = "NameOwnerChanged")
- bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
self.current_state = ""
@@ -127,7 +126,6 @@
if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True and
System.SYSTEM_CONFIG[bus_name].has_key('popen') and
System.SYSTEM_CONFIG[bus_name]['monitor_process'] == True):
- ## even if process doesn't request heartbeat check,
## make sure process is still alive
p = System.SYSTEM_CONFIG[bus_name]['popen']
p.poll()
@@ -135,27 +133,8 @@
print "Process for "+bus_name+" appears to be dead"
self.start_process(bus_name)
- ## process is alive, now check if heartbeat received
- ## during previous interval
- elif (System.SYSTEM_CONFIG[bus_name]['heartbeat'] == 'yes'):
- if (System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] == 0):
- print "Heartbeat error: "+bus_name
- p = System.SYSTEM_CONFIG[bus_name]['popen']
- ## TODO: error checking
- p.poll()
- if (p.returncode == None):
- print "Process must be hung, so killing"
- p.kill()
-
- self.start_process(bus_name)
- else:
- System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
-
return True
- def HeartbeatHandler(self,bus_name):
- System.SYSTEM_CONFIG[bus_name]['heartbeat_count']=1
-
def check_state_started(self):
r = True
if (self.current_state == ""):
@@ -171,10 +150,18 @@
def NewBusHandler(self, bus_name, a, b):
if (len(b) > 0 and bus_name.find(Openbmc.BUS_PREFIX) == 0):
+ start_time = time.time()
objects = {}
- Openbmc.get_objs(bus,bus_name,"",objects)
- for instance_name in objects.keys():
- self.bus_name_lookup[objects[instance_name]['PATH']] = bus_name
+ try:
+ Openbmc.get_objs(bus,bus_name,"",objects)
+ for instance_name in objects.keys():
+ self.bus_name_lookup[objects[instance_name]['PATH']] = bus_name
+ end_time = time.time()
+ print "Elapsed time was %g seconds" % (end_time - start_time)
+ print bus_name
+
+ except:
+ pass
if (System.SYSTEM_CONFIG.has_key(bus_name)):
System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0