Merge pull request #72 from adamliyi/occ_hardlink

[skeleton]: Fix hard-coded path name when creating sensor object
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 401f6f2..612846c 100755
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -716,6 +716,28 @@
 		'101' :  { 'object_path' : 'temperature/membuf7','poll_interval' : 5000,'scale' : 1000,'units' : 'C' },
 		}
 	},
+	'4-0010' :  {
+		'names' : {
+			# Barreleye uses 0.25 millioohms sense resistor for adm1278
+			# To convert Iout register value Y to real-world value X, use an equation:
+			# X= 1/m * (Y * 10^-R - b), here m = 800 * R_sense, and R_sense is expressed in milliohms.
+			# The adm1278 driver did the conversion, but the R_sense is set here as a scale factor. 
+			'curr1_input' : { 'object_path' : 'HSCA/Iout','poll_interval' : 5000,'scale' : 0.25,'units' : 'mA' },
+			'in2_input' : { 'object_path' : 'HSCA/Vout','poll_interval' : 5000,'scale' : 1,'units' : 'mV' },
+		}
+	},
+	'5-0010' :  {
+		'names' : {
+			'curr1_input' : { 'object_path' : 'HSCB/Iout','poll_interval' : 5000,'scale' : 0.25,'units' : 'mA' },
+			'in2_input' : { 'object_path' : 'HSCB/Vout','poll_interval' : 5000,'scale' : 1,'units' : 'mV' },
+		}
+	},
+	'6-0010' :  {
+		'names' : {
+			'curr1_input' : { 'object_path' : 'HSCC/Iout','poll_interval' : 5000,'scale' : 0.25,'units' : 'mA' },
+			'in2_input' : { 'object_path' : 'HSCC/Vout','poll_interval' : 5000,'scale' : 1,'units' : 'mV' },
+		}
+	},
 }
 
 # Miscellaneous non-poll sensor with system specific properties.
diff --git a/bin/Palmetto.py b/bin/Palmetto.py
index 4c23068..832c650 100755
--- a/bin/Palmetto.py
+++ b/bin/Palmetto.py
@@ -123,6 +123,12 @@
 		'monitor_process' : True,
 		'process_name'    : 'flash_bios.exe',
 	},
