not1mm 24.11.18__py3-none-any.whl → 24.11.21__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.
Files changed (56) hide show
  1. not1mm/__main__.py +3 -1
  2. not1mm/data/donors.html +1 -0
  3. not1mm/lib/cat_interface.py +16 -1
  4. not1mm/lib/plugin_common.py +20 -1
  5. not1mm/lib/version.py +1 -1
  6. not1mm/plugins/10_10_fall_cw.py +12 -24
  7. not1mm/plugins/10_10_spring_cw.py +12 -24
  8. not1mm/plugins/10_10_summer_phone.py +12 -22
  9. not1mm/plugins/10_10_winter_phone.py +12 -24
  10. not1mm/plugins/arrl_10m.py +16 -29
  11. not1mm/plugins/arrl_dx_cw.py +11 -22
  12. not1mm/plugins/arrl_dx_ssb.py +11 -22
  13. not1mm/plugins/arrl_field_day.py +14 -22
  14. not1mm/plugins/arrl_rtty_ru.py +10 -22
  15. not1mm/plugins/arrl_ss_cw.py +14 -29
  16. not1mm/plugins/arrl_ss_phone.py +14 -29
  17. not1mm/plugins/arrl_vhf_jan.py +14 -29
  18. not1mm/plugins/arrl_vhf_jun.py +14 -29
  19. not1mm/plugins/arrl_vhf_sep.py +14 -29
  20. not1mm/plugins/canada_day.py +14 -29
  21. not1mm/plugins/cq_160_cw.py +10 -24
  22. not1mm/plugins/cq_160_ssb.py +10 -24
  23. not1mm/plugins/cq_wpx_cw.py +12 -25
  24. not1mm/plugins/cq_wpx_rtty.py +12 -25
  25. not1mm/plugins/cq_wpx_ssb.py +14 -29
  26. not1mm/plugins/cq_ww_cw.py +11 -22
  27. not1mm/plugins/cq_ww_rtty.py +12 -26
  28. not1mm/plugins/cq_ww_ssb.py +11 -22
  29. not1mm/plugins/cwt.py +12 -26
  30. not1mm/plugins/darc_xmas.py +15 -31
  31. not1mm/plugins/general_logging.py +125 -26
  32. not1mm/plugins/helvetia.py +15 -26
  33. not1mm/plugins/iaru_fieldday_r1_cw.py +12 -25
  34. not1mm/plugins/iaru_fieldday_r1_ssb.py +12 -25
  35. not1mm/plugins/iaru_hf.py +11 -22
  36. not1mm/plugins/icwc_mst.py +136 -40
  37. not1mm/plugins/jidx_cw.py +102 -23
  38. not1mm/plugins/jidx_ph.py +106 -29
  39. not1mm/plugins/k1usn_sst.py +10 -16
  40. not1mm/plugins/lz-dx.py +17 -28
  41. not1mm/plugins/naqp_cw.py +11 -17
  42. not1mm/plugins/naqp_rtty.py +11 -17
  43. not1mm/plugins/naqp_ssb.py +11 -17
  44. not1mm/plugins/phone_weekly_test.py +101 -16
  45. not1mm/plugins/raem.py +26 -25
  46. not1mm/plugins/ref_cw.py +17 -28
  47. not1mm/plugins/ref_ssb.py +32 -28
  48. not1mm/plugins/stew_perry_topband.py +102 -16
  49. not1mm/plugins/weekly_rtty.py +17 -16
  50. not1mm/plugins/winter_field_day.py +28 -24
  51. {not1mm-24.11.18.dist-info → not1mm-24.11.21.dist-info}/METADATA +9 -8
  52. {not1mm-24.11.18.dist-info → not1mm-24.11.21.dist-info}/RECORD +56 -56
  53. {not1mm-24.11.18.dist-info → not1mm-24.11.21.dist-info}/WHEEL +1 -1
  54. {not1mm-24.11.18.dist-info → not1mm-24.11.21.dist-info}/LICENSE +0 -0
  55. {not1mm-24.11.18.dist-info → not1mm-24.11.21.dist-info}/entry_points.txt +0 -0
  56. {not1mm-24.11.18.dist-info → not1mm-24.11.21.dist-info}/top_level.txt +0 -0
not1mm/plugins/ref_cw.py CHANGED
@@ -93,12 +93,10 @@ def interface(self):
93
93
  self.field2.show()
94
94
  self.field3.show()
95
95
  self.field4.show()
