public void Run() { int num = 0; while (!this.stopEvent.WaitOne(num)) { if (this.hHwLib == IntPtr.Zero) { return; } WDHWLib.DRIVE_BAY_PRESENCE_DATA drive_BAY_PRESENCE_DATA = default(WDHWLib.DRIVE_BAY_PRESENCE_DATA); drive_BAY_PRESENCE_DATA.presenceChanged = 0u; WDHWLib.HWStatus hwstatus = WDHWLib.HWWaitForDriveBayChange(this.hHwLib, ref drive_BAY_PRESENCE_DATA); if (hwstatus != WDHWLib.HWStatus.HW_STATUS_OK) { if (num == 0) { Logger.Warn("Wait for bay change failed: {0}", new object[] { hwstatus.ToString() }); num = 10000; } } else { if (drive_BAY_PRESENCE_DATA.presenceChanged != 0u) { this.Update(); } num = 0; } } }
public void Dispose() { if (Handle != IntPtr.Zero) { WDHWLib.HWCloseHandle(Handle); } }
private static int NumberOfProcessors(HardwareHandler handler) { var numberOfProcessors = default(int); WDHWLib.HWGetNumCpu(handler.Handle, ref numberOfProcessors); return(numberOfProcessors); }
public bool SetBayPower(DriveBay bay, bool power) { if (bay.ControlPort == -1 || bay.IsBoot) { return(false); } lock (this.hwSyncObj) { Logger.Info("Setting bay {0} power = {1}", new object[] { bay.Number, power }); WDHWLib.HWStatus hwstatus = WDHWLib.HWSetDriveBayPower(this.hHwLib, (uint)bay.ControlPort, power); if (hwstatus != WDHWLib.HWStatus.HW_STATUS_OK) { Logger.Warn("Failed to set drive bay power {0}={1}: {2}", new object[] { bay.ControlPort, power, hwstatus.ToString() }); return(false); } } return(true); }
public bool GetBayStatus(ref DriveBay bay) { if (bay.ControlPort == -1) { return(false); } lock (this.hwSyncObj) { WDHWLib.DRIVE_BAY_STATUS_DATA drive_BAY_STATUS_DATA = default(WDHWLib.DRIVE_BAY_STATUS_DATA); drive_BAY_STATUS_DATA.bay = (uint)bay.ControlPort; drive_BAY_STATUS_DATA.power = 0; drive_BAY_STATUS_DATA.present = 0; WDHWLib.HWStatus hwstatus; if (bay.IsBoot) { hwstatus = WDHWLib.HWGetBootDriveBayStatus(this.hHwLib, (uint)bay.ControlPort, ref drive_BAY_STATUS_DATA); } else { hwstatus = WDHWLib.HWGetDriveBayStatus(this.hHwLib, (uint)bay.ControlPort, ref drive_BAY_STATUS_DATA); } if (hwstatus != WDHWLib.HWStatus.HW_STATUS_OK) { return(false); } bay.Power = (drive_BAY_STATUS_DATA.power == 1); bay.Present = (drive_BAY_STATUS_DATA.present == 1); } return(true); }
public HardwareHandler() { Handle = WDHWLib.HWOpenHandle(); if (Handle == IntPtr.Zero) { throw new InvalidOperationException("Could not retrieve a HWLib handle"); } }
public int GetFanRPM(FanType fanType) { using (var handler = new HardwareHandler()) { var rpm = default(int); WDHWLib.HWGetFanRPM(handler.Handle, 0, (WDHWLib.FAN_TYPE)fanType, ref rpm); return(rpm); } }
public void Dispose() { this.Stop(); if (this.hHwLib != IntPtr.Zero) { WDHWLib.HWCloseHandle(this.hHwLib); this.hHwLib = IntPtr.Zero; } GC.SuppressFinalize(this); }
public void Dispose() { if (this.hHwLib != IntPtr.Zero) { lock (this.hwSyncObj) { WDHWLib.HWCloseHandle(this.hHwLib); this.hHwLib = IntPtr.Zero; } } GC.SuppressFinalize(this); }
public virtual StorApiStatus Stop() { if (this.updateThread.IsAlive) { this.stopEvent.Set(); if (this.hHwLib != IntPtr.Zero) { WDHWLib.HWCancelWaitForDriveBayChange(this.hHwLib); } this.updateThread.Join(); } return(StorApiStatusEnum.STOR_NO_ERROR); }
public SystemInfo GetSystemInfo() { using (var handler = new HardwareHandler()) { var systemInfo = default(WDHWLib.SYS_INFO); WDHWLib.HWGetSysInfo(handler.Handle, ref systemInfo); return(new SystemInfo { BackplaneId = systemInfo.backplaneId, NumberOfBays = systemInfo.numBays }); } }
public void SetFanPWM(FanType fanType, int pwm) { if (pwm < 35 || pwm > 100) { throw new ArgumentException($"Fan PWM '{pwm}' for fan type '{fanType}' is outside of the allowed range [35-100]"); } using (var handler = new HardwareHandler()) { var status = WDHWLib.HWSetFanSpeed(handler.Handle, 0, (WDHWLib.FAN_TYPE)fanType, (byte)pwm); if (status != WDHWLib.HWStatus.HW_STATUS_OK) { throw new InvalidOperationException($"Failed to set fan '{fanType}' speed to '{pwm}' with error code '{status}'"); } } }
public void Beep(uint frequency, TimeSpan duration) { if (frequency > 32000) { throw new ArgumentException($"The provided frequency '{frequency}'Hz is outside of the accepted range [0-32000]Hz"); } if (duration <= TimeSpan.Zero || duration > TimeSpan.FromSeconds(10)) { throw new ArgumentException($"The provided duration '{duration.Milliseconds}'ms is outside of the allowed range ]0-10]s"); } using (var handler = new HardwareHandler()) { WDHWLib.HWBeep(handler.Handle, frequency, (uint)duration.Milliseconds); } }
public virtual StorApiStatus Initialize() { if (this.hHwLib == IntPtr.Zero) { this.hHwLib = WDHWLib.HWOpenHandle(); if (this.hHwLib == IntPtr.Zero) { Logger.Error("Failed to open HW lib handle!", new object[0]); return(StorApiStatusEnum.STOR_INIT_FAILED); } } this.Update(); foreach (DriveBay driveBay in this.bays) { if (!driveBay.Power) { driveBay.SetPower(true); } } return(StorApiStatusEnum.STOR_NO_ERROR); }
public DigitalTemperatureSensorData GetProcessorTemperature(int processorIndex) { using (var handler = new HardwareHandler()) { var numberOfProcessors = NumberOfProcessors(handler); if (processorIndex >= numberOfProcessors) { throw new ArgumentException($"The processor index '{processorIndex}' exceeds the maximum number of processors {numberOfProcessors}"); } var hardwareStatus = WDHWLib.HWStatus.HW_STATUS_ERROR; var digitalTemperatureSensorData = default(WDHWLib.DTS_DATA); for (var i = 0; i < RetryStrategy; i++) { hardwareStatus = WDHWLib.HWGetCpuDTS(handler.Handle, processorIndex, ref digitalTemperatureSensorData); if (hardwareStatus == WDHWLib.HWStatus.HW_STATUS_OK) { break; } Thread.Sleep(100); } if (hardwareStatus != WDHWLib.HWStatus.HW_STATUS_OK) { throw new TimeoutException($"Processor temperature for CPU #'{processorIndex}' could not be retrieved after {RetryStrategy} retries"); } return(new DigitalTemperatureSensorData { RawValue = digitalTemperatureSensorData.rawValue, Valid = digitalTemperatureSensorData.valid, DtsValue = digitalTemperatureSensorData.dtsValue, InterprettedDtsValue = digitalTemperatureSensorData.interprettedDtsValue, CriticalTemperatureStatus = digitalTemperatureSensorData.critTempStatus, TemperatureStatus = digitalTemperatureSensorData.tempStatus, }); } }
public DriveBayHW() { this.hHwLib = WDHWLib.HWOpenHandle(); }