diff --git a/supersdr.py b/supersdr.py index dba8ebe..d976664 100755 --- a/supersdr.py +++ b/supersdr.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 -import _thread from optparse import OptionParser from utils_supersdr import * @@ -189,6 +188,7 @@ current_string = [] +old_spot_dict = None if dxclust: print(dxclust) dxclust.connect() @@ -266,8 +266,16 @@ if keys[pygame.K_i]: fl.show_eibi_flag = False if fl.show_eibi_flag else True - # Show realtime DX-CLUSTER labels - if keys[pygame.K_d]: + # Disconnect DXCLUSTER, but save previous spot list + if keys[pygame.K_p]: + if dxclust: + old_spot_dict = dxclust.spot_dict + fl.show_dxcluster_flag = False + dxclust.disconnect() + dxclust = None + + # Show realtime DX-CLUSTER labels, if DXCLUSTER disabled, enable it first + elif keys[pygame.K_d]: if dxclust: fl.show_dxcluster_flag = False if fl.show_dxcluster_flag else True if fl.show_dxcluster_flag: @@ -686,7 +694,8 @@ dxclust.connect() dx_t = threading.Thread(target=dxclust.run, args=(kiwi_wf,), daemon=True) dx_t.start() - + if old_spot_dict: + dxclust.spot_dict = old_spot_dict dx_cluster_msg = True fl.show_dxcluster_flag = True else: diff --git a/utils_supersdr.py b/utils_supersdr.py index c6a9809..4276a75 100644 --- a/utils_supersdr.py +++ b/utils_supersdr.py @@ -90,7 +90,8 @@ def bytearray2str(b): "- Z: Center KIWI RX, shift WF instead", "- SPACE: FORCE SYNC of WF to RX if no CAT, else sync to CAT", "- X: AUTO MODE ON/OFF depending on amateur/broadcast band", - "- I/D: displays EIBI/DXCLUSTER labels", + "- D/P: enable or hide DXCLUSTER, P disconnect DXCLUSTER", + "- I: show/hide EIBI database stations", "- Q: switch to a different KIWI server", "- 1/2 & 3: adjust AGC threshold, 3 switch WF autoscale", "- SHIFT+ESC: quits", @@ -174,15 +175,25 @@ def __init__(self, mycall_): host, port = 'dxfun.com', 8000 self.server = (host, port) self.spot_dict = {} + self.visible_stations = [] self.terminate = False self.failed_counter = 0 self.update_now = False + def disconnect(self): + self.terminate = True + try: + self.sock.shutdown(1) + self.sock.close() + except: + pass + print("DXCLuster disconnected!") + def connect(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) connected = False while not connected: - print(f'Connection to: {self.server}') + print("Connecting to: %s:%d" % self.server) try: self.sock.connect(self.server) except: @@ -194,7 +205,6 @@ def connect(self): connected = True # self.sock.settimeout(0.1) self.send(self.mycall) - self.visible_stations = [] self.time_to_live = 1200 # seconds for a spot to live self.last_update = datetime.utcnow() self.last_cleanup = datetime.utcnow() @@ -253,16 +263,7 @@ def run(self, kiwi_wf): dx_cluster_msg = self.receive() except: continue - # if not dx_cluster_msg: - # self.failed_counter += 1 - # print("DX Cluster void response") - # if self.failed_counter > 5: - # self.sock.close() - # time.sleep(5) - # self.connect() - # time.sleep(5) - # continue - # self.failed_counter = 0 + spot_str = "%s"%dx_cluster_msg stored_something_flag = False for line in spot_str.replace("\x07", "").split("\n"): @@ -288,6 +289,7 @@ def run(self, kiwi_wf): # print("DXCLUST: updated visible spots") self.last_update = datetime.utcnow() self.update_now = False + # print("Exited from DXCLUSTER loop") def store_spot(self, qrg_, callsign_, utc_, spot_msg_): spot_id = next(self.uniqueid()) # create a unique hash for each spot @@ -1275,7 +1277,7 @@ def display_box(self, screen, message, size): def display_help_box(self, screen, message_list): font_size = font_size_dict["small"] - window_size = 495 + window_size = 505 #495 pygame.draw.rect(screen, (0,0,0), ((screen.get_width() / 2) - window_size/2, (screen.get_height() / 2) - window_size/3,