The ArcGetHWMon method returns the information about a H/W monitor.
virtual ARC_STATUS ArcGetHWMon ( DWORD
HwItem, pHwMonInfo pHwInfo ); |
[IN]
HwItem:
Hardware monitor item.
Value |
Meaning |
HWMON_FAN_INFO |
Get H/W information about fans. |
HWMON_VOL_INFO |
Get H/W information about voltages |
HWMON_TMP_INFO |
Get H/W information about temperatures |
HWMON_PWR_INFO |
Get H/W information about powers |
HWMON_UPS_INFO |
Get H/W information about UPS |
HWMON_BATTERY_INFO |
Get H/W information about |
[OUT]
pHwInfo:
Pointer to a sHwMonInfo
structure that receives the information.
This method returns the ARC_STATUS.
This method is suitable for RAID subsystem
excluding ARC-5010 & ARC-6010
These two models should use the other method ArcGetHWMon5010.
For HWMON_TMP_INFO:
In normal circumstances the number of temperatures would
equal to the maximum supported HDDs,
it means the returned temperatures are all for HDDs,
but in some controllers support the CPU &
Controller temperatures reporting,
the first two positions are reserved for these two
items.
ARC_STATUS Exe_Hw_Info_Cmd(CArclib &ctrl) { ARC_STATUS stat; sHwMonInfo voltageInfo,
fanInfo, hddTempInfo, batteryInfo; int
i; int
addTemp; // get H/W monitor
information about fans stat = ctrl.ArcGetHWMon(HWMON_FAN_INFO,
&fanInfo); if (stat != ARC_SUCCESS) {
return stat; } // get H/W monitor
information about temperatures stat = ctrl.ArcGetHWMon(HWMON_TMP_INFO,
&hddTempInfo); if (stat != ARC_SUCCESS) {
return stat; } // get H/W monitor
information about voltages stat = ctrl.ArcGetHWMon(HWMON_VOL_INFO,
&voltageInfo); if (stat != ARC_SUCCESS) {
return stat; } // get H/W monitor
information about battery backup module stat = ctrl.ArcGetHWMon(HWMON_BATTERY_INFO,
&batteryInfo); if(stat != ARC_SUCCESS) {
return stat; } printf("The
Hardware Monitor Information\n"); printf("===========================================\n"); // show voltage status for (i
= 0; i < voltageInfo.HwItemCount;
i+=2) { printf("Power +%-5.2lfV :
%2.3lf\n", (double)voltageInfo.ItemInfo[i]/(double)1000.0,
(double)voltageInfo.ItemInfo[i+1]/(double)1000.0); } // show fan status for (i
= 0; i < fanInfo.HwItemCount;
i++) { if
(fanInfo.ItemInfo[i] ==
0xffff) {
printf("Fan#%d
Speed (RPM) : N.A.\n", i+1); }
else {
printf("Fan#%d
Speed (RPM) : %d\n", i+1, fanInfo.ItemInfo[i]); } } // show battery status for ( i = 0; i
< batteryInfo.HwItemCount; i++) { if(batteryInfo.ItemInfo[i] == BBM_NOT_INSTALLED /* 255 */) { printf("Battery Status : Not
Installed\n"); } else if(batteryInfo.ItemInfo[i] == BBM_FAILED /* 254 */) { printf("Battery Status :
Failed\n"); } else { printf("Battery Status :
%d%%\n", batteryInfo.ItemInfo[i]); } } // show temperatures addTemp
= 0; i
= 0; if(hddTempInfo.HwItemCount
!= sysInfo.gsiIdeChannels) { printf("CPU Temp.
: %d\n", hddTempInfo.ItemInfo[0]); printf("Controller Temp. : %d\n", hddTempInfo.ItemInfo[1]); addTemp = 2; } for (i
= addTemp; i < hddTempInfo.HwItemCount; i++) { printf("HDD #%-2d Temp. : %d\n",
i - addTemp, hddTempInfo.ItemInfo[i]); } printf("===========================================\n"); return ARC_SUCCESS; } |
|