Merge branch 'creator-widgets' of gitlab.com:eliggett/wfview into creator-widgets

creator-widgets
Elliott Liggett 2024-02-10 12:02:07 -08:00
commit 64929b549a
13 zmienionych plików z 194 dodań i 83 usunięć

Wyświetl plik

@ -120,7 +120,7 @@ void cachingQueue::add(queuePriority prio ,queueItem item)
if (item.command != funcNone)
{
QMutexLocker locker(&mutex);
if (!item.recurring || isRecurring(item.command) != prio)
if (!item.recurring || isRecurring(item.command,item.vfo) != prio)
{
if (item.recurring && prio == queuePriority::priorityImmediate) {
qWarning() << "Warning, cannot add recurring command with immediate priority!" << funcString[item.command];

Wyświetl plik

@ -1,10 +1,11 @@
#!/bin/bash
echo "This script copies the following items into your system:"
echo ""
echo "icon: wfview.png to /usr/share/pixmaps/"
echo "icon: unix_icons/wfview.png to /usr/share/icons/hicolor/256x256/apps/"
echo "wfview application to /usr/local/bin/"
echo "wfview.desktop to /usr/share/applications/"
echo "qdarkstyle stylesheet to /usr/share/wfview/stylesheets"
echo "org.wfview.wfview.metainfo.xml metadata file to /usr/share/metainfo/"
echo "qdarkstyle stylesheet to /usr/share/wfview/stylesheets/"
echo ""
echo "This script MUST be run from the build directory. Do not run it from the source directory!"
@ -30,7 +31,8 @@ echo ""
cp wfview /usr/local/bin/wfview
cp wfview.desktop /usr/share/applications/
cp wfview.png /usr/share/pixmaps/
cp unix_icons/wfview.png /usr/share/icons/hicolor/256x256/apps/
cp org.wfview.wfview.metainfo.xml /usr/share/metainfo/
mkdir -p /usr/share/wfview/stylesheets
cp -r qdarkstyle /usr/share/wfview/stylesheets/
cp -r rigs /usr/share/wfview/

Wyświetl plik

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>org.wfview.wfview</id>
<launchable type="desktop-id">wfview.desktop</launchable>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0-or-later</project_license>
<name>wfview</name>
<developer_name>Elliott H. Liggett</developer_name>
<summary>Open Source interface for Icom transceivers</summary>
<description>
<p>
wfview is a program developed by amateur radio enthusiasts to control modern Icom ham radios. It provides the user with controls
that may be comfortably operated from a keyboard, mouse, or touch screen interface. wfview is free and open source software.
</p>
<p>
wfview has been developed with an eye towards compatibility. Even though our target platform consists of modern-era transceivers,
wfviews command dictionary is focused on commands with the most compatibility. Many of Icoms transceivers from the last 20 years
will work to some degree with wfview, and we are always adding more.
</p>
</description>
<screenshots>
<screenshot type="default">
<image type="source">https://wfview.org/wp-content/uploads/2021/11/7300-remote-screenshot.png</image>
</screenshot>
</screenshots>
<url type="homepage">https://wfview.org</url>
<url type="bugtracker">https://gitlab.com/eliggett/wfview/-/issues</url>
<content_rating type="oars-1.1"/>
</component>

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 53 KiB

Wyświetl plik

@ -797,7 +797,7 @@ Periodic\27\Command=Tuner/ATU Status
Periodic\27\VFO=0
Periodic\28\Priority=Medium Low
Periodic\28\Command=Tuning Step
Periodic\28\VFO=-1
Periodic\28\VFO=0
Periodic\29\Priority=Medium
Periodic\29\Command=Unselected Freq
Periodic\29\VFO=1

Wyświetl plik

@ -1499,6 +1499,7 @@ void spectrumScope::receivePassband(quint16 pass)
void spectrumScope::selected(bool en)
{
isActive = en;
if (en)
this->setStyleSheet("QGroupBox { border:1px solid red;}");
else
@ -1636,21 +1637,53 @@ void spectrumScope::wfTheme(int num)
configTheme->setCurrentIndex(configTheme->findData(currentTheme));
}
void spectrumScope::setPBTInner (double hz) {
PBTInner = hz;
double pbFreq = ((double)(this->PBTInner) / this->passbandWidth) * 127.0;
qint16 newFreq = pbFreq + 128;
if (newFreq >= 0 && newFreq <= 255) {
configPbtInner->setValue(newFreq);
void spectrumScope::setPBTInner (uchar val) {
qint16 shift = (qint16)(val - 128);
double tempVar = ceil((shift / 127.0) * passbandWidth * 20000.0) / 20000.0;
// tempVar now contains value to the nearest 50Hz If CW mode, add/remove the cwPitch.
double pitch = 0.0;
if ((this->mode.mk == modeCW || this->mode.mk == modeCW_R) && this->passbandWidth > 0.0006)
{
pitch = (600.0 - cwPitch) / 1000000.0;
}
double newPBT = round((tempVar + pitch) * 200000.0) / 200000.0; // Nearest 5Hz.
if (newPBT != this->PBTInner) {
this->PBTInner = newPBT;
qInfo(logSystem()) << "New PBT Inner value received" << this->PBTInner << "CW Pitch" << this->cwPitch << "Passband" << this->passbandWidth;
double pbFreq = ((double)(this->PBTInner) / this->passbandWidth) * 127.0;
qint16 newFreq = pbFreq + 128;
if (newFreq >= 0 && newFreq <= 255) {
configPbtInner->blockSignals(true);
configPbtInner->setValue(newFreq);
configPbtInner->blockSignals(false);
}
}
}
void spectrumScope::setPBTOuter (double hz) {
PBTOuter = hz;
double pbFreq = ((double)(this->PBTOuter) / this->passbandWidth) * 127.0;
qint16 newFreq = pbFreq + 128;
if (newFreq >= 0 && newFreq <= 255) {
configPbtOuter->setValue(newFreq);
void spectrumScope::setPBTOuter (uchar val) {
qint16 shift = (qint16)(val - 128);
double tempVar = ceil((shift / 127.0) * this->passbandWidth * 20000.0) / 20000.0;
// tempVar now contains value to the nearest 50Hz If CW mode, add/remove the cwPitch.
double pitch = 0.0;
if ((this->mode.mk == modeCW || this->mode.mk == modeCW_R) && this->passbandWidth > 0.0006)
{
pitch = (600.0 - cwPitch) / 1000000.0;
}
double newPBT = round((tempVar + pitch) * 200000.0) / 200000.0; // Nearest 5Hz.
if (newPBT != this->PBTOuter) {
this->PBTOuter = newPBT;
qInfo(logSystem()) << "New PBT Outer value received" << this->PBTOuter << "CW Pitch" << this->cwPitch << "Passband" << this->passbandWidth;
double pbFreq = ((double)(this->PBTOuter) / this->passbandWidth) * 127.0;
qint16 newFreq = pbFreq + 128;
if (newFreq >= 0 && newFreq <= 255) {
configPbtOuter->blockSignals(true);
configPbtOuter->setValue(newFreq);
configPbtOuter->blockSignals(false);
}
}
}

Wyświetl plik

@ -64,10 +64,10 @@ public:
void receivePassband(quint16 pass);
double getPBTInner () { return PBTInner;}
void setPBTInner (double hz);
void setPBTInner (uchar val);
double getPBTOuter () { return PBTOuter;}
void setPBTOuter (double hz);
void setPBTOuter (uchar val);
quint16 getStepSize () { return stepSize;}
void setStepSize (quint16 hz) { stepSize = hz;}
@ -88,6 +88,7 @@ public:
void addFilter(QString text, QVariant data) {filterCombo->blockSignals(true); filterCombo->addItem(text,data); filterCombo->blockSignals(false);}
void selected(bool);
bool isSelected() {return isActive;}
void setHold(bool h);
void setSpeed(uchar s);
void displaySettings(int NumDigits, qint64 Minf, qint64 Maxf, int MinStep,FctlUnit unit,std::vector<bandType>* bands = Q_NULLPTR);
@ -269,6 +270,7 @@ private:
// Assorted settings
bool tuningFloorZeros=false;
bool clickDragTuning=false;
bool isActive;
};
#endif // SPECTRUMSCOPE_H

11
systemd/README 100644
Wyświetl plik

@ -0,0 +1,11 @@
in order to be able to autostart wfserver, this simple unitfile made by
Mick VK3ADD, will help you.
path and suggested name of the file:
/etc/systemd/system/wfserver.service

Wyświetl plik

@ -0,0 +1,12 @@
[Unit]
Description=WF Server
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=pi
ExecStart=/usr/local/bin/wfserver
[Install]
WantedBy=multi-user.target

Wyświetl plik

@ -3962,14 +3962,15 @@ void wfmain::initPeriodicCommands()
queue->clear();
foreach (auto cap, rigCaps.periodic) {
qDebug(logRig()) << "Inserting command" << funcString[cap.func] << "priority" << cap.priority << "on VFO" << QString::number(cap.vfo);
if (cap.vfo == -1) {
for (uchar v=0;v<rigCaps.numVFO;v++)
{
qDebug(logSystem()) << "Inserting command" << funcString[cap.func] << "priority" << cap.priority << "on VFO" << QString::number(v);
queue->add(queuePriority(cap.prioVal),cap.func,true,v);
}
}
else {
qDebug(logSystem()) << "Inserting command" << funcString[cap.func] << "priority" << cap.priority << "on VFO" << QString::number(cap.vfo);
queue->add(queuePriority(cap.prioVal),cap.func,true,cap.vfo);
}
}
@ -4661,8 +4662,12 @@ void wfmain::receiveTuningStep(unsigned char step)
}
}
void wfmain::receiveMeter(meter_t inMeter, unsigned char level)
void wfmain::receiveMeter(meter_t inMeter, unsigned char level,unsigned char vfo)
{
// Currently do nothing with meters from second VFO
if (vfo)
return;
switch(inMeter)
{
// These first two meters, S and Power,
@ -4822,20 +4827,26 @@ void wfmain::on_rxAntennaCheck_clicked(bool value)
queue->add(priorityImmediate,queueItem(funcAntenna,QVariant::fromValue<antennaInfo>(ant),false));
}
void wfmain::receivePreamp(unsigned char pre)
void wfmain::receivePreamp(unsigned char pre, uchar vfo)
{
ui->preampSelCombo->setCurrentIndex(ui->preampSelCombo->findData(pre));
if (!vfo) {
ui->preampSelCombo->setCurrentIndex(ui->preampSelCombo->findData(pre));
}
}
void wfmain::receiveAttenuator(unsigned char att)
void wfmain::receiveAttenuator(unsigned char att, uchar vfo)
{
ui->attSelCombo->setCurrentIndex(ui->attSelCombo->findData(att));
if (!vfo) {
ui->attSelCombo->setCurrentIndex(ui->attSelCombo->findData(att));
}
}
void wfmain::receiveAntennaSel(unsigned char ant, bool rx)
void wfmain::receiveAntennaSel(unsigned char ant, bool rx, uchar vfo)
{
ui->antennaSelCombo->setCurrentIndex(ant);
ui->rxAntennaCheck->setChecked(rx);
if (!vfo) {
ui->antennaSelCombo->setCurrentIndex(ant);
ui->rxAntennaCheck->setChecked(rx);
}
}
void wfmain::calculateTimingParameters()
@ -5446,23 +5457,26 @@ void wfmain::receiveValue(cacheItem val){
}
switch (val.command)
{
case funcFreqGet:
case funcFreqTR:
// If current VFO (0) isn't selected, then send this to other VFO
if (!vfos[val.vfo]->isSelected()){
val.vfo=!bool(val.vfo);
}
vfos[val.vfo]->setFrequency(val.value.value<freqt>());
break;
#if defined __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
#endif
case funcUnselectedFreq:
val.vfo=1;
case funcFreqGet:
case funcFreqTR:
case funcSelectedFreq:
{
freqt f = val.value.value<freqt>();
vfos[val.vfo]->setFrequency(f);
vfos[val.vfo]->setFrequency(val.value.value<freqt>());
}
#if defined __GNUC__
#pragma GCC diagnostic pop
#endif
case funcReadTXFreq:
break;
case funcVFODualWatch:
@ -5470,20 +5484,24 @@ void wfmain::receiveValue(cacheItem val){
break;
case funcModeGet:
case funcModeTR:
case funcSelectedMode:
if (vfos.size()) {
vfos[0]->receiveMode(val.value.value<modeInfo>());
finputbtns->updateCurrentMode(val.value.value<modeInfo>().mk);
finputbtns->updateFilterSelection(val.value.value<modeInfo>().filter);
rpt->handleUpdateCurrentMainMode(val.value.value<modeInfo>());
cw->handleCurrentModeUpdate(val.value.value<modeInfo>().mk);
// If current VFO (0) isn't selected, then send this to other VFO
if (!vfos[val.vfo]->isSelected()){
val.vfo=!bool(val.vfo);
}
case funcSelectedMode:
vfos[val.vfo]->receiveMode(val.value.value<modeInfo>());
finputbtns->updateCurrentMode(val.value.value<modeInfo>().mk);
finputbtns->updateFilterSelection(val.value.value<modeInfo>().filter);
rpt->handleUpdateCurrentMainMode(val.value.value<modeInfo>());
cw->handleCurrentModeUpdate(val.value.value<modeInfo>().mk);
break;
case funcUnselectedMode:
val.vfo=1;
if (vfos.size()>1)
vfos[1]->receiveMode(val.value.value<modeInfo>());
vfos[val.vfo]->receiveMode(val.value.value<modeInfo>());
break;
#if defined __GNUC__
#pragma GCC diagnostic pop
#endif
case funcVFOBandMS:
break;
case funcSatelliteMemory:
@ -5506,31 +5524,17 @@ void wfmain::receiveValue(cacheItem val){
receiveTuningStep(val.value.value<uchar>());
break;
case funcAttenuator:
receiveAttenuator(val.value.value<uchar>());
receiveAttenuator(val.value.value<uchar>(),val.vfo);
break;
case funcAntenna:
receiveAntennaSel(val.value.value<antennaInfo>().antenna,val.value.value<antennaInfo>().rx);
receiveAntennaSel(val.value.value<antennaInfo>().antenna,val.value.value<antennaInfo>().rx,val.vfo);
break;
case funcPBTOuter:
vfos[val.vfo]->setPBTOuter(val.value.value<uchar>());
break;
case funcPBTInner:
{
uchar level = val.value.value<uchar>();
qint16 shift = (qint16)(level - 128);
double tempVar = ceil((shift / 127.0) * vfos[val.vfo]->getPassbandWidth() * 20000.0) / 20000.0;
// tempVar now contains value to the nearest 50Hz If CW mode, add/remove the cwPitch.
double pitch = 0.0;
modeInfo mode = vfos[val.vfo]->currentMode();
if ((mode.mk == modeCW || mode.mk == modeCW_R) && vfos[val.vfo]->getPassbandWidth() > 0.0006)
{
pitch = (600.0 - cwPitch) / 1000000.0;
}
double newVal = round((tempVar + pitch) * 200000.0) / 200000.0; // Nearest 5Hz.
if (val.command == funcPBTInner) {
vfos[val.vfo]->setPBTInner(newVal);
} else {
vfos[val.vfo]->setPBTOuter(newVal);
}
vfos[val.vfo]->setPBTInner(val.value.value<uchar>());
break;
}
case funcIFShift:
@ -5547,6 +5551,7 @@ void wfmain::receiveValue(cacheItem val){
foreach (auto vfo, vfos) {
vfo->receiveCwPitch(val.value.value<uchar>());
}
// Also send to CW window
cw->handlePitch(val.value.value<uchar>());
break;
case funcMicGain:
@ -5595,7 +5600,7 @@ void wfmain::receiveValue(cacheItem val){
case funcSMeterSqlStatus:
break;
case funcSMeter:
receiveMeter(meter_t::meterS,val.value.value<uchar>());
receiveMeter(meter_t::meterS,val.value.value<uchar>(),val.vfo);
break;
case funcVariousSql:
break;
@ -5605,29 +5610,29 @@ void wfmain::receiveValue(cacheItem val){
}
break;
case funcCenterMeter:
receiveMeter(meter_t::meterCenter,val.value.value<uchar>());
receiveMeter(meter_t::meterCenter,val.value.value<uchar>(),val.vfo);
break;
case funcPowerMeter:
receiveMeter(meter_t::meterPower,val.value.value<uchar>());
receiveMeter(meter_t::meterPower,val.value.value<uchar>(),val.vfo);
break;
case funcSWRMeter:
receiveMeter(meter_t::meterSWR,val.value.value<uchar>());
receiveMeter(meter_t::meterSWR,val.value.value<uchar>(),val.vfo);
break;
case funcALCMeter:
receiveMeter(meter_t::meterALC,val.value.value<uchar>());
receiveMeter(meter_t::meterALC,val.value.value<uchar>(),val.vfo);
break;
case funcCompMeter:
receiveMeter(meter_t::meterComp,val.value.value<uchar>());
receiveMeter(meter_t::meterComp,val.value.value<uchar>(),val.vfo);
break;
case funcVdMeter:
receiveMeter(meter_t::meterVoltage,val.value.value<uchar>());
receiveMeter(meter_t::meterVoltage,val.value.value<uchar>(),val.vfo);
break;
case funcIdMeter:
receiveMeter(meter_t::meterCurrent,val.value.value<uchar>());
receiveMeter(meter_t::meterCurrent,val.value.value<uchar>(),val.vfo);
break;
// 0x16 enable/disable functions:
case funcPreamp:
receivePreamp(val.value.value<uchar>());
receivePreamp(val.value.value<uchar>(),val.vfo);
break;
case funcAGCTime:
break;
@ -5824,7 +5829,7 @@ void wfmain::receiveValue(cacheItem val){
vfos[0]->selected(!subScope);
vfos[1]->selected(subScope);
} else {
vfos[0]->selected(false);
vfos[0]->selected(true);
vfos[1]->selected(false);
}
}

Wyświetl plik

@ -395,7 +395,7 @@ private slots:
void receiveIFShift(unsigned char level);
// Meters:
void receiveMeter(meter_t meter, unsigned char level);
void receiveMeter(meter_t meter, unsigned char level, unsigned char vfo=0);
// void receiveSMeter(unsigned char level);
// void receivePowerMeter(unsigned char level);
// void receiveALCMeter(unsigned char level);
@ -403,9 +403,9 @@ private slots:
void receiveATUStatus(unsigned char atustatus);
void receivePreamp(unsigned char pre);
void receiveAttenuator(unsigned char att);
void receiveAntennaSel(unsigned char ant, bool rx);
void receivePreamp(unsigned char pre, uchar vfo);
void receiveAttenuator(unsigned char att, uchar vfo);
void receiveAntennaSel(unsigned char ant, bool rx,uchar vfo);
void receiveRigID(rigCapabilities rigCaps);
void receiveFoundRigID(rigCapabilities rigCaps);
void receivePortError(errorType err);

Wyświetl plik

@ -115,17 +115,22 @@ unix:target.path = $$PREFIX/bin
INSTALLS += target
# Why doesn't this seem to do anything?
unix:DISTFILES += resources/wfview.png \
unix:DISTFILES += resources/unix_icons/wfview.png \
resources/install.sh
unix:DISTFILES += resources/wfview.desktop
unix:DISTFILES += resources/org.wfview.wfview.metainfo.xml
unix:applications.files = resources/wfview.desktop
unix:applications.path = $$PREFIX/share/applications
INSTALLS += applications
unix:pixmaps.files = resources/wfview.png
unix:pixmaps.path = $$PREFIX/share/pixmaps
INSTALLS += pixmaps
unix:icons.files = resources/unix_icons/wfview.png
unix:icons.path = $$PREFIX/share/icons/hicolor/256x256/apps
INSTALLS += icons
unix:metainfo.files = resources/org.wfview.wfview.metainfo.xml
unix:metainfo.path = $$PREFIX/share/metainfo
INSTALLS += metainfo
unix:stylesheets.files = qdarkstyle
unix:stylesheets.path = $$PREFIX/share/wfview

Wyświetl plik

@ -209,7 +209,7 @@ cmdLCDWaterfall, cmdLCDSpectrum, cmdLCDNothing, cmdSeparator
// funcs and funcString MUST match exactly (and NUMFUNCS must be updated)
#define NUMFUNCS 212
#define NUMFUNCS 244
enum funcs { funcNone,
funcFreqTR, funcModeTR, funcBandEdgeFreq, funcFreqGet, funcModeGet, funcFreqSet, // \x00
@ -244,6 +244,12 @@ funcScopeMainSub, funcScopeSingleDual, funcScopeMainMode, funcSco
funcScopeMainEdge, funcScopeSubEdge, funcScopeMainHold, funcScopeSubHold, funcScopeMainRef, funcScopeSubRef,
funcScopeMainSpeed, funcScopeSubSpeed, funcScopeMainVBW, funcScopeSubVBW, funcScopeMainRBW, funcScopeSubRBW,
funcScopeDuringTX, funcScopeCenterType, funcScopeFixedEdgeFreq, funcVoiceTX, funcMainSubPrefix, funcAFCSetting,
funcSSBRXHPFLPF, funcSSBRXBass, funcSSBRXTreble, FuncAMRXHPFLPF, funcAMRXBass, funcAMRXTreble,
funcFMRXHPFLPF, funcFMRXBass, funcFMRXTreble, FuncCWRXHPFLPF, funcCWRXTreble, funcCWRXBass,
funcSSBTXHLPLPF, funcSSBTXBass, funcSSBTXTreble, FuncAMTXHPFLPF, funcAMTXBass, funcAMTXTreble,
funcFMTXHPFLPF, funcFMTXBass, funcFMTXTreble, funcBeepLevel, funcBeepLevelLimit, funcBeepConfirmation,
funcBandEdgeBeep, funcBeepMain, funcBeepSub, funcRFSQLControl, funcTXDelayHF, funcTXDelay50m,
funcTimeOutTimer, funcTimeOutCIV,
funcGPSTXMode, funcSatelliteMemory, funcGPSPosition, funcMemoryGroup, funcSelectVFO, funcSeparator,
funcLCDWaterfall, funcLCDSpectrum, funcLCDNothing, funcPageUp, funcPageDown, funcVFOFrequency,
funcVFOMode, funcRigctlFunction, funcRigctlLevel, funcRigctlParam, funcRXAudio, funcTXAudio,
@ -285,6 +291,12 @@ static QString funcString[] { "None",
"Scope Main Edge", "Scope Sub Edge", "Scope Main Hold", "Scope Sub Hold", "Scope Main Ref", "Scope Sub Ref",
"Scope Main Speed", "Scope Sub Speed", "Scope Main VBW", "Scope Sub VBW", "Scope Main RBW", "Scope Sub RBW",
"Scope During TX", "Scope Center Type", "Scope Fixed Edge Freq", "Voice TX", "Main/Sub Prefix", "AFC Function",
"SSB RX HPFLPF", "SSB RX Bass", "SSB RX Treble", "AM RX HPFLPF", "AM RX Bass", "AM RX Treble",
"FM RX HPFLPF", "FM RX Bass", "FM RX Treble", "CW RX HPFLPF", "CW RX Bass", "CW RX Treble",
"SSB TX HPFLPF", "SSB TX Bass", "SSB TX Treble", "AM TX HPFLPF", "AM TX Bass", "AM TX Treble",
"FM TX HPFLPF", "FM TX Bass", "FM TX Treble", "Beep Level", "Beep Level Limit", "Beep Confirmation",
"Band Edge Beep", "Beep Main Band", "Beep Sub Band", "RF SQL Control", "TX Delay HF", "TX Delay 50m",
"Timeout Timer", "Timeout C-IV",
"GPS TX Mode", "Satellite Memory", "GPS Position", "Memory Group", "-Select VFO", "-Seperator",
"-LCD Waterfall", "-LCD Spectrum", "-LCD Nothing", "-Page Up", "-Page Down", "-VFO Frequency",
"-VFO Mode", "-Rigctl Function", "-Rigctl Level", "-Rigctl Param", "-RX Audio Data", "-TX Audio Data",