not1mm 24.10.10__py3-none-any.whl → 24.10.13__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 CHANGED
@@ -199,6 +199,13 @@ class MainWindow(QtWidgets.QMainWindow):
199
199
  self.setCorner(Qt.Corner.BottomLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea)
200
200
  uic.loadUi(fsutils.APP_DATA_PATH / "main.ui", self)
201
201
  QApplication.instance().focusObjectChanged.connect(self.on_focus_changed)
202
+ self.inputs_dict = {
203
+ self.callsign: "callsign",
204
+ self.sent: "sent",
205
+ self.receive: "receive",
206
+ self.other_1: "other_1",
207
+ self.other_2: "other_2",
208
+ }
202
209
  self.cw_entry.hide()
203
210
  self.leftdot.hide()
204
211
  self.rightdot.hide()
@@ -2107,6 +2114,10 @@ class MainWindow(QtWidgets.QMainWindow):
2107
2114
  float(self.radio_state.get("vfoa", 0.0)) / 1000, 2
2108
2115
  )
2109
2116
  self.contact["Mode"] = self.radio_state.get("mode", "")
2117
+ self.contact["Freq"] = round(float(self.radio_state.get("vfoa", 0.0)) / 1000, 2)
2118
+ self.contact["QSXFreq"] = round(
2119
+ float(self.radio_state.get("vfoa", 0.0)) / 1000, 2
2120
+ )
2110
2121
  self.contact["ContestName"] = self.contest.cabrillo_name
2111
2122
  self.contact["ContestNR"] = self.pref.get("contest", "0")
2112
2123
  self.contact["StationPrefix"] = self.station.get("Call", "")
@@ -2465,7 +2476,7 @@ class MainWindow(QtWidgets.QMainWindow):
2465
2476
  app.processEvents()
2466
2477
  self.rig_control.ptt_off()
2467
2478
 
