Skip to content

Commit d2b4a48

Browse files
committed
power: remove GUI keepalive, daemon keepalive/watchdog, and accept-loop polling
1 parent 3961026 commit d2b4a48

2 files changed

Lines changed: 14 additions & 103 deletions

File tree

HelperDaemon.py

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@
2828
import logging
2929
import atexit
3030

31-
from WatchdogTimer import WatchdogTimer
3231
from ECController import ECController
3332
from EInkUSBController import EInkUSBController
3433

3534
# Configuration
3635
SOCKET_PATH = '/run/tinta4plus.sock'
3736
PID_FILE = '/tmp/tinta4plus.pid'
38-
WATCHDOG_TIMEOUT = 20.0 # seconds
3937
LOG_LEVEL = logging.DEBUG # Changed to DEBUG for detailed EC port access logging
4038
SYSTEMD_FIRST_FD = 3
4139

@@ -54,9 +52,6 @@ def __init__(self, logger):
5452
self.eink = None
5553
self.ec = None
5654

57-
# Watchdog
58-
self.watchdog = WatchdogTimer(WATCHDOG_TIMEOUT, self.shutdown, self.logger)
59-
6055
# Setup signal handlers
6156
signal.signal(signal.SIGTERM, self._signal_handler)
6257
signal.signal(signal.SIGINT, self._signal_handler)
@@ -144,17 +139,9 @@ def handle_command(self, command_data):
144139

145140
self.logger.debug(f"Handling command: {cmd}")
146141

147-
# Reset watchdog on any command
148-
self.watchdog.reset()
149-
150142
response = {'success': False, 'error': None}
151143

152-
if cmd == 'keepalive':
153-
# Simple keepalive/ping command
154-
response['success'] = True
155-
response['message'] = 'pong'
156-
157-
elif cmd == 'enable-eink':
144+
if cmd == 'enable-eink':
158145
self.eink.enable_eink()
159146
response['success'] = True
160147
response['message'] = 'E-Ink display enabled'
@@ -355,22 +342,16 @@ def run(self):
355342
# Accept connections
356343
while self.running:
357344
try:
358-
# Set timeout so we can check self.running periodically
359-
self.server_socket.settimeout(1.0)
360-
try:
361-
client_socket, _ = self.server_socket.accept()
362-
self.logger.info("Client connected")
363-
364-
# Handle in a thread (though we expect only one client)
365-
client_thread = threading.Thread(
366-
target=self.handle_client,
367-
args=(client_socket,)
368-
)
369-
client_thread.daemon = True
370-
client_thread.start()
371-
372-
except socket.timeout:
373-
continue
345+
client_socket, _ = self.server_socket.accept()
346+
self.logger.info("Client connected")
347+
348+
# Handle in a thread (though we expect only one client)
349+
client_thread = threading.Thread(
350+
target=self.handle_client,
351+
args=(client_socket,)
352+
)
353+
client_thread.daemon = True
354+
client_thread.start()
374355

375356
except Exception as e:
376357
if self.running:
@@ -423,18 +404,11 @@ def shutdown(self):
423404
else:
424405
self.logger.debug("Shutdown requested while not running; performing cleanup")
425406

426-
# Cancel watchdog
427-
try:
428-
self.watchdog.cancel()
429-
except Exception as e:
430-
self.logger.debug(f"Watchdog cancel during shutdown failed: {e}")
431-
432407
# Cleanup resources even on early-startup failures
433408
try:
434409
self.cleanup_hardware()
435410
except Exception as e:
436411
self.logger.warning(f"Hardware cleanup failed: {e}")
437-
438412
self._remove_socket()
439413
self._remove_pid_file()
440414

@@ -474,11 +448,12 @@ def handle_exception(exc_type, exc_value, exc_traceback):
474448
sys.excepthook = handle_exception
475449

476450
logger.info("ThinkBook E-Ink Helper starting")
477-
logger.info(f"Watchdog timeout: {WATCHDOG_TIMEOUT}s")
478451

479452
daemon = HelperDaemon(logger)
480453
return daemon.run()
481454

482455

483456
if __name__ == '__main__':
484457
sys.exit(main())
458+
459+

Tinta4Plus.py

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ class EInkControlGUI:
171171

172172
# Configuration
173173
SOCKET_PATH = '/run/tinta4plus.sock'
174-
KEEPALIVE_INTERVAL = 2.4 # seconds (send keepalive every 2.4s, watchdog is 20s)
175174
SOCKET_TIMEOUT = 10.0 # seconds
176175
CONFIG_DIR = os.path.expanduser("~/.config/Tinta4Plus")
177176
SETTINGS_FILE = os.path.join(os.path.expanduser("~/.config/Tinta4Plus"), "settings")
@@ -200,7 +199,6 @@ def __init__(self, root, HELPER_SCRIPT, logger):
200199

