aboutsummaryrefslogtreecommitdiff
path: root/drm/DrmProperty.h
diff options
context:
space:
mode:
Diffstat (limited to 'drm/DrmProperty.h')
-rw-r--r--drm/DrmProperty.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/drm/DrmProperty.h b/drm/DrmProperty.h
new file mode 100644
index 0000000..d293da3
--- /dev/null
+++ b/drm/DrmProperty.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_DRM_PROPERTY_H_
+#define ANDROID_DRM_PROPERTY_H_
+
+#include <stdint.h>
+#include <xf86drmMode.h>
+
+#include <string>
+#include <vector>
+
+namespace android {
+
+enum DrmPropertyType {
+ DRM_PROPERTY_TYPE_INT,
+ DRM_PROPERTY_TYPE_ENUM,
+ DRM_PROPERTY_TYPE_OBJECT,
+ DRM_PROPERTY_TYPE_BLOB,
+ DRM_PROPERTY_TYPE_INVALID,
+};
+
+class DrmProperty {
+ public:
+ DrmProperty() = default;
+ DrmProperty(drmModePropertyPtr p, uint64_t value);
+ DrmProperty(const DrmProperty &) = delete;
+ DrmProperty &operator=(const DrmProperty &) = delete;
+
+ void Init(drmModePropertyPtr p, uint64_t value);
+ std::tuple<uint64_t, int> GetEnumValueWithName(std::string name) const;
+
+ uint32_t id() const;
+ std::string name() const;
+
+ std::tuple<int, uint64_t> value() const;
+ bool is_immutable() const;
+
+ bool is_range() const;
+ std::tuple<int, uint64_t> range_min() const;
+ std::tuple<int, uint64_t> range_max() const;
+
+ private:
+ class DrmPropertyEnum {
+ public:
+ DrmPropertyEnum(drm_mode_property_enum *e);
+ ~DrmPropertyEnum();
+
+ uint64_t value_;
+ std::string name_;
+ };
+
+ uint32_t id_ = 0;
+
+ DrmPropertyType type_ = DRM_PROPERTY_TYPE_INVALID;
+ uint32_t flags_ = 0;
+ std::string name_;
+ uint64_t value_ = 0;
+
+ std::vector<uint64_t> values_;
+ std::vector<DrmPropertyEnum> enums_;
+ std::vector<uint32_t> blob_ids_;
+};
+} // namespace android
+
+#endif // ANDROID_DRM_PROPERTY_H_