#pragma once
#include "env.h"
#define HAVE_ADL_EDID_PARSER
#include "platform/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 P8PLATFORM
{
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;
};
}