blob: 814ff587d94c2fc90655565145794980b19021f7 [file] [log] [blame]
Norman Jamesb4914ad2015-10-26 07:14:29 -05001#!/usr/bin/python
2
3import sys
Norman Jamesb4914ad2015-10-26 07:14:29 -05004import dbus
Norman Jamesfacbca42015-11-09 15:58:14 -06005import json
Brad Bishop3cec2962016-06-21 20:51:54 -04006import xml.etree.ElementTree as ET
Norman Jamesb4914ad2015-10-26 07:14:29 -05007
Norman Jamesb4914ad2015-10-26 07:14:29 -05008dbus_objects = {
Andrew Geisslercae038e2016-12-19 15:29:10 -06009 'power': {
10 'bus_name': 'org.openbmc.control.Power',
11 'object_name': '/org/openbmc/control/power0',
12 'interface_name': 'org.openbmc.control.Power'
13 },
Andrew Geissler2cbbb672017-05-17 10:52:49 -050014 'chassison': {
15 'bus_name': 'xyz.openbmc_project.State.Chassis',
16 'object_name': '/xyz/openbmc_project/state/chassis0',
17 'interface_name': 'xyz.openbmc_project.State.Chassis',
18 'property': 'RequestedPowerTransition',
19 'value': 'xyz.openbmc_project.State.Chassis.Transition.On'
20 },
21 'chassisoff': {
22 'bus_name': 'xyz.openbmc_project.State.Chassis',
23 'object_name': '/xyz/openbmc_project/state/chassis0',
24 'interface_name': 'xyz.openbmc_project.State.Chassis',
25 'property': 'RequestedPowerTransition',
26 'value': 'xyz.openbmc_project.State.Chassis.Transition.Off'
27 },
Andrew Geisslercae038e2016-12-19 15:29:10 -060028 'poweron': {
Andrew Geissler25b9a852016-12-19 16:14:09 -060029 'bus_name': 'xyz.openbmc_project.State.Host',
30 'object_name': '/xyz/openbmc_project/state/host0',
31 'interface_name': 'xyz.openbmc_project.State.Host',
32 'property': 'RequestedHostTransition',
33 'value': 'xyz.openbmc_project.State.Host.Transition.On'
Andrew Geisslercae038e2016-12-19 15:29:10 -060034 },
35 'poweroff': {
Andrew Geissler25b9a852016-12-19 16:14:09 -060036 'bus_name': 'xyz.openbmc_project.State.Host',
37 'object_name': '/xyz/openbmc_project/state/host0',
38 'interface_name': 'xyz.openbmc_project.State.Host',
39 'property': 'RequestedHostTransition',
40 'value': 'xyz.openbmc_project.State.Host.Transition.Off'
Andrew Geisslercae038e2016-12-19 15:29:10 -060041 },
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060042 'bmcstate': {
43 'bus_name': 'xyz.openbmc_project.State.BMC',
44 'object_name': '/xyz/openbmc_project/state/bmc0',
45 'interface_name': 'xyz.openbmc_project.State.BMC',
46 'property': 'CurrentBMCState',
47 },
48 'chassisstate': {
49 'bus_name': 'xyz.openbmc_project.State.Chassis',
50 'object_name': '/xyz/openbmc_project/state/chassis0',
51 'interface_name': 'xyz.openbmc_project.State.Chassis',
52 'property': 'CurrentPowerState',
53 },
54 'hoststate': {
55 'bus_name': 'xyz.openbmc_project.State.Host',
56 'object_name': '/xyz/openbmc_project/state/host0',
57 'interface_name': 'xyz.openbmc_project.State.Host',
58 'property': 'CurrentHostState',
Andrew Geisslercae038e2016-12-19 15:29:10 -060059 },
60 'bootprogress': {
George Keishing3be09952017-08-18 09:48:03 -050061 'bus_name': 'xyz.openbmc_project.State.Host',
62 'object_name': '/xyz/openbmc_project/state/host0',
63 'interface_name': 'xyz.openbmc_project.State.Boot.Progress',
64 'property': 'BootProgress',
Andrew Geisslercae038e2016-12-19 15:29:10 -060065 },
Norman Jamesb4914ad2015-10-26 07:14:29 -050066}
67
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060068# Commands that need to run multiple objects above
69multicmd_objects = { 'state' : ['bmcstate', 'chassisstate', 'hoststate'] }
70
Norman Jamesb4914ad2015-10-26 07:14:29 -050071bus = dbus.SystemBus()
72
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060073if (len(sys.argv) == 1 or sys.argv[1] == "-h" or
74 (not(dbus_objects.has_key(sys.argv[1])) and
75 (not(multicmd_objects.has_key(sys.argv[1]))))):
Andrew Jeffery076aa1f2017-10-11 16:55:45 +103076 print "Usage: obmcutil [command]"
Andrew Geisslercae038e2016-12-19 15:29:10 -060077 print "Available commands:"
78 for name in sorted(dbus_objects.keys()):
79 m = ""
Andrew Jeffery076aa1f2017-10-11 16:55:45 +103080 if (dbus_objects[name].has_key('property') == True):
Andrew Geisslercae038e2016-12-19 15:29:10 -060081 m = " (" + dbus_objects[name]['interface_name'] + "->" + \
82 dbus_objects[name]['property'] + ")"
Norman Jamesb4914ad2015-10-26 07:14:29 -050083
Andrew Geisslercae038e2016-12-19 15:29:10 -060084 print "\t" + name + m
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060085 print "Multi-Commands:"
86 for name in sorted(multicmd_objects.keys()):
87 print "\t" + name + " -> " + ",".join(multicmd_objects[name])
Andrew Geisslercae038e2016-12-19 15:29:10 -060088 exit(0)
Norman Jamesb4914ad2015-10-26 07:14:29 -050089
Norman Jamesc9415752015-11-30 11:55:14 -060090property_name = ""
Norman Jamesb4914ad2015-10-26 07:14:29 -050091
92sys.argv.pop(0)
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060093cmd = [sys.argv.pop(0)]
Norman Jamesb4914ad2015-10-26 07:14:29 -050094
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060095# Check if this is a multicmd command and update if it is
96if(multicmd_objects.has_key(cmd[0])):
97 cmd = multicmd_objects[cmd[0]]
Norman Jamesb4914ad2015-10-26 07:14:29 -050098
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060099for c in cmd:
100 objinfo = dbus_objects[c]
Andrew Jeffery076aa1f2017-10-11 16:55:45 +1030101 if (objinfo.has_key('property')):
Andrew Geissler8f8cbce2017-02-20 16:10:26 -0600102 property_name = objinfo['property']
Norman Jamesb4914ad2015-10-26 07:14:29 -0500103
Andrew Geissler8f8cbce2017-02-20 16:10:26 -0600104 bus_name = objinfo['bus_name']
105 obj_path = objinfo['object_name']
106 intf_name = objinfo['interface_name']
107 obj = bus.get_object(bus_name, obj_path)
108
Andrew Jeffery076aa1f2017-10-11 16:55:45 +1030109 if (property_name != ""):
Andrew Geissler8f8cbce2017-02-20 16:10:26 -0600110 intf = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
111 if (objinfo.has_key('value')):
112 property_value = objinfo['value']
Andrew Geisslercae038e2016-12-19 15:29:10 -0600113 else:
Andrew Geissler8f8cbce2017-02-20 16:10:26 -0600114 if(len(sys.argv) > 0):
115 property_value = eval(sys.argv.pop(0))
116 else:
117 property_value = None
118 if(property_value is not None):
119 intf.Set(intf_name, property_name, property_value)
120 else:
121 prop = intf.Get(intf_name,property_name)
122 print '{:<20}'.format(property_name+": ") + str(prop)
Andrew Geissler25b9a852016-12-19 16:14:09 -0600123 else:
Andrew Geissler8f8cbce2017-02-20 16:10:26 -0600124 intf = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
125 props = intf.GetAll(intf_name)
126 for p in props:
Vishwanatha Subbannacf951db2017-03-23 18:46:06 +0530127 print p + " = " + str(props[p])