mirror of
https://github.com/g8bpq/QtSoundModem.git
synced 2025-04-22 05:11:13 +02:00
0.0.0.69
This commit is contained in:
parent
2e2f717d19
commit
88d646dbf1
12 changed files with 237 additions and 82 deletions
|
@ -54,6 +54,7 @@ extern int CWIDLeft;
|
|||
extern int CWIDRight;
|
||||
extern int CWIDType;
|
||||
extern bool afterTraffic;
|
||||
extern bool darkTheme;
|
||||
|
||||
extern "C" int RSID_SABM[4];
|
||||
extern "C" int RSID_UI[4];
|
||||
|
@ -303,6 +304,8 @@ void getSettings()
|
|||
|
||||
}
|
||||
|
||||
darkTheme = settings->value("Init/darkTheme", false).toBool();
|
||||
|
||||
delete(settings);
|
||||
}
|
||||
|
||||
|
@ -463,6 +466,8 @@ void saveSettings()
|
|||
settings->setValue("Modem/CWIDType", CWIDType);
|
||||
settings->setValue("Modem/afterTraffic", afterTraffic);
|
||||
|
||||
settings->setValue("Init/darkTheme", darkTheme);
|
||||
|
||||
saveAX25Params(0);
|
||||
saveAX25Params(1);
|
||||
saveAX25Params(2);
|
||||
|
|
|
@ -3041,6 +3041,9 @@
|
|||
<property name="text">
|
||||
<string>Save</string>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
|
215
QtSoundModem.cpp
215
QtSoundModem.cpp
|
@ -58,10 +58,12 @@ QLineEdit *chanOffsetLabel[4];
|
|||
QImage *DCDLed[4];
|
||||
|
||||
QImage *RXLevel;
|
||||
QImage *RXLevel2;
|
||||
|
||||
QLabel *WaterfallCopy[2];
|
||||
QLabel *HeaderCopy[2];
|
||||
QLabel * RXLevelCopy;
|
||||
QLabel * RXLevel2Copy;
|
||||
|
||||
QTextEdit * monWindowCopy;
|
||||
|
||||
|
@ -157,6 +159,7 @@ int WaterfallMin = 00;
|
|||
int WaterfallMax = 6000;
|
||||
|
||||
int Configuring = 0;
|
||||
bool lockWaterfall = false;
|
||||
|
||||
extern "C" float BinSize;
|
||||
|
||||
|
@ -175,6 +178,12 @@ QRgb red = qRgb(255, 0, 0);
|
|||
QRgb yellow = qRgb(255, 255, 0);
|
||||
QRgb cyan = qRgb(0, 255, 255);
|
||||
|
||||
QRgb txText = qRgb(192, 0, 0);
|
||||
QRgb rxText = qRgb(0, 0, 192);
|
||||
|
||||
bool darkTheme = true;
|
||||
bool minimizeonStart = true;
|
||||
|
||||
// Indexed colour list from ARDOPC
|
||||
|
||||
#define WHITE 0
|
||||
|
@ -307,8 +316,21 @@ void QtSoundModem::resizeEvent(QResizeEvent* event)
|
|||
|
||||
QRect r = geometry();
|
||||
|
||||
int A, B, C, W;
|
||||
int modemBoxHeight = 30;
|
||||
QRect r1 = ui.monWindow->geometry();
|
||||
QRect r2 = ui.centralWidget->geometry();
|
||||
|
||||
int modemBoxHeight = 34;
|
||||
int waterfallHeight = 118;
|
||||
|
||||
int Width = r.width();
|
||||
int Height = r.height() - 25;
|
||||
|
||||
int monitorTop;
|
||||
int monitorHeight;
|
||||
int sessionTop;
|
||||
int sessionHeight = 0;
|
||||
int waterfallsTop;
|
||||
int waterfallsHeight = 0;
|
||||
|
||||
ui.modeB->setVisible(soundChannel[1]);
|
||||
ui.centerB->setVisible(soundChannel[1]);
|
||||
|
@ -331,33 +353,44 @@ void QtSoundModem::resizeEvent(QResizeEvent* event)
|
|||
if (soundChannel[2] || soundChannel[3])
|
||||
modemBoxHeight = 60;
|
||||
|
||||
ui.WaterfallA->setVisible(0);
|
||||
ui.HeaderA->setVisible(0);
|
||||
ui.WaterfallB->setVisible(0);
|
||||
ui.HeaderB->setVisible(0);
|
||||
|
||||
A = r.height() - 25; // No waterfalls
|
||||
monitorTop = modemBoxHeight + 1;
|
||||
|
||||
if (UsingBothChannels && Secondwaterfall)
|
||||
if (UsingBothChannels)
|
||||
{
|
||||
// Two waterfalls
|
||||
|
||||
ui.WaterfallA->setVisible(1);
|
||||
ui.HeaderA->setVisible(1);
|
||||
ui.WaterfallB->setVisible(1);
|
||||
ui.HeaderB->setVisible(1);
|
||||
// Could have 2 but only want to display 2nd
|
||||
|
||||
A = r.height() - 258; // Top of Waterfall A
|
||||
B = A + 115; // Top of Waterfall B
|
||||
if (Firstwaterfall)
|
||||
{
|
||||
ui.WaterfallA->setVisible(1);
|
||||
ui.HeaderA->setVisible(1);
|
||||
waterfallsHeight += waterfallHeight;
|
||||
}
|
||||
if (Secondwaterfall)
|
||||
{
|
||||
ui.WaterfallB->setVisible(1);
|
||||
ui.HeaderB->setVisible(1);
|
||||
waterfallsHeight += waterfallHeight;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// One waterfall
|
||||
// Only one channel so can only be one waterfall
|
||||
|
||||
// Could be Left or Right
|
||||
|
||||
if (Firstwaterfall)
|
||||
{
|
||||
waterfallsHeight += waterfallHeight;
|
||||
|
||||
if (soundChannel[0] == RIGHT)
|
||||
{
|
||||
ui.WaterfallA->setVisible(0);
|
||||
ui.HeaderA->setVisible(0);
|
||||
ui.WaterfallB->setVisible(1);
|
||||
ui.HeaderB->setVisible(1);
|
||||
}
|
||||
|
@ -365,44 +398,51 @@ void QtSoundModem::resizeEvent(QResizeEvent* event)
|
|||
{
|
||||
ui.WaterfallA->setVisible(1);
|
||||
ui.HeaderA->setVisible(1);
|
||||
ui.WaterfallB->setVisible(0);
|
||||
ui.HeaderB->setVisible(0);
|
||||
}
|
||||
|
||||
A = r.height() - 145; // Top of Waterfall A
|
||||
}
|
||||
else
|
||||
A = r.height() - 25; // Top of Waterfall A
|
||||
}
|
||||
|
||||
C = A - 150; // Bottom of Monitor, Top of connection list
|
||||
W = r.width();
|
||||
|
||||
// Calc Positions of Waterfalls
|
||||
|
||||
ui.monWindow->setGeometry(QRect(0, modemBoxHeight, W, C - (modemBoxHeight + 26)));
|
||||
sessionTable->setGeometry(QRect(0, C, W, 175));
|
||||
|
||||
if (UsingBothChannels)
|
||||
if (AGWServ)
|
||||
{
|
||||
ui.HeaderA->setGeometry(QRect(0, A, W, 38));
|
||||
ui.WaterfallA->setGeometry(QRect(0, A + 38, W, 80));
|
||||
ui.HeaderB->setGeometry(QRect(0, B, W, 38));
|
||||
ui.WaterfallB->setGeometry(QRect(0, B + 38, W, 80));
|
||||
sessionTable->setVisible(true);
|
||||
sessionHeight = 150;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (soundChannel[0] == RIGHT)
|
||||
{
|
||||
ui.HeaderB->setGeometry(QRect(0, A, W, 38));
|
||||
ui.WaterfallB->setGeometry(QRect(0, A + 38, W, 80));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.HeaderA->setGeometry(QRect(0, A, W, 38));
|
||||
ui.WaterfallA->setGeometry(QRect(0, A + 38, W, 80));
|
||||
}
|
||||
sessionTable->setVisible(false);
|
||||
}
|
||||
|
||||
monitorHeight = Height - sessionHeight - waterfallsHeight - modemBoxHeight;
|
||||
waterfallsTop = Height - waterfallsHeight;
|
||||
sessionTop = Height - (sessionHeight + waterfallsHeight);
|
||||
|
||||
ui.monWindow->setGeometry(QRect(0, monitorTop, Width, monitorHeight));
|
||||
|
||||
if (AGWServ)
|
||||
sessionTable->setGeometry(QRect(0, sessionTop, Width, sessionHeight));
|
||||
|
||||
if (UsingBothChannels && Firstwaterfall && Secondwaterfall)
|
||||
{
|
||||
ui.HeaderA->setGeometry(QRect(0, waterfallsTop, Width, 38));
|
||||
ui.WaterfallA->setGeometry(QRect(0, waterfallsTop + 38, Width, 80));
|
||||
ui.HeaderB->setGeometry(QRect(0, waterfallsTop + waterfallHeight, Width, 38));
|
||||
ui.WaterfallB->setGeometry(QRect(0, waterfallsTop + waterfallHeight + 38, Width, 80));
|
||||
return;
|
||||
}
|
||||
|
||||
// We are only displaying one channel. Normaly will be Waterfall A unless UsingBothChannels but only displaying Right
|
||||
|
||||
if (UsingBothChannels && Firstwaterfall == 0) // Only Right
|
||||
{
|
||||
ui.HeaderB->setGeometry(QRect(0, waterfallsTop, Width, 38));
|
||||
ui.WaterfallB->setGeometry(QRect(0, waterfallsTop + 38, Width, 80));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.HeaderA->setGeometry(QRect(0, waterfallsTop, Width, 38));
|
||||
ui.WaterfallA->setGeometry(QRect(0, waterfallsTop + 38, Width, 80));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QAction * setupMenuLine(QMenu * Menu, char * Label, QObject * parent, int State)
|
||||
|
@ -530,6 +570,8 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent)
|
|||
|
||||
mythis = this;
|
||||
|
||||
getSettings();
|
||||
|
||||
QSettings mysettings("QtSoundModem.ini", QSettings::IniFormat);
|
||||
|
||||
family = mysettings.value("FontFamily", "Courier New").toString();
|
||||
|
@ -606,7 +648,7 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent)
|
|||
restoreGeometry(mysettings.value("geometry").toByteArray());
|
||||
restoreState(mysettings.value("windowState").toByteArray());
|
||||
|
||||
sessionTable = new QTableWidget(this);
|
||||
sessionTable = new QTableWidget(ui.centralWidget);
|
||||
|
||||
sessionTable->verticalHeader()->setVisible(FALSE);
|
||||
sessionTable->verticalHeader()->setDefaultSectionSize(20);
|
||||
|
@ -615,7 +657,7 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent)
|
|||
sessionTable->setColumnCount(12);
|
||||
m_TableHeader << "MyCall" << "DestCall" << "Status" << "Sent pkts" << "Sent Bytes" << "Rcvd pkts" << "Rcvd bytes" << "Rcvd FC" << "FEC corr" << "CPS TX" << "CPS RX" << "Direction";
|
||||
|
||||
sessionTable->setStyleSheet("QHeaderView::section { background-color:rgb(224, 224, 224) }");
|
||||
mysetstyle();
|
||||
|
||||
sessionTable->setHorizontalHeaderLabels(m_TableHeader);
|
||||
sessionTable->setColumnWidth(0, 80);
|
||||
|
@ -679,7 +721,6 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent)
|
|||
ui.RXLevel->setPixmap(QPixmap::fromImage(*RXLevel));
|
||||
RXLevelCopy = ui.RXLevel;
|
||||
|
||||
|
||||
DCDLabel[0] = new QLabel(this);
|
||||
DCDLabel[0]->setObjectName(QString::fromUtf8("DCDLedA"));
|
||||
DCDLabel[0]->setGeometry(QRect(280, 31, 12, 12));
|
||||
|
@ -720,7 +761,6 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent)
|
|||
chanOffsetLabel[2] = ui.RXOffsetC;
|
||||
chanOffsetLabel[3] = ui.RXOffsetD;
|
||||
|
||||
|
||||
// Waterfall[0]->setColorCount(16);
|
||||
// Waterfall[1]->setColorCount(16);
|
||||
|
||||
|
@ -1276,10 +1316,13 @@ void QtSoundModem::clickedSlot()
|
|||
{
|
||||
bool ok;
|
||||
Font = QFontDialog::getFont(&ok, QFont(Font, this));
|
||||
|
||||
if (ok)
|
||||
{
|
||||
// the user clicked OK and font is set to the font the user selected
|
||||
QApplication::setFont(Font);
|
||||
sessionTable->horizontalHeader()->setFont(Font);
|
||||
|
||||
saveSettings();
|
||||
}
|
||||
else
|
||||
|
@ -1287,7 +1330,7 @@ void QtSoundModem::clickedSlot()
|
|||
// the user canceled the dialog; font is set to the initial
|
||||
// value, in this case Helvetica [Cronyx], 10
|
||||
|
||||
QApplication::setFont(Font);
|
||||
// QApplication::setFont(Font);
|
||||
|
||||
}
|
||||
return;
|
||||
|
@ -2139,6 +2182,7 @@ void QtSoundModem::doDevices()
|
|||
Dev->DualPTT->setChecked(DualPTT);
|
||||
|
||||
Dev->multiCore->setChecked(multiCore);
|
||||
Dev->darkTheme->setChecked(darkTheme);
|
||||
|
||||
Dev->WaterfallMin->setCurrentIndex(Dev->WaterfallMin->findText(QString::number(WaterfallMin), Qt::MatchFixedString));
|
||||
Dev->WaterfallMax->setCurrentIndex(Dev->WaterfallMax->findText(QString::number(WaterfallMax), Qt::MatchFixedString));
|
||||
|
@ -2150,6 +2194,33 @@ void QtSoundModem::doDevices()
|
|||
|
||||
}
|
||||
|
||||
void QtSoundModem::mysetstyle()
|
||||
{
|
||||
if (darkTheme)
|
||||
{
|
||||
qApp->setStyleSheet(
|
||||
"QWidget {color: white; background-color: black}"
|
||||
"QTabBar::tab {color: rgb(127, 127, 127); background-color: black}"
|
||||
"QTabBar::tab::selected {color: white}"
|
||||
"QPushButton {border-style: outset; border-width: 2px; border-color: rgb(127, 127, 127)}"
|
||||
"QPushButton::default {border-style: outset; border-width: 2px; border-color: white}");
|
||||
|
||||
sessionTable->setStyleSheet("QHeaderView::section { background-color:rgb(40, 40, 40) }");
|
||||
|
||||
txText = qRgb(255, 127, 127);
|
||||
rxText = qRgb(173, 216, 230);
|
||||
}
|
||||
else
|
||||
{
|
||||
qApp->setStyleSheet("");
|
||||
|
||||
sessionTable->setStyleSheet("QHeaderView::section { background-color:rgb(224, 224, 224) }");
|
||||
|
||||
txText = qRgb(192, 0, 0);
|
||||
rxText = qRgb(0, 0, 192);
|
||||
}
|
||||
}
|
||||
|
||||
void QtSoundModem::deviceaccept()
|
||||
{
|
||||
QVariant Q = Dev->inputDevice->currentText();
|
||||
|
@ -2251,7 +2322,6 @@ void QtSoundModem::deviceaccept()
|
|||
if (UsingLeft && UsingRight)
|
||||
UsingBothChannels = 1;
|
||||
|
||||
|
||||
SCO = Dev->singleChannelOutput->isChecked();
|
||||
raduga = Dev->colourWaterfall->isChecked();
|
||||
AGWServ = Dev->AGWEnabled->isChecked();
|
||||
|
@ -2275,6 +2345,8 @@ void QtSoundModem::deviceaccept()
|
|||
DualPTT = Dev->DualPTT->isChecked();
|
||||
TX_rotate = Dev->txRotation->isChecked();
|
||||
multiCore = Dev->multiCore->isChecked();
|
||||
darkTheme = Dev->darkTheme->isChecked();
|
||||
mysetstyle();
|
||||
|
||||
if (Dev->CAT->isChecked())
|
||||
PTTMode = PTTCAT;
|
||||
|
@ -2406,8 +2478,12 @@ void QtSoundModem::handleButton(int Port, int Type)
|
|||
doCalib(Port, Type);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void QtSoundModem::doRestartWF()
|
||||
{
|
||||
lockWaterfall = true;
|
||||
|
||||
if (Firstwaterfall)
|
||||
{
|
||||
initWaterfall(0, 0);
|
||||
|
@ -2424,15 +2500,31 @@ void QtSoundModem::doRestartWF()
|
|||
delete(ui.RXLevel);
|
||||
ui.RXLevel = new QLabel(ui.centralWidget);
|
||||
RXLevelCopy = ui.RXLevel;
|
||||
ui.RXLevel->setGeometry(QRect(780, 17, 150, 12));
|
||||
// ui.RXLevel->setFrameShape(QFrame::Box);
|
||||
// ui.RXLevel->setFrameShadow(QFrame::Sunken);
|
||||
ui.RXLevel->setGeometry(QRect(780, 14, 150, 11));
|
||||
ui.RXLevel->setFrameShape(QFrame::Box);
|
||||
ui.RXLevel->setFrameShadow(QFrame::Sunken);
|
||||
|
||||
delete(RXLevel2);
|
||||
delete(ui.RXLevel2);
|
||||
|
||||
ui.RXLevel2 = new QLabel(ui.centralWidget);
|
||||
RXLevel2Copy = ui.RXLevel2;
|
||||
|
||||
ui.RXLevel2->setGeometry(QRect(780, 23, 150, 11));
|
||||
ui.RXLevel2->setFrameShape(QFrame::Box);
|
||||
ui.RXLevel2->setFrameShadow(QFrame::Sunken);
|
||||
|
||||
RXLevel = new QImage(150, 10, QImage::Format_RGB32);
|
||||
RXLevel->fill(cyan);
|
||||
// ui.RXLevel->setPixmap(QPixmap::fromImage(*RXLevel));
|
||||
|
||||
RXLevel2 = new QImage(150, 10, QImage::Format_RGB32);
|
||||
RXLevel2->fill(white);
|
||||
|
||||
ui.RXLevel->setVisible(1);
|
||||
if (UsingBothChannels)
|
||||
ui.RXLevel2->setVisible(1);
|
||||
|
||||
lockWaterfall = false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2574,7 +2666,6 @@ void QtSoundModem::RefreshWaterfall(int snd_ch, unsigned char * Data)
|
|||
ui.WaterfallA->setPixmap(QPixmap::fromImage(*Waterfall[0]));
|
||||
}
|
||||
|
||||
|
||||
void QtSoundModem::sendtoTrace(char * Msg, int tx)
|
||||
{
|
||||
const QTextCursor old_cursor = monWindowCopy->textCursor();
|
||||
|
@ -2587,9 +2678,9 @@ void QtSoundModem::sendtoTrace(char * Msg, int tx)
|
|||
// Insert the text at the position of the cursor (which is the end of the document).
|
||||
|
||||
if (tx)
|
||||
monWindowCopy->setTextColor(qRgb(192, 0, 0));
|
||||
monWindowCopy->setTextColor(txText);
|
||||
else
|
||||
monWindowCopy->setTextColor(qRgb(0, 0, 192));
|
||||
monWindowCopy->setTextColor(rxText);
|
||||
|
||||
monWindowCopy->textCursor().insertText(Msg);
|
||||
|
||||
|
@ -2833,6 +2924,9 @@ extern "C" void doWaterfall(int snd_ch)
|
|||
if (Closing)
|
||||
return;
|
||||
|
||||
if (lockWaterfall)
|
||||
return;
|
||||
|
||||
// if (multiCore) // Run modems in separate threads
|
||||
// _beginthread(doWaterfallThread, 0, xx);
|
||||
// else
|
||||
|
@ -2849,6 +2943,9 @@ void doWaterfallThread(void * param)
|
|||
int snd_ch = (int)(size_t)param;
|
||||
int WaterfallNumber = snd_ch;
|
||||
|
||||
if (lockWaterfall)
|
||||
return;
|
||||
|
||||
if (snd_ch == 1 && UsingLeft == 0) // Only using right
|
||||
snd_ch = 0; // Samples are in first buffer
|
||||
|
||||
|
@ -2868,6 +2965,7 @@ void doWaterfallThread(void * param)
|
|||
if (Configuring)
|
||||
return;
|
||||
|
||||
RefreshLevel(CurrentLevel); // Signal Level
|
||||
|
||||
hFFTSize = FFTSize / 2;
|
||||
|
||||
|
@ -2950,16 +3048,19 @@ void doWaterfallThread(void * param)
|
|||
|
||||
SMUpdateBusyDetector(snd_ch, RealOut, ImagOut);
|
||||
|
||||
RefreshLevel(CurrentLevel); // Signal Level
|
||||
// we always do fft so we can get centre freq and do busy detect. Bot only upodate waterfall if on display
|
||||
|
||||
if (bm == 0)
|
||||
return;
|
||||
|
||||
if ((Firstwaterfall == 0 && snd_ch == 0) || (Secondwaterfall == 0 && snd_ch == 1))
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
p = Line;
|
||||
lineLen = bm->bytesPerLine();
|
||||
lineLen = 4096;
|
||||
|
||||
if (raduga == DISP_MONO)
|
||||
{
|
||||
|
|
|
@ -39,6 +39,7 @@ private slots:
|
|||
|
||||
void CWIDTimer();
|
||||
void doDevices();
|
||||
void mysetstyle();
|
||||
void updateFont();
|
||||
void MinimizetoTray();
|
||||
void TrayActivated(QSystemTrayIcon::ActivationReason reason);
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>962</width>
|
||||
<height>721</height>
|
||||
<width>993</width>
|
||||
<height>900</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
|
@ -171,9 +171,9 @@
|
|||
<property name="geometry">
|
||||
<rect>
|
||||
<x>690</x>
|
||||
<y>0</y>
|
||||
<y>2</y>
|
||||
<width>73</width>
|
||||
<height>16</height>
|
||||
<height>13</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
|
@ -412,7 +412,7 @@
|
|||
<x>600</x>
|
||||
<y>2</y>
|
||||
<width>87</width>
|
||||
<height>16</height>
|
||||
<height>13</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
|
@ -487,9 +487,9 @@
|
|||
<property name="geometry">
|
||||
<rect>
|
||||
<x>780</x>
|
||||
<y>17</y>
|
||||
<y>14</y>
|
||||
<width>150</width>
|
||||
<height>12</height>
|
||||
<height>11</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
|
@ -508,7 +508,7 @@
|
|||
<x>780</x>
|
||||
<y>0</y>
|
||||
<width>91</width>
|
||||
<height>16</height>
|
||||
<height>13</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
|
@ -526,13 +526,32 @@
|
|||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="RXLevel2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>780</x>
|
||||
<y>23</y>
|
||||
<width>150</width>
|
||||
<height>11</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>962</width>
|
||||
<width>993</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMTest</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommandArguments>
|
||||
</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommandArguments>-stylesheet StyleSheet.css</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LocalDebuggerWorkingDirectory>c:\devprogs\bpq32\SMSAT2</LocalDebuggerWorkingDirectory>
|
||||
|
@ -14,21 +13,22 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LocalDebuggerWorkingDirectory>.\debug</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommandArguments>-stylesheet StyleSheet.css</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMSat</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<QtLastBackgroundBuild>2023-09-26T11:58:59.9128543Z</QtLastBackgroundBuild>
|
||||
<QtLastBackgroundBuild>2023-10-11T15:46:02.9163848Z</QtLastBackgroundBuild>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="QtSettings">
|
||||
<QtLastBackgroundBuild>2023-09-26T11:59:00.0378577Z</QtLastBackgroundBuild>
|
||||
<QtLastBackgroundBuild>2023-10-11T15:46:03.0449216Z</QtLastBackgroundBuild>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<QtLastBackgroundBuild>2023-09-26T11:59:00.1388610Z</QtLastBackgroundBuild>
|
||||
<QtLastBackgroundBuild>2023-10-11T15:46:03.1725109Z</QtLastBackgroundBuild>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="QtSettings">
|
||||
<QtLastBackgroundBuild>2023-09-26T11:59:00.2228656Z</QtLastBackgroundBuild>
|
||||
<QtLastBackgroundBuild>2023-10-11T15:46:03.2783249Z</QtLastBackgroundBuild>
|
||||
</PropertyGroup>
|
||||
</Project>
|
2
SMMain.c
2
SMMain.c
|
@ -1203,7 +1203,7 @@ void CM108_set_ptt(int PTTState)
|
|||
|
||||
}
|
||||
|
||||
float amplitudes[4] = { 32767, 32767, 32767, 32767 };
|
||||
float amplitudes[4] = { 32000, 32000, 32000, 32000 };
|
||||
extern float amplitude;
|
||||
|
||||
void RadioPTT(int snd_ch, BOOL PTTState)
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
// My port of UZ7HO's Soundmodem
|
||||
//
|
||||
|
||||
#define VersionString "0.0.0.68"
|
||||
#define VersionBytes {0, 0, 0, 68}
|
||||
#define VersionString "0.0.0.69"
|
||||
#define VersionBytes {0, 0, 0, 69}
|
||||
|
||||
// Added FX25. 4x100 FEC and V27 not Working and disabled
|
||||
|
||||
|
@ -167,6 +167,11 @@
|
|||
// Fix Waterfall display when using right channel only
|
||||
// Allow PTT device to be added
|
||||
|
||||
// .69 Add basic Dark Theme
|
||||
// Fix some timing bugs in Waterfall and RX Level refresh
|
||||
// Only display session table if AGW interface is enabled
|
||||
// Fix operation with both left and right channels in use
|
||||
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#define _MSC_EXTENSIONS
|
||||
#define _INTEGRAL_MAX_BITS 64
|
||||
#define _MSC_VER 1916
|
||||
#define _MSC_FULL_VER 191627043
|
||||
#define _MSC_FULL_VER 191627045
|
||||
#define _MSC_BUILD 0
|
||||
#define _WIN32
|
||||
#define _M_IX86 600
|
||||
|
|
|
@ -151,7 +151,7 @@
|
|||
<rect>
|
||||
<x>20</x>
|
||||
<y>304</y>
|
||||
<width>251</width>
|
||||
<width>231</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -582,6 +582,19 @@
|
|||
<string>to</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="darkTheme">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>260</x>
|
||||
<y>304</y>
|
||||
<width>161</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Dark Theme</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="geometry">
|
||||
|
|
3
main.cpp
3
main.cpp
|
@ -53,6 +53,8 @@ int main(int argc, char *argv[])
|
|||
|
||||
qDebug() << Title;
|
||||
|
||||
|
||||
|
||||
if (nonGUIMode)
|
||||
a = new QCoreApplication(argc, argv);
|
||||
else
|
||||
|
@ -60,6 +62,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
getSettings();
|
||||
|
||||
|
||||
t = new workerThread;
|
||||
|
||||
if (nonGUIMode == 0)
|
||||
|
|
15
sm_main.c
15
sm_main.c
|
@ -65,11 +65,8 @@ int TXPort = 8884;
|
|||
|
||||
BOOL Firstwaterfall = 1;
|
||||
BOOL Secondwaterfall = 1;
|
||||
|
||||
int multiCore = FALSE;
|
||||
|
||||
|
||||
|
||||
BOOL MinOnStart = 0;
|
||||
//RS TReedSolomon;
|
||||
// Form1 TForm1;
|
||||
|
@ -863,6 +860,8 @@ void runModemthread(void * param)
|
|||
|
||||
// I think this processes a buffer of samples
|
||||
|
||||
int Toggle = 0;
|
||||
|
||||
void BufferFull(short * Samples, int nSamples) // These are Stereo Samples
|
||||
{
|
||||
word i, i1, j;
|
||||
|
@ -1064,6 +1063,9 @@ void BufferFull(short * Samples, int nSamples) // These are Stereo Samples
|
|||
|
||||
// Collect samples for both channels if needed
|
||||
|
||||
Toggle++;
|
||||
|
||||
|
||||
Needed = FFTSize - fftCount;
|
||||
|
||||
if (Needed <= rx_bufsize)
|
||||
|
@ -1076,7 +1078,9 @@ void BufferFull(short * Samples, int nSamples) // These are Stereo Samples
|
|||
data1 += 2;
|
||||
}
|
||||
|
||||
doWaterfall(FirstWaterfallChan);
|
||||
if ((Toggle & 1) || (UsingBothChannels == 0))
|
||||
doWaterfall(FirstWaterfallChan);
|
||||
|
||||
|
||||
if (data2)
|
||||
{
|
||||
|
@ -1085,7 +1089,8 @@ void BufferFull(short * Samples, int nSamples) // These are Stereo Samples
|
|||
*ptr2++ = *data2;
|
||||
data2 += 2;
|
||||
}
|
||||
doWaterfall(1);
|
||||
if (((Toggle & 1) == 0))
|
||||
doWaterfall(1);
|
||||
}
|
||||
|
||||
remainingSamples = rx_bufsize - Needed;
|
||||
|
|
Loading…
Add table
Reference in a new issue