cancel
Showing results for 
Search instead for 
Did you mean: 

Armory Crate RefreshRateService Inverse Ghosting and Panel Overdrive not working - FIX / Workaround

yanivkoval
Level 7

Hello Everyone,

I hope I'm not too late to join this hell of a party!

Recently, I've encountered a frustrating issue with the RefreshRateService, particularly its failure to disable Panel Overdrive properly. This has been especially bothersome during gaming sessions, as it induces a phenomenon called Inverse Ghosting, which can ruin the gaming experience for many of us.

To address this, I delved into reverse engineering the RefreshRateService to identify the root cause of the problem.

After extensive research and reverse engineering, it's become apparent that there's a bug within the RefreshRateService's code. This bug prevents some users from seeing the "3MS (Panel Overdrive)" button in Armory Crate, thus hindering their ability to control the Panel Overdrive setting effectively.

Due to this bug, the RefreshRateService fails to send proper signals to ASUS Armory Crate, resulting in the button either being invisible or non-functional.

Unfortunately, I cannot legally publish a fixed version of the RefreshRateService software.

To address this issue, I've developed a script that independently manages the Panel Overdrive setting, bypassing the RefreshRateService and ASUS Armory Crate altogether. Essentially, the script sends Panel Overdrive "on" or "off" signals to the display, effectively circumventing the bug.

Please note that this script may not work for all users due to differences in panel types or other unknown factors. However, it has been tested successfully on the ASUS Zephyrus GX701GX with the AUO409D panel.

INSTRUCTIONS:

  1. Ensure that RefreshRateService is installed (whether it works or not doesn't matter).
    In fact, I recommend disabling the service in Windows Services.
  2. Copy the script text from below and save it into a file with a ".ps1" extension (e.g., "script.ps1").
    Formatting does not matter.
  3. Run the script by "Right-Clicking" and selecting "Run with PowerShell". Choose "on" or "off" as desired, and observe the magic unfold.

If you wish to check whether the Inverse Ghosting issue has been resolved after turning off Panel Overdrive, you can use the UFO Test available at this link.

This solution should provide a workaround until / if ASUS implements a fix for the RefreshRateService bug.

I'll be monitoring this thread to offer assistance. Looking forward to your feedback.

This also answers multiple other threads but unfortunately they are already locked and I cannot replay on them:

  1. https://rog-forum.asus.com/t5/rog-strix-series/asus-fix-this-gl-series-all-display-panels-affected-b...
  2. https://rog-forum.asus.com/t5/rog-zephyrus-series/armoury-crate-panel-overdrive-function-has-stopped...

 

###############################

Script starts here

###############################

function Show-MainMenu
{
Clear-Host

Write-Host "================================="
Write-Host " AUO Panel OverDrive Control"
Write-Host "=================================`n"

Write-Host "1) Get Panel OverDrive State"
Write-Host "2) Set-Panel OverDrive State to ON"
Write-Host "3) Set-Panel OverDrive State to OFF"

Write-Host "`nE) Exit this script"

$userChoice = Read-Host "`nPlease choose an option"

switch ($userChoice)
{
'1'
{
Get-PanelOverDriveStatus
Pause
Show-MainMenu
}
'2'
{
Set-PanelOverDriveState -State On
Pause
Show-MainMenu
}
'3'
{
Set-PanelOverDriveState -State Off
Pause
Show-MainMenu
}
{$_ -in 'e','E'}
{
Exit
}
Default
{
Write-Host "Unknown option, please choose from the available options!" -ForegroundColor Yellow
Pause
Show-MainMenu
}
}
}

function Test-RefreshRateServiceInstalled
{
if (Test-Path -Path "c:\Program Files (x86)\ASUSTeK COMPUTER INC\RefreshRateService\TurnOD_OnOff.exe")
{
return $true
}
else
{
return $false
}
}

function Set-PanelOverDriveState
{
Param
(
[Parameter(Mandatory=$true,
Position=0,
ParameterSetName='Parameter Set 1')]
[ValidateSet("On", "Off")]
$State
)

if ((Test-RefreshRateServiceInstalled) -eq $false)
{
Show-MainMenu
}

$process = New-Object System.Diagnostics.Process
$process.StartInfo.FileName = "c:\Program Files (x86)\ASUSTeK COMPUTER INC\RefreshRateService\TurnOD_OnOff.exe"
$process.StartInfo.Verb = "RunAs"
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.RedirectStandardError = $true
$process.StartInfo.RedirectStandardInput = $true
[void]$process.Start()

switch ($State)
{
'On'
{
$process.StandardInput.WriteLine("1")

break
}
{'Off'}
{
$process.StandardInput.WriteLine("0")

break
}
Default
{
break
}
}

Write-Host "`n$($process.StandardOutput.ReadToEnd().Trim())`n" -ForegroundColor Yellow
}

function Get-PanelOverDriveStatus
{
if ((Test-RefreshRateServiceInstalled) -eq $false)
{
Show-MainMenu
}

$process = New-Object System.Diagnostics.Process
$process.StartInfo.FileName = "c:\Program Files (x86)\ASUSTeK COMPUTER INC\RefreshRateService\TurnOD_OnOff.exe"
$process.StartInfo.Verb = "RunAs"
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.RedirectStandardError = $true
$process.StartInfo.RedirectStandardInput = $true
[void]$process.Start()

$process.StandardInput.WriteLine("4")

$stdOut = $process.StandardOutput.ReadToEnd()

$Dictionary = [ordered]@{
"0" = "Panel OverDrive is OFF"
"1" = "Panel OverDrive is ON"
"2" = "Get panel model ?"
"3" = "Panel is AU Optronics Corporation (AUO)"
"4" = "Panel OverDrive Status"
}

if ([string]::IsNullOrEmpty($stdErr))
{
Write-Host "`n$($Dictionary[$stdOut])`n" -ForegroundColor Yellow
}
else
{
Write-Host "`n$($stdErr)`n" -ForegroundColor Red
}
}

Show-MainMenu

###############################

Script ends here

###############################

218 Views
0 REPLIES 0