blob: 589c0ca96835f3c084a7f7a3e147f7d6e21b70d7 [file] [log] [blame]
Norman James65a295a2015-09-26 22:21:10 -05001#!/usr/bin/env python
2
3import sys
4import subprocess
5import gobject
6import dbus
7import dbus.service
8import dbus.mainloop.glib
9import PropertyManager
10
11import Openbmc
12
Norman James19e45912015-10-04 20:19:41 -050013SENSOR_INTERFACE = "org.openbmc.SensorValue"
Norman Jamesdfdaca92015-09-27 22:11:15 -050014
15class IpmiBt(dbus.service.Object):
16 def __init__(self,bus,name):
17 dbus.service.Object.__init__(self,bus,name)
18
Norman James65a295a2015-09-26 22:21:10 -050019
20def getWatchdog():
21 obj = bus.get_object('org.openbmc.watchdog.Host',
22 '/org/openbmc/watchdog/HostWatchdog_0')
23 intf = dbus.Interface(obj, 'org.openbmc.Watchdog' )
24 return intf
25
26def getChassisControl():
27 obj = bus.get_object('org.openbmc.control.Chassis',
Norman Jamesa3e47c42015-10-18 14:43:10 -050028 '/org/openbmc/control/chassis0')
Norman James65a295a2015-09-26 22:21:10 -050029 intf = dbus.Interface(obj, 'org.openbmc.control.Chassis' )
30 return intf
31
32def prettyPrint(data):
33 for k in data.keys():
34 print k
35 for k2 in data[k].keys():
36 print "\t"+k2+" = "+str(data[k][k2])
37
Norman Jamesdfdaca92015-09-27 22:11:15 -050038
39
Norman James65a295a2015-09-26 22:21:10 -050040if __name__ == '__main__':
Norman James19e45912015-10-04 20:19:41 -050041 #dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
Norman James5e792e32015-10-07 17:36:17 -050042 bus = Openbmc.getDBus()
43
Norman James19e45912015-10-04 20:19:41 -050044 #name = dbus.service.BusName(DBUS_NAME,bus)
45 #mainloop = gobject.MainLoop()
Norman Jamesdfdaca92015-09-27 22:11:15 -050046
Norman James65a295a2015-09-26 22:21:10 -050047 cmd = sys.argv[1]
48 data = None
49 ipmi_id = dbus.Byte(0)
50 if (len(sys.argv) > 2):
Norman James19e45912015-10-04 20:19:41 -050051 ipmi_id = sys.argv[2]
Norman James65a295a2015-09-26 22:21:10 -050052 if (len(sys.argv)>3):
53 data = sys.argv[3]
54
55 if (cmd == "poweron"):
56 intf = getChassisControl()
57 intf.powerOn()
58 elif (cmd == "poweroff"):
59 intf = getChassisControl()
60 intf.powerOff()
61 elif (cmd == "setsensor"):
Norman James19e45912015-10-04 20:19:41 -050062 intf_sys = Openbmc.getManagerInterface(bus,"System")
Norman James80191662015-10-14 09:40:02 -050063 obj_info = intf_sys.getObjectFromByteId("SENSOR",chr(int(ipmi_id)))
64 obj_path = obj_info[1]
65 bus_name = obj_info[0]
Norman James19e45912015-10-04 20:19:41 -050066 if (obj_path != "" and bus_name != ""):
67 obj = bus.get_object(bus_name,obj_path)
Norman James96da5c22015-10-15 10:17:06 -050068 intf = dbus.Interface(obj,)
Norman James19e45912015-10-04 20:19:41 -050069 intf.setValue(dbus.Byte(int(data)))
70
Norman James65a295a2015-09-26 22:21:10 -050071 elif (cmd == "getsensors"):
72 intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
73 data = intf_sens.getSensors()
74 prettyPrint(data)
75 elif (cmd == "updatefru"):
Norman Jamesdfdaca92015-09-27 22:11:15 -050076 d = { 'manufacturer' : data }
Norman James19e45912015-10-04 20:19:41 -050077 intf_sys = Openbmc.getManagerInterface(bus,"System")
Norman James80191662015-10-14 09:40:02 -050078 c = chr(int(ipmi_id))
Norman Jamesa3e47c42015-10-18 14:43:10 -050079 print c
80 obj_info = intf_sys.getObjectFromByteId("FRU",c)
81 intf_name = obj_info[2]
Norman James80191662015-10-14 09:40:02 -050082 obj_path = obj_info[1]
83 bus_name = obj_info[0]
Norman James19e45912015-10-04 20:19:41 -050084 if (obj_path != "" and bus_name != ""):
85 obj = bus.get_object(bus_name,obj_path)
Norman Jamesa3e47c42015-10-18 14:43:10 -050086 intf = dbus.Interface(obj,intf_name)
Norman James19e45912015-10-04 20:19:41 -050087 intf.update(d)
88
Norman James65a295a2015-09-26 22:21:10 -050089 elif (cmd == "getfrus"):
Norman Jamesa3e47c42015-10-18 14:43:10 -050090 obj = bus.get_object('org.openbmc.managers.Inventory',
91 '/org/openbmc/inventory')
92 intf_fru = dbus.Interface(obj,'org.openbmc.Object.Enumerate')
93
94 data = intf_fru.enumerate()
Norman James19e45912015-10-04 20:19:41 -050095 for i in data:
Norman Jamesa3e47c42015-10-18 14:43:10 -050096 print ">>>>>>>>"
97 print i
Norman James19e45912015-10-04 20:19:41 -050098 for k in data[i].keys():
99 print k+" = "+str(data[i][k])
Norman James18998182015-10-11 21:54:53 -0500100 elif (cmd == "updatefwftp"):
Norman Jamesf066e872015-10-07 15:29:51 -0500101 obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
102 intf = dbus.Interface(obj,"org.openbmc.Flash")
Norman James07bd1c72015-10-08 15:10:58 -0500103 intf.updateViaTftp(sys.argv[2],sys.argv[3])
Norman James18998182015-10-11 21:54:53 -0500104 elif (cmd == "updatefwfile"):
105 obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
106 intf = dbus.Interface(obj,"org.openbmc.Flash")
107 intf.update(sys.argv[2])
Norman James31cda682015-10-06 16:52:43 -0500108 elif (cmd == "fwstatus"):
109 intf = Openbmc.getManagerInterface(bus,"Flash")
110 status = intf.getStatus()
111 for i in status:
112 print i+" = "+status[i]
Norman James65a295a2015-09-26 22:21:10 -0500113 elif (cmd == "pokewatchdog"):
Adriana Kobylak2cb27752015-10-19 16:23:14 -0500114 intf = getWatchdog()
Norman James65a295a2015-09-26 22:21:10 -0500115 intf.poke()
116 elif (cmd == "statewatchdog"):
Adriana Kobylak2cb27752015-10-19 16:23:14 -0500117 intf = getWatchdog()
Norman James65a295a2015-09-26 22:21:10 -0500118 intf.start()
Adriana Kobylak2cb27752015-10-19 16:23:14 -0500119 elif (cmd == "setwatchdog"):
120 count = int(sys.argv[2])
121 intf.set(count)
Norman James65a295a2015-09-26 22:21:10 -0500122 else:
123 print "Unsupported command"
124
125
126
127
128
129