first commit
diff --git a/bin/.rest_server_obj.py.swp b/bin/.rest_server_obj.py.swp
new file mode 100644
index 0000000..6cad1c3
--- /dev/null
+++ b/bin/.rest_server_obj.py.swp
Binary files differ
diff --git a/bin/button_power b/bin/button_power
new file mode 100644
index 0000000..5bba86a
--- /dev/null
+++ b/bin/button_power
Binary files differ
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
new file mode 100644
index 0000000..6c01c39
--- /dev/null
+++ b/bin/chassis_control.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+
+class ChassisControlObject(dbus.service.Object):
+	def __init__(self,bus,name):
+		self.power_state=0
+		dbus.service.Object.__init__(self,bus,name)
+		bus = dbus.SessionBus()
+		try: 
+			# Get PowerControl object
+			power_control_service = bus.get_object('org.openbmc.PowerControl','/org/openbmc/PowerControl/0')
+			self.power_control_iface = dbus.Interface(power_control_service, 'org.openbmc.PowerControl')
+			# Get ChassisIdentify object
+			chassis_identify_service = bus.get_object('org.openbmc.ChassisIdentify','/org/openbmc/ChassisIdentify/0')
+			self.identify_led_iface = dbus.Interface(chassis_identify_service, 'org.openbmc.Led');
+			# Get HostControl object
+			host_control_service = bus.get_object('org.openbmc.HostControl','/org/openbmc/HostControl/0')
+			self.host_control_iface = dbus.Interface(host_control_service, 'org.openbmc.HostControl');
+
+
+		except dbus.exceptions.DBusException, e:
+			# TODO: not sure what to do if can't find other services
+			print "Unable to find dependent services: ",e
+
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='', out_signature='s')
+	def getID(self):
+		return id
+
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='', out_signature='')
+	def setIdentify(self):
+		print "Turn on identify"
+		self.identify_led_iface.setOn()
+		return None
+
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='', out_signature='')
+	def clearIdentify(self):
+		print "Turn off identify"
+		r=self.identify_led_iface.setOff()
+		return None
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='', out_signature='')
+	def setPowerOn(self):
+		print "Turn on power and boot"
+		self.power_state=0
+		if (self.getPowerState()==0):
+			self.power_control_iface.setPowerState(1)
+			self.power_state=1
+		return None
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='', out_signature='')
+	def setPowerOff(self):
+		print "Turn off power"
+		self.power_control_iface.setPowerState(0);
+		return None
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='', out_signature='i')
+	def getPowerState(self):
+		state = self.power_control_iface.getPowerState();
+		return state
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='', out_signature='')
+	def setDebugMode(self):
+		return None
+
+	@dbus.service.method("org.openbmc.ChassisControl",
+		in_signature='i', out_signature='')
+	def setPowerPolicy(self,policy):
+		return None
+
+	## Signal handler
+	def power_button_signal_handler(self):
+		# only power on if not currently powered on
+		state = self.getPowerState()
+		if state == 0:
+			self.setPowerOn()
+		elif state == 1:
+			self.setPowerOff();
+		
+		# TODO: handle long press and reset
+
+	## Signal handler
+	def power_good_signal_handler(self):
+		if (self.power_state==1):
+			self.host_control_iface.boot()
+			self.power_state=2
+
+
+
+if __name__ == '__main__':
+    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+    bus = dbus.SessionBus()
+    name = dbus.service.BusName("org.openbmc.ChassisControl", bus)
+    object = ChassisControlObject(bus, '/org/openbmc/ChassisControl')
+    mainloop = gobject.MainLoop()
+    bus.add_signal_receiver(object.power_button_signal_handler, dbus_interface = "org.openbmc.Button", signal_name = "ButtonPressed")
+    bus.add_signal_receiver(object.power_good_signal_handler, dbus_interface = "org.openbmc.PowerControl", signal_name = "PowerGood")
+
+    print "Running ChassisControlService"
+    mainloop.run()
+
diff --git a/bin/chassis_identify b/bin/chassis_identify
new file mode 100644
index 0000000..2396d4b
--- /dev/null
+++ b/bin/chassis_identify
Binary files differ
diff --git a/bin/flash_bios b/bin/flash_bios
new file mode 100644
index 0000000..c2679da
--- /dev/null
+++ b/bin/flash_bios
Binary files differ
diff --git a/bin/host_control b/bin/host_control
new file mode 100644
index 0000000..524b119
--- /dev/null
+++ b/bin/host_control
Binary files differ
diff --git a/bin/power_control b/bin/power_control
new file mode 100644
index 0000000..8ba016a
--- /dev/null
+++ b/bin/power_control
Binary files differ
diff --git a/bin/rest_server.py b/bin/rest_server.py
new file mode 100644
index 0000000..5a36e9e
--- /dev/null
+++ b/bin/rest_server.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python 
+
+from BaseHTTPServer import BaseHTTPRequestHandler
+import urlparse
+import dbus
+import json
+import re
+import xml.etree.ElementTree as ET
+
+def parseIntrospection(obj,interface,method=None):
+	introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
+	tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
+	root = tree.getroot()
+	r = []
+	for intf in root.iter('interface'):
+		if (intf.attrib['name'] == interface):
+			for methd in intf.iter('method'):
+				if (method == None):
+					r.append(methd.attrib['name'])
+				elif (method == methd.attrib['name']):
+					for arg in methd.iter('arg'):
+						a = [arg.attrib['name'],arg.attrib['type'],arg.attrib['direction']]
+						r.append(a)
+	return r
+
+def getArgFromSignature(args,signature):
+	if (signature == 'i'):
+		return int(args[0])
+	elif (signature == 's'):
+		return args[0];
+
+	raise Exception("Inavlid signature: "+signature)	
+		
+
+class GetHandler(BaseHTTPRequestHandler):
+	def do_GET(self):
+		url_data = urlparse.urlparse(self.path)
+		parms = urlparse.parse_qs(url_data.query)
+		self.objmap = {
+			'chassis' : ['org.openbmc.ChassisControl','/org/openbmc/ChassisControl','org.openbmc.ChassisControl'],
+			'flash' : ['org.openbmc.Flash.BIOS','/org/openbmc/Flash/BIOS/0','org.openbmc.Flash'],
+			'power' : ['org.openbmc.PowerControl','/org/openbmc/PowerControl/0','org.openbmc.PowerControl']
+		}
+		self.sensors = {
+			'/org/openbmc/Sensors/HostStatus/0' : ['org.openbmc.Sensors.HostStatus','org.openbmc.SensorIntegerSettable',0,""], 
+			'/org/openbmc/Sensors/Temperature/Ambient/0': ['org.openbmc.Sensors.Temperature.Ambient','org.openbmc.SensorInteger',0,""]
+		}
+
+
+		parts = url_data.path.split('/');
+		item = parts[1]
+		
+		method = ''
+		if (len(parts) > 2):
+			method = parts[2]
+
+		code = 403
+		payload = {'status': 'error'}
+		bus = dbus.SessionBus()
+
+		if (item == 'sensors'):
+			try:
+				for s in self.sensors.keys():
+					obj = bus.get_object(self.sensors[s][0],s)
+					iface = dbus.Interface(obj,self.sensors[s][1])
+					self.sensors[s][2] = iface.getValue()
+					self.sensors[s][3] = iface.getUnits()
+				
+				payload['status'] = 'ok'	
+				payload['sensors'] = self.sensors
+				code = 200
+			except dbus.exceptions.DBusException as e:
+				payload['error-message'] = e.get_dbus_name()
+
+		elif (self.objmap.has_key(item)):
+			bus_name = self.objmap[item][0]
+			obj_name = self.objmap[item][1] 
+			interface = self.objmap[item][2]
+			try:
+				obj = bus.get_object(bus_name,obj_name)
+					
+				if (method == ''):
+					payload['available-methods'] = parseIntrospection(obj,interface)
+				else:
+					args = parseIntrospection(obj,interface,method)
+					arg_array = []
+					signature_in = ''
+					signature_out = ''
+					for a in args:
+						if (a[2] == 'in'):
+							if (parms.has_key(a[0]) == False):
+								raise Exception("Method '"+method+"' requires argument '"+a[0]+"'")
+							arg_array.append(getArgFromSignature(parms[a[0]],a[1]))
+							signature_in = signature_in + a[1]
+						else:
+							signature_out = a[1]
+
+					rtn = bus.call_blocking(bus_name,obj_name,interface,method,signature_in,arg_array)
+
+				code = 200
+				payload['status'] = 'ok'
+
+			except dbus.exceptions.DBusException as e:
+				payload['error-message'] = str(e)
+			except Exception as ex:
+				payload['error-message'] = str(ex)
+				
+		else:
+			payload['status'] = 'ok'
+			payload['available-commands'] = self.objmap.keys()
+				
+		self.send_response(code)
+		self.send_header('Content-Type', 'application/json')
+		self.end_headers()
+		self.wfile.write(json.dumps(payload))
+		return
+
+if __name__ == '__main__':
+	from BaseHTTPServer import HTTPServer
+	server = HTTPServer(('', 3000), GetHandler)
+	print 'Starting server, use <Ctrl-C> to stop'
+	server.serve_forever()
+
diff --git a/bin/sensor_ambient b/bin/sensor_ambient
new file mode 100644
index 0000000..262be4a
--- /dev/null
+++ b/bin/sensor_ambient
Binary files differ
diff --git a/bin/sensor_host_status b/bin/sensor_host_status
new file mode 100644
index 0000000..77b6397
--- /dev/null
+++ b/bin/sensor_host_status
Binary files differ