not1mm 25.6.12__py3-none-any.whl → 25.6.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/data/rotator.ui +73 -0
- not1mm/lib/rot_interface.py +12 -12
- not1mm/lib/version.py +1 -1
- not1mm/rotator.py +63 -47
- {not1mm-25.6.12.dist-info → not1mm-25.6.13.dist-info}/METADATA +26 -6
- {not1mm-25.6.12.dist-info → not1mm-25.6.13.dist-info}/RECORD +10 -10
- {not1mm-25.6.12.dist-info → not1mm-25.6.13.dist-info}/WHEEL +0 -0
- {not1mm-25.6.12.dist-info → not1mm-25.6.13.dist-info}/entry_points.txt +0 -0
- {not1mm-25.6.12.dist-info → not1mm-25.6.13.dist-info}/licenses/LICENSE +0 -0
- {not1mm-25.6.12.dist-info → not1mm-25.6.13.dist-info}/top_level.txt +0 -0
not1mm/data/rotator.ui
CHANGED
@@ -29,16 +29,65 @@
|
|
29
29
|
</property>
|
30
30
|
<item>
|
31
31
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
32
|
+
<item>
|
33
|
+
<widget class="QPushButton" name="stop_button">
|
34
|
+
<property name="styleSheet">
|
35
|
+
<string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
|
36
|
+
</property>
|
37
|
+
<property name="text">
|
38
|
+
<string>Stop</string>
|
39
|
+
</property>
|
40
|
+
</widget>
|
41
|
+
</item>
|
42
|
+
<item>
|
43
|
+
<spacer name="horizontalSpacer_3">
|
44
|
+
<property name="orientation">
|
45
|
+
<enum>Qt::Orientation::Horizontal</enum>
|
46
|
+
</property>
|
47
|
+
<property name="sizeHint" stdset="0">
|
48
|
+
<size>
|
49
|
+
<width>40</width>
|
50
|
+
<height>20</height>
|
51
|
+
</size>
|
52
|
+
</property>
|
53
|
+
</spacer>
|
54
|
+
</item>
|
32
55
|
<item>
|
33
56
|
<widget class="QPushButton" name="move_button">
|
34
57
|
<property name="focusPolicy">
|
35
58
|
<enum>Qt::FocusPolicy::NoFocus</enum>
|
36
59
|
</property>
|
60
|
+
<property name="styleSheet">
|
61
|
+
<string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
|
62
|
+
</property>
|
37
63
|
<property name="text">
|
38
64
|
<string>Move</string>
|
39
65
|
</property>
|
40
66
|
</widget>
|
41
67
|
</item>
|
68
|
+
<item>
|
69
|
+
<spacer name="horizontalSpacer_4">
|
70
|
+
<property name="orientation">
|
71
|
+
<enum>Qt::Orientation::Horizontal</enum>
|
72
|
+
</property>
|
73
|
+
<property name="sizeHint" stdset="0">
|
74
|
+
<size>
|
75
|
+
<width>40</width>
|
76
|
+
<height>20</height>
|
77
|
+
</size>
|
78
|
+
</property>
|
79
|
+
</spacer>
|
80
|
+
</item>
|
81
|
+
<item>
|
82
|
+
<widget class="QPushButton" name="park_button">
|
83
|
+
<property name="styleSheet">
|
84
|
+
<string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
|
85
|
+
</property>
|
86
|
+
<property name="text">
|
87
|
+
<string>Park</string>
|
88
|
+
</property>
|
89
|
+
</widget>
|
90
|
+
</item>
|
42
91
|
</layout>
|
43
92
|
</item>
|
44
93
|
<item>
|
@@ -74,9 +123,18 @@
|
|
74
123
|
</item>
|
75
124
|
<item>
|
76
125
|
<widget class="QPushButton" name="north_button">
|
126
|
+
<property name="sizePolicy">
|
127
|
+
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
128
|
+
<horstretch>0</horstretch>
|
129
|
+
<verstretch>0</verstretch>
|
130
|
+
</sizepolicy>
|
131
|
+
</property>
|
77
132
|
<property name="focusPolicy">
|
78
133
|
<enum>Qt::FocusPolicy::NoFocus</enum>
|
79
134
|
</property>
|
135
|
+
<property name="styleSheet">
|
136
|
+
<string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
|
137
|
+
</property>
|
80
138
|
<property name="text">
|
81
139
|
<string>N</string>
|
82
140
|
</property>
|
@@ -86,6 +144,12 @@
|
|
86
144
|
<height>16</height>
|
87
145
|
</size>
|
88
146
|
</property>
|
147
|
+
<property name="autoDefault">
|
148
|
+
<bool>false</bool>
|
149
|
+
</property>
|
150
|
+
<property name="default">
|
151
|
+
<bool>false</bool>
|
152
|
+
</property>
|
89
153
|
<property name="flat">
|
90
154
|
<bool>false</bool>
|
91
155
|
</property>
|
@@ -96,6 +160,9 @@
|
|
96
160
|
<property name="focusPolicy">
|
97
161
|
<enum>Qt::FocusPolicy::NoFocus</enum>
|
98
162
|
</property>
|
163
|
+
<property name="styleSheet">
|
164
|
+
<string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
|
165
|
+
</property>
|
99
166
|
<property name="text">
|
100
167
|
<string>S</string>
|
101
168
|
</property>
|
@@ -106,6 +173,9 @@
|
|
106
173
|
<property name="focusPolicy">
|
107
174
|
<enum>Qt::FocusPolicy::NoFocus</enum>
|
108
175
|
</property>
|
176
|
+
<property name="styleSheet">
|
177
|
+
<string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
|
178
|
+
</property>
|
109
179
|
<property name="text">
|
110
180
|
<string>W</string>
|
111
181
|
</property>
|
@@ -116,6 +186,9 @@
|
|
116
186
|
<property name="focusPolicy">
|
117
187
|
<enum>Qt::FocusPolicy::NoFocus</enum>
|
118
188
|
</property>
|
189
|
+
<property name="styleSheet">
|
190
|
+
<string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
|
191
|
+
</property>
|
119
192
|
<property name="text">
|
120
193
|
<string>E</string>
|
121
194
|
</property>
|
not1mm/lib/rot_interface.py
CHANGED
@@ -13,13 +13,13 @@ class RotatorInterface:
|
|
13
13
|
"""
|
14
14
|
|
15
15
|
def __init__(self, host="127.0.0.1", port=4533):
|
16
|
-
self.host = host
|
17
|
-
self.port = port
|
18
|
-
self.socket = None
|
19
|
-
self.connected = False
|
16
|
+
self.host: str = host
|
17
|
+
self.port: int = port
|
18
|
+
self.socket: socket.socket | None = None
|
19
|
+
self.connected: bool = False
|
20
20
|
self.connect()
|
21
21
|
|
22
|
-
def connect(self):
|
22
|
+
def connect(self) -> None:
|
23
23
|
"""Connect to the rotator control program."""
|
24
24
|
try:
|
25
25
|
self.socket = socket.create_connection((self.host, self.port), timeout=1)
|
@@ -32,9 +32,9 @@ class RotatorInterface:
|
|
32
32
|
)
|
33
33
|
self.socket = None
|
34
34
|
|
35
|
-
def disconnect(self):
|
35
|
+
def disconnect(self) -> None:
|
36
36
|
"""Disconnect from the rotator control program."""
|
37
|
-
if self.socket:
|
37
|
+
if isinstance(self.socket, socket.socket):
|
38
38
|
try:
|
39
39
|
self.socket.close()
|
40
40
|
logger.info("Disconnected from rotator")
|
@@ -43,11 +43,11 @@ class RotatorInterface:
|
|
43
43
|
self.socket = None
|
44
44
|
self.connected = False
|
45
45
|
|
46
|
-
def send_command(self, command):
|
46
|
+
def send_command(self, command) -> str | None:
|
47
47
|
"""Send a command to the rotator control program and return the response."""
|
48
|
-
if
|
48
|
+
if self.connected is False or self.socket is None:
|
49
49
|
self.connect()
|
50
|
-
if
|
50
|
+
if self.connected is False or self.socket is None:
|
51
51
|
logger.warning("Not connected to rotator. Command not sent.")
|
52
52
|
return None
|
53
53
|
|
@@ -61,11 +61,11 @@ class RotatorInterface:
|
|
61
61
|
self.disconnect()
|
62
62
|
return None
|
63
63
|
|
64
|
-
def get_position(self):
|
64
|
+
def get_position(self) -> tuple[float, float] | None:
|
65
65
|
"""Get the current azimuth and elevation from the rotator."""
|
66
66
|
response = self.send_command("p")
|
67
67
|
logger.debug(f"get_position response: {response}")
|
68
|
-
if response:
|
68
|
+
if response is not None:
|
69
69
|
if response == "RPRT -1":
|
70
70
|
return None, None
|
71
71
|
try:
|
not1mm/lib/version.py
CHANGED
not1mm/rotator.py
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
from PyQt6.QtWidgets import
|
1
|
+
from PyQt6.QtWidgets import (
|
2
|
+
QDockWidget,
|
3
|
+
QGraphicsScene,
|
4
|
+
QGraphicsPathItem,
|
5
|
+
QGraphicsPixmapItem,
|
6
|
+
)
|
2
7
|
|
3
8
|
from PyQt6.QtGui import (
|
4
9
|
QImage,
|
@@ -24,32 +29,33 @@ logger = logging.getLogger(__name__)
|
|
24
29
|
|
25
30
|
|
26
31
|
class RotatorWindow(QDockWidget):
|
27
|
-
message = pyqtSignal(dict)
|
28
|
-
pref = {}
|
29
|
-
MAP_RESOLUTION = 600
|
30
|
-
GLOBE_RADIUS = 100.0
|
31
|
-
|
32
|
-
|
33
|
-
antennaNeedle = None
|
32
|
+
message: pyqtSignal = pyqtSignal(dict)
|
33
|
+
pref: dict = {}
|
34
|
+
MAP_RESOLUTION: int = 600
|
35
|
+
GLOBE_RADIUS: float = 100.0
|
36
|
+
requestedAzimuthNeedle: QGraphicsPathItem | None = None
|
37
|
+
antennaNeedle: QGraphicsPathItem | None = None
|
34
38
|
|
35
39
|
def __init__(self):
|
36
40
|
super().__init__()
|
37
|
-
self.active = False
|
38
|
-
self.compassScene = None
|
39
|
-
self.mygrid = "DM13at"
|
40
|
-
self.requestedAzimuth = None
|
41
|
-
self.antennaAzimuth = None
|
41
|
+
self.active: bool = False
|
42
|
+
self.compassScene: QGraphicsScene | None = None
|
43
|
+
self.mygrid: str = "DM13at"
|
44
|
+
self.requestedAzimuth: float | None = None
|
45
|
+
self.antennaAzimuth: float | None = None
|
42
46
|
uic.loadUi(fsutils.APP_DATA_PATH / "rotator.ui", self)
|
43
47
|
self.north_button.clicked.connect(self.set_north_azimuth)
|
44
48
|
self.south_button.clicked.connect(self.set_south_azimuth)
|
45
49
|
self.east_button.clicked.connect(self.set_east_azimuth)
|
46
50
|
self.west_button.clicked.connect(self.set_west_azimuth)
|
47
51
|
self.move_button.clicked.connect(self.the_eye_of_sauron)
|
52
|
+
self.stop_button.clicked.connect(lambda x: self.rotator.send_command("S"))
|
53
|
+
self.park_button.clicked.connect(lambda x: self.rotator.send_command("K"))
|
48
54
|
self.redrawMap()
|
49
|
-
self.rotator = RotatorInterface()
|
55
|
+
self.rotator: RotatorInterface = RotatorInterface()
|
50
56
|
self.antennaAzimuth, _ = self.rotator.get_position()
|
51
57
|
self.set_antenna_azimuth(self.antennaAzimuth)
|
52
|
-
self.watch_timer = QTimer()
|
58
|
+
self.watch_timer: QTimer = QTimer()
|
53
59
|
self.watch_timer.timeout.connect(self.check_rotator)
|
54
60
|
self.watch_timer.start(1000)
|
55
61
|
|
@@ -115,13 +121,13 @@ class RotatorWindow(QDockWidget):
|
|
115
121
|
|
116
122
|
def redrawMap(self) -> None:
|
117
123
|
""""""
|
118
|
-
self.compassScene = QGraphicsScene()
|
124
|
+
self.compassScene: QGraphicsScene = QGraphicsScene()
|
119
125
|
self.compassView.setScene(self.compassScene)
|
120
126
|
self.compassView.setStyleSheet("background-color: transparent;")
|
121
127
|
file = fsutils.APP_DATA_PATH / "map3.png"
|
122
|
-
source = QImage()
|
128
|
+
source: QImage = QImage()
|
123
129
|
source.load(str(file))
|
124
|
-
the_map = QImage(
|
130
|
+
the_map: QImage = QImage(
|
125
131
|
self.MAP_RESOLUTION, self.MAP_RESOLUTION, QImage.Format.Format_ARGB32
|
126
132
|
)
|
127
133
|
the_map.fill(QColor(0, 0, 0, 0))
|
@@ -134,12 +140,17 @@ class RotatorWindow(QDockWidget):
|
|
134
140
|
source, lat, lon, output_size=self.MAP_RESOLUTION
|
135
141
|
)
|
136
142
|
|
137
|
-
pixMapItem = self.compassScene.addPixmap(
|
138
|
-
|
139
|
-
pixMapItem.setTransformOriginPoint(
|
140
|
-
self.MAP_RESOLUTION / 2, self.MAP_RESOLUTION / 2
|
143
|
+
pixMapItem: QGraphicsPixmapItem | None = self.compassScene.addPixmap(
|
144
|
+
QPixmap.fromImage(the_map)
|
141
145
|
)
|
142
|
-
pixMapItem
|
146
|
+
if pixMapItem is None:
|
147
|
+
logging.error("Unable to add pixmap to scene")
|
148
|
+
else:
|
149
|
+
pixMapItem.moveBy(-self.MAP_RESOLUTION / 2, -self.MAP_RESOLUTION / 2)
|
150
|
+
pixMapItem.setTransformOriginPoint(
|
151
|
+
self.MAP_RESOLUTION / 2, self.MAP_RESOLUTION / 2
|
152
|
+
)
|
153
|
+
pixMapItem.setScale(self.GLOBE_RADIUS * 2 / self.MAP_RESOLUTION)
|
143
154
|
self.compassScene.addEllipse(
|
144
155
|
-100,
|
145
156
|
-100,
|
@@ -156,36 +167,41 @@ class RotatorWindow(QDockWidget):
|
|
156
167
|
QPen(Qt.PenStyle.NoPen),
|
157
168
|
QBrush(QColor(0, 0, 0), Qt.BrushStyle.SolidPattern),
|
158
169
|
)
|
159
|
-
path = QPainterPath()
|
170
|
+
path: QPainterPath = QPainterPath()
|
160
171
|
path.lineTo(-4, 0)
|
161
172
|
path.lineTo(0, -90)
|
162
173
|
path.lineTo(4, 0)
|
163
174
|
path.closeSubpath()
|
164
175
|
|
165
|
-
path2 = QPainterPath()
|
166
|
-
path2.lineTo(-1, 0)
|
167
|
-
path2.lineTo(0, -90)
|
168
|
-
path2.lineTo(1, 0)
|
169
|
-
path2.closeSubpath()
|
170
|
-
|
171
|
-
self.requestedAzimuthNeedle =
|
172
|
-
|
173
|
-
|
174
|
-
|
176
|
+
# path2: QPainterPath = QPainterPath()
|
177
|
+
# path2.lineTo(-1, 0)
|
178
|
+
# path2.lineTo(0, -90)
|
179
|
+
# path2.lineTo(1, 0)
|
180
|
+
# path2.closeSubpath()
|
181
|
+
|
182
|
+
self.requestedAzimuthNeedle: QGraphicsPathItem | None = (
|
183
|
+
self.compassScene.addPath(
|
184
|
+
path,
|
185
|
+
QPen(QColor(0, 0, 0, 150)),
|
186
|
+
QBrush(QColor(0, 0, 255), Qt.BrushStyle.SolidPattern),
|
187
|
+
)
|
175
188
|
)
|
176
189
|
|
177
|
-
if
|
190
|
+
if (
|
191
|
+
isinstance(self.requestedAzimuth, float)
|
192
|
+
and self.requestedAzimuthNeedle is not None
|
193
|
+
):
|
178
194
|
self.requestedAzimuthNeedle.setRotation(self.requestedAzimuth)
|
179
195
|
self.requestedAzimuthNeedle.show()
|
180
196
|
else:
|
181
197
|
self.requestedAzimuthNeedle.hide()
|
182
198
|
|
183
|
-
self.antennaNeedle = self.compassScene.addPath(
|
199
|
+
self.antennaNeedle: QGraphicsPathItem | None = self.compassScene.addPath(
|
184
200
|
path,
|
185
201
|
QPen(QColor(0, 0, 0, 150)),
|
186
202
|
QBrush(QColor(255, 191, 0), Qt.BrushStyle.SolidPattern),
|
187
203
|
)
|
188
|
-
if isinstance(self.antennaAzimuth, float):
|
204
|
+
if isinstance(self.antennaAzimuth, float) and self.antennaNeedle is not None:
|
189
205
|
self.antennaNeedle.setRotation(self.antennaAzimuth)
|
190
206
|
self.antennaNeedle.show()
|
191
207
|
else:
|
@@ -196,11 +212,11 @@ class RotatorWindow(QDockWidget):
|
|
196
212
|
Converts a maidenhead gridsquare to a latitude longitude pair.
|
197
213
|
"""
|
198
214
|
try:
|
199
|
-
maiden = str(maiden).strip().upper()
|
215
|
+
maiden: str = str(maiden).strip().upper()
|
200
216
|
|
201
|
-
chars_in_grid_square = len(maiden)
|
217
|
+
chars_in_grid_square: int = len(maiden)
|
202
218
|
if not 8 >= chars_in_grid_square >= 2 and chars_in_grid_square % 2 == 0:
|
203
|
-
return 0, 0
|
219
|
+
return 0.0, 0.0
|
204
220
|
lon = (ord(maiden[0]) - 65) * 20 - 180
|
205
221
|
lat = (ord(maiden[1]) - 65) * 10 - 90
|
206
222
|
if chars_in_grid_square >= 4:
|
@@ -224,7 +240,7 @@ class RotatorWindow(QDockWidget):
|
|
224
240
|
lon += 10
|
225
241
|
lat += 5
|
226
242
|
|
227
|
-
return lat, lon
|
243
|
+
return float(lat), float(lon)
|
228
244
|
except IndexError:
|
229
245
|
return 0.0, 0.0
|
230
246
|
|
@@ -238,16 +254,16 @@ class RotatorWindow(QDockWidget):
|
|
238
254
|
"""This does some super magic"""
|
239
255
|
|
240
256
|
width, height = source_img.width(), source_img.height()
|
241
|
-
dest_img = QImage(output_size, output_size, QImage.Format.Format_ARGB32)
|
257
|
+
dest_img: QImage = QImage(output_size, output_size, QImage.Format.Format_ARGB32)
|
242
258
|
|
243
259
|
# Convert center point to radians
|
244
|
-
lat0 = math.radians(center_lat_deg)
|
245
|
-
lon0 = math.radians(center_lon_deg)
|
260
|
+
lat0: float = math.radians(center_lat_deg)
|
261
|
+
lon0: float = math.radians(center_lon_deg)
|
246
262
|
|
247
|
-
sin_lat = math.sin(lat0)
|
248
|
-
cos_lat = math.cos(lat0)
|
263
|
+
sin_lat: float = math.sin(lat0)
|
264
|
+
cos_lat: float = math.cos(lat0)
|
249
265
|
|
250
|
-
R = output_size / 2
|
266
|
+
R: float = output_size / 2
|
251
267
|
for y in range(output_size):
|
252
268
|
for x in range(output_size):
|
253
269
|
# Convert pixel coordinate to normalized cartesian coordinate in range [-1, 1]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: not1mm
|
3
|
-
Version: 25.6.
|
3
|
+
Version: 25.6.13
|
4
4
|
Summary: NOT1MM Logger
|
5
5
|
Author-email: Michael Bridak <michael.bridak@gmail.com>
|
6
6
|
License: GPL-3.0-or-later
|
@@ -246,6 +246,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
246
246
|
|
247
247
|
## Recent Changes
|
248
248
|
|
249
|
+
- [25-6-13] Polished up the Rotator window. Adding Stop and Park. Made the NSWE buttons smaller.
|
249
250
|
- [25-6-12] Account for no gridsquare being returned from lookup service.
|
250
251
|
- [25-6-11] Added a rotator control widget.
|
251
252
|
- [25-6-10] Merged PR from @dj1yfk correcting WPX prefix calculation.
|
@@ -703,13 +704,32 @@ This window shows you a grid of DXCC entities you've aquired and on what bands.
|
|
703
704
|
|
704
705
|
`Window`>`Rotator`
|
705
706
|
|
706
|
-
The Rotator window is a work in progress.
|
707
|
-
|
707
|
+
The Rotator window is a work in progress. The Rotator window relies on the functionality
|
708
|
+
of the rotctld daemon. It connects to rotctld over it's default port of 4533. If started
|
709
|
+
and there is no connection, you will see this:
|
708
710
|
|
709
|
-

