- renamded
git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@890 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* File: RxBuffer.hpp
|
* File: ReceiverBuffer.hpp
|
||||||
* Author: jens
|
* Author: jens
|
||||||
*
|
*
|
||||||
* Created on 22. Dezember 2014, 15:47
|
* Created on 22. Dezember 2014, 15:47
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef RXBUFFER_HPP
|
#ifndef RECEIVERBUFFER_HPP
|
||||||
#define RXBUFFER_HPP
|
#define RECEIVERBUFFER_HPP
|
||||||
|
|
||||||
#include <cpp/radio/Vector.hpp>
|
#include <cpp/radio/Vector.hpp>
|
||||||
|
|
||||||
@@ -88,5 +88,5 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* RXBUFFER_HPP */
|
#endif /* RECEIVERBUFFER_HPP */
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#ifndef _TRANSMITTER_H_
|
#ifndef _TRANSMITTER_HPP_
|
||||||
#define _TRANSMITTER_H_
|
#define _TRANSMITTER_HPP_
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <radio/symbol.h>
|
#include <radio/symbol.h>
|
||||||
@@ -13,135 +13,15 @@
|
|||||||
#include <cpp/radio/Nco.hpp>
|
#include <cpp/radio/Nco.hpp>
|
||||||
#include <cpp/radio/Interpolation.hpp>
|
#include <cpp/radio/Interpolation.hpp>
|
||||||
|
|
||||||
|
#include "TransmitterInterface.hpp"
|
||||||
|
#include "TransmitterBuffer.hpp"
|
||||||
|
|
||||||
using namespace Radio;
|
using namespace Radio;
|
||||||
|
|
||||||
#define TRANSMITTER_RCF_OVERSAMPLING ((uint32_t)32)
|
#define TRANSMITTER_RCF_OVERSAMPLING ((uint32_t)32)
|
||||||
#define TRANSMITTER_RCF_ROLLOFF ((radio_float_t)0.35)
|
#define TRANSMITTER_RCF_ROLLOFF ((radio_float_t)0.35)
|
||||||
|
|
||||||
class Transmitter;
|
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
class TransmitterInterface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
TransmitterInterface() {}
|
|
||||||
virtual ~TransmitterInterface() {}
|
|
||||||
|
|
||||||
virtual void reset() = 0;
|
|
||||||
virtual void setBuffersize(uint32_t size) = 0;
|
|
||||||
virtual void setSamplerate(float samplerate_hz) = 0;
|
|
||||||
virtual void setCarrierFrequency(float frequency_hz) = 0;
|
|
||||||
virtual float getCarrierFrequency() = 0;
|
|
||||||
virtual void setSymbolRate(float symbolrate_bit_per_sec) = 0;
|
|
||||||
virtual float getSymbolRate() = 0;
|
|
||||||
virtual void setNumBitPerSymbol(uint32_t numBitPerSymbol) = 0;
|
|
||||||
virtual void getData(float *pRF, uint32_t len) = 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class TxBuffer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
TxBuffer(uint32_t size, uint32_t numBuffers)
|
|
||||||
: m_ppBuffer(0)
|
|
||||||
, m_capacityPerBuffer(0)
|
|
||||||
, m_numBuffers(0)
|
|
||||||
, m_pT(0)
|
|
||||||
{
|
|
||||||
resize(size, numBuffers);
|
|
||||||
}
|
|
||||||
|
|
||||||
~TxBuffer()
|
|
||||||
{
|
|
||||||
resize(0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void write(RVec const &data, uint32_t len)
|
|
||||||
{
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
m_pT = Thread::getCurrentThread();
|
|
||||||
while (m_numfill.get() >= m_numBuffers)
|
|
||||||
{
|
|
||||||
m_pT->wait(100);
|
|
||||||
if (m_pT->threadShouldExit())
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (i=0; i < len; i++)
|
|
||||||
{
|
|
||||||
m_ppBuffer[m_w][i] = data[i];
|
|
||||||
}
|
|
||||||
m_w++;
|
|
||||||
if (m_w >= m_numBuffers)
|
|
||||||
m_w = 0;
|
|
||||||
|
|
||||||
m_numfill += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t read(float *pData)
|
|
||||||
{
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
if (m_numfill.get() == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (i=0; i < m_capacityPerBuffer; i++)
|
|
||||||
{
|
|
||||||
pData[i] = m_ppBuffer[m_r][i];
|
|
||||||
}
|
|
||||||
m_r++;
|
|
||||||
if (m_r >= m_numBuffers)
|
|
||||||
m_r = 0;
|
|
||||||
|
|
||||||
m_numfill -= 1;
|
|
||||||
|
|
||||||
if (m_pT)
|
|
||||||
m_pT->notify();
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
void resize(uint32_t size, uint32_t numBuffers)
|
|
||||||
{
|
|
||||||
|
|
||||||
uint32_t i;
|
|
||||||
if ((size != m_capacityPerBuffer) || (numBuffers != m_numBuffers))
|
|
||||||
{
|
|
||||||
if (m_ppBuffer)
|
|
||||||
{
|
|
||||||
for (i=0; i < m_numBuffers; i++)
|
|
||||||
{
|
|
||||||
delete m_ppBuffer[i];
|
|
||||||
}
|
|
||||||
delete m_ppBuffer;
|
|
||||||
m_ppBuffer = nullptr;
|
|
||||||
}
|
|
||||||
m_r = 0;
|
|
||||||
m_w = 0;
|
|
||||||
m_numfill = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_numBuffers = numBuffers;
|
|
||||||
m_capacityPerBuffer = size;
|
|
||||||
|
|
||||||
if (!size || !numBuffers)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_ppBuffer = new float*[m_numBuffers];
|
|
||||||
for (i=0; i < m_numBuffers; i++)
|
|
||||||
{
|
|
||||||
m_ppBuffer[i] = new float[m_capacityPerBuffer];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
Atomic<uint32_t> m_numfill;
|
|
||||||
float **m_ppBuffer;
|
|
||||||
uint32_t m_capacityPerBuffer;
|
|
||||||
uint32_t m_numBuffers;
|
|
||||||
uint32_t m_r;
|
|
||||||
uint32_t m_w;
|
|
||||||
Thread *m_pT;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Transmitter : public TransmitterInterface, public ISymbolizer, public juce::Thread
|
class Transmitter : public TransmitterInterface, public ISymbolizer, public juce::Thread
|
||||||
{
|
{
|
||||||
@@ -170,7 +50,7 @@ private:
|
|||||||
radio_float_t m_carrierFreq;
|
radio_float_t m_carrierFreq;
|
||||||
Nco m_duc;
|
Nco m_duc;
|
||||||
|
|
||||||
TxBuffer m_txBuf;
|
TransmitterBuffer m_txBuf;
|
||||||
uint32_t m_symCount;
|
uint32_t m_symCount;
|
||||||
uint32_t m_upsampleFactor;
|
uint32_t m_upsampleFactor;
|
||||||
|
|
||||||
@@ -270,4 +150,4 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _TRANSMITTER_H_
|
#endif // _TRANSMITTER_HPP_
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
#ifndef TRANSMITTERBUFFER_HPP
|
||||||
|
#define TRANSMITTERBUFFER_HPP
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cpp/radio/Vector.hpp>
|
||||||
|
#include "JuceHeader.h"
|
||||||
|
|
||||||
|
class TransmitterBuffer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TransmitterBuffer(uint32_t size, uint32_t numBuffers)
|
||||||
|
: m_ppBuffer(0)
|
||||||
|
, m_capacityPerBuffer(0)
|
||||||
|
, m_numBuffers(0)
|
||||||
|
, m_pT(0)
|
||||||
|
{
|
||||||
|
resize(size, numBuffers);
|
||||||
|
}
|
||||||
|
|
||||||
|
~TransmitterBuffer()
|
||||||
|
{
|
||||||
|
resize(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void write(Radio::RVec const &data, uint32_t len)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
m_pT = Thread::getCurrentThread();
|
||||||
|
while (m_numfill.get() >= m_numBuffers)
|
||||||
|
{
|
||||||
|
m_pT->wait(100);
|
||||||
|
if (m_pT->threadShouldExit())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (i=0; i < len; i++)
|
||||||
|
{
|
||||||
|
m_ppBuffer[m_w][i] = data[i];
|
||||||
|
}
|
||||||
|
m_w++;
|
||||||
|
if (m_w >= m_numBuffers)
|
||||||
|
m_w = 0;
|
||||||
|
|
||||||
|
m_numfill += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t read(float *pData)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
if (m_numfill.get() == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i=0; i < m_capacityPerBuffer; i++)
|
||||||
|
{
|
||||||
|
pData[i] = m_ppBuffer[m_r][i];
|
||||||
|
}
|
||||||
|
m_r++;
|
||||||
|
if (m_r >= m_numBuffers)
|
||||||
|
m_r = 0;
|
||||||
|
|
||||||
|
m_numfill -= 1;
|
||||||
|
|
||||||
|
if (m_pT)
|
||||||
|
m_pT->notify();
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void resize(uint32_t size, uint32_t numBuffers)
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32_t i;
|
||||||
|
if ((size != m_capacityPerBuffer) || (numBuffers != m_numBuffers))
|
||||||
|
{
|
||||||
|
if (m_ppBuffer)
|
||||||
|
{
|
||||||
|
for (i=0; i < m_numBuffers; i++)
|
||||||
|
{
|
||||||
|
delete m_ppBuffer[i];
|
||||||
|
}
|
||||||
|
delete m_ppBuffer;
|
||||||
|
m_ppBuffer = nullptr;
|
||||||
|
}
|
||||||
|
m_r = 0;
|
||||||
|
m_w = 0;
|
||||||
|
m_numfill = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_numBuffers = numBuffers;
|
||||||
|
m_capacityPerBuffer = size;
|
||||||
|
|
||||||
|
if (!size || !numBuffers)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_ppBuffer = new float*[m_numBuffers];
|
||||||
|
for (i=0; i < m_numBuffers; i++)
|
||||||
|
{
|
||||||
|
m_ppBuffer[i] = new float[m_capacityPerBuffer];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Atomic<uint32_t> m_numfill;
|
||||||
|
float **m_ppBuffer;
|
||||||
|
uint32_t m_capacityPerBuffer;
|
||||||
|
uint32_t m_numBuffers;
|
||||||
|
uint32_t m_r;
|
||||||
|
uint32_t m_w;
|
||||||
|
Thread *m_pT;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#ifndef TRANSMITTERINTERFACE_HPP
|
||||||
|
#define TRANSMITTERINTERFACE_HPP
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
class TransmitterInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TransmitterInterface() {}
|
||||||
|
virtual ~TransmitterInterface() {}
|
||||||
|
|
||||||
|
virtual void reset() = 0;
|
||||||
|
virtual void setBuffersize(uint32_t size) = 0;
|
||||||
|
virtual void setSamplerate(float samplerate_hz) = 0;
|
||||||
|
virtual void setCarrierFrequency(float frequency_hz) = 0;
|
||||||
|
virtual float getCarrierFrequency() = 0;
|
||||||
|
virtual void setSymbolRate(float symbolrate_bit_per_sec) = 0;
|
||||||
|
virtual float getSymbolRate() = 0;
|
||||||
|
virtual void setNumBitPerSymbol(uint32_t numBitPerSymbol) = 0;
|
||||||
|
virtual void getData(float *pRF, uint32_t len) = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user