not1mm 24.9.3__tar.gz → 24.9.5__tar.gz

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 (163) hide show
  1. {not1mm-24.9.3 → not1mm-24.9.5}/PKG-INFO +2 -1
  2. {not1mm-24.9.3 → not1mm-24.9.5}/README.md +1 -0
  3. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/__main__.py +47 -19
  4. not1mm-24.9.5/not1mm/lib/fldigi_watcher.py +32 -0
  5. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/ft8_watcher.py +5 -1
  6. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/version.py +1 -1
  7. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_field_day.py +31 -7
  8. not1mm-24.9.5/not1mm/test.py +6 -0
  9. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm.egg-info/PKG-INFO +2 -1
  10. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm.egg-info/SOURCES.txt +1 -0
  11. {not1mm-24.9.3 → not1mm-24.9.5}/pyproject.toml +1 -1
  12. not1mm-24.9.3/not1mm/test.py +0 -10
  13. {not1mm-24.9.3 → not1mm-24.9.5}/LICENSE +0 -0
  14. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/__init__.py +0 -0
  15. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/bandmap.py +0 -0
  16. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/checkwindow.py +0 -0
  17. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  18. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/MASTER.SCP +0 -0
  19. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/about.ui +0 -0
  20. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  21. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/bandmap.ui +0 -0
  22. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/check.png +0 -0
  23. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/checkwindow.ui +0 -0
  24. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/configuration.ui +0 -0
  25. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/contests.sql +0 -0
  26. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/cty.json +0 -0
  27. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/cwmacros.txt +0 -0
  28. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/donors.html +0 -0
  29. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/editcontact.ui +0 -0
  30. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/editmacro.ui +0 -0
  31. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/greendot.png +0 -0
  32. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/k6gte-not1mm.desktop +0 -0
  33. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/k6gte.not1mm-128.png +0 -0
  34. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/k6gte.not1mm-32.png +0 -0
  35. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/k6gte.not1mm-64.png +0 -0
  36. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/logwindow.ui +0 -0
  37. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/logwindowx.ui +0 -0
  38. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/main.ui +0 -0
  39. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/new_contest.ui +0 -0
  40. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/not1mm.html +0 -0
  41. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/opon.ui +0 -0
  42. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/0.wav +0 -0
  43. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/1.wav +0 -0
  44. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/2.wav +0 -0
  45. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/3.wav +0 -0
  46. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/4.wav +0 -0
  47. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/5.wav +0 -0
  48. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/6.wav +0 -0
  49. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/7.wav +0 -0
  50. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/73.wav +0 -0
  51. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/8.wav +0 -0
  52. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/9.wav +0 -0
  53. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/a.wav +0 -0
  54. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/again.wav +0 -0
  55. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/b.wav +0 -0
  56. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/c.wav +0 -0
  57. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/contest.wav +0 -0
  58. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/cq.wav +0 -0
  59. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/d.wav +0 -0
  60. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/e.wav +0 -0
  61. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/f.wav +0 -0
  62. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/g.wav +0 -0
  63. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/h.wav +0 -0
  64. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/i.wav +0 -0
  65. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/j.wav +0 -0
  66. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/k.wav +0 -0
  67. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/k6gte.wav +0 -0
  68. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/l.wav +0 -0
  69. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/m.wav +0 -0
  70. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/mynumber.wav +0 -0
  71. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/n.wav +0 -0
  72. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/nil.wav +0 -0
  73. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/o.wav +0 -0
  74. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/p.wav +0 -0
  75. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/q.wav +0 -0
  76. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/r.wav +0 -0
  77. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/roger.wav +0 -0
  78. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/s.wav +0 -0
  79. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/space.wav +0 -0
  80. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/t.wav +0 -0
  81. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/thankyou.wav +0 -0
  82. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  83. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/u.wav +0 -0
  84. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/v.wav +0 -0
  85. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/w.wav +0 -0
  86. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/x.wav +0 -0
  87. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/y.wav +0 -0
  88. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/yourcall.wav +0 -0
  89. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/phonetics/z.wav +0 -0
  90. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/pickcontest.ui +0 -0
  91. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/radio_green.png +0 -0
  92. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/radio_grey.png +0 -0
  93. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/radio_red.png +0 -0
  94. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/reddot.png +0 -0
  95. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/settings.ui +0 -0
  96. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/splash.png +0 -0
  97. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/ssbmacros.txt +0 -0
  98. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/data/vfo.ui +0 -0
  99. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/fsutils.py +0 -0
  100. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/__init__.py +0 -0
  101. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/about.py +0 -0
  102. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/cat_interface.py +0 -0
  103. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/cwinterface.py +0 -0
  104. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/database.py +0 -0
  105. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/edit_contact.py +0 -0
  106. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/edit_macro.py +0 -0
  107. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/edit_opon.py +0 -0
  108. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/edit_station.py +0 -0
  109. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/ham_utility.py +0 -0
  110. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/lookup.py +0 -0
  111. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/multicast.py +0 -0
  112. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/n1mm.py +0 -0
  113. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/new_contest.py +0 -0
  114. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/playsound.py +0 -0
  115. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/plugin_common.py +0 -0
  116. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/select_contest.py +0 -0
  117. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/settings.py +0 -0
  118. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/super_check_partial.py +0 -0
  119. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/lib/versiontest.py +0 -0
  120. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/logwindow.py +0 -0
  121. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/10_10_fall_cw.py +0 -0
  122. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/10_10_spring_cw.py +0 -0
  123. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/10_10_summer_phone.py +0 -0
  124. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/10_10_winter_phone.py +0 -0
  125. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/__init__.py +0 -0
  126. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_10m.py +0 -0
  127. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_dx_cw.py +0 -0
  128. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  129. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  130. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_ss_cw.py +0 -0
  131. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_ss_phone.py +0 -0
  132. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  133. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  134. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  135. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/canada_day.py +0 -0
  136. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/cq_160_cw.py +0 -0
  137. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/cq_160_ssb.py +0 -0
  138. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/cq_wpx_cw.py +0 -0
  139. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  140. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/cq_ww_cw.py +0 -0
  141. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/cq_ww_ssb.py +0 -0
  142. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/cwt.py +0 -0
  143. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/general_logging.py +0 -0
  144. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/helvetia.py +0 -0
  145. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/iaru_hf.py +0 -0
  146. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/icwc_mst.py +0 -0
  147. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/jidx_cw.py +0 -0
  148. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/jidx_ph.py +0 -0
  149. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/k1usn_sst.py +0 -0
  150. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/naqp_cw.py +0 -0
  151. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/naqp_ssb.py +0 -0
  152. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/phone_weekly_test.py +0 -0
  153. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/ref_cw.py +0 -0
  154. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/stew_perry_topband.py +0 -0
  155. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/plugins/winter_field_day.py +0 -0
  156. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/radio.py +0 -0
  157. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/vfo.py +0 -0
  158. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm/voice_keying.py +0 -0
  159. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm.egg-info/dependency_links.txt +0 -0
  160. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm.egg-info/entry_points.txt +0 -0
  161. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm.egg-info/requires.txt +0 -0
  162. {not1mm-24.9.3 → not1mm-24.9.5}/not1mm.egg-info/top_level.txt +0 -0
  163. {not1mm-24.9.3 → not1mm-24.9.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.9.3
3
+ Version: 24.9.5
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
@@ -226,6 +226,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
226
226
 
227
227
  ## Recent Changes
228
228
 
229
+ - [24-9-5] Added FlDigi support for Field Day.
229
230
  - [24-9-3] Added WSJT-X FT8 mode contacts to ARRL Field Day.
230
231
 
231
232
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -195,6 +195,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
195
195
 
196
196
  ## Recent Changes
197
197
 
198
+ - [24-9-5] Added FlDigi support for Field Day.
198
199
  - [24-9-3] Added WSJT-X FT8 mode contacts to ARRL Field Day.
199
200
 
200
201
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -67,6 +67,7 @@ from not1mm.lib.settings import Settings
67
67
  from not1mm.lib.version import __version__
68
68
  from not1mm.lib.versiontest import VersionTest
69
69
  from not1mm.lib.ft8_watcher import FT8Watcher
70
+ from not1mm.lib.fldigi_watcher import FlDigiWatcher
70
71
 
71
72
  import not1mm.fsutils as fsutils
72
73
  from not1mm.logwindow import LogWindow
@@ -163,7 +164,9 @@ class MainWindow(QtWidgets.QMainWindow):
163
164
 
164
165
  radio_thread = QThread()
165
166
  voice_thread = QThread()
167
+ fldigi_thread = QThread()
166
168
 
169
+ fldigi_watcher = None
167
170
  rig_control = None
168
171
  log_window = None
169
172
  check_window = None
@@ -193,7 +196,7 @@ class MainWindow(QtWidgets.QMainWindow):
193
196
  self.rightdot.hide()
194
197
  self.n1mm = N1MM()
195
198
  self.ft8 = FT8Watcher()
196
- self.ft8.set_callback(self.ft8_result)
199
+ self.ft8.set_callback(None)
197
200
  self.mscp = SCP(fsutils.APP_DATA_PATH)
198
201
  self.next_field = self.other_2
199
202
  self.dupe_indicator.hide()
@@ -507,6 +510,13 @@ class MainWindow(QtWidgets.QMainWindow):
507
510
  | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable
508
511
  )
