lots of changes
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 50a3492..328da30 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -7,32 +7,74 @@
 HOME_PATH = '/media/sf_vbox/openbmc/'
 BIN_PATH = HOME_PATH+'bin/'
 CACHE_PATH = HOME_PATH+'cache/'
+FRU_PATH = CACHE_PATH+'frus/'
 
-CACHED_INTERFACES = {
-	'org.openbmc.Fru' : True
+SYSTEM_STATES = [
+	'INIT',
+	'STANDBY',
+	'POWERING_ON',
+	'POWERED_ON',
+	'BOOTING',
+	'HOST_UP',
+	'SHUTTING_DOWN',
+	'POWERING_DOWN'
+]
+
+ENTER_STATE_CALLBACK = {
+	'POWERED_ON' : { 
+		'bus_name'    : 'org.openbmc.control.Host',
+		'obj_name'    : '/org/openbmc/control/Host_0',
+		'interface_name' : 'org.openbmc.control.Host',
+		'method_name' : 'boot'
+	}
 }
 
 SYSTEM_CONFIG = {}
 
-SYSTEM_CONFIG['org.openbmc.watchdog.HostWatchdog'] = {
+SYSTEM_CONFIG['org.openbmc.control.Bmc'] = {
+		'system_state' : 'INIT',
 		'start_process' : True,
-		'process_name' : 'host_watchdog.exe',
+		'process_name' : 'control_bmc.exe',
 		'heartbeat' : 'no',
-		'rest_name' : 'watchdog',
 		'instances' : [	
 			{
-				'name' : 'Watchdog1',
-				'user_label': 'Host Watchdog',
-				'properties' : { 
-					'org.openbmc.Watchdog' : {
-						'poll_interval': 300000,
-					}
-				}
+				'name' : 'Bmc_0',
+				'user_label': 'Master Bmc',
 			}
 		]
 	}
 
+SYSTEM_CONFIG['org.openbmc.managers.Frus'] = {
+		'system_state' : 'STANDBY',
+		'start_process' : True,
+		'process_name' : 'fru_manager.py',
+		'heartbeat' : 'no',
+		'rest_name' : 'frus',
+		'instances' : [	
+			{
+				'name' : 'Barreleye',
+				'user_label': 'Fru Manager',
+			}
+		]
+	}
+
+SYSTEM_CONFIG['org.openbmc.managers.Ipmi'] = {
+		'system_state' : 'STANDBY',
+		'start_process' : True,
+		'process_name' : 'ipmi_manager.py',
+		'heartbeat' : 'no',
+		'rest_name' : 'frus',
+		'instances' : [	
+			{
+				'name' : 'Barreleye',
+				'user_label': 'Fru Manager',
+			}
+		]
+	}
+
+
 SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'sensor_manager.py',
 		'heartbeat' : 'no',
@@ -46,6 +88,7 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.loggers.EventLogger'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'eventlogger.py',
 		'heartbeat' : 'no',
@@ -58,26 +101,33 @@
 		]
 	}
 
