Prevent OS sleep and display blanking while SDR is running

Add PowerInhibit.pas with InhibitSleep/UninhibitSleep:
- Windows: SetThreadExecutionState (kernel32, no child process)
- macOS: caffeinate -d -i -s -w <PID> (auto-exits on crash via -w flag)
- Linux: systemd-inhibit with kill-0 poll loop (releases within 5s on crash)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 21:33:30 +03:00
co-authored by Claude Sonnet 4.6
parent 655d242d02
commit 83ec28f997
3 changed files with 120 additions and 1 deletions
+7 -1
View File
@@ -39,7 +39,8 @@ uses
WinFirewall,
BoardUtils, WisdomBuilder, UISync,
FlatEdit, FMRepeater,
ChannelStore, ChannelsForm;
ChannelStore, ChannelsForm,
PowerInhibit;
const
CLR_BG = TColor($00101010);
@@ -1464,6 +1465,7 @@ begin
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslate(ActiveTXFreqHz), 0, False, True, True);
FNetwork.SetRunAndFreq(False, XvtrTranslate(FCenterFreq), XvtrTranslate(FCenterFreq), 0);
FRunning := False;
UninhibitSleep;
FTransmitting := False;
if FWDSPReady then FDSPEngine.SetTXRun(False);
end;
@@ -3046,6 +3048,7 @@ begin
BtnStartStop.Caption := 'START';
StyleButton(BtnStartStop, False);
FRunning := False;
UninhibitSleep;
FNetwork.SetRunAndFreq(False, XvtrTranslate(FCenterFreq), XvtrTranslate(FCenterFreq), 0);
SetRadioOfflineStatus('Hardware timeout');
BtnMOX.Enabled := False;
@@ -3057,6 +3060,7 @@ begin
BtnStartStop.Caption := 'START';
StyleButton(BtnStartStop, False);
FRunning := False;
UninhibitSleep;
FNetwork.SetRunAndFreq(False, XvtrTranslate(FCenterFreq), XvtrTranslate(FCenterFreq), 0);
SetRadioOfflineStatus('Connection lost');
BtnMOX.Enabled := False;
@@ -3897,6 +3901,7 @@ begin
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslate(ActiveTXFreqHz), 0, False, True, True);
FNetwork.SetRunAndFreq(False, XvtrTranslate(FCenterFreq), XvtrTranslate(FCenterFreq), 0);
FRunning := False;
UninhibitSleep;
FTransmitting := False;
if FWDSPReady then FDSPEngine.SetTXRun(False);
StyleButton(BtnMOX, False);
@@ -4220,6 +4225,7 @@ begin
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslate(ActiveTXFreqHz), FDriveLevel, False, True, True);
FNetwork.SetRunAndFreq(True, XvtrTranslate(FCenterFreq), XvtrTranslate(FCenterFreq), FDriveLevel);
FRunning := True;
InhibitSleep;
FRXStartTime := GetTickCount64;
FRXLastPktTime := 0;
FRXPacketCount := 0;