not1mm 24.9.3__py3-none-any.whl → 24.9.5__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 +47 -19
- not1mm/lib/fldigi_watcher.py +32 -0
- not1mm/lib/ft8_watcher.py +5 -1
- not1mm/lib/version.py +1 -1
- not1mm/plugins/arrl_field_day.py +31 -7
- not1mm/test.py +5 -9
- {not1mm-24.9.3.dist-info → not1mm-24.9.5.dist-info}/METADATA +2 -1
- {not1mm-24.9.3.dist-info → not1mm-24.9.5.dist-info}/RECORD +12 -11
- {not1mm-24.9.3.dist-info → not1mm-24.9.5.dist-info}/WHEEL +1 -1
- {not1mm-24.9.3.dist-info → not1mm-24.9.5.dist-info}/LICENSE +0 -0
- {not1mm-24.9.3.dist-info → not1mm-24.9.5.dist-info}/entry_points.txt +0 -0
- {not1mm-24.9.3.dist-info → not1mm-24.9.5.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -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(
|
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
|
579
|
+
def fldigi_qso(self, result: str):
|
570
580
|
"""
|
571
|
-
|
581
|
+
gets called when there is a new fldigi qso logged.
|
572
582
|
|
573
583
|
{
|
574
|
-
'
|
575
|
-
'
|
576
|
-
'MODE': '
|
577
|
-
'
|
578
|
-
'
|
579
|
-
'
|
580
|
-
'
|
581
|
-
'
|
582
|
-
'
|
583
|
-
'
|
584
|
-
'
|
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
|
-
'
|
588
|
-
'
|
589
|
-
'CLASS': '1D',
|
590
|
-
'ARRL_SECT': 'UT'
|
605
|
+
'MY_CITY': 'ANAHEIM, CA',
|
606
|
+
'MY_STATE': 'CA'
|
591
607
|
}
|
592
608
|
|
593
609
|
"""
|
594
|
-
|
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)
|
not1mm/lib/ft8_watcher.py
CHANGED
@@ -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
|
-
|
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
|
not1mm/lib/version.py
CHANGED
not1mm/plugins/arrl_field_day.py
CHANGED
@@ -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
|
-
|
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()
|
not1mm/test.py
CHANGED
@@ -1,10 +1,6 @@
|
|
1
|
-
|
2
|
-
def __init__(self):
|
3
|
-
"""weee"""
|
1
|
+
import xmlrpc.client
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
thetest = Somefunc()
|
10
|
-
print(f"{hasattr(thetest, "ft8_catcher")}")
|
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
|
+
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.
|
@@ -1,11 +1,11 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=C9DOp1FLdRj1Oako2gW9Y6rlfHniSp379RIhIKiYgEw,124001
|
3
3
|
not1mm/bandmap.py,sha256=1b5tXCfGTnpqqn6hPNt7zRA8SmuwSXzSwNHZXhCRt70,31434
|
4
4
|
not1mm/checkwindow.py,sha256=aI-nr8OF90IWV7R_XRdmitvBJ9M85evCs72HoU3Jnvc,10374
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
6
6
|
not1mm/logwindow.py,sha256=pwhiwolmGnW01LF4sjlu3ywLsgfxL6KuGuKuYKYmgeY,44403
|
7
7
|
not1mm/radio.py,sha256=eiB04LPMPBeMrBRI021Z7VXth66EOYb0Ujh11T9877c,3362
|
8
|
-
not1mm/test.py,sha256=
|
8
|
+
not1mm/test.py,sha256=QE9lemU13glwB2yuBAuXXQHzADTW1vSX90HHu0F-Akg,496
|
9
9
|
not1mm/vfo.py,sha256=IvmUQYMIPzLJw_BHQGis4J_IEW-vlBtdfxZLXPh7OzI,12335
|
10
10
|
not1mm/voice_keying.py,sha256=sA3gw5_k7kShTg2qhG7HkKDM5M6KheJVRkAc_C7mxDk,3006
|
11
11
|
not1mm/data/JetBrainsMono-Regular.ttf,sha256=UOHctAKY_PzCGh7zy-6f6egnCcSK0wzmF0csBqO9lDY,203952
|
@@ -99,7 +99,8 @@ not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,35
|
|
99
99
|
not1mm/lib/edit_macro.py,sha256=raKWBwsHInj5EUKmvyLQ6gqc3ZFDlstsD3xqoM4PC8E,517
|
100
100
|
not1mm/lib/edit_opon.py,sha256=j3qJ1aBsQoIOnQ9yiBl3lyeISvKTP0I_rtBYBPAfgeI,359
|
101
101
|
not1mm/lib/edit_station.py,sha256=doL21Hs6jzIE43ohAopdFt_iqnRJZHFcqzcnCS0-iio,1965
|
102
|
-
not1mm/lib/
|
102
|
+
not1mm/lib/fldigi_watcher.py,sha256=k_fAaJLdt4mwyKKnpiZrV-rSFtRbi2C8y1Dg3eyILIU,883
|
103
|
+
not1mm/lib/ft8_watcher.py,sha256=M9R5OUs3i99u3IfKnv1KYIMfljPViSbk-VeyjsVQLp4,4100
|
103
104
|
not1mm/lib/ham_utility.py,sha256=uRErxCxZr8dfxzekPyett0e_BABDVOCvSUUTzXq6ctE,11790
|
104
105
|
not1mm/lib/lookup.py,sha256=F2fl5QkMxaGSxl1XMWnLUub3T9Mt7LhCX4acOlAsks4,13952
|
105
106
|
not1mm/lib/multicast.py,sha256=bnFUNHyy82GmIb3_88EPBVVssj7-HzkJPaH671cK8Qw,3249
|
@@ -110,7 +111,7 @@ not1mm/lib/plugin_common.py,sha256=wuG7B0OJx9zYc5Gew3fdt_lNyan8Ul9KNlPQ7PDKGsU,9
|
|
110
111
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
111
112
|
not1mm/lib/settings.py,sha256=MWiKXbasaFbzeHTjfzTaTqbCBrIijudP_-0a5jNmUAA,9265
|
112
113
|
not1mm/lib/super_check_partial.py,sha256=p5l3u2ZOCBtlWgbvskC50FpuoaIpR07tfC6zTdRWbh4,2334
|
113
|
-
not1mm/lib/version.py,sha256=
|
114
|
+
not1mm/lib/version.py,sha256=F98YdDdv2B3tvIDuoqpiagUBxJ2s48EdRr4FvAbwOnc,47
|
114
115
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
115
116
|
not1mm/plugins/10_10_fall_cw.py,sha256=IttjX1yy4nDdACGsiYlPteFG8eVseX_WtoFio6bqHE8,10953
|
116
117
|
not1mm/plugins/10_10_spring_cw.py,sha256=ThCptdM3dX4ywhoy2JRcOEyHSqcJolFaT7O_PYzM1Mg,10958
|
@@ -120,7 +121,7 @@ not1mm/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
120
121
|
not1mm/plugins/arrl_10m.py,sha256=EyNRb3Sm0Qb-GVm0p05EnadlHisVh7y-sKTBP2ddMLo,13768
|
121
122
|
not1mm/plugins/arrl_dx_cw.py,sha256=LVnYDNFEUiIpQ1TlhOCcRK7JNwH5XPO5WzUoApSUMTY,13802
|
122
123
|
not1mm/plugins/arrl_dx_ssb.py,sha256=fUFzuNbCAfA5sQSYm8ISV3P9Z_2xnuKeOdO6E66zn1k,13805
|
123
|
-
not1mm/plugins/arrl_field_day.py,sha256
|
124
|
+
not1mm/plugins/arrl_field_day.py,sha256=pivtEK5j9sLpta12_wuUQYvs7MuiP3JfhlO-AOIDJug,12707
|
124
125
|
not1mm/plugins/arrl_rtty_ru.py,sha256=hKUS4isjdXo3EYxQrsqsDupPp2chW8fpoWj0T1pTgJ4,7994
|
125
126
|
not1mm/plugins/arrl_ss_cw.py,sha256=4yN68xZMuJRaSUfdiY4hafC07A3lifl5q6DEUZ-oYPQ,13080
|
126
127
|
not1mm/plugins/arrl_ss_phone.py,sha256=Yzc5sNjrY8TlnozbYF6k8hbEamyDuUAD_3-BNqHgXqY,13068
|
@@ -148,9 +149,9 @@ not1mm/plugins/phone_weekly_test.py,sha256=fLpMe03WB9_KgRl6vMgQQt_aktFdqfNt2Sw81
|
|
148
149
|
not1mm/plugins/ref_cw.py,sha256=aWjHHkqIKutjRUtzh09y5haFfnZK9poRQDWRQMDRxxU,16326
|
149
150
|
not1mm/plugins/stew_perry_topband.py,sha256=CKBQbYl4ETxhXJd2dma4fg_C5pag_s7Nf61SCztZtqE,10668
|
150
151
|
not1mm/plugins/winter_field_day.py,sha256=4rcfRtobwjHO6BNL3WOTHzBmyyeuX79BNGBG8PfjrI8,10238
|
151
|
-
not1mm-24.9.
|
152
|
-
not1mm-24.9.
|
153
|
-
not1mm-24.9.
|
154
|
-
not1mm-24.9.
|
155
|
-
not1mm-24.9.
|
156
|
-
not1mm-24.9.
|
152
|
+
not1mm-24.9.5.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
153
|
+
not1mm-24.9.5.dist-info/METADATA,sha256=ARDMBkO0MbKxknvDqFFkeCqup5PWor3Ag0hZtqDWl_8,29781
|
154
|
+
not1mm-24.9.5.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
155
|
+
not1mm-24.9.5.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
156
|
+
not1mm-24.9.5.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
157
|
+
not1mm-24.9.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|