#!/usr/bin/python

import sys
import dbus

bus = dbus.SystemBus()

manager = dbus.Interface(bus.get_object("org.bluez", "/"), "org.bluez.Manager")
adapter = dbus.Interface(bus.get_object("org.bluez", manager.DefaultAdapter()),
				"org.bluez.Adapter")
test = dbus.Interface(bus.get_object("org.bluez", "/org/bluez/test"),
			"org.bluez.TelephonyTest")

if len(sys.argv) < 2:
	print """Usage: %s <command>

	connect <bdaddr>
	disconnect <bdaddr>
	outgoing <number>
	incoming <number>
	cancel
	signal <level>
	battery <level>
	roaming <yes|no>
	registration <status>
	subscriber <number>
	speakergain <bdaddr> [level]
	microphonegain <bdaddr> [level]
	play <bdaddr>
	stop <bdaddr>
	""" % sys.argv[0]
	sys.exit(1)

if sys.argv[1] == "connect":
	if len(sys.argv) < 3:
		print "Need device address parameter"
		sys.exit(1)
	device = adapter.FindDevice(sys.argv[2])
	headset = dbus.Interface(bus.get_object("org.bluez", device),
					"org.bluez.Headset")
	headset.Connect()
	sys.exit(0)

if sys.argv[1] == "disconnect":
	if len(sys.argv) < 3:
		print "Need device address parameter"
		sys.exit(1)
	device = adapter.FindDevice(sys.argv[2])
	headset = dbus.Interface(bus.get_object("org.bluez", device),
					"org.bluez.Headset")
	headset.Disconnect()
	sys.exit(0)

if sys.argv[1] == "speakergain":
	if len(sys.argv) < 3:
		print "Need device address parameter"
		sys.exit(1)
	device = adapter.FindDevice(sys.argv[2])
	headset = dbus.Interface(bus.get_object("org.bluez", device),
					"org.bluez.Headset")
	if len(sys.argv) > 3:
		headset.SetProperty('SpeakerGain', dbus.UInt16(sys.argv[3]))
	else:
		props = headset.GetProperties()
		print props['SpeakerGain']

	sys.exit(0)

if sys.argv[1] == "microphonegain":
	if len(sys.argv) < 3:
		print "Need device address parameter"
		sys.exit(1)
	device = adapter.FindDevice(sys.argv[2])
	headset = dbus.Interface(bus.get_object("org.bluez", device),
					"org.bluez.Headset")
	if len(sys.argv) > 3:
		headset.SetProperty('MicrophoneGain', dbus.UInt16(sys.argv[3]))
	else:
		props = headset.GetProperties()
		print props['MicrophoneGain']

	sys.exit(0)

if sys.argv[1] == "play":
	if len(sys.argv) < 3:
		print "Need device address parameter"
		sys.exit(1)
	device = adapter.FindDevice(sys.argv[2])
	headset = dbus.Interface(bus.get_object("org.bluez", device),
					"org.bluez.Headset")
	headset.Play()

	sys.exit(0)

if sys.argv[1] == "stop":
	if len(sys.argv) < 3:
		print "Need device address parameter"
		sys.exit(1)
	device = adapter.FindDevice(sys.argv[2])
	headset = dbus.Interface(bus.get_object("org.bluez", device),
					"org.bluez.Headset")
	headset.Stop()

	sys.exit(0)

if sys.argv[1] == "outgoing":
	if len(sys.argv) > 2:
		test.OutgoingCall(sys.argv[2])
	else:
		print "Need number parameter"
	sys.exit(0)

if sys.argv[1] == "incoming":
	if len(sys.argv) > 2:
		test.IncomingCall(sys.argv[2])
	else:
		print "Need number parameter"
	sys.exit(0)

if sys.argv[1] == "cancel":
	test.CancelCall()
	sys.exit(0)

if sys.argv[1] == "signal":
	if len(sys.argv) > 2:
		test.SignalStrength(sys.argv[2])
	else:
		print "Need signal strength parameter"
	sys.exit(0)

if sys.argv[1] == "battery":
	if len(sys.argv) > 2:
		test.BatteryLevel(sys.argv[2])
	else:
		print "Need battery level parameter"
	sys.exit(0)

if sys.argv[1] == "roaming":
	if len(sys.argv) > 2:
		test.RoamingStatus(sys.argv[2] == "yes" or False)
	else:
		print "Need yes/no parameter"
	sys.exit(0)

if sys.argv[1] == "registration":
	if len(sys.argv) > 2:
		test.RegistrationStatus(sys.argv[2] == "yes" or False)
	else:
		print "Need yes/no parameter"
	sys.exit(0)

if sys.argv[1] == "subscriber":
	if len(sys.argv) > 2:
		test.SetSubscriberNumber(sys.argv[2])
	else:
		print "Need number parameter"
	sys.exit(0)

print "Unknown command"
sys.exit(1)