#include "udp_source.h" #include "dsp/block.h" #include "dsp/block_helpers.h" #include #include namespace satdump { namespace ndsp { template UDPSourceBlock::UDPSourceBlock() : Block("udp_source_" + getShortTypeName(), {}, // {{"out", getTypeSampleType()}}) { } template UDPSourceBlock::~UDPSourceBlock() { } template bool UDPSourceBlock::work() { if (work_should_exit) { outputs[0].fifo->wait_enqueue(outputs[0].fifo->newBufferTerminator()); return true; } try { auto oblk = outputs[0].fifo->newBufferSamples(max_pkt_size, sizeof(T)); try { oblk.size = udp_rx->recv((uint8_t *)oblk.template getSamples(), max_pkt_size); } catch (std::exception &e) { oblk.size = 0; } if (oblk.size) outputs[0].fifo->wait_enqueue(oblk); else outputs[0].fifo->free(oblk); return false; } catch (std::exception &e) { logger->error("%s", e.what()); outputs[0].fifo->wait_enqueue(outputs[0].fifo->newBufferTerminator()); return true; } } template class UDPSourceBlock; template class UDPSourceBlock; template class UDPSourceBlock; template class UDPSourceBlock; template class UDPSourceBlock; } // namespace ndsp } // namespace satdump