The open source OpenXR runtime
1#!/bin/env python3
2# Copyright 2020-2023, Collabora, Ltd.
3# SPDX-License-Identifier: BSL-1.0
4# Author: Jakob Bornecrantz <jakob@collabora.com>
5# Author: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
6# Author: Korcan Hussein <korcan.hussein@collabora.com>
7
8import argparse
9from monado import Monado, MonadoLibraryNotFoundError, MonadoHeaderNotFoundError
10
11
12def main():
13 parser = argparse.ArgumentParser(description='libmonado Python example.')
14 parser.add_argument("-f", "--focused", type=int, metavar='CLIENT_ID',
15 help="Set focused client")
16 parser.add_argument("-p", "--primary", type=int, metavar='CLIENT_ID',
17 help="Set primary client")
18 parser.add_argument("-i", "--input", type=int, metavar='CLIENT_ID',
19 help="Toggle whether client receives input")
20 args = parser.parse_args()
21
22 try:
23 m = Monado()
24 except MonadoLibraryNotFoundError:
25 print("Could not find an installed libmonado.so in your path.")
26 print("Add the Monado build directory to your LD_LIBRARY_PATH:")
27 print(f"LD_LIBRARY_PATH=/home/user/monado/build/src/xrt/targets/libmonado/ ./{parser.prog}")
28 return
29 except MonadoHeaderNotFoundError:
30 print("Could not find an installed monado.h.")
31 print("Try setting the MONADO_HEADER_PATH manually:")
32 print(f"MONADO_HEADER_PATH=/home/user/monado/src/xrt/targets/libmonado/monado.h ./{parser.prog}")
33 return
34
35 if args.focused:
36 m.set_focused(args.focused)
37 if args.primary:
38 m.set_primary(args.primary)
39 if args.input:
40 m.toggle_io(args.input)
41
42 m.update_clients()
43
44 print(f"Clients: {m.client_count}")
45 for x in range(m.client_count):
46 c = m.snapshot_client(x)
47 print(f"\tid: {c.ident:4d}, primary: {c.primary:d}, active: {c.active:d}, "
48 f"visible: {c.visible:d}, focused: {c.focused:d}, io: {c.io_active:d}, "
49 f"overlay: {c.overlay:d}, name: {c.name}")
50
51 devices = m.get_devices()
52 print(f"Devices: {len(devices)}")
53 for dev in devices:
54 print(f"\tname: {dev.name}, serial: {dev.serial}")
55
56 roles_map = m.get_device_roles()
57 print(f"Roles: {len(roles_map)}")
58 for role_name, dev_id in roles_map.items():
59 print(f"\trole: {role_name},\tdevice-index: {dev_id:4d}")
60
61 m.destroy()
62
63
64if __name__ == "__main__":
65 main()