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_CONNECTOR_H_
186a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#define ANDROID_DRM_CONNECTOR_H_
196a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
206a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmencoder.h"
216a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmmode.h"
226a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmproperty.h"
236a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
246a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <stdint.h>
256a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <vector>
266a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <xf86drmMode.h>
276a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
286a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulnamespace android {
296a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
306a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulclass DrmResources;
316a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
326a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulclass DrmConnector {
336a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul public:
346a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmConnector(DrmResources *drm, drmModeConnectorPtr c,
356a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul               DrmEncoder *current_encoder,
366a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul               std::vector<DrmEncoder *> &possible_encoders);
37ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  DrmConnector(const DrmProperty &) = delete;
38ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  DrmConnector &operator=(const DrmProperty &) = delete;
396a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
406a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int Init();
416a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
426a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t id() const;
436a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
446a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int display() const;
456a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  void set_display(int display);
466a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
476a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  bool built_in() const;
486a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
496a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int UpdateModes();
506a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
51ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  const std::vector<DrmMode> &modes() const {
52ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner    return modes_;
53ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  }
546a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  const DrmMode &active_mode() const;
55877be974a2d4fc518700be8ffe803a50cb716eadSean Paul  void set_active_mode(const DrmMode &mode);
566a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
576a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  const DrmProperty &dpms_property() const;
58877be974a2d4fc518700be8ffe803a50cb716eadSean Paul  const DrmProperty &crtc_id_property() const;
596a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
60ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  const std::vector<DrmEncoder *> &possible_encoders() const {
61ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner    return possible_encoders_;
62ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  }
636a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmEncoder *encoder() const;
646a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  void set_encoder(DrmEncoder *encoder);
656a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
66092164970256626a4c66164405633a006721e327Sean Paul  drmModeConnection state() const;
67092164970256626a4c66164405633a006721e327Sean Paul
686a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t mm_width() const;
696a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t mm_height() const;
706a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
716a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul private:
726a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmResources *drm_;
736a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
746a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t id_;
756a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmEncoder *encoder_;
766a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int display_;
776a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
786a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t type_;
796a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  drmModeConnection state_;
806a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
816a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t mm_width_;
826a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t mm_height_;
836a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
846a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmMode active_mode_;
856a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  std::vector<DrmMode> modes_;
866a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
876a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmProperty dpms_property_;
88877be974a2d4fc518700be8ffe803a50cb716eadSean Paul  DrmProperty crtc_id_property_;
896a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
906a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  std::vector<DrmEncoder *> possible_encoders_;
916a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul};
926a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul}
936a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
946a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#endif  // ANDROID_DRM_PLANE_H_
95