ATI SDK problem

Joined
Apr 12, 2009
Messages
1
Reaction score
0
Hello, i am trying to create a fan control for my tool and i don't understand lot of things that the SKD talks about..

here is what i am doing click here

here is the full detail

the code is suppose to be


internal delegate int ADL_Overdrive5_FanSpeed_Get (int iAdapterIndex, int iThermalControllerIndex,ref ADLFanSpeedValue lpFanSpeedValue);



=========================================================


enum iSpeedType{ADL_DL_FANCTRL_SPEED_TYPE_PERCENT,ADL_DL_FANCTRL_SPEED_TYPE_RPM};
enum ipSpeedValue{ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED}
enum Faninfoflag{ADL_DL_FANCTRL_SUPPORTS_PERCENT_READ = 1, ADL_DL_FANCTRL_SUPPORTS_PERCENT_WRITE = 2, ADL_DL_FANCTRL_SUPPORTS_RPM_READ = 4, ADL_DL_FANCTRL_SUPPORTS_RPM_WRITE = 8};

================================================

#region ADLFanSpeedInfo

[StructLayout(LayoutKind.Sequential)]
internal struct ADLFanSpeedInfo
{
internal int iSize;
internal int Faninfoflag;
internal int iMinPercent;
internal int iMaxPercent;
internal int iMinRPM;
internal int iMaxRPM;
}
[StructLayout(LayoutKind.Sequential)]
internal struct ADLFanSpeedInfoArray
{
/// <summary> ADLAdapterInfo Array </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)ADL.ADL_MAX_ADAPTERS)]
internal ADLFanSpeedInfo[] ADLFanSpeedInfo;
}
#endregion ADLFanSpeedInfo

#region ADLFanSpeedValue

[StructLayout(LayoutKind.Sequential)]
internal struct ADLFanSpeedValue
{
internal int iSize;
internal int iSpeedType; //Possible valies: ADL_DL_FANCTRL_SPEED_TYPE_PERCENT or ADL_DL_FANCTRL_SPEED_TYPE_RPM.
internal int iFanSpeed;
internal int ipSpeedValue; //The only flag for now is: ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED.
}
#endregion ADLFanSpeedValue

=========================================================


[DllImport(Atiadlxx_FileName)]
internal static extern int ADL_Overdrive5_FanSpeed_Get(int iAdapterIndex, int iThermalControllerIndex, ref ADLFanSpeedValue lpFanSpeedValue);

============================================================'



#region ADL_Overdrive5_FanSpeed_Get

internal static ADL_Overdrive5_FanSpeed_Get ADL_Overdrive5_FanSpeed_Get
{
get
{
if (!ADL_Overdrive5_FanSpeed_Get_Check && null == ADL_Overdrive5_FanSpeed_Get_)
{
ADL_Overdrive5_FanSpeed_Get_Check = true;
if (ADLCheckLibrary.IsFunctionValid("ADL_Overdrive5_FanSpeed_Get"))
{
ADL_Overdrive5_FanSpeed_Get_ = ADLImport.ADL_Overdrive5_FanSpeed_Get;
}
}
return ADL_Overdrive5_FanSpeed_Get;
}
}
private static ADL_Overdrive5_FanSpeed_Get ADL_Overdrive5_FanSpeed_Get_ = null;
private static bool ADL_Overdrive5_FanSpeed_Get_Check = false;

#endregion ADL_Overdrive5_FanSpeed_Get
=============================================================


now i am trying to get the fan speed which is giving me a hard time......... can some one help please


my code

int ADLRet = -1;
int NumberOfAdapters = 0;

if (null != ADL.ADL_Main_Control_Create)
ADLRet = ADL.ADL_Main_Control_Create(ADL.ADL_Main_Memory_Alloc, 0);
if (ADL.ADL_SUCCESS == ADLRet)
{
if (null != ADL.ADL_Adapter_NumberOfAdapters_Get)
{
ADL.ADL_Adapter_NumberOfAdapters_Get(ref NumberOfAdapters);
}
Console.WriteLine("Number Of Adapters: " + NumberOfAdapters.ToString() + "\n");

if (0 < NumberOfAdapters)
{
ADLAdapterInfoArray OSAdapterInfoData;
OSAdapterInfoData = new ADLAdapterInfoArray();

ADLFanSpeedInfoArray OSAFanSpeedInfoData;
OSAFanSpeedInfoData = new ADLFanSpeedInfoArray();

if (null != ADL.ADL_Adapter_AdapterInfo_Get)
{
IntPtr AdapterBuffer = IntPtr.Zero;
int size = Marshal.SizeOf(OSAdapterInfoData);
AdapterBuffer = Marshal.AllocCoTaskMem((int)size);
Marshal.StructureToPtr(OSAdapterInfoData, AdapterBuffer, false);

ADLRet = ADL.ADL_Adapter_AdapterInfo_Get(AdapterBuffer, size);
if (ADL.ADL_SUCCESS == ADLRet)
{
OSAdapterInfoData = (ADLAdapterInfoArray)Marshal.PtrToStructure(AdapterBuffer, OSAdapterInfoData.GetType());
int IsActive = 0;

for (int i = 0; i < NumberOfAdapters; i++)
{
if (null != ADL.ADL_Adapter_Active_Get)
ADLRet = ADL.ADL_Adapter_Active_Get(OSAdapterInfoData.ADLAdapterInfo.AdapterIndex, ref IsActive);


ADLRet = ADL.ADL_Overdrive5_FanSpeed_Get(OSAdapterInfoData.ADLAdapterInfo.AdapterIndex, 0, ref iSpeedType);


if (IsActive == 1)
{
string Actadapt = System.Convert.ToString(0 < IsActive);
Active_Adap_num_lbl.Text = Actadapt;

string Adapvalue = System.Convert.ToString(NumberOfAdapters);
Adap_num_lbl.Text = Adapvalue;

===============================================================


I hope some one has the knowledge to help on this...

===============================================================
 
Back
Top