16a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul/*
26a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Copyright (C) 2015 The Android Open Source Project
36a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *
46a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Licensed under the Apache License, Version 2.0 (the "License");
56a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * you may not use this file except in compliance with the License.
66a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * You may obtain a copy of the License at
76a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *
86a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *      http://www.apache.org/licenses/LICENSE-2.0
96a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *
106a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Unless required by applicable law or agreed to in writing, software
116a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * distributed under the License is distributed on an "AS IS" BASIS,
126a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * See the License for the specific language governing permissions and
146a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * limitations under the License.
156a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul */
166a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
176a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#ifndef ANDROID_DRM_PROPERTY_H_
186a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#define ANDROID_DRM_PROPERTY_H_
196a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
206a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <stdint.h>
216a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <string>
226a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <xf86drmMode.h>
236a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <vector>
246a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
256a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulnamespace android {
266a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
276a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulenum DrmPropertyType {
286a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DRM_PROPERTY_TYPE_INT,
296a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DRM_PROPERTY_TYPE_ENUM,
30877be974a2d4fc518700be8ffe803a50cb716eadSean Paul  DRM_PROPERTY_TYPE_OBJECT,
3185c58c63ff707874d62e7b088e5ed439b8724d6fSean Paul  DRM_PROPERTY_TYPE_BLOB,
321eb6006fb7d950c5aefb202459234c96f8bf2895Sean Paul  DRM_PROPERTY_TYPE_INVALID,
336a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul};
346a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
356a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulclass DrmProperty {
366a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul public:
376a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmProperty(drmModePropertyPtr p, uint64_t value);
386a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmProperty();
396a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  ~DrmProperty();
406a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
416a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  void Init(drmModePropertyPtr p, uint64_t value);
426a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
436a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t id() const;
446a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  std::string name() const;
456a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
466a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int value(uint64_t *value) const;
476a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
486a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul private:
496a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  class DrmPropertyEnum {
506a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul   public:
516a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul    DrmPropertyEnum(drm_mode_property_enum *e);
526a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul    ~DrmPropertyEnum();
536a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
546a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul    uint64_t value_;
556a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul    std::string name_;
566a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  };
576a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
586a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmProperty(const DrmProperty &);
596a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
606a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t id_;
616a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
626a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmPropertyType type_;
636a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t flags_;
646a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  std::string name_;
656a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint64_t value_;
666a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
676a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  std::vector<uint64_t> values_;
686a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  std::vector<DrmPropertyEnum> enums_;
696a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  std::vector<uint32_t> blob_ids_;
706a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul};
716a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul}
726a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
736a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#endif  // ANDROID_DRM_PROPERTY_H_
74