mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-03-25 05:38:39 -04:00
Server: added WFM demod plugin
This commit is contained in:
parent
c31a34ea41
commit
1770192116
plugins/channelrx
pluginssrv/channelrx
@ -495,8 +495,7 @@ void BFMDemod::applySettings(const BFMDemodSettings& settings, bool force)
|
||||
if ((settings.m_squelch != m_settings.m_squelch) || force)
|
||||
{
|
||||
qDebug() << "BFMDemod::handleMessage: set m_squelchLevel";
|
||||
m_squelchLevel = std::pow(10.0, settings.m_squelch / 20.0);
|
||||
m_squelchLevel *= m_squelchLevel;
|
||||
m_squelchLevel = std::pow(10.0, settings.m_squelch / 10.0);
|
||||
}
|
||||
|
||||
if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force)
|
||||
|
@ -107,41 +107,41 @@ void WFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
|
||||
for (int i = 0 ; i < rf_out; i++)
|
||||
{
|
||||
demod = m_phaseDiscri.phaseDiscriminatorDelta(rf[i], msq, fmDev);
|
||||
msq = rf[i].real()*rf[i].real() + rf[i].imag()*rf[i].imag();
|
||||
Real magsq = msq / (SDR_RX_SCALED*SDR_RX_SCALED);
|
||||
m_magsqSum += magsq;
|
||||
m_movingAverage(magsq);
|
||||
|
||||
m_movingAverage(magsq);
|
||||
m_magsqSum += magsq;
|
||||
|
||||
if (magsq > m_magsqPeak)
|
||||
{
|
||||
if (magsq > m_magsqPeak) {
|
||||
m_magsqPeak = magsq;
|
||||
}
|
||||
|
||||
m_magsqCount++;
|
||||
|
||||
if((Real) m_movingAverage >= m_squelchLevel)
|
||||
m_squelchState = m_settings.m_rfBandwidth / 20; // decay rate
|
||||
|
||||
if (m_squelchState > 0)
|
||||
{
|
||||
m_squelchState--;
|
||||
m_squelchOpen = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
demod = 0;
|
||||
m_squelchOpen = false;
|
||||
}
|
||||
|
||||
if (m_settings.m_audioMute)
|
||||
if (magsq >= m_squelchLevel)
|
||||
{
|
||||
if (m_squelchState < m_settings.m_rfBandwidth / 10) { // twice attack and decay rate
|
||||
m_squelchState++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_squelchState > 0) {
|
||||
m_squelchState--;
|
||||
}
|
||||
}
|
||||
|
||||
m_squelchOpen = (m_squelchState > (m_settings.m_rfBandwidth / 20));
|
||||
|
||||
if (m_squelchOpen && !m_settings.m_audioMute) { // squelch open and not mute
|
||||
demod = m_phaseDiscri.phaseDiscriminatorDelta(rf[i], msq, fmDev);
|
||||
} else {
|
||||
demod = 0;
|
||||
}
|
||||
|
||||
Complex e(demod, 0);
|
||||
|
||||
if(m_interpolator.decimate(&m_interpolatorDistanceRemain, e, &ci))
|
||||
if (m_interpolator.decimate(&m_interpolatorDistanceRemain, e, &ci))
|
||||
{
|
||||
qint16 sample = (qint16)(ci.real() * 3276.8f * m_settings.m_volume);
|
||||
m_sampleBuffer.push_back(Sample(sample, sample));
|
||||
@ -154,8 +154,7 @@ void WFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 1);
|
||||
|
||||
if(res != m_audioBufferFill)
|
||||
{
|
||||
if (res != m_audioBufferFill) {
|
||||
qDebug("WFMDemod::feed: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
}
|
||||
|
||||
@ -167,12 +166,11 @@ void WFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
}
|
||||
}
|
||||
|
||||
if(m_audioBufferFill > 0)
|
||||
if (m_audioBufferFill > 0)
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 1);
|
||||
|
||||
if(res != m_audioBufferFill)
|
||||
{
|
||||
if (res != m_audioBufferFill) {
|
||||
qDebug("WFMDemod::feed: %u/%u tail samples written", res, m_audioBufferFill);
|
||||
}
|
||||
|
||||
@ -339,8 +337,7 @@ void WFMDemod::applySettings(const WFMDemodSettings& settings, bool force)
|
||||
if ((settings.m_squelch != m_settings.m_squelch) || force)
|
||||
{
|
||||
qDebug() << "WFMDemod::applySettings: set m_squelchLevel";
|
||||
m_squelchLevel = pow(10.0, settings.m_squelch / 20.0);
|
||||
m_squelchLevel *= m_squelchLevel;
|
||||
m_squelchLevel = pow(10.0, settings.m_squelch / 10.0);
|
||||
}
|
||||
|
||||
if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force)
|
||||
|
@ -3,7 +3,9 @@
|
||||
#include <QtPlugin>
|
||||
#include "plugin/pluginapi.h"
|
||||
|
||||
#ifndef SERVER_MODE
|
||||
#include "wfmdemodgui.h"
|
||||
#endif
|
||||
#include "wfmdemod.h"
|
||||
|
||||
const PluginDescriptor WFMPlugin::m_pluginDescriptor = {
|
||||
@ -34,10 +36,19 @@ void WFMPlugin::initPlugin(PluginAPI* pluginAPI)
|
||||
m_pluginAPI->registerRxChannel(WFMDemod::m_channelIdURI, WFMDemod::m_channelId, this);
|
||||
}
|
||||
|
||||
#ifdef SERVER_MODE
|
||||
PluginInstanceGUI* WFMPlugin::createRxChannelGUI(
|
||||
DeviceUISet *deviceUISet __attribute__((unused)),
|
||||
BasebandSampleSink *rxChannel __attribute__((unused)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
PluginInstanceGUI* WFMPlugin::createRxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
|
||||
{
|
||||
return WFMDemodGUI::create(m_pluginAPI, deviceUISet, rxChannel);
|
||||
}
|
||||
#endif
|
||||
|
||||
BasebandSampleSink* WFMPlugin::createRxChannelBS(DeviceSourceAPI *deviceAPI)
|
||||
{
|
||||
|
@ -5,3 +5,4 @@ add_subdirectory(demodbfm)
|
||||
add_subdirectory(demoddsd)
|
||||
add_subdirectory(demodnfm)
|
||||
add_subdirectory(demodssb)
|
||||
add_subdirectory(demodwfm)
|
||||
|
43
pluginssrv/channelrx/demodwfm/CMakeLists.txt
Normal file
43
pluginssrv/channelrx/demodwfm/CMakeLists.txt
Normal file
@ -0,0 +1,43 @@
|
||||
project(wfm)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
set(PLUGIN_PREFIX "../../../plugins/channelrx/demodwfm")
|
||||
|
||||
set(wfm_SOURCES
|
||||
${PLUGIN_PREFIX}/wfmdemod.cpp
|
||||
${PLUGIN_PREFIX}/wfmdemodsettings.cpp
|
||||
${PLUGIN_PREFIX}/wfmplugin.cpp
|
||||
)
|
||||
|
||||
set(wfm_HEADERS
|
||||
${PLUGIN_PREFIX}/wfmdemod.h
|
||||
${PLUGIN_PREFIX}/wfmdemodsettings.h
|
||||
${PLUGIN_PREFIX}/wfmplugin.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
.
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
|
||||
)
|
||||
|
||||
#include(${QT_USE_FILE})
|
||||
add_definitions(${QT_DEFINITIONS})
|
||||
add_definitions(-DQT_PLUGIN)
|
||||
add_definitions(-DQT_SHARED)
|
||||
|
||||
#qt5_wrap_cpp(nfm_HEADERS_MOC ${nfm_HEADERS})
|
||||
|
||||
add_library(demodwfmsrv SHARED
|
||||
${wfm_SOURCES}
|
||||
${wfm_HEADERS_MOC}
|
||||
)
|
||||
|
||||
target_link_libraries(demodwfmsrv
|
||||
${QT_LIBRARIES}
|
||||
sdrbase
|
||||
)
|
||||
|
||||
qt5_use_modules(demodwfmsrv Core)
|
||||
|
||||
install(TARGETS demodwfmsrv DESTINATION lib/pluginssrv/channelrx)
|
Loading…
Reference in New Issue
Block a user