phodevi: Various fixes

This commit is contained in:
Michael Larabel
2024-08-17 20:04:19 -05:00
parent 99c30505d7
commit c259552dc1
5 changed files with 56 additions and 51 deletions

View File

@@ -817,6 +817,9 @@ class phodevi_cpu extends phodevi_device_interface
case '0xd84':
$new_info .= ' Neoverse-V3';
break;
case '0xd85':
$new_info .= ' Cortex-X925';
break;
case '0xd88':
$new_info .= ' Cortex-A520E';
break;

View File

@@ -341,8 +341,11 @@ class phodevi_gpu extends phodevi_device_interface
// First try reading "current" screen 0 as it should better handle multiple monitors, etc.
// e.g. Screen 0: minimum 1 x 1, current 2560 x 1341, maximum 8192 x 8192
$info = shell_exec('xrandr 2>&1');
$info = substr($info, strpos($info, 'current ') + 8);
$info = explode(' x ', trim(substr($info, 0, strpos($info, ','))));
if(!empty($info))
{
$info = substr($info, strpos($info, 'current ') + 8);
$info = explode(' x ', trim(substr($info, 0, strpos($info, ','))));
}
if(count($info) == 2 && is_numeric($info[0]) && is_numeric($info[1]))
{

View File

@@ -1406,16 +1406,6 @@ class phodevi_system extends phodevi_device_interface
$desktop_version = pts_strings::last_in_string(trim(shell_exec('gnome-session --version 2> /dev/null')));
}
}
else if(pts_client::is_process_running('unity-2d-panel') || $desktop_session == 'ubuntu-2d')
{
// Canonical / Ubuntu Unity 2D Desktop
$desktop_environment = 'Unity 2D';
if(pts_client::executable_in_path('unity'))
{
$desktop_version = pts_strings::last_in_string(trim(shell_exec('unity --version 2> /dev/null')));
}
}
else if(pts_client::is_process_running('unity-panel-service') || $desktop_session == 'ubuntu')
{
// Canonical / Ubuntu Unity Desktop
@@ -1514,12 +1504,6 @@ class phodevi_system extends phodevi_device_interface
$desktop_environment = 'LXDE';
$desktop_version = $version;
}
else if(pts_client::is_process_running('lumina-desktop'))
{
// Lumina Desktop Environment
$desktop_environment = 'Lumina';
$desktop_version = str_replace('"', '', trim(shell_exec('lumina-desktop --version 2>&1')));
}
else if(pts_client::is_process_running('xfce4-session') || pts_client::is_process_running('xfce-mcs-manager') || $desktop_session == 'xfce')
{
// Xfce 4.x
@@ -1532,12 +1516,6 @@ class phodevi_system extends phodevi_device_interface
$desktop_version = substr($xfce_output, 0, strpos($xfce_output, ')'));
}
}
else if(pts_client::is_process_running('sugar-session'))
{
// Sugar Desktop Environment (namely for OLPC)
$desktop_environment = 'Sugar';
$desktop_version = null; // TODO: where can the Sugar version be figured out?
}
else if(pts_client::is_process_running('openbox'))
{
$desktop_environment = 'Openbox';
@@ -1564,16 +1542,6 @@ class phodevi_system extends phodevi_device_interface
$desktop_environment = 'Enlightenment';
$desktop_version = null; // No known -v / --version command on any Enlightenment component
}
else if(pts_client::is_process_running('consort-panel'))
{
$desktop_environment = 'Consort';
$desktop_version = null; // TODO: Haven't tested Consort Desktop yet
}
else if(pts_client::is_process_running('razor-desktop'))
{
$desktop_environment = 'Razor-qt';
$desktop_version = null; // TODO: Figure out how to determine razor version
}
else if(pts_client::is_process_running('icewm'))
{
$desktop_environment = 'IceWM';
@@ -1585,6 +1553,15 @@ class phodevi_system extends phodevi_device_interface
$desktop_environment = 'Budgie';
$desktop_version = pts_strings::last_in_string(trim(shell_exec('budgie-desktop --version 2> /dev/null | grep desktop')));
}
else if(pts_client::is_process_running('cosmic-comp') && pts_client::is_process_running('cosmic-panel'))
{
// Pop OS COSMIC
$desktop_environment = 'COSMIC';
if(pts_client::executable_in_path('cosmic-launcher'))
{
$desktop_version = pts_strings::last_in_string(trim(shell_exec('cosmic-launcher -V 2> /dev/null')));
}
}
if(!empty($desktop_environment))
{

View File

@@ -33,7 +33,7 @@ class gpu_power extends phodevi_sensor
public function read_sensor()
{
$gpu_power = -1;
$en1_input_files = glob('/sys/class/drm/card0/device/hwmon/hwmon*/energy1_input');
$en1_input_files = glob('/sys/class/drm/card*/device/hwmon/hwmon*/energy1_input');
if(($nvidia_smi = pts_client::executable_in_path('nvidia-smi')))
{
$smi_output = shell_exec(escapeshellarg($nvidia_smi) . ' -q -d POWER');
@@ -70,13 +70,13 @@ class gpu_power extends phodevi_sensor
}
}
}
else if($power1_average = phodevi_linux_parser::read_sysfs_node('/sys/class/drm/card0/device/hwmon/hwmon*/power1_average', 'POSITIVE_NUMERIC'))
else if($power1_average = phodevi_linux_parser::read_sysfs_node('/sys/class/drm/card*/device/hwmon/hwmon*/power1_average', 'POSITIVE_NUMERIC'))
{
// AMDGPU path
if(is_numeric($power1_average))
{
$power1_average = $power1_average / 1000000;
if($power1_average > 1 && $power1_average < 600)
if($power1_average > 0 && $power1_average < 900)
{
self::$unit = 'Watts';
$gpu_power = $power1_average;

View File

@@ -78,11 +78,12 @@ class sys_power extends phodevi_sensor
}
if(pts_client::executable_in_path('wattsup'))
{
$wattsup = self::watts_up_power_meter();
$meters = false;
$wattsup = self::watts_up_power_meter($meters);
if($wattsup > 0.5 && is_numeric($wattsup))
{
self::$wattsup_meter = true;
self::$wattsup_meter = $meters;
return true;
}
}
@@ -161,7 +162,7 @@ class sys_power extends phodevi_sensor
}
else if(self::$wattsup_meter)
{
return self::watts_up_power_meter();
return self::watts_up_power_meter(self::$wattsup_meter);
}
else if(self::$tegra_power)
{
@@ -208,23 +209,44 @@ class sys_power extends phodevi_sensor
return -1;
}
}
private static function watts_up_power_meter()
private static function watts_up_power_meter(&$meters = false)
{
// Sometimes Wattsup have read failures returning 0....
for($i = 0; $i < 3; $i++)
if($meters == false)
{
$output = trim(shell_exec('wattsup -c 1 ttyUSB0 watts 2>&1'));
$output = explode(PHP_EOL, $output);
do
$meters = pts_file_io::glob('/dev/ttyUSB*');
foreach($meters as &$meter)
{
$value = array_pop($output);
$meter = basename($meter);
}
while(!is_numeric($value) && count($output) > 0);
}
if(is_numeric($value) && $value > 0)
$value = 0;
// Allow reading multiple meters
foreach($meters as $meter)
{
// Sometimes Wattsup have read failures returning 0....
// try reading up to 3 times...
for($i = 0; $i < 3; $i++)
{
break;
$output = trim(shell_exec('wattsup -c 1 ' . $meter . ' watts 2>&1'));
$output = explode(PHP_EOL, $output);
do
{
$this_value = array_pop($output);
}
while(!is_numeric($this_value) && count($output) > 0);
if(is_numeric($this_value) && $this_value > 0)
{
$value += $this_value;
break;
}
}
if(!is_numeric($this_value) || $this_value <= 0)
{
// Avoid case of one meter failing to read but other one reporting....
return -1;
}
}