'AVCS AIDA Sensors Report Readout System ' by SemlerPDX Mar2022 ' VETERANS-GAMING.COM Imports Microsoft.VisualBasic Imports System Imports System.Collections Imports System.Collections.Generic Imports System.Data Imports System.Drawing Imports System.Diagnostics Imports System.Windows.Forms Imports System.Linq Imports System.Xml.Linq Imports System.Threading Imports System.Threading.Tasks Public Class VAInline dim countAtypicalLow as integer = 0 dim countAtypicalHigh as integer = 0 dim countTypical as integer = 0 dim countTotal as integer = 0 'dim sensorsArray() as string = {"PercentCPU","PercentRAM","PercentGPU","PercentVRAM","TempMOBO","TempCPU","TempCPUD","TempCPUP","TempPCH","TempVRM","TempGPU","FanCPU","FanCPUO","FanPCH","FanTOP","FanREAR","FanGPU1","FanGPU2"} dim sensorsArray() as string = {"CPU_Use","CPU_temp","CPU_Diode_temp","CPU_Package_temp","CPU_fan","CPU_OPT_fan","Memory_Use","GPU_Use","Video_Memory_Use","GPU_temp","GPU_fan","Motherboard_temp","PCH_temp","PCH_fan","Southbridge_temp","Southbridge_fan","Northbridge_temp","Northbridge_fan","VRM_temp","VRM_fan","Intake_fan","Exhaust_fan","Top_fan","Rear_fan","Back_fan","Left_fan","Right_fan","Bottom_fan","Front_fan","Side_fan"} 'dim commandsArray() as string = {"CPU Usage","RAM Usage","GPU Usage","V RAM Usage","Motherboard Temp","CPU Temp","CPU Diode Temp","CPU Package Temp","Southbridge Temp","V R M Temp","GPU Temp","CPU Fan","ignore","P C H Fan","Top Case Fan","Rear case fan","GPU Fan","ignore"} dim commandsArray() as string = {"CPU Usage","CPU Temp","CPU Diode Temp","CPU Package Temp","CPU Fan","Optional CPU Fan","RAM Usage","GPU Usage","V RAM Usage","GPU Temp","GPU Fan","Motherboard Temp","PCH Temp","PCH Fan","Southbridge Temp","Southbridge Fan","Northbridge Temp","Northbridge Fan","V R M Temp","V R M Fan","Intake case fan","Exhaust case fan","Top case fan","Rear case fan","Back case fan","Left case fan","Right case fan","Bottom case fan","Front case fan","Side case fan"} dim sensorsAtypicalHigh as string = "" dim sensorsAtypicalLow as string = "" dim sensorsTypical as string = "" dim diagnosticLevel as integer = 0 dim diagnoseSystem as string = "" dim diagnosticsDebugging as boolean = false dim diagnosticsTesting as boolean = false Public Sub ExecuteDiagnosticsLevel(ByVal diagnosticCount as integer, ByVal diagnosticSensors as string, ByVal andConjunctions as boolean) dim diagnosticSensorsArray() as string if ((diagnosticCount > 1) and (diagnosticSensors.Contains(","))) diagnosticSensorsArray = diagnosticSensors.Replace("ignore", "").Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries) if (diagnoseSystem = "GPU") try VA.Command.Execute("How is the graphics card clock", true) catch if (diagnosticsDebugging) VA.WriteToLog("AVCS AIDA ERROR: at ExecuteDiagnosticsLevel (GPU) VA Proxy Command Execute...", "red") end if end try end if for i as integer = 0 to diagnosticSensorsArray.GetUpperBound(0) if (diagnosticsDebugging) VA.WriteToLog("sensorsArray(" + i.ToString() + ") = " + diagnosticSensorsArray(i).ToString(), "orange") VA.WriteToLog("sensorsArray Length = " + diagnosticSensorsArray.GetUpperBound(0).ToString(), "orange") end if try if ((i < diagnosticSensorsArray.GetUpperBound(0)) and (i > 0) and (i Mod 2 = 0) and (andConjunctions)) VA.SetText("AVCS_SENS_TTS_WILDCARD", "[also,;and,;also,;;;;;;;]") VA.Command.Execute("F_SAY_TTS", true) elseif ((i = diagnosticSensorsArray.GetUpperBound(0)) and ((diagnosticSensorsArray.GetUpperBound(0) = 1) or (diagnosticSensorsArray.GetUpperBound(0) = 2))) VA.SetText("AVCS_SENS_TTS_WILDCARD", "and,") VA.Command.Execute("F_SAY_TTS", true) elseif ((i = diagnosticSensorsArray.GetUpperBound(0)) and (diagnosticSensorsArray.GetUpperBound(0) >= 3)) VA.SetText("AVCS_SENS_TTS_WILDCARD", "and finally") VA.Command.Execute("F_SAY_TTS", true) end if VA.Command.Execute("How is the " + diagnosticSensorsArray(i), true) catch if (diagnosticsDebugging) VA.WriteToLog("AVCS AIDA ERROR: at VA Proxy Command Execute...", "red") end if end try next elseif (diagnosticCount = 1) if (diagnosticSensors <> "ignore") try diagnosticSensors = diagnosticSensors.Replace("," ,"") VA.Command.Execute("How is the " + diagnosticSensors, true) catch if (diagnosticsDebugging) VA.WriteToLog("AVCS AIDA ERROR: at VA Proxy Command Execute...", "red") end if end try end if else if (diagnosticCount = 0) try VA.SetText("AVCS_SENS_TTS_WILDCARD", "[we are;all systems are] [functioning within normal parameters;operating within normal parameters;operating at peak efficiency]; [we are;all systems are] [functioning within normal parameters;operating within normal parameters;operating at peak efficiency] [sir;captain;]") VA.Command.Execute("F_SAY_TTS", false) catch if (diagnosticsDebugging) VA.WriteToLog("AVCS AIDA ERROR: at VA Proxy Command Execute 'How are we doing'...", "red") end if end try end if if (diagnosticsDebugging) VA.WriteToLog("AVCS AIDA: No diagnostic data to report", "red") end if end if End Sub Public Sub Main() VA.SetBoolean("AVCS_SENS_Diagnostics_Active", true) if (VA.GetText("AVCS_SENS_DIAGNOSTIC_SENSORS") isNot nothing) sensorsArray = VA.GetText("AVCS_SENS_DIAGNOSTIC_SENSORS").Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries) end if if (VA.GetText("AVCS_SENS_DIAGNOSTIC_COMMANDS") isNot nothing) commandsArray = VA.GetText("AVCS_SENS_DIAGNOSTIC_COMMANDS").Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries) end if if ((VA.GetBoolean("AVCS_SENS_DebugDiagnostics") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugDiagnostics"))) diagnosticsDebugging = true end if if (VA.GetText("AVCS_SENS_DIAGNOSTIC_SYSTEM") isNot nothing) diagnoseSystem = VA.GetText("AVCS_SENS_DIAGNOSTIC_SYSTEM") end if 'For each sensor noted as 'diagnostic', assemble current typical/atypical diagnostics data (if any) for i as integer = 0 to sensorsArray.GetUpperBound(0) if ((VA.GetBoolean("AVCS_SENS_ATYPICAL_" + sensorsArray(i)) isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_ATYPICAL_" + sensorsArray(i)))) if (diagnoseSystem = "") or ((diagnoseSystem <> "") andAlso (((diagnoseSystem = "GPU") and ((commandsArray(i).StartsWith("GPU")) or (sensorsArray(i).EndsWith("VRAM")))) or ((diagnoseSystem = "CPU") and (commandsArray(i).StartsWith("CPU"))))) sensorsAtypicalHigh = sensorsAtypicalHigh + commandsArray(i) + "," countAtypicalHigh += 1 end if elseif ((VA.GetBoolean("AVCS_SENS_ATYPICAL_" + sensorsArray(i)) isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_ATYPICAL_" + sensorsArray(i)) = false)) if (diagnoseSystem = "") or ((diagnoseSystem <> "") andAlso (((diagnoseSystem = "GPU") and ((commandsArray(i).StartsWith("GPU")) or (sensorsArray(i).EndsWith("VRAM")))) or ((diagnoseSystem = "CPU") and (commandsArray(i).StartsWith("CPU"))))) sensorsAtypicalLow = sensorsAtypicalLow + commandsArray(i) + "," countAtypicalLow += 1 end if elseif ((VA.GetBoolean("AVCS_SENS_ATYPICAL_" + commandsArray(i)) is nothing) andAlso (VA.GetDecimal("AVCS_SENS_LastAverage_" + sensorsArray(i)) isNot nothing)) if (diagnoseSystem = "") or ((diagnoseSystem <> "") andAlso (((diagnoseSystem = "GPU") and ((commandsArray(i).StartsWith("GPU")) or (sensorsArray(i).EndsWith("VRAM")))) or ((diagnoseSystem = "CPU") and (commandsArray(i).StartsWith("CPU"))))) countTypical += 1 sensorsTypical = sensorsTypical + commandsArray(i) + "," end if end if next countTotal = countAtypicalHigh + countTypical + countAtypicalLow 'Testing Debug set (disregards actual atypical/typical status) 'diagnosticsTesting = true 'uncomment this line to use the Test Run button in Inline Function editor window if (diagnosticsTesting) VA.ClearLog() VA.WriteToLog("Total Count: " + countTotal.ToString(), "red") countAtypicalHigh += 1 sensorsAtypicalHigh = sensorsAtypicalHigh + "CPU Temp" + "," countAtypicalHigh += 1 sensorsAtypicalHigh = sensorsAtypicalHigh + "GPU Temp" + "," 'countAtypicalHigh += 1 'sensorsAtypicalHigh = sensorsAtypicalHigh + "Southbridge Temp" + "," VA.SetInt("AVCS_SENS_DIAGNOSTIC_LEVEL", 4) end if 'For use when not split, trim the final comma from the string, else let it be removed when split if (sensorsAtypicalHigh <> "") sensorsAtypicalHigh = sensorsAtypicalHigh.Substring(0, sensorsAtypicalHigh.Length - 1) end if if (sensorsAtypicalLow <> "") sensorsAtypicalLow = sensorsAtypicalLow.Substring(0, sensorsAtypicalLow.Length - 1) end if if (sensorsTypical <> "") sensorsTypical = sensorsTypical.Substring(0, sensorsTypical.Length - 1) end if 'Based on requested level, begin automated diagnostic command calls for any/all individual sensors of the requested level type if ((VA.GetInt("AVCS_SENS_DIAGNOSTIC_LEVEL") isNot nothing) andAlso (Integer.TryParse(VA.GetInt("AVCS_SENS_DIAGNOSTIC_LEVEL"), diagnosticLevel))) if (diagnosticsDebugging) VA.WriteToLog("Atypical High Sensors = " + sensorsAtypicalHigh, "green") VA.WriteToLog("Atypical High Sensor Count = " + countAtypicalHigh.ToString(), "green") VA.WriteToLog("Atypical Low Sensors = " + sensorsAtypicalLow, "green") VA.WriteToLog("Atypical Low Sensor Count = " + countAtypicalLow.ToString(), "green") VA.WriteToLog("Typical Sensor Count = " + countTypical.ToString(), "blue") VA.WriteToLog("diagnosticLevel = " + diagnosticLevel.ToString(), "green") end if 'Level 5 runs only AtypicalHigh if >=25% are High, 4 is any High, 3 is High+Low, and 2 is High+Typical+Low (all), 1 is Menu for (all) 'NEW DIAGNOSTIC LEVELS SYSTEM =============================== select case (diagnosticLevel) case 4 ExecuteDiagnosticsLevel(countAtypicalHigh, sensorsAtypicalHigh, true) case 3 sensorsAtypicalHigh = sensorsAtypicalHigh + "," + sensorsAtypicalLow countTotal = countAtypicalHigh + countAtypicalLow ExecuteDiagnosticsLevel(countTotal, sensorsAtypicalHigh, true) case 2 sensorsTypical = sensorsAtypicalHigh + "," + sensorsTypical + "," + sensorsAtypicalLow ExecuteDiagnosticsLevel(countTotal, sensorsTypical, false) VA.SetBoolean("ungraceful_Exit", nothing) case 1 VA.Command.Execute("F_AIDA_DIAGNOSE", false) VA.WriteToLog("diagnoseSystem Report = " + diagnoseSystem.ToString(), "green") case else if (countAtypicalHigh >= countTotal/4) ExecuteDiagnosticsLevel(countAtypicalHigh, sensorsAtypicalHigh, true) else ExecuteDiagnosticsLevel(0, sensorsTypical, false) end if end select else if (diagnosticsDebugging) VA.WriteToLog("AVCS AIDA ERROR: Reports Inline - TryParse Int or Variable error...", "red") end if end if VA.SetInt("AVCS_SENS_DIAGNOSTIC_LEVEL", nothing) VA.SetBoolean("AVCS_SENS_Diagnostics_Active", nothing) VA.SetBoolean("AVCS_SENS_Diagnosing", false) End Sub End Class