1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-05-23 18:52:28 -04:00

SDRDaemonSink and DaemonSource: do not set frequency via SDRDaemonSink

This commit is contained in:
f4exb 2018-09-07 00:58:09 +02:00
parent b75eb08a91
commit 98a1f1952f
11 changed files with 75 additions and 136 deletions

View File

@ -299,10 +299,6 @@ void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unu
{ {
printMeta("DaemonSrc::handleDataBlock", metaData); printMeta("DaemonSrc::handleDataBlock", metaData);
if (m_currentMeta.m_centerFrequency != metaData->m_centerFrequency) {
m_deviceAPI->getSampleSink()->setCenterFrequency(metaData->m_centerFrequency*1000); // frequency is in kHz
}
if (m_currentMeta.m_sampleRate != metaData->m_sampleRate) if (m_currentMeta.m_sampleRate != metaData->m_sampleRate)
{ {
m_channelizer->configure(m_channelizer->getInputMessageQueue(), metaData->m_sampleRate, 0); m_channelizer->configure(m_channelizer->getInputMessageQueue(), metaData->m_sampleRate, 0);

View File

@ -96,7 +96,6 @@ bool DaemonSrcGUI::handleMessage(const Message& message)
else if (DaemonSrc::MsgReportStreamData::match(message)) else if (DaemonSrc::MsgReportStreamData::match(message))
{ {
const DaemonSrc::MsgReportStreamData& report = (DaemonSrc::MsgReportStreamData&) message; const DaemonSrc::MsgReportStreamData& report = (DaemonSrc::MsgReportStreamData&) message;
ui->centerFrequency->setText(QString("%1").arg(report.get_centerFreq()));
ui->sampleRate->setText(QString("%1").arg(report.get_sampleRate())); ui->sampleRate->setText(QString("%1").arg(report.get_sampleRate()));
QString nominalNbBlocksText = QString("%1/%2") QString nominalNbBlocksText = QString("%1/%2")
.arg(report.get_nbOriginalBlocks() + report.get_nbFECBlocks()) .arg(report.get_nbOriginalBlocks() + report.get_nbFECBlocks())

View File

@ -158,52 +158,6 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="nominalValuesLayout"> <layout class="QHBoxLayout" name="nominalValuesLayout">
<item>
<widget class="QLabel" name="centerFrequencyLabel">
<property name="text">
<string>Freq</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="centerFrequency">
<property name="minimumSize">
<size>
<width>60</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Stream center frequency setting</string>
</property>
<property name="text">
<string>00000000</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="centerFrequencyUnits">
<property name="text">
<string>kHz</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item> <item>
<widget class="QLabel" name="sampleRateLabel"> <widget class="QLabel" name="sampleRateLabel">
<property name="text"> <property name="text">
@ -237,6 +191,19 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</item> </item>
<item> <item>

View File

@ -46,6 +46,7 @@ SDRdaemonSinkGui::SDRdaemonSinkGui(DeviceUISet *deviceUISet, QWidget* parent) :
m_deviceUISet(deviceUISet), m_deviceUISet(deviceUISet),
m_settings(), m_settings(),
m_deviceSampleSink(0), m_deviceSampleSink(0),
m_deviceCenterFrequency(0),
m_samplesCount(0), m_samplesCount(0),
m_tickCount(0), m_tickCount(0),
m_nbSinceLastFlowCheck(0), m_nbSinceLastFlowCheck(0),
@ -86,6 +87,8 @@ SDRdaemonSinkGui::SDRdaemonSinkGui(DeviceUISet *deviceUISet, QWidget* parent) :
m_networkManager = new QNetworkAccessManager(); m_networkManager = new QNetworkAccessManager();
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*))); connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*)));
m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
m_time.start(); m_time.start();
displayEventCounts(); displayEventCounts();
displayEventTimer(); displayEventTimer();
@ -130,18 +133,6 @@ void SDRdaemonSinkGui::resetToDefaults()
sendSettings(); sendSettings();
} }
qint64 SDRdaemonSinkGui::getCenterFrequency() const
{
return m_settings.m_centerFrequency;
}
void SDRdaemonSinkGui::setCenterFrequency(qint64 centerFrequency)
{
m_settings.m_centerFrequency = centerFrequency;
displaySettings();
sendSettings();
}
QByteArray SDRdaemonSinkGui::serialize() const QByteArray SDRdaemonSinkGui::serialize() const
{ {
return m_settings.serialize(); return m_settings.serialize();
@ -201,9 +192,8 @@ void SDRdaemonSinkGui::handleInputMessages()
{ {
DSPSignalNotification* notif = (DSPSignalNotification*) message; DSPSignalNotification* notif = (DSPSignalNotification*) message;
m_sampleRate = notif->getSampleRate(); m_sampleRate = notif->getSampleRate();
m_deviceCenterFrequency = notif->getCenterFrequency();
qDebug("SDRdaemonSinkGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); qDebug("SDRdaemonSinkGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency());
updateSampleRateAndFrequency(); updateSampleRate();
delete message; delete message;
} }
@ -216,10 +206,9 @@ void SDRdaemonSinkGui::handleInputMessages()
} }
} }
void SDRdaemonSinkGui::updateSampleRateAndFrequency() void SDRdaemonSinkGui::updateSampleRate()
{ {
m_deviceUISet->getSpectrum()->setSampleRate(m_sampleRate); m_deviceUISet->getSpectrum()->setSampleRate(m_sampleRate);
m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
ui->deviceRateText->setText(tr("%1k").arg((float)(m_sampleRate) / 1000)); ui->deviceRateText->setText(tr("%1k").arg((float)(m_sampleRate) / 1000));
} }
@ -232,7 +221,7 @@ void SDRdaemonSinkGui::updateTxDelayTooltip()
void SDRdaemonSinkGui::displaySettings() void SDRdaemonSinkGui::displaySettings()
{ {
blockApplySettings(true); blockApplySettings(true);
ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); ui->centerFrequency->setValue(m_deviceCenterFrequency / 1000);
ui->sampleRate->setValue(m_settings.m_sampleRate); ui->sampleRate->setValue(m_settings.m_sampleRate);
ui->txDelay->setValue(m_settings.m_txDelay*100); ui->txDelay->setValue(m_settings.m_txDelay*100);
ui->txDelayText->setText(tr("%1").arg(m_settings.m_txDelay*100)); ui->txDelayText->setText(tr("%1").arg(m_settings.m_txDelay*100));
@ -296,12 +285,6 @@ void SDRdaemonSinkGui::updateStatus()
} }
} }
void SDRdaemonSinkGui::on_centerFrequency_changed(quint64 value)
{
m_settings.m_centerFrequency = value * 1000;
sendSettings();
}
void SDRdaemonSinkGui::on_sampleRate_changed(quint64 value) void SDRdaemonSinkGui::on_sampleRate_changed(quint64 value)
{ {
m_settings.m_sampleRate = value; m_settings.m_sampleRate = value;
@ -558,6 +541,11 @@ void SDRdaemonSinkGui::analyzeApiReply(const QJsonObject& jsonObject)
if (jsonObject.contains("DaemonSourceReport")) if (jsonObject.contains("DaemonSourceReport"))
{ {
QJsonObject report = jsonObject["DaemonSourceReport"].toObject(); QJsonObject report = jsonObject["DaemonSourceReport"].toObject();
m_deviceCenterFrequency = report["deviceCenterFreq"].toInt() * 1000;
m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
ui->centerFrequency->setValue(m_deviceCenterFrequency/1000);
int remoteRate = report["deviceSampleRate"].toInt();
ui->remoteRateText->setText(tr("%1k").arg((float)(remoteRate) / 1000));
int queueSize = report["queueSize"].toInt(); int queueSize = report["queueSize"].toInt();
queueSize = queueSize == 0 ? 10 : queueSize; queueSize = queueSize == 0 ? 10 : queueSize;
int queueLength = report["queueLength"].toInt(); int queueLength = report["queueLength"].toInt();

View File

@ -80,8 +80,8 @@ public:
QString getName() const; QString getName() const;
void resetToDefaults(); void resetToDefaults();
virtual qint64 getCenterFrequency() const; virtual qint64 getCenterFrequency() const { return m_deviceCenterFrequency; }
virtual void setCenterFrequency(qint64 centerFrequency); virtual void setCenterFrequency(qint64 centerFrequency __attribute__((unused))) {}
QByteArray serialize() const; QByteArray serialize() const;
bool deserialize(const QByteArray& data); bool deserialize(const QByteArray& data);
virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
@ -128,7 +128,7 @@ private:
void displayTime(); void displayTime();
void sendControl(bool force = false); void sendControl(bool force = false);
void sendSettings(); void sendSettings();
void updateSampleRateAndFrequency(); void updateSampleRate();
void updateTxDelayTooltip(); void updateTxDelayTooltip();
void displayEventCounts(); void displayEventCounts();
void displayEventStatus(int recoverableCount, int unrecoverableCount); void displayEventStatus(int recoverableCount, int unrecoverableCount);

View File

@ -2,6 +2,9 @@
<ui version="4.0"> <ui version="4.0">
<class>SDRdaemonSinkGui</class> <class>SDRdaemonSinkGui</class>
<widget class="QWidget" name="SDRdaemonSinkGui"> <widget class="QWidget" name="SDRdaemonSinkGui">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
@ -114,7 +117,7 @@
<item> <item>
<widget class="ValueDial" name="centerFrequency" native="true"> <widget class="ValueDial" name="centerFrequency" native="true">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>false</bool>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum"> <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
@ -146,24 +149,42 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="freqUnits"> <layout class="QVBoxLayout" name="freqRightLayout">
<property name="text"> <item>
<string> kHz</string> <layout class="QHBoxLayout" name="freqRightTopLayout">
</property> <item>
</widget> <widget class="QLabel" name="freqUnits">
</item> <property name="text">
<item> <string> kHz</string>
<spacer name="freqRightlSpacer"> </property>
<property name="orientation"> </widget>
<enum>Qt::Horizontal</enum> </item>
</property> </layout>
<property name="sizeHint" stdset="0"> </item>
<size> <item>
<width>0</width> <layout class="QHBoxLayout" name="freqRightBotLayout">
<height>0</height> <item>
</size> <widget class="QLabel" name="remoteRateText">
</property> <property name="minimumSize">
</spacer> <size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Remote baseband sample rate</string>
</property>
<property name="text">
<string>00000k</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item> </item>
</layout> </layout>
</item> </item>

View File

@ -47,6 +47,7 @@ const uint32_t SDRdaemonSinkOutput::NbSamplesForRateCorrection = 5000000;
SDRdaemonSinkOutput::SDRdaemonSinkOutput(DeviceSinkAPI *deviceAPI) : SDRdaemonSinkOutput::SDRdaemonSinkOutput(DeviceSinkAPI *deviceAPI) :
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_settings(), m_settings(),
m_centerFrequency(0),
m_sdrDaemonSinkThread(0), m_sdrDaemonSinkThread(0),
m_deviceDescription("SDRdaemonSink"), m_deviceDescription("SDRdaemonSink"),
m_startingTimeStamp(0), m_startingTimeStamp(0),
@ -85,7 +86,6 @@ bool SDRdaemonSinkOutput::start()
m_sdrDaemonSinkThread = new SDRdaemonSinkThread(&m_sampleSourceFifo); m_sdrDaemonSinkThread = new SDRdaemonSinkThread(&m_sampleSourceFifo);
m_sdrDaemonSinkThread->setDataAddress(m_settings.m_dataAddress, m_settings.m_dataPort); m_sdrDaemonSinkThread->setDataAddress(m_settings.m_dataAddress, m_settings.m_dataPort);
m_sdrDaemonSinkThread->setCenterFrequency(m_settings.m_centerFrequency);
m_sdrDaemonSinkThread->setSamplerate(m_settings.m_sampleRate); m_sdrDaemonSinkThread->setSamplerate(m_settings.m_sampleRate);
m_sdrDaemonSinkThread->setNbBlocksFEC(m_settings.m_nbFECBlocks); m_sdrDaemonSinkThread->setNbBlocksFEC(m_settings.m_nbFECBlocks);
m_sdrDaemonSinkThread->connectTimer(m_masterTimer); m_sdrDaemonSinkThread->connectTimer(m_masterTimer);
@ -161,22 +161,7 @@ int SDRdaemonSinkOutput::getSampleRate() const
quint64 SDRdaemonSinkOutput::getCenterFrequency() const quint64 SDRdaemonSinkOutput::getCenterFrequency() const
{ {
return m_settings.m_centerFrequency; return m_centerFrequency;
}
void SDRdaemonSinkOutput::setCenterFrequency(qint64 centerFrequency)
{
SDRdaemonSinkSettings settings = m_settings;
settings.m_centerFrequency = centerFrequency;
MsgConfigureSDRdaemonSink* message = MsgConfigureSDRdaemonSink::create(settings, false);
m_inputMessageQueue.push(message);
if (m_guiMessageQueue)
{
MsgConfigureSDRdaemonSink* messageToGUI = MsgConfigureSDRdaemonSink::create(settings, false);
m_guiMessageQueue->push(messageToGUI);
}
} }
std::time_t SDRdaemonSinkOutput::getStartingTimeStamp() const std::time_t SDRdaemonSinkOutput::getStartingTimeStamp() const
@ -262,15 +247,6 @@ void SDRdaemonSinkOutput::applySettings(const SDRdaemonSinkSettings& settings, b
} }
} }
if (force || (m_settings.m_centerFrequency != settings.m_centerFrequency))
{
if (m_sdrDaemonSinkThread != 0) {
m_sdrDaemonSinkThread->setCenterFrequency(settings.m_centerFrequency);
}
forwardChange = true;
}
if (force || (m_settings.m_sampleRate != settings.m_sampleRate)) if (force || (m_settings.m_sampleRate != settings.m_sampleRate))
{ {
if (m_sdrDaemonSinkThread != 0) { if (m_sdrDaemonSinkThread != 0) {
@ -316,7 +292,6 @@ void SDRdaemonSinkOutput::applySettings(const SDRdaemonSinkSettings& settings, b
mutexLocker.unlock(); mutexLocker.unlock();
qDebug() << "SDRdaemonSinkOutput::applySettings:" qDebug() << "SDRdaemonSinkOutput::applySettings:"
<< " m_centerFrequency: " << settings.m_centerFrequency
<< " m_sampleRate: " << settings.m_sampleRate << " m_sampleRate: " << settings.m_sampleRate
<< " m_txDelay: " << settings.m_txDelay << " m_txDelay: " << settings.m_txDelay
<< " m_nbFECBlocks: " << settings.m_nbFECBlocks << " m_nbFECBlocks: " << settings.m_nbFECBlocks
@ -327,7 +302,7 @@ void SDRdaemonSinkOutput::applySettings(const SDRdaemonSinkSettings& settings, b
if (forwardChange) if (forwardChange)
{ {
DSPSignalNotification *notif = new DSPSignalNotification(settings.m_sampleRate, settings.m_centerFrequency); DSPSignalNotification *notif = new DSPSignalNotification(settings.m_sampleRate, m_centerFrequency);
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
} }
@ -378,9 +353,6 @@ int SDRdaemonSinkOutput::webapiSettingsPutPatch(
{ {
SDRdaemonSinkSettings settings = m_settings; SDRdaemonSinkSettings settings = m_settings;
if (deviceSettingsKeys.contains("centerFrequency")) {
settings.m_centerFrequency = response.getSdrDaemonSinkSettings()->getCenterFrequency();
}
if (deviceSettingsKeys.contains("sampleRate")) { if (deviceSettingsKeys.contains("sampleRate")) {
settings.m_sampleRate = response.getSdrDaemonSinkSettings()->getSampleRate(); settings.m_sampleRate = response.getSdrDaemonSinkSettings()->getSampleRate();
} }
@ -434,7 +406,7 @@ int SDRdaemonSinkOutput::webapiReportGet(
void SDRdaemonSinkOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SDRdaemonSinkSettings& settings) void SDRdaemonSinkOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SDRdaemonSinkSettings& settings)
{ {
response.getSdrDaemonSinkSettings()->setCenterFrequency(settings.m_centerFrequency); response.getSdrDaemonSinkSettings()->setCenterFrequency(m_centerFrequency);
response.getSdrDaemonSinkSettings()->setSampleRate(settings.m_sampleRate); response.getSdrDaemonSinkSettings()->setSampleRate(settings.m_sampleRate);
response.getSdrDaemonSinkSettings()->setTxDelay(settings.m_txDelay); response.getSdrDaemonSinkSettings()->setTxDelay(settings.m_txDelay);
response.getSdrDaemonSinkSettings()->setNbFecBlocks(settings.m_nbFECBlocks); response.getSdrDaemonSinkSettings()->setNbFecBlocks(settings.m_nbFECBlocks);
@ -514,6 +486,7 @@ void SDRdaemonSinkOutput::analyzeApiReply(const QJsonObject& jsonObject)
if (jsonObject.contains("DaemonSourceReport")) if (jsonObject.contains("DaemonSourceReport"))
{ {
QJsonObject report = jsonObject["DaemonSourceReport"].toObject(); QJsonObject report = jsonObject["DaemonSourceReport"].toObject();
m_centerFrequency = report["deviceCenterFreq"].toInt() * 1000;
int queueSize = report["queueSize"].toInt(); int queueSize = report["queueSize"].toInt();
queueSize = queueSize == 0 ? 10 : queueSize; queueSize = queueSize == 0 ? 10 : queueSize;
int queueLength = report["queueLength"].toInt(); int queueLength = report["queueLength"].toInt();

View File

@ -136,7 +136,7 @@ public:
virtual const QString& getDeviceDescription() const; virtual const QString& getDeviceDescription() const;
virtual int getSampleRate() const; virtual int getSampleRate() const;
virtual quint64 getCenterFrequency() const; virtual quint64 getCenterFrequency() const;
virtual void setCenterFrequency(qint64 centerFrequency); virtual void setCenterFrequency(qint64 centerFrequency __attribute__((unused))) {}
std::time_t getStartingTimeStamp() const; std::time_t getStartingTimeStamp() const;
virtual bool handleMessage(const Message& message); virtual bool handleMessage(const Message& message);
@ -168,6 +168,7 @@ private:
DeviceSinkAPI *m_deviceAPI; DeviceSinkAPI *m_deviceAPI;
QMutex m_mutex; QMutex m_mutex;
SDRdaemonSinkSettings m_settings; SDRdaemonSinkSettings m_settings;
uint64_t m_centerFrequency;
SDRdaemonSinkThread* m_sdrDaemonSinkThread; SDRdaemonSinkThread* m_sdrDaemonSinkThread;
QString m_deviceDescription; QString m_deviceDescription;
std::time_t m_startingTimeStamp; std::time_t m_startingTimeStamp;

View File

@ -48,7 +48,6 @@ public:
void startWork(); void startWork();
void stopWork(); void stopWork();
void setCenterFrequency(uint64_t centerFrequency) { m_udpSinkFEC.setCenterFrequency(centerFrequency); }
void setSamplerate(int samplerate); void setSamplerate(int samplerate);
void setNbBlocksFEC(uint32_t nbBlocksFEC) { m_udpSinkFEC.setNbBlocksFEC(nbBlocksFEC); }; void setNbBlocksFEC(uint32_t nbBlocksFEC) { m_udpSinkFEC.setNbBlocksFEC(nbBlocksFEC); };
void setTxDelay(uint32_t txDelay) { m_udpSinkFEC.setTxDelay(txDelay); }; void setTxDelay(uint32_t txDelay) { m_udpSinkFEC.setTxDelay(txDelay); };

View File

@ -28,7 +28,6 @@ MESSAGE_CLASS_DEFINITION(UDPSinkFECWorker::MsgConfigureRemoteAddress, Message)
UDPSinkFEC::UDPSinkFEC() : UDPSinkFEC::UDPSinkFEC() :
m_centerFrequency(100000),
m_sampleRate(48000), m_sampleRate(48000),
m_sampleBytes(1), m_sampleBytes(1),
m_sampleBits(8), m_sampleBits(8),
@ -103,7 +102,7 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk
gettimeofday(&tv, 0); gettimeofday(&tv, 0);
// create meta data TODO: semaphore // create meta data TODO: semaphore
metaData.m_centerFrequency = m_centerFrequency; metaData.m_centerFrequency = 0; // frequency not set by stream
metaData.m_sampleRate = m_sampleRate; metaData.m_sampleRate = m_sampleRate;
metaData.m_sampleBytes = m_sampleBytes; metaData.m_sampleBytes = m_sampleBytes;
metaData.m_sampleBits = m_sampleBits; metaData.m_sampleBits = m_sampleBits;

View File

@ -109,9 +109,6 @@ public:
return ret; return ret;
} }
/** Set center frequency given in Hz */
void setCenterFrequency(uint64_t centerFrequency) { m_centerFrequency = centerFrequency / 1000; }
/** Set sample rate given in Hz */ /** Set sample rate given in Hz */
void setSampleRate(uint32_t sampleRate) { m_sampleRate = sampleRate; } void setSampleRate(uint32_t sampleRate) { m_sampleRate = sampleRate; }
@ -131,7 +128,6 @@ public:
private: private:
std::string m_error; std::string m_error;
uint32_t m_centerFrequency; //!< center frequency in kHz
uint32_t m_sampleRate; //!< sample rate in Hz uint32_t m_sampleRate; //!< sample rate in Hz
uint8_t m_sampleBytes; //!< number of bytes per sample uint8_t m_sampleBytes; //!< number of bytes per sample
uint8_t m_sampleBits; //!< number of effective bits per sample uint8_t m_sampleBits; //!< number of effective bits per sample