summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/ctrlport_probe2_c_impl.cc
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2015-04-14 16:07:48 -0400
committerTom Rondeau <tom@trondeau.com>2015-04-22 11:18:21 -0400
commit3ea2feb63abcd15802d1b5d2cf2d3402ca86616c (patch)
tree4479e42b5da6b8fbb7861803d647096f37edfaa9 /gr-blocks/lib/ctrlport_probe2_c_impl.cc
parentd8a491fde1f29e10d77f536ea1234ee96089202a (diff)
controlport: fixed controlport probes.
Diffstat (limited to 'gr-blocks/lib/ctrlport_probe2_c_impl.cc')
-rw-r--r--gr-blocks/lib/ctrlport_probe2_c_impl.cc30
1 files changed, 18 insertions, 12 deletions
diff --git a/gr-blocks/lib/ctrlport_probe2_c_impl.cc b/gr-blocks/lib/ctrlport_probe2_c_impl.cc
index bd43130be5..b8ed0af444 100644
--- a/gr-blocks/lib/ctrlport_probe2_c_impl.cc
+++ b/gr-blocks/lib/ctrlport_probe2_c_impl.cc
@@ -65,21 +65,26 @@ namespace gr {
}
std::vector<gr_complex>
- ctrlport_probe2_c_impl::get() {
+ ctrlport_probe2_c_impl::get()
+ {
return buffered_get.get();
}
void
ctrlport_probe2_c_impl::set_length(int len)
{
+ gr::thread::scoped_lock guard(d_setlock);
+
if(len > 8191) {
- std::cerr << "probe2_c: length " << len
- << " exceeds maximum buffer size of 8191" << std::endl;
+ GR_LOG_WARN(d_logger,
+ boost::format("probe2_c: length %1% exceeds maximum"
+ " buffer size of 8191") % len);
len = 8191;
}
d_len = len;
- d_buffer.reserve(d_len);
+ d_buffer.resize(d_len);
+ d_index = 0;
}
int
@@ -95,20 +100,21 @@ namespace gr {
{
const gr_complex *in = (const gr_complex*)input_items[0];
+ gr::thread::scoped_lock guard(d_setlock);
+
// copy samples to get buffer if we need samples
- if(d_buffer.size() < d_len) {
+ if(d_index < d_len) {
// copy smaller of remaining buffer space and num inputs to work()
- int num_copy = std::min( (int)(d_len - d_buffer.size()), noutput_items );
+ int num_copy = std::min( (int)(d_len - d_index), noutput_items );
- // TODO: convert this to a copy operator for speed...
- for(int i = 0; i < num_copy; i++) {
- d_buffer.push_back(in[i]);
- }
+ memcpy(&d_buffer[d_index], in, num_copy*sizeof(gr_complex));
+ d_index += num_copy;
}
// notify the waiting get() if we fill up the buffer
- if(d_buffer.size() == d_len) {
- buffered_get.offer_data(d_buffer);
+ if(d_index == d_len) {
+ buffered_get.offer_data(d_buffer);
+ d_index = 0;
}
return noutput_items;