509
512
 
513
+ self.fldigi_watcher = FlDigiWatcher()
514
+ self.fldigi_watcher.moveToThread(self.fldigi_thread)
515
+ self.fldigi_thread.started.connect(self.fldigi_watcher.run)
516
+ self.fldigi_thread.finished.connect(self.fldigi_watcher.deleteLater)
517
+ self.fldigi_watcher.poll_callback.connect(self.fldigi_qso)
518
+ self.fldigi_thread.start()
519
+
510
520
  self.log_window = LogWindow()
511
521
  self.log_window.setObjectName("log-window")
512
522
  if os.environ.get("WAYLAND_DISPLAY"):
@@ -566,32 +576,50 @@ class MainWindow(QtWidgets.QMainWindow):
566
576
  "You can udate to the current version by using:\npip install -U not1mm"
567
577
  )
568
578
 
569
- def ft8_result(self, result: dict):
579
+ def fldigi_qso(self, result: str):
570
580
  """
571
- Callback for ft8 watcher
581
+ gets called when there is a new fldigi qso logged.
572
582
 
573
583
  {
574
- 'CALL': 'KE0OG',
575
- 'GRIDSQUARE': 'DM10AT',
576
- 'MODE': 'FT8',
577
- 'RST_SENT': '',
578
- 'RST_RCVD': '',
579
- 'QSO_DATE': '20210329',
580
- 'TIME_ON': '183213',
581
- 'QSO_DATE_OFF': '20210329',
582
- 'TIME_OFF': '183213',
583
- 'BAND': '20M',
584
- 'FREQ': '14.074754',
584
+ 'FREQ': '7.029500',
585
+ 'CALL': 'DL2DSL',
586
+ 'MODE': 'RTTY',
587
+ 'NAME': 'BOB',
588
+ 'QSO_DATE': '20240904',
589
+ 'QSO_DATE_OFF': '20240904',
590
+ 'TIME_OFF': '212825',
591
+ 'TIME_ON': '212800',
592
+ 'RST_RCVD': '599',
593
+ 'RST_SENT': '599',
594
+ 'BAND': '40M',
595
+ 'COUNTRY': 'FED. REP. OF GERMANY',
596
+ 'CQZ': '14',
597
+ 'STX': '000',
598
+ 'STX_STRING': '1D ORG',
599
+ 'CLASS': '1D',
600
+ 'ARRL_SECT': 'DX',
601
+ 'TX_PWR': '0',
602
+ 'OPERATOR': 'K6GTE',
585
603
  'STATION_CALLSIGN': 'K6GTE',
586
604
  'MY_GRIDSQUARE': 'DM13AT',
587
- 'CONTEST_ID': 'ARRL-FIELD-DAY',
588
- 'SRX_STRING': '1D UT',
589
- 'CLASS': '1D',
590
- 'ARRL_SECT': 'UT'
605
+ 'MY_CITY': 'ANAHEIM, CA',
606
+ 'MY_STATE': 'CA'
591
607
  }
592
608
 
593
609
  """