96
- label = self.field3.findChild(QtWidgets.QLabel)
97
- label.setText("Sent")
98
- self.field3.setAccessibleName("Sent")
99
- label = self.field4.findChild(QtWidgets.QLabel)
100
- label.setText("Dep/Pfx/SN")
101
- self.field4.setAccessibleName("Department, Prefix or SN")
96
+ self.other_label.setText("Sent")
97
+ self.other_1.setAccessibleName("Sent")
98
+ self.exch_label.setText("Dep/Pfx/SN")
99
+ self.other_2.setAccessibleName("Department, Prefix or SN")
102
100
 
103
101
 
104
102
  def reset_label(self):
@@ -108,30 +106,22 @@ def reset_label(self):
108
106
  def set_tab_next(self):
109
107
  """Set TAB Advances"""
110
108
  self.tab_next = {
111
- self.callsign: self.field3.findChild(QtWidgets.QLineEdit),
112
- self.field1.findChild(QtWidgets.QLineEdit): self.field3.findChild(
113
- QtWidgets.QLineEdit
114
- ),
115
- self.field2.findChild(QtWidgets.QLineEdit): self.field3.findChild(
116
- QtWidgets.QLineEdit
117
- ),
118
- self.field3.findChild(QtWidgets.QLineEdit): self.field4.findChild(
119
- QtWidgets.QLineEdit
120
- ),
121
- self.field4.findChild(QtWidgets.QLineEdit): self.callsign,
109
+ self.callsign: self.other_1,
110
+ self.sent: self.other_1,
111
+ self.receive: self.other_1,
112
+ self.other_1: self.other_2,
113
+ self.other_2: self.callsign,
122
114
  }
123
115
 
124
116
 
125
117
  def set_tab_prev(self):
126
118
  """Set TAB Advances"""
127
119
  self.tab_prev = {
128
- self.callsign: self.field4.findChild(QtWidgets.QLineEdit),
129
- self.field1.findChild(QtWidgets.QLineEdit): self.callsign,
130
- self.field2.findChild(QtWidgets.QLineEdit): self.callsign,
131
- self.field3.findChild(QtWidgets.QLineEdit): self.callsign,
132
- self.field4.findChild(QtWidgets.QLineEdit): self.field3.findChild(
133
- QtWidgets.QLineEdit
134
- ),
120
+ self.callsign: self.other_2,
121
+ self.sent: self.callsign,
122
+ self.receive: self.callsign,
123
+ self.other_1: self.callsign,
124
+ self.other_2: self.other_1,
135
125
  }
136
126
 
137
127
 
@@ -188,17 +178,16 @@ def predupe(self):
188
178
 
189
179
  def prefill(self):
190
180
  """Fill SentNR"""
191
- field = self.field3.findChild(QtWidgets.QLineEdit)
192
181
  sent_sxchange_setting = self.contest_settings.get("SentExchange", "")
193
182
  if sent_sxchange_setting.strip() == "#":
194
183
  result = self.database.get_serial()
195
184
  serial_nr = str(result.get("serial_nr", "1")).zfill(3)
196
185
  if serial_nr == "None":
197
186
  serial_nr = "001"
198
- if len(field.text()) == 0:
199
- field.setText(serial_nr)
187
+ if len(self.other_1.text()) == 0:
188
+ self.other_1.setText(serial_nr)
200
189
  else:
201
- field.setText(sent_sxchange_setting)
190
+ self.other_1.setText(sent_sxchange_setting)
202
191
 
203
192
 
204
193
  def points(self):
not1mm/plugins/ref_ssb.py CHANGED
@@ -39,6 +39,21 @@ Cabrillo name: REF-SSB
39
39
  Cabrillo name aliases: REF
