From b8a9fe8dc07619ac2c11ac049db6516b2d779d44 Mon Sep 17 00:00:00 2001 From: alon Date: Mon, 5 Feb 2024 20:01:10 +0200 Subject: [PATCH 1/5] up --- .../grc/caribouLite_caribouLiteSource.block.yml | 4 ++++ .../gr-caribouLite/lib/caribouLiteSource_impl.cc | 8 ++++---- software/libcariboulite/src/CaribouLite.hpp | 4 ++-- .../libcariboulite/src/CaribouLiteRadioCpp.cpp | 14 +++++++++++--- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml index 236d391..790b9b1 100644 --- a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml +++ b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml @@ -57,4 +57,8 @@ outputs: domain: stream dtype: complex +- label: meta + domain: stream + dtype: byte + file_format: 1 diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc index 316b2b8..dc66ee3 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc @@ -10,7 +10,6 @@ namespace gr { namespace caribouLite { - using output_type = gr_complex; 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) : gr::sync_block("caribouLiteSource", 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(); @@ -79,8 +78,9 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - auto out = static_cast(output_items[0]); - int ret = _radio->ReadSamples(out, static_cast(noutput_items)); + auto out_samples = static_cast(output_items[0]); + auto out_meta = static_cast(output_items[1]); + int ret = _radio->ReadSamples(out_samples, out_meta, static_cast(noutput_items)); if (ret <= 0) return 0; return ret; } diff --git a/software/libcariboulite/src/CaribouLite.hpp b/software/libcariboulite/src/CaribouLite.hpp index bef414b..f96ab7d 100644 --- a/software/libcariboulite/src/CaribouLite.hpp +++ b/software/libcariboulite/src/CaribouLite.hpp @@ -183,8 +183,8 @@ public: bool GetIsTransmittingCw(void); // Synchronous Reading and Writing - int ReadSamples(std::complex* samples, size_t num_to_read); - int ReadSamples(std::complex* samples, size_t num_to_read); + int ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read); + int ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read); int WriteSamples(std::complex* samples, size_t num_to_write); int WriteSamples(std::complex* samples, size_t num_to_write); diff --git a/software/libcariboulite/src/CaribouLiteRadioCpp.cpp b/software/libcariboulite/src/CaribouLiteRadioCpp.cpp index 8fd65dc..77e0c03 100644 --- a/software/libcariboulite/src/CaribouLiteRadioCpp.cpp +++ b/software/libcariboulite/src/CaribouLiteRadioCpp.cpp @@ -68,7 +68,7 @@ void CaribouLiteRadio::CaribouLiteRxThread(CaribouLiteRadio* radio) } //================================================================== -int CaribouLiteRadio::ReadSamples(std::complex* samples, size_t num_to_read) +int CaribouLiteRadio::ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read) { if (samples == 0) { @@ -76,7 +76,7 @@ int CaribouLiteRadio::ReadSamples(std::complex* samples, size_t num_to_re return 0; } - int ret = ReadSamples((std::complex*)NULL, num_to_read); + int ret = ReadSamples((std::complex*)NULL, meta, num_to_read); //printf("ret = %d\n", ret); if (ret <= 0) { @@ -94,7 +94,7 @@ int CaribouLiteRadio::ReadSamples(std::complex* samples, size_t num_to_re } //================================================================== -int CaribouLiteRadio::ReadSamples(std::complex* samples, size_t num_to_read) +int CaribouLiteRadio::ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read) { if (!_rx_is_active || _read_samples == NULL || _read_metadata == NULL || num_to_read == 0) { @@ -119,6 +119,14 @@ int CaribouLiteRadio::ReadSamples(std::complex* samples, size_t num_to_re 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; } From 6050cf0627998e165419a0d323bb9f42d32eadfc Mon Sep 17 00:00:00 2001 From: alon Date: Tue, 6 Feb 2024 11:28:17 +0200 Subject: [PATCH 2/5] block compiles --- .../caribouLite_caribouLiteSource.block.yml | 2 +- .../lib/caribouLiteSource_impl.cc | 19 ++++++++++++++++--- .../lib/caribouLiteSource_impl.h | 1 + .../src/CaribouLiteRadioCpp.cpp | 6 ++---- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml index 790b9b1..e052b81 100644 --- a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml +++ b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml @@ -57,7 +57,7 @@ outputs: domain: stream dtype: complex -- label: meta +- label: sync domain: stream dtype: byte diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc index dc66ee3..88463cd 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc @@ -79,9 +79,22 @@ namespace gr { gr_vector_void_star &output_items) { auto out_samples = static_cast(output_items[0]); - auto out_meta = static_cast(output_items[1]); - int ret = _radio->ReadSamples(out_samples, out_meta, static_cast(noutput_items)); - if (ret <= 0) return 0; + auto out_sync = static_cast(output_items[1]); + + _metadata = new cariboulite_sample_meta[noutput_items]; + + int ret = _radio->ReadSamples(out_samples, _metadata, static_cast(noutput_items)); + + if (ret <= 0) { //fail + delete[] _metadata; + return 0; + } else { //success + for (int i = 0; i < ret; i++) + { + out_sync[i] = _metadata[i].sync; + } + delete[] _metadata; + } return ret; } diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.h b/software/gr-caribouLite/lib/caribouLiteSource_impl.h index 17a6a97..f9c8cd0 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.h +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.h @@ -27,6 +27,7 @@ namespace gr float _sample_rate; float _frequency; size_t _mtu_size; + cariboulite_sample_meta* _metadata; CaribouLite* _cl; CaribouLiteRadio *_radio; diff --git a/software/libcariboulite/src/CaribouLiteRadioCpp.cpp b/software/libcariboulite/src/CaribouLiteRadioCpp.cpp index 77e0c03..1bb264e 100644 --- a/software/libcariboulite/src/CaribouLiteRadioCpp.cpp +++ b/software/libcariboulite/src/CaribouLiteRadioCpp.cpp @@ -1,4 +1,5 @@ #include "CaribouLite.hpp" +#include //================================================================= void CaribouLiteRadio::CaribouLiteRxThread(CaribouLiteRadio* radio) @@ -122,10 +123,7 @@ int CaribouLiteRadio::ReadSamples(std::complex* samples, cariboulite_samp if (meta) { - for (size_t i = 0; i < (size_t)ret; i++) - { - meta[i] = _read_metadata[i]; - } + memcpy(meta, _read_metadata, sizeof(cariboulite_sample_meta) * (size_t)ret); } return ret; From d4cd0f4032f0db14fc7d8cfc652a2201c6017a73 Mon Sep 17 00:00:00 2001 From: alon Date: Tue, 6 Feb 2024 11:48:41 +0200 Subject: [PATCH 3/5] optional sync out --- .../caribouLite_caribouLiteSource.block.yml | 11 +++++- .../gnuradio/caribouLite/caribouLiteSource.h | 8 +++- .../lib/caribouLiteSource_impl.cc | 39 ++++++++++++++----- .../lib/caribouLiteSource_impl.h | 11 +++++- .../bindings/caribouLiteSource_python.cc | 38 ++++++++---------- .../caribouLiteSource_pydoc_template.h | 11 ++---- 6 files changed, 76 insertions(+), 42 deletions(-) diff --git a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml index e052b81..9251bce 100644 --- a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml +++ b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml @@ -7,7 +7,7 @@ templates: imports: from gnuradio import caribouLite make: - caribouLite.caribouLiteSource(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq}) + caribouLite.caribouLiteSource(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq}, ${provide_sync}) parameters: - id: channel @@ -40,10 +40,16 @@ parameters: dtype: float default: 900000000.0 +- id: provide_sync + dtype: enum + options: ['True', 'False'] + hide: part + default: 'False' + cpp_templates: includes: ['#include '] declarations: 'caribouLite::caribouLiteSource::sptr ${id};' - make: 'this->${id} = caribouLite::caribouLiteSource::make(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq});' + make: 'this->${id} = caribouLite::caribouLiteSource::make(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq}, ${provide_sync});' packages: ['gnuradio-caribouLite'] link: ['gnuradio::gnuradio-caribouLite'] translations: @@ -60,5 +66,6 @@ outputs: - label: sync domain: stream dtype: byte + hide: ${False if str(provide_sync)=='True' else True} file_format: 1 diff --git a/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h b/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h index bb6ffd3..d21747f 100644 --- a/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h +++ b/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h @@ -32,7 +32,13 @@ namespace gr { * class. caribouLite::caribouLiteSource::make is the public interface for * creating new instances. */ - static sptr make(int channel=0, bool enable_agc=false, float rx_gain=40, float rx_bw=2500000, float sample_rate=4000000, float freq=900000000); + static sptr make(int channel=0, + bool enable_agc=false, + float rx_gain=40, + float rx_bw=2500000, + float sample_rate=4000000, + float freq=900000000, + bool provide_sync = false); }; } // namespace caribouLite diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc index 88463cd..d621e27 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc @@ -28,15 +28,33 @@ namespace gr { } //------------------------------------------------------------------------------------------------------------- - caribouLiteSource::sptr caribouLiteSource::make(int channel, bool enable_agc, float rx_gain, float rx_bw, float sample_rate, float freq) + caribouLiteSource::sptr caribouLiteSource::make(int channel, + bool enable_agc, + float rx_gain, + float rx_bw, + float sample_rate, + float freq, + bool provide_sync) { - return gnuradio::make_block_sptr(channel, enable_agc, rx_gain, rx_bw, sample_rate, freq); + return gnuradio::make_block_sptr(channel, + enable_agc, + rx_gain, + rx_bw, + sample_rate, + freq, + provide_sync); } // public constructor //------------------------------------------------------------------------------------------------------------- - 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, + bool provide_sync) : gr::sync_block("caribouLiteSource", gr::io_signature::make(0, 0, 0), gr::io_signature::make(1 /* min outputs */, 1 /*max outputs */, sizeof(gr_complex))) @@ -49,12 +67,13 @@ namespace gr { _rx_bw = rx_bw; _sample_rate = sample_rate; _frequency = freq; + _mtu_size = _radio->GetNativeMtuSample(); + _provide_sync = provide_sync; + CaribouLite &cl = CaribouLite::GetInstance(false); _cl = &cl; _radio = cl.GetRadioChannel(_channel); - _mtu_size = _radio->GetNativeMtuSample(); - // setup parameters _radio->SetRxGain(rx_gain); _radio->SetAgc(enable_agc); @@ -82,16 +101,18 @@ namespace gr { auto out_sync = static_cast(output_items[1]); _metadata = new cariboulite_sample_meta[noutput_items]; - int ret = _radio->ReadSamples(out_samples, _metadata, static_cast(noutput_items)); if (ret <= 0) { //fail delete[] _metadata; return 0; - } else { //success - for (int i = 0; i < ret; i++) + } else { //success + if (_provide_sync) { - out_sync[i] = _metadata[i].sync; + for (int i = 0; i < ret; i++) + { + out_sync[i] = _metadata[i].sync; + } } delete[] _metadata; } diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.h b/software/gr-caribouLite/lib/caribouLiteSource_impl.h index f9c8cd0..4c5e485 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.h +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.h @@ -27,13 +27,20 @@ namespace gr float _sample_rate; float _frequency; size_t _mtu_size; + bool _provide_sync; + cariboulite_sample_meta* _metadata; - CaribouLite* _cl; CaribouLiteRadio *_radio; public: - caribouLiteSource_impl(int channel, bool enable_agc, float rx_gain, float rx_bw, float sample_rate, float freq); + caribouLiteSource_impl(int channel, + bool enable_agc, + float rx_gain, + float rx_bw, + float sample_rate, + float freq, + bool provide_sync); ~caribouLiteSource_impl(); int work( diff --git a/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc b/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc index 83b88af..f9b4e8c 100644 --- a/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc +++ b/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc @@ -1,5 +1,5 @@ /* - * Copyright 2023 Free Software Foundation, Inc. + * Copyright 2024 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -14,7 +14,7 @@ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(caribouLiteSource.h) */ -/* BINDTOOL_HEADER_FILE_HASH(9ce2846f2939a8b8e624a4612154ad52) */ +/* BINDTOOL_HEADER_FILE_HASH(9aa68c862233e30766b0524aaf530760) */ /***********************************************************************************/ #include @@ -30,30 +30,26 @@ namespace py = pybind11; void bind_caribouLiteSource(py::module& m) { - using caribouLiteSource = gr::caribouLite::caribouLiteSource; + using caribouLiteSource = ::gr::caribouLite::caribouLiteSource; - py::class_>(m, "caribouLiteSource", D(caribouLiteSource)) + py::class_>( + m, "caribouLiteSource", D(caribouLiteSource)) .def(py::init(&caribouLiteSource::make), - D(caribouLiteSource,make) - ) - - + py::arg("channel") = 0, + py::arg("enable_agc") = false, + py::arg("rx_gain") = 40, + py::arg("rx_bw") = 2500000, + py::arg("sample_rate") = 4000000, + py::arg("freq") = 900000000, + py::arg("provide_sync") = false, + D(caribouLiteSource, make)) ; - - - - } - - - - - - - - diff --git a/software/gr-caribouLite/python/caribouLite/bindings/docstrings/caribouLiteSource_pydoc_template.h b/software/gr-caribouLite/python/caribouLite/bindings/docstrings/caribouLiteSource_pydoc_template.h index d70dc2f..694e399 100644 --- a/software/gr-caribouLite/python/caribouLite/bindings/docstrings/caribouLiteSource_pydoc_template.h +++ b/software/gr-caribouLite/python/caribouLite/bindings/docstrings/caribouLiteSource_pydoc_template.h @@ -1,5 +1,5 @@ /* - * Copyright 2023 Free Software Foundation, Inc. + * Copyright 2024 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -15,13 +15,10 @@ */ - - static const char *__doc_gr_caribouLite_caribouLiteSource = R"doc()doc"; +static const char* __doc_gr_caribouLite_caribouLiteSource = R"doc()doc"; - static const char *__doc_gr_caribouLite_caribouLiteSource_caribouLiteSource = R"doc()doc"; +static const char* __doc_gr_caribouLite_caribouLiteSource_caribouLiteSource = R"doc()doc"; - static const char *__doc_gr_caribouLite_caribouLiteSource_make = R"doc()doc"; - - +static const char* __doc_gr_caribouLite_caribouLiteSource_make = R"doc()doc"; From cda5be1b0e741a8a709f0cf0e72fdacaa7bbda67 Mon Sep 17 00:00:00 2001 From: alon Date: Tue, 6 Feb 2024 14:12:11 +0200 Subject: [PATCH 4/5] removed new/delete and made backwards compatible --- .../caribouLite_caribouLiteSource.block.yml | 8 ++--- .../gnuradio/caribouLite/caribouLiteSource.h | 2 +- .../lib/caribouLiteSource_impl.cc | 31 ++++++------------- .../lib/caribouLiteSource_impl.h | 4 +-- .../bindings/caribouLiteSource_python.cc | 4 +-- software/libcariboulite/src/CaribouLite.hpp | 4 +-- .../src/CaribouLiteRadioCpp.cpp | 10 +++--- 7 files changed, 26 insertions(+), 37 deletions(-) diff --git a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml index 9251bce..3512f82 100644 --- a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml +++ b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml @@ -7,7 +7,7 @@ templates: imports: from gnuradio import caribouLite make: - caribouLite.caribouLiteSource(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq}, ${provide_sync}) + caribouLite.caribouLiteSource(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq}, ${provide_meta}) parameters: - id: channel @@ -40,7 +40,7 @@ parameters: dtype: float default: 900000000.0 -- id: provide_sync +- id: provide_meta dtype: enum options: ['True', 'False'] hide: part @@ -49,7 +49,7 @@ parameters: cpp_templates: includes: ['#include '] declarations: 'caribouLite::caribouLiteSource::sptr ${id};' - make: 'this->${id} = caribouLite::caribouLiteSource::make(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq}, ${provide_sync});' + make: 'this->${id} = caribouLite::caribouLiteSource::make(${channel}, ${enable_agc}, ${rx_gain}, ${rx_bw}, ${sample_rate}, ${freq}, ${provide_meta});' packages: ['gnuradio-caribouLite'] link: ['gnuradio::gnuradio-caribouLite'] translations: @@ -66,6 +66,6 @@ outputs: - label: sync domain: stream dtype: byte - hide: ${False if str(provide_sync)=='True' else True} + hide: ${False if str(provide_meta)=='True' else True} file_format: 1 diff --git a/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h b/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h index d21747f..848654f 100644 --- a/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h +++ b/software/gr-caribouLite/include/gnuradio/caribouLite/caribouLiteSource.h @@ -38,7 +38,7 @@ namespace gr { float rx_bw=2500000, float sample_rate=4000000, float freq=900000000, - bool provide_sync = false); + bool provide_meta = false); }; } // namespace caribouLite diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc index d621e27..60dd2dd 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc @@ -34,7 +34,7 @@ namespace gr { float rx_bw, float sample_rate, float freq, - bool provide_sync) + bool provide_meta) { return gnuradio::make_block_sptr(channel, enable_agc, @@ -42,7 +42,7 @@ namespace gr { rx_bw, sample_rate, freq, - provide_sync); + provide_meta); } @@ -54,10 +54,10 @@ namespace gr { float rx_bw, float sample_rate, float freq, - bool provide_sync) + bool provide_meta) : gr::sync_block("caribouLiteSource", gr::io_signature::make(0, 0, 0), - gr::io_signature::make(1 /* min outputs */, 1 /*max outputs */, sizeof(gr_complex))) + gr::io_signature::make(1 /* min outputs */, 2 /*max outputs */, sizeof(gr_complex))) { detectBoard(); @@ -67,12 +67,12 @@ namespace gr { _rx_bw = rx_bw; _sample_rate = sample_rate; _frequency = freq; - _mtu_size = _radio->GetNativeMtuSample(); - _provide_sync = provide_sync; + _provide_meta = provide_meta; CaribouLite &cl = CaribouLite::GetInstance(false); _cl = &cl; _radio = cl.GetRadioChannel(_channel); + _mtu_size = _radio->GetNativeMtuSample(); // setup parameters _radio->SetRxGain(rx_gain); @@ -98,23 +98,12 @@ namespace gr { gr_vector_void_star &output_items) { auto out_samples = static_cast(output_items[0]); - auto out_sync = static_cast(output_items[1]); + auto out_meta = _provide_meta == true ? static_cast(output_items[1]) : (uint8_t*) NULL ; + int ret = _radio->ReadSamples(out_samples, static_cast(noutput_items), out_meta); - _metadata = new cariboulite_sample_meta[noutput_items]; - int ret = _radio->ReadSamples(out_samples, _metadata, static_cast(noutput_items)); - - if (ret <= 0) { //fail - delete[] _metadata; + if (ret <= 0) + { return 0; - } else { //success - if (_provide_sync) - { - for (int i = 0; i < ret; i++) - { - out_sync[i] = _metadata[i].sync; - } - } - delete[] _metadata; } return ret; } diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.h b/software/gr-caribouLite/lib/caribouLiteSource_impl.h index 4c5e485..27bdb53 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.h +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.h @@ -27,7 +27,7 @@ namespace gr float _sample_rate; float _frequency; size_t _mtu_size; - bool _provide_sync; + bool _provide_meta; cariboulite_sample_meta* _metadata; CaribouLite* _cl; @@ -40,7 +40,7 @@ namespace gr float rx_bw, float sample_rate, float freq, - bool provide_sync); + bool provide_meta); ~caribouLiteSource_impl(); int work( diff --git a/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc b/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc index f9b4e8c..54bb71b 100644 --- a/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc +++ b/software/gr-caribouLite/python/caribouLite/bindings/caribouLiteSource_python.cc @@ -14,7 +14,7 @@ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(caribouLiteSource.h) */ -/* BINDTOOL_HEADER_FILE_HASH(9aa68c862233e30766b0524aaf530760) */ +/* BINDTOOL_HEADER_FILE_HASH(2af106876738c9927aadb177d064272d) */ /***********************************************************************************/ #include @@ -47,7 +47,7 @@ void bind_caribouLiteSource(py::module& m) py::arg("rx_bw") = 2500000, py::arg("sample_rate") = 4000000, py::arg("freq") = 900000000, - py::arg("provide_sync") = false, + py::arg("provide_meta") = false, D(caribouLiteSource, make)) diff --git a/software/libcariboulite/src/CaribouLite.hpp b/software/libcariboulite/src/CaribouLite.hpp index f96ab7d..3cabbda 100644 --- a/software/libcariboulite/src/CaribouLite.hpp +++ b/software/libcariboulite/src/CaribouLite.hpp @@ -183,8 +183,8 @@ public: bool GetIsTransmittingCw(void); // Synchronous Reading and Writing - int ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read); - int ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read); + int ReadSamples(std::complex* samples, size_t num_to_read, uint8_t* meta = NULL); + int ReadSamples(std::complex* samples, size_t num_to_read, uint8_t* meta = NULL); int WriteSamples(std::complex* samples, size_t num_to_write); int WriteSamples(std::complex* samples, size_t num_to_write); diff --git a/software/libcariboulite/src/CaribouLiteRadioCpp.cpp b/software/libcariboulite/src/CaribouLiteRadioCpp.cpp index 1bb264e..d509cff 100644 --- a/software/libcariboulite/src/CaribouLiteRadioCpp.cpp +++ b/software/libcariboulite/src/CaribouLiteRadioCpp.cpp @@ -69,15 +69,15 @@ void CaribouLiteRadio::CaribouLiteRxThread(CaribouLiteRadio* radio) } //================================================================== -int CaribouLiteRadio::ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read) +int CaribouLiteRadio::ReadSamples(std::complex* samples, size_t num_to_read, uint8_t* meta) { - if (samples == 0) + if (samples == NULL) { printf("samples_is_null=%d", _read_samples==NULL); return 0; } - int ret = ReadSamples((std::complex*)NULL, meta, num_to_read); + int ret = ReadSamples((std::complex*)NULL, num_to_read, meta); //printf("ret = %d\n", ret); if (ret <= 0) { @@ -95,7 +95,7 @@ int CaribouLiteRadio::ReadSamples(std::complex* samples, cariboulite_samp } //================================================================== -int CaribouLiteRadio::ReadSamples(std::complex* samples, cariboulite_sample_meta* meta, size_t num_to_read) +int CaribouLiteRadio::ReadSamples(std::complex* samples, size_t num_to_read, uint8_t* meta) { if (!_rx_is_active || _read_samples == NULL || _read_metadata == NULL || num_to_read == 0) { @@ -123,7 +123,7 @@ int CaribouLiteRadio::ReadSamples(std::complex* samples, cariboulite_samp if (meta) { - memcpy(meta, _read_metadata, sizeof(cariboulite_sample_meta) * (size_t)ret); + memcpy(meta, _read_metadata, (size_t)ret); } return ret; From b777fb276c9b2cdfe43b1260945753b1602f42d2 Mon Sep 17 00:00:00 2001 From: alon Date: Tue, 6 Feb 2024 14:59:55 +0200 Subject: [PATCH 5/5] fixed bugs. ready to merge --- .../gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml | 3 ++- software/gr-caribouLite/lib/caribouLiteSource_impl.cc | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml index 3512f82..ed5058d 100644 --- a/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml +++ b/software/gr-caribouLite/grc/caribouLite_caribouLiteSource.block.yml @@ -41,6 +41,7 @@ parameters: default: 900000000.0 - id: provide_meta + label: output meta data dtype: enum options: ['True', 'False'] hide: part @@ -63,7 +64,7 @@ outputs: domain: stream dtype: complex -- label: sync +- label: meta domain: stream dtype: byte hide: ${False if str(provide_meta)=='True' else True} diff --git a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc index 60dd2dd..243b328 100644 --- a/software/gr-caribouLite/lib/caribouLiteSource_impl.cc +++ b/software/gr-caribouLite/lib/caribouLiteSource_impl.cc @@ -57,7 +57,8 @@ namespace gr { bool provide_meta) : gr::sync_block("caribouLiteSource", gr::io_signature::make(0, 0, 0), - gr::io_signature::make(1 /* min outputs */, 2 /*max outputs */, sizeof(gr_complex))) + gr::io_signature::make(1, 2, {sizeof(gr_complex), sizeof(uint8_t)}) + ) { detectBoard();