diff options
Diffstat (limited to 'drm/DrmConnector.h')
-rw-r--r-- | drm/DrmConnector.h | 112 |
1 files changed, 69 insertions, 43 deletions
diff --git a/drm/DrmConnector.h b/drm/DrmConnector.h index 2bcb543..629b3cc 100644 --- a/drm/DrmConnector.h +++ b/drm/DrmConnector.h @@ -32,69 +32,97 @@ namespace android { class DrmDevice; -class DrmConnector { +class DrmConnector : public PipelineBindable<DrmConnector> { public: - DrmConnector(DrmDevice *drm, drmModeConnectorPtr c, - DrmEncoder *current_encoder, - std::vector<DrmEncoder *> &possible_encoders); + static auto CreateInstance(DrmDevice &dev, uint32_t connector_id, + uint32_t index) -> std::unique_ptr<DrmConnector>; + DrmConnector(const DrmProperty &) = delete; DrmConnector &operator=(const DrmProperty &) = delete; - int Init(); int UpdateEdidProperty(); auto GetEdidBlob() -> DrmModePropertyBlobUnique; - uint32_t id() const; + auto GetDev() const -> DrmDevice & { + return *drm_; + } + + auto GetId() const { + return connector_->connector_id; + } + + auto GetIndexInResArray() const { + return index_in_res_array_; + } + + auto GetCurrentEncoderId() const { + return connector_->encoder_id; + } + + auto SupportsEncoder(DrmEncoder &enc) const { + for (int i = 0; i < connector_->count_encoders; i++) { + // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic) + if (connector_->encoders[i] == enc.GetId()) { + return true; + } + } - int display() const; - void set_display(int display); + return false; + } - bool internal() const; - bool external() const; - bool writeback() const; - bool valid_type() const; + bool IsInternal() const; + bool IsExternal() const; + bool IsWriteback() const; + bool IsValid() const; - std::string name() const; + std::string GetName() const; int UpdateModes(); - const std::vector<DrmMode> &modes() const { + auto &GetModes() const { return modes_; } - const DrmMode &active_mode() const; - void set_active_mode(const DrmMode &mode); - - const DrmProperty &dpms_property() const; - const DrmProperty &crtc_id_property() const; - const DrmProperty &edid_property() const; - const DrmProperty &writeback_pixel_formats() const; - const DrmProperty &writeback_fb_id() const; - const DrmProperty &writeback_out_fence() const; - - const std::vector<DrmEncoder *> &possible_encoders() const { - return possible_encoders_; + + auto &GetActiveMode() const { + return active_mode_; } - DrmEncoder *encoder() const; - void set_encoder(DrmEncoder *encoder); - drmModeConnection state() const; + void SetActiveMode(DrmMode &mode); - uint32_t mm_width() const; - uint32_t mm_height() const; + auto &GetDpmsProperty() const { + return dpms_property_; + } - private: - DrmDevice *drm_; + auto &GetCrtcIdProperty() const { + return crtc_id_property_; + } + + auto &GetEdidProperty() const { + return edid_property_; + } - uint32_t id_; - DrmEncoder *encoder_; - int display_; + auto IsConnected() const { + return connector_->connection == DRM_MODE_CONNECTED; + } - uint32_t type_; - uint32_t type_id_; - drmModeConnection state_; + auto GetMmWidth() const { + return connector_->mmWidth; + } - uint32_t mm_width_; - uint32_t mm_height_; + auto GetMmHeight() const { + return connector_->mmHeight; + }; + + private: + DrmConnector(DrmModeConnectorUnique connector, DrmDevice *drm, uint32_t index) + : connector_(std::move(connector)), + drm_(drm), + index_in_res_array_(index){}; + + DrmModeConnectorUnique connector_; + DrmDevice *const drm_; + + const uint32_t index_in_res_array_; DrmMode active_mode_; std::vector<DrmMode> modes_; @@ -105,8 +133,6 @@ class DrmConnector { DrmProperty writeback_pixel_formats_; DrmProperty writeback_fb_id_; DrmProperty writeback_out_fence_; - - std::vector<DrmEncoder *> possible_encoders_; }; } // namespace android |