#! /usr/bin/python

## todos: event logger, 
import dbus
import Openbmc

HOME_PATH = '/media/sf_vbox/openbmc/'
BIN_PATH = HOME_PATH+'bin/'
CACHE_PATH = HOME_PATH+'cache/'
FRU_PATH = CACHE_PATH+'frus/'

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.control.Bmc'] = {
		'system_state' : 'INIT',
		'start_process' : True,
		'process_name' : 'control_bmc.exe',
		'heartbeat' : 'no',
		'instances' : [	
			{
				'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',
		'rest_name' : 'sensors',
		'instances' : [	
			{
				'name' : 'Barreleye',
				'user_label': 'Sensor Manager',
			}
		]
	}

SYSTEM_CONFIG['org.openbmc.loggers.EventLogger'] = {
		'system_state' : 'STANDBY',
		'start_process' : True,
		'process_name' : 'eventlogger.py',
		'heartbeat' : 'no',
		'rest_name' : 'events',
		'instances' : [	
			{
				'name' : 'Barreleye',
				'user_label': 'Event Logger',
			}
		]
	}

SYSTEM_CONFIG['org.openbmc.watchdog.Host'] = {
		'system_state' : 'STANDBY',
		'start_process' : True,
		'process_name' : 'host_watchdog.exe',
		'heartbeat' : 'no',
		'rest_name' : 'watchdog',
		'instances' : [	
			{
				'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' : 'SystemPower_0',
				'user_label': 'Power control',
				'properties' : { 
					'org.openbmc.Control': {
						'poll_interval' : 3000
					}
				}
			}
		]
	}

SYSTEM_CONFIG['org.openbmc.sensors.Temperature.Ambient'] = {
		'system_state' : 'STANDBY',
		'start_process' : True,
		'process_name' : 'sensor_ambient.exe',
		'heartbeat' : 'yes',
		'instances' : [	
			{
				'name' : 'FrontChassis',
				'user_label': 'Ambient Temperature 1',
				'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' : '0xA0'
					}
				}
			},
		]
	}
SYSTEM_CONFIG['org.openbmc.buttons.Power'] = {
		'system_state' : 'STANDBY',
		'start_process' : True,
		'process_name' : 'button_power.exe',
		'heartbeat' : 'no',
		'instances' : [	
			{
				'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' : 'HostStatus_0',
				'user_label': 'Host Status',
				'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' : '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' : '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' : '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',
		'rest_name' : 'chassis',
		'instances' : [	
			{
				'name' : 'Chassis',
				'user_label': 'Chassis Control',
			}
		]
	}

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' : 'Fan_0',
				'user_label': 'FAN 0',
			},
			{
				'name' : 'Fan_1',
				'user_label': 'FAN 1',
			},
			{
				'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': 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' }

