blob: bff45ee3a9e0ec7e5a4c6080a4b01282416b538c [file] [log] [blame]
#!/usr/bin/env python
import dbus
dbus_objects = {
"power": {
"bus_name": "org.openbmc.control.Power",
"object_name": "/org/openbmc/control/power0",
"interface_name": "org.openbmc.control.Power",
},
"occstatus0": {
"bus_name": "org.openbmc.Sensors",
"object_name": "/org/openbmc/sensors/host/cpu0/OccStatus",
"interface_name": "org.openbmc.SensorValue",
},
"occstatus1": {
"bus_name": "org.openbmc.Sensors",
"object_name": "/org/openbmc/sensors/host/cpu1/OccStatus",
"interface_name": "org.openbmc.SensorValue",
},
"bootprogress": {
"bus_name": "org.openbmc.Sensors",
"object_name": "/org/openbmc/sensors/host/BootProgress",
"interface_name": "org.openbmc.SensorValue",
},
"host": {
"bus_name": "xyz.openbmc_project.State.Host",
"object_name": "/xyz/openbmc_project/state/host0",
"interface_name": "xyz.openbmc_project.State.Host",
},
"settings": {
"bus_name": "org.openbmc.settings.Host",
"object_name": "/org/openbmc/settings/host0",
"interface_name": "org.freedesktop.DBus.Properties",
},
"system": {
"bus_name": "org.openbmc.managers.System",
"object_name": "/org/openbmc/managers/System",
"interface_name": "org.freedesktop.DBus.Properties",
},
"powersupplyredundancy": {
"bus_name": "org.openbmc.Sensors",
"object_name": "/org/openbmc/sensors/host/PowerSupplyRedundancy",
"interface_name": "org.openbmc.SensorValue",
},
"turboallowed": {
"bus_name": "org.openbmc.Sensors",
"object_name": "/org/openbmc/sensors/host/TurboAllowed",
"interface_name": "org.openbmc.SensorValue",
},
"powersupplyderating": {
"bus_name": "org.openbmc.Sensors",
"object_name": "/org/openbmc/sensors/host/PowerSupplyDerating",
"interface_name": "org.openbmc.SensorValue",
},
}
def getInterface(bus, objs, key):
obj = bus.get_object(
objs[key]["bus_name"], objs[key]["object_name"], introspect=False
)
return dbus.Interface(obj, objs[key]["interface_name"])
def getProperty(bus, objs, key, prop):
obj = bus.get_object(
objs[key]["bus_name"], objs[key]["object_name"], introspect=False
)
intf = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
return intf.Get(objs[key]["interface_name"], prop)
def setProperty(bus, objs, key, prop, prop_value):
obj = bus.get_object(objs[key]["bus_name"], objs[key]["object_name"])
intf = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
return intf.Set(objs[key]["interface_name"], prop, prop_value)
bus = dbus.SystemBus()
pgood = getProperty(bus, dbus_objects, "power", "pgood")
if pgood == 1:
intf = getInterface(bus, dbus_objects, "bootprogress")
intf.setValue("FW Progress, Starting OS")
intf = getInterface(bus, dbus_objects, "occstatus0")
intf.setValue("Enabled")
intf = getInterface(bus, dbus_objects, "occstatus1")
intf.setValue("Enabled")
else:
# Power is off, so check power policy
settings_intf = getInterface(bus, dbus_objects, "settings")
system_intf = getInterface(bus, dbus_objects, "system")
system_last_state = system_intf.Get(
"org.openbmc.managers.System", "system_last_state"
)
power_policy = settings_intf.Get(
"org.openbmc.settings.Host", "power_policy"
)
print(
"Last System State:"
+ system_last_state
+ "Power Policy:"
+ power_policy
)
if power_policy == "ALWAYS_POWER_ON" or (
power_policy == "RESTORE_LAST_STATE"
and system_last_state == "HOST_POWERED_ON"
):
setProperty(
bus,
dbus_objects,
"host",
"RequestedHostTransition",
"xyz.openbmc_project.State.Host.Transition.On",
)
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4