594
- print(f"{result=}")
610
+
611
+ datadict = {}
612
+ splitdata = result.upper().strip().split("<")
613
+ for data in splitdata:
614
+ if data:
615
+ tag = data.split(":")
616
+ if tag == ["EOR>"]:
617
+ break
618
+ datadict[tag[0]] = tag[1].split(">")[1].strip()
619
+ logger.debug(f"{datadict=}")
620
+ if hasattr(self.contest, "ft8_handler"):
621
+ self.contest.set_self(self)
622
+ self.contest.ft8_handler(datadict)
595
623
 
596
624
  def setDarkMode(self, setdarkmode=False) -> None:
597
625
  """Forces a darkmode palette."""
@@ -0,0 +1,32 @@
1
+ import xmlrpc.client
2
+ from PyQt6.QtCore import QObject, pyqtSignal, QThread, QEventLoop
3
+
4
+
5
+ class FlDigiWatcher(QObject):
6
+ """fldigi watcher"""
7
+
8
+ poll_callback = pyqtSignal(str)
9
+ time_to_quit = False
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ ...
14
+
15
+ self.target = "http://127.0.0.1:7362"
16
+ self.payload = ""
17
+ self.response = ""
18
+
19
+ def run(self):
20
+ while not self.time_to_quit:
21
+ try:
22
+ server = xmlrpc.client.ServerProxy(self.target)
23
+ self.response = server.logbook.last_record()
24
+ except OSError:
25
+ continue
26
+ if self.payload != self.response:
27
+ self.payload = self.response
28
+ try:
29
+ self.poll_callback.emit(self.payload)
30
+ except QEventLoop:
31
+ ...
32
+ QThread.msleep(100)
@@ -6,10 +6,14 @@ https://github.com/mbridak/not1mm
6
6
  GPL V3
