New upstream version 0.0.0.73

This commit is contained in:
Dave Hibberd 2023-12-08 15:48:31 +00:00
parent af04e39e18
commit 14657a895c
46 changed files with 23872 additions and 22188 deletions

63
.gitattributes vendored Normal file
View File

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

261
.gitignore vendored Normal file
View File

@ -0,0 +1,261 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
project.fragment.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
#*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

BIN
250x1000Hz.wav Normal file

Binary file not shown.

BIN
250x600Hz.wav Normal file

Binary file not shown.

View File

@ -29,6 +29,8 @@ extern QWidget * mythis;
extern int AGWEnable;
extern int AGWMonEnable;
extern int AGWLocalTime;
extern int AGWMonNodes;
extern char AGWTermCall[12];
extern char AGWBeaconDest[12];
extern char AGWBeaconPath[80];
@ -40,6 +42,8 @@ extern char AGWHost[128];
extern int AGWPortNum;
extern int AGWPaclen;
extern Ui_ListenSession * KISSMonSess;
extern char listenCText[4096];
extern int ConnectBeep;
@ -137,6 +141,7 @@ void AGW_Process_Input(AGWUser * AGW);
void Send_AGW_X_Frame(QTcpSocket* socket, char * CallFrom);
void Send_AGW_G_Frame(QTcpSocket* socket);
void Send_AGW_m_Frame(QTcpSocket* socket);
void Send_AGW_R_Frame(QTcpSocket* socket);
Ui_ListenSession * FindFreeWindow();
Ui_ListenSession * newWindow(QObject * parent, int Type, const char * Label = nullptr);
@ -146,7 +151,7 @@ void AGW_frame_header(UCHAR * Msg, char AGWPort, char DataKind, unsigned char PI
void Debugprintf(const char * format, ...)
{
char Mess[10000];
va_list(arglist);
va_list arglist;
va_start(arglist, format);
vsprintf(Mess, format, arglist);
@ -448,7 +453,7 @@ void QtTermTCP::onAGWSocketStateChanged(QAbstractSocket::SocketState socketState
tabWidget->setTabText(Sess->Tab, "Monitor");
else
{
char Label[16];
char Label[32];
sprintf(Label, "Sess %d", Sess->Tab + 1);
tabWidget->setTabText(Sess->Tab, Label);
}
@ -541,7 +546,7 @@ void QtTermTCP::onAGWSocketStateChanged(QAbstractSocket::SocketState socketState
// for (Ui_ListenSession * S: _sessions)
// {
if ((S->SessionType == Mon) && S->clientSocket == NULL && S->AGWSession == NULL && S->KISSSession == NULL)
if ((S->SessionType == Mon) && S->clientSocket == NULL && S->AGWSession == NULL && S->KISSSession == NULL && (AGWUsers == NULL || (S != AGWUsers->MonSess)) && S != KISSMonSess)
{
Sess = S;
break;
@ -563,7 +568,7 @@ void QtTermTCP::onAGWSocketStateChanged(QAbstractSocket::SocketState socketState
{
S = _sessions.at(i);
if (S->clientSocket == NULL && S->AGWSession == NULL)
if (S->clientSocket == NULL && S->KISSSession == NULL && S->AGWSession == NULL && (AGWUsers == NULL || (S != AGWUsers->MonSess)) && S != KISSMonSess)
{
Sess = S;
break;
@ -574,7 +579,7 @@ void QtTermTCP::onAGWSocketStateChanged(QAbstractSocket::SocketState socketState
{
S = _sessions.at(0);
if (S->clientSocket == NULL && S->AGWSession == NULL && S->KISSSession == NULL)
if (S->clientSocket == NULL && S->AGWSession == NULL && S->KISSSession == NULL && (AGWUsers == NULL || (S != AGWUsers->MonSess)) && S != KISSMonSess)
Sess = S;
}
@ -606,6 +611,10 @@ void QtTermTCP::onAGWSocketStateChanged(QAbstractSocket::SocketState socketState
connectMenu->setEnabled(false);
}
Sess->mlocaltime = AGWLocalTime;
Sess->MonitorNODES = AGWMonNodes;
Send_AGW_R_Frame(sender); // Request Version
Send_AGW_m_Frame(sender); // Request Monitor Frames
}
}
@ -735,10 +744,31 @@ void Send_AGW_m_Frame(QTcpSocket* socket)
{
UCHAR Msg[512];
AGW_frame_header(Msg, 0, 'm', 0, "", "", 0);
// Request Monitoring. Add Extended form if connected to BPQ
AGW_frame_header(Msg, 0, 'm', 0, "", "", 12);
Msg[AGWHDDRRLEN] = AGWLocalTime;
Msg[AGWHDDRRLEN + 1] = AGWMonNodes;
Msg[AGWHDDRRLEN + 2] = AGWMonEnable;
Msg[AGWHDDRRLEN + 3] = 0;
memcpy(&Msg[AGWHDDRRLEN + 4], (void *)&AGWUsers->MonSess->portmask, 8);
socket->write((char *)Msg, AGWHDDRRLEN + 12);
}
void Send_AGW_R_Frame(QTcpSocket* socket)
{
UCHAR Msg[512];
// Request Version
AGW_frame_header(Msg, 0, 'R', 0, "", "", 0);
socket->write((char *)Msg, AGWHDDRRLEN);
}
/*
@ -1034,6 +1064,8 @@ void on_AGW_C_frame(AGWUser * AGW, struct AGWHeader * Frame, byte * Msg)
{
sprintf(Title, "Connected to %s", CallFrom);
QApplication::alert(mythis, 0);
if (TermMode == MDI)
{
Sess->setWindowTitle(Title);
@ -1062,7 +1094,7 @@ void on_AGW_C_frame(AGWUser * AGW, struct AGWHeader * Frame, byte * Msg)
setMenus(true);
if (ConnectBeep)
myBeep();
myBeep(&ConnectWAV);
// Send CText if defined
@ -1073,7 +1105,7 @@ void on_AGW_C_frame(AGWUser * AGW, struct AGWHeader * Frame, byte * Msg)
char Msg[80];
sprintf(Msg, "Incoming Connect from %s\r\r", CallFrom);
sprintf(Msg, "Incoming AGW Connection from %s\r\r", CallFrom);
WritetoOutputWindow(Sess, (unsigned char *)Msg, (int)strlen(Msg));
return;
@ -1121,21 +1153,27 @@ void on_AGW_D_frame(int snd_ch, char * CallFrom, char * CallTo, byte * Msg, int
}
}
extern "C" void WritetoMonWindow(Ui_ListenSession * Sess, unsigned char * Msg, int len);
void on_AGW_Mon_frame(byte * Msg, int Len, char Type)
{
if (AGWUsers && AGWUsers->MonSess && AGWUsers->MonSess->monWindow)
{
if (Type == 'T')
WritetoOutputWindowEx(AGWUsers->MonSess, Msg, Len,
AGWUsers->MonSess->monWindow, &AGWUsers->MonSess->OutputSaveLen, AGWUsers->MonSess->OutputSave, monTxText); // Red
unsigned char copy[512];
copy[0] = 0x1b;
if (Type == 'T')
copy[1] = 91;
else
WritetoOutputWindowEx(AGWUsers->MonSess, Msg, Len,
AGWUsers->MonSess->monWindow, &AGWUsers->MonSess->OutputSaveLen, AGWUsers->MonSess->OutputSave, monRxText); // Blue
copy[1] = 17;
memcpy(&copy[2], Msg, Len);
WritetoMonWindow(AGWUsers->MonSess, copy, Len + 2);
}
}
void on_AGW_Ds_frame(int AGWChan, char * CallFrom, char * CallTo, struct AGWHeader * Frame)
{
TAGWPort * AX25Sess;
@ -1170,7 +1208,7 @@ void on_AGW_Ds_frame(int AGWChan, char * CallFrom, char * CallTo, struct AGWHead
tabWidget->setTabText(Sess->Tab, "Monitor");
else
{
char Label[16];
char Label[32];
sprintf(Label, "Sess %d", Sess->Tab + 1);
tabWidget->setTabText(Sess->Tab, Label);
}

545
AlertSetup.ui Normal file
View File

@ -0,0 +1,545 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AlertDialog</class>
<widget class="QDialog" name="AlertDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>554</width>
<height>433</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>94</x>
<y>376</y>
<width>351</width>
<height>33</height>
</rect>
</property>
<layout class="QHBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="okButton">
<property name="text">
<string>OK</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancelButton">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QCheckBox" name="InboundBeep">
<property name="geometry">
<rect>
<x>24</x>
<y>40</y>
<width>201</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Beep on Inbound connect</string>
</property>
</widget>
<widget class="QCheckBox" name="InactivityBeep">
<property name="geometry">
<rect>
<x>24</x>
<y>65</y>
<width>221</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Beep on message after inactivity</string>
</property>
</widget>
<widget class="QCheckBox" name="KeywordBeep">
<property name="geometry">
<rect>
<x>24</x>
<y>90</y>
<width>201</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Beep on keyword</string>
</property>
</widget>
<widget class="QLineEdit" name="Interval">
<property name="geometry">
<rect>
<x>350</x>
<y>65</y>
<width>51</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="keywordFile">
<property name="geometry">
<rect>
<x>350</x>
<y>95</y>
<width>137</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QRadioButton" name="useBeep">
<property name="geometry">
<rect>
<x>24</x>
<y>204</y>
<width>82</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Use Beep</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
<widget class="QRadioButton" name="useFiles">
<property name="geometry">
<rect>
<x>148</x>
<y>204</y>
<width>193</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Use Audio Files</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>258</x>
<y>65</y>
<width>47</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Interval</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>24</x>
<y>263</y>
<width>107</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Interval .wav File</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>24</x>
<y>288</y>
<width>169</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Inbound Connect .wav File</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>24</x>
<y>313</y>
<width>165</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Keyword Alert .wav File</string>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>258</x>
<y>95</y>
<width>89</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Keyword File</string>
</property>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>20</x>
<y>134</y>
<width>465</width>
<height>65</height>
</rect>
</property>
<property name="text">
<string>The System Beep function doesn't work on all platform, so you can configure QtTermTCP to play a sound file instead of using Beep. You can set different files for each event if you wish. Select from the supplied sounds or choose your own .wav files. </string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="chooseInterval">
<property name="geometry">
<rect>
<x>416</x>
<y>263</y>
<width>61</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Choose</string>
</property>
</widget>
<widget class="QPushButton" name="chooseInbound">
<property name="geometry">
<rect>
<x>416</x>
<y>288</y>
<width>61</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Choose</string>
</property>
</widget>
<widget class="QPushButton" name="chooseKeyAlert">
<property name="geometry">
<rect>
<x>416</x>
<y>313</y>
<width>61</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Choose</string>
</property>
</widget>
<widget class="QCheckBox" name="Bells">
<property name="geometry">
<rect>
<x>24</x>
<y>15</y>
<width>289</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Use Bells (ascii BELL char makes a sound)</string>
</property>
</widget>
<widget class="QPushButton" name="chooseBells">
<property name="geometry">
<rect>
<x>416</x>
<y>238</y>
<width>61</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Choose</string>
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="geometry">
<rect>
<x>24</x>
<y>238</y>
<width>107</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Bells .wav File</string>
</property>
</widget>
<widget class="QPushButton" name="TestInbound">
<property name="geometry">
<rect>
<x>484</x>
<y>288</y>
<width>47</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Test</string>
</property>
</widget>
<widget class="QPushButton" name="testInterval">
<property name="geometry">
<rect>
<x>484</x>
<y>263</y>
<width>47</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Test</string>
</property>
</widget>
<widget class="QPushButton" name="TestKeyAlert">
<property name="geometry">
<rect>
<x>484</x>
<y>313</y>
<width>47</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Test</string>
</property>
</widget>
<widget class="QPushButton" name="testBells">
<property name="geometry">
<rect>
<x>484</x>
<y>238</y>
<width>47</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Test</string>
</property>
</widget>
<widget class="QLabel" name="label_8">
<property name="geometry">
<rect>
<x>36</x>
<y>336</y>
<width>471</width>
<height>25</height>
</rect>
</property>
<property name="text">
<string>It may take a second or two for sound to play after pressing Test button</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QComboBox" name="bellsFile">
<property name="geometry">
<rect>
<x>200</x>
<y>238</y>
<width>207</width>
<height>20</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::InsertAtTop</enum>
</property>
<item>
<property name="text">
<string>:/PCBeep</string>
</property>
</item>
<item>
<property name="text">
<string>:/LowTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/HighTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ring</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ding</string>
</property>
</item>
</widget>
<widget class="QComboBox" name="intervalFile">
<property name="geometry">
<rect>
<x>200</x>
<y>264</y>
<width>207</width>
<height>20</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::InsertAtTop</enum>
</property>
<item>
<property name="text">
<string>:/PCBeep</string>
</property>
</item>
<item>
<property name="text">
<string>:/LowTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/HighTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ring</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ding</string>
</property>
</item>
</widget>
<widget class="QComboBox" name="connectFile">
<property name="geometry">
<rect>
<x>200</x>
<y>288</y>
<width>207</width>
<height>20</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::InsertAtTop</enum>
</property>
<item>
<property name="text">
<string>:/PCBeep</string>
</property>
</item>
<item>
<property name="text">
<string>:/LowTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/HighTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ring</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ding</string>
</property>
</item>
</widget>
<widget class="QComboBox" name="keywordWAV">
<property name="geometry">
<rect>
<x>200</x>
<y>314</y>
<width>207</width>
<height>20</height>
</rect>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::InsertAtTop</enum>
</property>
<item>
<property name="text">
<string>:/PCBeep</string>
</property>
</item>
<item>
<property name="text">
<string>:/LowTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/HighTone</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ring</string>
</property>
</item>
<item>
<property name="text">
<string>:/Ding</string>
</property>
</item>
</widget>
</widget>
<resources/>
<connections/>
<buttongroups>
<buttongroup name="buttonGroup"/>
</buttongroups>
</ui>

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>432</width>
<height>286</height>
<height>319</height>
</rect>
</property>
<property name="windowTitle">
@ -17,7 +17,7 @@
<property name="geometry">
<rect>
<x>40</x>
<y>238</y>
<y>262</y>
<width>351</width>
<height>33</height>
</rect>
@ -58,7 +58,7 @@
<property name="geometry">
<rect>
<x>10</x>
<y>96</y>
<y>120</y>
<width>401</width>
<height>57</height>
</rect>
@ -69,7 +69,7 @@
<widget class="QLineEdit" name="Host">
<property name="geometry">
<rect>
<x>90</x>
<x>78</x>
<y>20</y>
<width>111</width>
<height>22</height>
@ -79,7 +79,7 @@
<widget class="QLineEdit" name="Port">
<property name="geometry">
<rect>
<x>330</x>
<x>290</x>
<y>21</y>
<width>47</width>
<height>22</height>
@ -102,7 +102,7 @@
<widget class="QLabel" name="label_21">
<property name="geometry">
<rect>
<x>280</x>
<x>222</x>
<y>24</y>
<width>47</width>
<height>13</height>
@ -139,8 +139,8 @@
<widget class="QGroupBox" name="groupBox_5">
<property name="geometry">
<rect>
<x>0</x>
<y>46</y>
<x>10</x>
<y>70</y>
<width>411</width>
<height>51</height>
</rect>
@ -151,7 +151,7 @@
<widget class="QComboBox" name="SerialPort">
<property name="geometry">
<rect>
<x>150</x>
<x>138</x>
<y>20</y>
<width>111</width>
<height>22</height>
@ -174,7 +174,7 @@
<widget class="QLabel" name="label_23">
<property name="geometry">
<rect>
<x>280</x>
<x>276</x>
<y>20</y>
<width>47</width>
<height>22</height>
@ -187,7 +187,7 @@
<widget class="QLineEdit" name="Speed">
<property name="geometry">
<rect>
<x>335</x>
<x>328</x>
<y>21</y>
<width>51</width>
<height>22</height>
@ -201,9 +201,9 @@
<widget class="QLabel" name="label_14">
<property name="geometry">
<rect>
<x>10</x>
<x>12</x>
<y>12</y>
<width>161</width>
<width>149</width>
<height>21</height>
</rect>
</property>
@ -214,7 +214,7 @@
<widget class="QCheckBox" name="KISSEnable">
<property name="geometry">
<rect>
<x>150</x>
<x>158</x>
<y>10</y>
<width>23</width>
<height>25</height>
@ -230,7 +230,7 @@
<widget class="QLabel" name="label_22">
<property name="geometry">
<rect>
<x>230</x>
<x>214</x>
<y>13</y>
<width>61</width>
<height>17</height>
@ -243,7 +243,7 @@
<widget class="QLineEdit" name="MYCALL">
<property name="geometry">
<rect>
<x>300</x>
<x>286</x>
<y>10</y>
<width>91</width>
<height>22</height>
@ -254,7 +254,7 @@
<property name="geometry">
<rect>
<x>25</x>
<y>168</y>
<y>192</y>
<width>47</width>
<height>13</height>
</rect>
@ -266,8 +266,8 @@
<widget class="QLineEdit" name="Paclen">
<property name="geometry">
<rect>
<x>100</x>
<y>165</y>
<x>98</x>
<y>189</y>
<width>47</width>
<height>22</height>
</rect>
@ -276,8 +276,8 @@
<widget class="QLabel" name="label_26">
<property name="geometry">
<rect>
<x>265</x>
<y>168</y>
<x>213</x>
<y>192</y>
<width>66</width>
<height>16</height>
</rect>
@ -289,8 +289,8 @@
<widget class="QLineEdit" name="Maxframe">
<property name="geometry">
<rect>
<x>340</x>
<y>165</y>
<x>288</x>
<y>189</y>
<width>47</width>
<height>22</height>
</rect>
@ -300,7 +300,7 @@
<property name="geometry">
<rect>
<x>25</x>
<y>202</y>
<y>226</y>
<width>47</width>
<height>13</height>
</rect>
@ -312,8 +312,8 @@
<widget class="QLineEdit" name="Frack">
<property name="geometry">
<rect>
<x>100</x>
<y>199</y>
<x>98</x>
<y>223</y>
<width>36</width>
<height>22</height>
</rect>
@ -322,8 +322,8 @@
<widget class="QLabel" name="label_28">
<property name="geometry">
<rect>
<x>265</x>
<y>201</y>
<x>213</x>
<y>225</y>
<width>47</width>
<height>13</height>
</rect>
@ -335,13 +335,42 @@
<widget class="QLineEdit" name="Retries">
<property name="geometry">
<rect>
<x>340</x>
<y>198</y>
<x>288</x>
<y>222</y>
<width>36</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_15">
<property name="geometry">
<rect>
<x>12</x>
<y>38</y>
<width>149</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Allow incoming connects</string>
</property>
</widget>
<widget class="QCheckBox" name="KISSListen">
<property name="geometry">
<rect>
<x>158</x>
<y>38</y>
<width>23</width>
<height>21</height>
</rect>
</property>
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
<resources/>
<connections>

BIN
PCBeep.wav Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,8 @@
#include <QMainWindow>
#include "ui_QtTermTCP.h"
//#include "ui_AGWParams.h"
//#include "ui_AGWConnect.h"
#include "ui_AlertSetup.h"
#include "ui_YAPPRxSize.h"
#include "ui_ColourConfig.h"
#include "ui_VARAConfig.h"
#include "ui_KISSConfig.h"
@ -28,6 +28,8 @@
#include <QMenuBar>
#include <QProcess>
#include <QtSerialPort/QSerialPort>
#include <QtMultimedia/QSound>
#include <QtMultimedia/QSoundEffect>
#define MAXHOSTS 16
#define MAXPORTS 64
@ -83,8 +85,10 @@ public:
int MonSaveLen;
char MonSave[4096];
char PortMonString[1024]; // 32 ports 32 Bytes
unsigned long long portmask;
char PortMonString[2048]; // 64 ports 32 Bytes
uint64_t portmask;
int EnableMonitor;
int mlocaltime;
int mtxparam;
int mcomparam;
int monUI;
@ -109,6 +113,11 @@ public:
char pageBuffer[4096];
QBasicTimer timer;
int sessNo; // Used to create unique log filename;
bool LogMonitor;
QFile * monLogfile;
char * monSpan;
protected:
void timerEvent(QTimerEvent *event) override;
@ -130,17 +139,22 @@ public:
QtTermTCP(QWidget *parent = NULL);
void closeEvent(QCloseEvent * event);
static void setFonts();
~QtTermTCP();
private slots:
void Disconnect();
void doYAPPSend();
void doYAPPSetRX();
void doYAPPSetSize();
void sizeaccept();
void sizereject();
void menuChecked();
void Connect();
void displayError(QAbstractSocket::SocketError socketError);
void readyRead();
void showContextMenu(const QPoint & point);
void autoConnectChecked();
void LreturnPressed(Ui_ListenSession * LUI);
void LDisconnect(Ui_ListenSession * LUI);
void SetupHosts();
@ -148,6 +162,17 @@ private slots:
void KISSTimerSlot();
void ListenSlot();
void AGWSlot();
void AlertSlot();
void chooseInboundWAV();
void chooseBellsWAV();
void chooseIntervalWAV();
void chooseAlertWAV();
void testInboundWAV();
void testBellsWAV();
void testIntervalWAV();
void testAlertWAV();
void alertAccept();
void alertReject();
void VARASlot();
void KISSSlot();
void deviceaccept();
@ -244,6 +269,7 @@ private:
QAction *AGWAction;
QAction *VARAAction;
QAction *KISSAction;
QAction *AlertAction;
QAction *quitAction;
QList<myTcpSocket*> _sockets;
@ -265,15 +291,19 @@ extern "C"
void setTraceOff(Ui_ListenSession * Sess);
void SetPortMonLine(int i, char * Text, int visible, int enabled);
void SaveSettings();
void myBeep();
void myBeep(QString * WAV);
void YAPPSendFile(Ui_ListenSession * Sess, char * FN);
int SocketSend(Ui_ListenSession * Sess, char * Buffer, int len);
void SendTraceOptions(Ui_ListenSession * Sess);
int SocketFlush(Ui_ListenSession * Sess);
extern void mySleep(int ms);
extern void setTraceOff(Ui_ListenSession * Sess);
void GetKeyWordFile();
}
extern QString ConnectWAV;
extern QString BellWAV;
extern QString AlertWAV;
char * strlop(char * buf, char delim);
extern "C" void setMenus(int State);

BIN
QtTermTCP.icns Normal file

Binary file not shown.

View File

@ -1,121 +0,0 @@
[General]
HostParams0=nottm.g8bpq.net|8011|gm8bpq|password|5 1 1 0 1 0 0 1\r|Pogo4
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xea\0\0\0\xaf\0\0\x3\xf6\0\0\x3h\0\0\0\xea\0\0\0\xaf\0\0\x3\xf6\0\0\x3h\0\0\0\0\0\0\0\0\a\x80\0\0\0\xea\0\0\0\xaf\0\0\x3\xf6\0\0\x3h)
HostParams1=192.168.1.63|8011|john|password||Pogo2
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\r\0\0\x2\x8c\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x3\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
HostParams2=127.0.0.1|8011|gm8bpq|password|c000000100000000 1 1 0 1 0 0 1\r|
HostParams3=192.168.1.131|8011|john|password|1 1 1 0 1 0 0 1\r|Slack
HostParams4=127.0.0.1|8021|john|password|c000000100000006 1 1 0 1 0 0 1\r|LinBPQ
HostParams5=192.168.1.18|8011|john|password|c00000010000002e 1 1 0 1 0 0 1\r|
HostParams6=|0||||
HostParams7=|0||||
HostParams8=|0||||
HostParams9=|0||||
HostParams10=|0||||
HostParams11=|0||||
HostParams12=|0||||
HostParams13=|0||||
HostParams14=|0||||
HostParams15=|0||||
Split=41
ChatMode=1
AutoTeletext=1
Bells=1
StripLF=1
AlertBeep=1
ConnectBeep=1
CurrentHost=0
YAPPPath=
listenPort=8015
listenEnable=1
listenCText=[PMS-2.3-C]\rHello>\r
convUTF8=0
PTT=None
PTTBAUD=0
PTTMode=1
CATHex=1
PTTOffString=
PTTOnString=
pttGPIOPin=17
pttGPIOPinR=17
CM108Addr=0xD8C:0x08
HamLibPort=4532
HamLibHost=127.0.0.1
FLRigPort=12345
FLRigHost=127.0.0.1
AGWEnable=0
AGWMonEnable=1
AGWTermCall=G8BPQ
AGWBeaconDest=
AGWBeaconPath=
AGWBeaconInterval=0
AGWBeaconPorts=
AGWBeaconText=
AGWHost=127.0.0.1
AGWPort=8001
AGWPaclen=80
AGWToCalls=G8BPQ-2, SWITCH,
KISSEnable=0
MYCALL=GM8BPQ
KISSHost=127.0.0.1
KISSMode=0
KISSPort=8110
KISSSerialPort=TCP
KISSBAUD=19200
VARAEnable=0
VARATermCall=G8BPQ
VARAHost=127.0.0.1
VARAPort=8310
VARAPath=C:\\VARA\\VARA.exe
VARAHostHF=127.0.0.1
VARAPortHF=8310
VARAPathHF=C:\\VARA\\VARA.exe
VARAHostFM=127.0.0.1
VARAPortFM=8300
VARAPathFM=C:\\VARA\\VARAFM.exe
VARAHostSAT=127.0.0.1
VARAPortSAT=8300
VARAPathSAT=C:\\VARA\\VARASAT.exe
VARA500=0
VARA2300=1
VARA2750=0
VARAHF=1
VARAFM=0
VARASAT=0
TabType=1 3 1 1 1 1 1 2 2 0
monBackground=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0)
monRxText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\xff\xff\0\0)
monTxText=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\0\0\0\0\0\0)
monOtherText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\0\0\0\0)
termBackground=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0)
outputText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\xff\xff\0\0)
EchoText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\0\0\0\0)
WarningText=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\0\0\0\0\0\0)
inputBackground=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0)
inputText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\0\0\0\0)
TermMode=2
singlemodeFormat=3
FontFamily=Courier
PointSize=10
Weight=50
Sessions="1|1, 17, 40, 205, 625, 990|"
VARAInit="P2P SESSION,WINLINK SESSION"
[AX25_A]
Retries=10
Maxframe=4
Paclen=128
FrackTime=8
IdleTime=180
SlotTime=100
Persist=128
RespTime=1500
TXFrmMode=1
FrameCollector=6
ExcludeCallsigns=
ExcludeAPRSFrmType=
KISSOptimization=0
DynamicFrack=0
BitRecovery=0
IPOLL=80
MyDigiCall=

View File

@ -3,6 +3,7 @@ QT += core gui
QT += network
QT += widgets
QT += serialport
QT += multimedia
TARGET = QtTermTCP
@ -40,7 +41,9 @@ FORMS += QtTermTCP.ui\
VARAConfig.ui \
KISSConfig.ui \
ColourConfig.ui \
AGWConnect.ui
YAPPRxSize.ui \
AGWConnect.ui \
AlertSetup.ui
RESOURCES += QtTermTCP.qrc

View File

@ -1,5 +1,10 @@
<RCC>
<qresource prefix="/QtTermTCP">
<file>QtTermTCP.ico</file>
</qresource>
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="LowTone">250x600Hz.wav</file>
<file alias="HighTone">250x1000Hz.wav</file>
<file alias="Ding">ding.wav</file>
<file alias="PCBeep">PCBeep.wav</file>
<file alias="Ring">Ring.wav</file>
<file>QtTermTCP.ico</file>
</qresource>
</RCC>

View File

@ -22,7 +22,7 @@
<ProjectGuid>{14F3B24E-473C-324E-A99D-3B679FCF5F67}</ProjectGuid>
<RootNamespace>QtTermTCP</RootNamespace>
<Keyword>QtVS_v304</Keyword>
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<QtMsBuild Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
@ -153,7 +153,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>shell32.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>shell32.lib;setupapi.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017\lib\Qt5Multimedia.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>-no-pie "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<DataExecutionPrevention>true</DataExecutionPrevention>
@ -279,7 +279,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>shell32.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>shell32.lib;setupapi.lib;%(AdditionalDependencies);C:\Qt\Qt5.14.2\5.14.2\msvc2017\lib\Qt5Multimediad.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>-no-pie "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<DataExecutionPrevention>true</DataExecutionPrevention>
@ -435,6 +435,7 @@
</QtUic>
<QtUic Include="AGWParams.ui">
</QtUic>
<QtUic Include="AlertSetup.ui" />
<QtUic Include="ColourConfig.ui" />
<QtUic Include="KISSConfig.ui">
</QtUic>
@ -444,6 +445,7 @@
</QtUic>
<QtUic Include="VARAConfig.ui">
</QtUic>
<QtUic Include="YAPPRxSize.ui" />
</ItemGroup>
<ItemGroup>
<None Include="QtTermTCP.ico" />

View File

@ -15,36 +15,36 @@
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>cpp;c;cxx;moc;h;def;odl;idl;res;</Extensions>
</Filter>
<Filter Include="Generated Files">
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Form Files\Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>cpp;c;cxx;moc;h;def;odl;idl;res;</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="AGWCode.cpp">
@ -83,30 +83,21 @@
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="TabDialog.h">
<Filter>Header Files</Filter>
<Filter>Form Files\Generated Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="debug\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
<Filter>Form Files\Generated Files</Filter>
</CustomBuild>
<CustomBuild Include="release\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
<Filter>Form Files\Generated Files</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<QtUic Include="AGWConnect.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="AGWParams.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="KISSConfig.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="ListenPort.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="QtTermTCP.ui">
<Filter>Form Files</Filter>
</QtUic>
@ -116,6 +107,21 @@
<QtUic Include="ColourConfig.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="YAPPRxSize.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="AGWConnect.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="ListenPort.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="KISSConfig.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="AlertSetup.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<None Include="QtTermTCP.ico">

View File

@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerWorkingDirectory>$(APPDATA)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LocalDebuggerWorkingDirectory>..\..\..\..\..\DevProgs\BPQ32</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<QtLastBackgroundBuild>2022-05-19T07:28:47.9186341Z</QtLastBackgroundBuild>
</PropertyGroup>
@ -8,15 +15,15 @@
<QtLastBackgroundBuild>2022-05-19T07:28:58.9302359Z</QtLastBackgroundBuild>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<QtLastBackgroundBuild>2023-04-12T13:14:53.1644359Z</QtLastBackgroundBuild>
<QtLastBackgroundBuild>2023-10-14T13:14:56.5532991Z</QtLastBackgroundBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="QtSettings">
<QtLastBackgroundBuild>2023-02-08T10:47:28.1396474Z</QtLastBackgroundBuild>
<QtLastBackgroundBuild>2023-10-14T13:14:56.7231497Z</QtLastBackgroundBuild>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<QtLastBackgroundBuild>2023-03-06T08:27:08.3742630Z</QtLastBackgroundBuild>
<QtLastBackgroundBuild>2023-10-14T13:14:55.9367569Z</QtLastBackgroundBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="QtSettings">
<QtLastBackgroundBuild>2023-02-08T10:47:27.7430420Z</QtLastBackgroundBuild>
<QtLastBackgroundBuild>2023-10-14T13:14:56.2561805Z</QtLastBackgroundBuild>
</PropertyGroup>
</Project>

Binary file not shown.

BIN
Ring.wav Normal file

Binary file not shown.

View File

@ -264,6 +264,22 @@ void AGWConnect::myaccept()
strcpy(CallTo, wCallTo->currentText().toUpper().toUtf8());
strcpy(Via, Digis->text().toUpper().toUtf8());
if (CallFrom[0] == 0)
{
QMessageBox msgBox;
msgBox.setText("Call From missing");
msgBox.exec();
return;
}
if (CallTo[0] == 0)
{
QMessageBox msgBox;
msgBox.setText("Call To missing");
msgBox.exec();
return;
}
// if digis have to form block with byte count followed by n 10 byte calls
if (Via[0])

View File

@ -38,7 +38,6 @@ void DecodeTeleText(Ui_ListenSession * Sess, char * page);
int Bells = TRUE;
int StripLF = FALSE;
int LogMonitor = FALSE;
int LogOutput = FALSE;
int SendDisconnected = TRUE;
int ChatMode = TRUE;
@ -56,12 +55,12 @@ TCHAR AlertFileName[256] = { 0 };
int ConnectBeep = TRUE;
int UseKeywords = TRUE;
char KeyWordsName[MAX_PATH] = "Keywords.sys";
QString KeyWordsFile = "Keywords.sys";
char ** KeyWords = NULL;
int NumberofKeyWords = 0;
// YAPP stuff
#define SOH 1
@ -112,6 +111,96 @@ char * strlop(char * buf, char delim)
return ptr;
}
#ifdef WIN32
char * strcasestr(char *ch1, char *ch2)
{
char *chN1, *chN2;
char *chNdx;
char *chRet = NULL;
chN1 = _strdup(ch1);
chN2 = _strdup(ch2);
if (chN1 && chN2)
{
chNdx = chN1;
while (*chNdx)
{
*chNdx = (char)tolower(*chNdx);
chNdx++;
}
chNdx = chN2;
while (*chNdx)
{
*chNdx = (char)tolower(*chNdx);
chNdx++;
}
chNdx = strstr(chN1, chN2);
if (chNdx)
chRet = ch1 + (chNdx - chN1);
}
free(chN1);
free(chN2);
return chRet;
}
#endif
void GetKeyWordFile()
{
DWORD FileSize;
char * ptr1, *ptr2;
char * KeyWordFile;
QFile file(KeyWordsFile);
if (!file.open(QIODevice::ReadOnly))
{
if (UseKeywords) // Don't need to alert if not being used
{
QMessageBox msgBox;
msgBox.setText("Keyword File " + KeyWordsFile + " not found");
msgBox.exec();
}
return;
}
FileSize = file.size();
KeyWordFile = (char *)malloc(FileSize + 1);
file.read(KeyWordFile, FileSize);
file.close();
KeyWordFile[FileSize] = 0;
ptr1 = KeyWordFile;
while (ptr1)
{
if (*ptr1 == '\n') ptr1++;
ptr2 = strtok_s(NULL, "\r\n", &ptr1);
if (ptr2)
{
if (*ptr2 != '#')
{
KeyWords = (char **)realloc(KeyWords, (++NumberofKeyWords + 1) * 4);
KeyWords[NumberofKeyWords] = ptr2;
}
}
else
break;
}
}
int CheckKeyWord(char * Word, char * Msg)
{
char * ptr1 = Msg, *ptr2;
@ -119,7 +208,7 @@ int CheckKeyWord(char * Word, char * Msg)
while (*ptr1) // Stop at end
{
ptr2 = strstr(ptr1, Word);
ptr2 = strcasestr(ptr1, Word);
if (ptr2 == NULL)
return FALSE; // OK
@ -140,25 +229,29 @@ int CheckKeyWord(char * Word, char * Msg)
int CheckKeyWords(UCHAR * Msg, int len)
{
char dupMsg[2048];
int i;
if (UseKeywords == 0 || NumberofKeyWords == 0)
return FALSE;
memcpy(dupMsg, Msg, len);
dupMsg[len] = 0;
//_strlwr(dupMsg);
// we need to null terminate Msg, so create a copy
unsigned char * copy = (unsigned char *)malloc(len + 1);
memcpy(copy, Msg, len);
copy[len] = 0;
for (i = 1; i <= NumberofKeyWords; i++)
{
if (CheckKeyWord(KeyWords[i], dupMsg))
if (CheckKeyWord(KeyWords[i], (char *)copy))
{
// Beep(660, 250);
myBeep(&AlertWAV);
free (copy);
return TRUE; // Alert
}
}
free(copy);
return FALSE; // OK
}
@ -316,13 +409,13 @@ MonLoop:
// Save for changes of Window
if (len < 1024)
if (len < 2048)
memcpy(Sess->PortMonString, ptr, len);
// Remove old menu
for (i = 0; i < 33; i++)
for (i = 0; i < 65; i++)
{
SetPortMonLine(i, (char *)"", 0, 0);
}
@ -339,7 +432,7 @@ MonLoop:
sprintf(msg, "Port %s", p);
if (m == 0)
m = 33;
m = 64;
if (Sess->portmask & (1ll << (m - 1)))
SetPortMonLine(portnum, msg, 1, 1);
@ -563,7 +656,7 @@ int InnerProcessYAPPMessage(Ui_ListenSession * Sess, UCHAR * Msg, int Len)
{
Mess[0] = NAK;
Mess[1] = sprintf(&Mess[2], "File %s size %d larger than limit %d\r", ARQFilename, FileSize, MaxRXSize);
mySleep(1000); // To give YAPP Msg tome to be sent
mySleep(1000); // To give YAPP Msg time to be sent
QueueMsg(Sess, Mess, Mess[1] + 2);
len = sprintf((char *)Buffer, "YAPP File %s size %d larger than limit %d\r", ARQFilename, FileSize, MaxRXSize);
@ -871,6 +964,8 @@ int InnerProcessYAPPMessage(Ui_ListenSession * Sess, UCHAR * Msg, int Len)
YAPPDate = 0; // Switch to Normal (No Checksum) Mode
// Drop through
case 6: // Send using YAPPC
// Start sending message

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TeleTextDialog</class>
<widget class="QDialog" name="TeleTextDialog">
<class>SizeDialog</class>
<widget class="QDialog" name="SizeDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>665</width>
<height>551</height>
<width>243</width>
<height>157</height>
</rect>
</property>
<property name="windowTitle">
@ -16,10 +16,10 @@
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>224</x>
<y>516</y>
<width>153</width>
<height>31</height>
<x>20</x>
<y>80</y>
<width>181</width>
<height>33</height>
</rect>
</property>
<layout class="QHBoxLayout">
@ -54,17 +54,27 @@
</item>
</layout>
</widget>
<widget class="QLabel" name="Page">
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>28</x>
<y>20</y>
<width>600</width>
<height>475</height>
<x>20</x>
<y>30</y>
<width>81</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>TextLabel</string>
<string>Max RX Size</string>
</property>
</widget>
<widget class="QLineEdit" name="maxSize">
<property name="geometry">
<rect>
<x>120</x>
<y>30</y>
<width>61</width>
<height>20</height>
</rect>
</property>
</widget>
</widget>
@ -73,7 +83,7 @@
<connection>
<sender>okButton</sender>
<signal>clicked()</signal>
<receiver>TeleTextDialog</receiver>
<receiver>SizeDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
@ -89,7 +99,7 @@
<connection>
<sender>cancelButton</sender>
<signal>clicked()</signal>
<receiver>TeleTextDialog</receiver>
<receiver>SizeDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">

45
ax25.c
View File

@ -312,7 +312,7 @@ void AX25_conn(TAX25Port * AX25Sess, int snd_ch, Byte mode)
{
case MODE_OTHER:
Len = sprintf(Msg, "Incomming Connection from %s\r", AX25Sess->corrcall);
Len = sprintf(Msg, "Incoming KISS Connection from %s\r", AX25Sess->corrcall);
break;
case MODE_OUR:
@ -1405,7 +1405,7 @@ end;
boolean is_last_digi(Byte *path)
{
int len = strlen(path);
int len = strlen((char *)path);
if (len == 14)
return TRUE;
@ -1469,7 +1469,7 @@ boolean is_correct_path(Byte * path, Byte pid)
int i;
if (pid == 0 || strchr(networks, pid))
if (pid == 0 || strchr((char *)networks, pid))
{
// Validate calls
@ -1678,7 +1678,7 @@ int number_digi(unsigned char * path)
void get_monitor_path(Byte * path, char * mycall, char * corrcall, char * digi)
{
Byte * digiptr = digi;
char * digiptr = digi;
digi[0] = 0;
@ -2622,7 +2622,7 @@ void KISS_add_stream(void * Socket)
KissConnections = realloc(KissConnections, (KISSConCount + 1) * sizeof(void *));
KISS = KissConnections[KISSConCount++] = malloc(sizeof(KISS));
KISS = KissConnections[KISSConCount++] = malloc(sizeof(TKISSMode));
KISS->Socket = Socket;
KISS->data_in = newString();
@ -2681,7 +2681,7 @@ TAX25Port * KISSConnectOut(void * Sess, char * CallFrom, char * CallTo, char * D
sprintf(path, "%s,%s", CallTo, CallFrom);
if (Digis)
if (Digis && Digis[0])
{
strcat(path, ",");
strcat(path, Digis);
@ -2744,19 +2744,25 @@ TAX25Port * KISSConnectOut(void * Sess, char * CallFrom, char * CallTo, char * D
char ShortDT[] = "HH:MM:SS";
int KISSLocalTime = 0;
int KISSMonEnable = 0;
int KISSMonNodes = 0;
char * ShortDateTime()
{
struct tm * tm;
time_t NOW = time(NULL);
tm = gmtime(&NOW);
if (KISSLocalTime)
tm = localtime(&NOW);
else
tm = gmtime(&NOW);
sprintf(ShortDT, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
return ShortDT;
}
char FrameData[1024] = "";
char * frame_monitor(string * frame, char * code, int tx_stat)
@ -2769,8 +2775,7 @@ char * frame_monitor(string * frame, char * code, int tx_stat)
Byte _data[512] = "";
Byte * p_data = _data;
int _datalen;
;
char CallFrom[10], CallTo[10], Digi[80];
char CallFrom[10], CallTo[10], Digi[80];
char TR = 'R';
char codestr[16] = "";
@ -2795,17 +2800,31 @@ char * frame_monitor(string * frame, char * code, int tx_stat)
if (tx_stat) // TX frame has control byte
decode_frame(frame->Data +1 , frame->Length - 1, path, data, &pid, &nr, &ns, &f_type, &f_id, &rpt, &pf, &cr);
decode_frame(frame->Data + 1, frame->Length - 1, path, data, &pid, &nr, &ns, &f_type, &f_id, &rpt, &pf, &cr);
else
decode_frame(frame->Data, frame->Length, path, data, &pid, &nr, &ns, &f_type, &f_id, &rpt, &pf, &cr);
datap = data->Data;
len = data->Length;
// if (pid == 0xCF)
if (pid == 0xCF)
{
if (datap[0] == 255) //Nodes broadcast
{
if (KISSMonNodes == 0)
{
freeString(data);
return 0;
}
}
}
// data = parse_NETROM(data, f_id);
// IP parsing
// IP parsing
// else if (pid == 0xCC)
// data = parse_IP(data);
// ARP parsing

11
ax25.h
View File

@ -125,17 +125,6 @@ typedef struct TStringList_T
} TStringList;
typedef struct AGWUser_t
{
void *socket;
string * data_in;
TStringList AGW_frame_buf;
boolean Monitor;
boolean Monitor_raw;
boolean reportFreqAndModem; // Can report modem and frequency to host
} AGWUser;
typedef struct TAX25Info_t
{
longint stat_s_pkt;

View File

@ -25,6 +25,8 @@ along with QtSoundModem. If not, see http://www.gnu.org/licenses
UCHAR TimerEvent = TIMER_EVENT_OFF;
extern int busy;
int listenEnable;
int KISSListen = 1;
void * KISSSockCopy[4];
extern UCHAR axMYCALL[7] = ""; // Mycall in ax.25
@ -1023,7 +1025,7 @@ void on_I(void * socket, TAX25Port * AX25Sess, int PID, Byte * path, string * d
}
/////////////////////////// U-FRAMES ////////////////////////////////////
void * ax25IncommingConnect(TAX25Port * AX25Sess);
void * ax25IncomingConnect(TAX25Port * AX25Sess);
void on_SABM(void * socket, TAX25Port * AX25Sess)
{
@ -1087,7 +1089,7 @@ void on_SABM(void * socket, TAX25Port * AX25Sess)
add_pkt_buf(AX25Sess, make_frame(NULL, AX25Sess->Path, 0, 0, 0, U_FRM, U_UA, FALSE, SET_P, SET_R));
if (ax25IncommingConnect(AX25Sess)) // Attach to Terminal
if (ax25IncomingConnect(AX25Sess)) // Attach to Terminal
AX25_conn(AX25Sess, AX25Sess->snd_ch, MODE_OTHER);
return;
@ -1550,7 +1552,7 @@ void analiz_frame(int snd_ch, string * frame, void * socket, boolean fecflag)
if (memcmp(path, axMYCALL, 7) != 0)
return; // ignore
if (listenEnable == 0)
if (KISSListen == 0)
{
set_DM(snd_ch, path);
freeString(data);

12
debug/moc_predefs.h Normal file
View File

@ -0,0 +1,12 @@
#define _MSC_EXTENSIONS
#define _INTEGRAL_MAX_BITS 64
#define _MSC_VER 1916
#define _MSC_FULL_VER 191627043
#define _MSC_BUILD 0
#define _WIN32
#define _M_IX86 600
#define _M_IX86_FP 2
#define _CPPRTTI
#define _DEBUG
#define _MT
#define _DLL

BIN
ding.wav Normal file

Binary file not shown.

15
makeit
View File

@ -1,10 +1,11 @@
cp --preserve /mnt/Source/QT/QtTermTCP/*.cpp ./
cp --preserve /mnt/Source/QT/QtTermTCP/*.c ./
cp --preserve /mnt/Source/QT/QtTermTCP/*.h ./
cp --preserve /mnt/Source/QT/QtTermTCP/*.ui ./
cp --preserve /mnt/Source/QT/QtTermTCP/*.pro ./
cp --preserve /mnt/Source/QT/QtTermTCP/*.qrc ./
cp --preserve /mnt/Source/QT/QtTermTCP/*.ico ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.cpp ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.c ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.h ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.ui ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.pro ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.qrc ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.ico ./
cp --preserve /mnt/Source/QT/QtTermTCP2/*.wav ./
qmake
make -j4

11
release/moc_predefs.h Normal file
View File

@ -0,0 +1,11 @@
#define _MSC_EXTENSIONS
#define _INTEGRAL_MAX_BITS 64
#define _MSC_VER 1916
#define _MSC_FULL_VER 191627043
#define _MSC_BUILD 0
#define _WIN32
#define _M_IX86 600
#define _M_IX86_FP 2
#define _CPPRTTI
#define _MT
#define _DLL

View File

@ -1,65 +0,0 @@
/********************************************************************************
** Form generated from reading UI file 'TCPHostConfig.ui'
**
** Created by: Qt User Interface Compiler version 5.14.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_TCPHOSTCONFIG_H
#define UI_TCPHOSTCONFIG_H
#include <QtCore/QVariant>
#include <QtGui/QIcon>
#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QTextEdit>
QT_BEGIN_NAMESPACE
class Ui_Dialog
{
public:
QDialogButtonBox *buttonBox;
QTextEdit *Host;
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
Dialog->setObjectName(QString::fromUtf8("Dialog"));
Dialog->resize(400, 300);
QIcon icon;
icon.addFile(QString::fromUtf8("QtTermTCP.ico"), QSize(), QIcon::Normal, QIcon::Off);
Dialog->setWindowIcon(icon);
buttonBox = new QDialogButtonBox(Dialog);
buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
buttonBox->setGeometry(QRect(30, 240, 341, 32));
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Save);
buttonBox->setCenterButtons(true);
Host = new QTextEdit(Dialog);
Host->setObjectName(QString::fromUtf8("Host"));
Host->setGeometry(QRect(184, 44, 104, 23));
retranslateUi(Dialog);
QObject::connect(buttonBox, SIGNAL(accepted()), Dialog, SLOT(accept()));
QObject::connect(buttonBox, SIGNAL(rejected()), Dialog, SLOT(reject()));
QMetaObject::connectSlotsByName(Dialog);
} // setupUi
void retranslateUi(QDialog *Dialog)
{
Dialog->setWindowTitle(QCoreApplication::translate("Dialog", "TCP Host Config", nullptr));
} // retranslateUi
};
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_TCPHOSTCONFIG_H