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