201200
# Helper client
202201
self.helper = HelperClient(logger)
203-
self.keepalive_after_id = None
204202

205203
# Managers
206204
self.display_mgr = DisplayManager(logger)
@@ -660,7 +658,6 @@ def initialize_helper(self):
660658
if self.helper.connect(self.SOCKET_PATH, timeout=self.SOCKET_TIMEOUT):
661659
self.update_status("Connected to helper daemon")
662660
self.log_message("Connected to helper daemon")
663-
self.start_keepalive()
664661
self.root.after(500, self.check_ec_status)
665662
return
666663
except Exception as e:
@@ -672,65 +669,9 @@ def initialize_helper(self):
672669
"Run installer or check:\n"
673670
" systemctl status tinta4plus-helper.socket"
674671
)
675-
676-
def start_keepalive(self):
677-
"""Start periodic keepalive messages"""
678-
if self.keepalive_after_id:
679-
self.root.after_cancel(self.keepalive_after_id)
680-
681-
self.keepalive_after_id = self.root.after(
682-
int(self.KEEPALIVE_INTERVAL * 1000),
683-
self.send_keepalive
684-
)
685-
self.logger.info(f"Started keepalive timer ({self.KEEPALIVE_INTERVAL}s interval)")
686-
687-
def send_keepalive(self):
688-
"""Send keepalive message to helper with improved error handling"""
689-
if not self.helper.is_connected():
690-
self.update_status("Helper disconnected - attempting restart...", error=True)
691-
last_error = self.helper.get_last_error()
692-
error_msg = f"Helper disconnected: {last_error}" if last_error else "Helper disconnected"
693-
self.log_message(f"{error_msg}, attempting to restart...", level='error')
694-
self.attempt_helper_restart()
695-
return # Don't schedule next keepalive
696-
697-
try:
698-
response = self.helper.send_command('keepalive')
699-
if not response or not response.get('success'):
700-
self.logger.warning(f"Keepalive failed: {response}")
701-
self.log_message("Keepalive failed, restarting helper...", level='error')
702-
self.attempt_helper_restart()
703-
return
704-
705-
# Log successful keepalive at debug level to avoid spam
706-
self.logger.debug("Keepalive successful")
707-
708-
# Schedule next keepalive
709-
self.keepalive_after_id = self.root.after(
710-
int(self.KEEPALIVE_INTERVAL * 1000),
711-
self.send_keepalive
712-
)
713-
714-
except RuntimeError as e:
715-
# Connection-related errors
716-
self.logger.error(f"Keepalive connection error: {e}")
717-
self.update_status("Helper connection lost - restarting...", error=True)
718-
self.log_message(f"Connection error: {e}", level='error')
719-
self.attempt_helper_restart()
720-
721-
except Exception as e:
722-
# Unexpected errors
723-
self.logger.error(f"Keepalive unexpected error: {e}", exc_info=True)
724-
self.update_status("Helper error - restarting...", error=True)
725-
self.log_message(f"Unexpected error: {e}", level='error')
726-
self.attempt_helper_restart()
727-
672+
728673
def attempt_helper_restart(self):
729674
"""Attempt to reconnect to systemd socket-activated helper."""
730-
if self.keepalive_after_id:
731-
self.root.after_cancel(self.keepalive_after_id)
732-
self.keepalive_after_id = None
733-
734675
self.log_message("Attempting to reconnect to helper daemon...")
735676

736677
try:
@@ -745,7 +686,6 @@ def attempt_helper_restart(self):
745686
if self.helper.connect(self.SOCKET_PATH, timeout=self.SOCKET_TIMEOUT):
746687
self.log_message("✓ Reconnected to helper daemon")
747688
self.update_status("Reconnected to helper daemon")
748-
self.start_keepalive()
749689
self.root.after(500, self.check_ec_status)
750690
return
751691
except Exception as e:
@@ -1093,10 +1033,6 @@ def on_closing(self):
10931033
# Stop refresh timer
10941034
self._stop_refresh_timer()
10951035

1096-
# Stop keepalive
1097-
if self.keepalive_after_id:
1098-
self.root.after_cancel(self.keepalive_after_id)
1099-
11001036
# Disconnect from helper client socket
11011037
if self.helper.is_connected():
11021038
self.helper.disconnect()

0 commit comments

Comments
 (0)