diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-01-24 09:46:38 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-01-24 09:46:38 +0100 |
commit | 69f65ccc49e4c61091554e2b9be7c01ff35186f2 (patch) | |
tree | 7e26704840ec0cf1ac946b8599c6c33e70c02b21 /CircBufferTimestamp.cpp | |
parent | 8c7c2e4eb49ce4bbd4e9a6b8b8fccf2905be1966 (diff) | |
download | SoapyDummy-69f65ccc49e4c61091554e2b9be7c01ff35186f2.tar.gz SoapyDummy-69f65ccc49e4c61091554e2b9be7c01ff35186f2.tar.bz2 SoapyDummy-69f65ccc49e4c61091554e2b9be7c01ff35186f2.zip |
Add TX to RX feedback with timestamp support, only CF32
Diffstat (limited to 'CircBufferTimestamp.cpp')
-rw-r--r-- | CircBufferTimestamp.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/CircBufferTimestamp.cpp b/CircBufferTimestamp.cpp new file mode 100644 index 0000000..ba66e68 --- /dev/null +++ b/CircBufferTimestamp.cpp @@ -0,0 +1,98 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2018 Matthias P. Braendli + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Tests for CircBufferTimestamp.hpp + +#include "CircBufferTimestamp.hpp" +#include <cstdint> +#include <thread> +#include <iostream> + +using namespace std; + +const long long ticks_per_sample = 12; +const size_t N_ITER = 40; +const size_t N_SAMPS_PER_BUF = 10; + +CircularBuffer<int> cb(1000000); + +mutex cerr_mutex; + +void writer() +{ + const long long ts_start = 200; + + for (size_t iterations = 0; iterations < N_ITER; iterations++) { + vector<int> b; + for (size_t i = 0; i < N_SAMPS_PER_BUF; i++) { + b.push_back(N_SAMPS_PER_BUF*iterations + i); + } + + const long long ts_b = ts_start + ticks_per_sample * iterations * b.size(); + + cb.write(b.data(), b.size(), ts_b); + { + unique_lock<mutex> lock(cerr_mutex); + cerr << "Wrote " << b.size() << " at t=" << ts_b << endl; + } + + this_thread::sleep_for(chrono::milliseconds(10)); + } +} + +void reader() +{ + size_t totaldata = 0; + long long req_ts = 450; + while (totaldata < N_ITER * N_SAMPS_PER_BUF / 3) { + long long ts = req_ts; + vector<int> buf(N_SAMPS_PER_BUF/2); + const size_t read = cb.read(buf.data(), buf.size(), &ts); + buf.resize(read); + totaldata += read; + + { + unique_lock<mutex> lock(cerr_mutex); + cerr << "Read " << totaldata << " so far, ts_req=" << + req_ts << " ts=" << ts << " data:"; + for (const int samp : buf) { + cerr << " " << samp; + } + cerr << endl; + } + req_ts += ticks_per_sample * (N_SAMPS_PER_BUF/2 + 1); + } +} + +int main(int argc, char **argv) +{ + cb.set_ticks_per_sample(ticks_per_sample); + + auto writeThread = thread(writer); + auto readThread = thread(reader); + + writeThread.join(); + readThread.join(); + return 0; +} |