diff --git a/sdrbase/ambe/ambeengine.cpp b/sdrbase/ambe/ambeengine.cpp deleted file mode 100644 index 8c56c4ec3..000000000 --- a/sdrbase/ambe/ambeengine.cpp +++ /dev/null @@ -1,386 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2019 F4EXB // -// written by Edouard Griffiths // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// (at your option) any later version. // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef __APPLE__ -#include -#include -#endif - -#ifndef _MSC_VER -#include -#include -#include -#endif - -#if !defined(_WIN32) && !defined(__APPLE__) -#include -#include -#include -#endif - -#include -#include - -#include -#include -#include - -#include "ambeworker.h" -#include "ambeengine.h" - -AMBEEngine::AMBEEngine() -{} - -AMBEEngine::~AMBEEngine() -{ - qDebug("AMBEEngine::~AMBEEngine: %lu controllers", m_controllers.size()); -} - -#if defined(_WIN32) -void AMBEEngine::getComList() -{ - m_comList.clear(); - m_comList8250.clear(); - char comCStr[16]; - - // Arbitrarily set the list to the 20 first COM ports - for (int i = 1; i <= 20; i++) - { - sprintf(comCStr, "COM%d", i); - m_comList.push_back(std::string(comCStr)); - } -} - -// Do not activate serial support at all for windows -void AMBEEngine::scan(std::vector& ambeDevices) -{ - (void) ambeDevices; -} -#elif defined(__APPLE__) -void AMBEEngine::getComList() -{ -} -void AMBEEngine::scan(std::vector& ambeDevices) -{ - (void) ambeDevices; -} -#else -void AMBEEngine::getComList() -{ - int n; - struct dirent **namelist; - m_comList.clear(); - m_comList8250.clear(); - const char* sysdir = "/sys/class/tty/"; - - // Scan through /sys/class/tty - it contains all tty-devices in the system - n = scandir(sysdir, &namelist, NULL, alphasort); - if (n < 0) - { - perror("scandir"); - } - else - { - while (n--) - { - if (strcmp(namelist[n]->d_name, "..") && strcmp(namelist[n]->d_name, ".")) - { - // Construct full absolute file path - std::string devicedir = sysdir; - devicedir += namelist[n]->d_name; - // Register the device - register_comport(m_comList, m_comList8250, devicedir); - } - - free(namelist[n]); - } - - free(namelist); - } - - // Only non-serial8250 has been added to comList without any further testing - // serial8250-devices must be probe to check for validity - probe_serial8250_comports(m_comList, m_comList8250); -} -#endif // not Windows nor Apple - -#if !defined(_WIN32) && !defined(__APPLE__) -void AMBEEngine::register_comport( - std::vector& comList, - std::vector& comList8250, - const std::string& dir) -{ - // Get the driver the device is using - std::string driver = get_driver(dir); - - // Skip devices without a driver - if (driver.size() > 0) - { - //std::cerr << "register_comport: dir: "<< dir << " driver: " << driver << std::endl; - std::string devfile = std::string("/dev/") + basename((char *) dir.c_str()); - - // Put serial8250-devices in a seperate list - if (driver == "serial8250") { - comList8250.push_back(devfile); - } else { - comList.push_back(devfile); - } - } -} - -void AMBEEngine::probe_serial8250_comports( - std::vector& comList, - std::vector comList8250) -{ - struct serial_struct serinfo; - std::vector::iterator it = comList8250.begin(); - - // Iterate over all serial8250-devices - while (it != comList8250.end()) - { - - // Try to open the device - int fd = open((*it).c_str(), O_RDWR | O_NONBLOCK | O_NOCTTY); - - if (fd >= 0) - { - // Get serial_info - if (ioctl(fd, TIOCGSERIAL, &serinfo) == 0) - { - // If device type is no PORT_UNKNOWN we accept the port - if (serinfo.type != PORT_UNKNOWN) { - comList.push_back(*it); - } - } - - close(fd); - } - it++; - } -} - -std::string AMBEEngine::get_driver(const std::string& tty) -{ - struct stat st; - std::string devicedir = tty; - // Append '/device' to the tty-path - devicedir += "/device"; - - // Stat the devicedir and handle it if it is a symlink - if (lstat(devicedir.c_str(), &st) == 0 && S_ISLNK(st.st_mode)) - { - char buffer[1024]; - memset(buffer, 0, sizeof(buffer)); - // Append '/driver' and return basename of the target - devicedir += "/driver"; - - if (readlink(devicedir.c_str(), buffer, sizeof(buffer)) > 0) { - return basename(buffer); - } - } - - return ""; -} - -void AMBEEngine::scan(std::vector& ambeDevices) -{ - getComList(); - std::vector::const_iterator it = m_comList.begin(); - ambeDevices.clear(); - - while (it != m_comList.end()) - { - AMBEWorker *worker = new AMBEWorker(); - qDebug("AMBEEngine::scan: com: %s", it->c_str()); - - if (worker->open(*it)) - { - ambeDevices.push_back(QString(it->c_str())); - worker->close(); - } - - delete worker; - ++it; - } -} -#endif // not Windows nor Apple - -bool AMBEEngine::registerController(const std::string& deviceRef) -{ - AMBEWorker *worker = new AMBEWorker(); - - if (worker->open(deviceRef)) - { - m_controllers.push_back(AMBEController()); - m_controllers.back().worker = worker; - m_controllers.back().thread = new QThread(); - m_controllers.back().device = deviceRef; - - m_controllers.back().worker->moveToThread(m_controllers.back().thread); - connect(m_controllers.back().worker, SIGNAL(finished()), m_controllers.back().thread, SLOT(quit())); - connect(m_controllers.back().worker, SIGNAL(finished()), m_controllers.back().worker, SLOT(deleteLater())); - connect(m_controllers.back().thread, SIGNAL(finished()), m_controllers.back().thread, SLOT(deleteLater())); - connect(&m_controllers.back().worker->m_inputMessageQueue, SIGNAL(messageEnqueued()), m_controllers.back().worker, SLOT(handleInputMessages())); - std::this_thread::sleep_for(std::chrono::seconds(1)); - m_controllers.back().thread->start(); - - return true; - } - - return false; -} - -void AMBEEngine::releaseController(const std::string& deviceRef) -{ - std::vector::iterator it = m_controllers.begin(); - - while (it != m_controllers.end()) - { - if (it->device == deviceRef) - { - disconnect(&it->worker->m_inputMessageQueue, SIGNAL(messageEnqueued()), it->worker, SLOT(handleInputMessages())); - it->worker->stop(); - it->thread->wait(100); - it->worker->m_inputMessageQueue.clear(); - it->worker->close(); - qDebug() << "AMBEEngine::releaseController: closed device at: " << it->device.c_str(); - m_controllers.erase(it); - break; - } - - ++it; - } -} - -void AMBEEngine::releaseAll() -{ - std::vector::iterator it = m_controllers.begin(); - - while (it != m_controllers.end()) - { - disconnect(&it->worker->m_inputMessageQueue, SIGNAL(messageEnqueued()), it->worker, SLOT(handleInputMessages())); - it->worker->stop(); - it->thread->wait(100); - it->worker->m_inputMessageQueue.clear(); - it->worker->close(); - qDebug() << "AMBEEngine::release: closed device at: " << it->device.c_str(); - ++it; - } - - m_controllers.clear(); -} - -void AMBEEngine::getDeviceRefs(std::vector& deviceNames) -{ - std::vector::const_iterator it = m_controllers.begin(); - - while (it != m_controllers.end()) - { - deviceNames.push_back(QString(it->device.c_str())); - ++it; - } -} - -void AMBEEngine::pushMbeFrame( - const unsigned char *mbeFrame, - int mbeRateIndex, - int mbeVolumeIndex, - unsigned char channels, - bool useLP, - int upsampling, - AudioFifo *audioFifo) -{ - std::vector::iterator it = m_controllers.begin(); - std::vector::iterator itAvail = m_controllers.end(); - bool done = false; - QMutexLocker locker(&m_mutex); - - while (it != m_controllers.end()) - { - if (it->worker->hasFifo(audioFifo)) - { - it->worker->pushMbeFrame(mbeFrame, mbeRateIndex, mbeVolumeIndex, channels, useLP, upsampling, audioFifo); - done = true; - } - else if (it->worker->isAvailable()) - { - itAvail = it; - } - - ++it; - } - - if (!done) - { - if (itAvail != m_controllers.end()) - { - int wNum = itAvail - m_controllers.begin(); - - qDebug("AMBEEngine::pushMbeFrame: push %p on empty queue %d", audioFifo, wNum); - itAvail->worker->pushMbeFrame(mbeFrame, mbeRateIndex, mbeVolumeIndex, channels, useLP, upsampling, audioFifo); - } - else - { - qDebug("AMBEEngine::pushMbeFrame: no DV device available. MBE frame dropped"); - } - } -} - -QByteArray AMBEEngine::serialize() const -{ - QStringList qDeviceList; - std::vector::const_iterator it = m_controllers.begin(); - - while (it != m_controllers.end()) - { - qDebug("AMBEEngine::serialize: %s", it->device.c_str()); - qDeviceList << QString(it->device.c_str()); - ++it; - } - - QByteArray data; - QDataStream *stream = new QDataStream(&data, QIODevice::WriteOnly); - (*stream) << qDeviceList; - delete stream; - - return data; -} - -bool AMBEEngine::deserialize(const QByteArray& data) -{ - if (data.size() <= 0) - { - qDebug("AMBEEngine::deserialize: invalid or no data"); - return false; - } - - QStringList qDeviceList; - QDataStream *stream = new QDataStream(data); - (*stream) >> qDeviceList; - delete stream; - - releaseAll(); - - for (int i = 0; i < qDeviceList.size(); ++i) - { - qDebug(" AMBEEngine::deserialize: %s", qDeviceList.at(i).toStdString().c_str()); - registerController(qDeviceList.at(i).toStdString()); - } - - return true; -} diff --git a/sdrbase/ambe/ambeengine.h b/sdrbase/ambe/ambeengine.h deleted file mode 100644 index f083d17b7..000000000 --- a/sdrbase/ambe/ambeengine.h +++ /dev/null @@ -1,91 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2019 F4EXB // -// written by Edouard Griffiths // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// (at your option) any later version. // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef SDRBASE_AMBE_AMBEENGINE_H_ -#define SDRBASE_AMBE_AMBEENGINE_H_ - -#include -#include - -#include -#include -#include -#include - -#include "export.h" - -class QThread; -class AMBEWorker; -class AudioFifo; - -class SDRBASE_API AMBEEngine : public QObject -{ - Q_OBJECT -public: - AMBEEngine(); - ~AMBEEngine(); - - void scan(std::vector& ambeDevices); - void releaseAll(); - - int getNbDevices() const { return m_controllers.size(); } //!< number of devices used - void getDeviceRefs(std::vector& devicesRefs); //!< reference of the devices used (device path or url) - bool registerController(const std::string& deviceRef); //!< create a new controller for the device in reference - void releaseController(const std::string& deviceRef); //!< release controller resources for the device in reference - - void pushMbeFrame( - const unsigned char *mbeFrame, - int mbeRateIndex, - int mbeVolumeIndex, - unsigned char channels, - bool useHP, - int upsampling, - AudioFifo *audioFifo); - - QByteArray serialize() const; - bool deserialize(const QByteArray& data); - -private: - struct AMBEController - { - AMBEController() : - thread(nullptr), - worker(nullptr) - {} - - QThread *thread; - AMBEWorker *worker; - std::string device; - }; - -#ifndef _WIN32 - static std::string get_driver(const std::string& tty); - static void register_comport(std::vector& comList, std::vector& comList8250, const std::string& dir); - static void probe_serial8250_comports(std::vector& comList, std::vector comList8250); -#endif - void getComList(); - - std::vector m_controllers; - std::vector m_comList; - std::vector m_comList8250; - QMutex m_mutex; -}; - - - -#endif /* SDRBASE_AMBE_AMBEENGINE_H_ */ diff --git a/sdrbase/ambe/ambeworker.cpp b/sdrbase/ambe/ambeworker.cpp deleted file mode 100644 index 37713daba..000000000 --- a/sdrbase/ambe/ambeworker.cpp +++ /dev/null @@ -1,232 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2019 F4EXB // -// written by Edouard Griffiths // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// (at your option) any later version. // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include - -#include "audio/audiofifo.h" -#include "ambeworker.h" - -MESSAGE_CLASS_DEFINITION(AMBEWorker::MsgMbeDecode, Message) -MESSAGE_CLASS_DEFINITION(AMBEWorker::MsgTest, Message) - -AMBEWorker::AMBEWorker() : - m_running(false), - m_currentGainIn(0), - m_currentGainOut(0), - m_upsamplerLastValue(0.0f), - m_phase(0), - m_upsampling(1), - m_volume(1.0f) -{ - m_audioBuffer.resize(48000); - m_audioBufferFill = 0; - m_audioFifo = 0; - std::fill(m_dvAudioSamples, m_dvAudioSamples+SerialDV::MBE_AUDIO_BLOCK_SIZE, 0); - setVolumeFactors(); -} - -AMBEWorker::~AMBEWorker() -{} - -bool AMBEWorker::open(const std::string& deviceRef) -{ - return m_dvController.open(deviceRef); -} - -void AMBEWorker::close() -{ - m_dvController.close(); -} - -void AMBEWorker::process() -{ - m_running = true; - qDebug("AMBEWorker::process: started"); - - while (m_running) - { - std::this_thread::sleep_for(std::chrono::seconds(1)); - } - - qDebug("AMBEWorker::process: stopped"); - emit finished(); -} - -void AMBEWorker::stop() -{ - m_running = false; -} - -void AMBEWorker::handleInputMessages() -{ - Message* message; - m_audioBufferFill = 0; - AudioFifo *audioFifo = 0; - - while ((message = m_inputMessageQueue.pop()) != 0) - { - if (MsgMbeDecode::match(*message)) - { - MsgMbeDecode *decodeMsg = (MsgMbeDecode *) message; - int dBVolume = (decodeMsg->getVolumeIndex() - 30) / 4; - float volume = pow(10.0, dBVolume / 10.0f); - int upsampling = decodeMsg->getUpsampling(); - upsampling = upsampling > 6 ? 6 : upsampling < 1 ? 1 : upsampling; - - if ((volume != m_volume) || (upsampling != m_upsampling)) - { - m_volume = volume; - m_upsampling = upsampling; - setVolumeFactors(); - } - - m_upsampleFilter.useHP(decodeMsg->getUseHP()); - - if (m_dvController.decode(m_dvAudioSamples, decodeMsg->getMbeFrame(), decodeMsg->getMbeRate())) - { - if (upsampling > 1) { - upsample(upsampling, m_dvAudioSamples, SerialDV::MBE_AUDIO_BLOCK_SIZE, decodeMsg->getChannels()); - } else { - noUpsample(m_dvAudioSamples, SerialDV::MBE_AUDIO_BLOCK_SIZE, decodeMsg->getChannels()); - } - - audioFifo = decodeMsg->getAudioFifo(); - - if (audioFifo && (m_audioBufferFill >= m_audioBuffer.size() - 960)) - { - uint res = audioFifo->write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); - - if (res != m_audioBufferFill) { - qDebug("AMBEWorker::handleInputMessages: %u/%u audio samples written", res, m_audioBufferFill); - } - - m_audioBufferFill = 0; - } - } - else - { - qDebug("AMBEWorker::handleInputMessages: MsgMbeDecode: decode failed"); - } - } - - delete message; - - if (m_inputMessageQueue.size() > 100) - { - qDebug("AMBEWorker::handleInputMessages: MsgMbeDecode: too many messages in queue. Flushing..."); - m_inputMessageQueue.clear(); - break; - } - } - - if (audioFifo) - { - uint res = audioFifo->write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); - - if (res != m_audioBufferFill) { - qDebug("AMBEWorker::handleInputMessages: %u/%u audio samples written", res, m_audioBufferFill); - } - - m_audioBufferFill = 0; - } - - m_timestamp = QDateTime::currentDateTime(); -} - -void AMBEWorker::pushMbeFrame(const unsigned char *mbeFrame, - int mbeRateIndex, - int mbeVolumeIndex, - unsigned char channels, - bool useHP, - int upsampling, - AudioFifo *audioFifo) -{ - m_audioFifo = audioFifo; - m_inputMessageQueue.push(MsgMbeDecode::create(mbeFrame, mbeRateIndex, mbeVolumeIndex, channels, useHP, upsampling, audioFifo)); -} - -bool AMBEWorker::isAvailable() -{ - if (m_audioFifo == 0) { - return true; - } - - return m_timestamp.time().msecsTo(QDateTime::currentDateTime().time()) > 1000; // 1 second inactivity timeout -} - -bool AMBEWorker::hasFifo(AudioFifo *audioFifo) -{ - return m_audioFifo == audioFifo; -} - -void AMBEWorker::upsample(int upsampling, short *in, int nbSamplesIn, unsigned char channels) -{ - for (int i = 0; i < nbSamplesIn; i++) - { - //float cur = m_upsampleFilter.usesHP() ? m_upsampleFilter.runHP((float) m_compressor.compress(in[i])) : (float) m_compressor.compress(in[i]); - float cur = m_upsampleFilter.usesHP() ? m_upsampleFilter.runHP((float) in[i]) : (float) in[i]; - float prev = m_upsamplerLastValue; - qint16 upsample; - - for (int j = 1; j <= upsampling; j++) - { - upsample = (qint16) m_upsampleFilter.runLP(cur*m_upsamplingFactors[j] + prev*m_upsamplingFactors[upsampling-j]); - m_audioBuffer[m_audioBufferFill].l = channels & 1 ? m_compressor.compress(upsample) : 0; - m_audioBuffer[m_audioBufferFill].r = (channels>>1) & 1 ? m_compressor.compress(upsample) : 0; - - if (m_audioBufferFill < m_audioBuffer.size() - 1) { - ++m_audioBufferFill; - } - } - - m_upsamplerLastValue = cur; - } - - if (m_audioBufferFill >= m_audioBuffer.size() - 1) { - qDebug("AMBEWorker::upsample(%d): audio buffer is full check its size", upsampling); - } -} - -void AMBEWorker::noUpsample(short *in, int nbSamplesIn, unsigned char channels) -{ - for (int i = 0; i < nbSamplesIn; i++) - { - float cur = m_upsampleFilter.usesHP() ? m_upsampleFilter.runHP((float) in[i]) : (float) in[i]; - m_audioBuffer[m_audioBufferFill].l = channels & 1 ? cur*m_upsamplingFactors[0] : 0; - m_audioBuffer[m_audioBufferFill].r = (channels>>1) & 1 ? cur*m_upsamplingFactors[0] : 0; - - if (m_audioBufferFill < m_audioBuffer.size() - 1) { - ++m_audioBufferFill; - } - } - - if (m_audioBufferFill >= m_audioBuffer.size() - 1) { - qDebug("AMBEWorker::noUpsample: audio buffer is full check its size"); - } -} - -void AMBEWorker::setVolumeFactors() -{ - m_upsamplingFactors[0] = m_volume; - - for (int i = 1; i <= m_upsampling; i++) { - m_upsamplingFactors[i] = (i*m_volume) / (float) m_upsampling; - } -} diff --git a/sdrbase/ambe/ambeworker.h b/sdrbase/ambe/ambeworker.h deleted file mode 100644 index e6136c139..000000000 --- a/sdrbase/ambe/ambeworker.h +++ /dev/null @@ -1,156 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2019 F4EXB // -// written by Edouard Griffiths // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// (at your option) any later version. // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef SDRBASE_AMBE_AMBEWORKER_H_ -#define SDRBASE_AMBE_AMBEWORKER_H_ - -#include -#include -#include - -#include "export.h" -#include "dvcontroller.h" - -#include "util/messagequeue.h" -#include "util/message.h" -#include "dsp/filtermbe.h" -#include "dsp/dsptypes.h" -#include "audio/audiocompressor.h" - -class AudioFifo; - -class SDRBASE_API AMBEWorker : public QObject { - Q_OBJECT -public: - class MsgTest : public Message - { - MESSAGE_CLASS_DECLARATION - public: - static MsgTest* create() { return new MsgTest(); } - private: - MsgTest() {} - }; - - class MsgMbeDecode : public Message - { - MESSAGE_CLASS_DECLARATION - public: - const unsigned char *getMbeFrame() const { return m_mbeFrame; } - SerialDV::DVRate getMbeRate() const { return m_mbeRate; } - int getVolumeIndex() const { return m_volumeIndex; } - unsigned char getChannels() const { return m_channels % 4; } - bool getUseHP() const { return m_useHP; } - int getUpsampling() const { return m_upsampling; } - AudioFifo *getAudioFifo() { return m_audioFifo; } - - static MsgMbeDecode* create( - const unsigned char *mbeFrame, - int mbeRateIndex, - int volumeIndex, - unsigned char channels, - bool useHP, - int upsampling, - AudioFifo *audioFifo) - { - return new MsgMbeDecode(mbeFrame, (SerialDV::DVRate) mbeRateIndex, volumeIndex, channels, useHP, upsampling, audioFifo); - } - - private: - unsigned char m_mbeFrame[SerialDV::MBE_FRAME_MAX_LENGTH_BYTES]; - SerialDV::DVRate m_mbeRate; - int m_volumeIndex; - unsigned char m_channels; - bool m_useHP; - int m_upsampling; - AudioFifo *m_audioFifo; - - MsgMbeDecode(const unsigned char *mbeFrame, - SerialDV::DVRate mbeRate, - int volumeIndex, - unsigned char channels, - bool useHP, - int upsampling, - AudioFifo *audioFifo) : - Message(), - m_mbeRate(mbeRate), - m_volumeIndex(volumeIndex), - m_channels(channels), - m_useHP(useHP), - m_upsampling(upsampling), - m_audioFifo(audioFifo) - { - memcpy((void *) m_mbeFrame, (const void *) mbeFrame, SerialDV::DVController::getNbMbeBytes(m_mbeRate)); - } - }; - - AMBEWorker(); - ~AMBEWorker(); - - void pushMbeFrame(const unsigned char *mbeFrame, - int mbeRateIndex, - int mbeVolumeIndex, - unsigned char channels, - bool useHP, - int upsampling, - AudioFifo *audioFifo); - - bool open(const std::string& deviceRef); //!< Either serial device or ip:port - void close(); - void process(); - void stop(); - bool isAvailable(); - bool hasFifo(AudioFifo *audioFifo); - - void postTest() - { - //emit inputMessageReady(); - m_inputMessageQueue.push(MsgTest::create()); - } - - MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication - -signals: - void finished(); - -public slots: - void handleInputMessages(); - -private: - void upsample(int upsampling, short *in, int nbSamplesIn, unsigned char channels); - void noUpsample(short *in, int nbSamplesIn, unsigned char channels); - void setVolumeFactors(); - - SerialDV::DVController m_dvController; - AudioFifo *m_audioFifo; - QDateTime m_timestamp; - volatile bool m_running; - int m_currentGainIn; - int m_currentGainOut; - short m_dvAudioSamples[SerialDV::MBE_AUDIO_BLOCK_SIZE]; - AudioVector m_audioBuffer; - uint m_audioBufferFill; - float m_upsamplerLastValue; - float m_phase; - MBEAudioInterpolatorFilter m_upsampleFilter; - int m_upsampling; - float m_volume; - float m_upsamplingFactors[7]; - AudioCompressor m_compressor; -}; - -#endif // SDRBASE_AMBE_AMBEWORKER_H_ diff --git a/sdrbase/settings/mainsettings.cpp b/sdrbase/settings/mainsettings.cpp index a1cd3b40f..f4d988d59 100644 --- a/sdrbase/settings/mainsettings.cpp +++ b/sdrbase/settings/mainsettings.cpp @@ -7,7 +7,6 @@ #include "settings/mainsettings.h" #include "commands/command.h" #include "audio/audiodevicemanager.h" -#include "ambe/ambeengine.h" MainSettings::MainSettings() : m_audioDeviceManager(nullptr) diff --git a/sdrbench/mainbench.cpp b/sdrbench/mainbench.cpp index 5d1ec92bc..624d3fcba 100644 --- a/sdrbench/mainbench.cpp +++ b/sdrbench/mainbench.cpp @@ -20,8 +20,6 @@ #include #include -#include "ambe/ambeengine.h" - #include "mainbench.h" MainBench *MainBench::m_instance = 0;