The open source OpenXR runtime
at prediction-2 133 lines 3.2 kB view raw
1// Copyright 2019-2023, Collabora, Ltd. 2// SPDX-License-Identifier: BSL-1.0 3/*! 4 * @file 5 * @brief Just does a probe. 6 * @author Jakob Bornecrantz <jakob@collabora.com> 7 */ 8 9#include "xrt/xrt_space.h" 10#include "xrt/xrt_system.h" 11#include "xrt/xrt_device.h" 12#include "xrt/xrt_prober.h" 13#include "xrt/xrt_instance.h" 14#include "xrt/xrt_config_drivers.h" 15 16#include "cli_common.h" 17 18#include <string.h> 19#include <stdio.h> 20 21static int 22do_exit(struct xrt_instance **xi_ptr, int ret) 23{ 24 xrt_instance_destroy(xi_ptr); 25 26 printf(" :: Exiting '%i'\n", ret); 27 28 return ret; 29} 30 31#define NUM_XDEVS 32 32 33int 34cli_cmd_probe(int argc, const char **argv) 35{ 36 struct xrt_instance *xi = NULL; 37 xrt_result_t xret = XRT_SUCCESS; 38 int ret = 0; 39 40 // Initialize the prober. 41 printf(" :: Creating instance!\n"); 42 43 ret = xrt_instance_create(NULL, &xi); 44 if (ret != 0) { 45 return do_exit(&xi, 0); 46 } 47 48 // Need to prime the prober with devices before dumping and listing. 49 printf(" :: Creating system devices!\n"); 50 51 struct xrt_system *xsys = NULL; 52 struct xrt_system_devices *xsysd = NULL; 53 struct xrt_space_overseer *xso = NULL; 54 xret = xrt_instance_create_system( // 55 xi, // Instance 56 &xsys, // System 57 &xsysd, // System devices. 58 &xso, // Space overseer. 59 NULL); // System compositor. 60 if (xret != XRT_SUCCESS) { 61 printf("\tCall to xrt_instance_create_system failed! '%i'\n", xret); 62 return do_exit(&xi, -1); 63 } 64 if (xsysd == NULL) { 65 printf("\tNo xrt_system_devices returned!\n"); 66 return do_exit(&xi, -1); 67 } 68 69 struct xrt_prober *xp = NULL; 70 xret = xrt_instance_get_prober(xi, &xp); 71 if (xret != XRT_SUCCESS) { 72 printf("\tNo xrt_prober could be created!\n"); 73 return do_exit(&xi, -1); 74 } 75 76 size_t builder_count; 77 struct xrt_builder **builders; 78 size_t num_entries; 79 struct xrt_prober_entry **entries; 80 struct xrt_auto_prober **auto_probers; 81 ret = xrt_prober_get_builders(xp, &builder_count, &builders, &num_entries, &entries, &auto_probers); 82 if (ret != 0) { 83 do_exit(&xi, ret); 84 } 85 86 printf(" :: Regular built in drivers\n"); 87 for (size_t i = 0; i < num_entries; i++) { 88 if (entries[i] == NULL) { 89 continue; 90 } 91 92 // devices with the same driver name are usually grouped, don't print duplicates 93 if (i > 0 && strcmp(entries[i - 1]->driver_name, entries[i]->driver_name) == 0) { 94 continue; 95 } 96 97 printf("\t%s\n", entries[i]->driver_name); 98 } 99 100 for (size_t i = 0; i < XRT_MAX_AUTO_PROBERS; i++) { 101 if (auto_probers[i] == NULL) { 102 continue; 103 } 104 105 printf("\t%s\n", auto_probers[i]->name); 106 } 107 108 printf(" :: Additional built in drivers\n"); 109// special cased drivers that are not probed through prober entries/autoprobers 110#ifdef XRT_BUILD_DRIVER_REMOTE 111 printf("\tRemote Debugging\n"); 112#endif 113 114#ifdef XRT_BUILD_DRIVER_V4L2 115 printf("\tv4l2\n"); 116#endif 117 118#ifdef XRT_BUILD_DRIVER_VF 119 printf("\tvf\n"); 120#endif 121 122 printf(" :: Destroying probed devices\n"); 123 124 xrt_space_overseer_destroy(&xso); 125 xrt_system_devices_destroy(&xsysd); 126 xrt_system_destroy(&xsys); 127 128 // End of program 129 printf(" :: All ok, shutting down.\n"); 130 131 // Finally done 132 return do_exit(&xi, 0); 133}