not1mm 24.10.18__py3-none-any.whl → 24.10.19.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- not1mm/__main__.py +48 -21
- not1mm/checkwindow.py +0 -2
- not1mm/lib/cat_interface.py +50 -20
- not1mm/lib/version.py +1 -1
- not1mm/plugins/arrl_field_day.py +91 -0
- not1mm/plugins/winter_field_day.py +91 -0
- not1mm/radio.py +26 -22
- {not1mm-24.10.18.dist-info → not1mm-24.10.19.1.dist-info}/METADATA +16 -14
- {not1mm-24.10.18.dist-info → not1mm-24.10.19.1.dist-info}/RECORD +13 -13
- {not1mm-24.10.18.dist-info → not1mm-24.10.19.1.dist-info}/LICENSE +0 -0
- {not1mm-24.10.18.dist-info → not1mm-24.10.19.1.dist-info}/WHEEL +0 -0
- {not1mm-24.10.18.dist-info → not1mm-24.10.19.1.dist-info}/entry_points.txt +0 -0
- {not1mm-24.10.18.dist-info → not1mm-24.10.19.1.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -1710,6 +1710,15 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1710
1710
|
self.settings.setValue("windowState", self.saveState())
|
1711
1711
|
self.settings.sync()
|
1712
1712
|
|
1713
|
+
try: # Shutdown the radio thread.
|
1714
|
+
if self.radio_thread.isRunning():
|
1715
|
+
self.rig_control.time_to_quit = True
|
1716
|
+
self.radio_thread.quit()
|
1717
|
+
self.radio_thread.wait(1000)
|
1718
|
+
|
1719
|
+
except (RuntimeError, AttributeError):
|
1720
|
+
...
|
1721
|
+
|
1713
1722
|
cmd = {}
|
1714
1723
|
cmd["cmd"] = "HALT"
|
1715
1724
|
cmd["station"] = platform.node()
|
@@ -2534,6 +2543,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2534
2543
|
self.pref["run_state"] = self.radioButton_run.isChecked()
|
2535
2544
|
self.write_preference()
|
2536
2545
|
self.read_cw_macros()
|
2546
|
+
self.check_esm()
|
2537
2547
|
|
2538
2548
|
def write_preference(self) -> None:
|
2539
2549
|
"""
|
@@ -2660,7 +2670,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2660
2670
|
self.rig_control.poll_callback.connect(self.poll_radio)
|
2661
2671
|
self.radio_thread.start()
|
2662
2672
|
|
2663
|
-
|
2673
|
+
elif self.pref.get("userigctld", False):
|
2664
2674
|
logger.debug(
|
2665
2675
|
"Using rigctld: %s",
|
2666
2676
|
f"{self.pref.get('CAT_ip')} {self.pref.get('CAT_port')}",
|
@@ -2675,6 +2685,17 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2675
2685
|
self.radio_thread.finished.connect(self.rig_control.deleteLater)
|
2676
2686
|
self.rig_control.poll_callback.connect(self.poll_radio)
|
2677
2687
|
self.radio_thread.start()
|
2688
|
+
else:
|
2689
|
+
self.rig_control = Radio(
|
2690
|
+
"fake",
|
2691
|
+
self.pref.get("CAT_ip", "127.0.0.1"),
|
2692
|
+
int(self.pref.get("CAT_port", 0000)),
|
2693
|
+
)
|
2694
|
+
self.rig_control.moveToThread(self.radio_thread)
|
2695
|
+
self.radio_thread.started.connect(self.rig_control.run)
|
2696
|
+
self.radio_thread.finished.connect(self.rig_control.deleteLater)
|
2697
|
+
self.rig_control.poll_callback.connect(self.poll_radio)
|
2698
|
+
self.radio_thread.start()
|
2678
2699
|
|
2679
2700
|
self.cw = None
|
2680
2701
|
if (
|
@@ -3076,17 +3097,18 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3076
3097
|
self.show_help_dialog()
|
3077
3098
|
self.clearinputs()
|
3078
3099
|
return
|
3079
|
-
if stripped_text == "TEST":
|
3080
|
-
|
3081
|
-
|
3082
|
-
|
3083
|
-
|
3084
|
-
|
3085
|
-
|
3086
|
-
|
3087
|
-
|
3100
|
+
# if stripped_text == "TEST":
|
3101
|
+
# result = self.database.get_calls_and_bands()
|
3102
|
+
# cmd = {}
|
3103
|
+
# cmd["cmd"] = "WORKED"
|
3104
|
+
# cmd["station"] = platform.node()
|
3105
|
+
# cmd["worked"] = result
|
3106
|
+
# self.multicast_interface.send_as_json(cmd)
|
3107
|
+
# self.clearinputs()
|
3108
|
+
# return
|
3088
3109
|
if self.is_floatable(stripped_text):
|
3089
3110
|
self.change_freq(stripped_text)
|
3111
|
+
self.clearinputs()
|
3090
3112
|
return
|
3091
3113
|
|
3092
3114
|
cmd = {}
|
@@ -3124,6 +3146,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3124
3146
|
|
3125
3147
|
vfo = float(stripped_text)
|
3126
3148
|
vfo = int(vfo * 1000)
|
3149
|
+
|
3150
|
+
if self.rig_control:
|
3151
|
+
self.rig_control.set_vfo(vfo)
|
3152
|
+
return
|
3153
|
+
|
3127
3154
|
band = getband(str(vfo))
|
3128
3155
|
self.set_band_indicator(band)
|
3129
3156
|
self.radio_state["vfoa"] = vfo
|
@@ -3131,9 +3158,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3131
3158
|
self.contact["Band"] = get_logged_band(str(vfo))
|
3132
3159
|
self.set_window_title()
|
3133
3160
|
self.clearinputs()
|
3134
|
-
|
3135
|
-
self.rig_control.set_vfo(vfo)
|
3136
|
-
return
|
3161
|
+
|
3137
3162
|
cmd = {}
|
3138
3163
|
cmd["cmd"] = "RADIO_STATE"
|
3139
3164
|
cmd["station"] = platform.node()
|
@@ -3167,10 +3192,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3167
3192
|
if self.rig_control.interface == "flrig":
|
3168
3193
|
self.cwspeed_spinbox_changed()
|
3169
3194
|
self.rig_control.cat.set_flrig_cw_send(True)
|
3170
|
-
|
3171
|
-
|
3172
|
-
|
3173
|
-
|
3195
|
+
else:
|
3196
|
+
self.setmode("CW")
|
3197
|
+
self.radio_state["mode"] = "CW"
|
3198
|
+
band = getband(str(self.radio_state.get("vfoa", "0.0")))
|
3199
|
+
self.set_band_indicator(band)
|
3174
3200
|
self.set_window_title()
|
3175
3201
|
self.clearinputs()
|
3176
3202
|
self.read_cw_macros()
|
@@ -3192,11 +3218,12 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3192
3218
|
self.radio_state["mode"] = "USB"
|
3193
3219
|
else:
|
3194
3220
|
self.radio_state["mode"] = "LSB"
|
3195
|
-
if self.rig_control:
|
3221
|
+
if self.rig_control and self.rig_control.online:
|
3196
3222
|
self.rig_control.set_mode(self.radio_state.get("mode"))
|
3197
|
-
|
3198
|
-
|
3199
|
-
|
3223
|
+
else:
|
3224
|
+
self.setmode("SSB")
|
3225
|
+
band = getband(str(self.radio_state.get("vfoa", "0.0")))
|
3226
|
+
self.set_band_indicator(band)
|
3200
3227
|
self.set_window_title()
|
3201
3228
|
self.clearinputs()
|
3202
3229
|
self.read_cw_macros()
|
not1mm/checkwindow.py
CHANGED
not1mm/lib/cat_interface.py
CHANGED
@@ -71,6 +71,15 @@ class CAT:
|
|
71
71
|
self.host = host
|
72
72
|
self.port = port
|
73
73
|
self.online = False
|
74
|
+
self.fake_radio = {
|
75
|
+
"vfo": "14032000",
|
76
|
+
"mode": "CW",
|
77
|
+
"bw": "500",
|
78
|
+
"power": "100",
|
79
|
+
"modes": ["CW", "USB", "LSB", "RTTY"],
|
80
|
+
"ptt": False,
|
81
|
+
}
|
82
|
+
|
74
83
|
if self.interface == "flrig":
|
75
84
|
target = f"http://{host}:{port}"
|
76
85
|
logger.debug("%s", target)
|
@@ -84,8 +93,11 @@ class CAT:
|
|
84
93
|
http.client.BadStatusLine,
|
85
94
|
):
|
86
95
|
self.online = False
|
87
|
-
|
96
|
+
elif self.interface == "rigctld":
|
88
97
|
self.__initialize_rigctrld()
|
98
|
+
elif self.interface == "fake":
|
99
|
+
self.online = True
|
100
|
+
return
|
89
101
|
|
90
102
|
def __initialize_rigctrld(self):
|
91
103
|
try:
|
@@ -121,8 +133,7 @@ class CAT:
|
|
121
133
|
logger.debug(f"{texttosend=} {self.interface=}")
|
122
134
|
if self.interface == "flrig":
|
123
135
|
self.sendcwxmlrpc(texttosend)
|
124
|
-
|
125
|
-
if self.interface == "rigctld":
|
136
|
+
elif self.interface == "rigctld":
|
126
137
|
self.sendcwrigctl(texttosend)
|
127
138
|
|
128
139
|
def sendcwrigctl(self, texttosend):
|
@@ -200,10 +211,12 @@ class CAT:
|
|
200
211
|
vfo = ""
|
201
212
|
if self.interface == "flrig":
|
202
213
|
vfo = self.__getvfo_flrig()
|
203
|
-
|
214
|
+
elif self.interface == "rigctld":
|
204
215
|
vfo = self.__getvfo_rigctld()
|
205
216
|
if "RPRT -" in vfo:
|
206
217
|
vfo = ""
|
218
|
+
else:
|
219
|
+
vfo = self.fake_radio.get("vfo", "")
|
207
220
|
return vfo
|
208
221
|
|
209
222
|
def __getvfo_flrig(self) -> str:
|
@@ -243,8 +256,10 @@ class CAT:
|
|
243
256
|
mode = ""
|
244
257
|
if self.interface == "flrig":
|
245
258
|
mode = self.__getmode_flrig()
|
246
|
-
|
259
|
+
elif self.interface == "rigctld":
|
247
260
|
mode = self.__getmode_rigctld()
|
261
|
+
else:
|
262
|
+
mode = self.fake_radio.get("mode")
|
248
263
|
return mode
|
249
264
|
|
250
265
|
def __getmode_flrig(self) -> str:
|
@@ -291,9 +306,10 @@ class CAT:
|
|
291
306
|
"""Get current vfo bandwidth"""
|
292
307
|
if self.interface == "flrig":
|
293
308
|
return self.__getbw_flrig()
|
294
|
-
|
309
|
+
elif self.interface == "rigctld":
|
295
310
|
return self.__getbw_rigctld()
|
296
|
-
|
311
|
+
else:
|
312
|
+
return self.fake_radio.get("bw")
|
297
313
|
|
298
314
|
def __getbw_flrig(self):
|
299
315
|
"""return bandwidth"""
|
@@ -336,9 +352,10 @@ class CAT:
|
|
336
352
|
"""Get power level from rig"""
|
337
353
|
if self.interface == "flrig":
|
338
354
|
return self.__getpower_flrig()
|
339
|
-
|
355
|
+
elif self.interface == "rigctld":
|
340
356
|
return self.__getpower_rigctld()
|
341
|
-
|
357
|
+
else:
|
358
|
+
return self.fake_radio.get("power", "100")
|
342
359
|
|
343
360
|
def __getpower_flrig(self):
|
344
361
|
try:
|
@@ -371,7 +388,7 @@ class CAT:
|
|
371
388
|
"""Get PTT state"""
|
372
389
|
if self.interface == "flrig":
|
373
390
|
return self.__getptt_flrig()
|
374
|
-
|
391
|
+
elif self.interface == "rigctld":
|
375
392
|
return self.__getptt_rigctld()
|
376
393
|
return False
|
377
394
|
|
@@ -411,8 +428,10 @@ class CAT:
|
|
411
428
|
"Get a list of modes supported by the radio"
|
412
429
|
if self.interface == "flrig":
|
413
430
|
return self.__get_mode_list_flrig()
|
414
|
-
|
431
|
+
elif self.interface == "rigctld":
|
415
432
|
return self.__get_mode_list_rigctld()
|
433
|
+
else:
|
434
|
+
return self.fake_radio.get("modes")
|
416
435
|
return False
|
417
436
|
|
418
437
|
def __get_mode_list_flrig(self):
|
@@ -455,8 +474,11 @@ class CAT:
|
|
455
474
|
try:
|
456
475
|
if self.interface == "flrig":
|
457
476
|
return self.__setvfo_flrig(freq)
|
458
|
-
|
477
|
+
elif self.interface == "rigctld":
|
459
478
|
return self.__setvfo_rigctld(freq)
|
479
|
+
else:
|
480
|
+
self.fake_radio["vfo"] = str(freq)
|
481
|
+
return True
|
460
482
|
except ValueError:
|
461
483
|
...
|
462
484
|
return False
|
@@ -497,9 +519,11 @@ class CAT:
|
|
497
519
|
"""Sets the radios mode"""
|
498
520
|
if self.interface == "flrig":
|
499
521
|
return self.__setmode_flrig(mode)
|
500
|
-
|
522
|
+
elif self.interface == "rigctld":
|
501
523
|
return self.__setmode_rigctld(mode)
|
502
|
-
|
524
|
+
else:
|
525
|
+
self.fake_radio["mode"] = mode
|
526
|
+
return True
|
503
527
|
|
504
528
|
def __setmode_flrig(self, mode: str) -> bool:
|
505
529
|
"""Sets the radios mode"""
|
@@ -539,9 +563,11 @@ class CAT:
|
|
539
563
|
"""Sets the radios power"""
|
540
564
|
if self.interface == "flrig":
|
541
565
|
return self.__setpower_flrig(power)
|
542
|
-
|
566
|
+
elif self.interface == "rigctld":
|
543
567
|
return self.__setpower_rigctld(power)
|
544
|
-
|
568
|
+
else:
|
569
|
+
self.fake_radio["power"] = str(power)
|
570
|
+
return True
|
545
571
|
|
546
572
|
def __setpower_flrig(self, power):
|
547
573
|
try:
|
@@ -573,9 +599,11 @@ class CAT:
|
|
573
599
|
"""turn ptt on/off"""
|
574
600
|
if self.interface == "flrig":
|
575
601
|
return self.__ptt_on_flrig()
|
576
|
-
|
602
|
+
elif self.interface == "rigctld":
|
577
603
|
return self.__ptt_on_rigctld()
|
578
|
-
|
604
|
+
else:
|
605
|
+
self.fake_radio["ptt"] = True
|
606
|
+
return True
|
579
607
|
|
580
608
|
def __ptt_on_rigctld(self):
|
581
609
|
"""Toggle PTT state on"""
|
@@ -618,9 +646,11 @@ class CAT:
|
|
618
646
|
"""turn ptt on/off"""
|
619
647
|
if self.interface == "flrig":
|
620
648
|
return self.__ptt_off_flrig()
|
621
|
-
|
649
|
+
elif self.interface == "rigctld":
|
622
650
|
return self.__ptt_off_rigctld()
|
623
|
-
|
651
|
+
else:
|
652
|
+
self.fake_radio["ptt"] = False
|
653
|
+
return True
|
624
654
|
|
625
655
|
def __ptt_off_rigctld(self):
|
626
656
|
"""Toggle PTT state off"""
|
not1mm/lib/version.py
CHANGED
not1mm/plugins/arrl_field_day.py
CHANGED
@@ -401,3 +401,94 @@ def ft8_handler(the_packet: dict):
|
|
401
401
|
ALTEREGO.other_1.setText(the_packet.get("CLASS", "ERR"))
|
402
402
|
ALTEREGO.other_2.setText(the_packet.get("ARRL_SECT", "ERR"))
|
403
403
|
ALTEREGO.save_contact()
|
404
|
+
|
405
|
+
|
406
|
+
def process_esm(self, new_focused_widget=None, with_enter=False):
|
407
|
+
"""ESM State Machine"""
|
408
|
+
|
409
|
+
# self.pref["run_state"]
|
410
|
+
|
411
|
+
# -----===== Assigned F-Keys =====-----
|
412
|
+
# self.esm_dict["CQ"]
|
413
|
+
# self.esm_dict["EXCH"]
|
414
|
+
# self.esm_dict["QRZ"]
|
415
|
+
# self.esm_dict["AGN"]
|
416
|
+
# self.esm_dict["HISCALL"]
|
417
|
+
# self.esm_dict["MYCALL"]
|
418
|
+
# self.esm_dict["QSOB4"]
|
419
|
+
|
420
|
+
# ----==== text fields ====----
|
421
|
+
# self.callsign
|
422
|
+
# self.sent
|
423
|
+
# self.receive
|
424
|
+
# self.other_1
|
425
|
+
# self.other_2
|
426
|
+
|
427
|
+
if new_focused_widget is not None:
|
428
|
+
self.current_widget = self.inputs_dict.get(new_focused_widget)
|
429
|
+
|
430
|
+
# print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
|
431
|
+
|
432
|
+
for a_button in [
|
433
|
+
self.esm_dict["CQ"],
|
434
|
+
self.esm_dict["EXCH"],
|
435
|
+
self.esm_dict["QRZ"],
|
436
|
+
self.esm_dict["AGN"],
|
437
|
+
self.esm_dict["HISCALL"],
|
438
|
+
self.esm_dict["MYCALL"],
|
439
|
+
self.esm_dict["QSOB4"],
|
440
|
+
]:
|
441
|
+
if a_button is not None:
|
442
|
+
self.restore_button_color(a_button)
|
443
|
+
|
444
|
+
buttons_to_send = []
|
445
|
+
|
446
|
+
if self.pref.get("run_state"):
|
447
|
+
if self.current_widget == "callsign":
|
448
|
+
if len(self.callsign.text()) < 3:
|
449
|
+
self.make_button_green(self.esm_dict["CQ"])
|
450
|
+
buttons_to_send.append(self.esm_dict["CQ"])
|
451
|
+
elif len(self.callsign.text()) > 2:
|
452
|
+
self.make_button_green(self.esm_dict["HISCALL"])
|
453
|
+
self.make_button_green(self.esm_dict["EXCH"])
|
454
|
+
buttons_to_send.append(self.esm_dict["HISCALL"])
|
455
|
+
buttons_to_send.append(self.esm_dict["EXCH"])
|
456
|
+
|
457
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
458
|
+
if self.other_1.text() == "" or self.other_2.text() == "":
|
459
|
+
self.make_button_green(self.esm_dict["AGN"])
|
460
|
+
buttons_to_send.append(self.esm_dict["AGN"])
|
461
|
+
else:
|
462
|
+
self.make_button_green(self.esm_dict["QRZ"])
|
463
|
+
buttons_to_send.append(self.esm_dict["QRZ"])
|
464
|
+
buttons_to_send.append("LOGIT")
|
465
|
+
|
466
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
467
|
+
for button in buttons_to_send:
|
468
|
+
if button:
|
469
|
+
if button == "LOGIT":
|
470
|
+
self.save_contact()
|
471
|
+
continue
|
472
|
+
self.process_function_key(button)
|
473
|
+
else:
|
474
|
+
if self.current_widget == "callsign":
|
475
|
+
if len(self.callsign.text()) > 2:
|
476
|
+
self.make_button_green(self.esm_dict["MYCALL"])
|
477
|
+
buttons_to_send.append(self.esm_dict["MYCALL"])
|
478
|
+
|
479
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
480
|
+
if self.other_1.text() == "" or self.other_2.text() == "":
|
481
|
+
self.make_button_green(self.esm_dict["AGN"])
|
482
|
+
buttons_to_send.append(self.esm_dict["AGN"])
|
483
|
+
else:
|
484
|
+
self.make_button_green(self.esm_dict["EXCH"])
|
485
|
+
buttons_to_send.append(self.esm_dict["EXCH"])
|
486
|
+
buttons_to_send.append("LOGIT")
|
487
|
+
|
488
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
489
|
+
for button in buttons_to_send:
|
490
|
+
if button:
|
491
|
+
if button == "LOGIT":
|
492
|
+
self.save_contact()
|
493
|
+
continue
|
494
|
+
self.process_function_key(button)
|
@@ -321,3 +321,94 @@ def cabrillo(self):
|
|
321
321
|
|
322
322
|
def recalculate_mults(self):
|
323
323
|
"""Recalculates multipliers after change in logged qso."""
|
324
|
+
|
325
|
+
|
326
|
+
def process_esm(self, new_focused_widget=None, with_enter=False):
|
327
|
+
"""ESM State Machine"""
|
328
|
+
|
329
|
+
# self.pref["run_state"]
|
330
|
+
|
331
|
+
# -----===== Assigned F-Keys =====-----
|
332
|
+
# self.esm_dict["CQ"]
|
333
|
+
# self.esm_dict["EXCH"]
|
334
|
+
# self.esm_dict["QRZ"]
|
335
|
+
# self.esm_dict["AGN"]
|
336
|
+
# self.esm_dict["HISCALL"]
|
337
|
+
# self.esm_dict["MYCALL"]
|
338
|
+
# self.esm_dict["QSOB4"]
|
339
|
+
|
340
|
+
# ----==== text fields ====----
|
341
|
+
# self.callsign
|
342
|
+
# self.sent
|
343
|
+
# self.receive
|
344
|
+
# self.other_1
|
345
|
+
# self.other_2
|
346
|
+
|
347
|
+
if new_focused_widget is not None:
|
348
|
+
self.current_widget = self.inputs_dict.get(new_focused_widget)
|
349
|
+
|
350
|
+
# print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
|
351
|
+
|
352
|
+
for a_button in [
|
353
|
+
self.esm_dict["CQ"],
|
354
|
+
self.esm_dict["EXCH"],
|
355
|
+
self.esm_dict["QRZ"],
|
356
|
+
self.esm_dict["AGN"],
|
357
|
+
self.esm_dict["HISCALL"],
|
358
|
+
self.esm_dict["MYCALL"],
|
359
|
+
self.esm_dict["QSOB4"],
|
360
|
+
]:
|
361
|
+
if a_button is not None:
|
362
|
+
self.restore_button_color(a_button)
|
363
|
+
|
364
|
+
buttons_to_send = []
|
365
|
+
|
366
|
+
if self.pref.get("run_state"):
|
367
|
+
if self.current_widget == "callsign":
|
368
|
+
if len(self.callsign.text()) < 3:
|
369
|
+
self.make_button_green(self.esm_dict["CQ"])
|
370
|
+
buttons_to_send.append(self.esm_dict["CQ"])
|
371
|
+
elif len(self.callsign.text()) > 2:
|
372
|
+
self.make_button_green(self.esm_dict["HISCALL"])
|
373
|
+
self.make_button_green(self.esm_dict["EXCH"])
|
374
|
+
buttons_to_send.append(self.esm_dict["HISCALL"])
|
375
|
+
buttons_to_send.append(self.esm_dict["EXCH"])
|
376
|
+
|
377
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
378
|
+
if self.other_1.text() == "" or self.other_2.text() == "":
|
379
|
+
self.make_button_green(self.esm_dict["AGN"])
|
380
|
+
buttons_to_send.append(self.esm_dict["AGN"])
|
381
|
+
else:
|
382
|
+
self.make_button_green(self.esm_dict["QRZ"])
|
383
|
+
buttons_to_send.append(self.esm_dict["QRZ"])
|
384
|
+
buttons_to_send.append("LOGIT")
|
385
|
+
|
386
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
387
|
+
for button in buttons_to_send:
|
388
|
+
if button:
|
389
|
+
if button == "LOGIT":
|
390
|
+
self.save_contact()
|
391
|
+
continue
|
392
|
+
self.process_function_key(button)
|
393
|
+
else:
|
394
|
+
if self.current_widget == "callsign":
|
395
|
+
if len(self.callsign.text()) > 2:
|
396
|
+
self.make_button_green(self.esm_dict["MYCALL"])
|
397
|
+
buttons_to_send.append(self.esm_dict["MYCALL"])
|
398
|
+
|
399
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
400
|
+
if self.other_1.text() == "" or self.other_2.text() == "":
|
401
|
+
self.make_button_green(self.esm_dict["AGN"])
|
402
|
+
buttons_to_send.append(self.esm_dict["AGN"])
|
403
|
+
else:
|
404
|
+
self.make_button_green(self.esm_dict["EXCH"])
|
405
|
+
buttons_to_send.append(self.esm_dict["EXCH"])
|
406
|
+
buttons_to_send.append("LOGIT")
|
407
|
+
|
408
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
409
|
+
for button in buttons_to_send:
|
410
|
+
if button:
|
411
|
+
if button == "LOGIT":
|
412
|
+
self.save_contact()
|
413
|
+
continue
|
414
|
+
self.process_function_key(button)
|
not1mm/radio.py
CHANGED
@@ -47,6 +47,7 @@ class Radio(QObject):
|
|
47
47
|
def run(self):
|
48
48
|
try:
|
49
49
|
self.cat = CAT(self.interface, self.host, self.port)
|
50
|
+
self.online = self.cat.online
|
50
51
|
self.modes = self.cat.get_mode_list()
|
51
52
|
except ConnectionResetError:
|
52
53
|
...
|
@@ -116,17 +117,19 @@ class Radio(QObject):
|
|
116
117
|
|
117
118
|
if self.cat:
|
118
119
|
self.cat.set_vfo(vfo)
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
120
|
+
|
121
|
+
self.poll_time = datetime.datetime.now()
|
122
|
+
# try:
|
123
|
+
# self.poll_callback.emit(
|
124
|
+
# {
|
125
|
+
# "vfoa": str(self.vfoa),
|
126
|
+
# "mode": self.mode,
|
127
|
+
# "bw": self.bw,
|
128
|
+
# "online": self.online,
|
129
|
+
# }
|
130
|
+
# )
|
131
|
+
# except RuntimeError:
|
132
|
+
# ...
|
130
133
|
|
131
134
|
def set_mode(self, mode):
|
132
135
|
self.mode = mode
|
@@ -134,17 +137,18 @@ class Radio(QObject):
|
|
134
137
|
if self.cat:
|
135
138
|
self.cat.set_mode(mode)
|
136
139
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
140
|
+
self.poll_time = datetime.datetime.now()
|
141
|
+
# try:
|
142
|
+
# self.poll_callback.emit(
|
143
|
+
# {
|
144
|
+
# "vfoa": str(self.vfoa),
|
145
|
+
# "mode": self.mode,
|
146
|
+
# "bw": self.bw,
|
147
|
+
# "online": self.online,
|
148
|
+
# }
|
149
|
+
# )
|
150
|
+
# except RuntimeError:
|
151
|
+
# ...
|
148
152
|
|
149
153
|
def get_modes(self):
|
150
154
|
"""get list of modes"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.10.
|
3
|
+
Version: 24.10.19.1
|
4
4
|
Summary: NOT1MM Logger
|
5
5
|
Author-email: Michael Bridak <michael.bridak@gmail.com>
|
6
6
|
Project-URL: Homepage, https://github.com/mbridak/not1mm
|
@@ -57,7 +57,7 @@ Requires-Dist: Levenshtein
|
|
57
57
|
- [Data and RTTY](#data-and-rtty)
|
58
58
|
- [Other not so supported contests](#other-not-so-supported-contests)
|
59
59
|
- [Our Code Contributors ✨](#our-code-contributors-)
|
60
|
-
- [List of should be working contests](#list-of-should-be-working-contests)
|
60
|
+
- [List of should be working contests, those in bold have ESM](#list-of-should-be-working-contests-those-in-bold-have-esm)
|
61
61
|
- [Recent Changes](#recent-changes)
|
62
62
|
- [Flatpak](#flatpak)
|
63
63
|
- [Installation](#installation)
|
@@ -200,7 +200,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
200
200
|
<img src="https://contrib.rocks/image?repo=mbridak/not1mm" alt="Avatar icons for code contributors." />
|
201
201
|
</a>
|
202
202
|
|
203
|
-
## List of should be working contests
|
203
|
+
## List of should be working contests, those in bold have ESM
|
204
204
|
|
205
205
|
- General Logging (There are better general loggers like QLog, KLog, CQRLog)
|
206
206
|
- 10 10 Fall CW
|
@@ -209,28 +209,30 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
209
209
|
- 10 10 Winter Phone
|
210
210
|
- ARRL 10M
|
211
211
|
- ARRL DX CW, SSB
|
212
|
-
- ARRL Field Day
|
213
|
-
- ARRL Sweepstakes CW, SSB
|
212
|
+
- **ARRL Field Day**
|
213
|
+
- **ARRL Sweepstakes CW, SSB**
|
214
214
|
- ARRL VHF January, June, September
|
215
215
|
- CQ 160 CW, SSB
|
216
|
-
-
|
217
|
-
-
|
218
|
-
-
|
216
|
+
- **CQ WPX CW, RTTY, SSB**
|
217
|
+
- **CQ World Wide CW, RTTY, SSB**
|
218
|
+
- **CWOps CWT**
|
219
219
|
- Helvetia
|
220
220
|
- IARU Fieldday R1 CW, SSB
|
221
221
|
- IARU HF
|
222
222
|
- ICWC MST
|
223
223
|
- Japan International DX CW, SSB
|
224
|
-
-
|
225
|
-
-
|
224
|
+
- **K1USN Slow Speed Test**
|
225
|
+
- **NAQP CW, RTTY, SSB**
|
226
226
|
- Phone Weekly Test
|
227
227
|
- RAC Canada Day
|
228
228
|
- Stew Perry Topband
|
229
|
-
-
|
230
|
-
- Winter Field Day
|
229
|
+
- **Weekly RTTY**
|
230
|
+
- **Winter Field Day**
|
231
231
|
|
232
232
|
## Recent Changes
|
233
233
|
|
234
|
+
- [24-10-19-1] Rewrite part of CAT control.
|
235
|
+
- [24-10-19] Change ESM button states when the run state is toggled. Add ESM to ARRL Field Day and Winter Field Day.
|
234
236
|
- [24-10-18] Fixed marked spots showing the correct time.
|
235
237
|
- [24-10-17-2] Add ESM to ARRL Sweepstakes.
|
236
238
|
- [24-10-17-1] Fix dupe check. Reordered change mode and interface update sequence. Resend mode if rigctld does not report back `RPRT 0`
|
@@ -852,8 +854,8 @@ change.
|
|
852
854
|
|
853
855
|
## Testing Out ESM Currently only in CQ WW
|
854
856
|
|
855
|
-
I caved and started working on ESM or Enter Sends Message.
|
856
|
-
|
857
|
+
I caved and started working on ESM or Enter Sends Message. To test it out you can
|
858
|
+
go to `FILE -> Configuration Settings`
|
857
859
|
|
858
860
|

|
859
861
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256
|
2
|
+
not1mm/__main__.py,sha256=-khTbJLJfigHJkXwWUGGsTJAgUrGmcJteh4LfSQiTIw,136109
|
3
3
|
not1mm/bandmap.py,sha256=_zbfhuPzJAQWxINJoxaulJ-FPvPP7syBq80JZFdcx14,31768
|
4
|
-
not1mm/checkwindow.py,sha256=
|
4
|
+
not1mm/checkwindow.py,sha256=VoENHFGlaLfifR2xVkoiGky8SWktlXfUgEuP4DRS998,10584
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
6
6
|
not1mm/logwindow.py,sha256=pwhiwolmGnW01LF4sjlu3ywLsgfxL6KuGuKuYKYmgeY,44403
|
7
7
|
not1mm/lookupservice.py,sha256=jsFg5tsB9cVnahLP-hI3CMwbjlEpMx944O8RLWntAy4,3342
|
8
|
-
not1mm/radio.py,sha256=
|
8
|
+
not1mm/radio.py,sha256=eu1kBjmttREFZ5tAJpNuQSMrmWeKw4Tb-sjgjChUYUs,4693
|
9
9
|
not1mm/test.py,sha256=atZoDXL9DArK4dS8gBCDmlMt5AHuiVZmFOQIp62hDHg,314
|
10
10
|
not1mm/vfo.py,sha256=IvmUQYMIPzLJw_BHQGis4J_IEW-vlBtdfxZLXPh7OzI,12335
|
11
11
|
not1mm/voice_keying.py,sha256=sA3gw5_k7kShTg2qhG7HkKDM5M6KheJVRkAc_C7mxDk,3006
|
@@ -94,7 +94,7 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
|
|
94
94
|
not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
|
95
95
|
not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
96
|
not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
|
97
|
-
not1mm/lib/cat_interface.py,sha256=
|
97
|
+
not1mm/lib/cat_interface.py,sha256=Vkxq4JvWguP8O95JYUfQ5hrllzggm6jeFXFiTBKvnw8,22534
|
98
98
|
not1mm/lib/cwinterface.py,sha256=3H_Ur5qtZCg6AA-CBURdnS3IUcvs3YAcwYLO0S8SUBg,3621
|
99
99
|
not1mm/lib/database.py,sha256=nUVG5H2Dy98PGp6Qdr3xU7zM8-8-IiyqRkXZWlWzIe8,44446
|
100
100
|
not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
|
@@ -114,7 +114,7 @@ not1mm/lib/plugin_common.py,sha256=TbFUbftjELFt4QRdsjSHbqnXSngZOlSwlCTClqosDXA,9
|
|
114
114
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
115
115
|
not1mm/lib/settings.py,sha256=7_JFDSKPOd35Gwzqhrbed4EfrlYUm7AEnz2xBRioc-g,13280
|
116
116
|
not1mm/lib/super_check_partial.py,sha256=p5l3u2ZOCBtlWgbvskC50FpuoaIpR07tfC6zTdRWbh4,2334
|
117
|
-
not1mm/lib/version.py,sha256=
|
117
|
+
not1mm/lib/version.py,sha256=REJFwf-QzUFmZbPaCt8ug69o4c0mIZ7atBTUgjfuFvM,51
|
118
118
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
119
119
|
not1mm/plugins/10_10_fall_cw.py,sha256=IttjX1yy4nDdACGsiYlPteFG8eVseX_WtoFio6bqHE8,10953
|
120
120
|
not1mm/plugins/10_10_spring_cw.py,sha256=ThCptdM3dX4ywhoy2JRcOEyHSqcJolFaT7O_PYzM1Mg,10958
|
@@ -124,7 +124,7 @@ not1mm/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
124
124
|
not1mm/plugins/arrl_10m.py,sha256=EyNRb3Sm0Qb-GVm0p05EnadlHisVh7y-sKTBP2ddMLo,13768
|
125
125
|
not1mm/plugins/arrl_dx_cw.py,sha256=LVnYDNFEUiIpQ1TlhOCcRK7JNwH5XPO5WzUoApSUMTY,13802
|
126
126
|
not1mm/plugins/arrl_dx_ssb.py,sha256=fUFzuNbCAfA5sQSYm8ISV3P9Z_2xnuKeOdO6E66zn1k,13805
|
127
|
-
not1mm/plugins/arrl_field_day.py,sha256=
|
127
|
+
not1mm/plugins/arrl_field_day.py,sha256=uXlu2fBGvr2sgcja9IxAiyOCy_ZJuA4NVWfIIA8gN-c,16048
|
128
128
|
not1mm/plugins/arrl_rtty_ru.py,sha256=hKUS4isjdXo3EYxQrsqsDupPp2chW8fpoWj0T1pTgJ4,7994
|
129
129
|
not1mm/plugins/arrl_ss_cw.py,sha256=egbIe-WBmM6oqmc7uWzSnRJaNIImHs8Hgs4PtNfpnEQ,16339
|
130
130
|
not1mm/plugins/arrl_ss_phone.py,sha256=zSD3WBFFWpiOo7RWgMfPduzFxshTczXtwK-OXqGV9aE,16327
|
@@ -157,10 +157,10 @@ not1mm/plugins/phone_weekly_test.py,sha256=fLpMe03WB9_KgRl6vMgQQt_aktFdqfNt2Sw81
|
|
157
157
|
not1mm/plugins/ref_cw.py,sha256=aWjHHkqIKutjRUtzh09y5haFfnZK9poRQDWRQMDRxxU,16326
|
158
158
|
not1mm/plugins/stew_perry_topband.py,sha256=CKBQbYl4ETxhXJd2dma4fg_C5pag_s7Nf61SCztZtqE,10668
|
159
159
|
not1mm/plugins/weekly_rtty.py,sha256=ipgY-KlKlEHafnBg-_AFk9KhiXkGTvb4ENoezIeD7jU,18185
|
160
|
-
not1mm/plugins/winter_field_day.py,sha256=
|
161
|
-
not1mm-24.10.
|
162
|
-
not1mm-24.10.
|
163
|
-
not1mm-24.10.
|
164
|
-
not1mm-24.10.
|
165
|
-
not1mm-24.10.
|
166
|
-
not1mm-24.10.
|
160
|
+
not1mm/plugins/winter_field_day.py,sha256=nPuPxdK1FimPsHk-uz_3MA4cBqBp6WcwApk7PZwWeWg,13579
|
161
|
+
not1mm-24.10.19.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
162
|
+
not1mm-24.10.19.1.dist-info/METADATA,sha256=_hE0BsfDaVqXVyb6AwKp2_arwek7BxvkhbmtcavIoqo,34592
|
163
|
+
not1mm-24.10.19.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
164
|
+
not1mm-24.10.19.1.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
165
|
+
not1mm-24.10.19.1.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
166
|
+
not1mm-24.10.19.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|