<ClInclude Include="..\src\lib\CECClient.h" />
<ClInclude Include="..\src\lib\CECInputBuffer.h" />
<ClInclude Include="..\src\lib\CECProcessor.h" />
+ <ClInclude Include="..\src\lib\CECTypeUtils.h" />
<ClInclude Include="..\src\lib\devices\CECAudioSystem.h" />
<ClInclude Include="..\src\lib\devices\CECBusDevice.h" />
<ClInclude Include="..\src\lib\devices\CECDeviceMap.h" />
<ClInclude Include="..\src\lib\implementations\SLCommandHandler.h" />
<ClInclude Include="..\src\lib\implementations\VLCommandHandler.h" />
<ClInclude Include="..\src\lib\LibCEC.h" />
+ <ClInclude Include="..\src\lib\platform\adl\adl-edid.h" />
+ <ClInclude Include="..\src\lib\platform\adl\adl_defines.h" />
+ <ClInclude Include="..\src\lib\platform\adl\adl_sdk.h" />
+ <ClInclude Include="..\src\lib\platform\adl\adl_structures.h" />
<ClInclude Include="..\src\lib\platform\os.h" />
<ClInclude Include="..\src\lib\platform\sockets\serialport.h" />
<ClInclude Include="..\src\lib\platform\sockets\socket.h" />
<ClInclude Include="..\src\lib\platform\threads\threads.h" />
<ClInclude Include="..\src\lib\platform\util\baudrate.h" />
<ClInclude Include="..\src\lib\platform\util\buffer.h" />
+ <ClInclude Include="..\src\lib\platform\util\edid.h" />
<ClInclude Include="..\src\lib\platform\util\StdString.h" />
<ClInclude Include="..\src\lib\platform\util\timeutils.h" />
+ <ClInclude Include="..\src\lib\platform\windows\dlfcn-win32.h" />
<ClInclude Include="..\src\lib\platform\windows\os-socket.h" />
<ClInclude Include="..\src\lib\platform\windows\os-threads.h" />
<ClInclude Include="..\src\lib\platform\windows\os-types.h" />
<ClCompile Include="..\src\lib\LibCEC.cpp" />
<ClCompile Include="..\src\lib\LibCECC.cpp" />
<ClCompile Include="..\src\lib\LibCECDll.cpp" />
+ <ClCompile Include="..\src\lib\platform\adl\adl-edid.cpp" />
+ <ClCompile Include="..\src\lib\platform\windows\dlfcn-win32.cpp" />
+ <ClCompile Include="..\src\lib\platform\windows\os-edid.cpp" />
<ClCompile Include="..\src\lib\platform\windows\os-threads.cpp" />
<ClCompile Include="..\src\lib\platform\windows\serialport.cpp" />
</ItemGroup>
<Filter Include="platform\windows">
<UniqueIdentifier>{65c4a590-4577-40e4-91ad-339e20b99ebe}</UniqueIdentifier>
</Filter>
+ <Filter Include="platform\adl">
+ <UniqueIdentifier>{4fbd02e2-5671-4132-9b37-964c17fb3b0d}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\lib\CECProcessor.h" />
<ClInclude Include="..\src\lib\devices\CECDeviceMap.h">
<Filter>devices</Filter>
</ClInclude>
+ <ClInclude Include="..\src\lib\CECTypeUtils.h" />
+ <ClInclude Include="..\src\lib\platform\util\edid.h">
+ <Filter>platform\util</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\lib\platform\adl\adl_defines.h">
+ <Filter>platform\adl</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\lib\platform\adl\adl_sdk.h">
+ <Filter>platform\adl</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\lib\platform\adl\adl_structures.h">
+ <Filter>platform\adl</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\lib\platform\adl\adl-edid.h">
+ <Filter>platform\adl</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\lib\platform\windows\dlfcn-win32.h">
+ <Filter>platform\windows</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\lib\CECProcessor.cpp" />
<ClCompile Include="..\src\lib\devices\CECDeviceMap.cpp">
<Filter>devices</Filter>
</ClCompile>
+ <ClCompile Include="..\src\lib\platform\windows\os-edid.cpp">
+ <Filter>platform\windows</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\lib\platform\adl\adl-edid.cpp">
+ <Filter>platform\adl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\lib\platform\windows\dlfcn-win32.cpp">
+ <Filter>platform\windows</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="libcec.rc" />
implementations/VLCommandHandler.cpp \
implementations/RLCommandHandler.cpp \
platform/posix/serialport.cpp \
- platform/posix/serversocket.cpp
-
+ platform/posix/serversocket.cpp\
+ platform/posix/os-edid.cpp \
+ platform/adl/adl-edid.cpp
+
libcec_la_LDFLAGS = @LIBS@ -version-info @VERSION@
libcec_la_CPPFLAGS = -I@abs_top_srcdir@/include
#include "../platform/sockets/serialport.h"
#include "../platform/util/timeutils.h"
#include "../platform/util/util.h"
+#include "../platform/util/edid.h"
+#include "../platform/adl/adl-edid.h"
#include "../LibCEC.h"
#include "../CECProcessor.h"
return IsOpen() ? m_commands->SetControlledMode(controlled) : false;
}
+uint16_t CUSBCECAdapterCommunication::GetPhysicalAddress(void)
+{
+ uint16_t iPA(0);
+
+ // try to get the PA from ADL
+#if defined(HAS_ADL_EDID_PARSER)
+ {
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s - trying to get the physical address via ADL", __FUNCTION__);
+ CADLEdidParser adl;
+ iPA = adl.GetPhysicalAddress();
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s - ADL returned physical address %04x", __FUNCTION__, iPA);
+ }
+#endif
+
+ // try to get the PA from the OS
+ if (iPA == 0)
+ {
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s - trying to get the physical address from the OS", __FUNCTION__);
+ iPA = CEDIDParser::GetPhysicalAddress();
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s - OS returned physical address %04x", __FUNCTION__, iPA);
+ }
+
+ return iPA;
+}
+
void *CAdapterPingThread::Process(void)
{
while (!IsStopped())
bool PersistConfiguration(const libcec_configuration &configuration);
bool GetConfiguration(libcec_configuration &configuration);
CStdString GetPortName(void);
- uint16_t GetPhysicalAddress(void) { return 0; }
+ uint16_t GetPhysicalAddress(void);
bool SetControlledMode(bool controlled);
///}
--- /dev/null
+/*
+ * This file is part of the libCEC(R) library.
+ *
+ * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is an original work, containing original code.
+ *
+ * libCEC(R) is a trademark of Pulse-Eight Limited.
+ *
+ * This program is dual-licensed; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * Alternatively, you can license this library under a commercial license,
+ * please contact Pulse-Eight Licensing for more information.
+ *
+ * For more information contact:
+ * Pulse-Eight Licensing <license@pulse-eight.com>
+ * http://www.pulse-eight.com/
+ * http://www.pulse-eight.net/
+ */
+
+#include "adl-edid.h"
+
+// for dlsym and friends
+#if defined(__WINDOWS__)
+#include "../windows/dlfcn-win32.h"
+#endif
+
+using namespace PLATFORM;
+
+CADLEdidParser::CADLEdidParser(void) :
+ m_bOpen(false),
+ m_handle(NULL)
+{
+ Initialise();
+}
+
+CADLEdidParser::~CADLEdidParser(void)
+{
+ CloseLibrary();
+}
+
+bool CADLEdidParser::OpenLibrary(void)
+{
+ CloseLibrary();
+
+#if !defined(__WINDOWS__)
+ m_handle = dlopen("libatiadlxx.so", RTLD_LAZY|RTLD_GLOBAL);
+#else
+ m_handle = LoadLibrary("atiadlxx.dll");
+ // try 32 bit
+ if (!m_handle)
+ m_handle = LoadLibrary("atiadlxy.dll");
+#endif
+
+ return m_handle != NULL;
+}
+
+void CADLEdidParser::CloseLibrary(void)
+{
+ if (LibOpen())
+ ADL_Main_Control_Destroy();
+
+ if (m_handle)
+ dlclose(m_handle);
+ m_handle = NULL;
+}
+
+void *__stdcall ADL_AllocMemory(int iSize)
+{
+ void* lpBuffer = malloc(iSize);
+ return lpBuffer;
+}
+
+void CADLEdidParser::Initialise(void)
+{
+ if (OpenLibrary())
+ {
+ // dlsym the methods we need
+ ADL_Main_Control_Create = (ADL_MAIN_CONTROL_CREATE) dlsym(m_handle, "ADL_Main_Control_Create");
+ ADL_Main_Control_Destroy = (ADL_MAIN_CONTROL_DESTROY) dlsym(m_handle, "ADL_Main_Control_Destroy");
+ ADL_Adapter_NumberOfAdapters_Get = (ADL_ADAPTER_NUMBEROFADAPTERS_GET) dlsym(m_handle, "ADL_Adapter_NumberOfAdapters_Get");
+ ADL_Adapter_AdapterInfo_Get = (ADL_ADAPTER_ADAPTERINFO_GET) dlsym(m_handle, "ADL_Adapter_AdapterInfo_Get");
+ ADL_Display_DisplayInfo_Get = (ADL_DISPLAY_DISPLAYINFO_GET) dlsym(m_handle, "ADL_Display_DisplayInfo_Get");
+ ADL_Display_EdidData_Get = (ADL_DISPLAY_EDIDDATA_GET) dlsym(m_handle, "ADL_Display_EdidData_Get");
+
+ // check whether they could all be resolved
+ if (ADL_Main_Control_Create &&
+ ADL_Main_Control_Destroy &&
+ ADL_Adapter_NumberOfAdapters_Get &&
+ ADL_Adapter_AdapterInfo_Get &&
+ ADL_Display_DisplayInfo_Get &&
+ ADL_Display_EdidData_Get)
+ {
+ // and try to initialise it
+ m_bOpen = (ADL_OK == ADL_Main_Control_Create(ADL_AllocMemory, 1));
+ }
+ }
+}
+
+int CADLEdidParser::GetNumAdapters(void)
+{
+ int iNumAdapters(0);
+
+ if (!LibOpen() || ADL_OK != ADL_Adapter_NumberOfAdapters_Get(&iNumAdapters))
+ iNumAdapters = 0;
+
+ return iNumAdapters;
+}
+
+LPAdapterInfo CADLEdidParser::GetAdapterInfo(int iNumAdapters)
+{
+ // validate input
+ if (iNumAdapters <= 0)
+ return NULL;
+
+ LPAdapterInfo adapterInfo = (LPAdapterInfo)malloc(sizeof(AdapterInfo) * iNumAdapters);
+ memset(adapterInfo, 0, sizeof(AdapterInfo) * iNumAdapters);
+
+ // get the info
+ ADL_Adapter_AdapterInfo_Get(adapterInfo, sizeof(AdapterInfo) * iNumAdapters);
+
+ return adapterInfo;
+}
+
+bool CADLEdidParser::GetAdapterEDID(int iAdapterIndex, int iDisplayIndex, ADLDisplayEDIDData *data)
+{
+ // validate input
+ if (iAdapterIndex < 0 || iDisplayIndex < 0)
+ return false;
+
+ memset(data, 0, sizeof(ADLDisplayEDIDData));
+ data->iSize = sizeof(ADLDisplayEDIDData);
+ data->iBlockIndex = 1;
+
+ return (ADL_Display_EdidData_Get(iAdapterIndex, iDisplayIndex, data) == ADL_OK);
+}
+
+uint16_t CADLEdidParser::GetPhysicalAddress(void)
+{
+ uint16_t iPA(0);
+
+ // get the number of adapters
+ int iNumAdapters = GetNumAdapters();
+ if (iNumAdapters <= 0)
+ return 0;
+
+ // get the adapter info
+ LPAdapterInfo adapterInfo = GetAdapterInfo(iNumAdapters);
+ if (!adapterInfo)
+ return 0;
+
+ // iterate over it
+ for (int iAdapterPtr = 0; iAdapterPtr < iNumAdapters; iAdapterPtr++)
+ {
+ int iNumDisplays(-1);
+ LPADLDisplayInfo displayInfo(NULL);
+ int iAdapterIndex = adapterInfo[iAdapterPtr].iAdapterIndex;
+
+ // get the display info
+ if (ADL_OK != ADL_Display_DisplayInfo_Get(iAdapterIndex, &iNumDisplays, &displayInfo, 0))
+ continue;
+
+ // iterate over it
+ for (int iDisplayPtr = 0; iDisplayPtr < iNumDisplays; iDisplayPtr++)
+ {
+ // check whether the display is connected
+ if ((displayInfo[iDisplayPtr].iDisplayInfoValue & ADL_DISPLAY_CONNECTED) != ADL_DISPLAY_CONNECTED)
+ continue;
+
+ int iDisplayIndex = displayInfo[iDisplayPtr].displayID.iDisplayLogicalIndex;
+
+ // try to get the EDID
+ ADLDisplayEDIDData edidData;
+ if (GetAdapterEDID(iAdapterIndex, iDisplayIndex, &edidData))
+ {
+ // try to get the PA from the EDID
+ iPA = CEDIDParser::GetPhysicalAddressFromEDID(edidData.cEDIDData, edidData.iEDIDSize);
+
+ // found it
+ if (iPA != 0)
+ break;
+ }
+ }
+
+ free(displayInfo);
+ }
+
+ free(adapterInfo);
+
+ return iPA;
+}
--- /dev/null
+#pragma once
+/*
+ * This file is part of the libCEC(R) library.
+ *
+ * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is an original work, containing original code.
+ *
+ * libCEC(R) is a trademark of Pulse-Eight Limited.
+ *
+ * This program is dual-licensed; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * Alternatively, you can license this library under a commercial license,
+ * please contact Pulse-Eight Licensing for more information.
+ *
+ * For more information contact:
+ * Pulse-Eight Licensing <license@pulse-eight.com>
+ * http://www.pulse-eight.com/
+ * http://www.pulse-eight.net/
+ */
+
+#define HAS_ADL_EDID_PARSER
+
+#include "../os.h"
+#include "../util/edid.h"
+
+#if !defined(__WINDOWS__)
+#include "adl_sdk.h"
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+typedef void* ADL_LIB_HANDLE;
+
+#else
+#include <windows.h>
+#include <tchar.h>
+#include "adl_sdk.h"
+
+typedef HINSTANCE ADL_LIB_HANDLE;
+#endif
+
+typedef int (*ADL_MAIN_CONTROL_CREATE ) (ADL_MAIN_MALLOC_CALLBACK, int);
+typedef int (*ADL_MAIN_CONTROL_DESTROY) (void);
+typedef int (*ADL_ADAPTER_NUMBEROFADAPTERS_GET) (int*);
+typedef int (*ADL_ADAPTER_ADAPTERINFO_GET) (LPAdapterInfo, int);
+typedef int (*ADL_DISPLAY_DISPLAYINFO_GET) (int, int *, ADLDisplayInfo **, int);
+typedef int (*ADL_DISPLAY_EDIDDATA_GET) (int, int, ADLDisplayEDIDData *);
+
+#define ADL_DISPLAY_CONNECTED (ADL_DISPLAY_DISPLAYINFO_DISPLAYCONNECTED | ADL_DISPLAY_DISPLAYINFO_DISPLAYMAPPED)
+
+namespace PLATFORM
+{
+ class CADLEdidParser
+ {
+ public:
+ CADLEdidParser(void);
+ virtual ~CADLEdidParser(void);
+
+ uint16_t GetPhysicalAddress(void);
+ int GetNumAdapters(void);
+
+ private:
+ bool LibOpen(void) { return m_bOpen; }
+ void Initialise(void);
+ bool OpenLibrary(void);
+ void CloseLibrary(void);
+
+ LPAdapterInfo GetAdapterInfo(int iNumAdapters);
+ bool GetAdapterEDID(int iAdapterIndex, int iDisplayIndex, ADLDisplayEDIDData *data);
+
+ bool m_bOpen;
+ ADL_LIB_HANDLE m_handle;
+
+ ADL_MAIN_CONTROL_CREATE ADL_Main_Control_Create;
+ ADL_MAIN_CONTROL_DESTROY ADL_Main_Control_Destroy;
+ ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get;
+ ADL_ADAPTER_ADAPTERINFO_GET ADL_Adapter_AdapterInfo_Get;
+ ADL_DISPLAY_DISPLAYINFO_GET ADL_Display_DisplayInfo_Get;
+ ADL_DISPLAY_EDIDDATA_GET ADL_Display_EdidData_Get;
+ };
+}
--- /dev/null
+//
+// Copyright (c) 2008 - 2012 Advanced Micro Devices, Inc.
+
+// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
+// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
+
+/// \file adl_defines.h
+/// \brief Contains all definitions exposed by ADL for \ALL platforms.\n <b>Included in ADL SDK</b>
+///
+/// This file contains all definitions used by ADL.
+/// The ADL definitions include the following:
+/// \li ADL error codes
+/// \li Enumerations for the ADLDisplayInfo structure
+/// \li Maximum limits
+///
+
+#ifndef ADL_DEFINES_H_
+#define ADL_DEFINES_H_
+
+/// \defgroup DEFINES Constants and Definitions
+// @{
+
+/// \defgroup define_misc Miscellaneous Constant Definitions
+// @{
+
+/// \name General Definitions
+// @{
+
+/// Defines ADL_TRUE
+#define ADL_TRUE 1
+/// Defines ADL_FALSE
+#define ADL_FALSE 0
+
+/// Defines the maximum string length
+#define ADL_MAX_CHAR 4096
+/// Defines the maximum string length
+#define ADL_MAX_PATH 256
+/// Defines the maximum number of supported adapters
+#define ADL_MAX_ADAPTERS 250
+/// Defines the maxumum number of supported displays
+#define ADL_MAX_DISPLAYS 150
+/// Defines the maxumum string length for device name
+#define ADL_MAX_DEVICENAME 32
+/// Defines for all adapters
+#define ADL_ADAPTER_INDEX_ALL -1
+/// Defines APIs with iOption none
+#define ADL_MAIN_API_OPTION_NONE 0
+// @}
+
+/// \name Definitions for iOption parameter used by
+/// ADL_Display_DDCBlockAccess_Get()
+// @{
+
+/// Switch to DDC line 2 before sending the command to the display.
+#define ADL_DDC_OPTION_SWITCHDDC2 0x00000001
+/// Save command in the registry under a unique key, corresponding to parameter \b iCommandIndex
+#define ADL_DDC_OPTION_RESTORECOMMAND 0x00000002
+/// Combine write-read DDC block access command.
+#define ADL_DDC_OPTION_COMBOWRITEREAD 0x00000010
+// @}
+
+/// \name Values for
+/// ADLI2C.iAction used with ADL_Display_WriteAndReadI2C()
+// @{
+
+#define ADL_DL_I2C_ACTIONREAD 0x00000001
+#define ADL_DL_I2C_ACTIONWRITE 0x00000002
+#define ADL_DL_I2C_ACTIONREAD_REPEATEDSTART 0x00000003
+// @}
+
+
+// @} //Misc
+
+/// \defgroup define_adl_results Result Codes
+/// This group of definitions are the various results returned by all ADL functions \n
+// @{
+/// All OK, but need to wait
+#define ADL_OK_WAIT 4
+/// All OK, but need restart
+#define ADL_OK_RESTART 3
+/// All OK but need mode change
+#define ADL_OK_MODE_CHANGE 2
+/// All OK, but with warning
+#define ADL_OK_WARNING 1
+/// ADL function completed successfully
+#define ADL_OK 0
+/// Generic Error. Most likely one or more of the Escape calls to the driver failed!
+#define ADL_ERR -1
+/// ADL not initialized
+#define ADL_ERR_NOT_INIT -2
+/// One of the parameter passed is invalid
+#define ADL_ERR_INVALID_PARAM -3
+/// One of the parameter size is invalid
+#define ADL_ERR_INVALID_PARAM_SIZE -4
+/// Invalid ADL index passed
+#define ADL_ERR_INVALID_ADL_IDX -5
+/// Invalid controller index passed
+#define ADL_ERR_INVALID_CONTROLLER_IDX -6
+/// Invalid display index passed
+#define ADL_ERR_INVALID_DIPLAY_IDX -7
+/// Function not supported by the driver
+#define ADL_ERR_NOT_SUPPORTED -8
+/// Null Pointer error
+#define ADL_ERR_NULL_POINTER -9
+/// Call can't be made due to disabled adapter
+#define ADL_ERR_DISABLED_ADAPTER -10
+/// Invalid Callback
+#define ADL_ERR_INVALID_CALLBACK -11
+/// Display Resource conflict
+#define ADL_ERR_RESOURCE_CONFLICT -12
+
+// @}
+/// </A>
+
+/// \defgroup define_display_type Display Type
+/// Define Monitor/CRT display type
+// @{
+/// Define Monitor display type
+#define ADL_DT_MONITOR 0
+/// Define TV display type
+#define ADL_DT_TELEVISION 1
+/// Define LCD display type
+#define ADL_DT_LCD_PANEL 2
+/// Define DFP display type
+#define ADL_DT_DIGITAL_FLAT_PANEL 3
+/// Define Componment Video display type
+#define ADL_DT_COMPONENT_VIDEO 4
+/// Define Projector display type
+#define ADL_DT_PROJECTOR 5
+// @}
+
+/// \defgroup define_display_connection_type Display Connection Type
+// @{
+/// Define unknown display output type
+#define ADL_DOT_UNKNOWN 0
+/// Define composite display output type
+#define ADL_DOT_COMPOSITE 1
+/// Define SVideo display output type
+#define ADL_DOT_SVIDEO 2
+/// Define analog display output type
+#define ADL_DOT_ANALOG 3
+/// Define digital display output type
+#define ADL_DOT_DIGITAL 4
+// @}
+
+/// \defgroup define_color_type Display Color Type and Source
+/// Define Display Color Type and Source
+// @{
+#define ADL_DISPLAY_COLOR_BRIGHTNESS (1 << 0)
+#define ADL_DISPLAY_COLOR_CONTRAST (1 << 1)
+#define ADL_DISPLAY_COLOR_SATURATION (1 << 2)
+#define ADL_DISPLAY_COLOR_HUE (1 << 3)
+#define ADL_DISPLAY_COLOR_TEMPERATURE (1 << 4)
+
+/// Color Temperature Source is EDID
+#define ADL_DISPLAY_COLOR_TEMPERATURE_SOURCE_EDID (1 << 5)
+/// Color Temperature Source is User
+#define ADL_DISPLAY_COLOR_TEMPERATURE_SOURCE_USER (1 << 6)
+// @}
+
+/// \defgroup define_adjustment_capabilities Display Adjustment Capabilities
+/// Display adjustment capabilities values. Returned by ADL_Display_AdjustCaps_Get
+// @{
+#define ADL_DISPLAY_ADJUST_OVERSCAN (1 << 0)
+#define ADL_DISPLAY_ADJUST_VERT_POS (1 << 1)
+#define ADL_DISPLAY_ADJUST_HOR_POS (1 << 2)
+#define ADL_DISPLAY_ADJUST_VERT_SIZE (1 << 3)
+#define ADL_DISPLAY_ADJUST_HOR_SIZE (1 << 4)
+#define ADL_DISPLAY_ADJUST_SIZEPOS (ADL_DISPLAY_ADJUST_VERT_POS | ADL_DISPLAY_ADJUST_HOR_POS | ADL_DISPLAY_ADJUST_VERT_SIZE | ADL_DISPLAY_ADJUST_HOR_SIZE)
+#define ADL_DISPLAY_CUSTOMMODES (1<<5)
+#define ADL_DISPLAY_ADJUST_UNDERSCAN (1<<6)
+// @}
+
+
+/// \defgroup define_desktop_config Desktop Configuration Flags
+/// These flags are used by ADL_DesktopConfig_xxx
+// @{
+#define ADL_DESKTOPCONFIG_UNKNOWN 0 /* UNKNOWN desktop config */
+#define ADL_DESKTOPCONFIG_SINGLE (1 << 0) /* Single */
+#define ADL_DESKTOPCONFIG_CLONE (1 << 2) /* Clone */
+#define ADL_DESKTOPCONFIG_BIGDESK_H (1 << 4) /* Big Desktop Horizontal */
+#define ADL_DESKTOPCONFIG_BIGDESK_V (1 << 5) /* Big Desktop Vertical */
+#define ADL_DESKTOPCONFIG_BIGDESK_HR (1 << 6) /* Big Desktop Reverse Horz */
+#define ADL_DESKTOPCONFIG_BIGDESK_VR (1 << 7) /* Big Desktop Reverse Vert */
+#define ADL_DESKTOPCONFIG_RANDR12 (1 << 8) /* RandR 1.2 Multi-display */
+// @}
+
+/// needed for ADLDDCInfo structure
+#define ADL_MAX_DISPLAY_NAME 256
+
+/// \defgroup define_edid_flags Values for ulDDCInfoFlag
+/// defines for ulDDCInfoFlag EDID flag
+// @{
+#define ADL_DISPLAYDDCINFOEX_FLAG_PROJECTORDEVICE (1 << 0)
+#define ADL_DISPLAYDDCINFOEX_FLAG_EDIDEXTENSION (1 << 1)
+#define ADL_DISPLAYDDCINFOEX_FLAG_DIGITALDEVICE (1 << 2)
+#define ADL_DISPLAYDDCINFOEX_FLAG_HDMIAUDIODEVICE (1 << 3)
+#define ADL_DISPLAYDDCINFOEX_FLAG_SUPPORTS_AI (1 << 4)
+#define ADL_DISPLAYDDCINFOEX_FLAG_SUPPORT_xvYCC601 (1 << 5)
+#define ADL_DISPLAYDDCINFOEX_FLAG_SUPPORT_xvYCC709 (1 << 6)
+// @}
+
+/// \defgroup define_displayinfo_connector Display Connector Type
+/// defines for ADLDisplayInfo.iDisplayConnector
+// @{
+#define ADL_DISPLAY_CONTYPE_UNKNOWN 0
+#define ADL_DISPLAY_CONTYPE_VGA 1
+#define ADL_DISPLAY_CONTYPE_DVI_D 2
+#define ADL_DISPLAY_CONTYPE_DVI_I 3
+#define ADL_DISPLAY_CONTYPE_ATICVDONGLE_NTSC 4
+#define ADL_DISPLAY_CONTYPE_ATICVDONGLE_JPN 5
+#define ADL_DISPLAY_CONTYPE_ATICVDONGLE_NONI2C_JPN 6
+#define ADL_DISPLAY_CONTYPE_ATICVDONGLE_NONI2C_NTSC 7
+#define ADL_DISPLAY_CONTYPE_PROPRIETARY 8
+#define ADL_DISPLAY_CONTYPE_HDMI_TYPE_A 10
+#define ADL_DISPLAY_CONTYPE_HDMI_TYPE_B 11
+#define ADL_DISPLAY_CONTYPE_SVIDEO 12
+#define ADL_DISPLAY_CONTYPE_COMPOSITE 13
+#define ADL_DISPLAY_CONTYPE_RCA_3COMPONENT 14
+#define ADL_DISPLAY_CONTYPE_DISPLAYPORT 15
+#define ADL_DISPLAY_CONTYPE_EDP 16
+#define ADL_DISPLAY_CONTYPE_WIRELESSDISPLAY 17
+// @}
+
+/// TV Capabilities and Standards
+/// \defgroup define_tv_caps TV Capabilities and Standards
+// @{
+#define ADL_TV_STANDARDS (1 << 0)
+#define ADL_TV_SCART (1 << 1)
+
+/// TV Standards Definitions
+#define ADL_STANDARD_NTSC_M (1 << 0)
+#define ADL_STANDARD_NTSC_JPN (1 << 1)
+#define ADL_STANDARD_NTSC_N (1 << 2)
+#define ADL_STANDARD_PAL_B (1 << 3)
+#define ADL_STANDARD_PAL_COMB_N (1 << 4)
+#define ADL_STANDARD_PAL_D (1 << 5)
+#define ADL_STANDARD_PAL_G (1 << 6)
+#define ADL_STANDARD_PAL_H (1 << 7)
+#define ADL_STANDARD_PAL_I (1 << 8)
+#define ADL_STANDARD_PAL_K (1 << 9)
+#define ADL_STANDARD_PAL_K1 (1 << 10)
+#define ADL_STANDARD_PAL_L (1 << 11)
+#define ADL_STANDARD_PAL_M (1 << 12)
+#define ADL_STANDARD_PAL_N (1 << 13)
+#define ADL_STANDARD_PAL_SECAM_D (1 << 14)
+#define ADL_STANDARD_PAL_SECAM_K (1 << 15)
+#define ADL_STANDARD_PAL_SECAM_K1 (1 << 16)
+#define ADL_STANDARD_PAL_SECAM_L (1 << 17)
+// @}
+
+
+/// \defgroup define_video_custom_mode Video Custom Mode flags
+/// Component Video Custom Mode flags. This is used by the iFlags parameter in ADLCustomMode
+// @{
+#define ADL_CUSTOMIZEDMODEFLAG_MODESUPPORTED (1 << 0)
+#define ADL_CUSTOMIZEDMODEFLAG_NOTDELETETABLE (1 << 1)
+#define ADL_CUSTOMIZEDMODEFLAG_INSERTBYDRIVER (1 << 2)
+#define ADL_CUSTOMIZEDMODEFLAG_INTERLACED (1 << 3)
+#define ADL_CUSTOMIZEDMODEFLAG_BASEMODE (1 << 4)
+// @}
+
+/// \defgroup define_ddcinfoflag Values used for DDCInfoFlag
+/// ulDDCInfoFlag field values used by the ADLDDCInfo structure
+// @{
+#define ADL_DISPLAYDDCINFOEX_FLAG_PROJECTORDEVICE (1 << 0)
+#define ADL_DISPLAYDDCINFOEX_FLAG_EDIDEXTENSION (1 << 1)
+#define ADL_DISPLAYDDCINFOEX_FLAG_DIGITALDEVICE (1 << 2)
+#define ADL_DISPLAYDDCINFOEX_FLAG_HDMIAUDIODEVICE (1 << 3)
+#define ADL_DISPLAYDDCINFOEX_FLAG_SUPPORTS_AI (1 << 4)
+#define ADL_DISPLAYDDCINFOEX_FLAG_SUPPORT_xvYCC601 (1 << 5)
+#define ADL_DISPLAYDDCINFOEX_FLAG_SUPPORT_xvYCC709 (1 << 6)
+// @}
+
+/// \defgroup define_cv_dongle Values used by ADL_CV_DongleSettings_xxx
+/// The following is applicable to ADL_DISPLAY_CONTYPE_ATICVDONGLE_JP and ADL_DISPLAY_CONTYPE_ATICVDONGLE_NONI2C_D only
+// @{
+#define ADL_DISPLAY_CV_DONGLE_D1 (1 << 0)
+#define ADL_DISPLAY_CV_DONGLE_D2 (1 << 1)
+#define ADL_DISPLAY_CV_DONGLE_D3 (1 << 2)
+#define ADL_DISPLAY_CV_DONGLE_D4 (1 << 3)
+#define ADL_DISPLAY_CV_DONGLE_D5 (1 << 4)
+
+/// The following is applicable to ADL_DISPLAY_CONTYPE_ATICVDONGLE_NA and ADL_DISPLAY_CONTYPE_ATICVDONGLE_NONI2C only
+
+#define ADL_DISPLAY_CV_DONGLE_480I (1 << 0)
+#define ADL_DISPLAY_CV_DONGLE_480P (1 << 1)
+#define ADL_DISPLAY_CV_DONGLE_540P (1 << 2)
+#define ADL_DISPLAY_CV_DONGLE_720P (1 << 3)
+#define ADL_DISPLAY_CV_DONGLE_1080I (1 << 4)
+#define ADL_DISPLAY_CV_DONGLE_1080P (1 << 5)
+#define ADL_DISPLAY_CV_DONGLE_16_9 (1 << 6)
+#define ADL_DISPLAY_CV_DONGLE_720P50 (1 << 7)
+#define ADL_DISPLAY_CV_DONGLE_1080I25 (1 << 8)
+#define ADL_DISPLAY_CV_DONGLE_576I25 (1 << 9)
+#define ADL_DISPLAY_CV_DONGLE_576P50 (1 << 10)
+#define ADL_DISPLAY_CV_DONGLE_1080P24 (1 << 11)
+#define ADL_DISPLAY_CV_DONGLE_1080P25 (1 << 12)
+#define ADL_DISPLAY_CV_DONGLE_1080P30 (1 << 13)
+#define ADL_DISPLAY_CV_DONGLE_1080P50 (1 << 14)
+// @}
+
+/// \defgroup define_formats_ovr Formats Override Settings
+/// Display force modes flags
+// @{
+///
+#define ADL_DISPLAY_FORMAT_FORCE_720P 0x00000001
+#define ADL_DISPLAY_FORMAT_FORCE_1080I 0x00000002
+#define ADL_DISPLAY_FORMAT_FORCE_1080P 0x00000004
+#define ADL_DISPLAY_FORMAT_FORCE_720P50 0x00000008
+#define ADL_DISPLAY_FORMAT_FORCE_1080I25 0x00000010
+#define ADL_DISPLAY_FORMAT_FORCE_576I25 0x00000020
+#define ADL_DISPLAY_FORMAT_FORCE_576P50 0x00000040
+#define ADL_DISPLAY_FORMAT_FORCE_1080P24 0x00000080
+#define ADL_DISPLAY_FORMAT_FORCE_1080P25 0x00000100
+#define ADL_DISPLAY_FORMAT_FORCE_1080P30 0x00000200
+#define ADL_DISPLAY_FORMAT_FORCE_1080P50 0x00000400
+
+///< Below are \b EXTENDED display mode flags
+
+#define ADL_DISPLAY_FORMAT_CVDONGLEOVERIDE 0x00000001
+#define ADL_DISPLAY_FORMAT_CVMODEUNDERSCAN 0x00000002
+#define ADL_DISPLAY_FORMAT_FORCECONNECT_SUPPORTED 0x00000004
+#define ADL_DISPLAY_FORMAT_RESTRICT_FORMAT_SELECTION 0x00000008
+#define ADL_DISPLAY_FORMAT_SETASPECRATIO 0x00000010
+#define ADL_DISPLAY_FORMAT_FORCEMODES 0x00000020
+#define ADL_DISPLAY_FORMAT_LCDRTCCOEFF 0x00000040
+// @}
+
+/// Defines used by OD5
+#define ADL_PM_PARAM_DONT_CHANGE 0
+
+/// The following defines Bus types
+// @{
+#define ADL_BUSTYPE_PCI 0 /* PCI bus */
+#define ADL_BUSTYPE_AGP 1 /* AGP bus */
+#define ADL_BUSTYPE_PCIE 2 /* PCI Express bus */
+#define ADL_BUSTYPE_PCIE_GEN2 3 /* PCI Express 2nd generation bus */
+#define ADL_BUSTYPE_PCIE_GEN3 4 /* PCI Express 3rd generation bus */
+// @}
+
+/// \defgroup define_ws_caps Workstation Capabilities
+/// Workstation values
+// @{
+
+/// This value indicates that the workstation card supports active stereo though stereo output connector
+#define ADL_STEREO_SUPPORTED (1 << 2)
+/// This value indicates that the workstation card supports active stereo via "blue-line"
+#define ADL_STEREO_BLUE_LINE (1 << 3)
+/// This value is used to turn off stereo mode.
+#define ADL_STEREO_OFF 0
+/// This value indicates that the workstation card supports active stereo. This is also used to set the stereo mode to active though the stereo output connector
+#define ADL_STEREO_ACTIVE (1 << 1)
+/// This value indicates that the workstation card supports auto-stereo monitors with horizontal interleave. This is also used to set the stereo mode to use the auto-stereo monitor with horizontal interleave
+#define ADL_STEREO_AUTO_HORIZONTAL (1 << 30)
+/// This value indicates that the workstation card supports auto-stereo monitors with vertical interleave. This is also used to set the stereo mode to use the auto-stereo monitor with vertical interleave
+#define ADL_STEREO_AUTO_VERTICAL (1 << 31)
+/// This value indicates that the workstation card supports passive stereo, ie. non stereo sync
+#define ADL_STEREO_PASSIVE (1 << 6)
+/// This value indicates that the workstation card supports auto-stereo monitors with vertical interleave. This is also used to set the stereo mode to use the auto-stereo monitor with vertical interleave
+#define ADL_STEREO_PASSIVE_HORIZ (1 << 7)
+/// This value indicates that the workstation card supports auto-stereo monitors with vertical interleave. This is also used to set the stereo mode to use the auto-stereo monitor with vertical interleave
+#define ADL_STEREO_PASSIVE_VERT (1 << 8)
+/// This value indicates that the workstation card supports DeepBitDepth (10 bpp)
+#define ADL_DEEPBITDEPTH_10BPP_SUPPORTED (1 << 5)
+
+/// This value indicates that the workstation supports 8-Bit Grayscale
+#define ADL_8BIT_GREYSCALE_SUPPORTED (1 << 9)
+
+/// Load balancing is supported.
+#define ADL_WORKSTATION_LOADBALANCING_SUPPORTED 0x00000001
+/// Load balancing is available.
+#define ADL_WORKSTATION_LOADBALANCING_AVAILABLE 0x00000002
+
+/// Load balancing is disabled.
+#define ADL_WORKSTATION_LOADBALANCING_DISABLED 0x00000000
+/// Load balancing is Enabled.
+#define ADL_WORKSTATION_LOADBALANCING_ENABLED 0x00000001
+
+
+
+// @}
+
+/// \defgroup define_adapterspeed speed setting from the adapter
+// @{
+#define ADL_CONTEXT_SPEED_UNFORCED 0 /* default asic running speed */
+#define ADL_CONTEXT_SPEED_FORCEHIGH 1 /* asic running speed is forced to high */
+#define ADL_CONTEXT_SPEED_FORCELOW 2 /* asic running speed is forced to low */
+
+#define ADL_ADAPTER_SPEEDCAPS_SUPPORTED (1 << 0) /* change asic running speed setting is supported */
+// @}
+
+/// \defgroup define_glsync Genlock related values
+/// GL-Sync port types (unique values)
+// @{
+/// Unknown port of GL-Sync module
+#define ADL_GLSYNC_PORT_UNKNOWN 0
+/// BNC port of of GL-Sync module
+#define ADL_GLSYNC_PORT_BNC 1
+/// RJ45(1) port of of GL-Sync module
+#define ADL_GLSYNC_PORT_RJ45PORT1 2
+/// RJ45(2) port of of GL-Sync module
+#define ADL_GLSYNC_PORT_RJ45PORT2 3
+
+// GL-Sync Genlock settings mask (bit-vector)
+
+/// None of the ADLGLSyncGenlockConfig members are valid
+#define ADL_GLSYNC_CONFIGMASK_NONE 0
+/// The ADLGLSyncGenlockConfig.lSignalSource member is valid
+#define ADL_GLSYNC_CONFIGMASK_SIGNALSOURCE (1 << 0)
+/// The ADLGLSyncGenlockConfig.iSyncField member is valid
+#define ADL_GLSYNC_CONFIGMASK_SYNCFIELD (1 << 1)
+/// The ADLGLSyncGenlockConfig.iSampleRate member is valid
+#define ADL_GLSYNC_CONFIGMASK_SAMPLERATE (1 << 2)
+/// The ADLGLSyncGenlockConfig.lSyncDelay member is valid
+#define ADL_GLSYNC_CONFIGMASK_SYNCDELAY (1 << 3)
+/// The ADLGLSyncGenlockConfig.iTriggerEdge member is valid
+#define ADL_GLSYNC_CONFIGMASK_TRIGGEREDGE (1 << 4)
+/// The ADLGLSyncGenlockConfig.iScanRateCoeff member is valid
+#define ADL_GLSYNC_CONFIGMASK_SCANRATECOEFF (1 << 5)
+/// The ADLGLSyncGenlockConfig.lFramelockCntlVector member is valid
+#define ADL_GLSYNC_CONFIGMASK_FRAMELOCKCNTL (1 << 6)
+
+
+// GL-Sync Framelock control mask (bit-vector)
+
+/// Framelock is disabled
+#define ADL_GLSYNC_FRAMELOCKCNTL_NONE 0
+/// Framelock is enabled
+#define ADL_GLSYNC_FRAMELOCKCNTL_ENABLE ( 1 << 0)
+
+#define ADL_GLSYNC_FRAMELOCKCNTL_DISABLE ( 1 << 1)
+#define ADL_GLSYNC_FRAMELOCKCNTL_SWAP_COUNTER_RESET ( 1 << 2)
+#define ADL_GLSYNC_FRAMELOCKCNTL_SWAP_COUNTER_ACK ( 1 << 3)
+
+#define ADL_GLSYNC_FRAMELOCKCNTL_STATE_ENABLE ( 1 << 0)
+
+// GL-Sync Framelock counters mask (bit-vector)
+#define ADL_GLSYNC_COUNTER_SWAP ( 1 << 0 )
+
+// GL-Sync Signal Sources (unique values)
+
+/// GL-Sync signal source is undefined
+#define ADL_GLSYNC_SIGNALSOURCE_UNDEFINED 0x00000100
+/// GL-Sync signal source is Free Run
+#define ADL_GLSYNC_SIGNALSOURCE_FREERUN 0x00000101
+/// GL-Sync signal source is the BNC GL-Sync port
+#define ADL_GLSYNC_SIGNALSOURCE_BNCPORT 0x00000102
+/// GL-Sync signal source is the RJ45(1) GL-Sync port
+#define ADL_GLSYNC_SIGNALSOURCE_RJ45PORT1 0x00000103
+/// GL-Sync signal source is the RJ45(2) GL-Sync port
+#define ADL_GLSYNC_SIGNALSOURCE_RJ45PORT2 0x00000104
+
+
+// GL-Sync Signal Types (unique values)
+
+/// GL-Sync signal type is unknown
+#define ADL_GLSYNC_SIGNALTYPE_UNDEFINED 0
+/// GL-Sync signal type is 480I
+#define ADL_GLSYNC_SIGNALTYPE_480I 1
+/// GL-Sync signal type is 576I
+#define ADL_GLSYNC_SIGNALTYPE_576I 2
+/// GL-Sync signal type is 480P
+#define ADL_GLSYNC_SIGNALTYPE_480P 3
+/// GL-Sync signal type is 576P
+#define ADL_GLSYNC_SIGNALTYPE_576P 4
+/// GL-Sync signal type is 720P
+#define ADL_GLSYNC_SIGNALTYPE_720P 5
+/// GL-Sync signal type is 1080P
+#define ADL_GLSYNC_SIGNALTYPE_1080P 6
+/// GL-Sync signal type is 1080I
+#define ADL_GLSYNC_SIGNALTYPE_1080I 7
+/// GL-Sync signal type is SDI
+#define ADL_GLSYNC_SIGNALTYPE_SDI 8
+/// GL-Sync signal type is TTL
+#define ADL_GLSYNC_SIGNALTYPE_TTL 9
+/// GL_Sync signal type is Analog
+#define ADL_GLSYNC_SIGNALTYPE_ANALOG 10
+
+// GL-Sync Sync Field options (unique values)
+
+///GL-Sync sync field option is undefined
+#define ADL_GLSYNC_SYNCFIELD_UNDEFINED 0
+///GL-Sync sync field option is Sync to Field 1 (used for Interlaced signal types)
+#define ADL_GLSYNC_SYNCFIELD_BOTH 1
+///GL-Sync sync field option is Sync to Both fields (used for Interlaced signal types)
+#define ADL_GLSYNC_SYNCFIELD_1 2
+
+
+// GL-Sync trigger edge options (unique values)
+
+/// GL-Sync trigger edge is undefined
+#define ADL_GLSYNC_TRIGGEREDGE_UNDEFINED 0
+/// GL-Sync trigger edge is the rising edge
+#define ADL_GLSYNC_TRIGGEREDGE_RISING 1
+/// GL-Sync trigger edge is the falling edge
+#define ADL_GLSYNC_TRIGGEREDGE_FALLING 2
+/// GL-Sync trigger edge is both the rising and the falling edge
+#define ADL_GLSYNC_TRIGGEREDGE_BOTH 3
+
+
+// GL-Sync scan rate coefficient/multiplier options (unique values)
+
+/// GL-Sync scan rate coefficient/multiplier is undefined
+#define ADL_GLSYNC_SCANRATECOEFF_UNDEFINED 0
+/// GL-Sync scan rate coefficient/multiplier is 5
+#define ADL_GLSYNC_SCANRATECOEFF_x5 1
+/// GL-Sync scan rate coefficient/multiplier is 4
+#define ADL_GLSYNC_SCANRATECOEFF_x4 2
+/// GL-Sync scan rate coefficient/multiplier is 3
+#define ADL_GLSYNC_SCANRATECOEFF_x3 3
+/// GL-Sync scan rate coefficient/multiplier is 5:2 (SMPTE)
+#define ADL_GLSYNC_SCANRATECOEFF_x5_DIV_2 4
+/// GL-Sync scan rate coefficient/multiplier is 2
+#define ADL_GLSYNC_SCANRATECOEFF_x2 5
+/// GL-Sync scan rate coefficient/multiplier is 3 : 2
+#define ADL_GLSYNC_SCANRATECOEFF_x3_DIV_2 6
+/// GL-Sync scan rate coefficient/multiplier is 5 : 4
+#define ADL_GLSYNC_SCANRATECOEFF_x5_DIV_4 7
+/// GL-Sync scan rate coefficient/multiplier is 1 (default)
+#define ADL_GLSYNC_SCANRATECOEFF_x1 8
+/// GL-Sync scan rate coefficient/multiplier is 4 : 5
+#define ADL_GLSYNC_SCANRATECOEFF_x4_DIV_5 9
+/// GL-Sync scan rate coefficient/multiplier is 2 : 3
+#define ADL_GLSYNC_SCANRATECOEFF_x2_DIV_3 10
+/// GL-Sync scan rate coefficient/multiplier is 1 : 2
+#define ADL_GLSYNC_SCANRATECOEFF_x1_DIV_2 11
+/// GL-Sync scan rate coefficient/multiplier is 2 : 5 (SMPTE)
+#define ADL_GLSYNC_SCANRATECOEFF_x2_DIV_5 12
+/// GL-Sync scan rate coefficient/multiplier is 1 : 3
+#define ADL_GLSYNC_SCANRATECOEFF_x1_DIV_3 13
+/// GL-Sync scan rate coefficient/multiplier is 1 : 4
+#define ADL_GLSYNC_SCANRATECOEFF_x1_DIV_4 14
+/// GL-Sync scan rate coefficient/multiplier is 1 : 5
+#define ADL_GLSYNC_SCANRATECOEFF_x1_DIV_5 15
+
+
+// GL-Sync port (signal presence) states (unique values)
+
+/// GL-Sync port state is undefined
+#define ADL_GLSYNC_PORTSTATE_UNDEFINED 0
+/// GL-Sync port is not connected
+#define ADL_GLSYNC_PORTSTATE_NOCABLE 1
+/// GL-Sync port is Idle
+#define ADL_GLSYNC_PORTSTATE_IDLE 2
+/// GL-Sync port has an Input signal
+#define ADL_GLSYNC_PORTSTATE_INPUT 3
+/// GL-Sync port is Output
+#define ADL_GLSYNC_PORTSTATE_OUTPUT 4
+
+
+// GL-Sync LED types (used index within ADL_Workstation_GLSyncPortState_Get returned ppGlSyncLEDs array) (unique values)
+
+/// Index into the ADL_Workstation_GLSyncPortState_Get returned ppGlSyncLEDs array for the one LED of the BNC port
+#define ADL_GLSYNC_LEDTYPE_BNC 0
+/// Index into the ADL_Workstation_GLSyncPortState_Get returned ppGlSyncLEDs array for the Left LED of the RJ45(1) or RJ45(2) port
+#define ADL_GLSYNC_LEDTYPE_RJ45_LEFT 0
+/// Index into the ADL_Workstation_GLSyncPortState_Get returned ppGlSyncLEDs array for the Right LED of the RJ45(1) or RJ45(2) port
+#define ADL_GLSYNC_LEDTYPE_RJ45_RIGHT 1
+
+
+// GL-Sync LED colors (unique values)
+
+/// GL-Sync LED undefined color
+#define ADL_GLSYNC_LEDCOLOR_UNDEFINED 0
+/// GL-Sync LED is unlit
+#define ADL_GLSYNC_LEDCOLOR_NOLIGHT 1
+/// GL-Sync LED is yellow
+#define ADL_GLSYNC_LEDCOLOR_YELLOW 2
+/// GL-Sync LED is red
+#define ADL_GLSYNC_LEDCOLOR_RED 3
+/// GL-Sync LED is green
+#define ADL_GLSYNC_LEDCOLOR_GREEN 4
+/// GL-Sync LED is flashing green
+#define ADL_GLSYNC_LEDCOLOR_FLASH_GREEN 5
+
+
+// GL-Sync Port Control (refers one GL-Sync Port) (unique values)
+
+/// Used to configure the RJ54(1) or RJ42(2) port of GL-Sync is as Idle
+#define ADL_GLSYNC_PORTCNTL_NONE 0x00000000
+/// Used to configure the RJ54(1) or RJ42(2) port of GL-Sync is as Output
+#define ADL_GLSYNC_PORTCNTL_OUTPUT 0x00000001
+
+
+// GL-Sync Mode Control (refers one Display/Controller) (bitfields)
+
+/// Used to configure the display to use internal timing (not genlocked)
+#define ADL_GLSYNC_MODECNTL_NONE 0x00000000
+/// Bitfield used to configure the display as genlocked (either as Timing Client or as Timing Server)
+#define ADL_GLSYNC_MODECNTL_GENLOCK 0x00000001
+/// Bitfield used to configure the display as Timing Server
+#define ADL_GLSYNC_MODECNTL_TIMINGSERVER 0x00000002
+
+// GL-Sync Mode Status
+/// Display is currently not genlocked
+#define ADL_GLSYNC_MODECNTL_STATUS_NONE 0x00000000
+/// Display is currently genlocked
+#define ADL_GLSYNC_MODECNTL_STATUS_GENLOCK 0x00000001
+/// Display requires a mode switch
+#define ADL_GLSYNC_MODECNTL_STATUS_SETMODE_REQUIRED 0x00000002
+/// Display is capable of being genlocked
+#define ADL_GLSYNC_MODECNTL_STATUS_GENLOCK_ALLOWED 0x00000004
+
+#define ADL_MAX_GLSYNC_PORTS 8
+#define ADL_MAX_GLSYNC_PORT_LEDS 8
+
+// @}
+
+/// \defgroup define_crossfirestate CrossfireX state of a particular adapter CrossfireX combination
+// @{
+#define ADL_XFIREX_STATE_NOINTERCONNECT ( 1 << 0 ) /* Dongle / cable is missing */
+#define ADL_XFIREX_STATE_DOWNGRADEPIPES ( 1 << 1 ) /* CrossfireX can be enabled if pipes are downgraded */
+#define ADL_XFIREX_STATE_DOWNGRADEMEM ( 1 << 2 ) /* CrossfireX cannot be enabled unless mem downgraded */
+#define ADL_XFIREX_STATE_REVERSERECOMMENDED ( 1 << 3 ) /* Card reversal recommended, CrossfireX cannot be enabled. */
+#define ADL_XFIREX_STATE_3DACTIVE ( 1 << 4 ) /* 3D client is active - CrossfireX cannot be safely enabled */
+#define ADL_XFIREX_STATE_MASTERONSLAVE ( 1 << 5 ) /* Dongle is OK but master is on slave */
+#define ADL_XFIREX_STATE_NODISPLAYCONNECT ( 1 << 6 ) /* No (valid) display connected to master card. */
+#define ADL_XFIREX_STATE_NOPRIMARYVIEW ( 1 << 7 ) /* CrossfireX is enabled but master is not current primary device */
+#define ADL_XFIREX_STATE_DOWNGRADEVISMEM ( 1 << 8 ) /* CrossfireX cannot be enabled unless visible mem downgraded */
+#define ADL_XFIREX_STATE_LESSTHAN8LANE_MASTER ( 1 << 9 ) /* CrossfireX can be enabled however performance not optimal due to <8 lanes */
+#define ADL_XFIREX_STATE_LESSTHAN8LANE_SLAVE ( 1 << 10 ) /* CrossfireX can be enabled however performance not optimal due to <8 lanes */
+#define ADL_XFIREX_STATE_PEERTOPEERFAILED ( 1 << 11 ) /* CrossfireX cannot be enabled due to failed peer to peer test */
+#define ADL_XFIREX_STATE_MEMISDOWNGRADED ( 1 << 16 ) /* Notification that memory is currently downgraded */
+#define ADL_XFIREX_STATE_PIPESDOWNGRADED ( 1 << 17 ) /* Notification that pipes are currently downgraded */
+#define ADL_XFIREX_STATE_XFIREXACTIVE ( 1 << 18 ) /* CrossfireX is enabled on current device */
+#define ADL_XFIREX_STATE_VISMEMISDOWNGRADED ( 1 << 19 ) /* Notification that visible FB memory is currently downgraded */
+#define ADL_XFIREX_STATE_INVALIDINTERCONNECTION ( 1 << 20 ) /* Cannot support current inter-connection configuration */
+#define ADL_XFIREX_STATE_NONP2PMODE ( 1 << 21 ) /* CrossfireX will only work with clients supporting non P2P mode */
+#define ADL_XFIREX_STATE_DOWNGRADEMEMBANKS ( 1 << 22 ) /* CrossfireX cannot be enabled unless memory banks downgraded */
+#define ADL_XFIREX_STATE_MEMBANKSDOWNGRADED ( 1 << 23 ) /* Notification that memory banks are currently downgraded */
+#define ADL_XFIREX_STATE_DUALDISPLAYSALLOWED ( 1 << 24 ) /* Extended desktop or clone mode is allowed. */
+#define ADL_XFIREX_STATE_P2P_APERTURE_MAPPING ( 1 << 25 ) /* P2P mapping was through peer aperture */
+#define ADL_XFIREX_STATE_P2PFLUSH_REQUIRED ADL_XFIREX_STATE_P2P_APERTURE_MAPPING /* For back compatible */
+#define ADL_XFIREX_STATE_XSP_CONNECTED ( 1 << 26 ) /* There is CrossfireX side port connection between GPUs */
+#define ADL_XFIREX_STATE_ENABLE_CF_REBOOT_REQUIRED ( 1 << 27 ) /* System needs a reboot bofore enable CrossfireX */
+#define ADL_XFIREX_STATE_DISABLE_CF_REBOOT_REQUIRED ( 1 << 28 ) /* System needs a reboot after disable CrossfireX */
+#define ADL_XFIREX_STATE_DRV_HANDLE_DOWNGRADE_KEY ( 1 << 29 ) /* Indicate base driver handles the downgrade key updating */
+#define ADL_XFIREX_STATE_CF_RECONFIG_REQUIRED ( 1 << 30 ) /* CrossfireX need to be reconfigured by CCC because of a LDA chain broken */
+#define ADL_XFIREX_STATE_ERRORGETTINGSTATUS ( 1 << 31 ) /* Could not obtain current status */
+// @}
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_DISPLAY_ADJUSTMENT_PIXELFORMAT adjustment values
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+/// \defgroup define_pixel_formats Pixel Formats values
+/// This group defines the various Pixel Formats that a particular digital display can support. \n
+/// Since a display can support multiple formats, these values can be bit-or'ed to indicate the various formats \n
+// @{
+#define ADL_DISPLAY_PIXELFORMAT_UNKNOWN 0
+#define ADL_DISPLAY_PIXELFORMAT_RGB (1 << 0)
+#define ADL_DISPLAY_PIXELFORMAT_YCRCB444 (1 << 1) //Limited range
+#define ADL_DISPLAY_PIXELFORMAT_YCRCB422 (1 << 2) //Limited range
+#define ADL_DISPLAY_PIXELFORMAT_RGB_LIMITED_RANGE (1 << 3)
+#define ADL_DISPLAY_PIXELFORMAT_RGB_FULL_RANGE ADL_DISPLAY_PIXELFORMAT_RGB //Full range
+// @}
+
+/// \defgroup define_contype Connector Type Values
+/// ADLDisplayConfig.ulConnectorType defines
+// @{
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_UNKNOWN 0
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_CV_NONI2C_JP 1
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_CV_JPN 2
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_CV_NA 3
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_CV_NONI2C_NA 4
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_VGA 5
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_DVI_D 6
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_DVI_I 7
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_HDMI_TYPE_A 8
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_HDMI_TYPE_B 9
+#define ADL_DL_DISPLAYCONFIG_CONTYPE_DISPLAYPORT 10
+// @}
+
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_DISPLAY_DISPLAYINFO_ Definitions
+// for ADLDisplayInfo.iDisplayInfoMask and ADLDisplayInfo.iDisplayInfoValue
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+/// \defgroup define_displayinfomask Display Info Mask Values
+// @{
+#define ADL_DISPLAY_DISPLAYINFO_DISPLAYCONNECTED 0x00000001
+#define ADL_DISPLAY_DISPLAYINFO_DISPLAYMAPPED 0x00000002
+#define ADL_DISPLAY_DISPLAYINFO_NONLOCAL 0x00000004
+#define ADL_DISPLAY_DISPLAYINFO_FORCIBLESUPPORTED 0x00000008
+#define ADL_DISPLAY_DISPLAYINFO_GENLOCKSUPPORTED 0x00000010
+#define ADL_DISPLAY_DISPLAYINFO_MULTIVPU_SUPPORTED 0x00000020
+
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_SINGLE 0x00000100
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_CLONE 0x00000200
+
+/// Legacy support for XP
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_2VSTRETCH 0x00000400
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_2HSTRETCH 0x00000800
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_EXTENDED 0x00001000
+
+/// More support manners
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_NSTRETCH1GPU 0x00010000
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_NSTRETCHNGPU 0x00020000
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_RESERVED2 0x00040000
+#define ADL_DISPLAY_DISPLAYINFO_MANNER_SUPPORTED_RESERVED3 0x00080000
+
+/// Projector display type
+#define ADL_DISPLAY_DISPLAYINFO_SHOWTYPE_PROJECTOR 0x00100000
+
+// @}
+
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_ADAPTER_DISPLAY_MANNER_SUPPORTED_ Definitions
+// for ADLAdapterDisplayCap of ADL_Adapter_Display_Cap()
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+/// \defgroup define_adaptermanner Adapter Manner Support Values
+// @{
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_NOTACTIVE 0x00000001
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_SINGLE 0x00000002
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_CLONE 0x00000004
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_NSTRETCH1GPU 0x00000008
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_NSTRETCHNGPU 0x00000010
+
+/// Legacy support for XP
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_2VSTRETCH 0x00000020
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_2HSTRETCH 0x00000040
+#define ADL_ADAPTER_DISPLAYCAP_MANNER_SUPPORTED_EXTENDED 0x00000080
+
+#define ADL_ADAPTER_DISPLAYCAP_PREFERDISPLAY_SUPPORTED 0x00000100
+#define ADL_ADAPTER_DISPLAYCAP_BEZEL_SUPPORTED 0x00000200
+
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_DISPLAY_DISPLAYMAP_MANNER_ Definitions
+// for ADLDisplayMap.iDisplayMapMask and ADLDisplayMap.iDisplayMapValue
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_RESERVED 0x00000001
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_NOTACTIVE 0x00000002
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_SINGLE 0x00000004
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_CLONE 0x00000008
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_RESERVED1 0x00000010 // Removed NSTRETCH
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_HSTRETCH 0x00000020
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_VSTRETCH 0x00000040
+#define ADL_DISPLAY_DISPLAYMAP_MANNER_VLD 0x00000080
+
+// @}
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_DISPLAY_DISPLAYMAP_OPTION_ Definitions
+// for iOption in function ADL_Display_DisplayMapConfig_Get
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+#define ADL_DISPLAY_DISPLAYMAP_OPTION_GPUINFO 0x00000001
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_DISPLAY_DISPLAYTARGET_ Definitions
+// for ADLDisplayTarget.iDisplayTargetMask and ADLDisplayTarget.iDisplayTargetValue
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+#define ADL_DISPLAY_DISPLAYTARGET_PREFERRED 0x00000001
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_DISPLAY_POSSIBLEMAPRESULT_VALID Definitions
+// for ADLPossibleMapResult.iPossibleMapResultMask and ADLPossibleMapResult.iPossibleMapResultValue
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+#define ADL_DISPLAY_POSSIBLEMAPRESULT_VALID 0x00000001
+#define ADL_DISPLAY_POSSIBLEMAPRESULT_BEZELSUPPORTED 0x00000002
+#define ADL_DISPLAY_POSSIBLEMAPRESULT_OVERLAPSUPPORTED 0x00000004
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_DISPLAY_MODE_ Definitions
+// for ADLMode.iModeMask, ADLMode.iModeValue, and ADLMode.iModeFlag
+// (bit-vector)
+///////////////////////////////////////////////////////////////////////////
+/// \defgroup define_displaymode Display Mode Values
+// @{
+#define ADL_DISPLAY_MODE_COLOURFORMAT_565 0x00000001
+#define ADL_DISPLAY_MODE_COLOURFORMAT_8888 0x00000002
+#define ADL_DISPLAY_MODE_ORIENTATION_SUPPORTED_000 0x00000004
+#define ADL_DISPLAY_MODE_ORIENTATION_SUPPORTED_090 0x00000008
+#define ADL_DISPLAY_MODE_ORIENTATION_SUPPORTED_180 0x00000010
+#define ADL_DISPLAY_MODE_ORIENTATION_SUPPORTED_270 0x00000020
+#define ADL_DISPLAY_MODE_REFRESHRATE_ROUNDED 0x00000040
+#define ADL_DISPLAY_MODE_REFRESHRATE_ONLY 0x00000080
+
+#define ADL_DISPLAY_MODE_PROGRESSIVE_FLAG 0
+#define ADL_DISPLAY_MODE_INTERLACED_FLAG 2
+// @}
+
+///////////////////////////////////////////////////////////////////////////
+// ADL_OSMODEINFO Definitions
+///////////////////////////////////////////////////////////////////////////
+/// \defgroup define_osmode OS Mode Values
+// @{
+#define ADL_OSMODEINFOXPOS_DEFAULT -640
+#define ADL_OSMODEINFOYPOS_DEFAULT 0
+#define ADL_OSMODEINFOXRES_DEFAULT 640
+#define ADL_OSMODEINFOYRES_DEFAULT 480
+#define ADL_OSMODEINFOXRES_DEFAULT800 800
+#define ADL_OSMODEINFOYRES_DEFAULT600 600
+#define ADL_OSMODEINFOREFRESHRATE_DEFAULT 60
+#define ADL_OSMODEINFOCOLOURDEPTH_DEFAULT 8
+#define ADL_OSMODEINFOCOLOURDEPTH_DEFAULT16 16
+#define ADL_OSMODEINFOCOLOURDEPTH_DEFAULT24 24
+#define ADL_OSMODEINFOCOLOURDEPTH_DEFAULT32 32
+#define ADL_OSMODEINFOORIENTATION_DEFAULT 0
+#define ADL_OSMODEINFOORIENTATION_DEFAULT_WIN7 DISPLAYCONFIG_ROTATION_FORCE_UINT32
+#define ADL_OSMODEFLAG_DEFAULT 0
+// @}
+
+
+///////////////////////////////////////////////////////////////////////////
+// ADLPurposeCode Enumeration
+///////////////////////////////////////////////////////////////////////////
+enum ADLPurposeCode
+{
+ ADL_PURPOSECODE_NORMAL = 0,
+ ADL_PURPOSECODE_HIDE_MODE_SWITCH,
+ ADL_PURPOSECODE_MODE_SWITCH,
+ ADL_PURPOSECODE_ATTATCH_DEVICE,
+ ADL_PURPOSECODE_DETACH_DEVICE,
+ ADL_PURPOSECODE_SETPRIMARY_DEVICE,
+ ADL_PURPOSECODE_GDI_ROTATION,
+ ADL_PURPOSECODE_ATI_ROTATION,
+};
+///////////////////////////////////////////////////////////////////////////
+// ADLAngle Enumeration
+///////////////////////////////////////////////////////////////////////////
+enum ADLAngle
+{
+ ADL_ANGLE_LANDSCAPE = 0,
+ ADL_ANGLE_ROTATERIGHT = 90,
+ ADL_ANGLE_ROTATE180 = 180,
+ ADL_ANGLE_ROTATELEFT = 270,
+};
+
+///////////////////////////////////////////////////////////////////////////
+// ADLOrientationDataType Enumeration
+///////////////////////////////////////////////////////////////////////////
+enum ADLOrientationDataType
+{
+ ADL_ORIENTATIONTYPE_OSDATATYPE,
+ ADL_ORIENTATIONTYPE_NONOSDATATYPE
+};
+
+///////////////////////////////////////////////////////////////////////////
+// ADLPanningMode Enumeration
+///////////////////////////////////////////////////////////////////////////
+enum ADLPanningMode
+{
+ ADL_PANNINGMODE_NO_PANNING = 0,
+ ADL_PANNINGMODE_AT_LEAST_ONE_NO_PANNING = 1,
+ ADL_PANNINGMODE_ALLOW_PANNING = 2,
+};
+
+///////////////////////////////////////////////////////////////////////////
+// ADLLARGEDESKTOPTYPE Enumeration
+///////////////////////////////////////////////////////////////////////////
+enum ADLLARGEDESKTOPTYPE
+{
+ ADL_LARGEDESKTOPTYPE_NORMALDESKTOP = 0,
+ ADL_LARGEDESKTOPTYPE_PSEUDOLARGEDESKTOP = 1,
+ ADL_LARGEDESKTOPTYPE_VERYLARGEDESKTOP = 2,
+};
+
+// Other Definitions for internal use
+
+// Values for ADL_Display_WriteAndReadI2CRev_Get()
+
+#define ADL_I2C_MAJOR_API_REV 0x00000001
+#define ADL_I2C_MINOR_DEFAULT_API_REV 0x00000000
+#define ADL_I2C_MINOR_OEM_API_REV 0x00000001
+
+// Values for ADL_Display_WriteAndReadI2C()
+#define ADL_DL_I2C_LINE_OEM 0x00000001
+#define ADL_DL_I2C_LINE_OD_CONTROL 0x00000002
+#define ADL_DL_I2C_LINE_OEM2 0x00000003
+#define ADL_DL_I2C_LINE_OEM3 0x00000004
+#define ADL_DL_I2C_LINE_OEM4 0x00000005
+#define ADL_DL_I2C_LINE_OEM5 0x00000006
+#define ADL_DL_I2C_LINE_OEM6 0x00000007
+
+// Max size of I2C data buffer
+#define ADL_DL_I2C_MAXDATASIZE 0x00000040
+#define ADL_DL_I2C_MAXWRITEDATASIZE 0x0000000C
+#define ADL_DL_I2C_MAXADDRESSLENGTH 0x00000006
+#define ADL_DL_I2C_MAXOFFSETLENGTH 0x00000004
+
+
+/// Values for ADLDisplayProperty.iPropertyType
+#define ADL_DL_DISPLAYPROPERTY_TYPE_UNKNOWN 0
+#define ADL_DL_DISPLAYPROPERTY_TYPE_EXPANSIONMODE 1
+#define ADL_DL_DISPLAYPROPERTY_TYPE_USEUNDERSCANSCALING 2
+/// Enables ITC processing for HDMI panels that are capable of the feature
+#define ADL_DL_DISPLAYPROPERTY_TYPE_ITCFLAGENABLE 9
+
+
+/// Values for ADLDisplayContent.iContentType
+/// Certain HDMI panels that support ITC have support for a feature such that, the display on the panel
+/// can be adjusted to optimize the view of the content being displayed, depending on the type of content.
+#define ADL_DL_DISPLAYCONTENT_TYPE_GRAPHICS 1
+#define ADL_DL_DISPLAYCONTENT_TYPE_PHOTO 2
+#define ADL_DL_DISPLAYCONTENT_TYPE_CINEMA 4
+#define ADL_DL_DISPLAYCONTENT_TYPE_GAME 8
+
+
+
+
+
+//values for ADLDisplayProperty.iExpansionMode
+#define ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_CENTER 0
+#define ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_FULLSCREEN 1
+#define ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_ASPECTRATIO 2
+
+//values for ADL_Display_DitherState_Get
+#define ADL_DL_DISPLAY_DITHER_UNKNOWN 0
+#define ADL_DL_DISPLAY_DITHER_DISABLED 1
+#define ADL_DL_DISPLAY_DITHER_ENABLED 2
+
+/// Display Get Cached EDID flag
+#define ADL_MAX_EDIDDATA_SIZE 256 // number of UCHAR
+#define ADL_MAX_OVERRIDEEDID_SIZE 512 // number of UCHAR
+#define ADL_MAX_EDID_EXTENSION_BLOCKS 3
+
+#define ADL_DL_CONTROLLER_OVERLAY_ALPHA 0
+#define ADL_DL_CONTROLLER_OVERLAY_ALPHAPERPIX 1
+
+#define ADL_DL_DISPLAY_DATA_PACKET__INFO_PACKET_RESET 0x00000000
+#define ADL_DL_DISPLAY_DATA_PACKET__INFO_PACKET_SET 0x00000001
+#define ADL_DL_DISPLAY_DATA_PACKET__INFO_PACKET_SCAN 0x00000002
+
+///\defgroup define_display_packet Display Data Packet Types
+// @{
+#define ADL_DL_DISPLAY_DATA_PACKET__TYPE__AVI 0x00000001
+#define ADL_DL_DISPLAY_DATA_PACKET__TYPE__RESERVED 0x00000002
+#define ADL_DL_DISPLAY_DATA_PACKET__TYPE__VENDORINFO 0x00000004
+// @}
+
+// matrix types
+#define ADL_GAMUT_MATRIX_SD 1 // SD matrix i.e. BT601
+#define ADL_GAMUT_MATRIX_HD 2 // HD matrix i.e. BT709
+
+///\defgroup define_clockinfo_flags Clock flags
+/// Used by ADLAdapterODClockInfo.iFlag
+// @{
+#define ADL_DL_CLOCKINFO_FLAG_FULLSCREEN3DONLY 0x00000001
+#define ADL_DL_CLOCKINFO_FLAG_ALWAYSFULLSCREEN3D 0x00000002
+#define ADL_DL_CLOCKINFO_FLAG_VPURECOVERYREDUCED 0x00000004
+#define ADL_DL_CLOCKINFO_FLAG_THERMALPROTECTION 0x00000008
+// @}
+
+// Supported GPUs
+// ADL_Display_PowerXpressActiveGPU_Get()
+#define ADL_DL_POWERXPRESS_GPU_INTEGRATED 1
+#define ADL_DL_POWERXPRESS_GPU_DISCRETE 2
+
+// Possible values for lpOperationResult
+// ADL_Display_PowerXpressActiveGPU_Get()
+#define ADL_DL_POWERXPRESS_SWITCH_RESULT_STARTED 1 // Switch procedure has been started - Windows platform only
+#define ADL_DL_POWERXPRESS_SWITCH_RESULT_DECLINED 2 // Switch procedure cannot be started - All platforms
+#define ADL_DL_POWERXPRESS_SWITCH_RESULT_ALREADY 3 // System already has required status - All platforms
+#define ADL_DL_POWERXPRESS_SWITCH_RESULT_DEFERRED 5 // Switch was deferred and requires an X restart - Linux platform only
+
+// PowerXpress support version
+// ADL_Display_PowerXpressVersion_Get()
+#define ADL_DL_POWERXPRESS_VERSION_MAJOR 2 // Current PowerXpress support version 2.0
+#define ADL_DL_POWERXPRESS_VERSION_MINOR 0
+
+#define ADL_DL_POWERXPRESS_VERSION (((ADL_DL_POWERXPRESS_VERSION_MAJOR) << 16) | ADL_DL_POWERXPRESS_VERSION_MINOR)
+
+//values for ADLThermalControllerInfo.iThermalControllerDomain
+#define ADL_DL_THERMAL_DOMAIN_OTHER 0
+#define ADL_DL_THERMAL_DOMAIN_GPU 1
+
+//values for ADLThermalControllerInfo.iFlags
+#define ADL_DL_THERMAL_FLAG_INTERRUPT 1
+#define ADL_DL_THERMAL_FLAG_FANCONTROL 2
+
+///\defgroup define_fanctrl Fan speed cotrol
+/// Values for ADLFanSpeedInfo.iFlags
+// @{
+#define ADL_DL_FANCTRL_SUPPORTS_PERCENT_READ 1
+#define ADL_DL_FANCTRL_SUPPORTS_PERCENT_WRITE 2
+#define ADL_DL_FANCTRL_SUPPORTS_RPM_READ 4
+#define ADL_DL_FANCTRL_SUPPORTS_RPM_WRITE 8
+// @}
+
+//values for ADLFanSpeedValue.iSpeedType
+#define ADL_DL_FANCTRL_SPEED_TYPE_PERCENT 1
+#define ADL_DL_FANCTRL_SPEED_TYPE_RPM 2
+
+//values for ADLFanSpeedValue.iFlags
+#define ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED 1
+
+// MVPU interfaces
+#define ADL_DL_MAX_MVPU_ADAPTERS 4
+#define MVPU_ADAPTER_0 0x00000001
+#define MVPU_ADAPTER_1 0x00000002
+#define MVPU_ADAPTER_2 0x00000004
+#define MVPU_ADAPTER_3 0x00000008
+#define ADL_DL_MAX_REGISTRY_PATH 256
+
+//values for ADLMVPUStatus.iStatus
+#define ADL_DL_MVPU_STATUS_OFF 0
+#define ADL_DL_MVPU_STATUS_ON 1
+
+// values for ASIC family
+///\defgroup define_Asic_type Detailed asic types
+/// Defines for Adapter ASIC family type
+// @{
+#define ADL_ASIC_UNDEFINED 0
+#define ADL_ASIC_DISCRETE (1 << 0)
+#define ADL_ASIC_INTEGRATED (1 << 1)
+#define ADL_ASIC_FIREGL (1 << 2)
+#define ADL_ASIC_FIREMV (1 << 3)
+#define ADL_ASIC_XGP (1 << 4)
+#define ADL_ASIC_FUSION (1 << 5)
+#define ADL_ASIC_FIRESTREAM (1 << 6)
+// @}
+
+///\defgroup define_detailed_timing_flags Detailed Timimg Flags
+/// Defines for ADLDetailedTiming.sTimingFlags field
+// @{
+#define ADL_DL_TIMINGFLAG_DOUBLE_SCAN 0x0001
+#define ADL_DL_TIMINGFLAG_INTERLACED 0x0002
+#define ADL_DL_TIMINGFLAG_H_SYNC_POLARITY 0x0004
+#define ADL_DL_TIMINGFLAG_V_SYNC_POLARITY 0x0008
+// @}
+
+///\defgroup define_modetiming_standard Timing Standards
+/// Defines for ADLDisplayModeInfo.iTimingStandard field
+// @{
+#define ADL_DL_MODETIMING_STANDARD_CVT 0x00000001 // CVT Standard
+#define ADL_DL_MODETIMING_STANDARD_GTF 0x00000002 // GFT Standard
+#define ADL_DL_MODETIMING_STANDARD_DMT 0x00000004 // DMT Standard
+#define ADL_DL_MODETIMING_STANDARD_CUSTOM 0x00000008 // User-defined standard
+#define ADL_DL_MODETIMING_STANDARD_DRIVER_DEFAULT 0x00000010 // Remove Mode from overriden list
+// @}
+
+// \defgroup define_xserverinfo driver x-server info
+/// These flags are used by ADL_XServerInfo_Get()
+// @
+
+/// Xinerama is active in the x-server, Xinerama extension may report it to be active but it
+/// may not be active in x-server
+#define ADL_XSERVERINFO_XINERAMAACTIVE (1<<0)
+
+/// RandR 1.2 is supported by driver, RandR extension may report version 1.2
+/// but driver may not support it
+#define ADL_XSERVERINFO_RANDR12SUPPORTED (1<<1)
+// @
+
+
+///\defgroup define_eyefinity_constants Eyefinity Definitions
+// @{
+
+#define ADL_CONTROLLERVECTOR_0 1 // ADL_CONTROLLERINDEX_0 = 0, (1 << ADL_CONTROLLERINDEX_0)
+#define ADL_CONTROLLERVECTOR_1 2 // ADL_CONTROLLERINDEX_1 = 1, (1 << ADL_CONTROLLERINDEX_1)
+
+#define ADL_DISPLAY_SLSGRID_ORIENTATION_000 0x00000001
+#define ADL_DISPLAY_SLSGRID_ORIENTATION_090 0x00000002
+#define ADL_DISPLAY_SLSGRID_ORIENTATION_180 0x00000004
+#define ADL_DISPLAY_SLSGRID_ORIENTATION_270 0x00000008
+#define ADL_DISPLAY_SLSGRID_CAP_OPTION_RELATIVETO_LANDSCAPE 0x00000001
+#define ADL_DISPLAY_SLSGRID_CAP_OPTION_RELATIVETO_CURRENTANGLE 0x00000002
+#define ADL_DISPLAY_SLSGRID_PORTAIT_MODE 0x00000004
+
+
+#define ADL_DISPLAY_SLSMAPCONFIG_GET_OPTION_RELATIVETO_LANDSCAPE 0x00000001
+#define ADL_DISPLAY_SLSMAPCONFIG_GET_OPTION_RELATIVETO_CURRENTANGLE 0x00000002
+
+#define ADL_DISPLAY_SLSMAPCONFIG_CREATE_OPTION_RELATIVETO_LANDSCAPE 0x00000001
+#define ADL_DISPLAY_SLSMAPCONFIG_CREATE_OPTION_RELATIVETO_CURRENTANGLE 0x00000002
+
+#define ADL_DISPLAY_SLSMAPCONFIG_REARRANGE_OPTION_RELATIVETO_LANDSCAPE 0x00000001
+#define ADL_DISPLAY_SLSMAPCONFIG_REARRANGE_OPTION_RELATIVETO_CURRENTANGLE 0x00000002
+
+
+#define ADL_DISPLAY_SLSGRID_RELATIVETO_LANDSCAPE 0x00000010
+#define ADL_DISPLAY_SLSGRID_RELATIVETO_CURRENTANGLE 0x00000020
+
+
+/// The bit mask identifies displays is currently in bezel mode.
+#define ADL_DISPLAY_SLSMAP_BEZELMODE 0x00000010
+/// The bit mask identifies displays from this map is arranged.
+#define ADL_DISPLAY_SLSMAP_DISPLAYARRANGED 0x00000002
+/// The bit mask identifies this map is currently in used for the current adapter.
+#define ADL_DISPLAY_SLSMAP_CURRENTCONFIG 0x00000004
+
+ ///For onlay active SLS map info
+#define ADL_DISPLAY_SLSMAPINDEXLIST_OPTION_ACTIVE 0x00000001
+
+///For Bezel
+#define ADL_DISPLAY_BEZELOFFSET_STEPBYSTEPSET 0x00000004
+#define ADL_DISPLAY_BEZELOFFSET_COMMIT 0x00000008
+
+// @}
+
+///\defgroup define_powerxpress_constants PowerXpress Definitions
+// @{
+
+/// The bit mask identifies PX caps for ADLPXConfigCaps.iPXConfigCapMask and ADLPXConfigCaps.iPXConfigCapValue
+#define ADL_PX_CONFIGCAPS_SPLASHSCREEN_SUPPORT 0x0001
+#define ADL_PX_CONFIGCAPS_CF_SUPPORT 0x0002
+#define ADL_PX_CONFIGCAPS_MUXLESS 0x0004
+#define ADL_PX_CONFIGCAPS_PROFILE_COMPLIANT 0x0008
+#define ADL_PX_CONFIGCAPS_NON_AMD_DRIVEN_DISPLAYS 0x0010
+#define ADL_PX_CONFIGCAPS_FIXED_SUPPORT 0x0020
+#define ADL_PX_CONFIGCAPS_DYNAMIC_SUPPORT 0x0040
+#define ADL_PX_CONFIGCAPS_HIDE_AUTO_SWITCH 0x0080
+
+/// The bit mask identifies PX schemes for ADLPXSchemeRange
+#define ADL_PX_SCHEMEMASK_FIXED 0x0001
+#define ADL_PX_SCHEMEMASK_DYNAMIC 0x0002
+
+/// PX Schemes
+typedef enum _ADLPXScheme
+{
+ ADL_PX_SCHEME_INVALID = 0,
+ ADL_PX_SCHEME_FIXED = ADL_PX_SCHEMEMASK_FIXED,
+ ADL_PX_SCHEME_DYNAMIC = ADL_PX_SCHEMEMASK_DYNAMIC,
+}ADLPXScheme;
+
+/// Just keep the old definitions for compatibility, need to be removed later
+typedef enum PXScheme
+{
+ PX_SCHEME_INVALID = 0,
+ PX_SCHEME_FIXED = 1,
+ PX_SCHEME_DYNAMIC = 2
+} PXScheme;
+
+
+// @}
+
+///\defgroup define_appprofiles For Application Profiles
+// @{
+
+#define ADL_APP_PROFILE_FILENAME_LENGTH 64
+#define ADL_APP_PROFILE_TIMESTAMP_LENGTH 32
+#define ADL_APP_PROFILE_VERSION_LENGTH 32
+#define ADL_APP_PROFILE_PROPERTY_LENGTH 64
+
+enum ApplicationListType
+{
+ ADL_PX40_MRU,
+ ADL_PX40_MISSED,
+ ADL_PX40_DISCRETE,
+ ADL_PX40_INTEGRATED,
+
+ ADL_PX40_TOTAL,
+};
+
+typedef enum _ADLProfilePropertyType
+{
+ ADL_PROFILEPROPERTY_TYPE_BINARY = 0,
+ ADL_PROFILEPROPERTY_TYPE_BOOLEAN,
+ ADL_PROFILEPROPERTY_TYPE_DWORD,
+ ADL_PROFILEPROPERTY_TYPE_QWORD,
+ ADL_PROFILEPROPERTY_TYPE_ENUMERATED,
+ ADL_PROFILEPROPERTY_TYPE_STRING,
+}ADLProfilePropertyType;
+
+// @}
+
+///\defgroup define_dp12 For Display Port 1.2
+// @{
+
+/// Maximum Relative Address Link
+#define ADL_MAX_RAD_LINK_COUNT 15
+
+// @}
+
+///\defgroup defines_gamutspace Driver Supported Gamut Space
+// @{
+
+/// The flags desribes that gamut is related to source or to destination and to overlay or to graphics
+#define ADL_GAMUT_REFERENCE_SOURCE (1 << 0)
+#define ADL_GAMUT_GAMUT_VIDEO_CONTENT (1 << 1)
+
+/// The flags are used to describe the source of gamut and how read information from struct ADLGamutData
+#define ADL_CUSTOM_WHITE_POINT (1 << 0)
+#define ADL_CUSTOM_GAMUT (1 << 1)
+
+/// The define means the predefined gamut values .
+///Driver uses to find entry in the table and apply appropriate gamut space.
+#define ADL_GAMUT_SPACE_CCIR_709 (1 << 0)
+#define ADL_GAMUT_SPACE_CCIR_601 (1 << 1)
+#define ADL_GAMUT_SPACE_ADOBE_RGB (1 << 2)
+#define ADL_GAMUT_SPACE_CIE_RGB (1 << 3)
+#define ADL_GAMUT_SPACE_CUSTOM (1 << 4)
+
+/// Predefine white point values are structed similar to gamut .
+#define ADL_WHITE_POINT_5000K (1 << 0)
+#define ADL_WHITE_POINT_6500K (1 << 1)
+#define ADL_WHITE_POINT_7500K (1 << 2)
+#define ADL_WHITE_POINT_9300K (1 << 3)
+#define ADL_WHITE_POINT_CUSTOM (1 << 4)
+
+///gamut and white point coordinates are from 0.0 -1.0 and divider is used to find the real value .
+/// X float = X int /divider
+#define ADL_GAMUT_WHITEPOINT_DIVIDER 10000
+
+///gamma a0 coefficient uses the following divider:
+#define ADL_REGAMMA_COEFFICIENT_A0_DIVIDER 10000000
+///gamma a1 ,a2,a3 coefficients use the following divider:
+#define ADL_REGAMMA_COEFFICIENT_A1A2A3_DIVIDER 1000
+
+///describes whether the coefficients are from EDID or custom user values.
+#define ADL_EDID_REGAMMA_COEFFICIENTS (1 << 0)
+///Used for struct ADLRegamma.Feature if set use gamma ramp , if missing use regamma coefficents
+#define ADL_USE_GAMMA_RAMP (1 << 4)
+
+// @}
+
+/// \defgroup define_ddcinfo_pixelformats DDCInfo Pixel Formats
+// @{
+/// defines for iPanelPixelFormat in struct ADLDDCInfo2
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB656 0x00000001L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB666 0x00000002L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB888 0x00000004L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB101010 0x00000008L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB161616 0x00000010L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB_RESERVED1 0x00000020L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB_RESERVED2 0x00000040L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_RGB_RESERVED3 0x00000080L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_XRGB_BIAS101010 0x00000100L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_YCBCR444_8BPCC 0x00000200L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_YCBCR444_10BPCC 0x00000400L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_YCBCR444_12BPCC 0x00000800L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_YCBCR422_8BPCC 0x00001000L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_YCBCR422_10BPCC 0x00002000L
+#define ADL_DISPLAY_DDCINFO_PIXEL_FORMAT_YCBCR422_12BPCC 0x00004000L
+// @}
+
+
+
+/// \defgroup define_dbd_state Deep Bit Depth
+// @{
+
+/// defines for ADL_Workstation_DeepBitDepth_Get and ADL_Workstation_DeepBitDepth_Set functions
+// This value indicates that the deep bit depth state is forced off
+#define ADL_DEEPBITDEPTH_FORCEOFF 0
+/// This value indicates that the deep bit depth state is set to auto, the driver will automatically enable the
+/// appropriate deep bit depth state depending on what connected display supports.
+#define ADL_DEEPBITDEPTH_10BPP_AUTO 1
+/// This value indicates that the deep bit depth state is forced on to 10 bits per pixel, this is regardless if the display
+/// supports 10 bpp.
+#define ADL_DEEPBITDEPTH_10BPP_FORCEON 2
+
+/// defines for ADLAdapterConfigMemory of ADL_Adapter_ConfigMemory_Get
+/// If this bit is set, it indicates that the Deep Bit Depth pixel is set on the display
+#define ADL_ADAPTER_CONFIGMEMORY_DBD (1 << 0)
+/// If this bit is set, it indicates that the display is rotated (90, 180 or 270)
+#define ADL_ADAPTER_CONFIGMEMORY_ROTATE (1 << 1)
+/// If this bit is set, it indicates that passive stereo is set on the display
+#define ADL_ADAPTER_CONFIGMEMORY_STEREO_PASSIVE (1 << 2)
+/// If this bit is set, it indicates that the active stereo is set on the display
+#define ADL_ADAPTER_CONFIGMEMORY_STEREO_ACTIVE (1 << 3)
+/// If this bit is set, it indicates that the tear free vsync is set on the display
+#define ADL_ADAPTER_CONFIGMEMORY_ENHANCEDVSYNC (1 << 4)
+#define ADL_ADAPTER_CONFIGMEMORY_TEARFREEVSYNC (1 << 4)
+/// @}
+
+/// \defgroup define_adl_validmemoryrequiredfields Memory Type
+/// @{
+
+/// This group defines memory types in ADLMemoryRequired struct \n
+/// Indicates that this is the visible memory
+#define ADL_MEMORYREQTYPE_VISIBLE (1 << 0)
+/// Indicates that this is the invisible memory.
+#define ADL_MEMORYREQTYPE_INVISIBLE (1 << 1)
+/// Indicates that this is amount of visible memory per GPU that should be reserved for all other allocations.
+#define ADL_MEMORYREQTYPE_GPURESERVEDVISIBLE (1 << 2)
+/// @}
+
+/// \defgroup define_adapter_tear_free_status
+/// Used in ADL_Adapter_TEAR_FREE_Set and ADL_Adapter_TFD_Get functions to indicate the tear free
+/// desktop status.
+/// @{
+/// Tear free desktop is enabled.
+#define ADL_ADAPTER_TEAR_FREE_ON 1
+/// Tear free desktop can't be enabled due to a lack of graphic adapter memory.
+#define ADL_ADAPTER_TEAR_FREE_NOTENOUGHMEM -1
+/// Tear free desktop can't be enabled due to quad buffer stereo being enabled.
+#define ADL_ADAPTER_TEAR_FREE_OFF_ERR_QUADBUFFERSTEREO -2
+/// Tear free desktop is disabled.
+#define ADL_ADAPTER_TEAR_FREE_OFF 0
+/// @}
+
+/// \defgroup define_adapter_crossdisplay_platforminfo
+/// Used in ADL_Adapter_CrossDisplayPlatformInfo_Get function to indicate the Crossdisplay platform info.
+/// @{
+/// CROSSDISPLAY platform.
+#define ADL_CROSSDISPLAY_PLATFORM (1 << 0)
+/// CROSSDISPLAY platform for Lasso station.
+#define ADL_CROSSDISPLAY_PLATFORM_LASSO (1 << 1)
+/// CROSSDISPLAY platform for docking station.
+#define ADL_CROSSDISPLAY_PLATFORM_DOCKSTATION (1 << 2)
+/// @}
+
+/// \defgroup define_adapter_crossdisplay_option
+/// Used in ADL_Adapter_CrossdisplayInfoX2_Set function to indicate cross display options.
+/// @{
+/// Checking if 3D application is runnning. If yes, not to do switch, return ADL_OK_WAIT; otherwise do switch.
+#define ADL_CROSSDISPLAY_OPTION_NONE 0
+/// Force switching without checking for running 3D applications
+#define ADL_CROSSDISPLAY_OPTION_FORCESWITCH (1 << 0)
+/// @}
+
+/// \defgroup define_adapter_states Adapter Capabilities
+/// These defines the capabilities supported by an adapter. It is used by \ref ADL_Adapter_ConfigureState_Get
+/// @{
+/// Indicates that the adapter is headless (i.e. no displays can be connected to it)
+#define ADL_ADAPTERCONFIGSTATE_HEADLESS ( 1 << 2 )
+/// Indicates that the adapter is configured to define the main rendering capabilities. For example, adapters
+/// in Crossfire(TM) configuration, this bit would only be set on the adapter driving the display(s).
+#define ADL_ADAPTERCONFIGSTATE_REQUISITE_RENDER ( 1 << 0 )
+/// Indicates that the adapter is configured to be used to unload some of the rendering work for a particular
+/// requisite rendering adapter. For eample, for adapters in a Crossfire configuration, this bit would be set
+/// on all adapters that are currently not driving the display(s)
+#define ADL_ADAPTERCONFIGSTATE_ANCILLARY_RENDER ( 1 << 1 )
+/// @}
+
+/// \defgroup define_controllermode_ulModifiers
+/// These defines the detailed actions supported by set viewport. It is used by \ref ADL_Display_ViewPort_Set
+/// @{
+/// Indicate that the viewport set will change the view position
+#define ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_POSITION 0x00000001
+/// Indicate that the viewport set will change the view PanLock
+#define ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_PANLOCK 0x00000002
+/// Indicate that the viewport set will change the view size
+#define ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_SIZE 0x00000008
+/// @}
+
+
+// End Bracket for Constants and Definitions. Add new groups ABOVE this line!
+
+// @}
+#endif /* ADL_DEFINES_H_ */
+
+
--- /dev/null
+///
+/// Copyright (c) 2008 - 2009 Advanced Micro Devices, Inc.
+
+/// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
+/// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+/// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
+
+/// \file adl_sdk.h
+/// \brief Contains the definition of the Memory Allocation Callback.\n <b>Included in ADL SDK</b>
+///
+/// \n\n
+/// This file contains the definition of the Memory Allocation Callback.\n
+/// It also includes definitions of the respective structures and constants.\n
+/// <b> This is the only header file to be included in a C/C++ project using ADL </b>
+
+#ifndef ADL_SDK_H_
+#define ADL_SDK_H_
+
+#include "adl_structures.h"
+
+#if !defined(__WINDOWS__)
+#define __stdcall
+#endif /* (LINUX) */
+
+/// Memory Allocation Call back
+typedef void* ( __stdcall *ADL_MAIN_MALLOC_CALLBACK )( int );
+
+
+#endif /* ADL_SDK_H_ */
--- /dev/null
+///
+/// Copyright (c) 2008 - 2012 Advanced Micro Devices, Inc.
+
+/// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
+/// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+/// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
+
+/// \file adl_structures.h
+///\brief This file contains the structure declarations that are used by the public ADL interfaces for \ALL platforms.\n <b>Included in ADL SDK</b>
+///
+/// All data structures used in AMD Display Library (ADL) public interfaces should be defined in this header file.
+///
+
+#ifndef ADL_STRUCTURES_H_
+#define ADL_STRUCTURES_H_
+
+#include "adl_defines.h"
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the graphics adapter.
+///
+/// This structure is used to store various information about the graphics adapter. This
+/// information can be returned to the user. Alternatively, it can be used to access various driver calls to set
+/// or fetch various settings upon the user's request.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct AdapterInfo
+{
+/// \ALL_STRUCT_MEM
+
+/// Size of the structure.
+ int iSize;
+/// The ADL index handle. One GPU may be associated with one or two index handles
+ int iAdapterIndex;
+/// The unique device ID associated with this adapter.
+ char strUDID[ADL_MAX_PATH];
+/// The BUS number associated with this adapter.
+ int iBusNumber;
+/// The driver number associated with this adapter.
+ int iDeviceNumber;
+/// The function number.
+ int iFunctionNumber;
+/// The vendor ID associated with this adapter.
+ int iVendorID;
+/// Adapter name.
+ char strAdapterName[ADL_MAX_PATH];
+/// Display name. For example, "\\Display0" for Windows or ":0:0" for Linux.
+ char strDisplayName[ADL_MAX_PATH];
+/// Present or not; 1 if present and 0 if not present.It the logical adapter is present, the display name such as \\.\Display1 can be found from OS
+ int iPresent;
+// @}
+
+#if defined (_WIN32) || defined (_WIN64)
+/// \WIN_STRUCT_MEM
+
+/// Exist or not; 1 is exist and 0 is not present.
+ int iExist;
+/// Driver registry path.
+ char strDriverPath[ADL_MAX_PATH];
+/// Driver registry path Ext for.
+ char strDriverPathExt[ADL_MAX_PATH];
+/// PNP string from Windows.
+ char strPNPString[ADL_MAX_PATH];
+/// It is generated from EnumDisplayDevices.
+ int iOSDisplayIndex;
+// @}
+#endif /* (_WIN32) || (_WIN64) */
+
+#if defined (LINUX)
+/// \LNX_STRUCT_MEM
+
+/// Internal X screen number from GPUMapInfo (DEPRICATED use XScreenInfo)
+ int iXScreenNum;
+/// Internal driver index from GPUMapInfo
+ int iDrvIndex;
+/// \deprecated Internal x config file screen identifier name. Use XScreenInfo instead.
+ char strXScreenConfigName[ADL_MAX_PATH];
+
+// @}
+#endif /* (LINUX) */
+} AdapterInfo, *LPAdapterInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the Linux X screen information.
+///
+/// This structure is used to store the current screen number and xorg.conf ID name assoicated with an adapter index.
+/// This structure is updated during ADL_Main_Control_Refresh or ADL_ScreenInfo_Update.
+/// Note: This structure should be used in place of iXScreenNum and strXScreenConfigName in AdapterInfo as they will be
+/// deprecated.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+#if defined (LINUX)
+typedef struct XScreenInfo
+{
+/// Internal X screen number from GPUMapInfo.
+ int iXScreenNum;
+/// Internal x config file screen identifier name.
+ char strXScreenConfigName[ADL_MAX_PATH];
+} XScreenInfo, *LPXScreenInfo;
+#endif /* (LINUX) */
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the ASIC memory.
+///
+/// This structure is used to store various information about the ASIC memory. This
+/// information can be returned to the user.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLMemoryInfo
+{
+/// Memory size in bytes.
+ long long iMemorySize;
+/// Memory type in string.
+ char strMemoryType[ADL_MAX_PATH];
+/// Memory bandwidth in Mbytes/s.
+ long long iMemoryBandwidth;
+} ADLMemoryInfo, *LPADLMemoryInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about memory required by type
+///
+/// This structure is returned by ADL_Adapter_ConfigMemory_Get, which given a desktop and display configuration
+/// will return the Memory used.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLMemoryRequired
+{
+ long long iMemoryReq; /// Memory in bytes required
+ int iType; /// Type of Memory \ref define_adl_validmemoryrequiredfields
+ int iDisplayFeatureValue; /// Display features \ref define_adl_visiblememoryfeatures that are using this type of memory
+} ADLMemoryRequired, *LPADLMemoryRequired;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the features associated with a display
+///
+/// This structure is a parameter to ADL_Adapter_ConfigMemory_Get, which given a desktop and display configuration
+/// will return the Memory used.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLMemoryDisplayFeatures
+{
+ int iDisplayIndex; /// ADL Display index
+ int iDisplayFeatureValue; /// features that the display is using \ref define_adl_visiblememoryfeatures
+} ADLMemoryDisplayFeatures, *LPADLMemoryDisplayFeatures;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing DDC information.
+///
+/// This structure is used to store various DDC information that can be returned to the user.
+/// Note that all fields of type int are actually defined as unsigned int types within the driver.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDDCInfo
+{
+/// Size of the structure
+ int ulSize;
+/// Indicates whether the attached display supports DDC. If this field is zero on return, no other DDC information fields will be used.
+ int ulSupportsDDC;
+/// Returns the manufacturer ID of the display device. Should be zeroed if this information is not available.
+ int ulManufacturerID;
+/// Returns the product ID of the display device. Should be zeroed if this information is not available.
+ int ulProductID;
+/// Returns the name of the display device. Should be zeroed if this information is not available.
+ char cDisplayName[ADL_MAX_DISPLAY_NAME];
+/// Returns the maximum Horizontal supported resolution. Should be zeroed if this information is not available.
+ int ulMaxHResolution;
+/// Returns the maximum Vertical supported resolution. Should be zeroed if this information is not available.
+ int ulMaxVResolution;
+/// Returns the maximum supported refresh rate. Should be zeroed if this information is not available.
+ int ulMaxRefresh;
+/// Returns the display device preferred timing mode's horizontal resolution.
+ int ulPTMCx;
+/// Returns the display device preferred timing mode's vertical resolution.
+ int ulPTMCy;
+/// Returns the display device preferred timing mode's refresh rate.
+ int ulPTMRefreshRate;
+/// Return EDID flags.
+ int ulDDCInfoFlag;
+} ADLDDCInfo, *LPADLDDCInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing DDC information.
+///
+/// This structure is used to store various DDC information that can be returned to the user.
+/// Note that all fields of type int are actually defined as unsigned int types within the driver.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDDCInfo2
+{
+/// Size of the structure
+ int ulSize;
+/// Indicates whether the attached display supports DDC. If this field is zero on return, no other DDC
+/// information fields will be used.
+ int ulSupportsDDC;
+/// Returns the manufacturer ID of the display device. Should be zeroed if this information is not available.
+ int ulManufacturerID;
+/// Returns the product ID of the display device. Should be zeroed if this information is not available.
+ int ulProductID;
+/// Returns the name of the display device. Should be zeroed if this information is not available.
+ char cDisplayName[ADL_MAX_DISPLAY_NAME];
+/// Returns the maximum Horizontal supported resolution. Should be zeroed if this information is not available.
+ int ulMaxHResolution;
+/// Returns the maximum Vertical supported resolution. Should be zeroed if this information is not available.
+ int ulMaxVResolution;
+/// Returns the maximum supported refresh rate. Should be zeroed if this information is not available.
+ int ulMaxRefresh;
+/// Returns the display device preferred timing mode's horizontal resolution.
+ int ulPTMCx;
+/// Returns the display device preferred timing mode's vertical resolution.
+ int ulPTMCy;
+/// Returns the display device preferred timing mode's refresh rate.
+ int ulPTMRefreshRate;
+/// Return EDID flags.
+ int ulDDCInfoFlag;
+// Returns 1 if the display supported packed pixel, 0 otherwise
+ int bPackedPixelSupported;
+// Returns the Pixel formats the display supports \ref define_ddcinfo_pixelformats
+ int iPanelPixelFormat;
+/// Return EDID serial ID.
+ int ulSerialID;
+// Reserved for future use
+ int iReserved[26];
+} ADLDDCInfo2, *LPADLDDCInfo2;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information controller Gamma settings.
+///
+/// This structure is used to store the red, green and blue color channel information for the.
+/// controller gamma setting. This information is returned by ADL, and it can also be used to
+/// set the controller gamma setting.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGamma
+{
+/// Red color channel gamma value.
+ float fRed;
+/// Green color channel gamma value.
+ float fGreen;
+/// Blue color channel gamma value.
+ float fBlue;
+} ADLGamma, *LPADLGamma;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about component video custom modes.
+///
+/// This structure is used to store the component video custom mode.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLCustomMode
+{
+/// Custom mode flags. They are returned by the ADL driver.
+ int iFlags;
+/// Custom mode width.
+ int iModeWidth;
+/// Custom mode height.
+ int iModeHeight;
+/// Custom mode base width.
+ int iBaseModeWidth;
+/// Custom mode base height.
+ int iBaseModeHeight;
+/// Custom mode refresh rate.
+ int iRefreshRate;
+} ADLCustomMode, *LPADLCustomMode;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing Clock information for OD5 calls.
+///
+/// This structure is used to retrieve clock information for OD5 calls.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGetClocksOUT
+{
+ long ulHighCoreClock;
+ long ulHighMemoryClock;
+ long ulHighVddc;
+ long ulCoreMin;
+ long ulCoreMax;
+ long ulMemoryMin;
+ long ulMemoryMax;
+ long ulActivityPercent;
+ long ulCurrentCoreClock;
+ long ulCurrentMemoryClock;
+ long ulReserved;
+} ADLGetClocksOUT;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing HDTV information for display calls.
+///
+/// This structure is used to retrieve HDTV information information for display calls.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayConfig
+{
+/// Size of the structure
+ long ulSize;
+/// HDTV connector type.
+ long ulConnectorType;
+/// HDTV capabilities.
+ long ulDeviceData;
+/// Overridden HDTV capabilities.
+ long ulOverridedDeviceData;
+/// Reserved field
+ long ulReserved;
+} ADLDisplayConfig;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display device.
+///
+/// This structure is used to store display device information
+/// such as display index, type, name, connection status, mapped adapter and controller indexes,
+/// whether or not multiple VPUs are supported, local display connections or not (through Lasso), etc.
+/// This information can be returned to the user. Alternatively, it can be used to access various driver calls to set
+/// or fetch various display device related settings upon the user's request.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayID
+{
+/// The logical display index belonging to this adapter.
+ int iDisplayLogicalIndex;
+
+///\brief The physical display index.
+/// For example, display index 2 from adapter 2 can be used by current adapter 1.\n
+/// So current adapter may enumerate this adapter as logical display 7 but the physical display
+/// index is still 2.
+ int iDisplayPhysicalIndex;
+
+/// The persistent logical adapter index for the display.
+ int iDisplayLogicalAdapterIndex;
+
+///\brief The persistent physical adapter index for the display.
+/// It can be the current adapter or a non-local adapter. \n
+/// If this adapter index is different than the current adapter,
+/// the Display Non Local flag is set inside DisplayInfoValue.
+ int iDisplayPhysicalAdapterIndex;
+} ADLDisplayID, *LPADLDisplayID;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display device.
+///
+/// This structure is used to store various information about the display device. This
+/// information can be returned to the user, or used to access various driver calls to set
+/// or fetch various display-device-related settings upon the user's request
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayInfo
+{
+/// The DisplayID structure
+ ADLDisplayID displayID;
+
+///\deprecated The controller index to which the display is mapped.\n Will not be used in the future\n
+ int iDisplayControllerIndex;
+
+/// The display's EDID name.
+ char strDisplayName[ADL_MAX_PATH];
+
+/// The display's manufacturer name.
+ char strDisplayManufacturerName[ADL_MAX_PATH];
+
+/// The Display type. For example: CRT, TV, CV, DFP.
+ int iDisplayType;
+
+/// The display output type. For example: HDMI, SVIDEO, COMPONMNET VIDEO.
+ int iDisplayOutputType;
+
+/// The connector type for the device.
+ int iDisplayConnector;
+
+///\brief The bit mask identifies the number of bits ADLDisplayInfo is currently using. \n
+/// It will be the sum all the bit definitions in ADL_DISPLAY_DISPLAYINFO_xxx.
+ int iDisplayInfoMask;
+
+/// The bit mask identifies the display status. \ref define_displayinfomask
+ int iDisplayInfoValue;
+} ADLDisplayInfo, *LPADLDisplayInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display port MST device.
+///
+/// This structure is used to store various MST information about the display port device. This
+/// information can be returned to the user, or used to access various driver calls to
+/// fetch various display-device-related settings upon the user's request
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayDPMSTInfo
+{
+ /// The ADLDisplayID structure
+ ADLDisplayID displayID;
+
+ /// total bandwidth available on the DP connector
+ int iTotalAvailableBandwidthInMpbs;
+ /// bandwidth allocated to this display
+ int iAllocatedBandwidthInMbps;
+
+ // info from DAL DpMstSinkInfo
+ /// string identifier for the display
+ char strGlobalUniqueIdentifier[ADL_MAX_PATH];
+
+ /// The link count of relative address, rad[0] upto rad[linkCount] are valid
+ int radLinkCount;
+ /// The physical connector ID, used to identify the physical DP port
+ int iPhysicalConnectorID;
+
+ /// Relative address, address scheme starts from source side
+ char rad[ADL_MAX_RAD_LINK_COUNT];
+} ADLDisplayDPMSTInfo, *LPADLDisplayDPMSTInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing the display mode definition used per controller.
+///
+/// This structure is used to store the display mode definition used per controller.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayMode
+{
+/// Vertical resolution (in pixels).
+ int iPelsHeight;
+/// Horizontal resolution (in pixels).
+ int iPelsWidth;
+/// Color depth.
+ int iBitsPerPel;
+/// Refresh rate.
+ int iDisplayFrequency;
+} ADLDisplayMode;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing detailed timing parameters.
+///
+/// This structure is used to store the detailed timing parameters.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDetailedTiming
+{
+/// Size of the structure.
+ int iSize;
+/// Timing flags. \ref define_detailed_timing_flags
+ short sTimingFlags;
+/// Total width (columns).
+ short sHTotal;
+/// Displayed width.
+ short sHDisplay;
+/// Horizontal sync signal offset.
+ short sHSyncStart;
+/// Horizontal sync signal width.
+ short sHSyncWidth;
+/// Total height (rows).
+ short sVTotal;
+/// Displayed height.
+ short sVDisplay;
+/// Vertical sync signal offset.
+ short sVSyncStart;
+/// Vertical sync signal width.
+ short sVSyncWidth;
+/// Pixel clock value.
+ short sPixelClock;
+/// Overscan right.
+ short sHOverscanRight;
+/// Overscan left.
+ short sHOverscanLeft;
+/// Overscan bottom.
+ short sVOverscanBottom;
+/// Overscan top.
+ short sVOverscanTop;
+ short sOverscan8B;
+ short sOverscanGR;
+} ADLDetailedTiming;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing display mode information.
+///
+/// This structure is used to store the display mode information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayModeInfo
+{
+/// Timing standard of the current mode. \ref define_modetiming_standard
+ int iTimingStandard;
+/// Applicable timing standards for the current mode.
+ int iPossibleStandard;
+/// Refresh rate factor.
+ int iRefreshRate;
+/// Num of pixels in a row.
+ int iPelsWidth;
+/// Num of pixels in a column.
+ int iPelsHeight;
+/// Detailed timing parameters.
+ ADLDetailedTiming sDetailedTiming;
+} ADLDisplayModeInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about display property.
+///
+/// This structure is used to store the display property for the current adapter.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayProperty
+{
+/// Must be set to sizeof the structure
+ int iSize;
+/// Must be set to \ref ADL_DL_DISPLAYPROPERTY_TYPE_EXPANSIONMODE or \ref ADL_DL_DISPLAYPROPERTY_TYPE_USEUNDERSCANSCALING
+ int iPropertyType;
+/// Get or Set \ref ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_CENTER or \ref ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_FULLSCREEN or \ref ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_ASPECTRATIO or \ref ADL_DL_DISPLAYPROPERTY_TYPE_ITCFLAGENABLE
+ int iExpansionMode;
+/// Display Property supported? 1: Supported, 0: Not supported
+ int iSupport;
+/// Display Property current value
+ int iCurrent;
+/// Display Property Default value
+ int iDefault;
+} ADLDisplayProperty;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about Clock.
+///
+/// This structure is used to store the clock information for the current adapter
+/// such as core clock and memory clock info.
+///\nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLClockInfo
+{
+/// Core clock in 10 KHz.
+ int iCoreClock;
+/// Memory clock in 10 KHz.
+ int iMemoryClock;
+} ADLClockInfo, *LPADLClockInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about I2C.
+///
+/// This structure is used to store the I2C information for the current adapter.
+/// This structure is used by the ADL_Display_WriteAndReadI2C() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLI2C
+{
+/// Size of the structure
+ int iSize;
+/// Numerical value representing hardware I2C.
+ int iLine;
+/// The 7-bit I2C slave device address, shifted one bit to the left.
+ int iAddress;
+/// The offset of the data from the address.
+ int iOffset;
+/// Read from or write to slave device. \ref ADL_DL_I2C_ACTIONREAD or \ref ADL_DL_I2C_ACTIONWRITE or \ref ADL_DL_I2C_ACTIONREAD_REPEATEDSTART
+ int iAction;
+/// I2C clock speed in KHz.
+ int iSpeed;
+/// A numerical value representing the number of bytes to be sent or received on the I2C bus.
+ int iDataSize;
+/// Address of the characters which are to be sent or received on the I2C bus.
+ char *pcData;
+} ADLI2C;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about EDID data.
+///
+/// This structure is used to store the information about EDID data for the adapter.
+/// This structure is used by the ADL_Display_EdidData_Get() and ADL_Display_EdidData_Set() functions.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayEDIDData
+{
+/// Size of the structure
+ int iSize;
+/// Set to 0
+ int iFlag;
+ /// Size of cEDIDData. Set by ADL_Display_EdidData_Get() upon return
+ int iEDIDSize;
+/// 0, 1 or 2. If set to 3 or above an error ADL_ERR_INVALID_PARAM is generated
+ int iBlockIndex;
+/// EDID data
+ char cEDIDData[ADL_MAX_EDIDDATA_SIZE];
+/// Reserved
+ int iReserved[4];
+}ADLDisplayEDIDData;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about input of controller overlay adjustment.
+///
+/// This structure is used to store the information about input of controller overlay adjustment for the adapter.
+/// This structure is used by the ADL_Display_ControllerOverlayAdjustmentCaps_Get, ADL_Display_ControllerOverlayAdjustmentData_Get, and
+/// ADL_Display_ControllerOverlayAdjustmentData_Set() functions.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLControllerOverlayInput
+{
+/// Should be set to the sizeof the structure
+ int iSize;
+///\ref ADL_DL_CONTROLLER_OVERLAY_ALPHA or \ref ADL_DL_CONTROLLER_OVERLAY_ALPHAPERPIX
+ int iOverlayAdjust;
+/// Data.
+ int iValue;
+/// Should be 0.
+ int iReserved;
+} ADLControllerOverlayInput;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about overlay adjustment.
+///
+/// This structure is used to store the information about overlay adjustment for the adapter.
+/// This structure is used by the ADLControllerOverlayInfo() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLAdjustmentinfo
+{
+/// Default value
+ int iDefault;
+/// Minimum value
+ int iMin;
+/// Maximum Value
+ int iMax;
+/// Step value
+ int iStep;
+} ADLAdjustmentinfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about controller overlay information.
+///
+/// This structure is used to store information about controller overlay info for the adapter.
+/// This structure is used by the ADL_Display_ControllerOverlayAdjustmentCaps_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLControllerOverlayInfo
+{
+/// Should be set to the sizeof the structure
+ int iSize;
+/// Data.
+ ADLAdjustmentinfo sOverlayInfo;
+/// Should be 0.
+ int iReserved[3];
+} ADLControllerOverlayInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing GL-Sync module information.
+///
+/// This structure is used to retrieve GL-Sync module information for
+/// Workstation Framelock/Genlock.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGLSyncModuleID
+{
+/// Unique GL-Sync module ID.
+ int iModuleID;
+/// GL-Sync GPU port index (to be passed into ADLGLSyncGenlockConfig.lSignalSource and ADLGlSyncPortControl.lSignalSource).
+ int iGlSyncGPUPort;
+/// GL-Sync module firmware version of Boot Sector.
+ int iFWBootSectorVersion;
+/// GL-Sync module firmware version of User Sector.
+ int iFWUserSectorVersion;
+} ADLGLSyncModuleID , *LPADLGLSyncModuleID;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing GL-Sync ports capabilities.
+///
+/// This structure is used to retrieve hardware capabilities for the ports of the GL-Sync module
+/// for Workstation Framelock/Genlock (such as port type and number of associated LEDs).
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGLSyncPortCaps
+{
+/// Port type. Bitfield of ADL_GLSYNC_PORTTYPE_* \ref define_glsync
+ int iPortType;
+/// Number of LEDs associated for this port.
+ int iNumOfLEDs;
+}ADLGLSyncPortCaps, *LPADLGLSyncPortCaps;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing GL-Sync Genlock settings.
+///
+/// This structure is used to get and set genlock settings for the GPU ports of the GL-Sync module
+/// for Workstation Framelock/Genlock.\n
+/// \see define_glsync
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGLSyncGenlockConfig
+{
+/// Specifies what fields in this structure are valid \ref define_glsync
+ int iValidMask;
+/// Delay (ms) generating a sync signal.
+ int iSyncDelay;
+/// Vector of framelock control bits. Bitfield of ADL_GLSYNC_FRAMELOCKCNTL_* \ref define_glsync
+ int iFramelockCntlVector;
+/// Source of the sync signal. Either GL_Sync GPU Port index or ADL_GLSYNC_SIGNALSOURCE_* \ref define_glsync
+ int iSignalSource;
+/// Use sampled sync signal. A value of 0 specifies no sampling.
+ int iSampleRate;
+/// For interlaced sync signals, the value can be ADL_GLSYNC_SYNCFIELD_1 or *_BOTH \ref define_glsync
+ int iSyncField;
+/// The signal edge that should trigger synchronization. ADL_GLSYNC_TRIGGEREDGE_* \ref define_glsync
+ int iTriggerEdge;
+/// Scan rate multiplier applied to the sync signal. ADL_GLSYNC_SCANRATECOEFF_* \ref define_glsync
+ int iScanRateCoeff;
+}ADLGLSyncGenlockConfig, *LPADLGLSyncGenlockConfig;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing GL-Sync port information.
+///
+/// This structure is used to get status of the GL-Sync ports (BNC or RJ45s)
+/// for Workstation Framelock/Genlock.
+/// \see define_glsync
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGlSyncPortInfo
+{
+/// Type of GL-Sync port (ADL_GLSYNC_PORT_*).
+ int iPortType;
+/// The number of LEDs for this port. It's also filled within ADLGLSyncPortCaps.
+ int iNumOfLEDs;
+/// Port state ADL_GLSYNC_PORTSTATE_* \ref define_glsync
+ int iPortState;
+/// Scanned frequency for this port (vertical refresh rate in milliHz; 60000 means 60 Hz).
+ int iFrequency;
+/// Used for ADL_GLSYNC_PORT_BNC. It is ADL_GLSYNC_SIGNALTYPE_* \ref define_glsync
+ int iSignalType;
+/// Used for ADL_GLSYNC_PORT_RJ45PORT*. It is GL_Sync GPU Port index or ADL_GLSYNC_SIGNALSOURCE_*. \ref define_glsync
+ int iSignalSource;
+
+} ADLGlSyncPortInfo, *LPADLGlSyncPortInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing GL-Sync port control settings.
+///
+/// This structure is used to configure the GL-Sync ports (RJ45s only)
+/// for Workstation Framelock/Genlock.
+/// \see define_glsync
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGlSyncPortControl
+{
+/// Port to control ADL_GLSYNC_PORT_RJ45PORT1 or ADL_GLSYNC_PORT_RJ45PORT2 \ref define_glsync
+ int iPortType;
+/// Port control data ADL_GLSYNC_PORTCNTL_* \ref define_glsync
+ int iControlVector;
+/// Source of the sync signal. Either GL_Sync GPU Port index or ADL_GLSYNC_SIGNALSOURCE_* \ref define_glsync
+ int iSignalSource;
+} ADLGlSyncPortControl;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing GL-Sync mode of a display.
+///
+/// This structure is used to get and set GL-Sync mode settings for a display connected to
+/// an adapter attached to a GL-Sync module for Workstation Framelock/Genlock.
+/// \see define_glsync
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGlSyncMode
+{
+/// Mode control vector. Bitfield of ADL_GLSYNC_MODECNTL_* \ref define_glsync
+ int iControlVector;
+/// Mode status vector. Bitfield of ADL_GLSYNC_MODECNTL_STATUS_* \ref define_glsync
+ int iStatusVector;
+/// Index of GL-Sync connector used to genlock the display/controller.
+ int iGLSyncConnectorIndex;
+} ADLGlSyncMode, *LPADLGlSyncMode;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing GL-Sync mode of a display.
+///
+/// This structure is used to get and set GL-Sync mode settings for a display connected to
+/// an adapter attached to a GL-Sync module for Workstation Framelock/Genlock.
+/// \see define_glsync
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLGlSyncMode2
+{
+/// Mode control vector. Bitfield of ADL_GLSYNC_MODECNTL_* \ref define_glsync
+ int iControlVector;
+/// Mode status vector. Bitfield of ADL_GLSYNC_MODECNTL_STATUS_* \ref define_glsync
+ int iStatusVector;
+/// Index of GL-Sync connector used to genlock the display/controller.
+ int iGLSyncConnectorIndex;
+/// Index of the display to which this GLSync applies to.
+ int iDisplayIndex;
+} ADLGlSyncMode2, *LPADLGlSyncMode2;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing the packet info of a display.
+///
+/// This structure is used to get and set the packet information of a display.
+/// This structure is used by ADLDisplayDataPacket.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLInfoPacket
+{
+ char hb0;
+ char hb1;
+ char hb2;
+/// sb0~sb27
+ char sb[28];
+}ADLInfoPacket;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing the AVI packet info of a display.
+///
+/// This structure is used to get and set AVI the packet info of a display.
+/// This structure is used by ADLDisplayDataPacket.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLAVIInfoPacket //Valid user defined data/
+{
+/// byte 3, bit 7
+ char bPB3_ITC;
+/// byte 5, bit [7:4].
+ char bPB5;
+}ADLAVIInfoPacket;
+
+// Overdrive clock setting structure definition.
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing the Overdrive clock setting.
+///
+/// This structure is used to get the Overdrive clock setting.
+/// This structure is used by ADLAdapterODClockInfo.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLODClockSetting
+{
+/// Deafult clock
+ int iDefaultClock;
+/// Current clock
+ int iCurrentClock;
+/// Maximum clcok
+ int iMaxClock;
+/// Minimum clock
+ int iMinClock;
+/// Requested clcock
+ int iRequestedClock;
+/// Step
+ int iStepClock;
+} ADLODClockSetting;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing the Overdrive clock information.
+///
+/// This structure is used to get the Overdrive clock information.
+/// This structure is used by the ADL_Display_ODClockInfo_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLAdapterODClockInfo
+{
+/// Size of the structure
+ int iSize;
+/// Flag \ref define_clockinfo_flags
+ int iFlags;
+/// Memory Clock
+ ADLODClockSetting sMemoryClock;
+/// Engine Clock
+ ADLODClockSetting sEngineClock;
+} ADLAdapterODClockInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing the Overdrive clock configuration.
+///
+/// This structure is used to set the Overdrive clock configuration.
+/// This structure is used by the ADL_Display_ODClockConfig_Set() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLAdapterODClockConfig
+{
+/// Size of the structure
+ int iSize;
+/// Flag \ref define_clockinfo_flags
+ int iFlags;
+/// Memory Clock
+ int iMemoryClock;
+/// Engine Clock
+ int iEngineClock;
+} ADLAdapterODClockConfig;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about current power management related activity.
+///
+/// This structure is used to store information about current power management related activity.
+/// This structure (Overdrive 5 interfaces) is used by the ADL_PM_CurrentActivity_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLPMActivity
+{
+/// Must be set to the size of the structure
+ int iSize;
+/// Current engine clock.
+ int iEngineClock;
+/// Current memory clock.
+ int iMemoryClock;
+/// Current core voltage.
+ int iVddc;
+/// GPU utilization.
+ int iActivityPercent;
+/// Performance level index.
+ int iCurrentPerformanceLevel;
+/// Current PCIE bus speed.
+ int iCurrentBusSpeed;
+/// Number of PCIE bus lanes.
+ int iCurrentBusLanes;
+/// Maximum number of PCIE bus lanes.
+ int iMaximumBusLanes;
+/// Reserved for future purposes.
+ int iReserved;
+} ADLPMActivity;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about thermal controller.
+///
+/// This structure is used to store information about thermal controller.
+/// This structure is used by ADL_PM_ThermalDevices_Enum.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLThermalControllerInfo
+{
+/// Must be set to the size of the structure
+ int iSize;
+/// Possible valies: \ref ADL_DL_THERMAL_DOMAIN_OTHER or \ref ADL_DL_THERMAL_DOMAIN_GPU.
+ int iThermalDomain;
+/// GPU 0, 1, etc.
+ int iDomainIndex;
+/// Possible valies: \ref ADL_DL_THERMAL_FLAG_INTERRUPT or \ref ADL_DL_THERMAL_FLAG_FANCONTROL
+ int iFlags;
+} ADLThermalControllerInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about thermal controller temperature.
+///
+/// This structure is used to store information about thermal controller temperature.
+/// This structure is used by the ADL_PM_Temperature_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLTemperature
+{
+/// Must be set to the size of the structure
+ int iSize;
+/// Temperature in millidegrees Celsius.
+ int iTemperature;
+} ADLTemperature;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about thermal controller fan speed.
+///
+/// This structure is used to store information about thermal controller fan speed.
+/// This structure is used by the ADL_PM_FanSpeedInfo_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLFanSpeedInfo
+{
+/// Must be set to the size of the structure
+ int iSize;
+/// \ref define_fanctrl
+ int iFlags;
+/// Minimum possible fan speed value in percents.
+ int iMinPercent;
+/// Maximum possible fan speed value in percents.
+ int iMaxPercent;
+/// Minimum possible fan speed value in RPM.
+ int iMinRPM;
+/// Maximum possible fan speed value in RPM.
+ int iMaxRPM;
+} ADLFanSpeedInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about fan speed reported by thermal controller.
+///
+/// This structure is used to store information about fan speed reported by thermal controller.
+/// This structure is used by the ADL_Overdrive5_FanSpeed_Get() and ADL_Overdrive5_FanSpeed_Set() functions.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLFanSpeedValue
+{
+/// Must be set to the size of the structure
+ int iSize;
+/// Possible valies: \ref ADL_DL_FANCTRL_SPEED_TYPE_PERCENT or \ref ADL_DL_FANCTRL_SPEED_TYPE_RPM
+ int iSpeedType;
+/// Fan speed value
+ int iFanSpeed;
+/// The only flag for now is: \ref ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED
+ int iFlags;
+} ADLFanSpeedValue;
+
+////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing the range of Overdrive parameter.
+///
+/// This structure is used to store information about the range of Overdrive parameter.
+/// This structure is used by ADLODParameters.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLODParameterRange
+{
+/// Minimum parameter value.
+ int iMin;
+/// Maximum parameter value.
+ int iMax;
+/// Parameter step value.
+ int iStep;
+} ADLODParameterRange;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about Overdrive parameters.
+///
+/// This structure is used to store information about Overdrive parameters.
+/// This structure is used by the ADL_Overdrive5_ODParameters_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLODParameters
+{
+/// Must be set to the size of the structure
+ int iSize;
+/// Number of standard performance states.
+ int iNumberOfPerformanceLevels;
+/// Indicates whether the GPU is capable to measure its activity.
+ int iActivityReportingSupported;
+/// Indicates whether the GPU supports discrete performance levels or performance range.
+ int iDiscretePerformanceLevels;
+/// Reserved for future use.
+ int iReserved;
+/// Engine clock range.
+ ADLODParameterRange sEngineClock;
+/// Memory clock range.
+ ADLODParameterRange sMemoryClock;
+/// Core voltage range.
+ ADLODParameterRange sVddc;
+} ADLODParameters;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about Overdrive level.
+///
+/// This structure is used to store information about Overdrive level.
+/// This structure is used by ADLODPerformanceLevels.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLODPerformanceLevel
+{
+/// Engine clock.
+ int iEngineClock;
+/// Memory clock.
+ int iMemoryClock;
+/// Core voltage.
+ int iVddc;
+} ADLODPerformanceLevel;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about Overdrive performance levels.
+///
+/// This structure is used to store information about Overdrive performance levels.
+/// This structure is used by the ADL_Overdrive5_ODPerformanceLevels_Get() and ADL_Overdrive5_ODPerformanceLevels_Set() functions.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLODPerformanceLevels
+{
+/// Must be set to sizeof( \ref ADLODPerformanceLevels ) + sizeof( \ref ADLODPerformanceLevel ) * (ADLODParameters.iNumberOfPerformanceLevels - 1)
+ int iSize;
+ int iReserved;
+/// Array of performance state descriptors. Must have ADLODParameters.iNumberOfPerformanceLevels elements.
+ ADLODPerformanceLevel aLevels [1];
+} ADLODPerformanceLevels;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the proper CrossfireX chains combinations.
+///
+/// This structure is used to store information about the CrossfireX chains combination for a particular adapter.
+/// This structure is used by the ADL_Adapter_Crossfire_Caps(), ADL_Adapter_Crossfire_Get(), and ADL_Adapter_Crossfire_Set() functions.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLCrossfireComb
+{
+/// Number of adapters in this combination.
+ int iNumLinkAdapter;
+/// A list of ADL indexes of the linked adapters in this combination.
+ int iAdaptLink[3];
+} ADLCrossfireComb;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing CrossfireX state and error information.
+///
+/// This structure is used to store state and error information about a particular adapter CrossfireX combination.
+/// This structure is used by the ADL_Adapter_Crossfire_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLCrossfireInfo
+{
+/// Current error code of this CrossfireX combination.
+ int iErrorCode;
+/// Current \ref define_crossfirestate
+ int iState;
+/// If CrossfireX is supported by this combination. The value is either \ref ADL_TRUE or \ref ADL_FALSE.
+ int iSupported;
+} ADLCrossfireInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about the BIOS.
+///
+/// This structure is used to store various information about the Chipset. This
+/// information can be returned to the user.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLBiosInfo
+{
+ char strPartNumber[ADL_MAX_PATH]; ///< Part number.
+ char strVersion[ADL_MAX_PATH]; ///< Version number.
+ char strDate[ADL_MAX_PATH]; ///< BIOS date in yyyy/mm/dd hh:mm format.
+} ADLBiosInfo, *LPADLBiosInfo;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about adapter location.
+///
+/// This structure is used to store information about adapter location.
+/// This structure is used by ADLMVPUStatus.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLAdapterLocation
+{
+/// PCI Bus number : 8 bits
+ int iBus;
+/// Device number : 5 bits
+ int iDevice;
+/// Function number : 3 bits
+ int iFunction;
+} ADLAdapterLocation,ADLBdf;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about MultiVPU capabilities.
+///
+/// This structure is used to store information about MultiVPU capabilities.
+/// This structure is used by the ADL_Display_MVPUCaps_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLMVPUCaps
+{
+/// Must be set to sizeof( ADLMVPUCaps ).
+ int iSize;
+/// Number of adapters.
+ int iAdapterCount;
+/// Bits set for all possible MVPU masters. \ref MVPU_ADAPTER_0 .. \ref MVPU_ADAPTER_3
+ int iPossibleMVPUMasters;
+/// Bits set for all possible MVPU slaves. \ref MVPU_ADAPTER_0 .. \ref MVPU_ADAPTER_3
+ int iPossibleMVPUSlaves;
+/// Registry path for each adapter.
+ char cAdapterPath[ADL_DL_MAX_MVPU_ADAPTERS][ADL_DL_MAX_REGISTRY_PATH];
+} ADLMVPUCaps;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about MultiVPU status.
+///
+/// This structure is used to store information about MultiVPU status.
+/// Ths structure is used by the ADL_Display_MVPUStatus_Get() function.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLMVPUStatus
+{
+/// Must be set to sizeof( ADLMVPUStatus ).
+ int iSize;
+/// Number of active adapters.
+ int iActiveAdapterCount;
+/// MVPU status.
+ int iStatus;
+/// PCI Bus/Device/Function for each active adapter participating in MVPU.
+ ADLAdapterLocation aAdapterLocation[ADL_DL_MAX_MVPU_ADAPTERS];
+} ADLMVPUStatus;
+
+// Displays Manager structures
+
+///////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about the activatable source.
+///
+/// This structure is used to store activatable source information
+/// This information can be returned to the user.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLActivatableSource
+{
+ /// The Persistent logical Adapter Index.
+ int iAdapterIndex;
+ /// The number of Activatable Sources.
+ int iNumActivatableSources;
+ /// The bit mask identifies the number of bits ActivatableSourceValue is using. (Not currnetly used)
+ int iActivatableSourceMask;
+ /// The bit mask identifies the status. (Not currnetly used)
+ int iActivatableSourceValue;
+} ADLActivatableSource, *LPADLActivatableSource;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about display mode.
+///
+/// This structure is used to store the display mode for the current adapter
+/// such as X, Y positions, screen resolutions, orientation,
+/// color depth, refresh rate, progressive or interlace mode, etc.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+
+typedef struct ADLMode
+{
+/// Adapter index.
+ int iAdapterIndex;
+/// Display IDs.
+ ADLDisplayID displayID;
+/// Screen position X coordinate.
+ int iXPos;
+/// Screen position Y coordinate.
+ int iYPos;
+/// Screen resolution Width.
+ int iXRes;
+/// Screen resolution Height.
+ int iYRes;
+/// Screen Color Depth. E.g., 16, 32.
+ int iColourDepth;
+/// Screen refresh rate. Could be fractional E.g. 59.97
+ float fRefreshRate;
+/// Screen orientation. E.g., 0, 90, 180, 270.
+ int iOrientation;
+/// Vista mode flag indicating Progressive or Interlaced mode.
+ int iModeFlag;
+/// The bit mask identifying the number of bits this Mode is currently using. It is the sum of all the bit definitions defined in \ref define_displaymode
+ int iModeMask;
+/// The bit mask identifying the display status. The detailed definition is in \ref define_displaymode
+ int iModeValue;
+} ADLMode, *LPADLMode;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about display target information.
+///
+/// This structure is used to store the display target information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayTarget
+{
+ /// The Display ID.
+ ADLDisplayID displayID;
+
+ /// The display map index identify this manner and the desktop surface.
+ int iDisplayMapIndex;
+
+ /// The bit mask identifies the number of bits DisplayTarget is currently using. It is the sum of all the bit definitions defined in \ref ADL_DISPLAY_DISPLAYTARGET_PREFERRED.
+ int iDisplayTargetMask;
+
+ /// The bit mask identifies the display status. The detailed definition is in \ref ADL_DISPLAY_DISPLAYTARGET_PREFERRED.
+ int iDisplayTargetValue;
+
+} ADLDisplayTarget, *LPADLDisplayTarget;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display SLS bezel Mode information.
+///
+/// This structure is used to store the display SLS bezel Mode information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tagADLBezelTransientMode
+{
+ /// Adapter Index
+ int iAdapterIndex;
+
+ /// SLS Map Index
+ int iSLSMapIndex;
+
+ /// The mode index
+ int iSLSModeIndex;
+
+ /// The mode
+ ADLMode displayMode;
+
+ /// The number of bezel offsets belongs to this map
+ int iNumBezelOffset;
+
+ /// The first bezel offset array index in the native mode array
+ int iFirstBezelOffsetArrayIndex;
+
+ /// The bit mask identifies the bits this structure is currently using. It will be the total OR of all the bit definitions.
+ int iSLSBezelTransientModeMask;
+
+ /// The bit mask identifies the display status. The detail definition is defined below.
+ int iSLSBezelTransientModeValue;
+
+} ADLBezelTransientMode, *LPADLBezelTransientMode;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about the adapter display manner.
+///
+/// This structure is used to store adapter display manner information
+/// This information can be returned to the user. Alternatively, it can be used to access various driver calls to
+/// fetch various display device related display manner settings upon the user's request.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLAdapterDisplayCap
+{
+ /// The Persistent logical Adapter Index.
+ int iAdapterIndex;
+ /// The bit mask identifies the number of bits AdapterDisplayCap is currently using. Sum all the bits defined in ADL_ADAPTER_DISPLAYCAP_XXX
+ int iAdapterDisplayCapMask;
+ /// The bit mask identifies the status. Refer to ADL_ADAPTER_DISPLAYCAP_XXX
+ int iAdapterDisplayCapValue;
+} ADLAdapterDisplayCap, *LPADLAdapterDisplayCap;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about display mapping.
+///
+/// This structure is used to store the display mapping data such as display manner.
+/// For displays with horizontal or vertical stretch manner,
+/// this structure also stores the display order, display row, and column data.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLDisplayMap
+{
+/// The current display map index. It is the OS desktop index. For example, if the OS index 1 is showing clone mode, the display map will be 1.
+ int iDisplayMapIndex;
+
+/// The Display Mode for the current map
+ ADLMode displayMode;
+
+/// The number of display targets belongs to this map\n
+ int iNumDisplayTarget;
+
+/// The first target array index in the Target array\n
+ int iFirstDisplayTargetArrayIndex;
+
+/// The bit mask identifies the number of bits DisplayMap is currently using. It is the sum of all the bit definitions defined in ADL_DISPLAY_DISPLAYMAP_MANNER_xxx.
+ int iDisplayMapMask;
+
+///The bit mask identifies the display status. The detailed definition is in ADL_DISPLAY_DISPLAYMAP_MANNER_xxx.
+ int iDisplayMapValue;
+
+} ADLDisplayMap, *LPADLDisplayMap;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about the display device possible map for one GPU
+///
+/// This structure is used to store the display device possible map
+/// This information can be returned to the user.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLPossibleMap
+{
+ /// The current PossibleMap index. Each PossibleMap is assigned an index
+ int iIndex;
+ /// The adapter index identifying the GPU for which to validate these Maps & Targets
+ int iAdapterIndex;
+ /// Number of display Maps for this GPU to be validated
+ int iNumDisplayMap;
+ /// The display Maps list to validate
+ ADLDisplayMap* displayMap;
+ /// the number of display Targets for these display Maps
+ int iNumDisplayTarget;
+ /// The display Targets list for these display Maps to be validated.
+ ADLDisplayTarget* displayTarget;
+} ADLPossibleMap, *LPADLPossibleMap;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about display possible mapping.
+///
+/// This structure is used to store the display possible mapping's controller index for the current display.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLPossibleMapping
+{
+ int iDisplayIndex; ///< The display index. Each display is assigned an index.
+ int iDisplayControllerIndex; ///< The controller index to which display is mapped.
+ int iDisplayMannerSupported; ///< The supported display manner.
+} ADLPossibleMapping, *LPADLPossibleMapping;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+/// \brief Structure containing information about the validated display device possible map result.
+///
+/// This structure is used to store the validated display device possible map result
+/// This information can be returned to the user.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLPossibleMapResult
+{
+ /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
+ int iIndex;
+ // The bit mask identifies the number of bits PossibleMapResult is currently using. It will be the sum all the bit definitions defined in ADL_DISPLAY_POSSIBLEMAPRESULT_VALID.
+ int iPossibleMapResultMask;
+ /// The bit mask identifies the possible map result. The detail definition is defined in ADL_DISPLAY_POSSIBLEMAPRESULT_XXX.
+ int iPossibleMapResultValue;
+} ADLPossibleMapResult, *LPADLPossibleMapResult;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display SLS Grid information.
+///
+/// This structure is used to store the display SLS Grid information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLSLSGrid
+{
+/// The Adapter index.
+ int iAdapterIndex;
+
+/// The grid index.
+ int iSLSGridIndex;
+
+/// The grid row.
+ int iSLSGridRow;
+
+/// The grid column.
+ int iSLSGridColumn;
+
+/// The grid bit mask identifies the number of bits DisplayMap is currently using. Sum of all bits defined in ADL_DISPLAY_SLSGRID_ORIENTATION_XXX
+ int iSLSGridMask;
+
+/// The grid bit value identifies the display status. Refer to ADL_DISPLAY_SLSGRID_ORIENTATION_XXX
+ int iSLSGridValue;
+
+} ADLSLSGrid, *LPADLSLSGrid;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display SLS Map information.
+///
+/// This structure is used to store the display SLS Map information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLSLSMap
+{
+ /// The Adapter Index
+ int iAdapterIndex;
+
+ /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
+ int iSLSMapIndex;
+
+ /// Indicate the current grid
+ ADLSLSGrid grid;
+
+ /// OS surface index
+ int iSurfaceMapIndex;
+
+ /// Screen orientation. E.g., 0, 90, 180, 270
+ int iOrientation;
+
+ /// The number of display targets belongs to this map
+ int iNumSLSTarget;
+
+ /// The first target array index in the Target array
+ int iFirstSLSTargetArrayIndex;
+
+ /// The number of native modes belongs to this map
+ int iNumNativeMode;
+
+ /// The first native mode array index in the native mode array
+ int iFirstNativeModeArrayIndex;
+
+ /// The number of bezel modes belongs to this map
+ int iNumBezelMode;
+
+ /// The first bezel mode array index in the native mode array
+ int iFirstBezelModeArrayIndex;
+
+ /// The number of bezel offsets belongs to this map
+ int iNumBezelOffset;
+
+ /// The first bezel offset array index in the
+ int iFirstBezelOffsetArrayIndex;
+
+ /// The bit mask identifies the number of bits DisplayMap is currently using. Sum all the bit definitions defined in ADL_DISPLAY_SLSMAP_XXX.
+ int iSLSMapMask;
+
+ /// The bit mask identifies the display map status. Refer to ADL_DISPLAY_SLSMAP_XXX
+ int iSLSMapValue;
+
+
+} ADLSLSMap, *LPADLSLSMap;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display SLS Offset information.
+///
+/// This structure is used to store the display SLS Offset information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLSLSOffset
+{
+ /// The Adapter Index
+ int iAdapterIndex;
+
+ /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
+ int iSLSMapIndex;
+
+ /// The Display ID.
+ ADLDisplayID displayID;
+
+ /// SLS Bezel Mode Index
+ int iBezelModeIndex;
+
+ /// SLS Bezel Offset X
+ int iBezelOffsetX;
+
+ /// SLS Bezel Offset Y
+ int iBezelOffsetY;
+
+ /// SLS Display Width
+ int iDisplayWidth;
+
+ /// SLS Display Height
+ int iDisplayHeight;
+
+ /// The bit mask identifies the number of bits Offset is currently using.
+ int iBezelOffsetMask;
+
+ /// The bit mask identifies the display status.
+ int iBezelffsetValue;
+} ADLSLSOffset, *LPADLSLSOffset;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display SLS Mode information.
+///
+/// This structure is used to store the display SLS Mode information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLSLSMode
+{
+ /// The Adapter Index
+ int iAdapterIndex;
+
+ /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
+ int iSLSMapIndex;
+
+ /// The mode index
+ int iSLSModeIndex;
+
+ /// The mode for this map.
+ ADLMode displayMode;
+
+ /// The bit mask identifies the number of bits Mode is currently using.
+ int iSLSNativeModeMask;
+
+ /// The bit mask identifies the display status.
+ int iSLSNativeModeValue;
+} ADLSLSMode, *LPADLSLSMode;
+
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the display Possible SLS Map information.
+///
+/// This structure is used to store the display Possible SLS Map information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLPossibleSLSMap
+{
+ /// The current display map index. It is the OS Desktop index.
+ /// For example, OS Index 1 showing clone mode. The Display Map will be 1.
+ int iSLSMapIndex;
+
+ /// Number of display map to be validated.
+ int iNumSLSMap;
+
+ /// The display map list for validation
+ ADLSLSMap* lpSLSMap;
+
+ /// the number of display map config to be validated.
+ int iNumSLSTarget;
+
+ /// The display target list for validation.
+ ADLDisplayTarget* lpDisplayTarget;
+} ADLPossibleSLSMap, *LPADLPossibleSLSMap;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the SLS targets.
+///
+/// This structure is used to store the SLS targets information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLSLSTarget
+{
+ /// the logic adapter index
+ int iAdapterIndex;
+
+ /// The SLS map index
+ int iSLSMapIndex;
+
+ /// The target ID
+ ADLDisplayTarget displayTarget;
+
+ /// Target postion X in SLS grid
+ int iSLSGridPositionX;
+
+ /// Target postion Y in SLS grid
+ int iSLSGridPositionY;
+
+ /// The view size width, height and rotation angle per SLS Target
+ ADLMode viewSize;
+
+ /// The bit mask identifies the bits in iSLSTargetValue are currently used
+ int iSLSTargetMask;
+
+ /// The bit mask identifies status info. It is for function extension purpose
+ int iSLSTargetValue;
+
+} ADLSLSTarget, *LPADLSLSTarget;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about the Adapter offset stepping size.
+///
+/// This structure is used to store the Adapter offset stepping size information.
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLBezelOffsetSteppingSize
+{
+ /// the logic adapter index
+ int iAdapterIndex;
+
+ /// The SLS map index
+ int iSLSMapIndex;
+
+ /// Bezel X stepping size offset
+ int iBezelOffsetSteppingSizeX;
+
+ /// Bezel Y stepping size offset
+ int iBezelOffsetSteppingSizeY;
+
+ /// Identifies the bits this structure is currently using. It will be the total OR of all the bit definitions.
+ int iBezelOffsetSteppingSizeMask;
+
+ /// Bit mask identifies the display status.
+ int iBezelOffsetSteppingSizeValue;
+
+} ADLBezelOffsetSteppingSize, *LPADLBezelOffsetSteppingSize;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about driver supported PowerExpress Config Caps
+///
+/// This structure is used to store the driver supported PowerExpress Config Caps
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLPXConfigCaps
+{
+ /// The Persistent logical Adapter Index.
+ int iAdapterIndex;
+
+ /// The bit mask identifies the number of bits PowerExpress Config Caps is currently using. It is the sum of all the bit definitions defined in \ref ADL_PX_CONFIGCAPS_XXXX.
+ int iPXConfigCapMask;
+
+ /// The bit mask identifies the PowerExpress Config Caps value. The detailed definition is in \ref ADL_PX_CONFIGCAPS_XXXX.
+ int iPXConfigCapValue;
+
+} ADLPXConfigCaps, *LPADLPXConfigCaps;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about an application
+///
+/// This structure is used to store basic information of an application
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct _ADLApplicationData
+{
+ /// Path Name
+ char strPathName[ADL_MAX_PATH];
+ /// File Name
+ char strFileName[ADL_APP_PROFILE_FILENAME_LENGTH];
+ /// Creation timestamp
+ char strTimeStamp[ADL_APP_PROFILE_TIMESTAMP_LENGTH];
+ /// Version
+ char strVersion[ADL_APP_PROFILE_VERSION_LENGTH];
+}ADLApplicationData;
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information of a property of an application profile
+///
+/// This structure is used to store property information of an application profile
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct _PropertyRecord
+{
+ /// Property Name
+ char strName [ADL_APP_PROFILE_PROPERTY_LENGTH];
+ /// Property Type
+ ADLProfilePropertyType eType;
+ /// Data Size in bytes
+ int iDataSize;
+ /// Property Value, can be any data type
+ unsigned char uData[1];
+}PropertyRecord;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about an application profile
+///
+/// This structure is used to store information of an application profile
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct _ADLApplicationProfile
+{
+ /// Number of properties
+ int iCount;
+ /// Buffer to store all property records
+ PropertyRecord record[1];
+}ADLApplicationProfile;
+
+// @}
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about an OD5 Power Control feature
+///
+/// This structure is used to store information of an Power Control feature
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct ADLPowerControlInfo
+{
+/// Minimum value.
+int iMinValue;
+/// Maximum value.
+int iMaxValue;
+/// The minimum change in between minValue and maxValue.
+int iStepValue;
+ } ADLPowerControlInfo;
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+///\brief Structure containing information about an controller mode
+///
+/// This structure is used to store information of an controller mode
+/// \nosubgrouping
+////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct _ADLControllerMode
+{
+ /// This falg indicates actions that will be applied by set viewport
+ /// The value can be a combination of ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_POSITION,
+ /// ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_PANLOCK and ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_SIZE
+ int iModifiers;
+
+ /// Horizontal view starting position
+ int iViewPositionCx;
+
+ /// Vertical view starting position
+ int iViewPositionCy;
+
+ /// Horizontal left panlock position
+ int iViewPanLockLeft;
+
+ /// Horizontal right panlock position
+ int iViewPanLockRight;
+
+ /// Vertical top panlock position
+ int iViewPanLockTop;
+
+ /// Vertical bottom panlock position
+ int iViewPanLockBottom;
+
+ /// View resolution in pixels (width)
+ int iViewResolutionCx;
+
+ /// View resolution in pixels (hight)
+ int iViewResolutionCy;
+}ADLControllerMode;
+
+
+#endif /* ADL_STRUCTURES_H_ */
+
--- /dev/null
+/*
+ * This file is part of the libCEC(R) library.
+ *
+ * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is an original work, containing original code.
+ *
+ * libCEC(R) is a trademark of Pulse-Eight Limited.
+ *
+ * This program is dual-licensed; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * Alternatively, you can license this library under a commercial license,
+ * please contact Pulse-Eight Licensing for more information.
+ *
+ * For more information contact:
+ * Pulse-Eight Licensing <license@pulse-eight.com>
+ * http://www.pulse-eight.com/
+ * http://www.pulse-eight.net/
+ */
+
+#include "../util/edid.h"
+
+using namespace PLATFORM;
+
+uint16_t CEDIDParser::GetPhysicalAddress(void)
+{
+ // TODO
+ return 0;
+}
--- /dev/null
+#pragma once
+/*
+ * This file is part of the libCEC(R) library.
+ *
+ * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is an original work, containing original code.
+ *
+ * libCEC(R) is a trademark of Pulse-Eight Limited.
+ *
+ * This program is dual-licensed; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * Alternatively, you can license this library under a commercial license,
+ * please contact Pulse-Eight Licensing for more information.
+ *
+ * For more information contact:
+ * Pulse-Eight Licensing <license@pulse-eight.com>
+ * http://www.pulse-eight.com/
+ * http://www.pulse-eight.net/
+ */
+
+#include "../os.h"
+#include "StdString.h"
+
+namespace PLATFORM
+{
+ class CEDIDParser
+ {
+ public:
+ static uint16_t GetPhysicalAddress(void);
+
+ static uint16_t GetPhysicalAddressFromEDID(unsigned char *data, size_t size)
+ {
+ return GetPhysicalAddressFromEDID((char *)data, size);
+ }
+
+ static uint16_t GetPhysicalAddressFromEDID(char *data, size_t size)
+ {
+ uint16_t iPA(0);
+
+ for (size_t iPtr = 0; iPtr < size - 4; iPtr++)
+ {
+ if (data[iPtr] == 0x03 &&
+ data[iPtr + 1] == 0x0C &&
+ data[iPtr + 2] == 0x0)
+ {
+ //found the hdmi marker
+ iPA = (data[iPtr + 3] << 8) + data[iPtr + 4];
+ break;
+ }
+ }
+
+ return iPA;
+ }
+ };
+}
--- /dev/null
+/*
+ * This file is part of the libCEC(R) library.
+ *
+ * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is an original work, containing original code.
+ *
+ * libCEC(R) is a trademark of Pulse-Eight Limited.
+ *
+ * This program is dual-licensed; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * Alternatively, you can license this library under a commercial license,
+ * please contact Pulse-Eight Licensing for more information.
+ *
+ * For more information contact:
+ * Pulse-Eight Licensing <license@pulse-eight.com>
+ * http://www.pulse-eight.com/
+ * http://www.pulse-eight.net/
+ */
+
+#include "../util/edid.h"
+
+#include "windows.h"
+#include "setupapi.h"
+#include "initguid.h"
+#include "stdio.h"
+
+using namespace PLATFORM;
+
+static GUID MONITOR_GUID = { 0x4D36E96E, 0xE325, 0x11CE, { 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 } };
+
+uint16_t GetPhysicalAddressFromDevice(IN HDEVINFO hDevHandle, IN PSP_DEVINFO_DATA deviceInfoData)
+{
+ uint16_t iPA(0);
+
+ HKEY hDevRegKey = SetupDiOpenDevRegKey(hDevHandle, deviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_ALL_ACCESS);
+ if (hDevRegKey)
+ {
+ CHAR regEntryName[128];
+ DWORD regEntryNameLength(128);
+ DWORD type;
+ LONG retVal(0);
+
+ for (LONG ptr = 0; iPA == 0 && retVal != ERROR_NO_MORE_ITEMS; ptr++)
+ {
+ BYTE regEntryData[1024];
+ DWORD regEntryDataSize = sizeof(regEntryData);
+
+ retVal = RegEnumValue(hDevRegKey, ptr, ®EntryName[0], ®EntryNameLength, NULL, &type, regEntryData, ®EntryDataSize);
+
+ if (retVal == 0 && !strcmp(regEntryName,"EDID"))
+ iPA = CEDIDParser::GetPhysicalAddressFromEDID(regEntryData, regEntryDataSize);
+ }
+ RegCloseKey(hDevRegKey);
+ }
+
+ return iPA;
+}
+
+uint16_t CEDIDParser::GetPhysicalAddress(void)
+{
+ HDEVINFO hDevHandle;
+ uint16_t iPA(0);
+ SP_DEVINFO_DATA deviceInfoData;
+
+ hDevHandle = SetupDiGetClassDevsEx(&MONITOR_GUID, NULL, NULL, DIGCF_PRESENT, NULL, NULL, NULL);
+ if (!hDevHandle)
+ return iPA;
+
+ for (int i=0; ERROR_NO_MORE_ITEMS != GetLastError(); i++)
+ {
+ memset(&deviceInfoData, 0, sizeof(SP_DEVINFO_DATA));
+ deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+
+ if (SetupDiEnumDeviceInfo(hDevHandle,i, &deviceInfoData))
+ {
+ iPA = GetPhysicalAddressFromDevice(hDevHandle, &deviceInfoData);
+ }
+ }
+
+ return iPA;
+}