7
7
  """
8
8
 
9
+ import logging
10
+
9
11
  from PyQt6 import QtNetwork
10
12
 
11
13
  import struct
12
14
 
15
+ logger = logging.getLogger(__name__)
16
+
13
17
 
14
18
  class FT8Watcher:
15
19
  """Main Window"""
@@ -64,7 +68,7 @@ class FT8Watcher:
64
68
  datagram, sender_host, sender_port_number = self.udp_socket.readDatagram(
65
69
  self.udp_socket.pendingDatagramSize()
66
70
  )
67
- # print("%s %s %s", sender_host, sender_port_number, datagram)
71
+ logger.debug(f"{datagram=}")
68
72
 
69
73
  if datagram[0:4] != b"\xad\xbc\xcb\xda":
70
74
  return # bail if no wsjt-x magic number
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.9.3"
3
+ __version__ = "24.9.5"
@@ -296,9 +296,9 @@ def cabrillo(self):
296
296
  for contact in log:
297
297
  the_date_and_time = contact.get("TS", "")
298
298
  themode = contact.get("Mode", "")
299
- if themode in ("LSB", "USB"):
299
+ if themode in ("LSB", "USB", "FM"):
300
300
  themode = "PH"
301
- if themode in ("FT8", "FT4"):
301
+ if themode in ("FT8", "FT4", "RTTY"):
302
302
  themode = "DG"
303
303
  frequency = str(int(contact.get("Freq", "0"))).rjust(5)
304
304
 
@@ -333,7 +333,7 @@ def set_self(the_outie):
333
333
 
334
334
  def ft8_handler(the_packet: dict):
335
335
  """Process FT8 QSO packets
336
-
336
+ FT8
337
337
  {
338
338
  'CALL': 'KE0OG',
339
339
  'GRIDSQUARE': 'DM10AT',
@@ -353,12 +353,36 @@ def ft8_handler(the_packet: dict):
353
353
  'CLASS': '1D',
354
354
  'ARRL_SECT': 'UT'
355
355
  }