|
710
712
|
|
711
|
-
|
712
|
-
|
713
|
+
Once there is a connection to rotctld, the current azimuth of the antenna is obtained and
|
714
|
+
you will see a direction needle apear:
|
715
|
+
|
716
|
+

|
717
|
+
|
718
|
+
Once a call is entered and the bearing to contact is calculated you will see another needle
|
719
|
+
appear:
|
720
|
+
|
721
|
+

|
722
|
+
|
723
|
+
At this time you can click on the 'Move' button to point your antenna at the contact. A list
|
724
|
+
of other buttons follows below.
|
725
|
+
|
726
|
+
Move: Rotates the antenna at the target.
|
727
|
+
|
728
|
+
Stop: Stops the current movement.
|
729
|
+
|
730
|
+
Park: Parks the antenna.
|
731
|
+
|
732
|
+
N,S,W,E: Points the antenna to one of the 4 cardinal directions.
|
713
733
|
|
714
734
|
### The Remote VFO Window
|
715
735
|
|
@@ -8,7 +8,7 @@ not1mm/logwindow.py,sha256=O2dMaT_BYWsXA_dxsEHN92JwN-qVGy9nmH0MCMaG9gY,42830
|
|
8
8
|
not1mm/lookupservice.py,sha256=GkY_qHZfrW6XHf8upIoaG4hCFqm0fg6Ganu9ConGrIc,2628
|
9
9
|
not1mm/radio.py,sha256=4Lysf9BY3vdtYCHwKfzO5WN7IGyh4_lKSVuQ6F4Z08g,5536
|
10
10
|
not1mm/ratewindow.py,sha256=iBjqdOetIEX0wSwdGM89Ibt4gVlFdE-K8HQPnkVPVOg,6965
|
11
|
-
not1mm/rotator.py,sha256=
|
11
|
+
not1mm/rotator.py,sha256=JNQnQUComEiQ4dudXvo9nPXvkaRAegPUWPpB4Y1Ggn4,12093
|
12
12
|
not1mm/rtc_service.py,sha256=axAwnCBuTr-QL0YwXtWvg9tjwhcFsiiEZFgFjOofX6k,2816
|
13
13
|
not1mm/statistics.py,sha256=eOmUvbbYdbbIYHmaEhtBGab1IxAf2RQYV1q9MItpqEM,7969
|
14
14
|
not1mm/test.py,sha256=WhL0DLlJTD15aON8Dkf2q_tlP_X1juxKZJh0jEC99tU,154
|
@@ -49,7 +49,7 @@ not1mm/data/radio_grey.png,sha256=9eOtMHDpQvRYY29D7_vPeacWbwotRXZTMm8EiHE9TW0,12
|
|
49
49
|
not1mm/data/radio_red.png,sha256=QvkMk7thd_hCEIyK5xGAG4xVVXivl39nwOfD8USDI20,957
|
50
50
|
not1mm/data/ratewindow.ui,sha256=c0gikcZQYWuGwWdFE1PGcRbeJ9nTUPIRkOozWo2FQw8,11541
|
51
51
|
not1mm/data/reddot.png,sha256=M33jEMoU8W4rQ4_MVyzzKxDPDte1ypKBch5VnUMNLKE,565
|
52
|
-
not1mm/data/rotator.ui,sha256=
|
52
|
+
not1mm/data/rotator.ui,sha256=BuWDzo3R68bDT4cbhQxqjVWzu_QRueuFf4ov3AbGcqc,6606
|
53
53
|
not1mm/data/rttymacros.txt,sha256=FQ2BnAChXF5w-tzmMnBOE8IgvviAEsd3cmmz4b8GOPk,467
|
54
54
|
not1mm/data/settings.ui,sha256=0nAdg4hDv37x0RL5G0Cc1L8p-F95YtkOjIGqlCGu0Fs,40073
|
55
55
|
not1mm/data/splash.png,sha256=85_BQotR1q24uCthrKm4SB_6ZOMwRjR-Jdp1XBHSTyg,5368
|
@@ -122,11 +122,11 @@ not1mm/lib/multicast.py,sha256=KJcruI-bOuHfHXPjl3SGQhL6I9sKrygy-sdFSvxffUM,3255
|
|
122
122
|
not1mm/lib/n1mm.py,sha256=H54mpgJF0GAmKavM-nb5OAq2SJFWYkux4eMWWiSRxJc,6288
|
123
123
|
not1mm/lib/new_contest.py,sha256=IznTDMq7yXHB6zBoGUEC_WDYPCPpsSZW4wwMJi16zK0,816
|
124
124
|
not1mm/lib/plugin_common.py,sha256=nqiUq11T9Wz8RDrRen4Zvp-KXVWUYcIp5JPZwqmu2Oo,13913
|
125
|
-
not1mm/lib/rot_interface.py,sha256=
|
125
|
+
not1mm/lib/rot_interface.py,sha256=bOyxpV9pQHORUY5qfNZE2QAV1V71QEG2jooiI2p9AwE,3744
|
126
126
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
127
127
|
not1mm/lib/settings.py,sha256=5xnsagH48qGeCDhfxPWW9yaXtv8wT13yoIVvYt8h_Qs,16023
|
128
128
|
not1mm/lib/super_check_partial.py,sha256=jX7DjHesEV4KNVQbddJui0wAsYHerikH7W0iPv7PXQw,3110
|
129
|
-
not1mm/lib/version.py,sha256=
|
129
|
+
not1mm/lib/version.py,sha256=MZm754tCMJPrW5XS3srtu2WCKJEPb4Lytw4PBd4QtUY,48
|
130
130
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
131
131
|
not1mm/plugins/10_10_fall_cw.py,sha256=oJh3JKqjOpnWElSlZpiQ631UnaOd8qra5s9bl_QoInk,14783
|
132
132
|
not1mm/plugins/10_10_spring_cw.py,sha256=p7dSDtbFK0e6Xouw2V6swYn3VFVgHKyx4IfRWyBjMZY,14786
|
@@ -190,9 +190,9 @@ not1mm/plugins/ukeidx.py,sha256=ZsIFXgOSwjuKNmN4W_C0TAgGqgnabJGNLMHwGkl3_bk,1910
|
|
190
190
|
not1mm/plugins/vhf_sprint.py,sha256=a9QFTpv8XUbZ_GLjdVCh7svykFa-gXOWwKFZ6MD3uQM,19289
|
191
191
|
not1mm/plugins/weekly_rtty.py,sha256=C8Xs3Q5UgSYx-mFFar8BVARWtmqlyrbeC98Ubzb4UN8,20128
|
192
192
|
not1mm/plugins/winter_field_day.py,sha256=hmAMgkdqIXtnCNyUp8J9Bb8liN8wj10wps6ROuG-Bok,15284
|
193
|
-
not1mm-25.6.
|
194
|
-
not1mm-25.6.
|
195
|
-
not1mm-25.6.
|
196
|
-
not1mm-25.6.
|
197
|
-
not1mm-25.6.
|
198
|
-
not1mm-25.6.
|
193
|
+
not1mm-25.6.13.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
194
|
+
not1mm-25.6.13.dist-info/METADATA,sha256=iiVU3j19IsjaCEOVA4OG1bA26lASv3sI5T7evL0g91o,36455
|
195
|
+
not1mm-25.6.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
196
|
+
not1mm-25.6.13.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
197
|
+
not1mm-25.6.13.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
198
|
+
not1mm-25.6.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|