not1mm 25.5.22__py3-none-any.whl → 25.5.25__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 +230 -11
- not1mm/bandmap.py +25 -3
- not1mm/data/cloud_green.png +0 -0
- not1mm/data/cloud_red.png +0 -0
- not1mm/data/configuration.ui +111 -140
- not1mm/data/main.ui +16 -3
- not1mm/lib/cat_interface.py +2 -2
- not1mm/lib/database.py +43 -2
- not1mm/lib/settings.py +6 -3
- not1mm/lib/version.py +2 -1
- not1mm/logwindow.py +5 -2
- not1mm/ratewindow.py +0 -3
- not1mm/statistics.py +9 -9
- not1mm/vfo.py +37 -7
- {not1mm-25.5.22.dist-info → not1mm-25.5.25.dist-info}/METADATA +11 -4
- {not1mm-25.5.22.dist-info → not1mm-25.5.25.dist-info}/RECORD +20 -18
- {not1mm-25.5.22.dist-info → not1mm-25.5.25.dist-info}/WHEEL +0 -0
- {not1mm-25.5.22.dist-info → not1mm-25.5.25.dist-info}/entry_points.txt +0 -0
- {not1mm-25.5.22.dist-info → not1mm-25.5.25.dist-info}/licenses/LICENSE +0 -0
- {not1mm-25.5.22.dist-info → not1mm-25.5.25.dist-info}/top_level.txt +0 -0
not1mm/logwindow.py
CHANGED
@@ -696,8 +696,9 @@ class LogWindow(QDockWidget):
|
|
696
696
|
self.contact["RoverLocation"] = self.edit_contact_dialog.rover_qth.text()
|
697
697
|
|
698
698
|
self.database.change_contact(self.contact)
|
699
|
+
|
699
700
|
self.get_log()
|
700
|
-
cmd =
|
701
|
+
cmd = self.contact.copy()
|
701
702
|
cmd["cmd"] = "CONTACTCHANGED"
|
702
703
|
self.message.emit(cmd)
|
703
704
|
self.show_like_calls(self.contact.get("Call", ""))
|
@@ -715,6 +716,7 @@ class LogWindow(QDockWidget):
|
|
715
716
|
None
|
716
717
|
"""
|
717
718
|
self.database.delete_contact(self.contact.get("ID", ""))
|
719
|
+
|
718
720
|
if self.n1mm:
|
719
721
|
if self.n1mm.send_contact_packets:
|
720
722
|
self.n1mm.contactdelete["timestamp"] = self.contact.get("TS", "")
|
@@ -728,7 +730,8 @@ class LogWindow(QDockWidget):
|
|
728
730
|
self.edit_contact_dialog.close()
|
729
731
|
self.get_log()
|
730
732
|
cmd = {}
|
731
|
-
cmd["cmd"] = "
|
733
|
+
cmd["cmd"] = "DELETED"
|
734
|
+
cmd["ID"] = self.contact.get("ID", "")
|
732
735
|
self.message.emit(cmd)
|
733
736
|
self.show_like_calls(self.contact.get("Call", ""))
|
734
737
|
|
not1mm/ratewindow.py
CHANGED
not1mm/statistics.py
CHANGED
@@ -44,6 +44,15 @@ class StatsWindow(QDockWidget):
|
|
44
44
|
|
45
45
|
def msg_from_main(self, packet):
|
46
46
|
""""""
|
47
|
+
if packet.get("cmd", "") == "NEWDB":
|
48
|
+
self.load_pref()
|
49
|
+
self.dbname = fsutils.USER_DATA_PATH / self.pref.get(
|
50
|
+
"current_database", "ham.db"
|
51
|
+
)
|
52
|
+
self.database = DataBase(self.dbname, fsutils.APP_DATA_PATH)
|
53
|
+
self.database.current_contest = self.pref.get("contest", 0)
|
54
|
+
self.get_run_and_total_qs()
|
55
|
+
|
47
56
|
if self.active is False:
|
48
57
|
return
|
49
58
|
|
@@ -56,15 +65,6 @@ class StatsWindow(QDockWidget):
|
|
56
65
|
self.get_run_and_total_qs()
|
57
66
|
return
|
58
67
|
|
59
|
-
if packet.get("cmd", "") == "NEWDB":
|
60
|
-
self.load_pref()
|
61
|
-
self.dbname = fsutils.USER_DATA_PATH / self.pref.get(
|
62
|
-
"current_database", "ham.db"
|
63
|
-
)
|
64
|
-
self.database = DataBase(self.dbname, fsutils.APP_DATA_PATH)
|
65
|
-
self.database.current_contest = self.pref.get("contest", 0)
|
66
|
-
self.get_run_and_total_qs()
|
67
|
-
|
68
68
|
def setActive(self, mode: bool) -> None:
|
69
69
|
self.active = bool(mode)
|
70
70
|
|
not1mm/vfo.py
CHANGED
@@ -12,9 +12,11 @@ Purpose: Provide onscreen widget that interacts with DIY VFO knob and remote rig
|
|
12
12
|
# usb-Raspberry_Pi_Pico_E6612483CB1B242A-if00
|
13
13
|
# usb-Raspberry_Pi_Pico_W_E6614C311B331139-if00
|
14
14
|
|
15
|
+
import datetime
|
15
16
|
import logging
|
16
17
|
import os
|
17
18
|
from json import loads
|
19
|
+
import sys
|
18
20
|
|
19
21
|
import serial
|
20
22
|
from PyQt6 import QtCore, QtWidgets, uic
|
@@ -37,6 +39,7 @@ class VfoWindow(QDockWidget):
|
|
37
39
|
multicast_interface = None
|
38
40
|
current_palette = None
|
39
41
|
device_reconnect = False
|
42
|
+
stale = datetime.datetime.now()
|
40
43
|
|
41
44
|
def __init__(self):
|
42
45
|
super().__init__()
|
@@ -102,13 +105,23 @@ class VfoWindow(QDockWidget):
|
|
102
105
|
Return the device ID if it is, or None if not found.
|
103
106
|
"""
|
104
107
|
|
105
|
-
devices =
|
108
|
+
devices = self.get_devices()
|
106
109
|
data = None
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
+
if devices is None:
|
111
|
+
return None
|
112
|
+
if sys.platform == "darwin":
|
113
|
+
for device in devices:
|
114
|
+
if "usb" in device:
|
115
|
+
try:
|
116
|
+
with serial.Serial("/dev/" + device, 115200) as ser:
|
117
|
+
ser.timeout = 1000
|
118
|
+
ser.write(b"whatareyou\r")
|
119
|
+
data = ser.readline()
|
120
|
+
except serial.serialutil.SerialException:
|
121
|
+
return None
|
122
|
+
if "vfoknob" in data.decode().strip():
|
123
|
+
return "/dev/" + device
|
110
124
|
return None
|
111
|
-
|
112
125
|
for device in devices:
|
113
126
|
if "usb-Raspberry_Pi_Pico" in device:
|
114
127
|
try:
|
@@ -119,7 +132,16 @@ class VfoWindow(QDockWidget):
|
|
119
132
|
except serial.serialutil.SerialException:
|
120
133
|
return None
|
121
134
|
if "vfoknob" in data.decode().strip():
|
122
|
-
return device
|
135
|
+
return "/dev/serial/by-id/" + device
|
136
|
+
|
137
|
+
def get_devices(self):
|
138
|
+
try:
|
139
|
+
if sys.platform != "darwin":
|
140
|
+
return os.listdir("/dev/serial/by-id")
|
141
|
+
return os.listdir("/dev/")
|
142
|
+
except FileNotFoundError:
|
143
|
+
return None
|
144
|
+
return None
|
123
145
|
|
124
146
|
def window_state_changed(self):
|
125
147
|
"""Setup vfo knob if window is toggled on"""
|
@@ -139,7 +161,7 @@ class VfoWindow(QDockWidget):
|
|
139
161
|
device = self.discover_device()
|
140
162
|
if device:
|
141
163
|
try:
|
142
|
-
self.pico = serial.Serial(
|
164
|
+
self.pico = serial.Serial(device, 115200)
|
143
165
|
self.pico.timeout = 100
|
144
166
|
self.lcdNumber.setStyleSheet("QLCDNumber { color: white; }")
|
145
167
|
self.device_reconnect = True
|
@@ -191,6 +213,8 @@ class VfoWindow(QDockWidget):
|
|
191
213
|
"""
|
192
214
|
if not self.isVisible():
|
193
215
|
return
|
216
|
+
if datetime.datetime.now() < self.stale:
|
217
|
+
return
|
194
218
|
if self.rig_control:
|
195
219
|
if self.rig_control.online is False:
|
196
220
|
self.rig_control.reinit()
|
@@ -227,8 +251,12 @@ class VfoWindow(QDockWidget):
|
|
227
251
|
while self.pico.in_waiting:
|
228
252
|
result = self.pico.read(self.pico.in_waiting)
|
229
253
|
result = result.decode().strip()
|
254
|
+
|
230
255
|
if self.old_pico != result:
|
231
256
|
self.old_pico = result
|
257
|
+
self.stale = datetime.datetime.now() + datetime.timedelta(
|
258
|
+
seconds=1
|
259
|
+
)
|
232
260
|
if self.rig_control:
|
233
261
|
self.rig_control.set_vfo(result)
|
234
262
|
self.showNumber(result)
|
@@ -240,6 +268,8 @@ class VfoWindow(QDockWidget):
|
|
240
268
|
except AttributeError:
|
241
269
|
logger.critical("Unable to write to serial device.")
|
242
270
|
self.pico = None
|
271
|
+
except KeyboardInterrupt:
|
272
|
+
...
|
243
273
|
|
244
274
|
def show_message_box(self, message: str) -> None:
|
245
275
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: not1mm
|
3
|
-
Version: 25.5.
|
3
|
+
Version: 25.5.25
|
4
4
|
Summary: NOT1MM Logger
|
5
5
|
Author-email: Michael Bridak <michael.bridak@gmail.com>
|
6
6
|
License: GPL-3.0-or-later
|
@@ -164,8 +164,10 @@ and SQLite for the database.
|
|
164
164
|
### Target Environment
|
165
165
|
|
166
166
|
The primary target for this application is Linux. It may be able to run on other
|
167
|
-
platforms, BSD
|
168
|
-
|
167
|
+
platforms, BSD and Windows. But I don't have a way, or desire, to directly support them.
|
168
|
+
|
169
|
+
I've recently purchased an M4 Mac Mini, So I'll probably put more effort into that platform as well.
|
170
|
+
|
169
171
|
|
170
172
|
### The Why
|
171
173
|
|
@@ -257,8 +259,13 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
257
259
|
|
258
260
|
## Recent Changes
|
259
261
|
|
262
|
+
- [25-5-25] Added {PREVNR} macro to resend last logged serial number.
|
263
|
+
- Add Bandmap mode indicators for CW, FT*, SSB, Beacons.
|
264
|
+
- Made tuning with the VFO knob smoother.
|
265
|
+
- Add MacOS support for VFO knob.
|
266
|
+
- Forced style to Fusion on MacOS, 'cause it looked like ass.
|
260
267
|
- [25-5-22] Trap possible ValueError exception in settings.py
|
261
|
-
-[25-5-21] Fix crash from unsafe dict key access when processing F1-F12.
|
268
|
+
- [25-5-21] Fix crash from unsafe dict key access when processing F1-F12.
|
262
269
|
- [25-5-6] Merged PR from @JG3LLB, Koji-Kawano, Adding code to stop sending morse if using rigctld to send, and @alduhoo adding more control to CW serial number padding.
|
263
270
|
|
264
271
|
See [CHANGELOG.md](CHANGELOG.md) for prior changes.
|
@@ -1,16 +1,16 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
3
|
-
not1mm/bandmap.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=FZZGObcnSJEzEFj7a2K_-DPJUivmDS2tV5boPVudSJs,169592
|
3
|
+
not1mm/bandmap.py,sha256=0JmZ32UvkaPjXs2xTgowX1GLvZo5zHU_Zo9y_GL-On4,31139
|
4
4
|
not1mm/checkwindow.py,sha256=zEHlw40j6Wr3rvKbCQf2lcezCoiZqaBqEvBjQU5aKW0,7630
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
6
|
-
not1mm/logwindow.py,sha256=
|
6
|
+
not1mm/logwindow.py,sha256=zpCCcyRLK40D2rcxnIJBSVVqPEmTHKCrkAcfEj5sZ54,42624
|
7
7
|
not1mm/lookupservice.py,sha256=GkY_qHZfrW6XHf8upIoaG4hCFqm0fg6Ganu9ConGrIc,2628
|
8
8
|
not1mm/radio.py,sha256=4Lysf9BY3vdtYCHwKfzO5WN7IGyh4_lKSVuQ6F4Z08g,5536
|
9
|
-
not1mm/ratewindow.py,sha256=
|
9
|
+
not1mm/ratewindow.py,sha256=iBjqdOetIEX0wSwdGM89Ibt4gVlFdE-K8HQPnkVPVOg,6965
|
10
10
|
not1mm/rtc_service.py,sha256=axAwnCBuTr-QL0YwXtWvg9tjwhcFsiiEZFgFjOofX6k,2816
|
11
|
-
not1mm/statistics.py,sha256=
|
11
|
+
not1mm/statistics.py,sha256=_k65GU93N-TIb2-b0_Yta4NCT9pJd5t-SB_DvC-m_ZM,7712
|
12
12
|
not1mm/test.py,sha256=BNhsSvLnNG5hN4pywIWnj4pUBI-wQYY4Ejfbl97knmw,1198
|
13
|
-
not1mm/vfo.py,sha256=
|
13
|
+
not1mm/vfo.py,sha256=SsqinokSd8BqVp6l-_DGRKcNN9Uc9JiFYXDl9Ycep1o,10111
|
14
14
|
not1mm/voice_keying.py,sha256=HZImqC5NgnyW2nknNYQ3b7I8-6S_hxpq5G4RcIRXn_k,3005
|
15
15
|
not1mm/data/JetBrainsMono-Thin.ttf,sha256=B1bo6M8dZfp1GXdnZEebOXPvsVr09BnV1ydNwnrhtwI,270112
|
16
16
|
not1mm/data/MASTER.SCP,sha256=LuF8dTtdRKaqSyzJ1nl7zW2-gs5ehQiXiI41t5Zo9Bo,362769
|
@@ -19,7 +19,9 @@ not1mm/data/alpha bravo charlie delta.txt,sha256=d5QMmSWEUAe4Rj1XbNjTPLa_5Be4Se6
|
|
19
19
|
not1mm/data/bandmap.ui,sha256=V0RlAcaGTcP85VBI_Rkxu3kpDmP4EKZmwrqPTrUGv5w,8580
|
20
20
|
not1mm/data/check.png,sha256=UvFOLr8V-79qnjW8wUaGItXk_OSP8m8hqPevs8NDlFY,387
|
21
21
|
not1mm/data/checkwindow.ui,sha256=kRRfMXOsvyQwCk93Fm8CWTaL3DCWFTIfyqncciRY2MI,5064
|
22
|
-
not1mm/data/
|
22
|
+
not1mm/data/cloud_green.png,sha256=MdXhls1n4XR7oM0Y84pqlsuay6byduAJF7NwgZ-g0DU,626
|
23
|
+
not1mm/data/cloud_red.png,sha256=vSIQ1X7_z484pv3xXjTRtdtfIontsUq11suTALSsaQA,482
|
24
|
+
not1mm/data/configuration.ui,sha256=Qze_mbSw3vS6Iwof5TyEz-3KycG1lconANEMXhPrFQQ,76372
|
23
25
|
not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
|
24
26
|
not1mm/data/cty.json,sha256=bwPhOrOAgvV9JiXUDT9kzCqfNWAhGuJQt489h0SKsCk,4925375
|
25
27
|
not1mm/data/cwmacros.txt,sha256=NztufsX6R52gAO7VyJ2AHr7wOh41pJTwHKh5Lcs32ds,468
|
@@ -33,7 +35,7 @@ not1mm/data/k6gte.not1mm-32.png,sha256=XdTsCa3xqwTfn26Ga7RwO_Vlbg_77RKkSc8bMxVcC
|
|
33
35
|
not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N90,2925
|
34
36
|
not1mm/data/logwindow.ui,sha256=vfkNdzJgFs3tTOBKLDavF2zVMvNHWOZ82fAErRi6pQY,1436
|
35
37
|
not1mm/data/logwindowx.ui,sha256=9FzDJtLRpagvAWcDjFdB9NnvNZ4bVxdTNHy1Jit2ido,1610
|
36
|
-
not1mm/data/main.ui,sha256=
|
38
|
+
not1mm/data/main.ui,sha256=gEWmfXmqLM-DiujjnPdU-4buYJF9TQxS9gE0JlVv_4Y,65142
|
37
39
|
not1mm/data/new_contest.ui,sha256=WKg2jy8jxHg2d3pZsBTcdSNObKcd0eVbO-OoW0u0uxA,25309
|
38
40
|
not1mm/data/not1mm.html,sha256=c9-mfjMwDt4f5pySUruz2gREW33CQ2_rCddM2z5CZQo,23273
|
39
41
|
not1mm/data/opon.ui,sha256=mC4OhoVIfR1H9IqHAKXliPMm8VOVmxSEadpsFQ7XnS4,2247
|
@@ -100,9 +102,9 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
|
|
100
102
|
not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
|
101
103
|
not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
102
104
|
not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
|
103
|
-
not1mm/lib/cat_interface.py,sha256=
|
105
|
+
not1mm/lib/cat_interface.py,sha256=jADt45E5AcdEx8FHN4rSDbngeQqVzbtIy43luGWGDK0,27222
|
104
106
|
not1mm/lib/cwinterface.py,sha256=rKUnqljHQC_Iljq4TCmAgSPe49lWbKcfxg58cE8YX5Y,5177
|
105
|
-
not1mm/lib/database.py,sha256=
|
107
|
+
not1mm/lib/database.py,sha256=ycc_O3e8fOhWyiGfZjTFf2U94BGMaUw3nCvXFbligaw,53358
|
106
108
|
not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
|
107
109
|
not1mm/lib/edit_macro.py,sha256=raKWBwsHInj5EUKmvyLQ6gqc3ZFDlstsD3xqoM4PC8E,517
|
108
110
|
not1mm/lib/edit_opon.py,sha256=j3qJ1aBsQoIOnQ9yiBl3lyeISvKTP0I_rtBYBPAfgeI,359
|
@@ -116,9 +118,9 @@ not1mm/lib/n1mm.py,sha256=H54mpgJF0GAmKavM-nb5OAq2SJFWYkux4eMWWiSRxJc,6288
|
|
116
118
|
not1mm/lib/new_contest.py,sha256=IznTDMq7yXHB6zBoGUEC_WDYPCPpsSZW4wwMJi16zK0,816
|
117
119
|
not1mm/lib/plugin_common.py,sha256=D1OBjyLmX7zuSPqgTCmHwXzAKA12J_zTQItvyIem-4Y,13299
|
118
120
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
119
|
-
not1mm/lib/settings.py,sha256=
|
121
|
+
not1mm/lib/settings.py,sha256=5xnsagH48qGeCDhfxPWW9yaXtv8wT13yoIVvYt8h_Qs,16023
|
120
122
|
not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
|
121
|
-
not1mm/lib/version.py,sha256=
|
123
|
+
not1mm/lib/version.py,sha256=gcUyTawJD4PIn_mBa947znnmgM9-mvfHXIEnCSo7gnM,49
|
122
124
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
123
125
|
not1mm/plugins/10_10_fall_cw.py,sha256=oJh3JKqjOpnWElSlZpiQ631UnaOd8qra5s9bl_QoInk,14783
|
124
126
|
not1mm/plugins/10_10_spring_cw.py,sha256=p7dSDtbFK0e6Xouw2V6swYn3VFVgHKyx4IfRWyBjMZY,14786
|
@@ -180,9 +182,9 @@ not1mm/plugins/ukeidx.py,sha256=0ABGW7_9Ui0Rgr8mkPBxOJokAIerM1a4-HWnl6VsnV8,1910
|
|
180
182
|
not1mm/plugins/vhf_sprint.py,sha256=a9QFTpv8XUbZ_GLjdVCh7svykFa-gXOWwKFZ6MD3uQM,19289
|
181
183
|
not1mm/plugins/weekly_rtty.py,sha256=C8Xs3Q5UgSYx-mFFar8BVARWtmqlyrbeC98Ubzb4UN8,20128
|
182
184
|
not1mm/plugins/winter_field_day.py,sha256=hmAMgkdqIXtnCNyUp8J9Bb8liN8wj10wps6ROuG-Bok,15284
|
183
|
-
not1mm-25.5.
|
184
|
-
not1mm-25.5.
|
185
|
-
not1mm-25.5.
|
186
|
-
not1mm-25.5.
|
187
|
-
not1mm-25.5.
|
188
|
-
not1mm-25.5.
|
185
|
+
not1mm-25.5.25.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
186
|
+
not1mm-25.5.25.dist-info/METADATA,sha256=LMao9elh21fHypET3g4kblWcGFyjDg5z0A1LSOMY2J0,41254
|
187
|
+
not1mm-25.5.25.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
|
188
|
+
not1mm-25.5.25.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
189
|
+
not1mm-25.5.25.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
190
|
+
not1mm-25.5.25.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|