2468
- def process_function_key(self, function_key) -> None:
2479
+ def process_function_key(self, function_key, rttysendrx=True) -> None:
2469
2480
  """
2470
2481
  Called when a function key is clicked.
2471
2482
 
@@ -2495,7 +2506,10 @@ class MainWindow(QtWidgets.QMainWindow):
2495
2506
  "DIGI-U",
2496
2507
  "DIGI-L",
2497
2508
  ]:
2498
- self.fldigi_util.send_string(self.process_macro(function_key.toolTip()))
2509
+ self.fldigi_util.send_string(
2510
+ self.process_macro(function_key.toolTip()), rxafter=rttysendrx
2511
+ )
2512
+ return
2499
2513
  if self.cw:
2500
2514
  if self.pref.get("cwtype") == 3 and self.rig_control is not None:
2501
2515
  self.rig_control.sendcw(self.process_macro(function_key.toolTip()))
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.10.10"
3
+ __version__ = "24.10.13"
@@ -403,15 +403,8 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
403
403
  # self.other_1
404
404
  # self.other_2
405
405
 
406
- inputs = {
407
- self.callsign: "callsign",
408
- self.sent: "sent",
409
- self.receive: "receive",
410
- self.other_1: "other_1",
411
- self.other_2: "other_2",
412
- }
413
406
  if new_focused_widget is not None:
414
- self.current_widget = inputs.get(new_focused_widget)
407
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
415
408
 
416
409
  # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
417
410
 
@@ -444,7 +437,7 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
444
437
  buttons_to_send.append(self.esm_dict["HISCALL"])
445
438
  buttons_to_send.append(self.esm_dict["EXCH"])
446
439
 
447
- if self.current_widget == "other_2":
440
+ elif self.current_widget == "other_2":
448
441
  if self.other_2.text() == "":
449
442
  self.make_button_green(self.esm_dict["AGN"])
450
443
  buttons_to_send.append(self.esm_dict["AGN"])
@@ -469,7 +462,7 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
469
462
  self.make_button_green(self.esm_dict["MYCALL"])
470
463
  buttons_to_send.append(self.esm_dict["MYCALL"])
471
464
 
472
- if self.current_widget == "other_2":
465
+ elif self.current_widget == "other_2":
473
466
  if self.other_2.text() == "":
474
467
  self.make_button_green(self.esm_dict["AGN"])
475
468
  buttons_to_send.append(self.esm_dict["AGN"])
@@ -146,7 +146,7 @@ def set_contact_vars(self):
146
146
  self.contact["ZN"] = self.other_1.text()
147
147
  self.contact["Exchange1"] = self.other_2.text()
148
148
  self.contact["SentNr"] = self.contest_settings.get("SentExchange", 0)
149
-
149
+
150
150
 
151
151
  def predupe(self):
152
152
  """called after callsign entered"""
@@ -195,7 +195,11 @@ def show_mults(self):
195
195
  res3_query = f"select count(DISTINCT(Exchange1 || ':' || Band)) as spc_count from dxlog where ContestNR = {self.database.current_contest};"
196
196
  result3 = self.database.exec_sql(res3_query)
197
197
  if result1 and result2 and result3:
198
- return int(result1.get("zb_count", 0)) + int(result2.get("cb_count", 0)) + int(result3.get("spc_count", 0))
198
+ return (
199
+ int(result1.get("zb_count", 0))
200
+ + int(result2.get("cb_count", 0))
201
+ + int(result3.get("spc_count", 0))
202
+ )
199
203
  return 0
200
204
 
201
205
 
@@ -366,21 +370,21 @@ def cabrillo(self):
366
370
  if themode == "LSB" or themode == "USB":
367
371
  themode = "PH"
368
372
  if themode.strip() in (
369
- "RTTY",
370
- "RTTY-R",
371
- "LSB-D",
372
- "USB-D",
373
- "AM-D",
374
- "FM-D",
375
- "DIGI-U",
376
- "DIGI-L",
377
- "RTTYR",
378
- "PKTLSB",
379
- "PKTUSB",
380
- ):
373
+ "RTTY",
374
+ "RTTY-R",
375
+ "LSB-D",
376
+ "USB-D",
377
+ "AM-D",
378
+ "FM-D",
379
+ "DIGI-U",
380
+ "DIGI-L",
381
+ "RTTYR",
382
+ "PKTLSB",
383
+ "PKTUSB",
384
+ ):
381
385
  themode = "RY"
382
- exchange1 = contact.get('Exchange1', '')
383
- if exchange1 == '':
386
+ exchange1 = contact.get("Exchange1", "")
387
+ if exchange1 == "":
384
388
  exchange1 = "DX"
385
389
  frequency = str(int(contact.get("Freq", "0"))).rjust(5)
386
390
 
@@ -491,3 +495,108 @@ def ft8_handler(the_packet: dict):
491
495
  ALTEREGO.other_1.setText(str(the_packet.get("CQZ", "ERR")))
492
496
  ALTEREGO.other_2.setText(f'{the_packet.get("STATE", "")}'.strip())
493
497
  ALTEREGO.save_contact()
498
+
499
+
500
+ def process_esm(self, new_focused_widget=None, with_enter=False):
501
+ """ESM State Machine"""
502
+
503
+ # self.pref["run_state"]
504
+
505
+ # -----===== Assigned F-Keys =====-----
506
+ # self.esm_dict["CQ"]
507
+ # self.esm_dict["EXCH"]
508
+ # self.esm_dict["QRZ"]
509
+ # self.esm_dict["AGN"]
510
+ # self.esm_dict["HISCALL"]
511
+ # self.esm_dict["MYCALL"]
512
+ # self.esm_dict["QSOB4"]
513
+
514
+ # ----==== text fields ====----
515
+ # self.callsign
516
+ # self.sent
517
+ # self.receive
518
+ # self.other_1
519
+ # self.other_2
520
+
521
+ if new_focused_widget is not None:
522
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
523
+
524
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
525
+
526
+ for a_button in [
527
+ self.F1,
528
+ self.F2,
529
+ self.F3,
530
+ self.F4,
531
+ self.F5,
532
+ self.F6,
533
+ self.F7,
534
+ self.F8,
535
+ self.F9,
536
+ self.F10,
537
+ self.F11,
538
+ self.F12,
539
+ ]:
540
+ self.restore_button_color(a_button)
541
+
542
+ buttons_to_send = []
543
+
544
+ if self.pref.get("run_state"):
545
+ if self.current_widget == "callsign":
546
+ if len(self.callsign.text()) < 3:
547
+ self.make_button_green(self.esm_dict["CQ"])
548
+ buttons_to_send.append(self.esm_dict["CQ"])
549
+ elif len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
550
+ self.make_button_green(self.esm_dict["HISCALL"])
551
+ self.make_button_green(self.esm_dict["EXCH"])
552
+ buttons_to_send.append(self.esm_dict["HISCALL"])
553
+ buttons_to_send.append(self.esm_dict["EXCH"])
554
+
555
+ elif self.current_widget in ["other_1", "other_2"]:
556
+ if self.other_2.text() == "" or self.other_1.text() == "":
557
+ self.make_button_green(self.esm_dict["AGN"])
558
+ buttons_to_send.append(self.esm_dict["AGN"])
559
+ elif self.other_1.text().isnumeric() and self.other_2.text().isalpha():
560
+ self.make_button_green(self.esm_dict["QRZ"])
561
+ buttons_to_send.append(self.esm_dict["QRZ"])
562
+ buttons_to_send.append("LOGIT")
563
+ else:
564
+ self.make_button_green(self.esm_dict["AGN"])
565
+ buttons_to_send.append(self.esm_dict["AGN"])
566
+
567
+ if with_enter is True and bool(len(buttons_to_send)):
568
+ sendstring = ""
569
+ for button in buttons_to_send:
570
+ if button:
571
+ if button == "LOGIT":
572
+ self.save_contact()
573
+ continue
574
+ sendstring = f"{sendstring}{self.process_macro(button.toolTip())} "
575
+ self.fldigi_util.send_string(sendstring)
576
+ else:
577
+ if self.current_widget == "callsign":
578
+ if len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
579
+ self.make_button_green(self.esm_dict["MYCALL"])
580
+ buttons_to_send.append(self.esm_dict["MYCALL"])
581
+
582
+ elif self.current_widget in ["other_1", "other_2"]:
583
+ if self.other_2.text() == "" or self.other_1.text() == "":
584
+ self.make_button_green(self.esm_dict["AGN"])
585
+ buttons_to_send.append(self.esm_dict["AGN"])
586
+ elif self.other_1.text().isnumeric() and self.other_2.text().isalpha():
587
+ self.make_button_green(self.esm_dict["EXCH"])
588
+ buttons_to_send.append(self.esm_dict["EXCH"])
589
+ buttons_to_send.append("LOGIT")
590
+ else:
591
+ self.make_button_green(self.esm_dict["AGN"])
592
+ buttons_to_send.append(self.esm_dict["AGN"])
593
+
594
+ if with_enter is True and bool(len(buttons_to_send)):
595
+ sendstring = ""
596
+ for button in buttons_to_send:
597
+ if button:
598
+ if button == "LOGIT":
599
+ self.save_contact()
600
+ continue
601
+ sendstring = f"{sendstring}{self.process_macro(button.toolTip())} "
602
+ self.fldigi_util.send_string(sendstring)
@@ -380,3 +380,102 @@ def cabrillo(self):
380
380
 
381
381
  def recalculate_mults(self):
382
382
  """Recalculates multipliers after change in logged qso."""
383
+
384
+
385
+ def process_esm(self, new_focused_widget=None, with_enter=False):
386
+ """ESM State Machine"""
387
+
388
+ # self.pref["run_state"]
389
+
390
+ # -----===== Assigned F-Keys =====-----
391
+ # self.esm_dict["CQ"]
392
+ # self.esm_dict["EXCH"]
393
+ # self.esm_dict["QRZ"]
394
+ # self.esm_dict["AGN"]
395
+ # self.esm_dict["HISCALL"]
396
+ # self.esm_dict["MYCALL"]
397
+ # self.esm_dict["QSOB4"]
398
+
399
+ # ----==== text fields ====----
400
+ # self.callsign
401
+ # self.sent
402
+ # self.receive
403
+ # self.other_1
404
+ # self.other_2
405
+
406
+ if new_focused_widget is not None:
407
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
408
+
409
+ for a_button in [
410
+ self.F1,
411
+ self.F2,
412
+ self.F3,
413
+ self.F4,
414
+ self.F5,
415
+ self.F6,
416
+ self.F7,
417
+ self.F8,
418
+ self.F9,
419
+ self.F10,
420
+ self.F11,
421
+ self.F12,
422
+ ]:
423
+ self.restore_button_color(a_button)
424
+
425
+ buttons_to_send = []
426
+
427
+ if self.pref.get("run_state"):
428
+ if self.current_widget == "callsign":
429
+ if len(self.callsign.text()) < 3:
430
+ self.make_button_green(self.esm_dict["CQ"])
431
+ buttons_to_send.append(self.esm_dict["CQ"])
432
+ elif len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
433
+ self.make_button_green(self.esm_dict["HISCALL"])
434
+ self.make_button_green(self.esm_dict["EXCH"])
435
+ buttons_to_send.append(self.esm_dict["HISCALL"])
436
+ buttons_to_send.append(self.esm_dict["EXCH"])
437
+
438
+ elif self.current_widget == "other_2":
439
+ if self.other_2.text() == "":
440
+ self.make_button_green(self.esm_dict["AGN"])
441
+ buttons_to_send.append(self.esm_dict["AGN"])
442
+ elif self.other_2.text().isnumeric():
443
+ self.make_button_green(self.esm_dict["QRZ"])
444
+ buttons_to_send.append(self.esm_dict["QRZ"])
445
+ buttons_to_send.append("LOGIT")
446
+ else:
447
+ self.make_button_green(self.esm_dict["AGN"])
448
+ buttons_to_send.append(self.esm_dict["AGN"])
449
+
450
+ if with_enter is True and bool(len(buttons_to_send)):
451
+ for button in buttons_to_send:
452
+ if button:
453
+ if button == "LOGIT":
454
+ self.save_contact()
455
+ continue
456
+ self.process_function_key(button)
457
+ else:
458
+ if self.current_widget == "callsign":
459
+ if len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
460
+ self.make_button_green(self.esm_dict["MYCALL"])
461
+ buttons_to_send.append(self.esm_dict["MYCALL"])
462
+
463
+ elif self.current_widget == "other_2":
464
+ if self.other_2.text() == "":
465
+ self.make_button_green(self.esm_dict["AGN"])
466
+ buttons_to_send.append(self.esm_dict["AGN"])
467
+ elif self.other_2.text().isnumeric():
468
+ self.make_button_green(self.esm_dict["EXCH"])
469
+ buttons_to_send.append(self.esm_dict["EXCH"])
470
+ buttons_to_send.append("LOGIT")
471
+ else:
472
+ self.make_button_green(self.esm_dict["AGN"])
473
+ buttons_to_send.append(self.esm_dict["AGN"])
474
+
475
+ if with_enter is True and bool(len(buttons_to_send)):
476
+ for button in buttons_to_send:
477
+ if button:
478
+ if button == "LOGIT":
479
+ self.save_contact()
480
+ continue
481
+ self.process_function_key(button)
not1mm/plugins/cwt.py CHANGED
@@ -390,3 +390,102 @@ def recalculate_mults(self):
390
390
  else:
391
391
  contact["IsMultiplier1"] = 0
392
392
  self.database.change_contact(contact)
393
+
394
+
395
+ def process_esm(self, new_focused_widget=None, with_enter=False):
396
+ """ESM State Machine"""
397
+
398
+ # self.pref["run_state"]
399
+
400
+ # -----===== Assigned F-Keys =====-----
401
+ # self.esm_dict["CQ"]
402
+ # self.esm_dict["EXCH"]
403
+ # self.esm_dict["QRZ"]
404
+ # self.esm_dict["AGN"]
405
+ # self.esm_dict["HISCALL"]
406
+ # self.esm_dict["MYCALL"]
407
+ # self.esm_dict["QSOB4"]
408
+
409
+ # ----==== text fields ====----
410
+ # self.callsign
411
+ # self.sent
412
+ # self.receive
413
+ # self.other_1
414
+ # self.other_2
415
+
416
+ if new_focused_widget is not None:
417
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
418
+
419
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
420
+
421
+ for a_button in [
422
+ self.F1,
423
+ self.F2,
424
+ self.F3,
425
+ self.F4,
426
+ self.F5,
427
+ self.F6,
428
+ self.F7,
429
+ self.F8,
430
+ self.F9,
431
+ self.F10,
432
+ self.F11,
433
+ self.F12,
434
+ ]:
435
+ self.restore_button_color(a_button)
436
+
437
+ buttons_to_send = []
438
+
439
+ if self.pref.get("run_state"):
440
+ if self.current_widget == "callsign":
441
+ if len(self.callsign.text()) < 3:
442
+ self.make_button_green(self.esm_dict["CQ"])
443
+ buttons_to_send.append(self.esm_dict["CQ"])
444
+ elif len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
445
+ self.make_button_green(self.esm_dict["HISCALL"])
446
+ self.make_button_green(self.esm_dict["EXCH"])
447
+ buttons_to_send.append(self.esm_dict["HISCALL"])
448
+ buttons_to_send.append(self.esm_dict["EXCH"])
449
+
450
+ elif self.current_widget in ["other_1", "other_2"]:
451
+ if self.other_2.text() == "" or self.other_1.text() == "":
452
+ self.make_button_green(self.esm_dict["AGN"])
453
+ buttons_to_send.append(self.esm_dict["AGN"])
454
+ elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
455
+ self.make_button_green(self.esm_dict["QRZ"])
456
+ buttons_to_send.append(self.esm_dict["QRZ"])
457
+ buttons_to_send.append("LOGIT")
458
+ else:
459
+ self.make_button_green(self.esm_dict["AGN"])
460
+ buttons_to_send.append(self.esm_dict["AGN"])
461
+ if with_enter is True and bool(len(buttons_to_send)):
462
+ for button in buttons_to_send:
463
+ if button:
464
+ if button == "LOGIT":
465
+ self.save_contact()
466
+ continue
467
+ self.process_function_key(button)
468
+ else:
469
+ if self.current_widget == "callsign":
470
+ if len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
471
+ self.make_button_green(self.esm_dict["MYCALL"])
472
+ buttons_to_send.append(self.esm_dict["MYCALL"])
473
+
474
+ elif self.current_widget in ["other_1", "other_2"]:
475
+ if self.other_2.text() == "" or self.other_1.text() == "":
476
+ self.make_button_green(self.esm_dict["AGN"])
477
+ buttons_to_send.append(self.esm_dict["AGN"])
478
+ elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
479
+ self.make_button_green(self.esm_dict["EXCH"])
480
+ buttons_to_send.append(self.esm_dict["EXCH"])
481
+ buttons_to_send.append("LOGIT")
482
+ else:
483
+ self.make_button_green(self.esm_dict["AGN"])
484
+ buttons_to_send.append(self.esm_dict["AGN"])
485
+ if with_enter is True and bool(len(buttons_to_send)):
486
+ for button in buttons_to_send:
487
+ if button:
488
+ if button == "LOGIT":
489
+ self.save_contact()
490
+ continue
491
+ self.process_function_key(button)
@@ -365,3 +365,102 @@ def recalculate_mults(self):
365
365
  cmd["cmd"] = "UPDATELOG"
366
366
  cmd["station"] = platform.node()
367
367
  self.multicast_interface.send_as_json(cmd)
368
+
369
+
370
+ def process_esm(self, new_focused_widget=None, with_enter=False):
371
+ """ESM State Machine"""
372
+
373
+ # self.pref["run_state"]
374
+
375
+ # -----===== Assigned F-Keys =====-----
376
+ # self.esm_dict["CQ"]
377
+ # self.esm_dict["EXCH"]
378
+ # self.esm_dict["QRZ"]
379
+ # self.esm_dict["AGN"]
380
+ # self.esm_dict["HISCALL"]
381
+ # self.esm_dict["MYCALL"]
382
+ # self.esm_dict["QSOB4"]
383
+
384
+ # ----==== text fields ====----
385
+ # self.callsign
386
+ # self.sent
387
+ # self.receive
388
+ # self.other_1
389
+ # self.other_2
390
+
391
+ if new_focused_widget is not None:
392
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
393
+
394
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
395
+
396
+ for a_button in [
397
+ self.F1,
398
+ self.F2,
399
+ self.F3,
400
+ self.F4,
401
+ self.F5,
402
+ self.F6,
403
+ self.F7,
404
+ self.F8,
405
+ self.F9,
406
+ self.F10,
407
+ self.F11,
408
+ self.F12,
409
+ ]:
410
+ self.restore_button_color(a_button)
411
+
412
+ buttons_to_send = []
413
+
414
+ if self.pref.get("run_state"):
415
+ if self.current_widget == "callsign":
416
+ if len(self.callsign.text()) < 3:
417
+ self.make_button_green(self.esm_dict["CQ"])
418
+ buttons_to_send.append(self.esm_dict["CQ"])
419
+ elif len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
420
+ self.make_button_green(self.esm_dict["HISCALL"])
421
+ self.make_button_green(self.esm_dict["EXCH"])
422
+ buttons_to_send.append(self.esm_dict["HISCALL"])
423
+ buttons_to_send.append(self.esm_dict["EXCH"])
424
+
425
+ elif self.current_widget in ["other_1", "other_2"]:
426
+ if self.other_2.text() == "" or self.other_1.text() == "":
427
+ self.make_button_green(self.esm_dict["AGN"])
428
+ buttons_to_send.append(self.esm_dict["AGN"])
429
+ elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
430
+ self.make_button_green(self.esm_dict["QRZ"])
431
+ buttons_to_send.append(self.esm_dict["QRZ"])
432
+ buttons_to_send.append("LOGIT")
433
+ else:
434
+ self.make_button_green(self.esm_dict["AGN"])
435
+ buttons_to_send.append(self.esm_dict["AGN"])
436
+ if with_enter is True and bool(len(buttons_to_send)):
437
+ for button in buttons_to_send:
438
+ if button:
439
+ if button == "LOGIT":
440
+ self.save_contact()
441
+ continue
442
+ self.process_function_key(button)
443
+ else:
444
+ if self.current_widget == "callsign":
445
+ if len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
446
+ self.make_button_green(self.esm_dict["MYCALL"])
447
+ buttons_to_send.append(self.esm_dict["MYCALL"])
448
+
449
+ elif self.current_widget in ["other_1", "other_2"]:
450
+ if self.other_2.text() == "" or self.other_1.text() == "":
451
+ self.make_button_green(self.esm_dict["AGN"])
452
+ buttons_to_send.append(self.esm_dict["AGN"])
453
+ elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
454
+ self.make_button_green(self.esm_dict["EXCH"])
455
+ buttons_to_send.append(self.esm_dict["EXCH"])
456
+ buttons_to_send.append("LOGIT")
457
+ else:
458
+ self.make_button_green(self.esm_dict["AGN"])
459
+ buttons_to_send.append(self.esm_dict["AGN"])
460
+ if with_enter is True and bool(len(buttons_to_send)):
461
+ for button in buttons_to_send:
462
+ if button:
463
+ if button == "LOGIT":
464
+ self.save_contact()
465
+ continue
466
+ self.process_function_key(button)
@@ -440,3 +440,108 @@ def ft8_handler(the_packet: dict):
440
440
  ALTEREGO.contact["IsMultiplier1"] = 1
441
441
  logger.debug(f"{ALTEREGO.contact=}")
442
442
  ALTEREGO.save_contact()
443
+
444
+
445
+ def process_esm(self, new_focused_widget=None, with_enter=False):
446
+ """ESM State Machine"""
447
+
448
+ # self.pref["run_state"]
449
+
450
+ # -----===== Assigned F-Keys =====-----
451
+ # self.esm_dict["CQ"]
452
+ # self.esm_dict["EXCH"]
453
+ # self.esm_dict["QRZ"]
454
+ # self.esm_dict["AGN"]
455
+ # self.esm_dict["HISCALL"]
456
+ # self.esm_dict["MYCALL"]
457
+ # self.esm_dict["QSOB4"]
458
+
459
+ # ----==== text fields ====----
460
+ # self.callsign
461
+ # self.sent
462
+ # self.receive
463
+ # self.other_1
464
+ # self.other_2
465
+
466
+ if new_focused_widget is not None:
467
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
468
+
469
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
470
+
471
+ for a_button in [
472
+ self.F1,
473
+ self.F2,
474
+ self.F3,
475
+ self.F4,
476
+ self.F5,
477
+ self.F6,
478
+ self.F7,
479
+ self.F8,
480
+ self.F9,
481
+ self.F10,
482
+ self.F11,
483
+ self.F12,
484
+ ]:
485
+ self.restore_button_color(a_button)
486
+
487
+ buttons_to_send = []
488
+
489
+ if self.pref.get("run_state"):
490
+ if self.current_widget == "callsign":
491
+ if len(self.callsign.text()) < 3:
492
+ self.make_button_green(self.esm_dict["CQ"])
493
+ buttons_to_send.append(self.esm_dict["CQ"])
494
+ elif len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
495
+ self.make_button_green(self.esm_dict["HISCALL"])
496
+ self.make_button_green(self.esm_dict["EXCH"])
497
+ buttons_to_send.append(self.esm_dict["HISCALL"])
498
+ buttons_to_send.append(self.esm_dict["EXCH"])
499
+
500
+ elif self.current_widget in ["other_1", "other_2"]:
501
+ if self.other_2.text() == "" or self.other_1.text() == "":
502
+ self.make_button_green(self.esm_dict["AGN"])
503
+ buttons_to_send.append(self.esm_dict["AGN"])
504
+ elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
505
+ self.make_button_green(self.esm_dict["QRZ"])
506
+ buttons_to_send.append(self.esm_dict["QRZ"])
507
+ buttons_to_send.append("LOGIT")
508
+ else:
509
+ self.make_button_green(self.esm_dict["AGN"])
510
+ buttons_to_send.append(self.esm_dict["AGN"])
511
+
512
+ if with_enter is True and bool(len(buttons_to_send)):
513
+ sendstring = ""
514
+ for button in buttons_to_send:
515
+ if button:
516
+ if button == "LOGIT":
517
+ self.save_contact()
518
+ continue
519
+ sendstring = f"{sendstring}{self.process_macro(button.toolTip())} "
520
+ self.fldigi_util.send_string(sendstring)
521
+ else:
522
+ if self.current_widget == "callsign":
523
+ if len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
524
+ self.make_button_green(self.esm_dict["MYCALL"])
525
+ buttons_to_send.append(self.esm_dict["MYCALL"])
526
+
527
+ elif self.current_widget in ["other_1", "other_2"]:
528
+ if self.other_2.text() == "" or self.other_1.text() == "":
529
+ self.make_button_green(self.esm_dict["AGN"])
530
+ buttons_to_send.append(self.esm_dict["AGN"])
531
+ elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
532
+ self.make_button_green(self.esm_dict["EXCH"])
533
+ buttons_to_send.append(self.esm_dict["EXCH"])
534
+ buttons_to_send.append("LOGIT")
535
+ else:
536
+ self.make_button_green(self.esm_dict["AGN"])
537
+ buttons_to_send.append(self.esm_dict["AGN"])
538
+
539
+ if with_enter is True and bool(len(buttons_to_send)):
540
+ sendstring = ""
541
+ for button in buttons_to_send:
542
+ if button:
543
+ if button == "LOGIT":
544
+ self.save_contact()
545
+ continue
546
+ sendstring = f"{sendstring}{self.process_macro(button.toolTip())} "
547
+ self.fldigi_util.send_string(sendstring)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.10.10
3
+ Version: 24.10.13
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
@@ -118,16 +118,16 @@ Requires-Dist: Levenshtein
118
118
  - [Cabrillo](#cabrillo)
119
119
  - [ADIF](#adif)
120
120
  - [Recalulate Mults](#recalulate-mults)
121
- - [Testing Out ESM Currently only in CQ WW CW](#testing-out-esm-currently-only-in-cq-ww-cw)
122
- - [Run States](#run-states)
123
- - [CQ](#cq)
124
- - [Call Entered send His Call and the Exchange](#call-entered-send-his-call-and-the-exchange)
125
- - [Empty exchange field send AGN till you get it](#empty-exchange-field-send-agn-till-you-get-it)
126
- - [Exchange field filled, send TU QRZ and logs it](#exchange-field-filled-send-tu-qrz-and-logs-it)
127
- - [S\&P States](#sp-states)
128
- - [With his call entered, Send your call](#with-his-call-entered-send-your-call)
129
- - [If no exchange entered send AGN](#if-no-exchange-entered-send-agn)
130
- - [With exchange entered, send your exchange and log it](#with-exchange-entered-send-your-exchange-and-log-it)
121
+ - [Testing Out ESM Currently only in CQ WW](#testing-out-esm-currently-only-in-cq-ww)
122
+ - [Run States](#run-states)
123
+ - [CQ](#cq)
124
+ - [Call Entered send His Call and the Exchange](#call-entered-send-his-call-and-the-exchange)
125
+ - [Empty exchange field send AGN till you get it](#empty-exchange-field-send-agn-till-you-get-it)
126
+ - [Exchange field filled, send TU QRZ and logs it](#exchange-field-filled-send-tu-qrz-and-logs-it)
127
+ - [S\&P States](#sp-states)
128
+ - [With his call entered, Send your call](#with-his-call-entered-send-your-call)
129
+ - [If no exchange entered send AGN](#if-no-exchange-entered-send-agn)
130
+ - [With exchange entered, send your exchange and log it](#with-exchange-entered-send-your-exchange-and-log-it)
131
131
  - [Contest specific notes](#contest-specific-notes)
132
132
  - [ARRL Sweekstakes](#arrl-sweekstakes)
133
133
  - [The exchange parser](#the-exchange-parser)
@@ -181,7 +181,9 @@ when the program craps the bed. I'm only one guy, so if you see a bug let me kno
181
181
 
182
182
  I've recently added portions of code to watch for WSTJ-X and fldigi QSOs. I've added
183
183
  the Weekly RTTY Test, So RTTY could be tested. Also added FT8/4 and RTTY to ARRL Field
184
- Day and ARRL VHF. Praying that it works. I'll add more details later.
184
+ Day and ARRL VHF. Found works better if you don't use FlDigi for making the QSO at all.
185
+ Rather just using it as a RTTY modem and sending the text for it to send from Not1MM
186
+ using the function keys or ESM.
185
187
 
186
188
  ### Other not so supported contests
187
189
 
@@ -212,23 +214,25 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
212
214
  - ARRL VHF January, June, September
213
215
  - CQ 160 CW, SSB
214
216
  - CQ WPX CW, RTTY, SSB
215
- - CQ World Wide CW, RTTY, SSB
216
- - CWOps CWT
217
+ - .CQ World Wide CW, RTTY, SSB
218
+ - .CWOps CWT
217
219
  - Helvetia
218
220
  - IARU Fieldday R1 CW, SSB
219
221
  - IARU HF
220
222
  - ICWC MST
221
223
  - Japan International DX CW, SSB
222
- - K1USN Slow Speed Test
224
+ - .K1USN Slow Speed Test
223
225
  - NAQP CW, SSB
224
226
  - Phone Weekly Test
225
227
  - RAC Canada Day
226
228
  - Stew Perry Topband
227
- - Weekly RTTY
229
+ - .Weekly RTTY
228
230
  - Winter Field Day
229
231
 
230
232
  ## Recent Changes
231
233
 
234
+ - [24-10-13] Added ESM to Weekly RTTY, K1USN and CWT.
235
+ - [24-10-11] added ESM to CQWW SSB and RTTY.
232
236
  - [24-10-10] Add ESM to CQ WW CW to test it out.
233
237
  - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
234
238
  - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
@@ -730,7 +734,7 @@ is this has happened, since the gridsquare will replace the word "Regional".
730
734
  | [TAB] | Move cursor to the right one field. |
731
735
  | [Shift-Tab] | Move cursor left One field. |
732
736
  | [SPACE] | When in the callsign field, will move the input to the first field needed for the exchange. |
733
- | [Enter] | Submits the fields to the log. |
737
+ | [Enter] | Submits the fields to the log. Unless ESM is enabled. |
734
738
  | [F1-F12] | Send (CW/RTTY/Voice) macros. |
735
739
  | [CTRL-S] | Spot Callsign to the cluster. |
736
740
  | [CTRL-M] | Mark Callsign to the bandmap window to work later. |
@@ -839,15 +843,14 @@ After editing a contact and before generating a Cabrillo file. There is a Misc
839
843
  menu option that will recalculate the multipliers incase an edit had caused a
840
844
  change.
841
845
 
842
- ## Testing Out ESM Currently only in CQ WW CW
846
+ ## Testing Out ESM Currently only in CQ WW
843
847
 
844
848
  I caved and started working on ESM or Enter Sends Message. Currently it is only
845
- working in the CQ WW CW. To test it out you can go to `FILE -> Configuration Settings`
846
-
847
- ![Config Screen](https://private-user-images.githubusercontent.com/49108421/375571913-1fbb1da1-5b81-45f8-8b6d-412702add200.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzE5MTMtMWZiYjFkYTEtNWI4MS00NWY4LThiNmQtNDEyNzAyYWRkMjAwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2NDBlZTliMTFlYzc1NjE1MzA4MjE1YTVkMzlhNmIwNzYzYjVlMzM5MDdjNTlkODVlODY1MzBlZWJmZWEzMWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DITQPUAHkFLk1ezFxvQYLCJVaq8vrUDm_5EbfDLJbsE)
849
+ working in the CQ WW. To test it out you can go to `FILE -> Configuration Settings`
848
850
 
851
+ ![Config Screen](https://github.com/mbridak/not1mm/raw/master/pic/esm_config.png)
849
852
 
850
- Check the mark to Use ESM and tell it which function keys do what. The keys will need
853
+ Check the mark to Enable ESM and tell it which function keys do what. The keys will need
851
854
  to have the same function in both Run and S&P modes. The function keys will highlight
852
855
  green depending on the state of the input fields. The green keys will be sent if you
853
856
  press the Enter key. You should use the Space bar to move to another field.
@@ -855,38 +858,37 @@ press the Enter key. You should use the Space bar to move to another field.
855
858
  The contact will be automatically logged once all the needed info is collected and the
856
859
  QRZ (for Run) or Exchange (for S&P) is sent.
857
860
 
858
- ## Run States
859
-
860
- ### CQ
861
+ ### Run States
861
862
 
862
- ![CQ](https://private-user-images.githubusercontent.com/49108421/375572433-a156588d-83b5-4edd-b9f6-4ab4291c258c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI0MzMtYTE1NjU4OGQtODNiNS00ZWRkLWI5ZjYtNGFiNDI5MWMyNThjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVjYTdjZDhhMmJiZTA5NTdmNDIxNTgxMmY5NmJmNDBiZmZjZTk2MTAyODM4NjYxYWQzY2Q3NGNkN2ZiYzZmNTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.44q-Ns0aWBLBFARF8Oyb2wxF0olZx28eddPyp_p_T3s)
863
+ #### CQ
863
864
 
864
- ### Call Entered send His Call and the Exchange
865
+ ![CQ](https://github.com/mbridak/not1mm/raw/master/pic/esm_cq.png)
865
866
 
866
- ![Call Entered send His Call and the Exchange.](https://private-user-images.githubusercontent.com/49108421/375572785-1d9f6a33-1cd1-4e08-82d5-b11851e279c7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI3ODUtMWQ5ZjZhMzMtMWNkMS00ZTA4LTgyZDUtYjExODUxZTI3OWM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEyZmEzOGM4ZmQ4MTNlZmM5ZDA2N2FmNDBkNTYzOTVmYTM3NzFiY2Q4NDE1ZTlkYzhmMjhiNGI4NGJiMmMzY2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.KcEd-CBbY2MHKrApqmXkr06Pcb0kvYyxK8tdQH3doc4)
867
+ #### Call Entered send His Call and the Exchange
867
868
 
868
- ### Empty exchange field send AGN till you get it
869
+ ![Call Entered send His Call and the Exchange.](https://github.com/mbridak/not1mm/raw/master/pic/esm_withcall.png)
869
870
 
870
- ![Empty exchange field send AGN till you get it](https://private-user-images.githubusercontent.com/49108421/375573288-3fa5f231-0648-412a-94d7-06ab38e1334f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzMyODgtM2ZhNWYyMzEtMDY0OC00MTJhLTk0ZDctMDZhYjM4ZTEzMzRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIxNjA5NWM0MWI2ZmU0ODNmYjY2N2M5YTdjNzQ5ZDdkZWZkZmE3MDI2NjBlNzc4YmNhNTNjYjMzOTI4MjIwMzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.VycMnaYPKW08YmCQmeGpQWToDpNNaEmNZ3LAnEQUifM)
871
+ #### Empty exchange field send AGN till you get it
871
872
 
872
- ### Exchange field filled, send TU QRZ and logs it
873
+ ![Empty exchange field send AGN till you get it](https://github.com/mbridak/not1mm/raw/master/pic/esm_empty_exchange.png)
873
874
 
874
- ![Exchange field filled, send TU QRZ and logs it](https://private-user-images.githubusercontent.com/49108421/375573434-b6ee0617-60ac-4937-82cc-e1b1428899d5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM0MzQtYjZlZTA2MTctNjBhYy00OTM3LTgyY2MtZTFiMTQyODg5OWQ1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQxNzM4ODY2NWViNzNhZjI2OWRiYzQ0ZTBmMWIxOTRhODRiZDI1ZjQ3OWI0YjY5OGM4OGYxYmRjYWVjYjYzNjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yCx8NWkE9Ep-NKv2oxEjWWDMraBZsov59GzHspC3jmk)
875
+ #### Exchange field filled, send TU QRZ and logs it
875
876
 
876
- ## S&P States
877
+ ![Exchange field filled, send TU QRZ and logs it](https://github.com/mbridak/not1mm/raw/master/pic/esm_qrz.png)
877
878
 
878
- ### With his call entered, Send your call
879
+ ### S&P States
879
880
 
880
- ![With his call entered, Send your call](https://private-user-images.githubusercontent.com/49108421/375573821-67dd35c7-8563-4ad6-bee6-7f7514e7d3a6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM4MjEtNjdkZDM1YzctODU2My00YWQ2LWJlZTYtN2Y3NTE0ZTdkM2E2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdkNDRmYmI2MThlYjg2ZjU5NjY3OWY2YTEyMGU2YWQ5YjIyM2NhY2QzODVhY2U3ZGZhMDI3ZDQzMmY1MTU5MWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.p8JisS0D5noIDRUAjwkOyxpzR10MhIYmW-y8h2ngnZo)
881
+ #### With his call entered, Send your call
881
882
 
882
- ### If no exchange entered send AGN
883
+ ![With his call entered, Send your call](https://github.com/mbridak/not1mm/raw/master/pic/esm_sp_call.png)
883
884
 
884
- ![If no exchange entered send AGN](https://private-user-images.githubusercontent.com/49108421/375573957-9753786b-3018-4821-b07a-42bdf50b4468.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM5NTctOTc1Mzc4NmItMzAxOC00ODIxLWIwN2EtNDJiZGY1MGI0NDY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY5M2E1MzllOTc3YmEwNDZkOWFlYmEyMmQzNDc0YTUwYThmNzk1ODQ4M2IzMGExNjQyMTdlMzkyYzdmZjgyODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.We-bPqprJ24HQW7eCjxFKuUxWJwawRZWab74INuSyyA)
885
+ #### If no exchange entered send AGN
885
886
 
886
- ### With exchange entered, send your exchange and log it
887
+ ![If no exchange entered send AGN](https://github.com/mbridak/not1mm/raw/master/pic/esm_sp_agn.png)
887
888
 
888
- ![With exchange entered, send your exchange and log it](https://private-user-images.githubusercontent.com/49108421/375574075-9857287e-ce11-44c8-a7de-417912988f08.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzQwNzUtOTg1NzI4N2UtY2UxMS00NGM4LWE3ZGUtNDE3OTEyOTg4ZjA4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThmNzZiOTRkMzQyOGIxMWUzMjM4ZWVjMzI3ZTkzZjc3OThkZjI5NWYxYTNkYTQ0ZDYyNzJkMTA5ZjQwNDBmMzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.YtD5IoXhSmSUs53ofWJUmuJZqca2Uhe6dYk8JyOHBgM)
889
+ #### With exchange entered, send your exchange and log it
889
890
 
891
+ ![With exchange entered, send your exchange and log it](https://github.com/mbridak/not1mm/raw/master/pic/esm_sp_logit.png)
890
892
 
891
893
  ## Contest specific notes
892
894
 
@@ -1,5 +1,5 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=m9GEvmOqtLldHG6w_gk8j2oSzGXi6RqBnxnVjGvlwpQ,134547
2
+ not1mm/__main__.py,sha256=gcIDO3SWrPRwZHBLEhLt2EkDXPobcNJm4sfbVCiUlM8,135056
3
3
  not1mm/bandmap.py,sha256=P91rYGmd8r5K6TRNZt7kqqW6zCBVlFA1_n9-V7as1WE,31672
4
4
  not1mm/checkwindow.py,sha256=aI-nr8OF90IWV7R_XRdmitvBJ9M85evCs72HoU3Jnvc,10374
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
@@ -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=_D_ukQUdYbZSA6fI-cZ2OwXpNOQ_nr5d5rAAmQskuEQ,49
117
+ not1mm/lib/version.py,sha256=q7NDhdxfKwSoplAUZ4PnE04xcUPNrL0y0CIuVwQoOXw,49
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
@@ -137,10 +137,10 @@ not1mm/plugins/cq_160_ssb.py,sha256=zIwSMAjHSt6W2edrDzVbyTf860JowHoFkU9BKO8Enag,
137
137
  not1mm/plugins/cq_wpx_cw.py,sha256=9aNzAR-KhznIwUlxUFjAi_hbiw_6RrCMwUBk9I2f6Hs,14037
138
138
  not1mm/plugins/cq_wpx_rtty.py,sha256=PpU_PxjQGeMjzbofYNsl-No37s7IgkPyW2bKFRkN9jU,16473
139
139
  not1mm/plugins/cq_wpx_ssb.py,sha256=-hGRovqHR9rfOUnG4LPOoABTb4heH8VAX6rYdJbCqsw,12687
140
- not1mm/plugins/cq_ww_cw.py,sha256=rtJynxy4RAYXwGOk76k6DbVN1lo-Zl9voFH5t2OgplA,16130
141
- not1mm/plugins/cq_ww_rtty.py,sha256=WnqSfCNX6ieLZlUg_P_vx-Z2iY0lxdwEgPuT9aax1JU,16772
142
- not1mm/plugins/cq_ww_ssb.py,sha256=hZwG88-hPLmwIGXHX_S_ty8Nhn1kIuPjSuTRpCWoN9g,12631
143
- not1mm/plugins/cwt.py,sha256=KvvkEfQrYSra0y8qE4yThvZNLrZcslt0IqYEomDpf-M,12774
140
+ not1mm/plugins/cq_ww_cw.py,sha256=kJCL4dIJOEW9O45vPTjWhQpa7KPZv8fkEAs4MJHpfkY,15962
141
+ not1mm/plugins/cq_ww_rtty.py,sha256=njYqgr9ZijRaZgPwYumt95jrCE8kmFg4zwbaaJY1cMU,20772
142
+ not1mm/plugins/cq_ww_ssb.py,sha256=NGNysV6MR7OILLtfMF1Gp82gErjUEyekJ0WnWkUhgHA,16156
143
+ not1mm/plugins/cwt.py,sha256=AWUEZFY1ezts3dfHw1iKeXum-IdxXnoqe1LoenxputE,16542
144
144
  not1mm/plugins/general_logging.py,sha256=n-2es7erqK1ptwq_wwIKIwktptKN7ra2eWjAQlpXUac,3479
145
145
  not1mm/plugins/helvetia.py,sha256=6aOO4uiLzFFgHA-A3xz6IRdCJpqPOAm0egKxP5Y_Ie0,15432
146
146
  not1mm/plugins/iaru_fieldday_r1_cw.py,sha256=B_kh8d8LkC0va_iIiIzImOKAT8724yf9ceF-2eQdx1w,13301
@@ -149,17 +149,17 @@ not1mm/plugins/iaru_hf.py,sha256=-ROUo2gBkw3xB89t8bd-4f7_1hROw2VXZXVHLFdB62s,115
149
149
  not1mm/plugins/icwc_mst.py,sha256=v8L5NX2QmTM7x8Po1mb4yfN-dGVIuqky5MIT-OjfaVY,11831
150
150
  not1mm/plugins/jidx_cw.py,sha256=9oV4hDxMiGXa9wuYUNYOCsr-mz8LYB-4WMHBN8u2dFk,12153
151
151
  not1mm/plugins/jidx_ph.py,sha256=T-V7-77SIwu-Jl55VIrbVFZlsBoc97mXtgbdde0GaiQ,11183
152
- not1mm/plugins/k1usn_sst.py,sha256=2Nu7SRiQeUG3mL9CLKReRLh8vKsNbWcizMgv9MTLkrg,11671
152
+ not1mm/plugins/k1usn_sst.py,sha256=l-_r-Ve1txpJF1UyqoaOKUXjTaKxQtzxCbXd7fZCZIg,15439
153
153
  not1mm/plugins/naqp_cw.py,sha256=c0MuKqfkIxiYFvv2z7vqrBz3m9FSnSYkPK3f-DdkTIA,12632
154
154
  not1mm/plugins/naqp_ssb.py,sha256=VLWVrSzI0UP1AhSXYn61eZ7or1rz6a_pS_xCKfgS4Jw,11595
155
155
  not1mm/plugins/phone_weekly_test.py,sha256=fLpMe03WB9_KgRl6vMgQQt_aktFdqfNt2Sw81CTRAUs,12325
156
156
  not1mm/plugins/ref_cw.py,sha256=aWjHHkqIKutjRUtzh09y5haFfnZK9poRQDWRQMDRxxU,16326
157
157
  not1mm/plugins/stew_perry_topband.py,sha256=CKBQbYl4ETxhXJd2dma4fg_C5pag_s7Nf61SCztZtqE,10668
158
- not1mm/plugins/weekly_rtty.py,sha256=DQcy3SY0Zn56EdlYGf3NxrRhTnkNa5IqRQPRQdKDSPs,14255
158
+ not1mm/plugins/weekly_rtty.py,sha256=S_oBAnsIq2ng7FunIB2qukdZyhMzQKGDAlQFc9UUr-U,18255
159
159
  not1mm/plugins/winter_field_day.py,sha256=4rcfRtobwjHO6BNL3WOTHzBmyyeuX79BNGBG8PfjrI8,10238
160
- not1mm-24.10.10.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
161
- not1mm-24.10.10.dist-info/METADATA,sha256=LAq5jcblrc5PwviH6M4bpuKNRuMiBrJA47vV93OUT5o,39215
162
- not1mm-24.10.10.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
163
- not1mm-24.10.10.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
164
- not1mm-24.10.10.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
165
- not1mm-24.10.10.dist-info/RECORD,,
160
+ not1mm-24.10.13.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
161
+ not1mm-24.10.13.dist-info/METADATA,sha256=cKxGN7jzBI96YacfuCjzLpqevDpL4rwPpg4Om3fh0pg,33778
162
+ not1mm-24.10.13.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
163
+ not1mm-24.10.13.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
164
+ not1mm-24.10.13.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
165
+ not1mm-24.10.13.dist-info/RECORD,,