summaryrefslogtreecommitdiff
path: root/test/neardutils.py
blob: 903e59edae2c5eb64d803a1c019a08b10d495c64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import dbus

SERVICE_NAME = "org.neard"
ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
DEVICE_INTERFACE = SERVICE_NAME + ".Device"
TAG_INTERFACE = SERVICE_NAME + ".Tag"
RECORD_INTERFACE = SERVICE_NAME + ".Record"

def get_managed_objects():
	bus = dbus.SystemBus()
	manager = dbus.Interface(bus.get_object("org.neard", "/"),
				"org.freedesktop.DBus.ObjectManager")
	return manager.GetManagedObjects()

def find_adapter(pattern=None):
	return find_adapter_in_objects(get_managed_objects(), pattern)

def find_adapter_in_objects(objects, pattern=None):
	bus = dbus.SystemBus()
	for path, ifaces in objects.iteritems():
		adapter = ifaces.get(ADAPTER_INTERFACE)
		if adapter is None:
			continue
		if not pattern or path.endswith(pattern):
			obj = bus.get_object(SERVICE_NAME, path)
			return dbus.Interface(obj, ADAPTER_INTERFACE)
	raise Exception("NFC adapter not found")

def find_device(pattern=None):
	return find_device_in_objects(get_managed_objects(), pattern)

def find_device_in_objects(objects, pattern=None):
	bus = dbus.SystemBus()
	for path, ifaces in objects.iteritems():
		device = ifaces.get(DEVICE_INTERFACE)
		if device is None:
			continue
		if not pattern or path.endswith(pattern):
			obj = bus.get_object(SERVICE_NAME, path)
			return dbus.Interface(obj, DEVICE_INTERFACE)
	raise Exception("NFC device not found")

def find_tag(pattern=None):
	return find_tag_in_objects(get_managed_objects(), pattern)

def find_tag_in_objects(objects, pattern=None):
	bus = dbus.SystemBus()
	for path, ifaces in objects.iteritems():
		tag = ifaces.get(TAG_INTERFACE)
		if tag is None:
			continue
		if not pattern or path.endswith(pattern):
			obj = bus.get_object(SERVICE_NAME, path)
			return dbus.Interface(obj, TAG_INTERFACE)
	raise Exception("NFC tag not found")

def find_record(pattern=None):
	return find_record_in_objects(get_managed_objects(), pattern)

def find_record_in_objects(objects, pattern=None):
	bus = dbus.SystemBus()
	for path, ifaces in objects.iteritems():
		record = ifaces.get(RECORD_INTERFACE)
		if record is None:
			continue
		if not pattern or path.endswith(pattern):
			obj = bus.get_object(SERVICE_NAME, path)
			return dbus.Interface(obj, RECORD_INTERFACE)
	raise Exception("NFC record not found")

def dump_record(record_path):
	bus = dbus.SystemBus()
	record_prop = dbus.Interface(bus.get_object("org.neard", record_path),
					"org.freedesktop.DBus.Properties")

	properties = record_prop.GetAll(RECORD_INTERFACE)

	for key in properties.keys():
		if key in ["Representation"]:
			val = unicode(properties[key])
		else:
			val = str(properties[key])
		print "      %s = %s" % (key, val)

def dump_all_records(path):
	bus = dbus.SystemBus()
	om = dbus.Interface(bus.get_object("org.neard", "/"),
					"org.freedesktop.DBus.ObjectManager")
	objects = om.GetManagedObjects()
	for path, interfaces in objects.iteritems():
		if "org.neard.Record" not in interfaces:
			continue

		if path.startswith(path):
			print("  [ %s ]" % (path))
			dump_record(path)