+	'bmc_flash_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'bmc_update.py',
+	},
 	'download_manager' : {
 		'system_state'    : 'BMC_STARTING',
 		'start_process'   : True,
@@ -184,7 +190,7 @@
 	'<inventory_root>/system/chassis/motherboard/cpu0/core11' : { 'fru_type' : 'CORE', 'is_fru' : False, },
 
 	
-	'<inventory_root>/system/chassis/motherboard/centaur0' : { 'fru_type' : 'MEMORY_BUFFER', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/membuf0' : { 'fru_type' : 'MEMORY_BUFFER', 'is_fru' : False, },
 
 	'<inventory_root>/system/chassis/motherboard/dimm0' : { 'fru_type' : 'DIMM', 'is_fru' : True,},
 	'<inventory_root>/system/chassis/motherboard/dimm1' : { 'fru_type' : 'DIMM', 'is_fru' : True,},
@@ -206,7 +212,7 @@
 		0x0d : '<inventory_root>/system/chassis',
 		0x34 : '<inventory_root>/system/chassis/motherboard',
 		0x01 : '<inventory_root>/system/chassis/motherboard/cpu0',
-		0x02 : '<inventory_root>/system/chassis/motherboard/centaur0',
+		0x02 : '<inventory_root>/system/chassis/motherboard/membuf0',
 		0x03 : '<inventory_root>/system/chassis/motherboard/dimm0',
 		0x04 : '<inventory_root>/system/chassis/motherboard/dimm1',
 		0x05 : '<inventory_root>/system/chassis/motherboard/dimm2',
@@ -217,7 +223,7 @@
 		'PRODUCT_15' : '<inventory_root>/system',
 		'CHASSIS_2' : '<inventory_root>/system/chassis',
 		'BOARD_1'   : '<inventory_root>/system/chassis/motherboard/cpu0',
-		'BOARD_2'   : '<inventory_root>/system/chassis/motherboard/centaur0',
+		'BOARD_2'   : '<inventory_root>/system/chassis/motherboard/membuf0',
 		'BOARD_14'   : '<inventory_root>/system/chassis/motherboard',
 		'PRODUCT_3'   : '<inventory_root>/system/chassis/motherboard/dimm0',
 		'PRODUCT_4'   : '<inventory_root>/system/chassis/motherboard/dimm1',
@@ -244,7 +250,7 @@
 		0x2b : '<inventory_root>/system/chassis/motherboard/cpu0/core9',
 		0x2c : '<inventory_root>/system/chassis/motherboard/cpu0/core10',
 		0x2d : '<inventory_root>/system/chassis/motherboard/cpu0/core11',
-		0x2e : '<inventory_root>/system/chassis/motherboard/centaur0',
+		0x2e : '<inventory_root>/system/chassis/motherboard/membuf0',
 		0x1e : '<inventory_root>/system/chassis/motherboard/dimm0',
 		0x1f : '<inventory_root>/system/chassis/motherboard/dimm1',
 		0x20 : '<inventory_root>/system/chassis/motherboard/dimm2',
diff --git a/bin/Sensors.py b/bin/Sensors.py
index f951eeb..ecdac91 100755
--- a/bin/Sensors.py
+++ b/bin/Sensors.py
@@ -124,7 +124,8 @@
 			val = (self.properties[SensorValue.IFACE_NAME]['value']-offset) * scale
 			return [True,val]
 		else:
-			val = (value/scale) + offset
+			# Keep the val as integer. scale may be floating point
+			val = int(value/scale + offset)
 			if (val != self.value):
 				SensorValue.setValue(self,val)
 				self.check_thresholds(val)
@@ -176,9 +177,12 @@
 		pass
 		
 class OccStatusSensor(VirtualSensor):
-	def __init__(self,bus,name):
+	def __init__(self,bus,name, sysfs = None):
 		## default path. can be override
-		self.sysfs_attr = "/sys/class/i2c-adapter/i2c-3/3-0050/online"
+		if sysfs is None:
+			self.sysfs_attr = "/sys/class/i2c-adapter/i2c-3/3-0050/online"
+		else:
+			self.sysfs_attr = sysfs
 		VirtualSensor.__init__(self,bus,name)
 		self.setValue("Disabled")
 		bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
diff --git a/bin/bmc_update.py b/bin/bmc_update.py
index 2c1329d..a3032cf 100755
--- a/bin/bmc_update.py
+++ b/bin/bmc_update.py
@@ -103,12 +103,12 @@
 			tar.extractall(UPDATE_PATH,members=doExtract(tar,copy_files))
 			tar.close()
 
-			if (self.Get(DBUS_NAME,"clear_persistent_files") == False):
+			if (self.Get(DBUS_NAME,"clear_persistent_files") == True):
 				print "Removing persistent files"
 				os.unlink(UPDATE_PATH+"/whitelist")
 			if (self.Get(DBUS_NAME,"preserve_network_settings") == True):
 				print "Preserving network settings"
-				shutil.copy2("/dev/mtd2",UPDATE_PATH+"image-u-boot-env")
+				shutil.copy2("/dev/mtd2",UPDATE_PATH+"/image-u-boot-env")
 				
 		except Exception as e:
 			print e
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
index 0a90569..e0351a8 100755
--- a/bin/inventory_items.py
+++ b/bin/inventory_items.py
@@ -79,7 +79,6 @@
 if __name__ == '__main__':
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
     bus = Openbmc.getDBus()
-    name = dbus.service.BusName(DBUS_NAME,bus)
     mainloop = gobject.MainLoop()
     obj_parent = Inventory(bus, '/org/openbmc/inventory')
 
@@ -94,6 +93,7 @@
 		version = getVersion()
 		obj.update({'version': version})
 
+    name = dbus.service.BusName(DBUS_NAME,bus)
     print "Running Inventory Manager"
     mainloop.run()