1 /* 2 * Copyright (C) 2018 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 #pragma once 18 19 #include <array> 20 #include <cstdint> 21 #include <optional> 22 #include <string> 23 #include <string_view> 24 #include <vector> 25 26 #include <ui/GraphicTypes.h> 27 28 namespace android { 29 30 struct DisplayId { 31 using Type = PhysicalDisplayId; 32 Type value; 33 34 uint16_t manufacturerId() const; 35 36 static DisplayId fromEdid(uint8_t port, uint16_t manufacturerId, uint32_t displayNameHash); 37 }; 38 39 inline bool operator==(DisplayId lhs, DisplayId rhs) { 40 return lhs.value == rhs.value; 41 } 42 43 inline bool operator!=(DisplayId lhs, DisplayId rhs) { 44 return !(lhs == rhs); 45 } 46 47 inline std::string to_string(DisplayId displayId) { 48 return std::to_string(displayId.value); 49 } 50 51 using DisplayIdentificationData = std::vector<uint8_t>; 52 53 struct DisplayIdentificationInfo { 54 DisplayId id; 55 std::string name; 56 }; 57 58 // NUL-terminated plug and play ID. 59 using PnpId = std::array<char, 4>; 60 61 struct Edid { 62 uint16_t manufacturerId; 63 PnpId pnpId; 64 std::string_view displayName; 65 }; 66 67 bool isEdid(const DisplayIdentificationData&); 68 std::optional<Edid> parseEdid(const DisplayIdentificationData&); 69 std::optional<PnpId> getPnpId(uint16_t manufacturerId); 70 std::optional<PnpId> getPnpId(DisplayId); 71 72 std::optional<DisplayIdentificationInfo> parseDisplayIdentificationData( 73 uint8_t port, const DisplayIdentificationData&); 74 75 DisplayId getFallbackDisplayId(uint8_t port); 76 DisplayId getVirtualDisplayId(uint32_t id); 77 78 } // namespace android 79 80 namespace std { 81 82 template <> 83 struct hash<android::DisplayId> { 84 size_t operator()(android::DisplayId displayId) const { 85 return hash<android::DisplayId::Type>()(displayId.value); 86 } 87 }; 88 89 } // namespace std 90