adding_metadata_to_gr
alon 2024-02-05 20:01:10 +02:00
rodzic 206e1cbb11
commit b8a9fe8dc0
4 zmienionych plików z 21 dodań i 9 usunięć

Wyświetl plik

@ -57,4 +57,8 @@ outputs:
domain: stream domain: stream
dtype: complex dtype: complex
- label: meta
domain: stream
dtype: byte
file_format: 1 file_format: 1

Wyświetl plik

@ -10,7 +10,6 @@
namespace gr { namespace gr {
namespace caribouLite { namespace caribouLite {
using output_type = gr_complex;
void detectBoard() void detectBoard()
{ {
@ -40,7 +39,7 @@ namespace gr {
caribouLiteSource_impl::caribouLiteSource_impl(int channel, bool enable_agc, float rx_gain, float rx_bw, float sample_rate, float freq) caribouLiteSource_impl::caribouLiteSource_impl(int channel, bool enable_agc, float rx_gain, float rx_bw, float sample_rate, float freq)
: gr::sync_block("caribouLiteSource", : gr::sync_block("caribouLiteSource",
gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0),
gr::io_signature::make(1 /* min outputs */, 1 /*max outputs */, sizeof(output_type))) gr::io_signature::make(1 /* min outputs */, 1 /*max outputs */, sizeof(gr_complex)))
{ {
detectBoard(); detectBoard();
@ -79,8 +78,9 @@ namespace gr {
gr_vector_const_void_star &input_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)
{ {
auto out = static_cast<output_type*>(output_items[0]); auto out_samples = static_cast<gr_complex*>(output_items[0]);
int ret = _radio->ReadSamples(out, static_cast<size_t>(noutput_items)); auto out_meta = static_cast<cariboulite_sample_meta*>(output_items[1]);
int ret = _radio->ReadSamples(out_samples, out_meta, static_cast<size_t>(noutput_items));
if (ret <= 0) return 0; if (ret <= 0) return 0;
return ret; return ret;
} }

Wyświetl plik

@ -183,8 +183,8 @@ public:
bool GetIsTransmittingCw(void); bool GetIsTransmittingCw(void);
// Synchronous Reading and Writing // Synchronous Reading and Writing
int ReadSamples(std::complex<float>* samples, size_t num_to_read); int ReadSamples(std::complex<float>* samples, cariboulite_sample_meta* meta, size_t num_to_read);
int ReadSamples(std::complex<short>* samples, size_t num_to_read); int ReadSamples(std::complex<short>* samples, cariboulite_sample_meta* meta, size_t num_to_read);
int WriteSamples(std::complex<float>* samples, size_t num_to_write); int WriteSamples(std::complex<float>* samples, size_t num_to_write);
int WriteSamples(std::complex<short>* samples, size_t num_to_write); int WriteSamples(std::complex<short>* samples, size_t num_to_write);

Wyświetl plik

@ -68,7 +68,7 @@ void CaribouLiteRadio::CaribouLiteRxThread(CaribouLiteRadio* radio)
} }
//================================================================== //==================================================================
int CaribouLiteRadio::ReadSamples(std::complex<float>* samples, size_t num_to_read) int CaribouLiteRadio::ReadSamples(std::complex<float>* samples, cariboulite_sample_meta* meta, size_t num_to_read)
{ {
if (samples == 0) if (samples == 0)
{ {
@ -76,7 +76,7 @@ int CaribouLiteRadio::ReadSamples(std::complex<float>* samples, size_t num_to_re
return 0; return 0;
} }
int ret = ReadSamples((std::complex<short>*)NULL, num_to_read); int ret = ReadSamples((std::complex<short>*)NULL, meta, num_to_read);
//printf("ret = %d\n", ret); //printf("ret = %d\n", ret);
if (ret <= 0) if (ret <= 0)
{ {
@ -94,7 +94,7 @@ int CaribouLiteRadio::ReadSamples(std::complex<float>* samples, size_t num_to_re
} }
//================================================================== //==================================================================
int CaribouLiteRadio::ReadSamples(std::complex<short>* samples, size_t num_to_read) int CaribouLiteRadio::ReadSamples(std::complex<short>* samples, cariboulite_sample_meta* meta, size_t num_to_read)
{ {
if (!_rx_is_active || _read_samples == NULL || _read_metadata == NULL || num_to_read == 0) if (!_rx_is_active || _read_samples == NULL || _read_metadata == NULL || num_to_read == 0)
{ {
@ -119,6 +119,14 @@ int CaribouLiteRadio::ReadSamples(std::complex<short>* samples, size_t num_to_re
samples[i] = {_read_samples[i].i, _read_samples[i].q}; samples[i] = {_read_samples[i].i, _read_samples[i].q};
} }
} }
if (meta)
{
for (size_t i = 0; i < (size_t)ret; i++)
{
meta[i] = _read_metadata[i];
}
}
return ret; return ret;
} }