40
40
  """
41
41
 
42
+ # Label and field names
43
+ # callsign_label, callsign
44
+ # snt_label, sent
45
+ # rcv_label, receive
46
+ # other_label, other_1
47
+ # exch_label, other_2
48
+
49
+ # command button names
50
+ # esc_stop
51
+ # log_it
52
+ # mark
53
+ # spot_it
54
+ # wipe
55
+
56
+
42
57
  import datetime
43
58
  import logging
44
59
  import platform
@@ -93,12 +108,10 @@ def interface(self):
93
108
  self.field2.show()
94
109
  self.field3.show()
95
110
  self.field4.show()
96
- label = self.field3.findChild(QtWidgets.QLabel)
97
- label.setText("Sent")
98
- self.field3.setAccessibleName("Sent")
99
- label = self.field4.findChild(QtWidgets.QLabel)
100
- label.setText("Dep/Pfx/SN")
101
- self.field4.setAccessibleName("Department, Prefix or SN")
111
+ self.other_label.setText("Sent")
112
+ self.other_1.setAccessibleName("Sent")
113
+ self.exch_label.setText("Dep/Pfx/SN")
114
+ self.other_2.setAccessibleName("Department, Prefix or SN")
102
115
 
103
116
 
104
117
  def reset_label(self):
@@ -108,30 +121,22 @@ def reset_label(self):
108
121
  def set_tab_next(self):
109
122
  """Set TAB Advances"""
110
123
  self.tab_next = {
111
- self.callsign: self.field3.findChild(QtWidgets.QLineEdit),
112
- self.field1.findChild(QtWidgets.QLineEdit): self.field3.findChild(
113
- QtWidgets.QLineEdit
114
- ),
115
- self.field2.findChild(QtWidgets.QLineEdit): self.field3.findChild(
116
- QtWidgets.QLineEdit
117
- ),
118
- self.field3.findChild(QtWidgets.QLineEdit): self.field4.findChild(
119
- QtWidgets.QLineEdit
120
- ),
121
- self.field4.findChild(QtWidgets.QLineEdit): self.callsign,
124
+ self.callsign: self.other_1,
125
+ self.sent: self.other_1,
126
+ self.receive: self.other_1,
127
+ self.other_1: self.other_2,
128
+ self.other_2: self.callsign,
122
129
  }
123
130
 
124
131
 
125
132
  def set_tab_prev(self):
126
133
  """Set TAB Advances"""
127
134
  self.tab_prev = {
128
- self.callsign: self.field4.findChild(QtWidgets.QLineEdit),
129
- self.field1.findChild(QtWidgets.QLineEdit): self.callsign,
130
- self.field2.findChild(QtWidgets.QLineEdit): self.callsign,
131
- self.field3.findChild(QtWidgets.QLineEdit): self.callsign,
132
- self.field4.findChild(QtWidgets.QLineEdit): self.field3.findChild(
133
- QtWidgets.QLineEdit
134
- ),
135
+ self.callsign: self.other_2,
136
+ self.sent: self.callsign,
137
+ self.receive: self.callsign,
138
+ self.other_1: self.callsign,
139
+ self.other_2: self.other_1,
135
140
  }
136
141
 
137
142
 
@@ -188,17 +193,16 @@ def predupe(self):
188
193
 
189
194
  def prefill(self):
190
195
  """Fill SentNR"""
191
- field = self.field3.findChild(QtWidgets.QLineEdit)
192
196
  sent_sxchange_setting = self.contest_settings.get("SentExchange", "")
193
197
  if sent_sxchange_setting.strip() == "#":
194
198
  result = self.database.get_serial()
195
199
  serial_nr = str(result.get("serial_nr", "1")).zfill(3)
196
200
  if serial_nr == "None":
197
201
  serial_nr = "001"
198
- if len(field.text()) == 0:
199
- field.setText(serial_nr)
202
+ if len(self.other_1.text()) == 0:
203
+ self.other_1.setText(serial_nr)
200
204
  else:
201
- field.setText(sent_sxchange_setting)
205
+ self.other_1.setText(sent_sxchange_setting)
202
206
 
203
207
 
204
208
  def points(self):
@@ -75,10 +75,9 @@ def interface(self):
75
75
  self.field3.show()
76
76
  self.field4.hide()
77
77
  self.snt_label.setText("SNT")
78
- self.field1.setAccessibleName("RST Sent")
79
- label = self.field3.findChild(QtWidgets.QLabel)
80
- label.setText("Grid")
81
- self.field3.setAccessibleName("Grid")
78
+ self.sent.setAccessibleName("RST Sent")
79
+ self.other_label.setText("Grid")
80
+ self.other_1.setAccessibleName("Grid")
82
81
 
83
82
 
84
83
  def reset_label(self):
@@ -88,24 +87,20 @@ def reset_label(self):
88
87
  def set_tab_next(self):
89
88
  """Set TAB Advances"""
90
89
  self.tab_next = {
91
- self.callsign: self.field3.findChild(QtWidgets.QLineEdit),
92
- self.field1.findChild(QtWidgets.QLineEdit): self.field3.findChild(
93
- QtWidgets.QLineEdit
94
- ),
95
- self.field2.findChild(QtWidgets.QLineEdit): self.field3.findChild(
96
- QtWidgets.QLineEdit
97
- ),
98
- self.field3.findChild(QtWidgets.QLineEdit): self.callsign,
90
+ self.callsign: self.other_1,
91
+ self.sent: self.other_1,
92
+ self.receive: self.other_1,
93
+ self.other_1: self.callsign,
99
94
  }
100
95
 
101
96
 
102
97
  def set_tab_prev(self):
103
98
  """Set TAB Advances"""
104
99
  self.tab_prev = {
105
- self.callsign: self.field3.findChild(QtWidgets.QLineEdit),
106
- self.field1.findChild(QtWidgets.QLineEdit): self.callsign,
107
- self.field2.findChild(QtWidgets.QLineEdit): self.callsign,
108
- self.field3.findChild(QtWidgets.QLineEdit): self.callsign,
100
+ self.callsign: self.other_1,
101
+ self.sent: self.callsign,
102
+ self.receive: self.callsign,
103
+ self.other_1: self.callsign,
109
104
  }
110
105
 
111
106
 
@@ -383,3 +378,94 @@ def check_call_history(self):
383
378
  self.history_info.setText(f"{result.get('UserText','')}")
384
379
  if self.other_1.text() == "":
385
380
  self.other_1.setText(f"{result.get('Loc1', '')}")
381
+
382
+
383
+ def process_esm(self, new_focused_widget=None, with_enter=False):
384
+ """ESM State Machine"""
385
+
386
+ # self.pref["run_state"]
387
+
388
+ # -----===== Assigned F-Keys =====-----
389
+ # self.esm_dict["CQ"]
390
+ # self.esm_dict["EXCH"]
391
+ # self.esm_dict["QRZ"]
392
+ # self.esm_dict["AGN"]
393
+ # self.esm_dict["HISCALL"]
394
+ # self.esm_dict["MYCALL"]
395
+ # self.esm_dict["QSOB4"]
396
+
397
+ # ----==== text fields ====----
398
+ # self.callsign
399
+ # self.sent
400
+ # self.receive
401
+ # self.other_1
402
+ # self.other_2
403
+
404
+ if new_focused_widget is not None:
405
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
406
+
407
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
408
+
409
+ for a_button in [
410
+ self.esm_dict["CQ"],
411
+ self.esm_dict["EXCH"],
412
+ self.esm_dict["QRZ"],
413
+ self.esm_dict["AGN"],
414
+ self.esm_dict["HISCALL"],
415
+ self.esm_dict["MYCALL"],
416
+ self.esm_dict["QSOB4"],
417
+ ]:
418
+ if a_button is not None:
419
+ self.restore_button_color(a_button)
420
+
421
+ buttons_to_send = []
422
+
423
+ if self.pref.get("run_state"):
424
+ if self.current_widget == "callsign":
425
+ if len(self.callsign.text()) < 3:
426
+ self.make_button_green(self.esm_dict["CQ"])
427
+ buttons_to_send.append(self.esm_dict["CQ"])
428
+ elif len(self.callsign.text()) > 2:
429
+ self.make_button_green(self.esm_dict["HISCALL"])
430
+ self.make_button_green(self.esm_dict["EXCH"])
431
+ buttons_to_send.append(self.esm_dict["HISCALL"])
432
+ buttons_to_send.append(self.esm_dict["EXCH"])
433
+
434
+ elif self.current_widget in ["other_1", "other_2"]:
435
+ if self.other_1.text() == "":
436
+ self.make_button_green(self.esm_dict["AGN"])
437
+ buttons_to_send.append(self.esm_dict["AGN"])
438
+ else:
439
+ self.make_button_green(self.esm_dict["QRZ"])
440
+ buttons_to_send.append(self.esm_dict["QRZ"])
441
+ buttons_to_send.append("LOGIT")
442
+
443
+ if with_enter is True and bool(len(buttons_to_send)):
444
+ for button in buttons_to_send:
445
+ if button:
446
+ if button == "LOGIT":
447
+ self.save_contact()
448
+ continue
449
+ self.process_function_key(button)
450
+ else:
451
+ if self.current_widget == "callsign":
452
+ if len(self.callsign.text()) > 2:
453
+ self.make_button_green(self.esm_dict["MYCALL"])
454
+ buttons_to_send.append(self.esm_dict["MYCALL"])
455
+
456
+ elif self.current_widget in ["other_1", "other_2"]:
457
+ if self.other_1.text() == "":
458
+ self.make_button_green(self.esm_dict["AGN"])
459
+ buttons_to_send.append(self.esm_dict["AGN"])
460
+ else:
461
+ self.make_button_green(self.esm_dict["EXCH"])
462
+ buttons_to_send.append(self.esm_dict["EXCH"])
463
+ buttons_to_send.append("LOGIT")
464
+
465
+ if with_enter is True and bool(len(buttons_to_send)):
466
+ for button in buttons_to_send:
467
+ if button:
468
+ if button == "LOGIT":
469
+ self.save_contact()
470
+ continue
471
+ self.process_function_key(button)
@@ -18,6 +18,13 @@
18
18
  # Mail logs to: (none)
19
19
  # Find rules at: https://radiosport.world/wrt.html
20
20
 
21
+ # Label and field names
22
+ # callsign_label, callsign
23
+ # snt_label, sent
24
+ # rcv_label, receive
25
+ # other_label, other_1
26
+ # exch_label, other_2
27
+
21
28
  import datetime
22
29
  import logging
23
30
  import platform
@@ -69,12 +76,10 @@ def interface(self):
69
76
  self.field2.hide()
70
77
  self.field3.show()
71
78
  self.field4.show()
72
- namefield = self.field3.findChild(QtWidgets.QLabel)
73
- namefield.setText("Name")
74
- self.field3.setAccessibleName("Name")
75
- spc = self.field4.findChild(QtWidgets.QLabel)
76
- spc.setText("SPC")
77
- self.field4.setAccessibleName("SPC")
79
+ self.other_label.setText("Name")
80
+ self.other_1.setAccessibleName("Name")
81
+ self.exch_label.setText("SPC")
82
+ self.other_2.setAccessibleName("SPC")
78
83
 
79
84
 
80
85
  def reset_label(self):
@@ -84,22 +89,18 @@ def reset_label(self):
84
89
  def set_tab_next(self):
85
90
  """Set TAB Advances"""
86
91
  self.tab_next = {
87
- self.callsign: self.field3.findChild(QtWidgets.QLineEdit),
88
- self.field3.findChild(QtWidgets.QLineEdit): self.field4.findChild(
89
- QtWidgets.QLineEdit
90
- ),
91
- self.field4.findChild(QtWidgets.QLineEdit): self.callsign,
92
+ self.callsign: self.other_1,
93
+ self.other_1: self.other_2,
94
+ self.other_2: self.callsign,
92
95
  }
93
96
 
94
97
 
95
98
  def set_tab_prev(self):
96
99
  """Set TAB Advances"""
97
100
  self.tab_prev = {
98
- self.callsign: self.field4.findChild(QtWidgets.QLineEdit),
99
- self.field3.findChild(QtWidgets.QLineEdit): self.callsign,
100
- self.field4.findChild(QtWidgets.QLineEdit): self.field3.findChild(
101
- QtWidgets.QLineEdit
102
- ),
101
+ self.callsign: self.other_2,
102
+ self.other_1: self.callsign,
103
+ self.other_2: self.other_1,
103
104
  }
104
105
 
105
106
 
@@ -2,6 +2,20 @@
2
2
 
3
3
  # pylint: disable=invalid-name, unused-argument, unused-variable, c-extension-no-member
4
4
 
5
+ # Label and field names
6
+ # callsign_label, callsign
7
+ # snt_label, sent
8
+ # rcv_label, receive
9
+ # other_label, other_1
10
+ # exch_label, other_2
11
+
12
+ # command button names
13
+ # esc_stop
14
+ # log_it
15
+ # mark
16
+ # spot_it
17
+ # wipe
18
+
5
19
  import datetime
6
20
  import logging
7
21
 
@@ -48,12 +62,10 @@ def interface(self):
48
62
  self.field2.hide()
49
63
  self.field3.show()
50
64
  self.field4.show()
51
- label = self.field3.findChild(QtWidgets.QLabel)
52
- label.setText("Class")
53
- self.field3.setAccessibleName("Class")
54
- label = self.field4.findChild(QtWidgets.QLabel)
55
- label.setText("Section")
56
- self.field4.setAccessibleName("Section")
65
+ self.other_label.setText("Class")
66
+ self.other_1.setAccessibleName("Class")
67
+ self.exch_label.setText("Section")
68
+ self.other_2.setAccessibleName("Section")
57
69
 
58
70
 
59
71
  def reset_label(self):
@@ -63,30 +75,22 @@ def reset_label(self):
63
75
  def set_tab_next(self):
64
76
  """Set TAB Advances"""
65
77
  self.tab_next = {
66
- self.callsign: self.field3.findChild(QtWidgets.QLineEdit),
67
- self.field1.findChild(QtWidgets.QLineEdit): self.field3.findChild(
68
- QtWidgets.QLineEdit
69
- ),
70
- self.field2.findChild(QtWidgets.QLineEdit): self.field3.findChild(
71
- QtWidgets.QLineEdit
72
- ),
73
- self.field3.findChild(QtWidgets.QLineEdit): self.field4.findChild(
74
- QtWidgets.QLineEdit
75
- ),
76
- self.field4.findChild(QtWidgets.QLineEdit): self.callsign,
78
+ self.callsign: self.other_1,
79
+ self.sent: self.other_1,
80
+ self.receive: self.other_1,
81
+ self.other_1: self.other_2,
82
+ self.other_2: self.callsign,
77
83
  }
78
84
 
79
85
 
80
86
  def set_tab_prev(self):
81
87
  """Set TAB Advances"""
82
88
  self.tab_prev = {
83
- self.callsign: self.field4.findChild(QtWidgets.QLineEdit),
84
- self.field1.findChild(QtWidgets.QLineEdit): self.callsign,
85
- self.field2.findChild(QtWidgets.QLineEdit): self.callsign,
86
- self.field3.findChild(QtWidgets.QLineEdit): self.callsign,
87
- self.field4.findChild(QtWidgets.QLineEdit): self.field3.findChild(
88
- QtWidgets.QLineEdit
89
- ),
89
+ self.callsign: self.other_2,
90
+ self.sent: self.callsign,
91
+ self.receive: self.callsign,
92
+ self.other_1: self.callsign,
93
+ self.other_2: self.other_1,
90
94
  }
91
95
 
92
96
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.11.18
3
+ Version: 24.11.21
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
@@ -24,7 +24,7 @@ Requires-Dist: pyserial
24
24
  Requires-Dist: sounddevice
25
25
  Requires-Dist: soundfile
26
26
  Requires-Dist: numpy
27
- Requires-Dist: notctyparser >=23.6.21
27
+ Requires-Dist: notctyparser>=23.6.21
28
28
  Requires-Dist: rapidfuzz
29
29
  Requires-Dist: appdata
30
30
  Requires-Dist: Levenshtein
@@ -205,7 +205,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
205
205
 
206
206
  ## List of should be working contests, those in bold have ESM
207
207
 
208
- - General Logging (There are better general loggers like QLog, KLog, CQRLog)
208
+ - **General Logging** (There are better general loggers like QLog, KLog, CQRLog)
209
209
  - 10 10 Fall CW
210
210
  - 10 10 Spring CW
211
211
  - 10 10 Summer Phone
@@ -223,21 +223,23 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
223
223
  - **Helvetia**
224
224
  - IARU Fieldday R1 CW, SSB
225
225
  - IARU HF
226
- - ICWC MST
227
- - Japan International DX CW, SSB
226
+ - **ICWC MST**
227
+ - **Japan International DX CW, SSB**
228
228
  - **K1USN Slow Speed Test**
229
229
  - **LZ DX**
230
230
  - **NAQP CW, RTTY, SSB**
231
- - Phone Weekly Test
231
+ - **Phone Weekly Test**
232
232
  - **RAEM**
233
233
  - **RAC Canada Day**
234
234
  - **REF CW, SSB**
235
- - Stew Perry Topband
235
+ - **Stew Perry Topband**
236
236
  - **Weekly RTTY**
237
237
  - **Winter Field Day**
238
238
 
239
239
  ## Recent Changes (Polishing the Turd)
240
240
 
241
+ - [24-11-21] Merged PR from alduhoo setting CW Speed via rigctld, Added ESM and call history support for General Logging.
242
+ - [24-11-19] Added ESM to Stew Perry, Phone Weekly, Medium Speed Test and JIDX.
241
243
  - [24-11-18] Accepted PR from dg9vh for the DARC XMAS Contest.
242
244
  - [24-11-17] Accepted PR from dg9vh for the LZ DX contest.
243
245
  - [24-11-15] Made checkwindow font bigger and match a little more contrasted.
@@ -952,7 +954,6 @@ So if one were to go to `FILE -> LOAD CALL HISTORY FILE` and choose a downloaded
952
954
 
953
955
  Where the Name and State would auto-populate and the UserText info apprears in the bottom left.
954
956
 
955
-
956
957
  ## Contest specific notes
957
958
 
958
959
  I found it might be beneficial to have a section devoted to wierd quirky things