├── .gitignore ├── COPYING ├── README.md ├── common.pri ├── doc ├── README ├── bandmap-communications.md ├── images │ ├── so2sdr_bandscope.png │ ├── so2sdr_main.png │ ├── so2sdr_open.png │ ├── so2sdr_radio_ports.png │ ├── so2sdr_station_data.png │ ├── so2sdr_user_data.png │ └── so2sdr_winkey.png └── so2sdr.asciidoc ├── license.rtf ├── qttelnet ├── INSTALL.TXT ├── LGPL_EXCEPTION.txt ├── LICENSE.GPL3 ├── LICENSE.LGPL ├── README.TXT ├── buildlib │ └── buildlib.pro ├── common.pri ├── config.pri ├── configure ├── doc │ ├── html │ │ ├── classic.css │ │ ├── images │ │ │ └── qt-logo.png │ │ ├── index.html │ │ ├── qttelnet-members.html │ │ ├── qttelnet.dcf │ │ ├── qttelnet.html │ │ ├── qttelnet.index │ │ ├── qttelnet.qch │ │ └── qttelnet.qhp │ ├── images │ │ └── qt-logo.png │ └── index.qdoc ├── examples │ ├── examples.pro │ ├── qtelnetperso │ │ ├── main.cpp │ │ ├── mainwindow.ui │ │ ├── mainwindowimpl.cpp │ │ ├── mainwindowimpl.h │ │ ├── mytelnetwidget.cpp │ │ ├── mytelnetwidget.h │ │ ├── qtelnetperso │ │ └── qtelnetperso.pro │ └── simpleClient │ │ ├── main-simpler.cpp │ │ ├── main.cpp │ │ ├── simpleClient │ │ └── simpleClient.pro ├── qttelnet.pro └── src │ ├── QtTelnet │ ├── qttelnet.cpp │ ├── qttelnet.h │ └── qttelnet.pri ├── share ├── MASTER.DTA ├── MASTERDX.DTA ├── MASTERSS.DTA ├── MASUSVE.DTA ├── arrl-june-vhf.cfg ├── arrl.txt ├── arrl10.cfg ├── arrl10.txt ├── arrl160.cfg ├── arrl160dx.cfg ├── arrldx-dx.cfg ├── arrldx.cfg ├── arrldx.txt ├── check.png ├── contest_list.dat ├── countries.dat ├── cq160.cfg ├── cq160.txt ├── cq_zone_latlong.dat ├── cqp.cfg ├── cqp_ca.cfg ├── cqp_ca.txt ├── cqp_county.txt ├── cqww.cfg ├── cwops.cfg ├── dxped.cfg ├── exclude_iaru.txt ├── fd.cfg ├── help │ ├── afedri-setup.png │ ├── bandmap-controls.png │ ├── bandscope_dialog.png │ ├── contest_options.png │ ├── cw_messages.png │ ├── cwdaemon.png │ ├── cwdevices.png │ ├── network-setup.png │ ├── new_contest_dialog.png │ ├── radio_dialog.png │ ├── settings_dialog.png │ ├── so2r_dialog.png │ ├── so2sdr-bandmap-setup.png │ ├── so2sdrhelp.html │ ├── so2sdrhelp.md │ ├── soundcard-setup.png │ ├── station_dialog.png │ └── voice_messages.png ├── iaru.cfg ├── iaru.txt ├── icon24x24.png ├── icon48x48.png ├── itu_zone_latlong.dat ├── kqp.cfg ├── kqp_county.txt ├── kqp_ks.cfg ├── kqp_ks.txt ├── license.html ├── msqp.cfg ├── msqp.txt ├── msqp_ms.cfg ├── msqp_ms.txt ├── naqp.cfg ├── naqp.txt ├── nasprint.cfg ├── ns.cfg ├── ns.txt ├── paqp.cfg ├── paqp_county.txt ├── paqp_pa.cfg ├── paqp_pa.txt ├── so2sdr-bandmap-help │ ├── afedri-setup.png │ ├── bandmap-controls.png │ ├── network-setup.png │ ├── rtl-setup.png │ ├── so2sdr-bandmap-help.html │ ├── so2sdr-bandmap-help.md │ ├── so2sdr-bandmap-setup.png │ └── soundcard-setup.png ├── sprint.txt ├── ss.cfg ├── stew.cfg ├── wl_cty-ns.dat ├── wl_cty.dat ├── wpx.cfg ├── wwdigi.cfg └── x.png ├── so2sdr-bandmap ├── Doxyfile ├── afedri-cmd.h ├── afedri.cpp ├── afedri.h ├── afedrisetup.cpp ├── afedrisetup.h ├── afedrisetup.ui ├── audioreader_portaudio.cpp ├── audioreader_portaudio.h ├── bandmap-tcp.h ├── bandmap.ui ├── bandmapdisplay.cpp ├── bandmapdisplay.h ├── bandmapentry.cpp ├── bandmapentry.h ├── bandoffsetsetup.cpp ├── bandoffsetsetup.h ├── bandoffsetsetup.ui ├── call.cpp ├── call.h ├── defines.h ├── exit.svg ├── helpdialog.cpp ├── helpdialog.h ├── helpdialog.ui ├── icon48x48.ico ├── iqbalance.cpp ├── iqbalance.h ├── iqbalance.ui ├── main.cpp ├── network.cpp ├── network.h ├── networksetup.cpp ├── networksetup.h ├── networksetup.ui ├── player_play.svg ├── player_stop.svg ├── rtl.cpp ├── rtl.h ├── rtlsetup.cpp ├── rtlsetup.h ├── rtlsetup.ui ├── sdr-ip.h ├── sdrdatasource.cpp ├── sdrdatasource.h ├── sdrdialog.cpp ├── sdrdialog.h ├── sdrdialog.ui ├── signal.cpp ├── signal.h ├── so2sdr-bandmap.cpp ├── so2sdr-bandmap.h ├── so2sdr-bandmap.pro ├── so2sdr-bandmap.qrc ├── so2sdr.rc ├── soundcard.ui ├── soundcardsetup.cpp ├── soundcardsetup.h ├── spectrum.cpp ├── spectrum.h ├── stock_properties.svg ├── utils.cpp └── utils.h ├── so2sdr.desktop ├── so2sdr.pro ├── so2sdr ├── Doxyfile ├── adifparse.cpp ├── adifparse.h ├── bandmapentry.cpp ├── bandmapentry.h ├── bandmapinterface.cpp ├── bandmapinterface.h ├── cabrillo.ui ├── cabrillodialog.cpp ├── cabrillodialog.h ├── centergrid.ui ├── centergriddialog.cpp ├── centergriddialog.h ├── contest.cpp ├── contest.h ├── contest_arrl10.cpp ├── contest_arrl10.h ├── contest_arrl160.cpp ├── contest_arrl160.h ├── contest_arrldx.cpp ├── contest_arrldx.h ├── contest_cq160.cpp ├── contest_cq160.h ├── contest_cqp.cpp ├── contest_cqp.h ├── contest_cqww.cpp ├── contest_cqww.h ├── contest_cwops.cpp ├── contest_cwops.h ├── contest_dxped.cpp ├── contest_dxped.h ├── contest_fd.cpp ├── contest_fd.h ├── contest_iaru.cpp ├── contest_iaru.h ├── contest_junevhf.cpp ├── contest_junevhf.h ├── contest_kqp.cpp ├── contest_kqp.h ├── contest_msqp.cpp ├── contest_msqp.h ├── contest_naqp.cpp ├── contest_naqp.h ├── contest_paqp.cpp ├── contest_paqp.h ├── contest_sprint.cpp ├── contest_sprint.h ├── contest_stew.cpp ├── contest_stew.h ├── contest_sweepstakes.cpp ├── contest_sweepstakes.h ├── contest_wpx.cpp ├── contest_wpx.h ├── contest_wwdigi.cpp ├── contest_wwdigi.h ├── contestoptdialog.cpp ├── contestoptdialog.h ├── contestoptdialog.ui ├── cty.cpp ├── cty.h ├── cwdaemon.cpp ├── cwdaemon.h ├── cwdialog.cpp ├── cwdialog.h ├── cwdialog.ui ├── cwmanager.cpp ├── cwmanager.h ├── cwmessagedialog.cpp ├── cwmessagedialog.h ├── cwmessagedialog.ui ├── defines.h ├── detailededit.cpp ├── detailededit.h ├── detailededit.ui ├── dupesheet.cpp ├── dupesheet.h ├── dupesheet.ui ├── dupesheet.ui.linux ├── dupesheet.ui.win ├── filedownloader.cpp ├── filedownloader.h ├── helpdialog.cpp ├── helpdialog.h ├── helpdialog.ui ├── history.cpp ├── history.h ├── icon48x48.ico ├── inpout32.dll ├── keyboardhandler.cpp ├── keyboardhandler.h ├── lineedit.cpp ├── lineedit.h ├── linux_pp.cpp ├── linux_pp.h ├── log.cpp ├── log.h ├── logdelegate.cpp ├── logdelegate.h ├── logedit.cpp ├── logedit.h ├── main.cpp ├── master.cpp ├── master.h ├── menustyle.h ├── microham.cpp ├── microham.h ├── multdisplay.cpp ├── multdisplay.h ├── mytableview.cpp ├── mytableview.h ├── newcontestdialog.cpp ├── newcontestdialog.h ├── newcontestdialog.ui ├── notedialog.cpp ├── notedialog.h ├── notedialog.ui ├── otrsp.cpp ├── otrsp.h ├── qso.cpp ├── qso.h ├── radiodialog.cpp ├── radiodialog.h ├── radiodialog.ui ├── sdrdialog.cpp ├── sdrdialog.h ├── sdrdialog.ui ├── serial.cpp ├── serial.h ├── settingsdialog.cpp ├── settingsdialog.h ├── settingsdialog.ui ├── signal.cpp ├── signal.h ├── so2r.cpp ├── so2r.h ├── so2rdialog.cpp ├── so2rdialog.h ├── so2rdialog.ui ├── so2rmini.cpp ├── so2rmini.h ├── so2sdr.cpp ├── so2sdr.h ├── so2sdr.pro ├── so2sdr.rc ├── so2sdr.ui ├── so2sdr.ui.linux ├── so2sdr.ui.win ├── so2sdr_dupesheet.cpp ├── so2sdr_keys.cpp ├── so2sdr_telnet.cpp ├── ssbmessagedialog.cpp ├── ssbmessagedialog.h ├── ssbmessagedialog.ui ├── stationdialog.cpp ├── stationdialog.h ├── stationdialog.ui ├── telnet.cpp ├── telnet.h ├── telnet.ui ├── udpreader.cpp ├── udpreader.h ├── utils.cpp ├── utils.h ├── winkey.cpp ├── winkey.h ├── wsjtxcalldialog.cpp ├── wsjtxcalldialog.h ├── wsjtxcalldialog.ui ├── wsjtxdelegate.cpp ├── wsjtxdelegate.h ├── wsjtxmessage.cpp └── wsjtxmessage.h └── windows ├── so2sdr-2.0.5 ├── so2sdr-bandmap-2.0.5 └── so2sdr-windows-compile.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore generated files. These files will be ignored by Git's status, add, 2 | # commit, etc. commands. 3 | 4 | 5 | # Qt Creator generated project file 6 | so2sdr.pro.user* 7 | object_script* 8 | 9 | # Build system generated files 10 | Makefile* 11 | qextserialport/build/ 12 | qextserialport/tmp/ 13 | qttelnet/buildlib/moc_qttelnet.cpp 14 | qttelnet/buildlib/qttelnet.moc 15 | qttelnet/lib/ 16 | moc_*.cpp 17 | so2sdr/qttelnet.moc 18 | so2sdr/so2sdr 19 | so2sdr-bandmap/so2sdr-bandmap 20 | ui_*.h 21 | so2sdr/release 22 | so2sdr/debug 23 | so2sdr-bandmap/release 24 | so2sdr-bandmap/debug 25 | so2sdr-bandmap/qrc_so2sdr-bandmap.cpp 26 | moc_predefs.h 27 | # Binary files 28 | *.o 29 | 30 | 31 | # Editor files 32 | *~ 33 | *swp 34 | 35 | # ASCII Doc generated files 36 | doc/*.html 37 | so2sdr-bandmap/doc 38 | doc/*.pdf 39 | doc/so2sdr.xml 40 | so2sdr/doc/* 41 | 42 | #others 43 | *.bak 44 | .qmake.stash 45 | .qtc_clangd 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # So2sdr 2 | 3 | A ham radio contest logging program incorporating software-defined 4 | radio (SDR) spectral displays. In runs on Linux. Version 5 | 2 has two separate executables: 1) so2sdr, the logging program 6 | and 2) so2sdr-bandmap, the SDR spectral display. So2sdr-bandmap 7 | can be used separately from so2sdr. 8 | 9 | Copyright 2010-2025 R. Torsten Clay N4OGW 10 | 11 | # News 12 | * 05/24/2025 version 2.8.0; project has moved to Qt version 6. This required many changes. The grab keyboard function changed: now the keyboard device in settings must be given for keyboard grabbing. 13 | * 08/12/2022 version 2.5.15; improvements to scripts called from message macros 14 | * 01/10/2022 version 2.5.14; add CWDaemon support 15 | * 09/14/2019 new feature in version 2.5.0: two keyboard support (experimental) 16 | * 06/08/2018 support ARRL June VHF contest 17 | * 04/05/2018 support Mississippi qso party 18 | * 02/18/2018 lots of code updates; Qt4 support dropped- you must now use Qt5 19 | * 12/02/2016 support for voice keyer using sound card 20 | 21 | 22 | ------------------------ 23 | 24 | 25 | ## Install instructions 26 | 27 | You will need the following development libraries installed: Qt (version 6), FFTW, Hamlib, and PortAudio. Other various development packages include g++, Git, and pkg-config. 28 | 29 | 1. Clone the git repository to your local machine: 30 | ``` 31 | git clone git://github.com/n4ogw/so2sdr.git 32 | ``` 33 | or download one of the source code distributions and extract it: 34 | ```` 35 | tar xzvof so2sdr-2.8.0.tgz 36 | ```` 37 | 38 | 2. By default, so2sdr will be installed in /usr/local/bin, and associated 39 | data files will be placed in /usr/local/share/so2sdr. If you want to 40 | change the location of the program, edit SO2SDR_INSTALL_DIR in common.pri 41 | 42 | 3. qmake 43 | 44 | 4. make 45 | 46 | (make -jx will use x cores and go faster) 47 | 48 | 49 | N.B. Subdirectory Makefiles will be created from the top level Makefile. 50 | 51 | 5. (as superuser) make install 52 | 53 | 6. Test and contribute! 54 | 55 | 56 | ----------------------- 57 | 58 | 59 | Additional help is available in the file share/so2sdrhelp.html or via the 60 | Help menu in the program. 61 | 62 | 63 | Torsten Clay 64 | so2sdr@gmail.com 65 | -------------------------------------------------------------------------------- /common.pri: -------------------------------------------------------------------------------- 1 | SO2SDR_INSTALL_DIR= "/usr/local" 2 | -------------------------------------------------------------------------------- /doc/README: -------------------------------------------------------------------------------- 1 | These documentation files are out of date. I suggest reading the help 2 | file available inside so2sdr, which is much more up to date. 3 | 4 | RTC 09/2019 5 | 6 | ------------ 7 | 8 | 9 | Building the HTML and PDF versions of this manual requires the 10 | asciidoc package which is dependent on docbook and tex packages. 11 | Needless to say, this is a large dependency, and the generation 12 | of the manual is not yet performed through the qmake build system. 13 | 14 | To generate the HTML manual: 15 | 16 | asciidoc -b html -o so2sdr.html so2sdr.asciidoc 17 | 18 | The resulting HTML file is dependent on the images directory for the 19 | screenshots so be certain to copy it along. 20 | 21 | To generate the PDF manual: 22 | 23 | a2x -f pdf -D . so2sdr.asciidoc 24 | 25 | TODO: Integrate the generated manual files into the source and binary 26 | distributions. 27 | 28 | -------------------------------------------------------------------------------- /doc/images/so2sdr_bandscope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/doc/images/so2sdr_bandscope.png -------------------------------------------------------------------------------- /doc/images/so2sdr_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/doc/images/so2sdr_main.png -------------------------------------------------------------------------------- /doc/images/so2sdr_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/doc/images/so2sdr_open.png -------------------------------------------------------------------------------- /doc/images/so2sdr_radio_ports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/doc/images/so2sdr_radio_ports.png -------------------------------------------------------------------------------- /doc/images/so2sdr_station_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/doc/images/so2sdr_station_data.png -------------------------------------------------------------------------------- /doc/images/so2sdr_user_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/doc/images/so2sdr_user_data.png -------------------------------------------------------------------------------- /doc/images/so2sdr_winkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/doc/images/so2sdr_winkey.png -------------------------------------------------------------------------------- /license.rtf: -------------------------------------------------------------------------------- 1 | So2sdr is free software: you can redistribute it and/or modify 2 | it under the terms of the GNU General Public License as published by 3 | the Free Software Foundation, either version 3 of the License, or 4 | any later version. 5 | 6 | So2sdr is distributed in the hope that it will be useful, 7 | but WITHOUT ANY WARRANTY; without even the implied warranty of 8 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 9 | GNU General Public License for more details. 10 | 11 | For a copy of the GNU General Public License, see 12 | . 13 | -------------------------------------------------------------------------------- /qttelnet/LGPL_EXCEPTION.txt: -------------------------------------------------------------------------------- 1 | Nokia Qt LGPL Exception version 1.1 2 | 3 | As an additional permission to the GNU Lesser General Public License 4 | version 2.1, the object code form of a "work that uses the Library" 5 | may incorporate material from a header file that is part of the 6 | Library. You may distribute such object code under terms of your 7 | choice, provided that: 8 | (i) the header files of the Library have not been modified; and 9 | (ii) the incorporated material is limited to numerical parameters, 10 | data structure layouts, accessors, macros, inline functions and 11 | templates; and 12 | (iii) you comply with the terms of Section 6 of the GNU 13 | Lesser General Public License version 2.1. 14 | 15 | Moreover, you may apply this exception to a modified version of the 16 | Library, provided that such modification does not involve copying 17 | material from the Library into the modified Library?s header files 18 | unless such material is limited to (i) numerical parameters; (ii) data 19 | structure layouts; (iii) accessors; and (iv) small macros, templates 20 | and inline functions of five lines or less in length. 21 | 22 | Furthermore, you are not required to apply this additional permission 23 | to a modified version of the Library. 24 | -------------------------------------------------------------------------------- /qttelnet/README.TXT: -------------------------------------------------------------------------------- 1 | Telnet v2.1 2 | 3 | A client for the telnet protocol. 4 | 5 | 6 | 7 | Notes: 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /qttelnet/buildlib/buildlib.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = lib 2 | CONFIG += qt \ 3 | dll \ 4 | qttelnet-buildlib 5 | mac:CONFIG += absolute_library_soname 6 | win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release \ 7 | build_all 8 | include(../src/qttelnet.pri) 9 | TARGET = $$QTTELNET_LIBNAME 10 | DESTDIR = $$QTTELNET_LIBDIR 11 | win32 { 12 | DLLDESTDIR = $$[QT_INSTALL_BINS] 13 | QMAKE_DISTCLEAN += $$[QT_INSTALL_BINS]\\$${QTTELNET_LIBNAME}.dll 14 | } 15 | target.path = $$DESTDIR 16 | INSTALLS += target 17 | SOURCES += 18 | HEADERS += 19 | -------------------------------------------------------------------------------- /qttelnet/common.pri: -------------------------------------------------------------------------------- 1 | infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qttelnet-uselib 2 | TEMPLATE += fakelib 3 | QTTELNET_LIBNAME = $$qtLibraryTarget(QtSolutions_Telnet-2.1) 4 | TEMPLATE -= fakelib 5 | QTTELNET_LIBDIR = $$PWD/lib 6 | unix:qttelnet-uselib:!qttelnet-buildlib:QMAKE_RPATHDIR += $$QTTELNET_LIBDIR 7 | -------------------------------------------------------------------------------- /qttelnet/config.pri: -------------------------------------------------------------------------------- 1 | include(../common.pri) 2 | INCLUDEPATH += $$PWD 3 | DEPENDPATH += $$PWD 4 | 5 | qttelnet-uselib:!qttelnet-buildlib { 6 | LIBS += -L$$QTTELNET_LIBDIR -l$$QTTELNET_LIBNAME 7 | } else { 8 | SOURCES += $$PWD/qttelnet.cpp 9 | HEADERS += $$PWD/qttelnet.h 10 | win32:LIBS += -lWs2_32 11 | } 12 | QT += network 13 | 14 | win32 { 15 | contains(TEMPLATE, lib):contains(CONFIG, shared):DEFINES += QT_QTTELNET_EXPORT 16 | else:qttelnet-uselib:DEFINES += QT_QTTELNET_IMPORT 17 | } 18 | -------------------------------------------------------------------------------- /qttelnet/doc/html/classic.css: -------------------------------------------------------------------------------- 1 | h3.fn,span.fn 2 | { 3 | margin-left: 1cm; 4 | text-indent: -1cm; 5 | } 6 | 7 | a:link 8 | { 9 | color: #004faf; 10 | text-decoration: none 11 | } 12 | 13 | a:visited 14 | { 15 | color: #672967; 16 | text-decoration: none 17 | } 18 | 19 | a.obsolete 20 | { 21 | color: #661100; 22 | text-decoration: none 23 | } 24 | 25 | a.compat 26 | { 27 | color: #661100; 28 | text-decoration: none 29 | } 30 | 31 | a.obsolete:visited 32 | { 33 | color: #995500; 34 | text-decoration: none 35 | } 36 | 37 | a.compat:visited 38 | { 39 | color: #995500; 40 | text-decoration: none 41 | } 42 | 43 | td.postheader 44 | { 45 | font-family: sans-serif 46 | } 47 | 48 | tr.address 49 | { 50 | font-family: sans-serif 51 | } 52 | 53 | body 54 | { 55 | background: #ffffff; 56 | color: black 57 | } 58 | 59 | table tr.odd { 60 | background: #f0f0f0; 61 | color: black; 62 | } 63 | 64 | table tr.even { 65 | background: #e4e4e4; 66 | color: black; 67 | } 68 | 69 | table.annotated th { 70 | padding: 3px; 71 | text-align: left 72 | } 73 | 74 | table.annotated td { 75 | padding: 3px; 76 | } 77 | 78 | table tr pre 79 | { 80 | padding-top: 0px; 81 | padding-bottom: 0px; 82 | padding-left: 0px; 83 | padding-right: 0px; 84 | border: none; 85 | background: none 86 | } 87 | 88 | tr.qt-style 89 | { 90 | background: #96E066; 91 | color: black 92 | } 93 | 94 | body pre 95 | { 96 | padding: 0.2em; 97 | border: #e7e7e7 1px solid; 98 | background: #f1f1f1; 99 | color: black 100 | } 101 | 102 | table tr.qt-code pre 103 | { 104 | padding: 0.2em; 105 | border: #e7e7e7 1px solid; 106 | background: #f1f1f1; 107 | color: black 108 | } 109 | 110 | span.preprocessor, span.preprocessor a 111 | { 112 | color: darkblue; 113 | } 114 | 115 | span.comment 116 | { 117 | color: darkred; 118 | font-style: italic 119 | } 120 | 121 | span.string,span.char 122 | { 123 | color: darkgreen; 124 | } 125 | 126 | .title 127 | { 128 | text-align: center 129 | } 130 | 131 | .subtitle 132 | { 133 | font-size: 0.8em 134 | } 135 | 136 | .small-subtitle 137 | { 138 | font-size: 0.65em 139 | } 140 | -------------------------------------------------------------------------------- /qttelnet/doc/html/images/qt-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/qttelnet/doc/html/images/qt-logo.png -------------------------------------------------------------------------------- /qttelnet/doc/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | Telnet 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
  Home

