oshi.hardware.platform.windows.WindowsPowerSource Maven / Gradle / Ivy
package oshi.hardware.platform.windows;
import oshi.hardware.PowerSource;
import oshi.hardware.common.AbstractPowerSource;
import oshi.jna.platform.windows.PowrProf;
import oshi.util.FormatUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sun.jna.NativeLong;
/**
* @author angju
*
*/
public class WindowsPowerSource extends AbstractPowerSource {
private final static Logger LOG = LoggerFactory.getLogger(WindowsPowerSource.class.getName());
private static final long serialVersionUID = 1L;
public WindowsPowerSource(String newName, double newRemainingCapacity, double newTimeRemaining) {
super(newName, newRemainingCapacity, newTimeRemaining);
LOG.debug("Initialized WindowsPowerSource");
}
/**
* Gets Battery Information.
*
* @return An array of PowerSource objects representing batteries, etc.
*/
public static PowerSource[] getPowerSources() {
// Windows provides a single unnamed battery
String name = "System Battery";
WindowsPowerSource[] psArray = new WindowsPowerSource[1];
// Get structure
PowrProf.SystemBatteryState batteryState = new PowrProf.SystemBatteryState();
if (0 != PowrProf.INSTANCE.CallNtPowerInformation(PowrProf.SYSTEM_BATTERY_STATE, null, new NativeLong(0),
batteryState, new NativeLong(batteryState.size())) || batteryState.batteryPresent == 0) {
psArray[0] = new WindowsPowerSource("Unknown", 0d, -1d);
} else {
int estimatedTime = -2; // -1 = unknown, -2 = unlimited
if (batteryState.acOnLine == 0 && batteryState.charging == 0 && batteryState.discharging > 0) {
estimatedTime = batteryState.estimatedTime;
}
long maxCapacity = FormatUtil.getUnsignedInt(batteryState.maxCapacity);
long remainingCapacity = FormatUtil.getUnsignedInt(batteryState.remainingCapacity);
psArray[0] = new WindowsPowerSource(name, (double) remainingCapacity / maxCapacity, estimatedTime);
}
return psArray;
}
}