-SYSTEM_CONFIG['org.openbmc.managers.IpmiTranslator'] = {
+SYSTEM_CONFIG['org.openbmc.watchdog.Host'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
-		'process_name' : 'ipmi_translator.py',
+		'process_name' : 'host_watchdog.exe',
 		'heartbeat' : 'no',
+		'rest_name' : 'watchdog',
 		'instances' : [	
 			{
-				'name' : 'Barreleye',
-				'user_label': 'IPMI Translator',
+				'name' : 'HostWatchdog_0',
+				'user_label': 'Host Watchdog',
+				'properties' : { 
+					'org.openbmc.Watchdog' : {
+						'poll_interval': 3000,
+					}
+				}
 			}
 		]
 	}
 
-
 SYSTEM_CONFIG['org.openbmc.control.Power'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'power_control.exe',
 		'heartbeat' : 'yes',
 		'instances' : [	
 			{
-				'name' : 'PowerControl1',
+				'name' : 'SystemPower_0',
 				'user_label': 'Power control',
 				'properties' : { 
 					'org.openbmc.Control': {
@@ -89,18 +139,17 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.sensors.Temperature.Ambient'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'sensor_ambient.exe',
 		'heartbeat' : 'yes',
-		'init_methods' : ['org.openbmc.SensorValue'],
 		'instances' : [	
 			{
-				'name' : 'AmbientTemperature1',
+				'name' : 'FrontChassis',
 				'user_label': 'Ambient Temperature 1',
-				'sensor_id' : 41,
 				'properties' : { 
 					'org.openbmc.SensorValue': {
-						'poll_interval' : 5000
+						'poll_interval' : 5000,
 					},
 					'org.openbmc.SensorThreshold' : {
 						'lower_critical': 5,
@@ -114,85 +163,77 @@
 					}
 				}
 			},
-			{
-				'name' : 'AmbientTemperature2',
-				'user_label': 'Ambient Temperature 2',
- 				'properties' : { 
-					'org.openbmc.SensorValue': {
-						'poll_interval' : 5000
-					},
-					'org.openbmc.SensorThreshold' : {
-						'lower_critical': 5,
-						'lower_warning' : 10,
-						'upper_warning' : 15,
-						'upper_critical': 20
-					},
-					'org.openbmc.SensorI2c' : {
-						'dev_path' : '/dev/i2c/i2c0',
-						'address' : '0xA2'
-					}
-				}
-			}
 		]
 	}
-SYSTEM_CONFIG['org.openbmc.buttons.ButtonPower'] = {
+SYSTEM_CONFIG['org.openbmc.buttons.Power'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'button_power.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
-				'name' : 'PowerButton1',
+				'name' : 'PowerButton_0',
 				'user_label': 'Main Power Button',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.sensors.HostStatus'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'sensor_host_status.exe',
 		'heartbeat' : "no",
 		'instances' : [	
 			{
-				'name' : 'HostStatus1',
+				'name' : 'HostStatus_0',
 				'user_label': 'Host Status',
-				'sensor_id' : 43,
+				'properties' : { 
+					'org.openbmc.SensorValue': {
+						'ipmi_id' : 43,
+					},
+				}
+
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.leds.ChassisIdentify'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'chassis_identify.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
-				'name' : 'ChassisIdentify1',
+				'name' : 'ChassisIdentify_0',
 				'user_label': 'Chassis Identify LED',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.flash.BIOS'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'flash_bios.exe',
 		'heartbeat' : 'no',
 		'rest_name' : 'flash',
 		'instances' : [	
 			{
-				'name' : 'BIOS1',
+				'name' : 'BIOS_0',
 				'user_label': 'BIOS SPI Flash',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Host'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'control_host.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
-				'name' : 'HostControl1',
+				'name' : 'Host_0',
 				'user_label': 'Host Control',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Chassis'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'chassis_control.py',
 		'heartbeat' : 'no',
@@ -204,174 +245,87 @@
 			}
 		]
 	}
-SYSTEM_CONFIG['org.openbmc.frus.Fan'] = {
+
+SYSTEM_CONFIG['org.openbmc.sensors.Occ'] = {
+		'system_state' : 'POWERED_ON',
+		'start_process' : True,
+		'process_name' : 'sensor_occ.exe',
+		'heartbeat' : 'no',
+		'instances' : [
+			{
+				'name' : 'Occ_0',
+				'user_label': 'CPU0',
+				'properties' : { 
+					'org.openbmc.Occ' : {
+						'poll_interval' : 3000,
+					}
+				}
+			},
+
+		]
+	}
+
+SYSTEM_CONFIG['org.openbmc.sensors.Fan'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'fan.exe',
 		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'Fan0',
-				'user_label': 'Fan 0',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN0',
-						'location' : 'F0',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan1',
-				'user_label': 'Fan 1',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN1',
-						'location' : 'F1',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan2',
-				'user_label': 'Fan 2',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN2',
-						'location' : 'F2',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan3',
-				'user_label': 'Fan 3',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN3',
-						'location' : 'F3',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan4',
-				'user_label': 'Fan 4',				
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN4',
-						'location' : 'F4',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan5',
-				'user_label': 'Fan 5',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN5',
-						'location' : 'F5',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			}
-
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.frus.Board'] = {
-		'start_process' : True,
-		'process_name' : 'fru_board.exe',
-		'init_methods' : ['org.openbmc.Fru'],
-		'heartbeat' : 'no',
 		'instances' : [
 			{
-				'name' : 'IO_Planer',
-				'user_label': 'IO Planar',
-				'fru_id' : 61,
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'IO Planar',
-						'location' : 'IO_PLANAR',
-						'type' : Openbmc.FRU_TYPES['BACKPLANE']
-					},
-					'org.openbmc.Fru.Eeprom' : {
-						'i2c_address' : '0xA8',
-						'i2c_dev_path' : '/dev/i2c/i2c5'
-					}
-				}
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.frus.Fru'] = {
-		'start_process' : True,
-		'process_name' : 'fru_generic.exe',
-		'heartbeat' : 'no',
-		'instances' : [
-			{
-				'name' : 'Backplane',
-				'user_label': '2S Motherboard',
-				'fru_id' : 60,
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'MAIN_PLANAR',
-						'location' : 'C0',
-						'type' : Openbmc.FRU_TYPES['BACKPLANE'],
-					}
-				}
+				'name' : 'Fan_0',
+				'user_label': 'FAN 0',
 			},
 			{
-				'name' : 'DIMM0',
-				'user_label': 'DIMM A0 Slot 0',
-				'fru_id' : 12,
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'DIMM0',
-						'location' : 'A0',
-						'type' : Openbmc.FRU_TYPES['DIMM'],
-					}
-				}
+				'name' : 'Fan_1',
+				'user_label': 'FAN 1',
 			},
 			{
-				'name' : 'DIMM1',
-				'user_label': 'DIMM A1 Slot 0',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'DIMM1',
-						'location' : 'A1',
-						'type' : Openbmc.FRU_TYPES['DIMM'],
-					}
-				}
-			},
-			{
-				'name' : 'CPU0',
-				'user_label': 'CPU0',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'CPU0',
-						'location' : 'CPU0',
-						'type' : Openbmc.FRU_TYPES['CPU'],
-					}
-				}
+				'name' : 'Fan_2',
+				'user_label': 'FAN 2',
 			},
 
 		]
 	}
 