Telnet
16 |

17 | 18 |

Description

19 |

A client for the telnet protocol.

20 |

This class provides support for the Telnet protocol. This is useful for communication with legacy, terminal-based applications running on servers, devices, or locally.

21 | 22 |

Classes

23 | 26 | 27 |

Tested platforms

28 | 33 |


34 | 35 | 36 | 37 | 38 |
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)Trademarks
Qt Solutions
39 | 40 | -------------------------------------------------------------------------------- /qttelnet/doc/html/qttelnet.qch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/qttelnet/doc/html/qttelnet.qch -------------------------------------------------------------------------------- /qttelnet/doc/images/qt-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/qttelnet/doc/images/qt-logo.png -------------------------------------------------------------------------------- /qttelnet/doc/index.qdoc: -------------------------------------------------------------------------------- 1 | /*! 2 | \page index.html 3 | \title Telnet 4 | 5 | \section1 Description 6 | 7 | A client for the telnet protocol. 8 | 9 | 10 | 11 | This class provides support for the Telnet protocol. 12 | This is useful for communication with legacy, 13 | terminal-based applications running on servers, devices, 14 | or locally. 15 | 16 | 17 | 18 | \section1 Classes 19 | \list 20 | \i QtTelnet\endlist 21 | 22 | 23 | 24 | 25 | 26 | 27 | \section1 Tested platforms 28 | \list 29 | \i Qt 4.4, 4.5 / Windows XP / MSVC.NET 2005 30 | \i Qt 4.4, 4.5 / Linux / gcc 31 | \i Qt 4.4, 4.5 / MacOS X 10.5 / gcc 32 | \endlist 33 | 34 | 35 | 36 | 37 | */ -------------------------------------------------------------------------------- /qttelnet/examples/examples.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | SUBDIRS = simpleClient 3 | 4 | -------------------------------------------------------------------------------- /qttelnet/examples/qtelnetperso/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "mainwindowimpl.h" 3 | // 4 | int main(int argc, char ** argv) 5 | { 6 | QApplication app( argc, argv ); 7 | MainWindowImpl win; 8 | win.show(); 9 | app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); 10 | return app.exec(); 11 | } 12 | 13 | -------------------------------------------------------------------------------- /qttelnet/examples/qtelnetperso/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 598 10 | 388 11 | 12 | 13 | 14 | QTelnetPerso 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Connect 24 | 25 | 26 | 27 | 28 | 29 | 30 | Dicsonnect 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 0 42 | 0 43 | 598 44 | 20 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /qttelnet/examples/qtelnetperso/mainwindowimpl.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindowimpl.h" 2 | #include 3 | // 4 | MainWindowImpl::MainWindowImpl( QWidget * parent, Qt::WFlags f) : QMainWindow(parent, f) 5 | { 6 | setupUi(this); 7 | 8 | mtw = new MyTelnetWidget(this); 9 | this->centralWidget()->layout()->addWidget(mtw); 10 | } 11 | 12 | void MainWindowImpl::on_connectButton_clicked() 13 | { 14 | mtw->connectToHost("dxc.k5jz.net"); 15 | connect(mtw, SIGNAL(bellReceived()),this,SLOT(alert())); 16 | } 17 | 18 | void MainWindowImpl::on_disconnectButton_clicked() 19 | { 20 | // mtw->disconnectTelnet(); 21 | } 22 | 23 | void MainWindowImpl::alert() 24 | { 25 | QApplication::beep(); 26 | 27 | } 28 | 29 | // 30 | 31 | -------------------------------------------------------------------------------- /qttelnet/examples/qtelnetperso/mainwindowimpl.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOWIMPL_H 2 | #define MAINWINDOWIMPL_H 3 | // 4 | #include 5 | #include "ui_mainwindow.h" 6 | //#include "../libs/src/mytelnetwidget.h" 7 | #include "mytelnetwidget.h" 8 | // 9 | class MainWindowImpl : public QMainWindow, public Ui::MainWindow 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | MainWindowImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); 15 | 16 | private slots: 17 | void on_connectButton_clicked(); 18 | void on_disconnectButton_clicked(); 19 | void alert(); 20 | 21 | private: 22 | MyTelnetWidget *mtw; 23 | }; 24 | #endif 25 | -------------------------------------------------------------------------------- /qttelnet/examples/qtelnetperso/mytelnetwidget.h: -------------------------------------------------------------------------------- 1 | #ifndef _MYTELNETWIDGET_H_ 2 | #define _MYTELNETWIDGET_H_ 3 | 4 | #include 5 | #include "qttelnet.h" 6 | #include 7 | 8 | class MyTelnetWidget : public QPlainTextEdit 9 | { 10 | Q_OBJECT 11 | 12 | public: 13 | MyTelnetWidget(QWidget *parent = 0); 14 | ~MyTelnetWidget(); 15 | 16 | void connectToHost(const QString &host, const quint16 port = 23); 17 | void closeSession(); 18 | 19 | protected: 20 | void keyPressEvent(QKeyEvent *e); 21 | void mousePressEvent(QMouseEvent *me); 22 | 23 | signals: 24 | void connected(); 25 | void disconnected(); 26 | void alert(); 27 | 28 | private slots: 29 | void sockConnected(); 30 | void sockDisconnected(); 31 | void processIncomingData(const QString &text); 32 | 33 | private: 34 | void simulateOverWriteMode(QString text); 35 | 36 | QtTelnet *t; 37 | 38 | }; 39 | 40 | #endif // MYTELNETWIDGET_H 41 | 42 | -------------------------------------------------------------------------------- /qttelnet/examples/qtelnetperso/qtelnetperso: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/qttelnet/examples/qtelnetperso/qtelnetperso -------------------------------------------------------------------------------- /qttelnet/examples/qtelnetperso/qtelnetperso.pro: -------------------------------------------------------------------------------- 1 | ###################################################################### 2 | # Automatically generated by qmake (2.01a) Sat Apr 24 08:41:28 2010 3 | ###################################################################### 4 | 5 | TEMPLATE = app 6 | include(../../src/qttelnet.pri) 7 | 8 | TARGET = qtelnetperso 9 | DEPENDPATH += . 10 | INCLUDEPATH += . 11 | 12 | # Input 13 | HEADERS += mainwindowimpl.h mytelnetwidget.h 14 | FORMS += mainwindow.ui 15 | SOURCES += main.cpp mainwindowimpl.cpp mytelnetwidget.cpp 16 | -------------------------------------------------------------------------------- /qttelnet/examples/simpleClient/simpleClient: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/qttelnet/examples/simpleClient/simpleClient -------------------------------------------------------------------------------- /qttelnet/examples/simpleClient/simpleClient.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = app 2 | DEFINES += QTTELNET_DEBUG 3 | include(../../src/qttelnet.pri) 4 | 5 | SOURCES += main-simpler.cpp 6 | -------------------------------------------------------------------------------- /qttelnet/qttelnet.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE=subdirs 2 | CONFIG += ordered 3 | include(common.pri) 4 | qttelnet-uselib:SUBDIRS=buildlib 5 | SUBDIRS+=examples 6 | -------------------------------------------------------------------------------- /qttelnet/src/QtTelnet: -------------------------------------------------------------------------------- 1 | #include "qttelnet.h" 2 | -------------------------------------------------------------------------------- /qttelnet/src/qttelnet.pri: -------------------------------------------------------------------------------- 1 | include(../common.pri) 2 | INCLUDEPATH += $$PWD 3 | DEPENDPATH += $$PWD 4 | 5 | qttelnet-uselib:!qttelnet-buildlib { 6 | LIBS += -L$$QTTELNET_LIBDIR -l$$QTTELNET_LIBNAME 7 | } else { 8 | SOURCES += $$PWD/qttelnet.cpp 9 | HEADERS += $$PWD/qttelnet.h 10 | win32:LIBS += -lWs2_32 11 | } 12 | QT += network 13 | 14 | win32 { 15 | contains(TEMPLATE, lib):contains(CONFIG, shared):DEFINES += QT_QTTELNET_EXPORT 16 | else:qttelnet-uselib:DEFINES += QT_QTTELNET_IMPORT 17 | } 18 | -------------------------------------------------------------------------------- /share/MASTER.DTA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/MASTER.DTA -------------------------------------------------------------------------------- /share/MASTERDX.DTA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/MASTERDX.DTA -------------------------------------------------------------------------------- /share/MASTERSS.DTA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/MASTERSS.DTA -------------------------------------------------------------------------------- /share/MASUSVE.DTA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/MASUSVE.DTA -------------------------------------------------------------------------------- /share/arrl.txt: -------------------------------------------------------------------------------- 1 | #ARRL/RAC sections 2 | AK 3 | AL 4 | AR 5 | AZ 6 | CO 7 | CT 8 | DE 9 | EB 10 | EMA;EM 11 | ENY 12 | EPA;EP 13 | EWA;EW 14 | GA 15 | IA 16 | ID 17 | IL 18 | IN 19 | KS 20 | KY 21 | LA 22 | LAX 23 | MDC;MD;DC 24 | ME 25 | MI 26 | MN 27 | MO 28 | MS 29 | MT 30 | NC 31 | ND 32 | NE 33 | NFL;NF 34 | NH 35 | NLI 36 | NM 37 | NNJ 38 | NNY 39 | NTX 40 | NV 41 | OH 42 | OK 43 | OR 44 | ORG 45 | PAC 46 | PR 47 | RI 48 | SB 49 | SC 50 | SCV 51 | SD 52 | SDG 53 | SF 54 | SFL 55 | SJV 56 | SNJ 57 | STX 58 | SV 59 | TN 60 | UT 61 | VA 62 | VI 63 | VT 64 | WCF 65 | WI 66 | WMA 67 | WNY 68 | WPA 69 | WTX 70 | WV 71 | WWA 72 | WY 73 | NB 74 | NL 75 | NS 76 | PE;PEI 77 | QC 78 | GH;GTA 79 | ONE 80 | ONN 81 | ONS 82 | MB 83 | SK 84 | AB 85 | BC 86 | TER;NT 87 | -------------------------------------------------------------------------------- /share/arrl10.txt: -------------------------------------------------------------------------------- 1 | #ARRL 10m US states + DC(51)+ VE(14) + XE(32) = 97 total mults 2 | AL 3 | AK 4 | AZ 5 | AR 6 | CA 7 | CO 8 | CT 9 | DC 10 | DE 11 | FL 12 | GA 13 | HI 14 | ID 15 | IL 16 | IN 17 | IA 18 | KS 19 | KY 20 | LA 21 | ME 22 | MD 23 | MA 24 | MI 25 | MN 26 | MS 27 | MO 28 | MT 29 | NE 30 | NV 31 | NH 32 | NJ 33 | NM 34 | NY 35 | NC 36 | ND 37 | OH 38 | OK 39 | OR 40 | PA 41 | RI 42 | SC 43 | SD 44 | TN 45 | TX 46 | UT 47 | VT 48 | VA 49 | WA 50 | WV 51 | WI 52 | WY 53 | NB;VE9 54 | NS;VE1 55 | QC;VE2 56 | PE;PEI;VY2 57 | NL;NF;VO 58 | LB;VO2 59 | ON;VE3 60 | MB;VE4 61 | SK;VE5 62 | AB;VE6 63 | BC;VE7 64 | NT;NWT;VE8 65 | YT;YU;VY1 66 | NU;VY0 67 | AGS 68 | BAC 69 | BCS 70 | CAM 71 | CHI 72 | CHH 73 | COA 74 | COL 75 | DF;DFE 76 | DGO 77 | EMX 78 | GTO 79 | GRO 80 | HGO 81 | JAL 82 | MIC 83 | MOR 84 | NAY 85 | NLE 86 | OAX 87 | PUE 88 | QRO 89 | QUI 90 | SLP 91 | SIN 92 | SON 93 | TAB 94 | TAM 95 | TLX 96 | VER 97 | YUC 98 | ZAC 99 | #/MM mults. Warning: these MUST be specified in this order LAST in 100 | # this file! 101 | R3 102 | R2 103 | R1 104 | -------------------------------------------------------------------------------- /share/arrldx.txt: -------------------------------------------------------------------------------- 1 | #ARRL DX mult file. US States + DC - AK, HI; VE prov., terr., plus LB (14 total) 2 | AL 3 | AZ 4 | AR 5 | CA 6 | CO 7 | CT 8 | DC 9 | DE 10 | FL 11 | GA 12 | ID 13 | IL 14 | IN 15 | IA 16 | KS 17 | KY 18 | LA 19 | ME 20 | MD 21 | MA 22 | MI 23 | MN 24 | MS 25 | MO 26 | MT 27 | NE 28 | NV 29 | NH 30 | NJ 31 | NM 32 | NY 33 | NC 34 | ND 35 | OH 36 | OK 37 | OR 38 | PA 39 | RI 40 | SC 41 | SD 42 | TN 43 | TX 44 | UT 45 | VT 46 | VA 47 | WA 48 | WV 49 | WI 50 | WY 51 | NB 52 | NS 53 | NL 54 | LB 55 | PE;PEI 56 | QC 57 | ON 58 | MB 59 | SK 60 | AB 61 | BC 62 | NT;NWT 63 | NU 64 | YT;YU 65 | -------------------------------------------------------------------------------- /share/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/check.png -------------------------------------------------------------------------------- /share/contest_list.dat: -------------------------------------------------------------------------------- 1 | ARRL 10, arrl10.cfg 2 | ARRL 160 (DX), arrl160dx.cfg 3 | ARRL 160 (US/VE), arrl160.cfg 4 | ARRL DX (US/VE), arrldx.cfg 5 | ARRL DX (DX), arrldx-dx.cfg 6 | ARRL June VHF, arrl-june-vhf.cfg 7 | California QSO Party (CA), cqp_ca.cfg 8 | California QSO Party (outside CA), cqp.cfg 9 | CQ 160, cq160.cfg 10 | CQ WPX, wpx.cfg 11 | CQ WW, cqww.cfg 12 | CW OPS CWT, cwops.cfg 13 | DXpedition/general logging, dxped.cfg 14 | ARRL Field Day,fd.cfg 15 | ARRL Sweepstakes,ss.cfg 16 | IARU, iaru.cfg 17 | Kansas QSO Party (KS), kqp_ks.cfg 18 | Kansas QSO Party (outside KS), kqp.cfg 19 | Mississippi QSO PARTY (MS), msqp_ms.cfg 20 | Mississippi QSO PARTY (outside MS), msqp.cfg 21 | Pennsylvania QSO Party (PA), paqp_pa.cfg 22 | Pennsylvania QSO Party (outside PA), paqp.cfg 23 | North American QSO Party, naqp.cfg 24 | North American Sprint, nasprint.cfg 25 | NCCC Sprint, ns.cfg 26 | Stew Perry Topband, stew.cfg 27 | WW Digi, wwdigi.cfg 28 | -------------------------------------------------------------------------------- /share/countries.dat: -------------------------------------------------------------------------------- 1 | 1A 1S 3A 3B6 3B9 3C 3C0 3D2/c 3D2/r 3DA 3V 3W 3X 3Y/b 3Y/p 4O 4U1I 4U1U 4U1V 4W 5A 5H 5N 5R 5T 5U 5V 5W 5X 5Z 6W 7O 7Q 8Q 8R 9G 9J 9L 9N 9Q 9U 9X A2 A3 A4 A5 A6 A7 A9 AP BS7 BV9P C2 C3 C5 C9 CE0X CE0Y CE0Z CE9 CY0 CY9 D2 D4 D6 E3 E4 E5/n E5/s E7 EP ET EX EY EZ FH FK/c FO/a FO/c FO/m FT/g FT/j FT/t FT/w FT/x FT/z FW GM/s H4 H40 HK0/a HK0/m HM IT9 J2 J5 JD/m JD/o JX JY JW/b KH1 KH3 KH4 KH5 KH8 KH9 KH5K KH7K KH8/s KP1 KP5 P2 P5 PY0S PY0F PY0T R1FJ R1MV S0 S2 S7 S9 ST SU SV/a T2 T30 T31 T32 T33 T5 T8 TA1 TI9 TJ TL TN TR TT TU TY TZ V2 V8 V6 V5 V7 VK0H VK0M VK9C VK9L VK9M VK9N VK9W VK9X VP6 VP6/d VP8/g VP8/h VP8/o VP8/s VU4 VU7 XT XU XW XX9 XZ YK YV0 Z2 Z8 ZD7 ZD8 ZD9 ZK2 ZK3 ZL7 ZL8 ZL9 ZS8 2 | -------------------------------------------------------------------------------- /share/cq160.txt: -------------------------------------------------------------------------------- 1 | #CQ 160m mult file 2 | AL 3 | AZ 4 | AR 5 | CA 6 | CO 7 | CT 8 | DC 9 | DE 10 | FL 11 | GA 12 | ID 13 | IL 14 | IN 15 | IA 16 | KS 17 | KY 18 | LA 19 | ME 20 | MD 21 | MA 22 | MI 23 | MN 24 | MS 25 | MO 26 | MT 27 | NE 28 | NV 29 | NH 30 | NJ 31 | NM 32 | NY 33 | NC 34 | ND 35 | OH 36 | OK 37 | OR 38 | PA 39 | RI 40 | SC 41 | SD 42 | TN 43 | TX 44 | UT 45 | VT 46 | VA 47 | WA 48 | WV 49 | WI 50 | WY 51 | NB;VE9 52 | NS;VE1 53 | PEI;PE;VY2 54 | NF;NL;VO1 55 | LB;VO2 56 | QC;VE2 57 | ON;VE3 58 | MB;VE4 59 | SK;VE5 60 | AB;VE6 61 | BC;VE7 62 | NWT;NT;VE8 63 | YT;YUK;YU;VY1 64 | NU;VY0 65 | -------------------------------------------------------------------------------- /share/cq_zone_latlong.dat: -------------------------------------------------------------------------------- 1 | #latitude and longitude for CQ zones for heading and sunrise/set 2 | # determination. This is used for prefixes that do not match the 3 | # standard CQ zone for that country. 4 | # 5 | # fields should be separated by spaces; all zones must be listed in 6 | # order 7 | # 8 | 1 61.227957 -149.780275 9 | 2 55.002826 -68.034669 10 | 3 41.442726 -123.142091 11 | 4 38.23818 -92.512208 12 | 5 40.513799 -73.930666 13 | 6 25.482951 -104.604494 14 | 7 13.496473 -86.147463 15 | 8 19.228177 -73.491213 16 | 9 6.751896 -64.174806 17 | 10 -9.275622 -75.776369 18 | 11 -11.264612 -50.903322 19 | 12 -34.885931 -71.64551 20 | 13 -35.029996 -58.637697 21 | 14 53.852527 6.298825 22 | 15 51.890054 20.024412 23 | 16 56.316537 38.833006 24 | 17 61.015725 69.931637 25 | 18 66.018018 97.705075 26 | 19 65.219894 144.111325 27 | 20 39.368279 34.423825 28 | 21 28.767659 52.529293 29 | 22 20.96144 78.369137 30 | 23 41.376809 102.099606 31 | 24 30.600094 112.294918 32 | 25 35.746512 139.716793 33 | 26 14.774883 100.341793 34 | 27 13.410994 129.521481 35 | 28 -2.284551 115.458981 36 | 29 -29.61167 115.649412 37 | 30 -30.751278 150.629881 38 | 31 20.303418 -156.650394 39 | 32 -37.439974 177.509762 40 | 33 31.503629 -7.236332 41 | 34 23.563987 25.107418 42 | 35 10.141932 3.134762 43 | 36 -3.162456 19.482418 44 | 37 -0.35156 38.642575 45 | 38 -33.431441 21.767575 46 | 39 -21.616579 54.462887 47 | 40 69.287257 -40.883791 48 | -------------------------------------------------------------------------------- /share/cqp_ca.txt: -------------------------------------------------------------------------------- 1 | #California QSO party. US/VE Mults for CA stations 2 | CA 3 | AB 4 | AK 5 | AL 6 | AR 7 | AZ 8 | BC 9 | CO 10 | CT 11 | DE 12 | FL 13 | GA 14 | HI 15 | IA 16 | ID 17 | IL 18 | IN 19 | KS 20 | KY 21 | LA 22 | MA 23 | MB 24 | MD;DC;MDC 25 | ME 26 | MI 27 | MN 28 | MO 29 | MAR;MR;NB;NL;NS;PE;PEI 30 | MS 31 | MT 32 | NC 33 | ND 34 | NE 35 | NH 36 | NJ 37 | NM 38 | NT;NU;YU 39 | NV 40 | NY 41 | OH 42 | OK 43 | ON 44 | OR 45 | PA 46 | QC 47 | RI 48 | SC 49 | SD 50 | SK 51 | TN 52 | TX 53 | UT 54 | VA 55 | VT 56 | WA 57 | WI 58 | WV 59 | WY 60 | -------------------------------------------------------------------------------- /share/cqp_county.txt: -------------------------------------------------------------------------------- 1 | #California QSO party. CA counties 2 | ALAM;ALAMEDA 3 | ALPI;ALPINE 4 | AMAD;AMADOR 5 | BUTT;BUTTE 6 | CALA;CALAVERAS 7 | CCOS;CONTRA COSTA 8 | COLU;COLUSA 9 | DELN;DEL NORTE 10 | ELDO;EL DORADO 11 | FRES;FRESNO 12 | GLEN;GLENN 13 | HUMB;HUMBOLDT 14 | IMPE;IMPERIAL 15 | INYO;INYO 16 | KERN;KERN 17 | KING;KINGS 18 | LAKE;LAKE 19 | LANG;LOS ANGELES 20 | LASS;LASSEN 21 | MADE;MADERA 22 | MARN;MARIN 23 | MARP;MARIPOSA 24 | MEND;MENDOCINO 25 | MERC;MERCED 26 | MODO;MODOC 27 | MONO;MONO 28 | MONT;MONTEREY 29 | NAPA;NAPA 30 | NEVA;NEVADA 31 | ORAN;ORANGE 32 | PLAC;PLACER 33 | PLUM;PLUMAS 34 | RIVE;RIVERSIDE 35 | SACR;SACRAMENTO 36 | SBAR;SANTA BARBARA 37 | SBEN;SAN BENITO 38 | SBER;SAN BERNARDINO 39 | SCLA;SANTA CLARA 40 | SCRU;SANTA CRUZ 41 | SDIE;SAN DIEGO 42 | SFRA;SAN FRANCISCO 43 | SHAS;SHASTA 44 | SIER;SIERRA 45 | SISK;SISKIYOU 46 | SJOA;SAN JOAQUIN 47 | SLUI;SAN LUIS OBISPO 48 | SMAT;SAN MATEO 49 | SOLA;SOLANO 50 | SONO;SONOMA 51 | STAN;STANISLAUS 52 | SUTT;SUTTER 53 | TEHA;TEHAMA 54 | TRIN;TRINITY 55 | TULA;TULARE 56 | TUOL;TUOLUMNE 57 | VENT;VENTURA 58 | YOLO;YOLO 59 | YUBA;YUBA 60 | -------------------------------------------------------------------------------- /share/exclude_iaru.txt: -------------------------------------------------------------------------------- 1 | AARA ARA URA ABARS ARAB BARL BARC BARS BVIRL BDARA ARBF ARTJ ARAI ARAC ARAD DARCI RCD GRC EARA CARS FRA RSM CORA AGRA RSG GARS GARC CRAG ARGUI GARA RCH IRA ORARI IARS JARA RJRAS KARS RAL LARS LRAA ARM CRAM MARL MARS MRSF ARRAM LREM NARL ARANC NARS ROARS PARS LPRA PNGARS PIARA QARS ARAS SLARS SIRS RSSL RSS VRAS SSTARS TARC ASTRA LRT UARS EARS VARS VARC RSZ ZARS 2 | -------------------------------------------------------------------------------- /share/help/afedri-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/afedri-setup.png -------------------------------------------------------------------------------- /share/help/bandmap-controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/bandmap-controls.png -------------------------------------------------------------------------------- /share/help/bandscope_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/bandscope_dialog.png -------------------------------------------------------------------------------- /share/help/contest_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/contest_options.png -------------------------------------------------------------------------------- /share/help/cw_messages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/cw_messages.png -------------------------------------------------------------------------------- /share/help/cwdaemon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/cwdaemon.png -------------------------------------------------------------------------------- /share/help/cwdevices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/cwdevices.png -------------------------------------------------------------------------------- /share/help/network-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/network-setup.png -------------------------------------------------------------------------------- /share/help/new_contest_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/new_contest_dialog.png -------------------------------------------------------------------------------- /share/help/radio_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/radio_dialog.png -------------------------------------------------------------------------------- /share/help/settings_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/settings_dialog.png -------------------------------------------------------------------------------- /share/help/so2r_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/so2r_dialog.png -------------------------------------------------------------------------------- /share/help/so2sdr-bandmap-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/so2sdr-bandmap-setup.png -------------------------------------------------------------------------------- /share/help/soundcard-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/soundcard-setup.png -------------------------------------------------------------------------------- /share/help/station_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/station_dialog.png -------------------------------------------------------------------------------- /share/help/voice_messages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/help/voice_messages.png -------------------------------------------------------------------------------- /share/iaru.txt: -------------------------------------------------------------------------------- 1 | #IARU member societies (HQ stations) 2 | # 3 | # Note: some IARU societies have the same abbreviation 4 | # -not sure how this is handled, many rare ones have never been 5 | # activated in IARU contest 6 | # 7 | aara 8 | aarc 9 | aars 10 | abars 11 | ac 12 | afvl 13 | agra 14 | ara 15 | arab 16 | arabh 17 | arac 18 | arad 19 | arai 20 | aranc 21 | aras 22 | arat 23 | arbf 24 | arcot 25 | ari 26 | arm 27 | arram 28 | arrl 29 | arrsm 30 | argui 31 | arsb 32 | arsi 33 | arsk 34 | artj 35 | astra 36 | ba 37 | barc 38 | barl 39 | bars 40 | bdara 41 | bfra 42 | bfrr 43 | bvirl 44 | cars 45 | cora 46 | crac 47 | crag 48 | cram 49 | cras 50 | crc;crk 51 | cren 52 | crsa 53 | ctarl 54 | darc 55 | darci 56 | eara 57 | ears 58 | edr 59 | erau 60 | erasd 61 | fara 62 | fmre 63 | fra 64 | frc 65 | frr 66 | frra 67 | frs 68 | gara 69 | garc 70 | gars 71 | grc 72 | harts 73 | hrs 74 | iarc 75 | iars 76 | iaru 77 | ira 78 | irts 79 | jara 80 | jarl 81 | karl 82 | kars 83 | kffr 84 | labre 85 | lars 86 | lcra 87 | lpra 88 | lraa 89 | lral 90 | lrem 91 | lrmd 92 | lrt 93 | marp 94 | mars 95 | marts 96 | mrasz 97 | mrsf 98 | narg 99 | narl 100 | nars 101 | nrrl 102 | nzart 103 | orari 104 | ovsv;oevsv 105 | para 106 | pars 107 | piara 108 | pngars 109 | pzk 110 | qars 111 | r1 112 | r2 113 | r3 114 | raag 115 | rac 116 | ral 117 | rast 118 | rca 119 | rcb 120 | rcd 121 | rcch 122 | rccr 123 | rch 124 | rcp 125 | rcu 126 | rcv 127 | ref 128 | rep 129 | rjras 130 | rl 131 | roars 132 | rsb 133 | rsgb 134 | rsm 135 | rss 136 | rssl 137 | rstg 138 | rsz 139 | sara 140 | sarc 141 | sarl 142 | sarts 143 | shrak 144 | sirs 145 | slars 146 | sral 147 | srr 148 | srs 149 | ssa 150 | sstars 151 | svgrs 152 | szr 153 | tacars 154 | tarc 155 | tarl 156 | trac 157 | ttars 158 | uarl 159 | uba 160 | ura 161 | ure 162 | uska 163 | varc 164 | vars 165 | vras 166 | veron 167 | verona 168 | vrona 169 | wia 170 | zars 171 | zrs 172 | -------------------------------------------------------------------------------- /share/icon24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/icon24x24.png -------------------------------------------------------------------------------- /share/icon48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/icon48x48.png -------------------------------------------------------------------------------- /share/kqp_county.txt: -------------------------------------------------------------------------------- 1 | #Multipliers for Kansas qso party, KS counties 2 | # these are mults for stations outside KS, but all count 3 | # for the "KS" state mult for stations within KS. 4 | ALL;ALLEN 5 | AND;ANDERSON 6 | ATC;ATCHISON 7 | BAR;BARBER 8 | BRT;BARTON 9 | BOU;BOURBON 10 | BRO;BROWN 11 | BUT;BUTLER 12 | CHS;CHASE 13 | CHT;CHAUTAUQUA 14 | CHE;CHEROKEE 15 | CHY;CHEYENNE 16 | CLK;CLARK 17 | CLY;CLAY 18 | CLO;CLOUD 19 | COF;COFFEY 20 | COM;COMANCHE 21 | COW;COWLEY 22 | CRA;CRAWFORD 23 | DEC;DECATUR 24 | DIC;DICKINSON 25 | DON;DONIPHAN 26 | DOU;DOUGLAS 27 | EDW;EDWARDS 28 | ELK;ELK 29 | ELL;ELLIS 30 | ELS;ELLSWORTH 31 | FIN;FINNEY 32 | FOR;FORD 33 | FRA;FRANKLIN 34 | GEA;GEARY 35 | GOV;GOVE 36 | GRM;GRAHAM 37 | GRT;GRANT 38 | GRY;GRAY 39 | GLY;GREELEY 40 | GRE;GREENWOOD 41 | HAM;HAMILTON 42 | HPR;HARPER 43 | HVY;HARVEY 44 | HAS;HASKELL 45 | HOG;HODGEMAN 46 | JAC;JACKSON 47 | JEF;JEFFERSON 48 | JEW;JEWELL 49 | JOH;JOHNSON 50 | KEA;KEARNY 51 | KIN;KINGMAN 52 | KIO;KIOWA 53 | LAB;LABETTE 54 | LAN;LANE 55 | LEA;LEAVENWORTH 56 | LCN;LINCOLN 57 | LIN;LINN 58 | LOG;LOGAN 59 | LYO;LYON 60 | MRN;MARION 61 | MSH;MARSHALL 62 | MCP;MCPHERSON 63 | MEA;MEADE 64 | MIA;MIAMI 65 | MIT;MITCHELL 66 | MGY;MONTGOMERY 67 | MOR;MORRIS 68 | MTN;MORTON 69 | NEM;NEMAHA 70 | NEO;NEOSHO 71 | NES;NESS 72 | NOR;NORTON 73 | OSA;OSAGE 74 | OSB;OSBORNE 75 | OTT;OTTAWA 76 | PAW;PAWNEE 77 | PHI;PHILLIPS 78 | POT;POTTAWATOMIE 79 | PRA;PRATT 80 | RAW;RAWLINS 81 | REN;RENO 82 | REP;REPUBLIC 83 | RIC;RICE 84 | RIL;RILEY 85 | ROO;ROOKS 86 | RUS;RUSH 87 | RSL;RUSSELL 88 | SAL;SALINE 89 | SCO;SCOTT 90 | SED;SEDGWICK 91 | SEW;SEWARD 92 | SHA;SHAWNEE 93 | SHE;SHERIDAN 94 | SMN;SHERMAN 95 | SMI;SMITH 96 | STA;STAFFORD 97 | STN;STANTON 98 | STE;STEVENS 99 | SUM;SUMNER 100 | THO;THOMAS 101 | TRE;TREGO 102 | WAB;WABAUNSEE 103 | WAL;WALLACE 104 | WAS;WASHINGTON 105 | WIC;WICHITA 106 | WIL;WILSON 107 | WOO;WOODSON 108 | WYA;WYANDOTTE 109 | -------------------------------------------------------------------------------- /share/kqp_ks.txt: -------------------------------------------------------------------------------- 1 | #Multipliers for Kansas qso party, KS stations 2 | KS 3 | AB 4 | AK 5 | AL 6 | AR 7 | AZ 8 | BC 9 | CA 10 | CO 11 | CT 12 | DE 13 | DX 14 | FL 15 | GA 16 | HI 17 | IA 18 | ID 19 | IL 20 | IN 21 | KY 22 | LA 23 | MA 24 | MB 25 | MD;DC;MDC 26 | ME 27 | MI 28 | MN 29 | MO 30 | MS 31 | MT 32 | NB 33 | NC 34 | ND 35 | NE 36 | NH 37 | NJ 38 | NL 39 | NM 40 | NS 41 | NT 42 | NU 43 | NV 44 | NY 45 | OH 46 | OK 47 | ON 48 | OR 49 | PA 50 | PE;PEI 51 | QC 52 | RI 53 | SC 54 | SD 55 | SK 56 | TN 57 | TX 58 | UT 59 | VA 60 | VT 61 | WA 62 | WI 63 | WV 64 | WY 65 | YT;YU 66 | -------------------------------------------------------------------------------- /share/msqp.txt: -------------------------------------------------------------------------------- 1 | #Multipliers for MS QSO party, stations outside of Mississippi 2 | ADA;ADAMS 3 | ALC;ALCORN 4 | AMI;AMITE 5 | ATT;ATTALA 6 | BEN;BENTON 7 | BOL;BOLIVAR 8 | CHI;CHICKASAW 9 | CHO;CHOCTAW 10 | CAL;CALHOUN 11 | CLB;CLAIBORNE 12 | CLA;CLAY 13 | CLK;CLARKE 14 | COA;COAHOMA 15 | COP;COPIAH 16 | COV;COVINGTON 17 | CAR;CARROLL 18 | DES;DESOTO 19 | FOR;FORREST 20 | FRA;FRANKLIN 21 | GEO;GEORGE 22 | GRN;GREENE 23 | GRE;GRENADA 24 | HAN;HANCOCK 25 | HAR;HARRISON 26 | HIN;HINDS 27 | HOL;HOLMES 28 | HUM;HUMPHREYS 29 | ISS;ISSAQUENA 30 | ITA;ITAWAMBA 31 | JAC;JACKSON 32 | JAS;JASPER 33 | JDV;JEFFERSON DAVIS 34 | JEF;JEFFERSON 35 | JON;JONES 36 | KEM;KEMPER 37 | LAF;LAFAYETTE 38 | LAM;LAMAR 39 | LAU;LAUDERDALE 40 | LAW;LAWRENCE 41 | LEA;LEAKE 42 | LEE;LEE 43 | LEF;LEFLORE 44 | LIN;LINCOLN 45 | LOW;LOWNDES 46 | MRN;MARION 47 | MAD;MADISON 48 | MGY;MONTGOMERY 49 | MON;MONROE 50 | MAR;MARSHALL 51 | NES;NESHOBA 52 | NEW;NEWTON 53 | NOX;NOXUBEE 54 | OKT;OKTIBBEHA 55 | PAN;PANOLA 56 | PER;PERRY 57 | PIK;PIKE 58 | PEA;PEARL RIVER 59 | PON;PONTOTOC 60 | PRE;PRENTISS 61 | QUI;QUITMAN 62 | RAN;RANKIN 63 | SCO;SCOTT 64 | SHA;SHARKEY 65 | SIM;SIMPSON 66 | SMI;SMITH 67 | STO;STONE 68 | SUN;SUNFLOWER 69 | TAL;TALLAHATCHIE 70 | TAT;TATE 71 | TIP;TIPPAH 72 | TIS;TISHOMINGO 73 | TUN;TUNICA 74 | UNI;UNION 75 | WAL;WALTHALL 76 | WAS;WASHINGTON 77 | WAY;WAYNE 78 | WEB;WEBSTER 79 | WIN;WINSTON 80 | WIL;WILKINSON 81 | WAR;WARREN 82 | YAL;YALOBUSHA 83 | YAZ;YAZOO 84 | -------------------------------------------------------------------------------- /share/msqp_ms.txt: -------------------------------------------------------------------------------- 1 | #Multipliers for MS QSO party, stations in Mississippi 2 | # this includes 3 | # MS counties 4 | # US states, VE provinces 5 | ADA;ADAMS 6 | ALC;ALCORN 7 | AMI;AMITE 8 | ATT;ATTALA 9 | BEN;BENTON 10 | BOL;BOLIVAR 11 | CHI;CHICKASAW 12 | CHO;CHOCTAW 13 | CAL;CALHOUN 14 | CLB;CLAIBORNE 15 | CLA;CLAY 16 | CLK;CLARKE 17 | COA;COAHOMA 18 | COP;COPIAH 19 | COV;COVINGTON 20 | CAR;CARROLL 21 | DES;DESOTO 22 | FOR;FORREST 23 | FRA;FRANKLIN 24 | GEO;GEORGE 25 | GRN;GREENE 26 | GRE;GRENADA 27 | HAN;HANCOCK 28 | HAR;HARRISON 29 | HIN;HINDS 30 | HOL;HOLMES 31 | HUM;HUMPHREYS 32 | ISS;ISSAQUENA 33 | ITA;ITAWAMBA 34 | JAC;JACKSON 35 | JAS;JASPER 36 | JDV;JEFFERSON DAVIS 37 | JEF;JEFFERSON 38 | JON;JONES 39 | KEM;KEMPER 40 | LAF;LAFAYETTE 41 | LAM;LAMAR 42 | LAU;LAUDERDALE 43 | LAW;LAWRENCE 44 | LEA;LEAKE 45 | LEE;LEE 46 | LEF;LEFLORE 47 | LIN;LINCOLN 48 | LOW;LOWNDES 49 | MRN;MARION 50 | MAD;MADISON 51 | MGY;MONTGOMERY 52 | MON;MONROE 53 | MAR;MARSHALL 54 | NES;NESHOBA 55 | NEW;NEWTON 56 | NOX;NOXUBEE 57 | OKT;OKTIBBEHA 58 | PAN;PANOLA 59 | PER;PERRY 60 | PIK;PIKE 61 | PEA;PEARL RIVER 62 | PON;PONTOTOC 63 | PRE;PRENTISS 64 | QUI;QUITMAN 65 | RAN;RANKIN 66 | SCO;SCOTT 67 | SHA;SHARKEY 68 | SIM;SIMPSON 69 | SMI;SMITH 70 | STO;STONE 71 | SUN;SUNFLOWER 72 | TAL;TALLAHATCHIE 73 | TAT;TATE 74 | TIP;TIPPAH 75 | TIS;TISHOMINGO 76 | TUN;TUNICA 77 | UNI;UNION 78 | WAL;WALTHALL 79 | WAS;WASHINGTON 80 | WAY;WAYNE 81 | WEB;WEBSTER 82 | WIN;WINSTON 83 | WIL;WILKINSON 84 | WAR;WARREN 85 | YAL;YALOBUSHA 86 | YAZ;YAZOO 87 | AL 88 | AK 89 | AZ 90 | AR 91 | CA 92 | CO 93 | CT 94 | DE 95 | FL 96 | GA 97 | HI 98 | ID 99 | IL 100 | IN 101 | IA 102 | KS 103 | KY 104 | LA 105 | ME 106 | MD 107 | MA 108 | MI 109 | MN 110 | MO 111 | MT 112 | NE 113 | NV 114 | NH 115 | NJ 116 | NM 117 | NY 118 | NC 119 | ND 120 | OH 121 | OK 122 | OR 123 | PA 124 | RI 125 | SC 126 | SD 127 | TN 128 | TX 129 | UT 130 | VT 131 | VA 132 | WA 133 | WV 134 | WI 135 | WY 136 | NB;VE9 137 | NS;VE1 138 | PEI;VY2 139 | NL;VO1;VO2 140 | QC;VE2 141 | ON;VE3 142 | MB;VE4 143 | SK;VE5 144 | AB;VE6 145 | BC;VE7 146 | NWT;VE8 147 | YU;VY1 148 | NU;VY0 149 | -------------------------------------------------------------------------------- /share/naqp.txt: -------------------------------------------------------------------------------- 1 | #NAQP mult file 2 | AL 3 | AK 4 | AZ 5 | AR 6 | CA 7 | CO 8 | CT 9 | DC 10 | DE 11 | FL 12 | GA 13 | HI 14 | ID 15 | IL 16 | IN 17 | IA 18 | KS 19 | KY 20 | LA 21 | ME 22 | MD 23 | MA 24 | MI 25 | MN 26 | MS 27 | MO 28 | MT 29 | NE 30 | NV 31 | NH 32 | NJ 33 | NM 34 | NY 35 | NC 36 | ND 37 | OH 38 | OK 39 | OR 40 | PA 41 | RI 42 | SC 43 | SD 44 | TN 45 | TX 46 | UT 47 | VT 48 | VA 49 | WA 50 | WV 51 | WI 52 | WY 53 | NB;VE9 54 | NS;VE1 55 | PE;PEI;VY2 56 | NL;VO1;VO2 57 | QC;VE2 58 | ON;VE3 59 | MB;VE4 60 | SK;VE5 61 | AB;VE6 62 | BC;VE7 63 | NT;NWT;VE8 64 | YT;YU;VY1 65 | NU;VY0 66 | -------------------------------------------------------------------------------- /share/ns.txt: -------------------------------------------------------------------------------- 1 | #NS mult file 2 | AL 3 | AK 4 | AZ 5 | AR 6 | CA 7 | CO 8 | CT 9 | DC 10 | DE 11 | FL 12 | GA 13 | HI 14 | ID 15 | IL 16 | IN 17 | IA 18 | KS 19 | KY 20 | LA 21 | ME 22 | MD 23 | MA 24 | MI 25 | MN 26 | MS 27 | MO 28 | MT 29 | NE 30 | NV 31 | NH 32 | NJ 33 | NM 34 | NY 35 | NC 36 | ND 37 | OH 38 | OK 39 | OR 40 | PA 41 | RI 42 | SC 43 | SD 44 | TN 45 | TX 46 | UT 47 | VT 48 | VA 49 | WA 50 | WV 51 | WI 52 | WY 53 | NB;VE9 54 | NS;VE1 55 | PEI;VY2 56 | NL;VO1;VO2 57 | QC;VE2 58 | ON;VE3 59 | MB;VE4 60 | SK;VE5 61 | AB;VE6 62 | BC;VE7 63 | NWT;VE8 64 | YU;VY1 65 | NU;VY0 66 | -------------------------------------------------------------------------------- /share/paqp_county.txt: -------------------------------------------------------------------------------- 1 | #Pennsylvania QSO party. PA counties 2 | ADA;Adams 3 | ALL;Allegheny 4 | ARM;Armstrong 5 | BEA;Beaver 6 | BED;Bedford 7 | BER;Berks 8 | BLA;Blair 9 | BRA;Bradford 10 | BUT;Butler 11 | BUX;Bucks 12 | CAR;Carbon 13 | CEN;Centre 14 | CHE;Chester 15 | CLA;Clarion 16 | CLE;Clearfield 17 | CLI;Clinton 18 | CMB;Cambria 19 | COL;Columbia 20 | CRA;Crawford 21 | CRN;Cameron 22 | CUM;Cumberland 23 | DAU;Dauphin 24 | DCO;Delaware 25 | ELK;Elk 26 | ERI;Erie 27 | Fay;Fayette 28 | FOR;Forest 29 | FRA;Franklin 30 | FUL;Fulton 31 | GRE;Greene 32 | HUN;Huntingdon 33 | INN;Indiana 34 | JEF;Jefferson 35 | JUN;Juniata 36 | LAC;Lackawanna 37 | LAN;Lancaster 38 | LAW;Lawrence 39 | LEB;Lebanon 40 | LEH;Lehigh 41 | LUZ;Luzerne 42 | LYC;Lycoming 43 | MCK;McKean 44 | MER;Mercer 45 | MGY;Montgomery 46 | MIF;Mifflin 47 | MOE;Monroe 48 | MTR;Montour 49 | NHA;Northhampton 50 | NUM;Northumberland 51 | PER;Perry 52 | PHI;Philadelphia 53 | PIK;Pike 54 | POT;Potter 55 | SCH;Schuylkill 56 | SNY;Snyder 57 | SOM;Somerset 58 | SUL;Sullivan 59 | SUS;Susquehanna 60 | TIO;Tioga 61 | UNI;Union 62 | VEN;Venango 63 | WAR;Warren 64 | WAS;Washington 65 | WAY;Wayne 66 | WES;Westmoreland 67 | WYO;Wyoming 68 | YOR;York 69 | -------------------------------------------------------------------------------- /share/paqp_pa.txt: -------------------------------------------------------------------------------- 1 | #ARRL/RAC sections 2 | EPA 3 | WPA 4 | AK 5 | AL 6 | AR 7 | AZ 8 | CO 9 | CT 10 | DE 11 | EB 12 | EMA;EM 13 | ENY 14 | EWA;EW 15 | GA 16 | IA 17 | ID 18 | IL 19 | IN 20 | KS 21 | KY 22 | LA 23 | LAX 24 | MDC;MD;DC 25 | ME 26 | MI 27 | MN 28 | MO 29 | MS 30 | MT 31 | NC 32 | ND 33 | NE 34 | NFL;NF 35 | NH 36 | NLI 37 | NM 38 | NNJ 39 | NNY 40 | NT 41 | NTX 42 | NV 43 | OH 44 | OK 45 | OR 46 | ORG 47 | PAC 48 | PR 49 | QC 50 | RI 51 | SB 52 | SC 53 | SCV 54 | SD 55 | SDG 56 | SF 57 | SFL 58 | SJV 59 | SNJ 60 | STX 61 | SV 62 | TN 63 | UT 64 | VA 65 | VI 66 | VT 67 | WCF 68 | WI 69 | WMA 70 | WNY 71 | WTX 72 | WV 73 | WWA 74 | WY 75 | NS;VE1 76 | QC;VE2 77 | ON;VE3 78 | MB;VE4 79 | SK;VE5 80 | AB;VE6 81 | BC;VE7 82 | NT;VE8 83 | NB;VE9 84 | NL;VO1;VO2 85 | NU;VY0 86 | YT;VY1 87 | PE;VY2 88 | -------------------------------------------------------------------------------- /share/so2sdr-bandmap-help/afedri-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/so2sdr-bandmap-help/afedri-setup.png -------------------------------------------------------------------------------- /share/so2sdr-bandmap-help/bandmap-controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/so2sdr-bandmap-help/bandmap-controls.png -------------------------------------------------------------------------------- /share/so2sdr-bandmap-help/network-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/so2sdr-bandmap-help/network-setup.png -------------------------------------------------------------------------------- /share/so2sdr-bandmap-help/rtl-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/so2sdr-bandmap-help/rtl-setup.png -------------------------------------------------------------------------------- /share/so2sdr-bandmap-help/so2sdr-bandmap-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/so2sdr-bandmap-help/so2sdr-bandmap-setup.png -------------------------------------------------------------------------------- /share/so2sdr-bandmap-help/soundcard-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/so2sdr-bandmap-help/soundcard-setup.png -------------------------------------------------------------------------------- /share/sprint.txt: -------------------------------------------------------------------------------- 1 | #Sprint mult file 2 | AK 3 | AL 4 | AZ 5 | AR 6 | CA 7 | CO 8 | CT 9 | DC 10 | DE 11 | FL 12 | GA 13 | HI 14 | ID 15 | IL 16 | IN 17 | IA 18 | KS 19 | KY 20 | LA 21 | ME 22 | MD 23 | MA 24 | MI 25 | MN 26 | MS 27 | MO 28 | MT 29 | NE 30 | NV 31 | NH 32 | NJ 33 | NM 34 | NY 35 | NC 36 | ND 37 | OH 38 | OK 39 | OR 40 | PA 41 | RI 42 | SC 43 | SD 44 | TN 45 | TX 46 | UT 47 | VT 48 | VA 49 | WA 50 | WV 51 | WI 52 | WY 53 | NB;VE9 54 | NS;VE1 55 | PEI;VY2 56 | NL;VO1;VO2 57 | QC;VE2 58 | ON;VE3 59 | MB;VE4 60 | SK;VE5 61 | AB;VE6 62 | BC;VE7 63 | NWT;VE8 64 | YU;VY1 65 | NU;VY0 66 | -------------------------------------------------------------------------------- /share/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/share/x.png -------------------------------------------------------------------------------- /so2sdr-bandmap/afedri.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef AFEDRI_H 20 | #define AFEDRI_H 21 | 22 | #include "network.h" 23 | #include 24 | #include 25 | #include 26 | 27 | #define TARGET_NAME "AFEDRI SDR Network" 28 | #define SERIAL_NUMBER "AN000102" 29 | #define IF_VERSION 0x101 30 | #define BOOT_CODE_VER 0x000 31 | #define APP_FW_VER 0x112 32 | #define HW_VER 0x000 33 | #define PRODUCT_ID 0x03524453L 34 | 35 | #define MAX_UDP_SIZE 1044 36 | 37 | const QString afedriNames[4] = { 38 | QStringLiteral("AFEDRI SDR-Net"), QStringLiteral("SDR-IP"), 39 | QStringLiteral("AFE822x SDR-Net"), QStringLiteral("Unknown")}; 40 | 41 | class Afedri : public NetworkSDR { 42 | Q_OBJECT 43 | public: 44 | explicit Afedri(const QString &settingsFile, QObject *parent = nullptr); 45 | ~Afedri(); 46 | unsigned int sampleRate() const override; 47 | bool isSlave() const override; 48 | 49 | public slots: 50 | void stop() override; 51 | void initialize() override; 52 | void setRfFreq(double f) override; 53 | void setRfFreqChannel(double f, int c) override; 54 | 55 | private slots: 56 | void readDatagram(); 57 | void readTcp(); 58 | 59 | private: 60 | void get_clock_freq(); 61 | void get_real_sample_rate(); 62 | void get_sdr_name(); 63 | void set_broadcast_flag(bool); 64 | void set_freq(unsigned long frequency, int channel); 65 | void set_multichannel_mode(int channel); 66 | void set_sample_rate(unsigned long sample_rate); 67 | void stopAfedri(); 68 | 69 | unsigned int clockFreq; 70 | unsigned int realSampleRate; 71 | QString name; 72 | }; 73 | 74 | #endif // AFEDRI_H 75 | -------------------------------------------------------------------------------- /so2sdr-bandmap/afedrisetup.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef AFEDRISETUP_H 20 | #define AFEDRISETUP_H 21 | 22 | #include "bandoffsetsetup.h" 23 | #include "defines.h" 24 | #include "ui_afedrisetup.h" 25 | #include 26 | #include 27 | 28 | class AfedriSetup : public QDialog, public Ui::afedriSetup { 29 | Q_OBJECT 30 | public: 31 | explicit AfedriSetup(QSettings &s, QWidget *parent = nullptr); 32 | double offset(int band) const; 33 | bool invert(int band) const; 34 | 35 | signals: 36 | void afedriError(const QString &); 37 | 38 | public slots: 39 | void setFreq(unsigned int f) { clockFreqLabel->setText(QString::number(f)); } 40 | void setActualSampleRate(unsigned int f) { 41 | realSampleRateLabel->setText(QString::number(f)); 42 | } 43 | 44 | private slots: 45 | void updateAfedri(); 46 | void rejectChanges(); 47 | 48 | private: 49 | QSettings &settings; 50 | void updateFromSettings(); 51 | BandOffsetSetup *offsetSetup; 52 | }; 53 | 54 | #endif // AFEDRISETUP_H 55 | -------------------------------------------------------------------------------- /so2sdr-bandmap/audioreader_portaudio.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef AUDIOREADER_PORTAUDIO_H 20 | #define AUDIOREADER_PORTAUDIO_H 21 | 22 | #include "sdrdatasource.h" 23 | #include 24 | #include 25 | 26 | /*! 27 | Low-level audio input using Portaudio 28 | */ 29 | class AudioReaderPortAudio : public SdrDataSource { 30 | Q_OBJECT 31 | 32 | public: 33 | explicit AudioReaderPortAudio(const QString &settingsFile, 34 | QObject *parent = nullptr); 35 | ~AudioReaderPortAudio(); 36 | unsigned int sampleRate() const override; 37 | bool isSlave() const override { return false; } 38 | 39 | protected: 40 | static int callback(const void *input, void *output, unsigned long frameCount, 41 | const PaStreamCallbackTimeInfo *timeInfo, 42 | PaStreamCallbackFlags statusFlags, void *userdata); 43 | public slots: 44 | void stop() override; 45 | void initialize() override; 46 | void setRfFreq(double f) override { Q_UNUSED(f) } 47 | void setRfFreqChannel(double f, int c) override { 48 | Q_UNUSED(f) 49 | Q_UNUSED(c) 50 | } 51 | 52 | private: 53 | PaStreamParameters inputParameters; 54 | PaError err; 55 | PaStream *stream; 56 | unsigned char *buff; 57 | unsigned char *ptr; 58 | unsigned int bpmax; 59 | unsigned int bptr; 60 | unsigned int iptr; 61 | unsigned long periodSize; 62 | int frameSize; 63 | 64 | void emitAudioReady(); 65 | bool checkError(PaError err); 66 | void stopAudioreader(); 67 | }; 68 | 69 | #endif // AUDIOREADER_PORT_AUDIO_H 70 | -------------------------------------------------------------------------------- /so2sdr-bandmap/bandmap-tcp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef BANDMAPTCP_H 20 | #define BANDMAPTCP_H 21 | 22 | // bandmap TCP commands 23 | #define BANDMAP_CMD_SET_FREQ 0x66 24 | #define BANDMAP_CMD_SET_SDR_FREQ 0x68 25 | #define BANDMAP_CMD_QUIT 0x71 26 | #define BANDMAP_CMD_RX 0x72 27 | #define BANDMAP_CMD_TX 0x74 28 | #define BANDMAP_CMD_TERMINATE 0x0a 29 | #define BANDMAP_CMD_FIND_FREQ 0x67 30 | #define BANDMAP_CMD_SET_LOWER_FREQ 0x6C 31 | #define BANDMAP_CMD_SET_UPPER_FREQ 0x75 32 | #define BANDMAP_CMD_SET_ADD_OFFSET 0x6f 33 | #define BANDMAP_CMD_ADD_CALL 0x61 34 | #define BANDMAP_CMD_DELETE_CALL 0x64 35 | #define BANDMAP_CMD_DELETE_CALL_FREQ 0x65 36 | #define BANDMAP_CMD_SET_INVERT 0x69 37 | #define BANDMAP_CMD_CLEAR 0x78 38 | #define BANDMAP_CMD_QSY_UP 0x55 39 | #define BANDMAP_CMD_QSY_DOWN 0x44 40 | #define BANDMAP_CMD_SET_SDR_FREQ_CHANNEL 0x76 41 | 42 | #endif // BANDMAPTCP_H 43 | -------------------------------------------------------------------------------- /so2sdr-bandmap/bandmapdisplay.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef BandmapDisplay_H 20 | #define BandmapDisplay_H 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | /*! 27 | Low level BandmapDisplay of spectrum. 28 | */ 29 | class BandmapDisplay : public QWidget { 30 | Q_OBJECT 31 | 32 | public: 33 | explicit BandmapDisplay(QWidget *parent = nullptr); 34 | ~BandmapDisplay(); 35 | friend class So2sdrBandmap; 36 | 37 | void initialize(QSettings *s); 38 | bool invert() const; 39 | void setInvert(bool t); 40 | void setMark(bool b); 41 | void setScale(int s); 42 | void setVfoPos(int s); 43 | int y1() const { return cornery; } 44 | int y2() const { return (cornery + height()); } 45 | 46 | public slots: 47 | void plotSpectrum(unsigned char *, unsigned char); 48 | void setSampleRate(unsigned int f) { samplerate = f; } 49 | 50 | signals: 51 | void mouseClick(); 52 | void displayMouseQSY(int); 53 | 54 | protected: 55 | void paintEvent(QPaintEvent *event); 56 | void resizeEvent(QResizeEvent *event); 57 | void mousePressEvent(QMouseEvent *event); 58 | 59 | private: 60 | int cornerx; 61 | int cornery; 62 | QPixmap pixmap; 63 | bool *cmap; 64 | bool _invert; 65 | bool mark; 66 | bool *markRgb0; 67 | bool *markRgb1; 68 | bool *markRgb2; 69 | int scale; 70 | int vfoPos; 71 | unsigned int samplerate; 72 | unsigned char *dataptr; 73 | QSettings *settings; 74 | }; 75 | 76 | #endif 77 | -------------------------------------------------------------------------------- /so2sdr-bandmap/bandmapentry.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "bandmapentry.h" 20 | 21 | BandmapEntry::BandmapEntry() { 22 | call.clear(); 23 | f = 0; 24 | createdTime = 0; 25 | dupe = false; 26 | } 27 | -------------------------------------------------------------------------------- /so2sdr-bandmap/bandmapentry.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef BANDMAPENTRY_H 20 | #define BANDMAPENTRY_H 21 | #include 22 | 23 | /*! Bandmap entry. 24 | 25 | - freq=frequency in Hz 26 | - y=y pixel position 27 | */ 28 | class BandmapEntry { 29 | public: 30 | BandmapEntry(); 31 | 32 | bool dupe; 33 | double f; 34 | qint64 createdTime; 35 | QByteArray call; 36 | }; 37 | 38 | Q_DECLARE_TYPEINFO(BandmapEntry, Q_MOVABLE_TYPE); 39 | 40 | #endif // BANDMAPENTRY_H 41 | -------------------------------------------------------------------------------- /so2sdr-bandmap/call.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "call.h" 20 | Call::Call() { 21 | call.clear(); 22 | freq = 0; 23 | rgbCall[0] = 0; // call black by default 24 | rgbCall[1] = 0; 25 | rgbCall[2] = 0; 26 | markRgb[0] = false; 27 | markRgb[1] = false; 28 | markRgb[2] = false; 29 | mark = false; 30 | } 31 | -------------------------------------------------------------------------------- /so2sdr-bandmap/call.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CALL_H 20 | #define CALL_H 21 | #include 22 | 23 | class Call { 24 | public: 25 | Call(); 26 | 27 | QByteArray call; 28 | double freq; 29 | unsigned char rgbCall[3]; 30 | bool markRgb[3]; 31 | bool mark; 32 | }; 33 | 34 | #endif // CALL_H 35 | -------------------------------------------------------------------------------- /so2sdr-bandmap/helpdialog.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "helpdialog.h" 20 | #include "utils.h" 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | HelpDialog::HelpDialog(QString fileName, QWidget *parent) : QDialog(parent) { 29 | setupUi(this); 30 | QCommonStyle style; 31 | connect(pushButton, SIGNAL(clicked()), this, SLOT(accept())); 32 | connect(homeButton, SIGNAL(clicked()), this, SLOT(home())); 33 | homeButton->setIcon(style.standardIcon(QStyle::SP_ArrowUp)); 34 | connect(backButton, SIGNAL(clicked()), HelpTextEdit, SLOT(backward())); 35 | backButton->setIcon(style.standardIcon(QStyle::SP_ArrowBack)); 36 | connect(forwardButton, SIGNAL(clicked()), HelpTextEdit, SLOT(forward())); 37 | forwardButton->setIcon(style.standardIcon(QStyle::SP_ArrowForward)); 38 | HelpTextEdit->setSearchPaths( 39 | QStringList(dataDirectory() + "so2sdr-bandmap-help/")); 40 | QFile file(fileName); 41 | if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { 42 | QTextStream ts(&file); 43 | HelpTextEdit->setText(ts.readAll()); 44 | } 45 | file.close(); 46 | } 47 | 48 | void HelpDialog::home() { HelpTextEdit->scrollToAnchor("top"); } 49 | -------------------------------------------------------------------------------- /so2sdr-bandmap/helpdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef HELPDIALOG_H 20 | #define HELPDIALOG_H 21 | #include "ui_helpdialog.h" 22 | 23 | /*! 24 | Displays help file 25 | */ 26 | class HelpDialog : public QDialog, public Ui::HelpDialog { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit HelpDialog(QString fileName, QWidget *parent = nullptr); 31 | 32 | private slots: 33 | void home(); 34 | }; 35 | #endif 36 | -------------------------------------------------------------------------------- /so2sdr-bandmap/icon48x48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/so2sdr-bandmap/icon48x48.ico -------------------------------------------------------------------------------- /so2sdr-bandmap/iqbalance.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef IQBALANCE_H 20 | #define IQBALANCE_H 21 | #include "ui_iqbalance.h" 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | const int IQ_PLOT_WIDTH = 512; 29 | const int IQ_PLOT_HEIGHT = 120; 30 | 31 | class IQBalance : public QWidget, public Ui::IQBalance { 32 | Q_OBJECT 33 | 34 | public: 35 | explicit IQBalance(QWidget *parent = nullptr); 36 | ~IQBalance(); 37 | friend class So2sdrBandmap; 38 | 39 | public slots: 40 | void clearPlots(); 41 | void plotGainPoint(int bin, double y); 42 | void plotGainFunc(double, double, double, double); 43 | void plotPhasePoint(int bin, double y); 44 | void plotPhaseFunc(double, double, double, double); 45 | void setGainScale(double, double); 46 | void setPhaseScale(double, double); 47 | 48 | signals: 49 | void closed(bool); 50 | void restart(); 51 | 52 | protected: 53 | void closeEvent(QCloseEvent *event); 54 | 55 | private slots: 56 | void restartIQ(); 57 | 58 | private: 59 | double gainOffset; 60 | double gainScale; 61 | double phaseOffset; 62 | double phaseScale; 63 | QPixmap gainPixmap; 64 | QPixmap phasePixmap; 65 | }; 66 | 67 | #endif 68 | -------------------------------------------------------------------------------- /so2sdr-bandmap/main.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "defines.h" 20 | #include "so2sdr-bandmap.h" 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | int main(int argc, char *argv[]) { 27 | // check for -s option. This option must be done before QApplication is created 28 | bool scale=false; 29 | for (int i=0;isetAttribute(Qt::WA_DeleteOnClose); 56 | 57 | if (main->so2sdrBandmapOk()) { 58 | return app.exec(); 59 | } else { 60 | return -1; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /so2sdr-bandmap/network.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | 20 | #ifndef NETWORK_H 21 | #define NETWORK_H 22 | #include "sdrdatasource.h" 23 | #include 24 | #include 25 | #include 26 | 27 | class NetworkSDR : public SdrDataSource { 28 | Q_OBJECT 29 | public: 30 | explicit NetworkSDR(const QString &settingsFile, QObject *parent = nullptr); 31 | ~NetworkSDR(); 32 | unsigned int sampleRate() const override; 33 | bool isSlave() const override { return false; } 34 | 35 | public slots: 36 | void stop() override; 37 | void initialize() override; 38 | void setRfFreq(double f) override; 39 | void setRfFreqChannel(double f, int c) override { 40 | Q_UNUSED(f) 41 | Q_UNUSED(c) 42 | } 43 | 44 | private slots: 45 | void readDatagram(); 46 | void tcpError(QAbstractSocket::SocketError err); 47 | void readTcp(); 48 | 49 | protected: 50 | void send_rx_command(int); 51 | void get_name(); 52 | void stopNetwork(); 53 | 54 | QTcpSocket tsocket; 55 | QUdpSocket usocket; 56 | unsigned char *buff; 57 | unsigned int bpmax; 58 | unsigned int bptr; 59 | unsigned int iptr; 60 | 61 | private: 62 | void set_sample_rate(unsigned long sample_rate); 63 | }; 64 | 65 | #endif 66 | -------------------------------------------------------------------------------- /so2sdr-bandmap/networksetup.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef NETWORKSETUP_H 20 | #define NETWORKSETUP_H 21 | 22 | #include "bandoffsetsetup.h" 23 | #include "defines.h" 24 | #include "ui_networksetup.h" 25 | #include 26 | #include 27 | 28 | class NetworkSetup : public QDialog, public Ui::networkSetup { 29 | Q_OBJECT 30 | public: 31 | explicit NetworkSetup(QSettings &s, QWidget *parent = nullptr); 32 | ~NetworkSetup(); 33 | double offset(int band) const; 34 | bool invert(int band) const; 35 | 36 | signals: 37 | void networkError(const QString &); 38 | 39 | private slots: 40 | void updateNetwork(); 41 | void rejectChanges(); 42 | 43 | private: 44 | QSettings &settings; 45 | void updateFromSettings(); 46 | BandOffsetSetup *offsetSetup; 47 | }; 48 | 49 | #endif // NETWORKSETUP_H 50 | -------------------------------------------------------------------------------- /so2sdr-bandmap/rtl.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | 20 | #ifndef RTL_H 21 | #define RTL_H 22 | #include "sdrdatasource.h" 23 | #include 24 | 25 | class RtlSDR : public SdrDataSource { 26 | Q_OBJECT 27 | 28 | public: 29 | explicit RtlSDR(const QString &settingsFile, QObject *parent = nullptr); 30 | ~RtlSDR(); 31 | unsigned int sampleRate() const override; 32 | bool isSlave() const override { return false; } 33 | 34 | public slots: 35 | void stop() override; 36 | void initialize() override; 37 | void setRfFreq(double f) override; 38 | void setRfFreqChannel(double f, int c) override { 39 | Q_UNUSED(f) 40 | Q_UNUSED(c) 41 | } 42 | 43 | private: 44 | void stopRtl(); 45 | void stream(); 46 | void streamx16(); 47 | 48 | rtlsdr_dev_t *dev; 49 | unsigned char *buff; 50 | unsigned char *rawBuff; 51 | unsigned char *ptr; 52 | unsigned int bpmax; 53 | unsigned int bptr; 54 | unsigned int iptr; 55 | }; 56 | 57 | #endif 58 | -------------------------------------------------------------------------------- /so2sdr-bandmap/rtlsetup.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef RTLSETUP_H 20 | #define RTLSETUP_H 21 | 22 | #include "bandoffsetsetup.h" 23 | #include "defines.h" 24 | #include "ui_rtlsetup.h" 25 | #include 26 | #include 27 | 28 | class RtlSetup : public QDialog, public Ui::rtlSetup { 29 | Q_OBJECT 30 | public: 31 | explicit RtlSetup(QSettings &s, QWidget *parent = nullptr); 32 | ~RtlSetup(); 33 | double offset(int band) const; 34 | bool invert(int band) const; 35 | 36 | signals: 37 | void rtlError(const QString &); 38 | 39 | private slots: 40 | void updateRtl(); 41 | void rejectChanges(); 42 | 43 | private: 44 | QSettings &settings; 45 | void updateFromSettings(); 46 | BandOffsetSetup *offsetSetup; 47 | }; 48 | 49 | #endif // RTLSETUP_H 50 | -------------------------------------------------------------------------------- /so2sdr-bandmap/sdr-ip.h: -------------------------------------------------------------------------------- 1 | #ifndef SDRIP_H 2 | #define SDRIP_H 3 | 4 | // SDR-IP and Afedri TCP command definitions 5 | // 6 | // copied from "sdr-split" source v.6, http://www.afedri-sdr.com 7 | // not completely sure if some are Afedri-specific 8 | 9 | #define SET_CONTROL_ITEM 0 10 | #define REQUEST_CONTROL_ITEM 1 11 | #define REQUEST_CONTROL_ITEM_RANGE 2 12 | #define DATA_ITEM_ACK 3 13 | #define DATA_ITEM_0 4 14 | #define DATA_ITEM_1 5 15 | #define DATA_ITEM_2 6 16 | #define DATA_ITEM_3 7 17 | #define CI_TARGET_NAME 0x0001 18 | #define CI_TARGET_SERIAL_NUMBER 0x0002 19 | #define CI_INTERFACE_VERSION 0x0003 20 | #define CI_HW_FW_VERSION 0x0004 21 | #define CI_STATUS_ERROR_CODE 0x0005 22 | #define CI_PRODUCT_ID 0x0009 23 | #define CI_RECEIVER_STATE 0x0018 24 | #define RCV_START 2 25 | #define RCV_STOP 1 26 | #define CI_FREQUENCY 0x0020 27 | #define CI_RF_GAIN 0x0038 28 | #define CI_AF_GAIN 0x0048 29 | #define CI_RF_FILTER_SELECT 0x0044 30 | #define CI_AD_MODES 0x008A 31 | #define CI_INPUT_SYNC_MODES 0x00B4 32 | #define CI_DDC_SAMPLE_RATE 0x00B8 33 | #define CI_SAMPLE_RATE_CALIBRATION 0x00B0 34 | #define CI_CALIBRATION_DATA 0x00D0 35 | #define CI_PULSE_OUTPUT_MODE 0x00B6 36 | #define CI_DA_OUTPUT_MODE 0x012A 37 | #define CI_DATA_PACKET_SIZE 0x00C4 38 | #define CI_UDP_IP_PORT 0x00C5 39 | #define CI_RS232_OPEN 0x0200 40 | #define CI_RS232_CLOSE 0x0201 41 | 42 | #define CI_RF_ATT_0DB 0x00 43 | #define CI_RF_ATT_10DB 0xF6 44 | #define CI_RF_ATT_20DB 0xEC 45 | #define CI_RF_ATT_30DB 0xE2 46 | 47 | #define SDR_IDLE 0x0B 48 | #define SDR_BUSY 0x0B 49 | 50 | #endif // SDRIP_H 51 | -------------------------------------------------------------------------------- /so2sdr-bandmap/sdrdatasource.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | 20 | #include "sdrdatasource.h" 21 | 22 | SdrDataSource::SdrDataSource(const QString &settingsFile, QObject *parent) 23 | : QObject(parent), stopFlag(false), running(false), rfFreq(0.0) { 24 | sizes.advance_size = 0; 25 | sizes.chunk_size = 0; 26 | settings = new QSettings(settingsFile, QSettings::IniFormat, this); 27 | } 28 | 29 | SdrDataSource::~SdrDataSource() { delete settings; } 30 | 31 | void SdrDataSource::setSampleSizes(sampleSizes s) { sizes = s; } 32 | -------------------------------------------------------------------------------- /so2sdr-bandmap/sdrdatasource.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SDRDATASOURCE_H 20 | #define SDRDATASOURCE_H 21 | 22 | #include "defines.h" 23 | #include 24 | #include 25 | #include 26 | 27 | class SdrDataSource : public QObject { 28 | Q_OBJECT 29 | public: 30 | explicit SdrDataSource(const QString &settingsFile, QObject *parent = nullptr); 31 | ~SdrDataSource(); 32 | virtual unsigned int sampleRate() const = 0; 33 | void setSampleSizes(sampleSizes s); 34 | bool isRunning() { return running; } 35 | virtual bool isSlave() const = 0; 36 | 37 | signals: 38 | void error(const QString &); 39 | void ready(unsigned char *, unsigned int); 40 | void resetRfFlag(); 41 | void stopped(); 42 | void realSampleRateSignal(unsigned int); 43 | void clockFreqSignal(unsigned int); 44 | 45 | public slots: 46 | virtual void stop() = 0; 47 | virtual void initialize() = 0; 48 | virtual void setRfFreq(double f) = 0; 49 | virtual void setRfFreqChannel(double f, int c) = 0; 50 | 51 | protected: 52 | sampleSizes sizes; 53 | QSettings *settings; 54 | std::atomic stopFlag; 55 | std::atomic running; 56 | std::atomic rfFreq; 57 | }; 58 | 59 | #endif // SDRDATASOURCE_H 60 | -------------------------------------------------------------------------------- /so2sdr-bandmap/sdrdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SDRDIALOG_H 20 | #define SDRDIALOG_H 21 | 22 | #include "afedrisetup.h" 23 | #include "defines.h" 24 | #include "networksetup.h" 25 | #include "rtlsetup.h" 26 | #include "soundcardsetup.h" 27 | #include "ui_sdrdialog.h" 28 | #include 29 | #include 30 | #include 31 | #include 32 | 33 | class SDRDialog : public QDialog, public Ui::SDRDialog { 34 | Q_OBJECT 35 | 36 | public: 37 | SDRDialog(QSettings &s, QWidget *parent = nullptr); 38 | ~SDRDialog(); 39 | double offset(int band) const; 40 | bool invert(int band) const; 41 | int invertSign(int band) const; 42 | SoundCardSetup *soundcard; 43 | AfedriSetup *afedri; 44 | NetworkSetup *network; 45 | RtlSetup *rtl; 46 | 47 | signals: 48 | void setupErrors(const QString &); 49 | void update(); 50 | void restartSdr(); 51 | 52 | public slots: 53 | void updateSDR(); 54 | void rejectChanges(); 55 | 56 | private slots: 57 | void launchConfigure(); 58 | void setRfAuto(int); 59 | 60 | private: 61 | QSettings &settings; 62 | void updateFromSettings(); 63 | }; 64 | #endif 65 | -------------------------------------------------------------------------------- /so2sdr-bandmap/signal.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "signal.h" 20 | 21 | Signal::Signal() { 22 | active = false; 23 | cnt = 0; 24 | n = 0; 25 | f = 0; 26 | fcq = 0; 27 | space = 0; 28 | fsum = 0; 29 | } 30 | 31 | void Signal::clear() { 32 | active = false; 33 | cnt = 0; 34 | f = 0; 35 | fcq = 0; 36 | fsum = 0; 37 | n = 0; 38 | space = 0; 39 | } 40 | 41 | CalibSignal::CalibSignal() { 42 | n = 0; 43 | zsum[0] = 0.; 44 | zsum[1] = 0.; 45 | z[0] = 0.; 46 | z[1] = 0.; 47 | gain = 1.0; 48 | phase = 0.; 49 | } 50 | -------------------------------------------------------------------------------- /so2sdr-bandmap/signal.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SIGNAL_H 20 | #define SIGNAL_H 21 | 22 | #include 23 | 24 | class Signal { 25 | public: 26 | Signal(); 27 | 28 | void clear(); 29 | bool active; 30 | int cnt; 31 | double f; 32 | double fcq; 33 | int n; 34 | int space; 35 | double fsum; 36 | }; 37 | Q_DECLARE_TYPEINFO(Signal, Q_MOVABLE_TYPE); 38 | 39 | class CalibSignal { 40 | public: 41 | CalibSignal(); 42 | 43 | double gain, phase; 44 | double z[2]; 45 | double zsum[2]; 46 | long long n; 47 | }; 48 | Q_DECLARE_TYPEINFO(CalibSignal, Q_MOVABLE_TYPE); 49 | 50 | #endif // SIGNAL_H 51 | -------------------------------------------------------------------------------- /so2sdr-bandmap/so2sdr-bandmap.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | player_play.svg 4 | player_stop.svg 5 | exit.svg 6 | stock_properties.svg 7 | 8 | 9 | -------------------------------------------------------------------------------- /so2sdr-bandmap/so2sdr.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "icon48x48.ico" 2 | -------------------------------------------------------------------------------- /so2sdr-bandmap/soundcardsetup.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SOUNDCARDSETUP_H 20 | #define SOUNDCARDSETUP_H 21 | 22 | #include "bandoffsetsetup.h" 23 | #include "defines.h" 24 | #include "ui_soundcard.h" 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | class SoundCardSetup : public QDialog, public Ui::SoundCardSetup { 33 | Q_OBJECT 34 | public: 35 | explicit SoundCardSetup(QSettings &s, QWidget *parent = nullptr); 36 | ~SoundCardSetup(); 37 | double offset(int band) const; 38 | bool invert(int band) const; 39 | 40 | signals: 41 | void PortAudioError(const QString &); 42 | 43 | private slots: 44 | void updateSoundCard(); 45 | void rejectChanges(); 46 | void updateDeviceList(int indx); 47 | 48 | private: 49 | QSettings &settings; 50 | int nAPI; 51 | int *nApiDevices; 52 | QIcon iconNOK; 53 | QIcon iconOK; 54 | QList *deviceOK; 55 | QList audioDevices; 56 | QList *nApiDeviceNames; 57 | BandOffsetSetup *offsetSetup; 58 | void updateFromSettings(); 59 | }; 60 | 61 | #endif // SOUNDCARDSETUP_H 62 | -------------------------------------------------------------------------------- /so2sdr-bandmap/utils.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "utils.h" 20 | #include 21 | #include 22 | #include 23 | 24 | /*! returns directory where program data is stored 25 | */ 26 | QString dataDirectory() { 27 | // INSTALL_DIR is usually /usr/local 28 | return QString(INSTALL_DIR) + QString("/share/so2sdr/"); 29 | } 30 | 31 | /*! returns directory where user data (station config, hamlib cache,...) are 32 | * stored 33 | */ 34 | QString userDirectory() { return QDir::homePath() + "/.so2sdr"; } 35 | -------------------------------------------------------------------------------- /so2sdr-bandmap/utils.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef UTILS_H 20 | #define UTILS_H 21 | #include 22 | 23 | QString dataDirectory(); 24 | QString userDirectory(); 25 | 26 | #endif // UTILS_H 27 | -------------------------------------------------------------------------------- /so2sdr.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=SO2SDR 3 | Comment=Amateur radio contest logging application 4 | Type=Application 5 | Exec=so2sdr 6 | Categories=Audio;Network;HamRadio; 7 | Terminal=false 8 | Icon=so2sdr 9 | -------------------------------------------------------------------------------- /so2sdr.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | SUBDIRS = so2sdr so2sdr-bandmap 3 | -------------------------------------------------------------------------------- /so2sdr/adifparse.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef ADIFPARSE_H 20 | #define ADIFPARSE_H 21 | 22 | #include "qso.h" 23 | #include 24 | #include 25 | 26 | class ADIFParse : public QObject { 27 | Q_OBJECT 28 | public: 29 | explicit ADIFParse(QObject *parent = nullptr); 30 | bool parse(QByteArray data, Qso *qso); 31 | 32 | signals: 33 | 34 | public slots: 35 | 36 | private: 37 | void parseBit(QByteArray in, QByteArray &key, QByteArray &val); 38 | }; 39 | 40 | #endif // ADIFPARSE_H 41 | -------------------------------------------------------------------------------- /so2sdr/bandmapentry.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "bandmapentry.h" 20 | 21 | BandmapEntry::BandmapEntry() { 22 | call.clear(); 23 | f = 0; 24 | createdTime = 0; 25 | dupe = false; 26 | } 27 | -------------------------------------------------------------------------------- /so2sdr/bandmapentry.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef BANDMAPENTRY_H 20 | #define BANDMAPENTRY_H 21 | #include 22 | 23 | /*! Bandmap entry. 24 | 25 | - freq=frequency in Hz 26 | - y=y pixel position 27 | */ 28 | class BandmapEntry { 29 | public: 30 | BandmapEntry(); 31 | 32 | bool dupe; 33 | double f; 34 | qint64 createdTime; 35 | QByteArray call; 36 | }; 37 | 38 | Q_DECLARE_TYPEINFO(BandmapEntry, Q_MOVABLE_TYPE); 39 | 40 | #endif // BANDMAPENTRY_H 41 | -------------------------------------------------------------------------------- /so2sdr/cabrillodialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CABRILLODIALOG_H 20 | #define CABRILLODIALOG_H 21 | #include "defines.h" 22 | #include "ui_cabrillo.h" 23 | #include 24 | 25 | class QComboBox; 26 | class QFile; 27 | class QLabel; 28 | class QLineEdit; 29 | class So2sdr; 30 | 31 | /*! 32 | Dialog for entering cabrillo data 33 | */ 34 | class CabrilloDialog : public QDialog, public Ui::CabrilloDialog { 35 | Q_OBJECT 36 | 37 | public: 38 | explicit CabrilloDialog(QWidget *parent = nullptr); 39 | void initialize(QSettings *s1, QSettings *s2); 40 | void updateExch(); 41 | void writeHeader(QFile *cbrFile, int score); 42 | friend class So2sdr; 43 | 44 | private: 45 | QLineEdit *sent[MAX_EXCH_FIELDS]; 46 | QLabel *cabLabel[MAX_CAB_FIELDS]; 47 | QComboBox *cabCombo[MAX_CAB_FIELDS]; 48 | QSettings *stnSettings; 49 | QSettings *settings; 50 | }; 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /so2sdr/centergrid.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CenterGridForm 4 | 5 | 6 | Qt::ApplicationModal 7 | 8 | 9 | 10 | 0 11 | 0 12 | 200 13 | 74 14 | 15 | 16 | 17 | 18 | 0 19 | 0 20 | 21 | 22 | 23 | 24 | 100 25 | 30 26 | 27 | 28 | 29 | 30 | 200 31 | 74 32 | 33 | 34 | 35 | Center Grid 36 | 37 | 38 | 39 | 40 | 41 | 42 | 0 43 | 0 44 | 45 | 46 | 47 | 48 | 100 49 | 0 50 | 51 | 52 | 53 | Set center grid: 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 0 62 | 0 63 | 64 | 65 | 66 | 67 | 100 68 | 0 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /so2sdr/centergriddialog.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "centergriddialog.h" 20 | #include 21 | #include 22 | 23 | CenterGridDialog::CenterGridDialog(QWidget *parent) : QDialog(parent) { 24 | setupUi(this); 25 | connect(lineEdit, SIGNAL(editingFinished()), this, SLOT(emitgrid())); 26 | 27 | QFont font12("sans", 12); 28 | QFontMetricsF fm12(font12); 29 | label->setFixedHeight(qRound(fm12.height())); 30 | lineEdit->setFixedWidth(qRound(fm12.maxWidth() * 50)); 31 | lineEdit->setFixedHeight(qRound(fm12.height())); 32 | adjustSize(); 33 | setFixedSize(size()); 34 | show(); 35 | } 36 | 37 | void CenterGridDialog::setText(QByteArray s) { lineEdit->setText(s); } 38 | 39 | void CenterGridDialog::emitgrid() { 40 | QByteArray text = lineEdit->text().toLatin1(); 41 | emit grid(text); 42 | close(); 43 | } 44 | -------------------------------------------------------------------------------- /so2sdr/centergriddialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CENTERGRIDDIALOG_H 20 | #define CENTERGRIDDIALOG_H 21 | 22 | #include "ui_centergrid.h" 23 | #include 24 | #include 25 | #include 26 | 27 | class CenterGridDialog : public QDialog, public Ui::CenterGridForm { 28 | Q_OBJECT 29 | public: 30 | explicit CenterGridDialog(QWidget *parent = nullptr); 31 | void setText(QByteArray s); 32 | signals: 33 | void grid(QByteArray); 34 | 35 | private slots: 36 | void emitgrid(); 37 | }; 38 | 39 | #endif // CENTERGRIDDIALOG_H 40 | -------------------------------------------------------------------------------- /so2sdr/contest_arrl10.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_ARRL10_H 20 | #define CONTEST_ARRL10_H 21 | 22 | #include "contest.h" 23 | #include "cty.h" 24 | 25 | class ARRL10 : public Contest { 26 | public: 27 | ARRL10(QSettings &cs, QSettings &ss); 28 | ~ARRL10() override; 29 | 30 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 31 | bool validateExchange(Qso *qso) override; 32 | ContestType contestType() const override { return Arrl10_t; } 33 | void addQso(Qso *qso) override; 34 | QString bandLabel(int i) const override; 35 | bool bandLabelEnable(int i) const override; 36 | int fieldWidth(int col) const override; 37 | bool hasWorked() const override { return true; } 38 | int highlightBand(int b, ModeTypes modeType = CWType) const override; 39 | int nMultsColumn(int col, int ii) const override; 40 | int numberField() const override; 41 | unsigned int rcvFieldShown() const override; 42 | unsigned int sntFieldShown() const override; 43 | int Score() const override; 44 | bool showQsoPtsField() const override { return true; } 45 | int rstField() const override { return 0; } 46 | void workedMults(Qso *qso, unsigned int worked[MMAX]) const override; 47 | void workedQso(ModeTypes m, int band, unsigned int &worked) const override; 48 | }; 49 | 50 | #endif 51 | -------------------------------------------------------------------------------- /so2sdr/contest_arrl160.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_ARRL160_H 20 | #define CONTEST_ARRL160_H 21 | 22 | #include "contest.h" 23 | #include "cty.h" 24 | 25 | class ARRL160 : public Contest { 26 | public: 27 | ARRL160(bool, QSettings &cs, QSettings &ss); 28 | ~ARRL160() override; 29 | 30 | QString bandLabel(int i) const override; 31 | bool bandLabelEnable(int i) const override; 32 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 33 | bool validateExchange(Qso *qso) override; 34 | ContestType contestType() const override { return Arrl160_t; } 35 | void addQso(Qso *qso) override; 36 | int fieldWidth(int col) const override; 37 | int numberField() const override; 38 | QByteArray prefillExchange(Qso *qso) override; 39 | unsigned int rcvFieldShown() const override; 40 | unsigned int sntFieldShown() const override; 41 | int Score() const override; 42 | bool showQsoPtsField() const override { return true; } 43 | int rstField() const override { return 0; } 44 | 45 | private: 46 | bool usVe; 47 | }; 48 | 49 | #endif 50 | -------------------------------------------------------------------------------- /so2sdr/contest_arrldx.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_ARRLDX_H 20 | #define CONTEST_ARRLDX_H 21 | 22 | #include "contest.h" 23 | #include "cty.h" 24 | 25 | class ARRLDX : public Contest { 26 | public: 27 | ARRLDX(bool usve, QSettings &cs, QSettings &ss); 28 | ~ARRLDX() override; 29 | 30 | QVariant columnName(int c) const override; 31 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 32 | bool validateExchange(Qso *qso) override; 33 | ContestType contestType() const override { return Arrldx_t; } 34 | void addQso(Qso *qso) override; 35 | int fieldWidth(int col) const override; 36 | int numberField() const override; 37 | QByteArray prefillExchange(Qso *qso) override; 38 | unsigned int rcvFieldShown() const override; 39 | unsigned int sntFieldShown() const override; 40 | bool showQsoPtsField() const override { return true; } 41 | int rstField() const override { return 0; } 42 | 43 | private: 44 | bool usVe; 45 | }; 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /so2sdr/contest_cq160.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_CQ160_H 20 | #define CONTEST_CQ160_H 21 | 22 | #include "contest.h" 23 | 24 | class CQ160 : public Contest { 25 | public: 26 | CQ160(QSettings &cs, QSettings &ss); 27 | ~CQ160() override; 28 | QString bandLabel(int i) const override; 29 | bool bandLabelEnable(int i) const override; 30 | void addQso(Qso *qso) override; 31 | ContestType contestType() const override { return Cq160_t; } 32 | QByteArray prefillExchange(Qso *qso) override; 33 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 34 | bool validateExchange(Qso *qso) override; 35 | int fieldWidth(int col) const override; 36 | unsigned int rcvFieldShown() const override; 37 | int Score() const override; 38 | unsigned int sntFieldShown() const override; 39 | int numberField() const override; 40 | bool showQsoPtsField() const override { return true; } 41 | int rstField() const override { return 0; } 42 | }; 43 | 44 | #endif // CONTEST_CQ160_H 45 | -------------------------------------------------------------------------------- /so2sdr/contest_cqp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_CQP_H 20 | #define CONTEST_CQP_H 21 | 22 | #include "contest.h" 23 | 24 | class CQP : public Contest { 25 | public: 26 | CQP(QSettings &cs, QSettings &ss); 27 | ~CQP() override; 28 | 29 | QVariant columnName(int c) const override; 30 | ContestType contestType() const override { return Cqp_t; } 31 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 32 | bool validateExchange(Qso *qso) override; 33 | void addQso(Qso *qso) override; 34 | int fieldWidth(int col) const override; 35 | int numberField() const override; 36 | unsigned int rcvFieldShown() const override; 37 | unsigned int sntFieldShown() const override; 38 | void setWithinState(bool); 39 | bool showQsoPtsField() const override { return true; } 40 | 41 | private: 42 | bool withinState; 43 | }; 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /so2sdr/contest_cqww.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_CQWW_H 20 | #define CONTEST_CQWW_H 21 | 22 | #include "contest.h" 23 | 24 | class CQWW : public Contest { 25 | public: 26 | CQWW(QSettings &cs, QSettings &ss); 27 | ~CQWW() override; 28 | 29 | void addQso(Qso *qso) override; 30 | ContestType contestType() const override { return Cqww_t; } 31 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 32 | bool validateExchange(Qso *qso) override; 33 | int fieldWidth(int col) const override; 34 | unsigned int rcvFieldShown() const override; 35 | unsigned int sntFieldShown() const override; 36 | int numberField() const override; 37 | bool showQsoPtsField() const override { return true; } 38 | int rstField() const override { return 0; } 39 | }; 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /so2sdr/contest_cwops.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_CWOPS_H 20 | #define CONTEST_CWOPS_H 21 | 22 | #include "contest.h" 23 | 24 | class Cwops : public Contest { 25 | public: 26 | Cwops(QSettings &cs, QSettings &ss); 27 | ~Cwops() override; 28 | 29 | void addQso(Qso *qso) override; 30 | ContestType contestType() const override { return Cwops_t; } 31 | int fieldWidth(int col) const override; 32 | int numberField() const override; 33 | void setupContest(QByteArray MultFile[2], const Cty *cty) override; 34 | unsigned int rcvFieldShown() const override; 35 | bool validateExchange(Qso *qso) override; 36 | bool showQsoPtsField() const override { return false; } 37 | }; 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /so2sdr/contest_dxped.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_DXPED_H 20 | #define CONTEST_DXPED_H 21 | 22 | #include "contest.h" 23 | #include "cty.h" 24 | 25 | class Dxped : public Contest { 26 | public: 27 | Dxped(QSettings &cs, QSettings &ss); 28 | ~Dxped() override; 29 | 30 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 31 | bool validateExchange(Qso *qso) override; 32 | ContestType contestType() const override { return Dxped_t; } 33 | void addQso(Qso *qso) override; 34 | int fieldWidth(int col) const override; 35 | int numberField() const override; 36 | unsigned int rcvFieldShown() const override; 37 | int Score() const override; 38 | QByteArray prefillExchange(Qso *qso) override; 39 | bool showQsoPtsField() const override { return false; } 40 | int rstField() const override { return 0; } 41 | }; 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /so2sdr/contest_fd.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_FD_H 20 | #define CONTEST_FD_H 21 | 22 | #include "contest.h" 23 | #include "cty.h" 24 | 25 | class FD : public Contest { 26 | public: 27 | FD(QSettings &cs, QSettings &ss); 28 | ~FD() override; 29 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 30 | bool validateExchange(Qso *qso) override; 31 | QVariant columnName(int c) const override; 32 | ContestType contestType() const override { return Fd_t; } 33 | void addQso(Qso *qso) override; 34 | int fieldWidth(int col) const override; 35 | int numberField() const override; 36 | unsigned int rcvFieldShown() const override; 37 | int Score() const override; 38 | bool showQsoPtsField() const override { return true; } 39 | }; 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /so2sdr/contest_iaru.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_IARU_H 20 | #define CONTEST_IARU_H 21 | 22 | #include "contest.h" 23 | 24 | class IARU : public Contest { 25 | public: 26 | IARU(QSettings &cs, QSettings &ss); 27 | ~IARU() override; 28 | 29 | void addQso(Qso *qso) override; 30 | ContestType contestType() const override { return Iaru_t; } 31 | int fieldWidth(int col) const override; 32 | int nMultsWorked() const override; 33 | int numberField() const override; 34 | unsigned int rcvFieldShown() const override; 35 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 36 | bool validateExchange(Qso *qso) override; 37 | bool showQsoPtsField() const override { return true; } 38 | int rstField() const override { return 0; } 39 | }; 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /so2sdr/contest_junevhf.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_JUNEVHF_H 20 | #define CONTEST_JUNEVHF_H 21 | 22 | #include "contest.h" 23 | #include "defines.h" 24 | 25 | class JuneVHF : public Contest { 26 | public: 27 | JuneVHF(QSettings &cs, QSettings &ss); 28 | ~JuneVHF() override; 29 | 30 | QString bandLabel(int i) const override; 31 | bool bandLabelEnable(int i) const override; 32 | int highlightBand(int b, ModeTypes modeType = CWType) const override; 33 | int nMultsColumn(int col, int ii) const override; 34 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 35 | bool validateExchange(Qso *qso) override; 36 | QVariant columnName(int c) const override; 37 | ContestType contestType() const override { return JuneVHF_t; } 38 | void addQso(Qso *qso) override; 39 | int fieldWidth(int col) const override; 40 | int numberField() const override { return -1; } 41 | unsigned int rcvFieldShown() const override { return 1; } 42 | bool showQsoPtsField() const override { return true; } 43 | }; 44 | 45 | #endif // CONTEST_JUNEVHF_H 46 | -------------------------------------------------------------------------------- /so2sdr/contest_kqp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_KQP_H 20 | #define CONTEST_KQP_H 21 | 22 | #include "contest.h" 23 | 24 | class KQP : public Contest { 25 | public: 26 | KQP(QSettings &cs, QSettings &ss); 27 | ~KQP() override; 28 | 29 | ContestType contestType() const override { return Kqp_t; } 30 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 31 | bool validateExchange(Qso *qso) override; 32 | void addQso(Qso *qso) override; 33 | int fieldWidth(int col) const override; 34 | int numberField() const override; 35 | unsigned int rcvFieldShown() const override; 36 | bool showQsoPtsField() const override { return true; } 37 | void setWithinState(bool); 38 | 39 | private: 40 | bool withinState; 41 | }; 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /so2sdr/contest_msqp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_MSQP_H 20 | #define CONTEST_MSQP_H 21 | 22 | #include "contest.h" 23 | 24 | // Mississippi QSO party; updated for 2019 rules 25 | 26 | class MSQP : public Contest { 27 | public: 28 | MSQP(QSettings &cs, QSettings &ss); 29 | ~MSQP() override; 30 | 31 | ContestType contestType() const override { return Msqp_t; } 32 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 33 | bool validateExchange(Qso *qso) override; 34 | void addQso(Qso *qso) override; 35 | int fieldWidth(int col) const override; 36 | int numberField() const override; 37 | unsigned int rcvFieldShown() const override; 38 | bool showQsoPtsField() const override { return true; } 39 | void setWithinState(bool); 40 | 41 | private: 42 | bool withinState; 43 | }; 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /so2sdr/contest_naqp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_NAQP_H 20 | #define CONTEST_NAQP_H 21 | 22 | #include "contest.h" 23 | #include "cty.h" 24 | 25 | class Naqp : public Contest { 26 | public: 27 | Naqp(QSettings &cs, QSettings &ss); 28 | ~Naqp() override; 29 | 30 | ContestType contestType() const override { return Naqp_t; } 31 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 32 | bool validateExchange(Qso *qso) override; 33 | void addQso(Qso *qso) override; 34 | int fieldWidth(int col) const override; 35 | int numberField() const override; 36 | unsigned int rcvFieldShown() const override; 37 | bool showQsoPtsField() const override { return false; } 38 | }; 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /so2sdr/contest_paqp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_PAQP_H 20 | #define CONTEST_PAQP_H 21 | 22 | #include "contest.h" 23 | #include 24 | #include 25 | 26 | class PAQP : public Contest { 27 | public: 28 | PAQP(QSettings &cs, QSettings &ss); 29 | ~PAQP() override; 30 | 31 | QVariant columnName(int c) const override; 32 | ContestType contestType() const override { return Paqp_t; } 33 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 34 | bool validateExchange(Qso *qso) override; 35 | void addQso(Qso *qso) override; 36 | int fieldWidth(int col) const override; 37 | int numberField() const override; 38 | unsigned int rcvFieldShown() const override; 39 | unsigned int sntFieldShown() const override; 40 | void setWithinState(bool); 41 | bool showQsoPtsField() const override { return true; } 42 | 43 | private: 44 | bool withinState; 45 | static QList EPA_counties; 46 | }; 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /so2sdr/contest_sprint.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_SPRINT_H 20 | #define CONTEST_SPRINT_H 21 | 22 | #include "contest.h" 23 | 24 | class Sprint : public Contest { 25 | public: 26 | Sprint(QSettings &cs, QSettings &ss); 27 | ~Sprint() override; 28 | 29 | ContestType contestType() const override { return Sprint_t; } 30 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 31 | bool validateExchange(Qso *qso) override; 32 | void addQso(Qso *qso) override; 33 | int fieldWidth(int col) const override; 34 | int numberField() const override; 35 | unsigned int rcvFieldShown() const override; 36 | bool showQsoPtsField() const override { return false; } 37 | unsigned int sntFieldShown() const override; 38 | QVariant columnName(int c) const override; 39 | }; 40 | 41 | #endif // CONTEST_SPRINT_H 42 | -------------------------------------------------------------------------------- /so2sdr/contest_stew.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_STEW_H 20 | #define CONTEST_STEW_H 21 | 22 | #include "contest.h" 23 | 24 | class Stew : public Contest { 25 | public: 26 | Stew(QSettings &cs, QSettings &ss); 27 | ~Stew() override; 28 | 29 | void addQso(Qso *qso) override; 30 | ContestType contestType() const override { return Stew_t; } 31 | QByteArray prefillExchange(Qso *qso) override; 32 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 33 | bool validateExchange(Qso *qso) override; 34 | int fieldWidth(int col) const override; 35 | unsigned int rcvFieldShown() const override; 36 | int Score() const override; 37 | bool showQsoPtsField() const override { return true; } 38 | int numberField() const override; 39 | }; 40 | 41 | #endif // CONTEST_STEW_H 42 | -------------------------------------------------------------------------------- /so2sdr/contest_sweepstakes.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_SWEEPSTAKES_H 20 | #define CONTEST_SWEEPSTAKES_H 21 | 22 | #include "contest.h" 23 | 24 | class Sweepstakes : public Contest { 25 | public: 26 | Sweepstakes(QSettings &cs, QSettings &ss); 27 | ~Sweepstakes() override; 28 | 29 | QVariant columnName(int c) const override; 30 | ContestType contestType() const override { return Sweepstakes_t; } 31 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 32 | bool validateExchange(Qso *qso) override; 33 | void addQso(Qso *qso) override; 34 | int fieldWidth(int col) const override; 35 | int numberField() const override; 36 | unsigned int rcvFieldShown() const override; 37 | bool showQsoPtsField() const override { return false; } 38 | unsigned int sntFieldShown() const override; 39 | }; 40 | 41 | #endif // CONTEST_SWEEPSTAKES_H 42 | -------------------------------------------------------------------------------- /so2sdr/contest_wpx.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_WPX_H 20 | #define CONTEST_WPX_H 21 | 22 | #include "contest.h" 23 | 24 | class WPX : public Contest { 25 | public: 26 | WPX(QSettings &cs, QSettings &ss); 27 | ~WPX() override; 28 | 29 | QVariant columnName(int c) const override; 30 | ContestType contestType() const override { return Wpx_t; } 31 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 32 | bool validateExchange(Qso *qso) override; 33 | void addQso(Qso *qso) override; 34 | int fieldWidth(int col) const override; 35 | unsigned int rcvFieldShown() const override; 36 | unsigned int sntFieldShown() const override; 37 | int numberField() const override; 38 | bool showQsoPtsField() const override { return true; } 39 | int rstField() const override { return 0; } 40 | void workedMults(QByteArray Call, int mult, unsigned int &worked); 41 | void wpxPrefix(QByteArray call, QByteArray &pfx); 42 | }; 43 | 44 | #endif // CONTEST_WPX 45 | -------------------------------------------------------------------------------- /so2sdr/contest_wwdigi.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTEST_WWDIGI_H 20 | #define CONTEST_WWDIGI_H 21 | 22 | #include "contest.h" 23 | #include "defines.h" 24 | 25 | class WWDigi : public Contest { 26 | public: 27 | WWDigi(QSettings &cs, QSettings &ss); 28 | ~WWDigi() override; 29 | 30 | void setupContest(QByteArray MultFile[MMAX], const Cty *cty) override; 31 | bool validateExchange(Qso *qso) override; 32 | QVariant columnName(int c) const override; 33 | ContestType contestType() const override { return WWDigi_t; } 34 | void addQso(Qso *qso) override; 35 | int fieldWidth(int col) const override; 36 | int numberField() const override { return -1; } 37 | unsigned int rcvFieldShown() const override { return 1; } 38 | bool showQsoPtsField() const override { return true; } 39 | }; 40 | 41 | #endif // CONTEST_WWDIGI_H 42 | -------------------------------------------------------------------------------- /so2sdr/contestoptdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CONTESTOPTDIALOG_H 20 | #define CONTESTOPTDIALOG_H 21 | 22 | #include "defines.h" 23 | #include "ui_contestoptdialog.h" 24 | #include 25 | #include 26 | 27 | /*! 28 | Dialog for setting misc program options 29 | */ 30 | class ContestOptionsDialog : public QDialog, public Ui::ContestOptDialog { 31 | Q_OBJECT 32 | 33 | public: 34 | friend class So2sdr; 35 | explicit ContestOptionsDialog(QWidget *parent = nullptr); 36 | ~ContestOptionsDialog(); 37 | void initialize(QSettings *s); 38 | 39 | public slots: 40 | void updateOptions(); 41 | void rejectChanges(); 42 | signals: 43 | void rescore(); 44 | void multiModeChanged(); 45 | void updateOffTime(); 46 | 47 | private: 48 | void setOptions(); 49 | QIntValidator *offValidator; 50 | QSettings *settings; 51 | QLineEdit *sent[MAX_EXCH_FIELDS]; 52 | QLabel *sentName[MAX_EXCH_FIELDS]; 53 | }; 54 | 55 | #endif 56 | -------------------------------------------------------------------------------- /so2sdr/cty.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CTY_H 20 | #define CTY_H 21 | /*! reads CTY country database file, provides prefix/country/zone lookups, beam 22 | headings 23 | 24 | */ 25 | #include "defines.h" 26 | #include "qso.h" 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | 33 | class Cty : public QObject { 34 | Q_OBJECT 35 | 36 | public: 37 | explicit Cty(QSettings &s); 38 | ~Cty(); 39 | 40 | int findPfx(const QByteArray &prefix, int &zone, Cont &continent, bool &o) const; 41 | int idPfx(Qso *qso, bool &qsy) const; 42 | void initialize(double la, double lo, int ZoneType); 43 | QString mySunTimes() const; 44 | int nCountries() const; 45 | QByteArray pfxName(int indx) const; 46 | void readCtyFile(QByteArray cty_file); 47 | 48 | signals: 49 | void ctyError(const QString &); 50 | 51 | private: 52 | int nARRLCty; 53 | int nCQCty; 54 | int usaIndx; 55 | QList countryList; 56 | QList CallE; 57 | QList pfxList; 58 | QList portId; 59 | QList portIdMM; 60 | QList portIdMobile; 61 | QList portIdRover; 62 | QSettings &settings; 63 | QString mySun; 64 | QList zoneBearing; 65 | QList zoneSun; 66 | 67 | int checkException(const QByteArray &call, int &zone, QString &sun) const; 68 | int idPfx2(Qso *qso, int sz) const; 69 | bool isDigit(char c) const; 70 | void sunTimes(double lat, double lon, QString &suntime); 71 | }; 72 | #endif // CTY_H 73 | -------------------------------------------------------------------------------- /so2sdr/cwdaemon.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CWDAEMON_H 20 | #define CWDAEMON_H 21 | 22 | #include "defines.h" 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | /*! 29 | cwdaemon support class 30 | */ 31 | class Cwdaemon : public QObject { 32 | Q_OBJECT 33 | 34 | public: 35 | explicit Cwdaemon(QSettings &s, QObject *parent = nullptr); 36 | ~Cwdaemon(); 37 | void loadbuff(QByteArray msg); 38 | bool isSending() const; 39 | void sendcw(); 40 | void switchTransmit(int nrig); 41 | void setSpeed(int speed); 42 | void setUdpPort(int nrig, int p); 43 | bool isOpen(int nrig) const; 44 | 45 | signals: 46 | void cwCanceled(); 47 | void finished(); 48 | void textSent(const QString &t, int); 49 | void version(int ver); 50 | void tx(bool, int); 51 | void error(const QString &); 52 | 53 | public slots: 54 | void cancelcw(); 55 | void open(); 56 | 57 | private slots: 58 | void receive1(); 59 | void receive2(); 60 | 61 | private: 62 | bool sending; 63 | bool open_[NRIG]; 64 | bool sendingCmd; 65 | int rigNum; 66 | int txRig; 67 | int udpPort[NRIG]; 68 | QByteArray sendBuff; 69 | QString sent; 70 | QSettings &settings; 71 | QUdpSocket socket[NRIG]; 72 | void close(); 73 | }; 74 | 75 | #endif // CWDAEMON_H 76 | -------------------------------------------------------------------------------- /so2sdr/cwdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CWDIALOG_H 20 | #define CWDIALOG_H 21 | 22 | #include "cwmanager.h" 23 | #include "ui_cwdialog.h" 24 | #include 25 | 26 | class QString; 27 | 28 | /*! 29 | Dialog for winkey parameters 30 | */ 31 | class CWDialog : public QDialog, public Ui::CwDialog { 32 | Q_OBJECT 33 | 34 | public: 35 | explicit CWDialog(QSettings &s, QWidget *parent = nullptr); 36 | ~CWDialog(); 37 | signals: 38 | void setType(cwtype); 39 | void startCw(); 40 | 41 | public slots: 42 | void setWinkeyVersionLabel(int version); 43 | void rejectChanges(); 44 | void updateCW(); 45 | 46 | private: 47 | QSettings &settings; 48 | }; 49 | 50 | #endif 51 | -------------------------------------------------------------------------------- /so2sdr/cwmanager.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CWMANAGER_H 20 | #define CWMANAGER_H 21 | 22 | #include "cwdaemon.h" 23 | #include "defines.h" 24 | #include "winkey.h" 25 | #include 26 | #include 27 | #include 28 | #include 29 | 30 | class CWManager : public QObject { 31 | Q_OBJECT 32 | public: 33 | explicit CWManager(QSettings &s, QObject *parent = nullptr); 34 | ~CWManager(); 35 | cwtype cwDevice() const { return mode; } 36 | void loadbuff(QByteArray msg); 37 | bool isSending() const; 38 | void sendcw(); 39 | void switchTransmit(int nrig); 40 | void setEchoMode(bool b); 41 | void setSpeed(int speed); 42 | QString textStatus() const; 43 | 44 | signals: 45 | void cwCanceled(); 46 | void finished(); 47 | void textSent(const QString &t, int); 48 | void winkeyVersion(int ver); 49 | void tx(bool, int); 50 | void CWError(const QString &); 51 | void so2rMiniCancelCW(); 52 | void so2rMiniLoadbuff(const QByteArray &); 53 | void so2rMiniSendCW(); 54 | void so2rMiniSpeed(int); 55 | 56 | public slots: 57 | void cancelcw(); 58 | void open(); 59 | void setType(cwtype t); 60 | void so2rMiniSetSending(bool b, int i) { 61 | Q_UNUSED(i) 62 | miniSending = b; 63 | } 64 | 65 | private: 66 | bool miniSending; 67 | cwtype mode; 68 | QSettings &settings; 69 | Winkey *winkey; 70 | Cwdaemon *cwdaemon; 71 | }; 72 | 73 | #endif // CWMANAGER_H 74 | -------------------------------------------------------------------------------- /so2sdr/cwmessagedialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef CWMESSAGEDIALOG_H 20 | #define CWMESSAGEDIALOG_H 21 | 22 | #include "defines.h" 23 | #include "ui_cwmessagedialog.h" 24 | #include "utils.h" 25 | #include 26 | #include 27 | #include 28 | 29 | class QLineEdit; 30 | class So2sdr; 31 | 32 | /*! 33 | Dialog for entering CW messages 34 | */ 35 | class CWMessageDialog : public QDialog, public Ui::CWMessageDialog { 36 | Q_OBJECT 37 | 38 | public: 39 | CWMessageDialog(ModeTypes modetype, QWidget *parent = nullptr); 40 | ~CWMessageDialog(); 41 | void initialize(QSettings *s); 42 | friend class So2sdr; 43 | 44 | public slots: 45 | void updateCWMsg(); 46 | void rejectChanges(); 47 | 48 | private: 49 | int m; 50 | QByteArray cqCtrlF[N_FUNC]; 51 | QByteArray cqF[N_FUNC]; 52 | QByteArray cqShiftF[N_FUNC]; 53 | QByteArray excF[N_FUNC]; 54 | QLineEdit *ctrlFuncEditPtr[N_FUNC]; 55 | QLineEdit *excFuncEditPtr[N_FUNC]; 56 | QLineEdit *funcEditPtr[N_FUNC]; 57 | QLineEdit *shiftFuncEditPtr[N_FUNC]; 58 | UpperValidator *upperValidate; 59 | QSettings *settings; 60 | }; 61 | 62 | #endif 63 | -------------------------------------------------------------------------------- /so2sdr/detailededit.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | 20 | #ifndef DETAILEDEDIT_H 21 | #define DETAILEDEDIT_H 22 | 23 | #include "serial.h" 24 | #include "ui_detailededit.h" 25 | #include 26 | #include 27 | 28 | /*! 29 | Dialog for detailed qso editing 30 | */ 31 | class DetailedEdit : public QDialog, public Ui::DetailedQSOEdit { 32 | Q_OBJECT 33 | 34 | public: 35 | explicit DetailedEdit(QWidget *parent = nullptr); 36 | void loadRecord(const QSqlRecord &r, int nexchange); 37 | private slots: 38 | void updateRecord(); 39 | signals: 40 | void editedRecord(QSqlRecord &); 41 | 42 | private: 43 | QSqlRecord rec; 44 | }; 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /so2sdr/dupesheet.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef DUPESHEET_H 20 | #define DUPESHEET_H 21 | #include "defines.h" 22 | #include "ui_dupesheet.h" 23 | 24 | /*! 25 | Class for visible dupesheet 26 | */ 27 | class DupeSheet : public QDialog, public Ui::Dupesheet { 28 | Q_OBJECT 29 | 30 | public: 31 | explicit DupeSheet(QWidget *parent = nullptr); 32 | ~DupeSheet(); 33 | int band() const; 34 | void setBand(int); 35 | void clear(); 36 | void updateDupesheet(QByteArray call); 37 | 38 | signals: 39 | void closed(bool); 40 | 41 | protected: 42 | void closeEvent(QCloseEvent *event); 43 | void keyPressEvent(QKeyEvent *event); 44 | 45 | private: 46 | QList dupeCallsKey[dsColumns]; 47 | QList dupeCalls[dsColumns]; 48 | int band_; 49 | }; 50 | #endif 51 | -------------------------------------------------------------------------------- /so2sdr/filedownloader.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | This class derived from code at https://wiki.qt.io/Download_Data_from_URL 19 | */ 20 | #include "filedownloader.h" 21 | 22 | FileDownloader::FileDownloader(QUrl imageUrl, QObject *parent) 23 | : QObject(parent) { 24 | connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply *)), this, 25 | SLOT(fileDownloaded(QNetworkReply *))); 26 | QNetworkRequest request(imageUrl); 27 | request.setHeader(QNetworkRequest::UserAgentHeader, QVariant("Wget/1.19")); 28 | m_WebCtrl.get(request); 29 | } 30 | 31 | FileDownloader::~FileDownloader() {} 32 | 33 | void FileDownloader::fileDownloaded(QNetworkReply *pReply) { 34 | m_DownloadedData = pReply->readAll(); 35 | pReply->deleteLater(); 36 | emit downloaded(); 37 | } 38 | 39 | QByteArray FileDownloader::downloadedData() const { return m_DownloadedData; } 40 | -------------------------------------------------------------------------------- /so2sdr/filedownloader.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | This class derived from code at https://wiki.qt.io/Download_Data_from_URL 19 | */ 20 | #ifndef FILEDOWNLOADER_H 21 | #define FILEDOWNLOADER_H 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | class FileDownloader : public QObject { 30 | Q_OBJECT 31 | public: 32 | explicit FileDownloader(QUrl imageUrl, QObject *parent = nullptr); 33 | virtual ~FileDownloader(); 34 | QByteArray downloadedData() const; 35 | 36 | signals: 37 | void downloaded(); 38 | 39 | private slots: 40 | void fileDownloaded(QNetworkReply *pReply); 41 | 42 | private: 43 | QNetworkAccessManager m_WebCtrl; 44 | QByteArray m_DownloadedData; 45 | }; 46 | 47 | #endif // FILEDOWNLOADER_H 48 | -------------------------------------------------------------------------------- /so2sdr/helpdialog.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "helpdialog.h" 20 | #include "utils.h" 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | HelpDialog::HelpDialog(QString fileName, QWidget *parent) 30 | : QDialog(parent) { 31 | setupUi(this); 32 | QCommonStyle style; 33 | connect(pushButton, SIGNAL(clicked()), this, SLOT(accept())); 34 | connect(homeButton, SIGNAL(clicked()), this, SLOT(home())); 35 | homeButton->setIcon(style.standardIcon(QStyle::SP_ArrowUp)); 36 | connect(backButton, SIGNAL(clicked()), HelpTextEdit, SLOT(backward())); 37 | backButton->setIcon(style.standardIcon(QStyle::SP_ArrowBack)); 38 | connect(forwardButton, SIGNAL(clicked()), HelpTextEdit, SLOT(forward())); 39 | forwardButton->setIcon(style.standardIcon(QStyle::SP_ArrowForward)); 40 | HelpTextEdit->setSearchPaths(QStringList(dataDirectory() + "help/")); 41 | QFile file(fileName); 42 | if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { 43 | QTextStream ts(&file); 44 | HelpTextEdit->setText(ts.readAll()); 45 | } 46 | file.close(); 47 | } 48 | 49 | void HelpDialog::home() { HelpTextEdit->scrollToAnchor("top"); } 50 | -------------------------------------------------------------------------------- /so2sdr/helpdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef HELPDIALOG_H 20 | #define HELPDIALOG_H 21 | #include "ui_helpdialog.h" 22 | 23 | /*! 24 | Displays help file 25 | */ 26 | class HelpDialog : public QDialog, public Ui::HelpDialog { 27 | Q_OBJECT 28 | 29 | public: 30 | HelpDialog(QString fileName, QWidget *parent = nullptr); 31 | 32 | private slots: 33 | void home(); 34 | }; 35 | #endif 36 | -------------------------------------------------------------------------------- /so2sdr/history.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | 20 | #ifndef HISTORY_H 21 | #define HISTORY_H 22 | 23 | #include "qso.h" 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | /*! 30 | exchange history database 31 | */ 32 | class History : public QObject { 33 | Q_OBJECT 34 | public: 35 | explicit History(QSettings &csettings, QObject *parent = nullptr); 36 | ~History(); 37 | void fillExchange(Qso *qso, const QByteArray &part); 38 | void startHistory(); 39 | bool isOpen(); 40 | 41 | signals: 42 | void message(const QString &, int); 43 | 44 | public slots: 45 | void addQso(const Qso *qso); 46 | 47 | private: 48 | QSettings &csettings; 49 | bool isopen; 50 | }; 51 | 52 | #endif // HISTORY_H 53 | -------------------------------------------------------------------------------- /so2sdr/icon48x48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/so2sdr/icon48x48.ico -------------------------------------------------------------------------------- /so2sdr/inpout32.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/n4ogw/so2sdr/7a3ab91fd8d948f549509c2adc58074d17b240b9/so2sdr/inpout32.dll -------------------------------------------------------------------------------- /so2sdr/keyboardhandler.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef KEYBOARDHANDLER_H 20 | #define KEYBOARDHANDLER_H 21 | 22 | #include 23 | #include 24 | 25 | class KeyboardHandler : public QObject { 26 | Q_OBJECT 27 | public: 28 | explicit KeyboardHandler(const QString &deviceName, QObject *parent = nullptr); 29 | void quitHandler(); 30 | void setDevice(const QString &); 31 | 32 | signals: 33 | void readKey(int code, bool shift, bool ctrl, bool alt); 34 | 35 | public slots: 36 | void run(); 37 | 38 | private: 39 | QString device; 40 | std::atomic quitFlag; 41 | int fd; 42 | }; 43 | 44 | #endif // KEYBOARDHANDLER_H 45 | -------------------------------------------------------------------------------- /so2sdr/lineedit.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "lineedit.h" 20 | #include 21 | 22 | LineEdit::LineEdit(QWidget *parent) : QLineEdit(parent) { 23 | myFocus = false; 24 | installEventFilter(this); 25 | } 26 | 27 | void LineEdit::setMyFocus(bool b) { 28 | myFocus = b; 29 | if (b) { 30 | QCoreApplication::postEvent(this, new QEvent(QEvent::FocusIn)); 31 | } else { 32 | QCoreApplication::postEvent(this, new QEvent(QEvent::FocusOut)); 33 | } 34 | } 35 | 36 | bool LineEdit::eventFilter(QObject *o, QEvent *e) { 37 | if (myFocus && e->type() == QEvent::FocusOut) { 38 | return true; 39 | } else 40 | return QLineEdit::eventFilter(o, e); 41 | } 42 | -------------------------------------------------------------------------------- /so2sdr/lineedit.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef LINEEDIT_H 20 | #define LINEEDIT_H 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | /* modified QLinedEdit for the callsign and exchange entry windows. 27 | * modifications allow controlling focus while in two keyboard mode 28 | */ 29 | 30 | class LineEdit : public QLineEdit { 31 | public: 32 | explicit LineEdit(QWidget *parent); 33 | void setMyFocus(bool b); 34 | 35 | protected: 36 | bool eventFilter(QObject *, QEvent *e); 37 | 38 | private: 39 | bool myFocus; 40 | }; 41 | 42 | #endif // LINEEDIT_H 43 | -------------------------------------------------------------------------------- /so2sdr/linux_pp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef LINUX_PP_H 20 | #define LINUX_PP_H 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | /*! Parallel port access under Linux 27 | 28 | bit to pin mapping 29 | Bit: 7 6 5 4 3 2 1 0 30 | 31 | Base (Data port) Pin: 9 8 7 6 5 4 3 2 32 | 33 | Base+1 (Status port) Pin: ~11 10 12 13 15 34 | 35 | Base+2 (Control port) Pin: ~17 16 ~14 ~1 36 | 37 | */ 38 | class ParallelPort : public QObject { 39 | Q_OBJECT 40 | 41 | public: 42 | explicit ParallelPort(QSettings &s); 43 | ~ParallelPort(); 44 | void switchAudio(int r); 45 | void toggleStereoPin(); 46 | void switchTransmit(int r); 47 | bool stereoActive() const; 48 | 49 | public slots: 50 | void initialize(); 51 | 52 | signals: 53 | void parallelPortError(const QString &); 54 | 55 | private: 56 | bool initialized; 57 | bool stereoPinStatus; 58 | 59 | int parallelFD; 60 | 61 | void PinLow(const int p); 62 | void PinHigh(const int p); 63 | QSettings &settings; 64 | }; 65 | #endif 66 | -------------------------------------------------------------------------------- /so2sdr/logedit.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef LOGEDIT_H 20 | #define LOGEDIT_H 21 | 22 | #include "utils.h" 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | /*! 36 | subclass of QSqlTableModel needed to specify flags separately for 37 | each column, and specify checkbox for qso valid column 38 | */ 39 | class tableModel : public QSqlTableModel { 40 | Q_OBJECT 41 | 42 | public: 43 | tableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()); 44 | 45 | protected: 46 | virtual Qt::ItemFlags flags(const QModelIndex &index) const; 47 | virtual QVariant data(const QModelIndex &index, int role) const; 48 | virtual bool setData(const QModelIndex &index, const QVariant &value, 49 | int role); 50 | }; 51 | 52 | /*! 53 | derived line editor class for editing log cells 54 | */ 55 | class LogQLineEdit : public QLineEdit { 56 | Q_OBJECT 57 | 58 | public: 59 | explicit LogQLineEdit(QWidget *w); 60 | 61 | private slots: 62 | void fixSelect(); 63 | 64 | protected: 65 | bool eventFilter(QObject *, QEvent *); 66 | 67 | private: 68 | QString undoText; 69 | }; 70 | 71 | #endif // LOGEDIT_H 72 | -------------------------------------------------------------------------------- /so2sdr/main.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "menustyle.h" 20 | #include "so2sdr.h" 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | int main(int argc, char *argv[]) { 27 | QApplication app(argc, argv); 28 | QApplication::setApplicationName("so2sdr"); 29 | QApplication::setApplicationVersion(Version); 30 | 31 | QCommandLineParser parser; 32 | parser.setApplicationDescription( 33 | "so2sdr: a contest logging program, https://github.com/n4ogw/so2sdr"); 34 | parser.addHelpOption(); 35 | parser.addVersionOption(); 36 | parser.addPositionalArgument("configfile", 37 | "(optional) configuration file with full path"); 38 | parser.process(app); 39 | const QStringList args = parser.positionalArguments(); 40 | 41 | // set style that prevents menubar from grabbing focus when Alt pressed 42 | app.setStyle(new MenuStyle()); 43 | 44 | So2sdr *main = new So2sdr(args); 45 | QObject::connect(main->actionQuit, SIGNAL(triggered()), &app, SLOT(quit())); 46 | 47 | // calls So2sdr destructor on app exit 48 | main->setAttribute(Qt::WA_DeleteOnClose); 49 | 50 | if (main->so2sdrOk()) { 51 | return app.exec(); 52 | } else { 53 | return -1; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /so2sdr/master.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef MASTER_H 20 | #define MASTER_H 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | /*! 27 | Class for supercheck partial lookups (MASTER.DTA) 28 | 29 | based on code from Alex Shovkoplyas VE3NEA 30 | */ 31 | class Master : public QObject { 32 | Q_OBJECT 33 | 34 | public: 35 | Master(); 36 | ~Master(); 37 | void initialize(QFile &file); 38 | void search(QByteArray partial, QByteArray &CallList); 39 | 40 | signals: 41 | void masterError(const QString &); 42 | 43 | private: 44 | bool initialized; 45 | char *CallData; 46 | int *index; 47 | int indexBytes; 48 | int indexSize; 49 | int nchars; 50 | QByteArray chars; 51 | qint64 fileSize; 52 | }; 53 | 54 | #endif // MASTER_H 55 | -------------------------------------------------------------------------------- /so2sdr/menustyle.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef MENUSTYLE_H 20 | #define MENUSTYLE_H 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | // used to prevent menubar from grabbing focus when Alt pressed. See 28 | // 29 | // https://bugreports.qt.io/browse/QTBUG-77355 30 | // 31 | // this workaround is from 32 | // 33 | // https://stackoverflow.com/questions/37020992/qt-prevent-menubar-from-grabbing-focus-after-alt-pressed-on-windows 34 | 35 | class MenuStyle : public QProxyStyle { 36 | public: 37 | int styleHint(StyleHint stylehint, const QStyleOption *opt, 38 | const QWidget *widget, QStyleHintReturn *returnData) const { 39 | if (stylehint == QStyle::SH_MenuBar_AltKeyNavigation) 40 | return 0; 41 | 42 | return QProxyStyle::styleHint(stylehint, opt, widget, returnData); 43 | } 44 | }; 45 | 46 | #endif // MENUSTYLE_H 47 | -------------------------------------------------------------------------------- /so2sdr/microham.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef MICROHAM_H 20 | #define MICROHAM_H 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | /* 27 | * Support for microHam Control Protocol enabled devices 28 | * 29 | * -Commands: FT1, FT2, FR1, FR2, and FRS commands 30 | * -does not receive any data from the device, only sends out commands 31 | * -connection settings fixed at 9600N81 32 | * -tested on MK2R/+ device (NO3M) 33 | */ 34 | 35 | class MicroHam : public QObject { 36 | Q_OBJECT 37 | 38 | public: 39 | explicit MicroHam(QSettings &s, QObject *parent = nullptr); 40 | ~MicroHam(); 41 | bool MicroHamIsOpen() const; 42 | void switchAudio(int nr); 43 | void toggleStereo(int nr); 44 | void switchTransmit(int nr); 45 | bool stereoActive() const; 46 | void sendCommand(QByteArray command); 47 | signals: 48 | void microhamError(const QString &); 49 | 50 | public slots: 51 | void openMicroHam(); 52 | 53 | private: 54 | bool MicroHamOpen; 55 | bool stereo; 56 | QSerialPort *MicroHamPort; 57 | QSettings &settings; 58 | void closeMicroHam(); 59 | }; 60 | 61 | #endif // MICROHAM_H 62 | -------------------------------------------------------------------------------- /so2sdr/multdisplay.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef MULTDISPLAY_H 20 | #define MULTDISPLAY_H 21 | 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | /*! widget to display multipliers. Has extra features for grid square display 28 | * 29 | */ 30 | class MultDisplay : public QTextEdit { 31 | Q_OBJECT 32 | 33 | public: 34 | MultDisplay(QWidget *parent = nullptr); 35 | void setGridMode(bool); 36 | void drawGrids(); 37 | void updateMults(); 38 | public slots: 39 | void setCenterGrid(QByteArray); 40 | void setMults(QList list) { mults = list; } 41 | void setNeededMults(QList list) { neededMults = list; } 42 | 43 | protected: 44 | bool eventFilter(QObject *, QEvent *e); 45 | 46 | private: 47 | bool gridMode; 48 | QByteArray centerGrid; 49 | QList mults; 50 | QList neededMults; 51 | char centerField1; 52 | char centerField2; 53 | char centerNr1; 54 | char centerNr2; 55 | char upperLeft[4]; 56 | }; 57 | 58 | #endif // MULTDISPLAY_H 59 | -------------------------------------------------------------------------------- /so2sdr/mytableview.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 rec. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "mytableview.h" 20 | #include 21 | #include 22 | #include 23 | 24 | MyTableView::MyTableView(QWidget *w) : QTableView(w) { 25 | installEventFilter(this); 26 | } 27 | 28 | /*! event filter for log display delegate 29 | */ 30 | bool MyTableView::eventFilter(QObject *obj, QEvent *event) { 31 | if (event->type() == QEvent::KeyPress) { 32 | QKeyEvent *kev = static_cast(event); 33 | if (kev->key() == Qt::Key_Escape) { 34 | return false; 35 | } 36 | } 37 | return QTableView::eventFilter(obj, event); 38 | } 39 | -------------------------------------------------------------------------------- /so2sdr/mytableview.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 rec. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdrec. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdrec. If not, see . 17 | 18 | */ 19 | #ifndef MYTABLEVIEW_H 20 | #define MYTABLEVIEW_H 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | /*! 27 | Derived class for log display 28 | */ 29 | class MyTableView : public QTableView { 30 | Q_OBJECT 31 | 32 | public: 33 | explicit MyTableView(QWidget *); 34 | 35 | protected: 36 | bool eventFilter(QObject *, QEvent *); 37 | }; 38 | 39 | #endif // MYTABLEVIEW_H 40 | -------------------------------------------------------------------------------- /so2sdr/newcontestdialog.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "newcontestdialog.h" 20 | #include 21 | #include 22 | 23 | NewDialog::NewDialog(QWidget *parent) : QDialog(parent) { 24 | setupUi(this); 25 | configFiles.clear(); 26 | } 27 | 28 | QString NewDialog::selectedContest() { 29 | return (configFiles.at(NewContestComboBox->currentIndex())); 30 | } 31 | 32 | bool NewDialog::readContestList(QString fileName) { 33 | QFile file(fileName); 34 | if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { 35 | emit newContestError("Can't open contest list file at " + fileName); 36 | return (false); 37 | } 38 | while (!file.atEnd()) { 39 | QByteArray buffer = file.readLine(); 40 | int i = buffer.indexOf(","); 41 | QByteArray name = buffer.mid(0, i).trimmed(); 42 | NewContestComboBox->addItem(name); 43 | configFiles.append(buffer.right(buffer.size() - i - 1).trimmed()); 44 | } 45 | file.close(); 46 | return (true); 47 | } 48 | -------------------------------------------------------------------------------- /so2sdr/newcontestdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef NEWCONTESTDIALOG_H 20 | #define NEWCONTESTDIALOG_H 21 | 22 | #include "ui_newcontestdialog.h" 23 | #include 24 | #include 25 | #include 26 | 27 | /*! 28 | New contest selection dialog 29 | */ 30 | class NewDialog : public QDialog, public Ui::NewContestDialog { 31 | Q_OBJECT 32 | 33 | public: 34 | NewDialog(QWidget *parent = nullptr); 35 | bool readContestList(QString fileName); 36 | QString selectedContest(); 37 | signals: 38 | void newContestError(const QString &); 39 | 40 | private: 41 | QList configFiles; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /so2sdr/notedialog.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "notedialog.h" 20 | #include 21 | 22 | NoteDialog::NoteDialog(QWidget *parent) : QDialog(parent) { 23 | setupUi(this); 24 | connect(NoteButtonBox, SIGNAL(accepted()), this, SLOT(writeNotes())); 25 | } 26 | 27 | /*! 28 | called to open note dialog 29 | */ 30 | void NoteDialog::enterNote(QString fname, const QString &dir, 31 | const QString &time, bool grab) { 32 | show(); 33 | NoteLineEdit->setFocus(); 34 | if (grab) 35 | NoteLineEdit->grabKeyboard(); 36 | NoteLineEdit->setText(time + ":"); 37 | noteFile = fname.remove("cfg") + "txt"; 38 | noteDir = dir; 39 | } 40 | 41 | /*! 42 | append note to file 43 | 44 | @todo File write error not handled 45 | */ 46 | void NoteDialog::writeNotes() { 47 | QDir directory; 48 | directory.setCurrent(noteDir); 49 | QFile file(noteFile); 50 | if (file.open(QIODevice::Append | QIODevice::Text)) { 51 | file.write(NoteLineEdit->text().toLatin1().data()); 52 | file.write("\n"); 53 | file.close(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /so2sdr/notedialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef NOTEDIALOG_H 20 | #define NOTEDIALOG_H 21 | 22 | #include "ui_notedialog.h" 23 | #include 24 | 25 | /*! 26 | Dialog to enter log notes 27 | */ 28 | class NoteDialog : public QDialog, public Ui::NoteDialog { 29 | Q_OBJECT 30 | 31 | public: 32 | explicit NoteDialog(QWidget *parent = nullptr); 33 | void enterNote(QString fname, const QString &dir, const QString &time, 34 | bool grab = false); 35 | 36 | private slots: 37 | void writeNotes(); 38 | 39 | private: 40 | QString noteDir; 41 | QString noteFile; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /so2sdr/otrsp.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef OTRSP_H 20 | #define OTRSP_H 21 | #include 22 | #include 23 | #include 24 | 25 | /* 26 | * Support for OTRSP (Open Two Radio Switching Protocol) devices 27 | * 28 | * -limited support at present: only uses RX1, RX2, TX1, TX2, and RX1S commands 29 | * -does not receive any data from the device, only sends out commands 30 | * -connection settings fixed at 9600N81 31 | * -tested on SO2RDUINO device (N4OGW) 32 | */ 33 | 34 | class OTRSP : public QObject { 35 | Q_OBJECT 36 | 37 | public: 38 | OTRSP(QSettings &s, int n, QObject *parent = nullptr); 39 | ~OTRSP(); 40 | QByteArray name() const; 41 | bool OTRSPIsOpen() const; 42 | void switchAudio(int nr); 43 | void toggleStereo(int nr); 44 | void switchTransmit(int nr); 45 | bool stereoActive() const; 46 | void sendCommand(QByteArray command); 47 | signals: 48 | void otrspError(const QString &); 49 | void otrspNameSet(QByteArray, int); 50 | 51 | public slots: 52 | void openOTRSP(); 53 | 54 | private: 55 | int nr; 56 | bool OTRSPOpen; 57 | bool stereo; 58 | QSerialPort *OTRSPPort; 59 | QSettings &settings; 60 | QByteArray deviceName; 61 | void closeOTRSP(); 62 | }; 63 | 64 | #endif // OTRSP_H 65 | -------------------------------------------------------------------------------- /so2sdr/qso.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef QSO_H 20 | #define QSO_H 21 | #include "defines.h" 22 | #include "hamlib/rig.h" 23 | #include 24 | #include 25 | 26 | /*! 27 | qso data structure 28 | */ 29 | class Qso { 30 | public: 31 | explicit Qso(int n = 1); 32 | ~Qso(); 33 | void clear(); 34 | void setExchangeType(int, FieldTypes); 35 | 36 | bool dupe; 37 | bool externalQso; 38 | bool isMM; 39 | bool isMobile; 40 | bool isRover; 41 | bool valid; 42 | bool secondRadioQsy; 43 | int band; 44 | int bandColumn; 45 | double freq; 46 | double qsyFreq; 47 | int mult[MMAX]; 48 | int newmult[MMAX]; 49 | bool isnewmult[MMAX]; 50 | int nr; 51 | int number; 52 | int pts; 53 | QByteArray call; 54 | QByteArray *rcv_exch; 55 | QByteArray *snt_exch; 56 | QDateTime time; 57 | rmode_t mode; 58 | rmode_t qsyMode; 59 | ModeTypes modeType; 60 | 61 | bool isamult[MMAX]; 62 | Cont continent; 63 | FieldTypes *exchange_type; 64 | int bearing; 65 | int country; 66 | int distance; 67 | int n_exchange; 68 | int zone; 69 | QByteArray adifMode; 70 | QByteArray country_name; 71 | QByteArray exch; 72 | QByteArray mult_name; 73 | QByteArray PfxName; 74 | QByteArray prefill; 75 | QString sun; 76 | unsigned int worked; 77 | }; 78 | 79 | #endif // QSO_H 80 | -------------------------------------------------------------------------------- /so2sdr/radiodialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef RADIODIALOG_H 20 | #define RADIODIALOG_H 21 | 22 | #include "defines.h" 23 | #include "serial.h" 24 | #include "ui_radiodialog.h" 25 | #include 26 | #include 27 | 28 | class QComboBox; 29 | class QLineEdit; 30 | 31 | /*! 32 | Radio serial communication parameters 33 | */ 34 | class RadioDialog : public QDialog, public Ui::RadioDialog { 35 | Q_OBJECT 36 | 37 | public: 38 | RadioDialog(QSettings &s, RigSerial &cat, QWidget *parent = nullptr); 39 | ~RadioDialog(); 40 | 41 | signals: 42 | void startRadios(); 43 | 44 | public slots: 45 | void rejectChanges(); 46 | void updateRadio(); 47 | 48 | private slots: 49 | void populateModels1(int); 50 | void populateModels2(int); 51 | void rigctld1Checked(bool); 52 | void rigctld2Checked(bool); 53 | 54 | private: 55 | void populateModelCombo(int, int); 56 | void updateFromSettings(); 57 | 58 | QComboBox *radioBaudComboBox[NRIG]; 59 | QComboBox *radioMfgComboBox[NRIG]; 60 | QComboBox *radioModelComboBox[NRIG]; 61 | QComboBox *radioPttComboBox[NRIG]; 62 | QLineEdit *radioDevEdit[NRIG]; 63 | QLineEdit *radioPollTimeEdit[NRIG]; 64 | QLineEdit *radioIFEdit[NRIG]; 65 | QSettings &settings; 66 | RigSerial &catptr; 67 | }; 68 | 69 | #endif 70 | -------------------------------------------------------------------------------- /so2sdr/sdrdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SDRDIALOG_H 20 | #define SDRDIALOG_H 21 | 22 | #include "defines.h" 23 | #include "ui_sdrdialog.h" 24 | #include 25 | #include 26 | 27 | class QCheckBox; 28 | 29 | /*! 30 | Visible bandmap parameters 31 | */ 32 | class SDRDialog : public QDialog, public Ui::SDRDialog { 33 | Q_OBJECT 34 | 35 | public: 36 | SDRDialog(QSettings &s, QWidget *parent = nullptr); 37 | ~SDRDialog(); 38 | 39 | signals: 40 | void updateCQLimits(); 41 | 42 | public slots: 43 | void updateSDR(); 44 | void rejectChanges(); 45 | 46 | private slots: 47 | void findExeFile1(); 48 | void findExeFile2(); 49 | void findConfig1(); 50 | void findConfig2(); 51 | 52 | private: 53 | void fileGetter(QString msg, QString path, QString files, QString key, 54 | QLabel *label); 55 | QString shortName(QString s); 56 | void updateFromSettings(); 57 | QLabel *pathLabel[NRIG]; 58 | QLineEdit *ipPtr[NRIG]; 59 | QLineEdit *portPtr[NRIG]; 60 | QLabel *configLabel[NRIG]; 61 | QSettings &settings; 62 | }; 63 | #endif 64 | -------------------------------------------------------------------------------- /so2sdr/settingsdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SETTINGSDIALOG_H 20 | #define SETTINGSDIALOG_H 21 | 22 | #include "defines.h" 23 | #include "ui_settingsdialog.h" 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | class SettingsDialog : public QDialog, public Ui::SettingsDialog { 30 | Q_OBJECT 31 | 32 | public: 33 | SettingsDialog(QSettings &s, QWidget *parent = nullptr); 34 | ~SettingsDialog(); 35 | friend class So2sdr; 36 | 37 | public slots: 38 | void updateSettings(); 39 | void rejectChanges(); 40 | 41 | signals: 42 | void settingsUpdate(); 43 | 44 | private: 45 | QSettings &settings; 46 | void loadSettings(); 47 | }; 48 | 49 | #endif // SETTINGSDIALOG_H 50 | -------------------------------------------------------------------------------- /so2sdr/signal.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "signal.h" 20 | 21 | Signal::Signal() { 22 | active = false; 23 | cnt = 0; 24 | n = 0; 25 | f = 0; 26 | fcq = 0; 27 | space = 0; 28 | fsum = 0; 29 | } 30 | 31 | void Signal::clear() { 32 | active = false; 33 | cnt = 0; 34 | f = 0; 35 | fcq = 0; 36 | fsum = 0; 37 | n = 0; 38 | space = 0; 39 | } 40 | 41 | CalibSignal::CalibSignal() { 42 | n = 0; 43 | zsum[0] = 0.; 44 | zsum[1] = 0.; 45 | z[0] = 0.; 46 | z[1] = 0.; 47 | gain = 1.0; 48 | phase = 0.; 49 | } 50 | -------------------------------------------------------------------------------- /so2sdr/signal.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SIGNAL_H 20 | #define SIGNAL_H 21 | 22 | #include "defines.h" 23 | 24 | class Signal { 25 | public: 26 | Signal(); 27 | 28 | void clear(); 29 | bool active; 30 | int cnt; 31 | int f; 32 | int fcq; 33 | int n; 34 | int space; 35 | long fsum; 36 | }; 37 | Q_DECLARE_TYPEINFO(Signal, Q_MOVABLE_TYPE); 38 | 39 | class CalibSignal { 40 | public: 41 | CalibSignal(); 42 | 43 | double gain, phase; 44 | double z[NRIG]; 45 | double zsum[NRIG]; 46 | long long n; 47 | }; 48 | Q_DECLARE_TYPEINFO(CalibSignal, Q_MOVABLE_TYPE); 49 | 50 | #endif // SIGNAL_H 51 | -------------------------------------------------------------------------------- /so2sdr/so2rdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SO2RDIALOG_H 20 | #define SO2RDIALOG_H 21 | 22 | #include "ui_so2rdialog.h" 23 | #include 24 | #include 25 | 26 | class QComboBox; 27 | class QLineEdit; 28 | 29 | /*! 30 | Radio serial communication parameters 31 | */ 32 | class So2rDialog : public QDialog, public Ui::So2rDialog { 33 | Q_OBJECT 34 | 35 | public: 36 | So2rDialog(QSettings &s, QWidget *parent = nullptr); 37 | ~So2rDialog(); 38 | 39 | signals: 40 | void setParallelPort(); 41 | void setOTRSP(); 42 | void setMicroHam(); 43 | void setMini(); 44 | 45 | public slots: 46 | void rejectChanges(); 47 | void updateSo2r(); 48 | void setOtrspName(QByteArray name, int nr); 49 | void setMiniName(QByteArray name); 50 | 51 | private: 52 | void updateFromSettings(); 53 | QSettings &settings; 54 | }; 55 | 56 | #endif 57 | -------------------------------------------------------------------------------- /so2sdr/so2rmini.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef SO2RMINI_H 20 | #define SO2RMINI_H 21 | #include 22 | #include 23 | #include 24 | 25 | /* 26 | * Support for So2rMini device (with N6TR firmware) 27 | * 28 | */ 29 | class SO2RMini : public QObject { 30 | Q_OBJECT 31 | 32 | public: 33 | SO2RMini(QSettings &s, QObject *parent = nullptr); 34 | ~SO2RMini(); 35 | void cancelcw(); 36 | void loadbuff(QByteArray msg); 37 | void sendcw(); 38 | bool SO2RMiniIsOpen() const; 39 | void switchAudio(int nr); 40 | void toggleStereo(int nr); 41 | void setSpeed(int s); 42 | void switchTransmit(int nr); 43 | bool stereoActive() const; 44 | void sendCommand(QByteArray command); 45 | 46 | signals: 47 | void finished(); 48 | void miniError(const QString &); 49 | void miniName(const QByteArray &); 50 | void textSent(const QString &t, int); 51 | void tx(bool, int); 52 | 53 | public slots: 54 | void openSO2RMini(); 55 | 56 | private slots: 57 | void receive(); 58 | 59 | private: 60 | char relayBits; 61 | bool SO2RMiniOpen; 62 | bool sending; 63 | bool stereo; 64 | int txRig; 65 | QSerialPort *SO2RMiniPort; 66 | QSettings &settings; 67 | QByteArray buffer; 68 | QByteArray bufferSent; 69 | QByteArray deviceName; 70 | void closeSO2RMini(); 71 | }; 72 | 73 | #endif // SO2RMINI_H 74 | -------------------------------------------------------------------------------- /so2sdr/so2sdr.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "icon48x48.ico" 2 | -------------------------------------------------------------------------------- /so2sdr/stationdialog.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef STATIONDIALOG_H 20 | #define STATIONDIALOG_H 21 | 22 | #include "ui_stationdialog.h" 23 | #include 24 | #include 25 | #include 26 | #include 27 | /*! 28 | Station parameters dialog 29 | */ 30 | class StationDialog : public QDialog, public Ui::StationDialog { 31 | Q_OBJECT 32 | 33 | public: 34 | StationDialog(QSettings &s, QWidget *parent = nullptr); 35 | ~StationDialog(); 36 | friend class So2sdr; 37 | 38 | double lat() const; 39 | double lon() const; 40 | 41 | public slots: 42 | void updateStation(); 43 | void rejectChanges(); 44 | 45 | signals: 46 | void stationUpdate(); 47 | 48 | private: 49 | double Lat; 50 | double Lon; 51 | QSettings &settings; 52 | }; 53 | 54 | #endif 55 | -------------------------------------------------------------------------------- /so2sdr/telnet.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef TELNET_H 20 | #define TELNET_H 21 | 22 | #include "ui_telnet.h" 23 | #include 24 | 25 | class QtTelnet; 26 | 27 | /*! 28 | DX Cluster Telnet window 29 | */ 30 | class Telnet : public QWidget, public Ui::TelnetDialog { 31 | Q_OBJECT 32 | 33 | public: 34 | Telnet(QSettings &s, QWidget *parent = nullptr); 35 | ~Telnet(); 36 | 37 | signals: 38 | void done(bool); 39 | void dxSpot(QByteArray, double); 40 | 41 | protected: 42 | void closeEvent(QCloseEvent *event); 43 | 44 | private slots: 45 | void connectTelnet(); 46 | void disconnectTelnet(); 47 | void sendText(); 48 | void showText(QString txt); 49 | 50 | private: 51 | QList hosts; 52 | QString buffer; 53 | QSettings &settings; 54 | QtTelnet *telnet; 55 | }; 56 | #endif // TELNET_H 57 | -------------------------------------------------------------------------------- /so2sdr/utils.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef UTILS_H 20 | #define UTILS_H 21 | 22 | #include "hamlib/rig.h" 23 | #include "defines.h" 24 | #include 25 | #include 26 | 27 | /*! 28 | upper-case validator: converts all input to upper case 29 | */ 30 | class UpperValidator : public QValidator { 31 | public: 32 | explicit UpperValidator(QObject *parent = nullptr); 33 | QValidator::State validate(QString &input, int &pos) const; 34 | }; 35 | 36 | /*! 37 | time validator: requires time in format 0000 - 2359 38 | */ 39 | class TimeValidator : public QValidator { 40 | public: 41 | explicit TimeValidator(QObject *parent = nullptr); 42 | void fixup(QString &input) const; 43 | QValidator::State validate(QString &input, int &pos) const; 44 | }; 45 | 46 | int getBand(double f); 47 | QString dataDirectory(); 48 | QString userDirectory(); 49 | QByteArray getAdifMode(rmode_t mode); 50 | ModeTypes getAdifModeType(const QByteArray &mode); 51 | ModeTypes getModeType(rmode_t mode); 52 | 53 | #endif // UTILS_H 54 | -------------------------------------------------------------------------------- /so2sdr/winkey.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef WINKEY_H 20 | #define WINKEY_H 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | /*! 27 | Winkey support class 28 | */ 29 | class Winkey : public QObject { 30 | Q_OBJECT 31 | 32 | public: 33 | explicit Winkey(QSettings &s, QObject *parent = nullptr); 34 | ~Winkey(); 35 | void loadbuff(QByteArray msg); 36 | bool isSending() const; 37 | void sendcw(); 38 | void switchTransmit(int nrig); 39 | void setEchoMode(bool b); 40 | void setSpeed(int speed); 41 | bool winkeyIsOpen() const; 42 | 43 | signals: 44 | void cwCanceled(); 45 | void finished(); 46 | void textSent(const QString &t, int); 47 | void version(int ver); 48 | void winkeyTx(bool, int); 49 | void winkeyError(const QString &); 50 | 51 | public slots: 52 | void cancelcw(); 53 | void openWinkey(); 54 | 55 | private slots: 56 | void receive(); 57 | void receiveInit(); 58 | 59 | private: 60 | QSerialPort *winkeyPort; 61 | bool echoMode; 62 | bool ignoreEcho; 63 | bool sending; 64 | bool winkeyOpen; 65 | bool winkeySendingCmd; 66 | int nchar; 67 | int rigNum; 68 | int txPtr; 69 | int txRig; 70 | int winkeySpeedPot; 71 | int winkeyVersion; 72 | QByteArray sendBuff; 73 | QByteArray sent; 74 | QSettings &settings; 75 | void closeWinkey(); 76 | void openWinkey2(); 77 | void processEcho(unsigned char byte); 78 | }; 79 | 80 | #endif // WINKEY_H 81 | -------------------------------------------------------------------------------- /so2sdr/wsjtxdelegate.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | 20 | #ifndef WSJTXDELEGATE_H 21 | #define WSJTXDELEGATE_H 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | /*! 30 | subclass of delegate for displaying log in main window 31 | */ 32 | class wsjtxDelegate : public QStyledItemDelegate { 33 | Q_OBJECT 34 | 35 | public: 36 | wsjtxDelegate(); 37 | 38 | protected: 39 | void paint(QPainter *painter, const QStyleOptionViewItem &option, 40 | const QModelIndex &index) const; 41 | }; 42 | 43 | #endif // WSJTXDELEGATE_H 44 | -------------------------------------------------------------------------------- /so2sdr/wsjtxmessage.cpp: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #include "wsjtxmessage.h" 20 | 21 | WsjtxMessage::WsjtxMessage(QByteArray *data, QIODevice::OpenMode mode) 22 | : QDataStream(data, mode) { 23 | schema = 2; 24 | } 25 | 26 | void WsjtxMessage::startMessage(WsjtxMessageType type) { 27 | if (schema <= 1) { 28 | this->setVersion(QDataStream::Qt_5_0); 29 | } 30 | #if QT_VERSION >= 0x050200 31 | else if (schema <= 2) { 32 | this->setVersion(QDataStream::Qt_5_2); 33 | } 34 | #endif 35 | #if QT_VERSION >= 0x050400 36 | else if (schema <= 3) { 37 | this->setVersion(QDataStream::Qt_5_4); 38 | } 39 | #endif 40 | *this << magic << schema << static_cast(type) 41 | << QByteArray("SO2SDR"); 42 | } 43 | -------------------------------------------------------------------------------- /so2sdr/wsjtxmessage.h: -------------------------------------------------------------------------------- 1 | /*! Copyright 2010-2025 R. Torsten Clay N4OGW 2 | 3 | This file is part of so2sdr. 4 | 5 | so2sdr is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | any later version. 9 | 10 | so2sdr is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with so2sdr. If not, see . 17 | 18 | */ 19 | #ifndef WSJTXMESSAGE_H 20 | #define WSJTXMESSAGE_H 21 | 22 | #include "udpreader.h" 23 | #include 24 | #include 25 | #include 26 | 27 | // for sending UDP data stream to wsjtx 28 | class WsjtxMessage : public QDataStream { 29 | public: 30 | explicit WsjtxMessage(QByteArray *data, QIODevice::OpenMode mode); 31 | void startMessage(WsjtxMessageType type); 32 | void setSchema(quint32 s) { schema = s; } 33 | 34 | private: 35 | quint32 schema; 36 | }; 37 | 38 | #endif // WSJTXMESSAGE_H 39 | -------------------------------------------------------------------------------- /windows/so2sdr-bandmap-2.0.5: -------------------------------------------------------------------------------- 1 | Name "so2sdr-bandmap-2.0.5" 2 | 3 | OutFile "so2sdr-bandmap-2.0.5.exe" 4 | InstallDir $PROGRAMFILES\so2sdr 5 | 6 | DirText "This will install so2sdr-bandmap on your computer. Choose a directory" 7 | 8 | 9 | Section "" ;No components page, name is not important 10 | SetOutPath $INSTDIR 11 | File so2sdr-bandmap/release/so2sdr-bandmap.exe 12 | File share/check.png 13 | File share/icon24x24.png 14 | File share/icon48x48.png 15 | File share/license.html 16 | File share/x.png 17 | 18 | SetOutPath $INSTDIR\so2sdr-bandmap-help 19 | File share/so2sdr-bandmap-help/afedri-setup.png 20 | File share/so2sdr-bandmap-help/bandmap-controls.png 21 | File share/so2sdr-bandmap-help/network-setup.png 22 | File share/so2sdr-bandmap-help/so2sdr-bandmap-help.html 23 | File share/so2sdr-bandmap-help/so2sdr-bandmap-setup.png 24 | File share/so2sdr-bandmap-help/soundcard-setup.png 25 | 26 | 27 | WriteUninstaller $INSTDIR\Uninstall.exe 28 | CreateDirectory "$SMPROGRAMS\N4OGW" 29 | CreateShortCut "$SMPROGRAMS\N4OGW\SO2SDR-Bandmap.lnk" "$INSTDIR\so2sdr-bandmap.exe" 30 | 31 | SectionEnd 32 | 33 | Section "Uninstall" 34 | 35 | Delete $INSTDIR\Uninstall.exe 36 | Delete $INSTDIR\so2sdr-bandmap.exe 37 | Delete $INSTDIR\check.png 38 | Delete $INSTDIR\icon24x24.png 39 | Delete $INSTDIR\icon48x48.png 40 | Delete $INSTDIR\license.html 41 | Delete $INSTDIR\x.png 42 | 43 | Delete $INSTDIR\so2sdr-bandmap-help 44 | Delete $INSTDIR\so2sdr-bandmap-help\afedri-setup.png 45 | Delete $INSTDIR\so2sdr-bandmap-help\bandmap-controls.png 46 | Delete $INSTDIR\so2sdr-bandmap-help\network-setup.png 47 | Delete $INSTDIR\so2sdr-bandmap-help\so2sdr-bandmap-help.html 48 | Delete $INSTDIR\so2sdr-bandmap-help\so2sdr-bandmap-setup.png 49 | Delete $INSTDIR\so2sdr-bandmap-help\soundcard-setup.png 50 | RMDIR $INSTDIR\so2sdr-bandmap-help 51 | 52 | RMDIR $INSTDIR 53 | Delete "$SMPROGRAMS\N4OGW\SO2SDR-Bandmap.lnk" 54 | RMDIR "$SMPROGRAMS\N4OGW" 55 | 56 | SectionEnd 57 | --------------------------------------------------------------------------------