168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file. 468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef BASE_X11_EDID_PARSER_X11_H_ 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define BASE_X11_EDID_PARSER_X11_H_ 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <string> 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/base_export.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/basictypes.h" 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)typedef unsigned long XID; 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// EDID (Extended Display Identification Data) is a format for monitor 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// metadata. This provides a parser for the data and an interface to get it 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// from XRandR. 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace base { 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Get the EDID data from the |output| and stores to |prop|. |nitem| will store 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// the number of characters |prop| will have. It doesn't take the ownership of 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// |prop|, so caller must release it by XFree(). 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Returns true if EDID property is successfully obtained. Otherwise returns 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// false and does not touch |prop| and |nitems|. 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)BASE_EXPORT bool GetEDIDProperty(XID output, 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unsigned long* nitems, 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unsigned char** prop); 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Gets the EDID data from |output| and generates the display id through 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// |GetDisplayIdFromEDID|. 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)BASE_EXPORT bool GetDisplayId(XID output, size_t index, 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64* display_id_out); 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Generates the display id for the pair of |prop| with |nitems| length and 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// |index|, and store in |display_id_out|. Returns true if the display id is 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// successfully generated, or false otherwise. 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)BASE_EXPORT bool GetDisplayIdFromEDID(const unsigned char* prop, 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unsigned long nitems, 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) size_t index, 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64* display_id_out); 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Parses |prop| as EDID data and stores extracted data into |manufacturer_id| 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// and |human_readable_name| and returns true. NULL can be passed for unwanted 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// output parameters. Some devices (especially internal displays) may not have 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// the field for |human_readable_name|, and it will return true in that case. 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)BASE_EXPORT bool ParseOutputDeviceData(const unsigned char* prop, 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unsigned long nitems, 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) uint16* manufacturer_id, 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string* human_readable_name); 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace base 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif // BASE_X11_EDID_PARSER_X11_H_ 55