Files
fail/src/plugins/signalgenerator/SignalGenerator.cc
Martin Hoffmann 6fa0ae970b Coding Guideline: Fixes.
Sorry, for the small changesets.

Change-Id: I12e7b1b4efff0c63020613e399f8185ace97aec7
2013-11-11 13:27:43 +01:00

66 lines
1.4 KiB
C++

#include "SignalGenerator.hpp"
#include "sal/Listener.hpp"
#include "sal/Memory.hpp"
using namespace std;
using namespace fail;
bool SignalGenerator::run()
{
m_log << "Signalgenerator started. @ " << m_symbol << std::endl;
MemoryManager& mm = simulator.getMemoryManager();
MemReadListener l_mem(m_symbol.getAddress());
/**
* for EZS we currently use 8bit ADCs.
* @todo Make more versatile for future use.
*/
uint8_t value;
while (true) {
simulator.addListenerAndResume(&l_mem);
value = handleEvent();
mm.setBytes(m_symbol.getAddress(), sizeof(value), &value);
}
return true;
}
uint8_t SignalGenerator::handleEvent(void)
{
double val = m_signal->calculate();
// Scale to uint8: 0 .. 255
val = val * 127; // -1: -127 .. +1: +127
val = val + 127; // -127: 0 .. +127 : 254
return (uint8_t) val;
}
Sine::Sine(const SineParams_t param)
{
m_params.push_back(param);
}
double Sine::calculate() const
{
simtime_t tps = ticksPerSecond();
if(tps == 0){
// Simulator speed not valid.
return 0;
}
// Get simulation time in seconds.
double sec = (double)simulator.getTimerTicks() / tps;
// Sum up all sine waves
double val = 0;
for(Sine::SineParamsList_t::const_iterator it = m_params.begin();
it != m_params.end(); it++)
{
val += it->amplitude * sinus(it->freq_in_hz, sec);
}
return val;
}