not1mm 24.7.19__py3-none-any.whl → 24.7.25.1__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.
@@ -7,4 +7,4 @@ Exec=not1mm
7
7
  Icon=k6gte-not1mm
8
8
  Terminal=false
9
9
  Type=Application
10
- Categories=HamRadio;
10
+ Categories=Qt;Utility;HamRadio;ContactManagement;Database;
@@ -2,6 +2,20 @@
2
2
  K6GTE, CAT interface abstraction
3
3
  Email: michael.bridak@gmail.com
4
4
  GPL V3
5
+
6
+ rig.cwio_set_wpm n:i set cwio WPM
7
+ rig.cwio_text i:s send text via cwio interface
8
+ rig.cwio_send n:i cwio transmit 1/0 (on/off)
9
+ command lines to test the CW API via XMLRPC
10
+
11
+ Setting WPM
12
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
13
+
14
+ Setting the text to send
15
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_text</methodName><params><param><value><string>test test test</string></value></param></params></methodCall>" http://localhost:12345
16
+
17
+ Enable send
18
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_send</methodName><params><param><value><i4>1</i4></value></param></params></methodCall>" http://localhost:12345
5
19
  """
6
20
 
7
21
  import logging
@@ -94,7 +108,7 @@ class CAT:
94
108
  """..."""
95
109
  logger.debug(f"{texttosend=} {self.interface=}")
96
110
  if self.interface == "flrig":
97
- ...
111
+ self.sendcwxmlrpc(texttosend)
98
112
  return
99
113
  if self.interface == "rigctld":
100
114
  self.sendcwrigctl(texttosend)
@@ -117,6 +131,23 @@ class CAT:
117
131
 
118
132
  def sendcwxmlrpc(self, texttosend):
119
133
  """..."""
134
+ print(f"{texttosend=}")
135
+ try:
136
+ self.online = True
137
+ self.server.rig.cwio_send(1)
138
+ self.server.rig.cwio_text(texttosend)
139
+ return
140
+ except (
141
+ ConnectionRefusedError,
142
+ xmlrpc.client.Fault,
143
+ http.client.BadStatusLine,
144
+ http.client.CannotSendRequest,
145
+ http.client.ResponseNotReady,
146
+ ) as exception:
147
+ self.online = False
148
+ print("sendcwxmlrpc: %s", f"{exception}")
149
+ # logger.debug("sendcwxmlrpc: %s", f"{exception}")
150
+ return False
120
151
 
121
152
  def get_vfo(self) -> str:
122
153
  """Poll the radio for current vfo using the interface"""
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.7.19"
3
+ __version__ = "24.7.25.1"
not1mm/vfo.py CHANGED
@@ -39,6 +39,7 @@ class VfoWindow(QDockWidget):
39
39
  message_shown = False
40
40
  multicast_interface = None
41
41
  current_palette = None
42
+ device_reconnect = False
42
43
 
43
44
  def __init__(self):
44
45
  super().__init__()
@@ -64,6 +65,7 @@ class VfoWindow(QDockWidget):
64
65
  self.poll_rig_timer = QtCore.QTimer()
65
66
  self.poll_rig_timer.timeout.connect(self.poll_radio)
66
67
  self.poll_rig_timer.start(500)
68
+ self.visibilityChanged.connect(self.window_state_changed)
67
69
 
68
70
  def setDarkMode(self, dark: bool) -> None:
69
71
  """Forces a darkmode palette."""
@@ -178,27 +180,37 @@ class VfoWindow(QDockWidget):
178
180
  if "vfoknob" in data.decode().strip():
179
181
  return device
180
182
 
181
- def setup_serial(self) -> None:
183
+ def window_state_changed(self):
184
+ """Setup vfo knob if window is toggled on"""
185
+
186
+ if self.isVisible():
187
+ self.setup_serial()
188
+
189
+ def setup_serial(self, supress_msg=False) -> None:
182
190
  """
183
191
  Setup the device returned by discover_device()
184
192
  Or display message saying we didn't find one.
185
193
  """
186
194
 
195
+ if not self.isVisible():
196
+ return
197
+
187
198
  device = self.discover_device()
188
199
  if device:
189
200
  try:
190
201
  self.pico = serial.Serial("/dev/serial/by-id/" + device, 115200)
191
202
  self.pico.timeout = 100
192
203
  self.lcdNumber.setStyleSheet("QLCDNumber { color: white; }")
204
+ self.device_reconnect = True
193
205
  except OSError:
194
- if self.message_shown is False:
206
+ if self.message_shown is False and supress_msg is False:
195
207
  self.message_shown = True
196
208
  self.show_message_box(
197
209
  "Unable to locate or open the VFO knob serial device."
198
210
  )
199
211
  self.lcdNumber.setStyleSheet("QLCDNumber { color: red; }")
200
212
  else:
201
- if self.message_shown is False:
213
+ if self.message_shown is False and supress_msg is False:
202
214
  self.message_shown = True
203
215
  self.show_message_box(
204
216
  "Unable to locate or open the VFO knob serial device."
@@ -269,13 +281,14 @@ class VfoWindow(QDockWidget):
269
281
  return
270
282
  if vfo < 1700000 or vfo > 60000000:
271
283
  return
272
- if vfo != self.old_vfo:
284
+ if vfo != self.old_vfo or self.device_reconnect is True:
273
285
  self.old_vfo = vfo
274
286
  logger.debug(f"{vfo}")
275
287
  self.showNumber(vfo)
276
288
  # self.lcdNumber.display(dnum)
277
289
  # app.processEvents()
278
290
  cmd = f"F {vfo}\r"
291
+ self.device_reconnect = False
279
292
  try:
280
293
  if self.pico:
281
294
  self.pico.write(cmd.encode())
@@ -302,10 +315,14 @@ class VfoWindow(QDockWidget):
302
315
  self.showNumber(result)
303
316
  # self.lcdNumber.display(result)
304
317
  # app.processEvents()
318
+ else:
319
+ self.setup_serial(supress_msg=True)
305
320
  except OSError:
306
321
  logger.critical("Unable to write to serial device.")
322
+ self.pico = None
307
323
  except AttributeError:
308
324
  logger.critical("Unable to write to serial device.")
325
+ self.pico = None
309
326
  # app.processEvents()
310
327
 
311
328
  def show_message_box(self, message: str) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.7.19
3
+ Version: 24.7.25.1
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
@@ -223,6 +223,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
223
223
 
224
224
  ## Recent Changes
225
225
 
226
+ - [24-7-25-1] Have VFO dock widget handle disconnect/reconnect events of the USB VFO knob more gracefully.
227
+ - [24-7-25] Updated application categories for the desktop file.
228
+ - [24-7-25] Maybe let flrig send CW... Probably not.
226
229
  - [24-7-19] Use Qt's QSettings to store window and dockwidgets states.
227
230
  - [24-7-13] Trap Exceptions in flrig xmlrpc client.
228
231
 
@@ -6,7 +6,7 @@ not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
6
6
  not1mm/logwindow.py,sha256=pwhiwolmGnW01LF4sjlu3ywLsgfxL6KuGuKuYKYmgeY,44403
7
7
  not1mm/playsoundtest.py,sha256=_kvvOfgs-u-H4kVSiSlnDtn9HWv0RiJQybkv24CEngc,464
8
8
  not1mm/radio.py,sha256=eiB04LPMPBeMrBRI021Z7VXth66EOYb0Ujh11T9877c,3362
9
- not1mm/vfo.py,sha256=FVuRjA8LCLkt8pZ3enBuCcxLJchb1ysvaMnX0txrZSs,12038
9
+ not1mm/vfo.py,sha256=ZJYJHMUrvAWX_c4xXDOuxkbE9sFuF8THoqJXaz0e_AU,12663
10
10
  not1mm/voice_keying.py,sha256=fkexCCwWcZsXxYVAk0QGcpGbLjbS10ToxWtdKihIVM4,3152
11
11
  not1mm/data/JetBrainsMono-Regular.ttf,sha256=UOHctAKY_PzCGh7zy-6f6egnCcSK0wzmF0csBqO9lDY,203952
12
12
  not1mm/data/MASTER.SCP,sha256=CEjRJNnjBZJlhCi3UFS1qCVMjDqQwhlfk0yZ_os6myI,366153
@@ -23,7 +23,7 @@ not1mm/data/donors.html,sha256=8hNzO3Q5a6p-_3egT1hfOjimPf810tKMUM5ukLzUsGM,116
23
23
  not1mm/data/editcontact.ui,sha256=ax-pm4TeECpHl3LSb5z4L403WjPWXZ9KV2it_6gIjqk,27404
24
24
  not1mm/data/editmacro.ui,sha256=wbLuNwLsMBd9hEKs_6sH3ir5BynH9Bk-u8nWRjNyQ8w,2689
25
25
  not1mm/data/greendot.png,sha256=6h6KFMj5mmu07ppPWXXewH0PLAvbOOre-5z6rpzWLLo,474
26
- not1mm/data/k6gte-not1mm.desktop,sha256=bSiSG7PzGygv0bBaF7Nf48PApVyrobSBVNk7j7wRCqo,205
26
+ not1mm/data/k6gte-not1mm.desktop,sha256=dUi-YbHbavOsL3A29eglDQ0p1_cSKzJeEGQ52Qv_eKo,243
27
27
  not1mm/data/k6gte.not1mm-128.png,sha256=ZP93MfRqr4WwsFCwg1m5MZjLs8bG895vDW9DDDn1B_Q,6076
28
28
  not1mm/data/k6gte.not1mm-32.png,sha256=XdTsCa3xqwTfn26Ga7RwO_Vlbg_77RKkSc8bMxVcCac,1526
29
29
  not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N90,2925
@@ -91,7 +91,7 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
91
91
  not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
92
92
  not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
94
- not1mm/lib/cat_interface.py,sha256=NDlS4vdlH18oCgvXNjqFVymCAKJKyUNh6g1hmKwoV7k,16964
94
+ not1mm/lib/cat_interface.py,sha256=-ri3woVU_Q7r7usf5y15lm_9CQVxTgBYn2CSXt48ihg,18390
95
95
  not1mm/lib/cwinterface.py,sha256=Q8p3pScOHczZ8ptICfH1Yu6rCEwQJLgrNwYMN76B2i8,3389
96
96
  not1mm/lib/database.py,sha256=RQoj3JsTejMiiFIN42lY3N4jrj80htftdoFeRqVKnKs,42480
97
97
  not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
@@ -109,7 +109,7 @@ not1mm/lib/plugin_common.py,sha256=AAKBPCXzTWZJb-h08uPNnHVG7bSCg7kwukc211gFivY,8
109
109
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
110
110
  not1mm/lib/settings.py,sha256=MWiKXbasaFbzeHTjfzTaTqbCBrIijudP_-0a5jNmUAA,9265
111
111
  not1mm/lib/super_check_partial.py,sha256=p5l3u2ZOCBtlWgbvskC50FpuoaIpR07tfC6zTdRWbh4,2334
112
- not1mm/lib/version.py,sha256=X7UsWTkmHNoMFl40ndtGBSQuMBMqWBxeRhSrC6sjElw,48
112
+ not1mm/lib/version.py,sha256=vCCHd-NGTIRQF1HQqLA4TFjkjFR_ZtwCDpkOE8lTF1M,50
113
113
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
114
114
  not1mm/plugins/10_10_fall_cw.py,sha256=IttjX1yy4nDdACGsiYlPteFG8eVseX_WtoFio6bqHE8,10953
115
115
  not1mm/plugins/10_10_spring_cw.py,sha256=ThCptdM3dX4ywhoy2JRcOEyHSqcJolFaT7O_PYzM1Mg,10958
@@ -145,9 +145,9 @@ not1mm/plugins/naqp_ssb.py,sha256=VLWVrSzI0UP1AhSXYn61eZ7or1rz6a_pS_xCKfgS4Jw,11
145
145
  not1mm/plugins/phone_weekly_test.py,sha256=fLpMe03WB9_KgRl6vMgQQt_aktFdqfNt2Sw81CTRAUs,12325
146
146
  not1mm/plugins/stew_perry_topband.py,sha256=CKBQbYl4ETxhXJd2dma4fg_C5pag_s7Nf61SCztZtqE,10668
147
147
  not1mm/plugins/winter_field_day.py,sha256=4rcfRtobwjHO6BNL3WOTHzBmyyeuX79BNGBG8PfjrI8,10238
148
- not1mm-24.7.19.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
149
- not1mm-24.7.19.dist-info/METADATA,sha256=EdsnUz2o1LrulLIrNHTDLohqKB56-4s8S5VNWk5bWDw,29186
150
- not1mm-24.7.19.dist-info/WHEEL,sha256=rWxmBtp7hEUqVLOnTaDOPpR-cZpCDkzhhcBce-Zyd5k,91
151
- not1mm-24.7.19.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
152
- not1mm-24.7.19.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
153
- not1mm-24.7.19.dist-info/RECORD,,
148
+ not1mm-24.7.25.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
149
+ not1mm-24.7.25.1.dist-info/METADATA,sha256=F72Ht3kFbVRg_dd4Y24UagfXACEBvjkEvrQO9ScxBRU,29413
150
+ not1mm-24.7.25.1.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
151
+ not1mm-24.7.25.1.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
152
+ not1mm-24.7.25.1.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
153
+ not1mm-24.7.25.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.0.4)
2
+ Generator: setuptools (71.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5