+NON_CACHABLE_PROPERTIES = {
+	'name'       : True,
+	'user_label' : True,
+	'location'   : True,
+	'cache'      : True
+}
+
+FRUS = {}
+
+## key is IPMI FRU ID
+
+FRUS[32] = {
+		'name' : 'CPU0',
+		'user_label' : "IBM POWER8 CPU",
+		'ftype' : Openbmc.FRU_TYPES['CPU'],
+		'location' : "P0",
+		'manufacturer' : "IBM",
+		'cache' : True,
+		'state' : Openbmc.FRU_STATES['NORMAL'],
+		'sensor_id' : 10,
+	}
+
+FRUS[21] = {
+		'name' : 'IO_PLANAR',
+		'user_label' : "BARRELEYE IO PLANAR",
+		'ftype' : Openbmc.FRU_TYPES['BACKPLANE'],	
+		'cache' : False,
+		'state' : Openbmc.FRU_STATES['NORMAL'],
+		'sensor_id' : 11,
+	}
+
+
 GPIO_CONFIG = {}
-GPIO_CONFIG['FSI_CLK']    = { 'gpio_num': 23, 'direction': 'out' }
-GPIO_CONFIG['FSI_DATA']   = { 'gpio_num': 24, 'direction': 'out' }
-GPIO_CONFIG['FSI_ENABLE'] = { 'gpio_num': 25, 'direction': 'out' }
-GPIO_CONFIG['POWER_PIN']  = { 'gpio_num': 26, 'direction': 'out'  }
-GPIO_CONFIG['CRONUS_SEL'] = { 'gpio_num': 27, 'direction': 'out'  }
-GPIO_CONFIG['PGOOD']      = { 'gpio_num': 28, 'direction': 'in'  }
-GPIO_CONFIG['IDENTIFY']   = { 'gpio_num': 30, 'direction': 'out' }
-GPIO_CONFIG['POWER_BUTTON'] = { 'gpio_num': 31, 'direction': 'in' }
+GPIO_CONFIG['FSI_CLK']    = { 'gpio_num': 4, 'direction': 'out' }
+GPIO_CONFIG['FSI_DATA']   = { 'gpio_num': 5, 'direction': 'out' }
+GPIO_CONFIG['FSI_ENABLE'] = { 'gpio_num': 24, 'direction': 'out' }
+GPIO_CONFIG['POWER_PIN']  = { 'gpio_num': 33, 'direction': 'out'  }
+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' }