1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2020 Collabora, Ltd. 3*61046927SAndroid Build Coastguard Worker * Author: Antonio Caggiano <[email protected]> 4*61046927SAndroid Build Coastguard Worker * Author: Rohan Garg <[email protected]> 5*61046927SAndroid Build Coastguard Worker * Author: Robert Beckett <[email protected]> 6*61046927SAndroid Build Coastguard Worker * 7*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 8*61046927SAndroid Build Coastguard Worker */ 9*61046927SAndroid Build Coastguard Worker 10*61046927SAndroid Build Coastguard Worker #pragma once 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Worker #include <cstdint> 13*61046927SAndroid Build Coastguard Worker #include <optional> 14*61046927SAndroid Build Coastguard Worker #include <string> 15*61046927SAndroid Build Coastguard Worker #include <vector> 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker namespace pps 18*61046927SAndroid Build Coastguard Worker { 19*61046927SAndroid Build Coastguard Worker /// @brief Helper class for a DRM device 20*61046927SAndroid Build Coastguard Worker class DrmDevice 21*61046927SAndroid Build Coastguard Worker { 22*61046927SAndroid Build Coastguard Worker public: 23*61046927SAndroid Build Coastguard Worker /// @return The number of DRM devices available in the system 24*61046927SAndroid Build Coastguard Worker static uint32_t device_count(); 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Worker /// @return All DRM devices available in the system 27*61046927SAndroid Build Coastguard Worker static std::vector<DrmDevice> create_all(); 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard Worker /// @return A DRM device selected by its number in the system, nullopt otherwise 30*61046927SAndroid Build Coastguard Worker static std::optional<DrmDevice> create(int32_t gpu_num); 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Worker /// @brief Prefer calling create instead of default constructor 33*61046927SAndroid Build Coastguard Worker DrmDevice() = default; 34*61046927SAndroid Build Coastguard Worker 35*61046927SAndroid Build Coastguard Worker // Allow move 36*61046927SAndroid Build Coastguard Worker DrmDevice(DrmDevice &&); 37*61046927SAndroid Build Coastguard Worker DrmDevice &operator=(DrmDevice &&); 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Worker // Forbid copy 40*61046927SAndroid Build Coastguard Worker DrmDevice(const DrmDevice &) = delete; 41*61046927SAndroid Build Coastguard Worker DrmDevice &operator=(const DrmDevice &) = delete; 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard Worker ~DrmDevice(); 44*61046927SAndroid Build Coastguard Worker 45*61046927SAndroid Build Coastguard Worker /// @return Whether a device has a valid name 46*61046927SAndroid Build Coastguard Worker operator bool() const; 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard Worker /// File descriptor of the device opened in read/write mode 49*61046927SAndroid Build Coastguard Worker int fd = -1; 50*61046927SAndroid Build Coastguard Worker int32_t gpu_num = -1; 51*61046927SAndroid Build Coastguard Worker std::string name = ""; 52*61046927SAndroid Build Coastguard Worker }; 53*61046927SAndroid Build Coastguard Worker 54*61046927SAndroid Build Coastguard Worker } // namespace pps 55