356
+ FlDigi
357
+ {
358
+ 'FREQ': '7.029500',
359
+ 'CALL': 'DL2DSL',
360
+ 'MODE': 'RTTY',
361
+ 'NAME': 'BOB',
362
+ 'QSO_DATE': '20240904',
363
+ 'QSO_DATE_OFF': '20240904',
364
+ 'TIME_OFF': '212825',
365
+ 'TIME_ON': '212800',
366
+ 'RST_RCVD': '599',
367
+ 'RST_SENT': '599',
368
+ 'BAND': '40M',
369
+ 'COUNTRY': 'FED. REP. OF GERMANY',
370
+ 'CQZ': '14',
371
+ 'STX': '000',
372
+ 'STX_STRING': '1D ORG',
373
+ 'CLASS': '1D',
374
+ 'ARRL_SECT': 'DX',
375
+ 'TX_PWR': '0',
376
+ 'OPERATOR': 'K6GTE',
377
+ 'STATION_CALLSIGN': 'K6GTE',
378
+ 'MY_GRIDSQUARE': 'DM13AT',
379
+ 'MY_CITY': 'ANAHEIM, CA',
380
+ 'MY_STATE': 'CA'
381
+ }
356
382
 
357
383
  """
358
- print(f"{the_packet=}")
359
-
384
+ logger.debug(f"{the_packet=}")
360
385
  if ALTEREGO is not None:
361
-
362
386
  ALTEREGO.callsign.setText(the_packet.get("CALL"))
363
387
  ALTEREGO.contact["Call"] = the_packet.get("CALL", "")
364
388
  ALTEREGO.contact["SNT"] = ALTEREGO.sent.text()
@@ -373,7 +397,7 @@ def ft8_handler(the_packet: dict):
373
397
  ALTEREGO.contact["Band"] = get_logged_band(
374
398
  str(int(float(the_packet.get("FREQ", "0.0")) * 1000000))
375
399
  )
400
+ logger.debug(f"{ALTEREGO.contact=}")
376
401
  ALTEREGO.other_1.setText(the_packet.get("CLASS", "ERR"))
377
402
  ALTEREGO.other_2.setText(the_packet.get("ARRL_SECT", "ERR"))
378
- print(f"\n{ALTEREGO.contact=}\n")
379
403
  ALTEREGO.save_contact()
@@ -0,0 +1,6 @@
1
+ import xmlrpc.client
2
+
3
+ target = "http://127.0.0.1:8421"
4
+ server = xmlrpc.client.ServerProxy(target)
5
+ adif = "<QSO_DATE:8>20150721<QSO_DATE_OFF:8>20150721<TIME_ON:4>1333<TIME_OFF:6>133436<CALL:5>N3FJP<FREQ:8>3.081500<MODE:0><RST_SENT:0><RST_RCVD:0><TX_PWR:0><NAME:5>Glenn<QTH:7>Bel Air<STATE:2>MD<VE_PROV:0><COUNTRY:13>United States<GRIDSQUARE:6>FM19tm<STX:0><SRX:0><SRX_STRING:0><STX_STRING:0><NOTES:0><IOTA:0><DXCC:0><QSL_VIA:0><QSLRDATE:0><QSLSDATE:0><eor>"
6
+ response = server.log.add_record(adif)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.9.3
3
+ Version: 24.9.5
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
@@ -226,6 +226,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
226
226
 
227
227
  ## Recent Changes
228
228
 
229
+ - [24-9-5] Added FlDigi support for Field Day.
229
230
  - [24-9-3] Added WSJT-X FT8 mode contacts to ARRL Field Day.
230
231
 
231
232
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -108,6 +108,7 @@ not1mm/lib/edit_contact.py
108
108
  not1mm/lib/edit_macro.py
109
109
  not1mm/lib/edit_opon.py
110
110
  not1mm/lib/edit_station.py
111
+ not1mm/lib/fldigi_watcher.py
111
112
  not1mm/lib/ft8_watcher.py
112
113
  not1mm/lib/ham_utility.py
113
114
  not1mm/lib/lookup.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "24.9.3"
7
+ version = "24.9.5"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,10 +0,0 @@
1
- class Somefunc:
2
- def __init__(self):
3
- """weee"""
4
-
5
- def testfunc():
6
- """wooo"""
7
-
8
-
9
- thetest = Somefunc()
10
- print(f"{hasattr(thetest, "ft8_catcher")}")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes