not1mm 24.11.6__tar.gz → 24.11.12.1__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.
- {not1mm-24.11.6 → not1mm-24.11.12.1}/PKG-INFO +3 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/README.md +2 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/__main__.py +36 -6
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/cat_interface.py +55 -10
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/cwinterface.py +28 -3
- not1mm-24.11.12.1/not1mm/lib/version.py +3 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_ss_cw.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_vhf_jan.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_vhf_jun.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_vhf_sep.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_160_cw.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_160_ssb.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_ww_cw.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_ww_rtty.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_ww_ssb.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/k1usn_sst.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/naqp_cw.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/naqp_rtty.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/naqp_ssb.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/raem.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/stew_perry_topband.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/weekly_rtty.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/winter_field_day.py +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/radio.py +24 -0
- not1mm-24.11.12.1/not1mm/test.py +39 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm.egg-info/PKG-INFO +3 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm.egg-info/SOURCES.txt +1 -3
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm.egg-info/top_level.txt +0 -1
- {not1mm-24.11.6 → not1mm-24.11.12.1}/pyproject.toml +1 -1
- not1mm-24.11.6/not1mm/lib/playsound.py +0 -296
- not1mm-24.11.6/not1mm/lib/version.py +0 -3
- not1mm-24.11.6/not1mm/test.py +0 -61
- not1mm-24.11.6/test/contests.py +0 -591
- {not1mm-24.11.6 → not1mm-24.11.12.1}/LICENSE +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/__init__.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/bandmap.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/checkwindow.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/MASTER.SCP +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/about.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/alpha bravo charlie delta.txt +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/bandmap.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/check.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/checkwindow.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/configuration.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/contests.sql +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/cty.json +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/cwmacros.txt +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/donors.html +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/editcontact.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/editmacro.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/greendot.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/k6gte-not1mm.desktop +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/k6gte.not1mm-128.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/k6gte.not1mm-32.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/k6gte.not1mm-64.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/logwindow.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/logwindowx.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/main.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/new_contest.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/not1mm.html +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/opon.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/0.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/1.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/2.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/3.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/4.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/5.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/6.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/7.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/73.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/8.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/9.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/a.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/again.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/b.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/c.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/contest.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/cq.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/cq2.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/d.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/e.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/f.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/g.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/h.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/i.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/j.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/k.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/k6gte.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/l.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/m.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/mynumber.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/n.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/nil.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/o.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/p.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/q.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/r.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/roger.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/s.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/space.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/t.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/thankyou.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/u.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/v.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/w.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/x.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/y.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/yourcall.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/phonetics/z.wav +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/pickcontest.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/radio_green.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/radio_grey.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/radio_red.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/reddot.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/rttymacros.txt +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/settings.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/splash.png +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/ssbmacros.txt +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/data/vfo.ui +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/fsutils.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/__init__.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/about.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/database.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/edit_contact.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/edit_macro.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/edit_opon.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/edit_station.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/fldigi_sendstring.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/fldigi_watcher.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/ft8_watcher.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/ham_utility.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/lookup.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/multicast.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/n1mm.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/new_contest.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/plugin_common.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/select_contest.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/settings.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/super_check_partial.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lib/versiontest.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/logwindow.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/lookupservice.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/10_10_fall_cw.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/10_10_spring_cw.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/10_10_summer_phone.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/10_10_winter_phone.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/__init__.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_10m.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_dx_cw.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_dx_ssb.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_field_day.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_rtty_ru.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/arrl_ss_phone.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/canada_day.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_wpx_cw.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_wpx_rtty.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cq_wpx_ssb.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/cwt.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/general_logging.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/helvetia.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/iaru_hf.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/icwc_mst.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/jidx_cw.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/jidx_ph.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/phone_weekly_test.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/ref_cw.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/plugins/ref_ssb.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/vfo.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm/voice_keying.py +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm.egg-info/dependency_links.txt +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm.egg-info/entry_points.txt +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/not1mm.egg-info/requires.txt +0 -0
- {not1mm-24.11.6 → not1mm-24.11.12.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.11.
|
3
|
+
Version: 24.11.12.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
|
@@ -236,6 +236,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
236
236
|
|
237
237
|
## Recent Changes (Polishing the Turd)
|
238
238
|
|
239
|
+
- [24-11-12] add check for ipv4 address for CAT.
|
240
|
+
- [24-11-10] ReJiggered CAT/flrig interface to hopefull make it more workable.
|
239
241
|
- [24-11-6] Added Call history to ARRL VHF, CQ160, CQWW, StewPerry, Weekly RTTY
|
240
242
|
- [24-11-5] Fix crash with bad qrz credentials.
|
241
243
|
- [24-11-3-1] Fixed CWT ESM, Add Call History to CWT, Helvetia, WFD, NAQP, K1USN. Add ESM Helvetia.
|
@@ -205,6 +205,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
205
205
|
|
206
206
|
## Recent Changes (Polishing the Turd)
|
207
207
|
|
208
|
+
- [24-11-12] add check for ipv4 address for CAT.
|
209
|
+
- [24-11-10] ReJiggered CAT/flrig interface to hopefull make it more workable.
|
208
210
|
- [24-11-6] Added Call history to ARRL VHF, CQ160, CQWW, StewPerry, Weekly RTTY
|
209
211
|
- [24-11-5] Fix crash with bad qrz credentials.
|
210
212
|
- [24-11-3-1] Fixed CWT ESM, Add Call History to CWT, Helvetia, WFD, NAQP, K1USN. Add ESM Helvetia.
|
@@ -1107,11 +1107,16 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1107
1107
|
-------
|
1108
1108
|
Nothing
|
1109
1109
|
"""
|
1110
|
+
|
1110
1111
|
if mode in ["CW", "SSB", "RTTY"]:
|
1111
1112
|
freq = fakefreq(str(band), mode)
|
1112
1113
|
self.change_freq(freq)
|
1113
1114
|
vfo = float(freq)
|
1114
1115
|
vfo = int(vfo * 1000)
|
1116
|
+
if mode == "CW":
|
1117
|
+
mode = self.rig_control.last_cw_mode
|
1118
|
+
if mode == "RTTY":
|
1119
|
+
mode = self.rig_control.last_data_mode
|
1115
1120
|
self.change_mode(mode, intended_freq=vfo)
|
1116
1121
|
|
1117
1122
|
def quit_app(self) -> None:
|
@@ -2019,8 +2024,19 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2019
2024
|
Returns:
|
2020
2025
|
-------
|
2021
2026
|
None
|
2027
|
+
|
2028
|
+
Control
|
2029
|
+
QWRTYIOPSFGHJLBNM,./;'[]//-
|
2030
|
+
|
2031
|
+
|
2032
|
+
shift control
|
2033
|
+
ABCDEFGHIJKLMNOPQRSTUVWXY
|
2022
2034
|
"""
|
2023
2035
|
modifier = event.modifiers()
|
2036
|
+
# the_key = event.key()
|
2037
|
+
|
2038
|
+
# print(f"Modifier is {modifier=} Key is {the_key=}")
|
2039
|
+
|
2024
2040
|
if (
|
2025
2041
|
event.key() == Qt.Key.Key_Equal
|
2026
2042
|
and modifier == Qt.KeyboardModifier.ControlModifier
|
@@ -3315,10 +3331,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3315
3331
|
-------
|
3316
3332
|
None
|
3317
3333
|
"""
|
3318
|
-
|
3319
3334
|
if mode in ("CW", "CW-U", "CW-L", "CWR"):
|
3320
3335
|
if self.rig_control and self.rig_control.online:
|
3321
|
-
self.rig_control.set_mode(
|
3336
|
+
self.rig_control.set_mode(self.rig_control.last_cw_mode)
|
3322
3337
|
if self.pref.get("cwtype") == 3 and self.rig_control is not None:
|
3323
3338
|
if self.rig_control.interface == "flrig":
|
3324
3339
|
self.cwspeed_spinbox_changed()
|
@@ -3332,9 +3347,18 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3332
3347
|
self.clearinputs()
|
3333
3348
|
self.read_cw_macros()
|
3334
3349
|
return
|
3335
|
-
if mode
|
3350
|
+
if mode in (
|
3351
|
+
"DIGI-U",
|
3352
|
+
"DIGI-L",
|
3353
|
+
"RTTY",
|
3354
|
+
"RTTY-R",
|
3355
|
+
"LSB-D",
|
3356
|
+
"USB-D",
|
3357
|
+
"AM-D",
|
3358
|
+
"FM-D",
|
3359
|
+
):
|
3336
3360
|
if self.rig_control and self.rig_control.online:
|
3337
|
-
self.rig_control.set_mode(
|
3361
|
+
self.rig_control.set_mode(self.rig_control.last_data_mode)
|
3338
3362
|
else:
|
3339
3363
|
self.radio_state["mode"] = "RTTY"
|
3340
3364
|
self.setmode("RTTY")
|
@@ -3548,6 +3572,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3548
3572
|
Passing in a dictionary object with the
|
3549
3573
|
vfo freq, mode, bandwidth, and online state of the radio.
|
3550
3574
|
"""
|
3575
|
+
logger.debug(f"{the_dict=}")
|
3551
3576
|
self.set_radio_icon(0)
|
3552
3577
|
info_dirty = False
|
3553
3578
|
vfo = the_dict.get("vfoa", "")
|
@@ -3645,7 +3670,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3645
3670
|
-------
|
3646
3671
|
None
|
3647
3672
|
"""
|
3648
|
-
if self.radio_state.get("mode")
|
3673
|
+
if self.radio_state.get("mode") in ("CW", "CW-L", "CW-R", "CWR"):
|
3649
3674
|
macro_file = "cwmacros.txt"
|
3650
3675
|
elif self.radio_state.get("mode") in (
|
3651
3676
|
"RTTY",
|
@@ -3659,6 +3684,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3659
3684
|
"RTTYR",
|
3660
3685
|
"PKTLSB",
|
3661
3686
|
"PKTUSB",
|
3687
|
+
"FSK",
|
3662
3688
|
):
|
3663
3689
|
macro_file = "rttymacros.txt"
|
3664
3690
|
else:
|
@@ -3687,7 +3713,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3687
3713
|
temp directory this is running from... In theory.
|
3688
3714
|
"""
|
3689
3715
|
|
3690
|
-
if self.radio_state.get("mode")
|
3716
|
+
if self.radio_state.get("mode") in (
|
3717
|
+
"CW",
|
3718
|
+
"CW-L",
|
3719
|
+
"CW-R",
|
3720
|
+
):
|
3691
3721
|
macro_file = "cwmacros.txt"
|
3692
3722
|
elif self.radio_state.get("mode") in (
|
3693
3723
|
"RTTY",
|
@@ -81,7 +81,11 @@ class CAT:
|
|
81
81
|
}
|
82
82
|
|
83
83
|
if self.interface == "flrig":
|
84
|
-
|
84
|
+
if not self.__check_sane_ip(self.host):
|
85
|
+
self.online = False
|
86
|
+
return
|
87
|
+
|
88
|
+
target = f"http://{self.host}:{self.port}"
|
85
89
|
logger.debug("%s", target)
|
86
90
|
self.server = xmlrpc.client.ServerProxy(target)
|
87
91
|
self.online = True
|
@@ -91,14 +95,30 @@ class CAT:
|
|
91
95
|
ConnectionRefusedError,
|
92
96
|
xmlrpc.client.Fault,
|
93
97
|
http.client.BadStatusLine,
|
98
|
+
socket.error,
|
99
|
+
socket.gaierror,
|
94
100
|
):
|
95
101
|
self.online = False
|
96
102
|
elif self.interface == "rigctld":
|
103
|
+
if not self.__check_sane_ip(self.host):
|
104
|
+
self.online = False
|
105
|
+
return
|
97
106
|
self.__initialize_rigctrld()
|
98
107
|
elif self.interface == "fake":
|
99
108
|
self.online = True
|
109
|
+
logger.debug("Using Fake Rig")
|
100
110
|
return
|
101
111
|
|
112
|
+
def __check_sane_ip(self, ip: str) -> bool:
|
113
|
+
"""check if IP address look normal"""
|
114
|
+
x = ip.split(".")
|
115
|
+
if len(x) != 4:
|
116
|
+
return False
|
117
|
+
for y in x:
|
118
|
+
if not y.isnumeric():
|
119
|
+
return False
|
120
|
+
return True
|
121
|
+
|
102
122
|
def __initialize_rigctrld(self):
|
103
123
|
try:
|
104
124
|
self.rigctrlsocket = socket.socket()
|
@@ -106,7 +126,13 @@ class CAT:
|
|
106
126
|
self.rigctrlsocket.connect((self.host, self.port))
|
107
127
|
logger.debug("Connected to rigctrld")
|
108
128
|
self.online = True
|
109
|
-
except (
|
129
|
+
except (
|
130
|
+
ConnectionRefusedError,
|
131
|
+
TimeoutError,
|
132
|
+
OSError,
|
133
|
+
socket.error,
|
134
|
+
socket.gaierror,
|
135
|
+
) as exception:
|
110
136
|
self.rigctrlsocket = None
|
111
137
|
self.online = False
|
112
138
|
logger.debug("%s", f"{exception}")
|
@@ -223,16 +249,19 @@ class CAT:
|
|
223
249
|
"""Poll the radio using flrig"""
|
224
250
|
try:
|
225
251
|
self.online = True
|
226
|
-
|
252
|
+
vfo_value = self.server.rig.get_vfo()
|
253
|
+
logger.debug(f"{vfo_value=}")
|
254
|
+
return vfo_value
|
227
255
|
except (
|
228
256
|
ConnectionRefusedError,
|
229
257
|
xmlrpc.client.Fault,
|
230
258
|
http.client.BadStatusLine,
|
231
259
|
http.client.CannotSendRequest,
|
232
260
|
http.client.ResponseNotReady,
|
261
|
+
AttributeError,
|
233
262
|
) as exception:
|
234
263
|
self.online = False
|
235
|
-
logger.debug(
|
264
|
+
logger.debug(f"{exception=}")
|
236
265
|
return ""
|
237
266
|
|
238
267
|
def __getvfo_rigctld(self) -> str:
|
@@ -244,7 +273,7 @@ class CAT:
|
|
244
273
|
return self.__get_serial_string().strip()
|
245
274
|
except socket.error as exception:
|
246
275
|
self.online = False
|
247
|
-
logger.debug(
|
276
|
+
logger.debug(f"{exception=}")
|
248
277
|
self.rigctrlsocket = None
|
249
278
|
return ""
|
250
279
|
|
@@ -268,13 +297,16 @@ class CAT:
|
|
268
297
|
# 7300 ['LSB', 'USB', 'AM', 'FM', 'CW', 'CW-R', 'RTTY', 'RTTY-R', 'LSB-D', 'USB-D', 'AM-D', 'FM-D']
|
269
298
|
try:
|
270
299
|
self.online = True
|
271
|
-
|
300
|
+
mode_value = self.server.rig.get_mode()
|
301
|
+
logger.debug(f"{mode_value=}")
|
302
|
+
return mode_value
|
272
303
|
except (
|
273
304
|
ConnectionRefusedError,
|
274
305
|
xmlrpc.client.Fault,
|
275
306
|
http.client.BadStatusLine,
|
276
307
|
http.client.CannotSendRequest,
|
277
308
|
http.client.ResponseNotReady,
|
309
|
+
AttributeError,
|
278
310
|
) as exception:
|
279
311
|
self.online = False
|
280
312
|
logger.debug("%s", f"{exception}")
|
@@ -282,7 +314,7 @@ class CAT:
|
|
282
314
|
|
283
315
|
def __getmode_rigctld(self) -> str:
|
284
316
|
"""Returns mode vai rigctld"""
|
285
|
-
# QMX '
|
317
|
+
# QMX 'DIGI-U DIGI-L CW-U CW-L' or 'LSB', 'USB', 'CW', 'FM', 'AM', 'FSK'
|
286
318
|
# 7300 'AM CW USB LSB RTTY FM CWR RTTYR PKTLSB PKTUSB FM-D AM-D'
|
287
319
|
if self.rigctrlsocket:
|
288
320
|
try:
|
@@ -316,6 +348,7 @@ class CAT:
|
|
316
348
|
try:
|
317
349
|
self.online = True
|
318
350
|
bandwidth = self.server.rig.get_bw()
|
351
|
+
logger.debug(f"{bandwidth=}")
|
319
352
|
return bandwidth[0]
|
320
353
|
except (
|
321
354
|
ConnectionRefusedError,
|
@@ -323,6 +356,7 @@ class CAT:
|
|
323
356
|
http.client.BadStatusLine,
|
324
357
|
http.client.CannotSendRequest,
|
325
358
|
http.client.ResponseNotReady,
|
359
|
+
AttributeError,
|
326
360
|
) as exception:
|
327
361
|
self.online = False
|
328
362
|
logger.debug("getbw_flrig: %s", f"{exception}")
|
@@ -438,13 +472,16 @@ class CAT:
|
|
438
472
|
"""Returns list of modes supported by the radio"""
|
439
473
|
try:
|
440
474
|
self.online = True
|
441
|
-
|
475
|
+
mode_list = self.server.rig.get_modes()
|
476
|
+
logger.debug(f"{mode_list=}")
|
477
|
+
return mode_list
|
442
478
|
except (
|
443
479
|
ConnectionRefusedError,
|
444
480
|
xmlrpc.client.Fault,
|
445
481
|
http.client.BadStatusLine,
|
446
482
|
http.client.CannotSendRequest,
|
447
483
|
http.client.ResponseNotReady,
|
484
|
+
AttributeError,
|
448
485
|
) as exception:
|
449
486
|
self.online = False
|
450
487
|
logger.debug("%s", f"{exception}")
|
@@ -494,6 +531,7 @@ class CAT:
|
|
494
531
|
http.client.BadStatusLine,
|
495
532
|
http.client.CannotSendRequest,
|
496
533
|
http.client.ResponseNotReady,
|
534
|
+
AttributeError,
|
497
535
|
) as exception:
|
498
536
|
self.online = False
|
499
537
|
logger.debug("setvfo_flrig: %s", f"{exception}")
|
@@ -529,16 +567,20 @@ class CAT:
|
|
529
567
|
"""Sets the radios mode"""
|
530
568
|
try:
|
531
569
|
self.online = True
|
532
|
-
|
570
|
+
logger.debug(f"{mode=}")
|
571
|
+
set_mode_result = self.server.rig.set_mode(mode)
|
572
|
+
logger.debug(f"self.server.rig.setmode(mode) = {set_mode_result}")
|
573
|
+
return set_mode_result
|
533
574
|
except (
|
534
575
|
ConnectionRefusedError,
|
535
576
|
xmlrpc.client.Fault,
|
536
577
|
http.client.BadStatusLine,
|
537
578
|
http.client.CannotSendRequest,
|
538
579
|
http.client.ResponseNotReady,
|
580
|
+
AttributeError,
|
539
581
|
) as exception:
|
540
582
|
self.online = False
|
541
|
-
logger.debug(
|
583
|
+
logger.debug(f"{exception=}")
|
542
584
|
return False
|
543
585
|
|
544
586
|
def __setmode_rigctld(self, mode: str) -> bool:
|
@@ -579,6 +621,7 @@ class CAT:
|
|
579
621
|
http.client.BadStatusLine,
|
580
622
|
http.client.CannotSendRequest,
|
581
623
|
http.client.ResponseNotReady,
|
624
|
+
AttributeError,
|
582
625
|
) as exception:
|
583
626
|
self.online = False
|
584
627
|
logger.debug("setpower_flrig: %s", f"{exception}")
|
@@ -637,6 +680,7 @@ class CAT:
|
|
637
680
|
http.client.BadStatusLine,
|
638
681
|
http.client.CannotSendRequest,
|
639
682
|
http.client.ResponseNotReady,
|
683
|
+
AttributeError,
|
640
684
|
) as exception:
|
641
685
|
self.online = False
|
642
686
|
logger.debug("%s", f"{exception}")
|
@@ -675,6 +719,7 @@ class CAT:
|
|
675
719
|
http.client.BadStatusLine,
|
676
720
|
http.client.CannotSendRequest,
|
677
721
|
http.client.ResponseNotReady,
|
722
|
+
AttributeError,
|
678
723
|
) as exception:
|
679
724
|
self.online = False
|
680
725
|
logger.debug("%s", f"{exception}")
|
@@ -31,6 +31,9 @@ class CW:
|
|
31
31
|
self.speed = 20
|
32
32
|
self.winkeyer_functions = []
|
33
33
|
if self.servertype == 2:
|
34
|
+
if not self.__check_sane_ip(self.host):
|
35
|
+
logger.critical(f"Bad IP: {self.host}")
|
36
|
+
return
|
34
37
|
with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
|
35
38
|
try:
|
36
39
|
self.winkeyer_functions = proxy.system.listMethods()
|
@@ -47,6 +50,16 @@ class CW:
|
|
47
50
|
"http://%s:%s, xmlrpc Connection Refused", self.host, self.port
|
48
51
|
)
|
49
52
|
|
53
|
+
def __check_sane_ip(self, ip: str) -> bool:
|
54
|
+
"""check if IP address look normal"""
|
55
|
+
x = ip.split(".")
|
56
|
+
if len(x) != 4:
|
57
|
+
return False
|
58
|
+
for y in x:
|
59
|
+
if not y.isnumeric():
|
60
|
+
return False
|
61
|
+
return True
|
62
|
+
|
50
63
|
def sendcw(self, texttosend):
|
51
64
|
"""sends cw to k1el"""
|
52
65
|
logger.debug(f"{texttosend=} {self.servertype=}")
|
@@ -61,7 +74,7 @@ class CW:
|
|
61
74
|
def _sendcw_xmlrpc(self, texttosend):
|
62
75
|
"""sends cw to xmlrpc"""
|
63
76
|
logger.debug("xmlrpc: %s", texttosend)
|
64
|
-
if texttosend:
|
77
|
+
if texttosend and self.__check_sane_ip(self.host):
|
65
78
|
with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
|
66
79
|
try:
|
67
80
|
proxy.k1elsendstring(texttosend)
|
@@ -76,23 +89,35 @@ class CW:
|
|
76
89
|
logger.debug(
|
77
90
|
"http://%s:%s, xmlrpc Connection Refused", self.host, self.port
|
78
91
|
)
|
92
|
+
else:
|
93
|
+
logger.critical(f"Bad IP: {self.host}")
|
79
94
|
|
80
95
|
def _sendcw_udp(self, texttosend):
|
81
96
|
"""send cw to udp port"""
|
82
97
|
logger.debug("UDP: %s", texttosend)
|
83
|
-
if texttosend:
|
98
|
+
if texttosend and self.__check_sane_ip(self.host):
|
84
99
|
server_address_port = (self.host, self.port)
|
85
100
|
# bufferSize = 1024
|
86
101
|
udp_client_socket = socket.socket(
|
87
102
|
family=socket.AF_INET, type=socket.SOCK_DGRAM
|
88
103
|
)
|
89
|
-
|
104
|
+
try:
|
105
|
+
udp_client_socket.sendto(
|
106
|
+
bytes(texttosend, "utf-8"), server_address_port
|
107
|
+
)
|
108
|
+
except socket.gaierror:
|
109
|
+
...
|
110
|
+
else:
|
111
|
+
logger.critical(f"Bad IP: {self.host.encode()}")
|
90
112
|
|
91
113
|
def _sendcwcat(self, texttosend):
|
92
114
|
"""..."""
|
93
115
|
|
94
116
|
def set_winkeyer_speed(self, speed):
|
95
117
|
"""doc"""
|
118
|
+
if not self.__check_sane_ip(self.host):
|
119
|
+
logger.critical(f"Bad IP: {self.host}")
|
120
|
+
return
|
96
121
|
with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
|
97
122
|
try:
|
98
123
|
if "setspeed" in self.winkeyer_functions:
|
@@ -137,7 +137,6 @@ def prefill(self):
|
|
137
137
|
def check_call_history(self):
|
138
138
|
""""""
|
139
139
|
result = self.database.fetch_call_history(self.callsign.text())
|
140
|
-
print(f"{result=}")
|
141
140
|
if result:
|
142
141
|
self.history_info.setText(f"{result.get('UserText','')}")
|
143
142
|
if self.other_2.text() == "":
|
@@ -540,7 +540,6 @@ def ft8_handler(the_packet: dict):
|
|
540
540
|
def check_call_history(self):
|
541
541
|
""""""
|
542
542
|
result = self.database.fetch_call_history(self.callsign.text())
|
543
|
-
print(f"{result=}")
|
544
543
|
if result:
|
545
544
|
self.history_info.setText(f"{result.get('UserText','')}")
|
546
545
|
if self.other_2.text() == "":
|
@@ -508,7 +508,6 @@ def ft8_handler(the_packet: dict):
|
|
508
508
|
def check_call_history(self):
|
509
509
|
""""""
|
510
510
|
result = self.database.fetch_call_history(self.callsign.text())
|
511
|
-
print(f"{result=}")
|
512
511
|
if result:
|
513
512
|
self.history_info.setText(f"{result.get('UserText','')}")
|
514
513
|
if self.other_2.text() == "":
|
@@ -508,7 +508,6 @@ def ft8_handler(the_packet: dict):
|
|
508
508
|
def check_call_history(self):
|
509
509
|
""""""
|
510
510
|
result = self.database.fetch_call_history(self.callsign.text())
|
511
|
-
print(f"{result=}")
|
512
511
|
if result:
|
513
512
|
self.history_info.setText(f"{result.get('UserText','')}")
|
514
513
|
if self.other_2.text() == "":
|
@@ -453,7 +453,6 @@ def recalculate_mults(self):
|
|
453
453
|
def check_call_history(self):
|
454
454
|
""""""
|
455
455
|
result = self.database.fetch_call_history(self.callsign.text())
|
456
|
-
print(f"{result=}")
|
457
456
|
if result:
|
458
457
|
self.history_info.setText(f"{result.get('UserText','')}")
|
459
458
|
# if self.other_1.text() == "":
|
@@ -453,7 +453,6 @@ def recalculate_mults(self):
|
|
453
453
|
def check_call_history(self):
|
454
454
|
""""""
|
455
455
|
result = self.database.fetch_call_history(self.callsign.text())
|
456
|
-
print(f"{result=}")
|
457
456
|
if result:
|
458
457
|
self.history_info.setText(f"{result.get('UserText','')}")
|
459
458
|
# if self.other_1.text() == "":
|
@@ -523,7 +523,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
523
523
|
def check_call_history(self):
|
524
524
|
""""""
|
525
525
|
result = self.database.fetch_call_history(self.callsign.text())
|
526
|
-
print(f"{result=}")
|
527
526
|
if result:
|
528
527
|
self.history_info.setText(f"{result.get('UserText','')}")
|
529
528
|
if self.other_2.text() == "":
|
@@ -642,7 +642,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
642
642
|
def check_call_history(self):
|
643
643
|
""""""
|
644
644
|
result = self.database.fetch_call_history(self.callsign.text())
|
645
|
-
print(f"{result=}")
|
646
645
|
if result:
|
647
646
|
self.history_info.setText(f"{result.get('UserText','')}")
|
648
647
|
if self.other_1.text() == "":
|
@@ -511,7 +511,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
511
511
|
def check_call_history(self):
|
512
512
|
""""""
|
513
513
|
result = self.database.fetch_call_history(self.callsign.text())
|
514
|
-
print(f"{result=}")
|
515
514
|
if result:
|
516
515
|
self.history_info.setText(f"{result.get('UserText','')}")
|
517
516
|
if self.other_2.text() == "":
|
@@ -496,7 +496,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
496
496
|
def check_call_history(self):
|
497
497
|
""""""
|
498
498
|
result = self.database.fetch_call_history(self.callsign.text())
|
499
|
-
print(f"{result=}")
|
500
499
|
if result:
|
501
500
|
self.history_info.setText(f"{result.get('UserText','')}")
|
502
501
|
if self.other_1.text() == "":
|
@@ -546,7 +546,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
546
546
|
def check_call_history(self):
|
547
547
|
""""""
|
548
548
|
result = self.database.fetch_call_history(self.callsign.text())
|
549
|
-
print(f"{result=}")
|
550
549
|
if result:
|
551
550
|
self.history_info.setText(f"{result.get('UserText','')}")
|
552
551
|
if self.other_1.text() == "":
|
@@ -653,7 +653,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
653
653
|
def check_call_history(self):
|
654
654
|
""""""
|
655
655
|
result = self.database.fetch_call_history(self.callsign.text())
|
656
|
-
print(f"{result=}")
|
657
656
|
if result:
|
658
657
|
self.history_info.setText(f"{result.get('UserText','')}")
|
659
658
|
if self.other_1.text() == "":
|
@@ -516,7 +516,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
516
516
|
def check_call_history(self):
|
517
517
|
""""""
|
518
518
|
result = self.database.fetch_call_history(self.callsign.text())
|
519
|
-
print(f"{result=}")
|
520
519
|
if result:
|
521
520
|
self.history_info.setText(f"{result.get('UserText','')}")
|
522
521
|
if self.other_1.text() == "":
|
@@ -494,7 +494,6 @@ def recalculate_mults(self):
|
|
494
494
|
def check_call_history(self):
|
495
495
|
""""""
|
496
496
|
result = self.database.fetch_call_history(self.callsign.text())
|
497
|
-
print(f"{result=}")
|
498
497
|
if result:
|
499
498
|
self.history_info.setText(f"{result.get('UserText','')}")
|
500
499
|
if self.other_2.text() == "":
|
@@ -369,7 +369,6 @@ def recalculate_mults(self):
|
|
369
369
|
def check_call_history(self):
|
370
370
|
""""""
|
371
371
|
result = self.database.fetch_call_history(self.callsign.text())
|
372
|
-
print(f"{result=}")
|
373
372
|
if result:
|
374
373
|
self.history_info.setText(f"{result.get('UserText','')}")
|
375
374
|
if self.other_1.text() == "":
|
@@ -577,7 +577,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
577
577
|
def check_call_history(self):
|
578
578
|
""""""
|
579
579
|
result = self.database.fetch_call_history(self.callsign.text())
|
580
|
-
print(f"{result=}")
|
581
580
|
if result:
|
582
581
|
self.history_info.setText(f"{result.get('UserText','')}")
|
583
582
|
if self.other_1.text() == "":
|
@@ -444,7 +444,6 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
|
|
444
444
|
def check_call_history(self):
|
445
445
|
""""""
|
446
446
|
result = self.database.fetch_call_history(self.callsign.text())
|
447
|
-
print(f"{result=}")
|
448
447
|
if result:
|
449
448
|
self.history_info.setText(f"{result.get('UserText','')}")
|
450
449
|
if self.other_1.text() == "":
|
@@ -35,7 +35,16 @@ class Radio(QObject):
|
|
35
35
|
host = None
|
36
36
|
port = None
|
37
37
|
modes = ""
|
38
|
+
cw_list = ["CW", "CW-L", "CW-U", "CWR"]
|
39
|
+
rtty_list = [
|
40
|
+
"RTTY",
|
41
|
+
"DIGI-L",
|
42
|
+
"PKTLSB",
|
43
|
+
"LSB-D",
|
44
|
+
]
|
38
45
|
last_data_mode = "RTTY"
|
46
|
+
last_cw_mode = "CW"
|
47
|
+
last_ph_mode = "SSB"
|
39
48
|
|
40
49
|
def __init__(self, interface: str, host: str, port: int) -> None:
|
41
50
|
super().__init__()
|
@@ -49,6 +58,15 @@ class Radio(QObject):
|
|
49
58
|
self.cat = CAT(self.interface, self.host, self.port)
|
50
59
|
self.online = self.cat.online
|
51
60
|
self.modes = self.cat.get_mode_list()
|
61
|
+
for pos_cw in self.cw_list:
|
62
|
+
if pos_cw in self.modes:
|
63
|
+
self.last_cw_mode = pos_cw
|
64
|
+
break
|
65
|
+
for pos_rtty in self.rtty_list:
|
66
|
+
if pos_rtty in self.modes:
|
67
|
+
self.last_data_mode = pos_rtty
|
68
|
+
break
|
69
|
+
|
52
70
|
except ConnectionResetError:
|
53
71
|
...
|
54
72
|
while not self.time_to_quit:
|
@@ -97,6 +115,7 @@ class Radio(QObject):
|
|
97
115
|
"USB-D",
|
98
116
|
"AM-D",
|
99
117
|
"FM-D",
|
118
|
+
"FSK",
|
100
119
|
"DIGI-U",
|
101
120
|
"DIGI-L",
|
102
121
|
"RTTYR",
|
@@ -106,6 +125,11 @@ class Radio(QObject):
|
|
106
125
|
if the_mode in datamodes:
|
107
126
|
self.last_data_mode = the_mode
|
108
127
|
|
128
|
+
cwmodes = ["CW", "CW-L", "CW-U", "CWR"]
|
129
|
+
|
130
|
+
if the_mode in cwmodes:
|
131
|
+
self.last_cw_mode = the_mode
|
132
|
+
|
109
133
|
def sendcw(self, texttosend):
|
110
134
|
"""..."""
|
111
135
|
logger.debug(f"Send CW: {texttosend}")
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class CW:
|
2
|
+
"""
|
3
|
+
|
4
|
+
An interface to cwdaemon and PyWinkeyerSerial
|
5
|
+
|
6
|
+
servertype: int 1=cwdaemon, 2=pywinkeyer, 3=rigctld
|
7
|
+
|
8
|
+
"""
|
9
|
+
|
10
|
+
def __init__(self, servertype: int, host: str, port: int) -> None:
|
11
|
+
self.servertype = servertype
|
12
|
+
self.cat = None
|
13
|
+
self.host = host
|
14
|
+
self.port = port
|
15
|
+
self.speed = 20
|
16
|
+
self.winkeyer_functions = []
|
17
|
+
|
18
|
+
def __check_sane_ip(self, ip: str) -> bool:
|
19
|
+
"""check if IP address look normal"""
|
20
|
+
print(f"{type(self.host)} {self.host}")
|
21
|
+
|
22
|
+
x = ip.split(".")
|
23
|
+
|
24
|
+
print(f"{x=} {len(x)=}")
|
25
|
+
|
26
|
+
if len(x) != 4:
|
27
|
+
return False
|
28
|
+
for y in x:
|
29
|
+
if not y.isnumeric():
|
30
|
+
return False
|
31
|
+
return True
|
32
|
+
|
33
|
+
def test(self):
|
34
|
+
""""""
|
35
|
+
print(f"{self.__check_sane_ip(self.host)=}")
|
36
|
+
|
37
|
+
|
38
|
+
x = CW(1, "127.0.0.1", 6789)
|
39
|
+
x.test()
|