diff --git a/aprs_comm.py b/aprs_comm.py index 7601717..4f431fc 100644 --- a/aprs_comm.py +++ b/aprs_comm.py @@ -22,9 +22,17 @@ unack_lock = Lock() message_counter = 1 message_lock = threading.Lock() +# Global flag to indicate shutdown +shutdown_event = threading.Event() + JSON_URL = "https://aprs-deviceid.aprsfoundation.org/tocalls.pretty.json" +def shutdown(): + """Signal the APRS loop to shut down.""" + print("Shutdown signal received. Stopping APRS communications...") + shutdown_event.set() + def fetch_device_data(): local_file = "tocalls_cache.json" @@ -148,7 +156,11 @@ def start(): print(f"BBS Callsign: {my_callsign}") while True: - for frame in ki.read(min_frames=1): + if shutdown_event.is_set(): + print("Shutdown event set. Exiting APRS loop.") + ki.stop() + break + for frame in ki.read(min_frames=0): try: if config.RAW_PACKET_DISPLAY: print(f"{COLOR_RAW}RAW PACKET:{COLOR_RESET} {frame}") diff --git a/main.py b/main.py index 714669e..029e936 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,9 @@ import aprs_comm import threading import time +import signal +import sys + def scheduled_cleanup(): """Periodically run cleanup of expired bulletins.""" @@ -14,6 +17,11 @@ def scheduled_cleanup(): print(f"Error during cleanup: {e}") time.sleep(24 * 60 * 60) # Run cleanup every 24 hours +def signal_handler(signum, frame): + print(f"Received signal {signum}. Shutting down...") + aprs_comm.shutdown() + + def main(): banner = """ \033[96m @@ -34,8 +42,13 @@ def main(): cleanup_thread = threading.Thread(target=scheduled_cleanup, daemon=True) cleanup_thread.start() + print("Setting up signal handlers...") + signal.signal(signal.SIGINT, signal_handler) # Ctrl+C + signal.signal(signal.SIGTERM, signal_handler) # kill command + print("Starting APRS communications...") aprs_comm.start() + return 0 if __name__ == "__main__": main()