private static function sys_battery_power() { // Returns power consumption rate in mW $rate = -1; if (phodevi::is_linux()) { $power_now = phodevi_linux_parser::read_sysfs_node('/sys/class/power_supply/*/power_now', 'POSITIVE_NUMERIC', array('status' => 'Discharging')); if ($power_now != -1) { // sysfs power_now seems to be displayed in microWatts $rate = pts_math::set_precision($power_now / 1000, 2); } if ($rate == -1) { $battery = array('/battery/BAT0/state', '/battery/BAT1/state'); $state = phodevi_linux_parser::read_acpi($battery, 'charging state'); $power = phodevi_linux_parser::read_acpi($battery, 'present rate'); $voltage = phodevi_linux_parser::read_acpi($battery, 'present voltage'); if ($state == 'discharging') { $power_unit = substr($power, strrpos($power, ' ') + 1); $power = substr($power, 0, strpos($power, ' ')); if ($power_unit == 'mA') { $voltage_unit = substr($voltage, strrpos($voltage, ' ') + 1); $voltage = substr($voltage, 0, strpos($voltage, ' ')); if ($voltage_unit == 'mV') { $rate = round($power * $voltage / 1000); } } else { if ($power_unit == 'mW') { $rate = $power; } } } } if ($rate == -1 && is_file('/sys/class/power_supply/BAT0/voltage_now') && is_file('/sys/class/power_supply/BAT0/current_now')) { $voltage_now = pts_file_io::file_get_contents('/sys/class/power_supply/BAT0/voltage_now') / 1000; $current_now = pts_file_io::file_get_contents('/sys/class/power_supply/BAT0/current_now') / 1000; $power_now = $voltage_now * $current_now / 1000; if ($power_now > 1) { $rate = $power_now; } } if ($rate == -1 && is_file('/sys/class/power_supply/BAT1/voltage_now') && is_file('/sys/class/power_supply/BAT1/current_now')) { $voltage_now = pts_file_io::file_get_contents('/sys/class/power_supply/BAT1/voltage_now') / 1000; $current_now = pts_file_io::file_get_contents('/sys/class/power_supply/BAT1/current_now') / 1000; $power_now = $voltage_now * $current_now / 1000; if ($power_now > 1) { $rate = $power_now; } } } else { if (phodevi::is_macosx()) { $amperage = abs(phodevi_osx_parser::read_osx_system_profiler('SPPowerDataType', 'Amperage')); // in mA $voltage = phodevi_osx_parser::read_osx_system_profiler('SPPowerDataType', 'Voltage'); // in mV if ($amperage > 0 && $voltage > 0) { $rate = round($amperage * $voltage / 1000); } else { if (pts_client::executable_in_path('ioreg')) { $ioreg = trim(shell_exec("ioreg -l | grep LegacyBatteryInfo | cut -d '{' -f 2 | tr -d \\} | tr ',' '=' | awk -F'=' '{print (\$2*\$10/10^22)}' 2>&1")); if (is_numeric($ioreg) && $ioreg > 0) { $rate = $ioreg; } } } } else { if (phodevi::is_solaris()) { $battery = phodevi_solaris_parser::read_hal_property('/org/freedesktop/Hal/devices/pseudo/acpi_drv_0_battery0_0', 'battery.reporting.rate'); if (is_numeric($battery)) { $rate = $battery; } } else { if (phodevi::is_bsd()) { $battery = phodevi_bsd_parser::read_acpiconf('Present rate'); if ($battery && substr($battery, -2) == 'mW') { $rate = substr($battery, 0, strpos($battery, ' ')); } } } } } return $rate; }