| Norman James | 42c1be8 | 2015-10-22 14:34:26 -0500 | [diff] [blame] | 1 | #!/usr/bin/python -u | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 2 |  | 
|  | 3 | import sys | 
|  | 4 | #from gi.repository import GObject | 
|  | 5 | import gobject | 
|  | 6 | import dbus | 
|  | 7 | import dbus.service | 
|  | 8 | import dbus.mainloop.glib | 
|  | 9 | import Openbmc | 
|  | 10 |  | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 11 | DBUS_NAME = 'org.openbmc.sensor.Power8Virtual' | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 12 | OBJ_PATH = '/org/openbmc/sensor/virtual/' | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 13 |  | 
| Norman James | a3e47c4 | 2015-10-18 14:43:10 -0500 | [diff] [blame] | 14 | class SensorValue(Openbmc.DbusProperties): | 
|  | 15 | IFACE_NAME = 'org.openbmc.SensorValue' | 
|  | 16 | def __init__(self): | 
|  | 17 | Openbmc.DbusProperties.__init__(self) | 
|  | 18 | self.Set(SensorValue.IFACE_NAME,'units',"") | 
| Norman James | cfc2b44 | 2015-10-31 17:31:46 -0500 | [diff] [blame] | 19 | self.ObjectAdded(name,SensorValue.IFACE_NAME) | 
| Norman James | a3e47c4 | 2015-10-18 14:43:10 -0500 | [diff] [blame] | 20 |  | 
|  | 21 | @dbus.service.method(IFACE_NAME, | 
|  | 22 | in_signature='v', out_signature='') | 
|  | 23 | def setValue(self,value): | 
|  | 24 | changed = False | 
|  | 25 | try: | 
|  | 26 | old_value = self.Get(SensorValue.IFACE_NAME,'value') | 
|  | 27 | if (value != old_value): | 
|  | 28 | changed = True | 
|  | 29 | except: | 
|  | 30 | changed = True | 
|  | 31 |  | 
|  | 32 | if (changed == True): | 
|  | 33 | self.Set(SensorValue.IFACE_NAME,'value',value) | 
|  | 34 | self.Changed(self.getValue(),self.getUnits()) | 
|  | 35 |  | 
|  | 36 |  | 
|  | 37 |  | 
|  | 38 | @dbus.service.method(IFACE_NAME, | 
|  | 39 | in_signature='', out_signature='v') | 
|  | 40 | def getValue(self): | 
|  | 41 | return self.Get(SensorValue.IFACE_NAME,'value') | 
|  | 42 |  | 
|  | 43 | @dbus.service.method(IFACE_NAME, | 
|  | 44 | in_signature='', out_signature='s') | 
|  | 45 | def getUnits(self): | 
|  | 46 | return self.Get(SensorValue.IFACE_NAME,'units') | 
|  | 47 |  | 
|  | 48 | @dbus.service.signal(IFACE_NAME,signature='vs') | 
|  | 49 | def Changed(self,value,units): | 
|  | 50 | pass | 
|  | 51 |  | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 52 | class VirtualSensor(SensorValue): | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 53 | def __init__(self,bus,name): | 
| Norman James | a3e47c4 | 2015-10-18 14:43:10 -0500 | [diff] [blame] | 54 | SensorValue.__init__(self) | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 55 | dbus.service.Object.__init__(self,bus,name) | 
| Norman James | 87493b8 | 2015-11-05 23:00:16 -0600 | [diff] [blame] | 56 | self.ObjectAdded(name,SensorValue.IFACE_NAME) | 
|  | 57 |  | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 58 |  | 
| Norman James | d6da29d | 2015-10-19 11:13:14 -0500 | [diff] [blame] | 59 | CONTROL_IFACE = 'org.openbmc.Control' | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 60 | class HostStatusSensor(SensorValue): | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 61 | def __init__(self,bus,name): | 
| Norman James | a3e47c4 | 2015-10-18 14:43:10 -0500 | [diff] [blame] | 62 | SensorValue.__init__(self) | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 63 | dbus.service.Object.__init__(self,bus,name) | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 64 |  | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 65 | ##override setValue method | 
|  | 66 | @dbus.service.method(SensorValue.IFACE_NAME, | 
|  | 67 | in_signature='v', out_signature='') | 
|  | 68 | def setValue(self,value): | 
|  | 69 | SensorValue.setValue(self,value) | 
| Norman James | d6da29d | 2015-10-19 11:13:14 -0500 | [diff] [blame] | 70 | if (value == "BLAH"): | 
|  | 71 | self.GotoSystemState("OS_BOOTED") | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 72 |  | 
| Norman James | d6da29d | 2015-10-19 11:13:14 -0500 | [diff] [blame] | 73 | @dbus.service.signal(CONTROL_IFACE,signature='s') | 
|  | 74 | def GotoSystemState(self,state): | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 75 | pass | 
|  | 76 |  | 
| Norman James | d6da29d | 2015-10-19 11:13:14 -0500 | [diff] [blame] | 77 | CONTROL_IFACE = 'org.openbmc.Control' | 
|  | 78 | class BootProgressSensor(SensorValue): | 
|  | 79 | def __init__(self,bus,name): | 
|  | 80 | SensorValue.__init__(self) | 
|  | 81 | dbus.service.Object.__init__(self,bus,name) | 
|  | 82 |  | 
|  | 83 | ##override setValue method | 
|  | 84 | @dbus.service.method(SensorValue.IFACE_NAME, | 
|  | 85 | in_signature='v', out_signature='') | 
|  | 86 | def setValue(self,value): | 
|  | 87 | SensorValue.setValue(self,value) | 
|  | 88 | if (value == "FW Progress, Starting OS"): | 
|  | 89 | self.GotoSystemState("HOST_BOOTED") | 
|  | 90 |  | 
|  | 91 | @dbus.service.signal(CONTROL_IFACE,signature='s') | 
|  | 92 | def GotoSystemState(self,state): | 
|  | 93 | pass | 
|  | 94 |  | 
|  | 95 |  | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 96 |  | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 97 |  | 
|  | 98 | if __name__ == '__main__': | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 99 |  | 
|  | 100 | sensors = { | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 101 | 'OperatingSystemStatus' : None, | 
|  | 102 | 'BootCount' : None, | 
|  | 103 | 'OccStatus' : None, | 
|  | 104 | } | 
|  | 105 | dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) | 
|  | 106 | bus = Openbmc.getDBus() | 
|  | 107 | name = dbus.service.BusName(DBUS_NAME,bus) | 
|  | 108 | for instance in sensors.keys(): | 
|  | 109 | sensors[instance]= VirtualSensor(bus,OBJ_PATH+instance) | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 110 |  | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 111 | sensors['HostStatus'] = HostStatusSensor(bus,OBJ_PATH+"HostStatus") | 
| Norman James | d6da29d | 2015-10-19 11:13:14 -0500 | [diff] [blame] | 112 | sensors['BootProgress'] = BootProgressSensor(bus,OBJ_PATH+"BootProgress") | 
| Norman James | 18d4591 | 2015-10-18 20:45:06 -0500 | [diff] [blame] | 113 | mainloop = gobject.MainLoop() | 
|  | 114 |  | 
|  | 115 | ## Initialize sensors | 
|  | 116 | sensors['BootProgress'].setValue("INACTIVE") | 
|  | 117 | sensors['HostStatus'].setValue("OFF") | 
|  | 118 | sensors['OperatingSystemStatus'].setValue("OFF") | 
|  | 119 | sensors['BootCount'].setValue(0) | 
|  | 120 | sensors['OccStatus'].setValue(0) | 
|  | 121 |  | 
|  | 122 | print "Starting virtual sensors" | 
|  | 123 | mainloop.run() | 
| Norman James | 91dac39 | 2015-10-14 09:38:55 -0500 | [diff] [blame] | 124 |  |