diff --git a/Source/MainComponent.cpp b/Source/MainComponent.cpp index 98dcf9d..be16890 100644 --- a/Source/MainComponent.cpp +++ b/Source/MainComponent.cpp @@ -28,15 +28,14 @@ //============================================================================== MainComponent::MainComponent () - : m_TextEditor(new TextEditor), + : Thread("Receiver"), + m_TextEditor(new TextEditor), m_sharedAudioDeviceManager(nullptr), m_AudioDeviceSelectorComponent(new AudioDeviceSelectorComponent (getSharedAudioDeviceManager(), 0, 256, 0, 256, true, true, true, false)), m_pReceiver(new Receiver(this)), m_pTransmitter(new Transmitter()), m_ControlComponent(new ControlComponent(m_pReceiver, m_pTransmitter)), m_log(this), m_pReceiverControl(m_pReceiver) - , Thread("Receiver") - { addAndMakeVisible (tabbedComponent = new TabbedComponent (TabbedButtonBar::TabsAtTop)); tabbedComponent->setTabBarDepth (38); @@ -208,8 +207,8 @@ void MainComponent::timerCallback() BEGIN_JUCER_METADATA diff --git a/Source/MainComponent.h b/Source/MainComponent.h index a5485b0..16dfee6 100644 --- a/Source/MainComponent.h +++ b/Source/MainComponent.h @@ -48,7 +48,7 @@ class MainComponent : public Component, public ReceiverDataListener, public LogHandler, public Timer, - public Thread + public Thread { public: //============================================================================== diff --git a/Source/RxBuffer.hpp b/Source/RxBuffer.hpp new file mode 100644 index 0000000..749eb32 --- /dev/null +++ b/Source/RxBuffer.hpp @@ -0,0 +1,92 @@ +/* + * File: RxBuffer.hpp + * Author: jens + * + * Created on 22. Dezember 2014, 15:47 + */ + +#ifndef RXBUFFER_HPP +#define RXBUFFER_HPP + +#include + +using namespace Radio; + + +template +class RxBuffer +{ +public: + RxBuffer(uint32_t size=0) + : m_pT(nullptr) + , m_size(size) + { + resize(size); + } + + ~RxBuffer() + { + } + + void write(RVec const &data, uint32_t len) + { + if (m_numfill.get() >= numBuffers) + return; + + m_buffers[m_w++] = data; + + if (m_w >= numBuffers) + m_w = 0; + + m_numfill += 1; + + if (m_pT) + m_pT->notify(); + } + + const RVec& read() + { + uint32_t index; + m_pT = Thread::getCurrentThread(); + + while (m_numfill.get() == 0) + { + m_pT->wait(100); + if (m_pT->threadShouldExit()) + return m_buffers[0]; + } + + index = m_r++; + if (m_r >= numBuffers) + m_r = 0; + + m_numfill -= 1; + + return m_buffers[index]; + } + + void resize(uint32_t size) + { + for (int i=0; i < numBuffers; i++) + { + m_buffers[i].resize(size); + } + + m_r = 0; + m_w = 0; + m_size = size; + m_numfill = 0; + } + +private: + Thread *m_pT; + Atomic m_numfill; + RVec m_buffers[numBuffers]; + uint32_t m_size; + uint32_t m_r; + uint32_t m_w; +}; + + +#endif /* RXBUFFER_HPP */ +