Home | History | Annotate | Download | only in drm_hwcomposer
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "drmmode.h"
     18 #include "drmresources.h"
     19 
     20 #include <stdint.h>
     21 #include <string>
     22 #include <xf86drmMode.h>
     23 
     24 namespace android {
     25 
     26 DrmMode::DrmMode(drmModeModeInfoPtr m)
     27     : id_(0),
     28       clock_(m->clock),
     29       h_display_(m->hdisplay),
     30       h_sync_start_(m->hsync_start),
     31       h_sync_end_(m->hsync_end),
     32       h_total_(m->htotal),
     33       h_skew_(m->hskew),
     34       v_display_(m->vdisplay),
     35       v_sync_start_(m->vsync_start),
     36       v_sync_end_(m->vsync_end),
     37       v_total_(m->vtotal),
     38       v_scan_(m->vscan),
     39       v_refresh_(m->vrefresh),
     40       flags_(m->flags),
     41       type_(m->type),
     42       name_(m->name) {
     43 }
     44 
     45 bool DrmMode::operator==(const drmModeModeInfo &m) const {
     46   return clock_ == m.clock && h_display_ == m.hdisplay &&
     47          h_sync_start_ == m.hsync_start && h_sync_end_ == m.hsync_end &&
     48          h_total_ == m.htotal && h_skew_ == m.hskew &&
     49          v_display_ == m.vdisplay && v_sync_start_ == m.vsync_start &&
     50          v_sync_end_ == m.vsync_end && v_total_ == m.vtotal &&
     51          v_scan_ == m.vscan && flags_ == m.flags && type_ == m.type;
     52 }
     53 
     54 void DrmMode::ToDrmModeModeInfo(drm_mode_modeinfo *m) const {
     55   m->clock = clock_;
     56   m->hdisplay = h_display_;
     57   m->hsync_start = h_sync_start_;
     58   m->hsync_end = h_sync_end_;
     59   m->htotal = h_total_;
     60   m->hskew = h_skew_;
     61   m->vdisplay = v_display_;
     62   m->vsync_start = v_sync_start_;
     63   m->vsync_end = v_sync_end_;
     64   m->vtotal = v_total_;
     65   m->vscan = v_scan_;
     66   m->vrefresh = v_refresh_;
     67   m->flags = flags_;
     68   m->type = type_;
     69   strncpy(m->name, name_.c_str(), DRM_DISPLAY_MODE_LEN);
     70 }
     71 
     72 uint32_t DrmMode::id() const {
     73   return id_;
     74 }
     75 
     76 void DrmMode::set_id(uint32_t id) {
     77   id_ = id;
     78 }
     79 
     80 uint32_t DrmMode::clock() const {
     81   return clock_;
     82 }
     83 
     84 uint32_t DrmMode::h_display() const {
     85   return h_display_;
     86 }
     87 
     88 uint32_t DrmMode::h_sync_start() const {
     89   return h_sync_start_;
     90 }
     91 
     92 uint32_t DrmMode::h_sync_end() const {
     93   return h_sync_end_;
     94 }
     95 
     96 uint32_t DrmMode::h_total() const {
     97   return h_total_;
     98 }
     99 
    100 uint32_t DrmMode::h_skew() const {
    101   return h_skew_;
    102 }
    103 
    104 uint32_t DrmMode::v_display() const {
    105   return v_display_;
    106 }
    107 
    108 uint32_t DrmMode::v_sync_start() const {
    109   return v_sync_start_;
    110 }
    111 
    112 uint32_t DrmMode::v_sync_end() const {
    113   return v_sync_end_;
    114 }
    115 
    116 uint32_t DrmMode::v_total() const {
    117   return v_total_;
    118 }
    119 
    120 uint32_t DrmMode::v_scan() const {
    121   return v_scan_;
    122 }
    123 
    124 float DrmMode::v_refresh() const {
    125   return v_refresh_ ? v_refresh_ * 1.0f :
    126                       clock_ / (float)(v_total_ * h_total_) * 1000.0f;
    127 }
    128 
    129 uint32_t DrmMode::flags() const {
    130   return flags_;
    131 }
    132 
    133 uint32_t DrmMode::type() const {
    134   return type_;
    135 }
    136 
    137 std::string DrmMode::name() const {
    138   return name_;
    139 }
    140 }
    141