summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rondeau <trondeau@vt.edu>2013-03-18 15:55:38 -0400
committerTom Rondeau <trondeau@vt.edu>2013-03-18 16:47:15 -0400
commitc856fe0106bcbcad871452014af2eb459a32e916 (patch)
tree4b7c3fa9cc5064edc4a36ca0de6c0d15c6a385ac
parent1b10a63a952612858a5e44321b6babf1d0232b52 (diff)
wxgui: Moved oscope and histogram bases into wxgui.
This makes gr-wxgui more like a normal component that generates a libgnuradio-wxgui.so file.
-rw-r--r--gnuradio-core/CMakeLists.txt1
-rw-r--r--gnuradio-core/src/lib/CMakeLists.txt1
-rw-r--r--gnuradio-core/src/lib/io/CMakeLists.txt58
-rw-r--r--gnuradio-core/src/lib/io/gr_histo_sink_f.cc165
-rw-r--r--gnuradio-core/src/lib/io/gr_histo_sink_f.h71
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_guts.cc437
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_guts.h123
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_sink.i77
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_sink_f.cc78
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_sink_f.h63
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_sink_x.cc156
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_sink_x.h77
-rw-r--r--gnuradio-core/src/lib/swig/CMakeLists.txt2
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core.py1
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_io.i32
-rw-r--r--gr-audio/examples/grc/cvsd_sweep.grc6
-rw-r--r--gr-digital/examples/demod/ber_simulation.grc2
-rw-r--r--gr-digital/examples/demod/digital_freq_lock.grc4
-rw-r--r--gr-digital/examples/demod/dpsk_loopback.grc2
-rw-r--r--gr-digital/examples/demod/pam_sync.grc4
-rw-r--r--gr-digital/examples/demod/pam_timing.grc10
-rw-r--r--gr-howto-write-a-block/apps/howto_square.grc4
-rwxr-xr-xgr-howto-write-a-block/apps/howto_square.py4
-rw-r--r--gr-noaa/examples/usrp_rx_hrpt.grc2
-rw-r--r--gr-trellis/examples/grc/interference_cancellation.grc2
-rw-r--r--gr-trellis/examples/grc/pccc.grc2
-rw-r--r--gr-trellis/examples/grc/pccc1.grc2
-rw-r--r--gr-trellis/examples/grc/sccc.grc2
-rw-r--r--gr-trellis/examples/grc/sccc1.grc2
-rwxr-xr-xgr-uhd/apps/uhd_fft4
-rw-r--r--gr-uhd/examples/grc/uhd_dpsk_mod.grc2
-rw-r--r--gr-uhd/examples/grc/uhd_fft.grc6
-rw-r--r--gr-wxgui/CMakeLists.txt16
-rw-r--r--gr-wxgui/grc/wxgui_constellationsink2.xml1
-rw-r--r--gr-wxgui/grc/wxgui_fftsink2.xml1
-rw-r--r--gr-wxgui/grc/wxgui_histosink2.xml1
-rw-r--r--gr-wxgui/grc/wxgui_numbersink2.xml1
-rw-r--r--gr-wxgui/grc/wxgui_scopesink2.xml10
-rw-r--r--gr-wxgui/grc/wxgui_termsink.xml1
-rw-r--r--gr-wxgui/grc/wxgui_waterfallsink2.xml1
-rw-r--r--gr-wxgui/include/wxgui/CMakeLists.txt32
-rw-r--r--gr-wxgui/include/wxgui/api.h (renamed from gnuradio-core/src/lib/io/io.i)24
-rw-r--r--gr-wxgui/include/wxgui/histo_sink_f.h55
-rw-r--r--gr-wxgui/include/wxgui/oscope_guts.h131
-rw-r--r--gr-wxgui/include/wxgui/oscope_sink_f.h53
-rw-r--r--gr-wxgui/include/wxgui/oscope_sink_x.h91
-rw-r--r--gr-wxgui/include/wxgui/trigger_mode.h (renamed from gnuradio-core/src/lib/io/gr_trigger_mode.h)28
-rw-r--r--gr-wxgui/lib/CMakeLists.txt78
-rw-r--r--gr-wxgui/lib/gnuradio-wxgui.rc.in54
-rw-r--r--gr-wxgui/lib/histo_sink_f_impl.cc186
-rw-r--r--gr-wxgui/lib/histo_sink_f_impl.h63
-rw-r--r--gr-wxgui/lib/oscope_guts.cc439
-rw-r--r--gr-wxgui/lib/oscope_sink_f_impl.cc84
-rw-r--r--gr-wxgui/lib/oscope_sink_f_impl.h51
-rw-r--r--gr-wxgui/lib/oscope_sink_x.cc161
-rw-r--r--gr-wxgui/python/__init__.py2
-rw-r--r--gr-wxgui/python/histosink_gl.py3
-rw-r--r--gr-wxgui/python/scope_window.py23
-rw-r--r--gr-wxgui/python/scopesink_gl.py13
-rw-r--r--gr-wxgui/python/scopesink_nongl.py11
-rw-r--r--gr-wxgui/python/waterfallsink_nongl.py4
-rw-r--r--gr-wxgui/swig/CMakeLists.txt57
-rw-r--r--gr-wxgui/swig/wxgui_swig.i (renamed from gnuradio-core/src/lib/io/gr_histo_sink.i)28
-rw-r--r--grc/examples/xmlrpc/xmlrpc_server.grc2
64 files changed, 1668 insertions, 1439 deletions
diff --git a/gnuradio-core/CMakeLists.txt b/gnuradio-core/CMakeLists.txt
index 9e910aa6bb..154a078826 100644
--- a/gnuradio-core/CMakeLists.txt
+++ b/gnuradio-core/CMakeLists.txt
@@ -52,7 +52,6 @@ GR_SET_GLOBAL(GNURADIO_CORE_INCLUDE_DIRS
${CMAKE_CURRENT_BINARY_DIR}/src/lib/filter
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/filter
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/missing
- ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/io
${CMAKE_CURRENT_BINARY_DIR}/src/lib/swig
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/swig
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/hier
diff --git a/gnuradio-core/src/lib/CMakeLists.txt b/gnuradio-core/src/lib/CMakeLists.txt
index b5a41ec430..c72be94db5 100644
--- a/gnuradio-core/src/lib/CMakeLists.txt
+++ b/gnuradio-core/src/lib/CMakeLists.txt
@@ -28,7 +28,6 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/ConfigChecks.cmake)
GR_INCLUDE_SUBDIRECTORY(missing)
GR_INCLUDE_SUBDIRECTORY(runtime)
GR_INCLUDE_SUBDIRECTORY(general)
-GR_INCLUDE_SUBDIRECTORY(io)
list(APPEND gnuradio_core_sources bug_work_around_6.cc)
list(APPEND test_gnuradio_core_sources bug_work_around_6.cc)
diff --git a/gnuradio-core/src/lib/io/CMakeLists.txt b/gnuradio-core/src/lib/io/CMakeLists.txt
deleted file mode 100644
index ee8e9befa5..0000000000
--- a/gnuradio-core/src/lib/io/CMakeLists.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2010-2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-########################################################################
-# This file included, use CMake directory variables
-########################################################################
-
-########################################################################
-# Append gnuradio-core library sources
-########################################################################
-list(APPEND gnuradio_core_sources
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_histo_sink_f.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_guts.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_f.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_x.cc
-)
-
-########################################################################
-# Install runtime headers
-########################################################################
-install(FILES
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_histo_sink_f.h
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_guts.h
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_f.h
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_x.h
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_trigger_mode.h
- DESTINATION ${GR_INCLUDE_DIR}/gnuradio
- COMPONENT "core_devel"
-)
-
-########################################################################
-# Install swig headers
-########################################################################
-if(ENABLE_PYTHON)
-install(FILES
- ${CMAKE_CURRENT_SOURCE_DIR}/io.i
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_histo_sink.i
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink.i
- DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
- COMPONENT "core_swig"
-)
-endif(ENABLE_PYTHON)
diff --git a/gnuradio-core/src/lib/io/gr_histo_sink_f.cc b/gnuradio-core/src/lib/io/gr_histo_sink_f.cc
deleted file mode 100644
index fc0c12ce64..0000000000
--- a/gnuradio-core/src/lib/io/gr_histo_sink_f.cc
+++ /dev/null
@@ -1,165 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2009,2010,2011 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_histo_sink_f.h>
-#include <gr_io_signature.h>
-#include <boost/math/special_functions/round.hpp>
-
-static float get_clean_num(float num){
- if (num == 0) return 0;
- /* extract sign and exponent from num */
- int sign = (num < 0) ? -1 : 1; num = fabs(num);
- float exponent = floor(log10(num));
- /* search for closest number with base 1, 2, 5, 10 */
- float closest_num = 10*pow(10, exponent);
- if (fabs(num - 1*pow(10, exponent)) < fabs(num - closest_num))
- closest_num = 1*pow(10, exponent);
- if (fabs(num - 2*pow(10, exponent)) < fabs(num - closest_num))
- closest_num = 2*pow(10, exponent);
- if (fabs(num - 5*pow(10, exponent)) < fabs(num - closest_num))
- closest_num = 5*pow(10, exponent);
- return sign*closest_num;
-}
-
-gr_histo_sink_f_sptr
-gr_make_histo_sink_f (gr_msg_queue_sptr msgq)
-{
- return gnuradio::get_initial_sptr(new gr_histo_sink_f (msgq));
-}
-
-gr_histo_sink_f::gr_histo_sink_f (gr_msg_queue_sptr msgq)
- : gr_sync_block ("histo_sink_f", gr_make_io_signature (1, 1, sizeof (float)), gr_make_io_signature (0, 0, 0)),
- d_msgq (msgq), d_num_bins(11), d_frame_size(1000), d_sample_count(0), d_bins(NULL), d_samps(NULL)
-{
- //allocate arrays and clear
- set_num_bins(d_num_bins);
- set_frame_size(d_frame_size);
-}
-
-gr_histo_sink_f::~gr_histo_sink_f (void)
-{
- delete [] d_samps;
- delete [] d_bins;
-}
-
-int
-gr_histo_sink_f::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- const float *in = (const float *) input_items[0];
- gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this function
- for (unsigned int i = 0; i < (unsigned int)noutput_items; i++){
- d_samps[d_sample_count] = in[i];
- d_sample_count++;
- /* processed a frame? */
- if (d_sample_count == d_frame_size){
- send_frame();
- clear();
- }
- }
- return noutput_items;
-}
-
-void
-gr_histo_sink_f::send_frame(void){
- /* output queue full, drop the data */
- if (d_msgq->full_p()) return;
- /* find the minimum and maximum */
- float minimum = d_samps[0];
- float maximum = d_samps[0];
- for (unsigned int i = 0; i < d_frame_size; i++){
- if (d_samps[i] < minimum) minimum = d_samps[i];
- if (d_samps[i] > maximum) maximum = d_samps[i];
- }
- minimum = get_clean_num(minimum);
- maximum = get_clean_num(maximum);
- if (minimum == maximum || minimum > maximum) return; //useless data or screw up?
- /* load the bins */
- int index;
- float bin_width = (maximum - minimum)/(d_num_bins-1);
- for (unsigned int i = 0; i < d_sample_count; i++){
- index = boost::math::iround((d_samps[i] - minimum)/bin_width);
- /* ensure the index range in case a small floating point error is involed */
- if (index < 0) index = 0;
- if (index >= (int)d_num_bins) index = d_num_bins-1;
- d_bins[index]++;
- }
- /* Build a message to hold the output records */
- gr_message_sptr msg = gr_make_message(0, minimum, maximum, d_num_bins*sizeof(float));
- float *out = (float *)msg->msg(); // get pointer to raw message buffer
- /* normalize the bins and put into message */
- for (unsigned int i = 0; i < d_num_bins; i++){
- out[i] = ((float)d_bins[i])/d_frame_size;
- }
- /* send the message */
- d_msgq->handle(msg);
-}
-
-void
-gr_histo_sink_f::clear(void){
- d_sample_count = 0;
- /* zero the bins */
- for (unsigned int i = 0; i < d_num_bins; i++){
- d_bins[i] = 0;
- }
-}
-
-/**************************************************
- * Getters
- **************************************************/
-unsigned int
-gr_histo_sink_f::get_frame_size(void){
- return d_frame_size;
-}
-
-unsigned int
-gr_histo_sink_f::get_num_bins(void){
- return d_num_bins;
-}
-
-/**************************************************
- * Setters
- **************************************************/
-void
-gr_histo_sink_f::set_frame_size(unsigned int frame_size){
- gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this function
- d_frame_size = frame_size;
- /* allocate a new sample array */
- delete [] d_samps;
- d_samps = new float[d_frame_size];
- clear();
-}
-
-void
-gr_histo_sink_f::set_num_bins(unsigned int num_bins){
- gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this function
- d_num_bins = num_bins;
- /* allocate a new bin array */
- delete [] d_bins;
- d_bins = new unsigned int[d_num_bins];
- clear();
-}
diff --git a/gnuradio-core/src/lib/io/gr_histo_sink_f.h b/gnuradio-core/src/lib/io/gr_histo_sink_f.h
deleted file mode 100644
index 934066ba20..0000000000
--- a/gnuradio-core/src/lib/io/gr_histo_sink_f.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2009 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_GR_HISTO_SINK_F_H
-#define INCLUDED_GR_HISTO_SINK_F_H
-
-#include <gr_core_api.h>
-#include <gr_sync_block.h>
-#include <gr_msg_queue.h>
-#include <gruel/thread.h>
-
-class gr_histo_sink_f;
-typedef boost::shared_ptr<gr_histo_sink_f> gr_histo_sink_f_sptr;
-
-GR_CORE_API gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
-
-/*!
- * \brief Histogram module.
- * \ingroup sink_blk
- */
-class GR_CORE_API gr_histo_sink_f : public gr_sync_block
-{
-private:
- gr_msg_queue_sptr d_msgq;
- unsigned int d_num_bins;
- unsigned int d_frame_size;
- unsigned int d_sample_count;
- unsigned int *d_bins;
- float *d_samps;
- gruel::mutex d_mutex;
-
- friend GR_CORE_API gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
- gr_histo_sink_f (gr_msg_queue_sptr msgq);
- void send_frame(void);
- void clear(void);
-
-public:
- ~gr_histo_sink_f (void);
-
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-
- unsigned int get_frame_size(void);
- unsigned int get_num_bins(void);
-
- void set_frame_size(unsigned int frame_size);
- void set_num_bins(unsigned int num_bins);
-
-};
-
-#endif /* INCLUDED_GR_HISTO_SINK_F_H */
diff --git a/gnuradio-core/src/lib/io/gr_oscope_guts.cc b/gnuradio-core/src/lib/io/gr_oscope_guts.cc
deleted file mode 100644
index a5ea3002a9..0000000000
--- a/gnuradio-core/src/lib/io/gr_oscope_guts.cc
+++ /dev/null
@@ -1,437 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2005 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <gr_oscope_guts.h>
-#include <stdexcept>
-#include <stdio.h>
-#include <algorithm>
-#include <unistd.h>
-#include <math.h>
-#include <assert.h>
-
-/*
- * Bad performance if it's large, and flaky triggering if it's too small
- */
-static const int OUTPUT_RECORD_SIZE = 1024; // Must be power of 2
-
-/*
- * For (slow-updated) STRIPCHART triggering, we make the record size larger, since we
- * potentially want to be able to "see" hours of data. This works as long as the
- * update rates to a STRIPCHART are low, which they generally are--that's rather what
- * a stripchart is all about!
- */
-static const int SCHART_MULT = 8;
-
-
-static inline int
-wrap_bi (int buffer_index, int mx) // wrap buffer index
-{
- return buffer_index & (mx - 1);
-}
-
-static inline int
-incr_bi (int buffer_index, int mx) // increment buffer index
-{
- return wrap_bi (buffer_index + 1, mx);
-}
-
-static inline int
-decr_bi (int buffer_index, int mx) // decrement buffer index
-{
- return wrap_bi (buffer_index - 1, mx);
-}
-
-gr_oscope_guts::gr_oscope_guts (double sample_rate, gr_msg_queue_sptr msgq)
- : d_nchannels (1),
- d_msgq (msgq),
- d_trigger_mode (gr_TRIG_MODE_AUTO),
- d_trigger_slope (gr_TRIG_SLOPE_POS),
- d_trigger_channel (0),
- d_sample_rate (sample_rate),
- d_update_rate (20),
- d_trigger_level (0),
- d_obi (0),
- d_state (HOLD_OFF),
- d_decimator_count (0),
- d_decimator_count_init (1),
- d_hold_off_count (0),
- d_hold_off_count_init (OUTPUT_RECORD_SIZE/2-1),
- d_pre_trigger_count (0),
- d_post_trigger_count (0),
- d_post_trigger_count_init (OUTPUT_RECORD_SIZE/2)
-{
- for (int i = 0; i < MAX_CHANNELS; i++)
- d_buffer[i] = 0;
-
- for (int i = 0; i < MAX_CHANNELS; i++){
- d_buffer[i] = new float [OUTPUT_RECORD_SIZE*SCHART_MULT];
- for (int j = 0; j < OUTPUT_RECORD_SIZE*SCHART_MULT; j++)
- d_buffer[i][j] = 0.0;
- }
-
- // be sure buffer is full before first write
- enter_hold_off ();
- update_rate_or_decimation_changed ();
-}
-
-gr_oscope_guts::~gr_oscope_guts ()
-{
- for (int i = 0; i < MAX_CHANNELS; i++)
- delete [] d_buffer[i];
-}
-
-// MANIPULATORS
-
-// \p channel_data points to nchannels float values. These are the values
-// for each channel at this sample time.
-
-void
-gr_oscope_guts::process_sample (const float *channel_data)
-{
- d_decimator_count--;
- if (d_decimator_count > 0)
- return;
-
- d_decimator_count = d_decimator_count_init;
-
- if (d_trigger_mode != gr_TRIG_MODE_STRIPCHART)
- {
- for (int i = 0; i < d_nchannels; i++)
- d_buffer[i][d_obi] = channel_data[i]; // copy data into buffer
-
- switch (d_state){
- case HOLD_OFF:
- d_hold_off_count--;
- if (d_hold_off_count <= 0)
- enter_look_for_trigger ();
- break;
-
- case LOOK_FOR_TRIGGER:
- if (found_trigger ())
- enter_post_trigger ();
- break;
-
- case POST_TRIGGER:
- d_post_trigger_count--;
- if (d_post_trigger_count <= 0){
- write_output_records ();
- enter_hold_off ();
- }
- break;
-
- default:
- assert (0);
- }
-
- d_obi = incr_bi (d_obi, OUTPUT_RECORD_SIZE);
- }
- else
- {
- for (int i = 0; i < d_nchannels; i++)
- {
- for (int j = (OUTPUT_RECORD_SIZE*SCHART_MULT)-1; j > 0; j--)
- {
- d_buffer[i][j] = d_buffer[i][j-1];
- }
- d_buffer[i][0] = channel_data[i];
- }
- d_trigger_off = 0;
- write_output_records();
- }
-}
-
-/*
- * Functions called on state entry
- */
-
-void
-gr_oscope_guts::enter_hold_off ()
-{
- d_state = HOLD_OFF;
- d_hold_off_count = d_hold_off_count_init;
-}
-
-void
-gr_oscope_guts::enter_look_for_trigger ()
-{
- d_pre_trigger_count = 0;
- d_state = LOOK_FOR_TRIGGER;
-}
-
-void
-gr_oscope_guts::enter_post_trigger ()
-{
- d_state = POST_TRIGGER;
- d_post_trigger_count = d_post_trigger_count_init;
- //ensure that the trigger offset is no more than than half a sample
- if (d_trigger_off > .5) d_trigger_off -= 1;
- else d_post_trigger_count--;
-}
-
-// ----------------------------------------------------------------
-// returns true if trigger found
-
-bool
-gr_oscope_guts::found_trigger ()
-{
- int mx = d_trigger_mode == gr_TRIG_MODE_STRIPCHART ? OUTPUT_RECORD_SIZE*SCHART_MULT :
- OUTPUT_RECORD_SIZE;
-
- float prev_sample = d_buffer[d_trigger_channel][decr_bi(d_obi, mx)];
- float new_sample = d_buffer[d_trigger_channel][d_obi];
-
- switch (d_trigger_mode){
-
- case gr_TRIG_MODE_AUTO: //too many samples without a trigger
- d_pre_trigger_count++;
- if (d_pre_trigger_count > OUTPUT_RECORD_SIZE/2) return true;
-
- case gr_TRIG_MODE_NORM: //look for trigger
- switch (d_trigger_slope){
-
- case gr_TRIG_SLOPE_POS: //trigger point in pos slope?
- if (new_sample < d_trigger_level || prev_sample >= d_trigger_level) return false;
- break;
-
- case gr_TRIG_SLOPE_NEG: //trigger point in neg slope?
- if (new_sample > d_trigger_level || prev_sample <= d_trigger_level) return false;
- break;
- }
-
- //calculate the trigger offset in % sample
- d_trigger_off = (d_trigger_level - prev_sample)/(new_sample - prev_sample);
- return true;
-
- case gr_TRIG_MODE_FREE: //free run mode, always trigger
- d_trigger_off = 0;
- return true;
-
- default:
- assert (0);
- return false;
- }
-}
-
-// ----------------------------------------------------------------
-// write output records (duh!)
-
-void
-gr_oscope_guts::write_output_records ()
-{
- int mx;
-
- mx = d_trigger_mode == gr_TRIG_MODE_STRIPCHART ?
- OUTPUT_RECORD_SIZE*SCHART_MULT : OUTPUT_RECORD_SIZE;
-
- // if the output queue if full, drop the data like its hot.
- if (d_msgq->full_p())
- return;
- // Build a message to hold the output records
- gr_message_sptr msg =
- gr_make_message(0, // msg type
- d_nchannels, // arg1 for other side
- mx, // arg2 for other side
- ((d_nchannels * mx) + 1) * sizeof(float)); // sizeof payload
-
- float *out = (float *)msg->msg(); // get pointer to raw message buffer
-
- for (int ch = 0; ch < d_nchannels; ch++){
- // note that d_obi + 1 points at the oldest sample in the buffer
- for (int i = 0; i < mx; i++){
- out[i] = d_buffer[ch][wrap_bi(d_obi + 1 + i, mx)];
- }
- out += mx;
- }
- //Set the last sample as the trigger offset:
- // The non gl scope sink will not look at this last sample.
- // The gl scope sink will use this last sample as an offset.
- out[0] = d_trigger_off;
- d_msgq->handle(msg); // send the msg
-}
-
-// ----------------------------------------------------------------
-
-bool
-gr_oscope_guts::set_update_rate (double update_rate)
-{
- d_update_rate = std::min (std::max (1./10., update_rate), d_sample_rate);
- update_rate_or_decimation_changed ();
- return true;
-}
-
-bool
-gr_oscope_guts::set_decimation_count (int decimator_count)
-{
- decimator_count = std::max (1, decimator_count);
- d_decimator_count_init = decimator_count;
- update_rate_or_decimation_changed ();
- return true;
-}
-
-bool
-gr_oscope_guts::set_sample_rate(double sample_rate)
-{
- d_sample_rate = sample_rate;
- return set_update_rate(update_rate());
-}
-
-
-void
-gr_oscope_guts::update_rate_or_decimation_changed ()
-{
- d_hold_off_count_init =
- (int) rint (d_sample_rate / d_update_rate / d_decimator_count_init);
-}
-
-bool
-gr_oscope_guts::set_trigger_channel (int channel)
-{
- if (channel >= 0 && channel < d_nchannels){
- d_trigger_channel = channel;
- trigger_changed ();
- return true;
- }
-
- return false;
-}
-
-bool
-gr_oscope_guts::set_trigger_mode (gr_trigger_mode mode)
-{
- d_trigger_mode = mode;
- trigger_changed ();
- return true;
-}
-
-bool
-gr_oscope_guts::set_trigger_slope (gr_trigger_slope slope)
-{
- d_trigger_slope = slope;
- trigger_changed ();
- return true;
-}
-
-bool
-gr_oscope_guts::set_trigger_level (double trigger_level)
-{
- d_trigger_level = trigger_level;
- trigger_changed ();
- return true;
-}
-
-bool
-gr_oscope_guts::set_trigger_level_auto ()
-{
- // find the level 1/2 way between the min and the max
-
- float min_v = d_buffer[d_trigger_channel][0];
- float max_v = d_buffer[d_trigger_channel][0];
-
- for (int i = 1; i < OUTPUT_RECORD_SIZE; i++){
- min_v = std::min (min_v, d_buffer[d_trigger_channel][i]);
- max_v = std::max (max_v, d_buffer[d_trigger_channel][i]);
- }
- return set_trigger_level((min_v + max_v) * 0.5);
-}
-
-bool
-gr_oscope_guts::set_num_channels(int nchannels)
-{
- if (nchannels > 0 && nchannels <= MAX_CHANNELS){
- d_nchannels = nchannels;
- return true;
- }
- return false;
-}
-
-
-void
-gr_oscope_guts::trigger_changed ()
-{
- enter_look_for_trigger ();
-}
-
-// ACCESSORS
-
-int
-gr_oscope_guts::num_channels () const
-{
- return d_nchannels;
-}
-
-double
-gr_oscope_guts::sample_rate () const
-{
- return d_sample_rate;
-}
-
-double
-gr_oscope_guts::update_rate () const
-{
- return d_update_rate;
-}
-
-int
-gr_oscope_guts::get_decimation_count () const
-{
- return d_decimator_count_init;
-}
-
-int
-gr_oscope_guts::get_trigger_channel () const
-{
- return d_trigger_channel;
-}
-
-gr_trigger_mode
-gr_oscope_guts::get_trigger_mode () const
-{
- return d_trigger_mode;
-}
-
-gr_trigger_slope
-gr_oscope_guts::get_trigger_slope () const
-{
- return d_trigger_slope;
-}
-
-double
-gr_oscope_guts::get_trigger_level () const
-{
- return d_trigger_level;
-}
-
-int
-gr_oscope_guts::get_samples_per_output_record () const
-{
- int mx;
-
- mx = OUTPUT_RECORD_SIZE;
- if (d_trigger_mode == gr_TRIG_MODE_STRIPCHART)
- {
- mx = OUTPUT_RECORD_SIZE*SCHART_MULT;
- }
- return mx;
-}
diff --git a/gnuradio-core/src/lib/io/gr_oscope_guts.h b/gnuradio-core/src/lib/io/gr_oscope_guts.h
deleted file mode 100644
index bc9513c7e7..0000000000
--- a/gnuradio-core/src/lib/io/gr_oscope_guts.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2005 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef INCLUDED_GR_OSCOPE_GUTS_H
-#define INCLUDED_GR_OSCOPE_GUTS_H
-
-#include <gr_core_api.h>
-#include <gr_trigger_mode.h>
-#include <gr_msg_queue.h>
-
-/*!
- * \brief guts of oscilloscope trigger and buffer module
- *
- * This module processes sets of samples provided the \p process_sample
- * method. When appropriate given the updateRate, sampleRate and
- * trigger conditions, process_sample will periodically write output
- * records of captured data to output_fd. For each trigger event,
- * nchannels records will be written. Each record consists of
- * get_samples_per_output_record binary floats. The trigger instant
- * occurs at the 1/2 way point in the buffer. Thus, output records
- * consist of 50% pre-trigger data and 50% post-trigger data.
- */
-
-class GR_CORE_API gr_oscope_guts {
-public:
- static const int MAX_CHANNELS = 8;
-private:
- enum scope_state { HOLD_OFF, LOOK_FOR_TRIGGER, POST_TRIGGER };
-
- int d_nchannels; // how many channels
- gr_msg_queue_sptr d_msgq; // message queue we stuff output records into
- gr_trigger_mode d_trigger_mode;
- gr_trigger_slope d_trigger_slope;
- int d_trigger_channel; // which channel to watch for trigger condition
- double d_sample_rate; // input sample rate in Hz
- double d_update_rate; // approx freq to produce an output record (Hz)
- double d_trigger_level;
-
- int d_obi; // output buffer index
- float *d_buffer[MAX_CHANNELS];
-
- scope_state d_state;
- int d_decimator_count;
- int d_decimator_count_init;
- int d_hold_off_count;
- int d_hold_off_count_init;
- int d_pre_trigger_count;
- int d_post_trigger_count;
- int d_post_trigger_count_init;
- float d_trigger_off; //%sample trigger is off
-
- // NOT IMPLEMENTED
- gr_oscope_guts (const gr_oscope_guts &rhs); // no copy constructor
- gr_oscope_guts &operator= (const gr_oscope_guts &rhs); // no assignment operator
-
- void trigger_changed ();
- void update_rate_or_decimation_changed ();
- bool found_trigger (); // returns true if found
- void write_output_records ();
-
- void enter_hold_off (); // called on state entry
- void enter_look_for_trigger ();
- void enter_post_trigger ();
-
-public:
- // CREATORS
- gr_oscope_guts (double sample_rate, gr_msg_queue_sptr msgq);
- ~gr_oscope_guts ();
-
- // MANIPULATORS
-
- /*!
- * \p channel_data points to nchannels float values. These are the values
- * for each channel at this sample time.
- */
- void process_sample (const float *channel_data);
-
- bool set_update_rate (double update_rate);
- bool set_decimation_count (int decimation_count);
- bool set_trigger_channel (int channel);
- bool set_trigger_mode (gr_trigger_mode mode);
- bool set_trigger_slope (gr_trigger_slope slope);
- bool set_trigger_level (double trigger_level);
- bool set_trigger_level_auto (); // set to 50% level
- bool set_sample_rate(double sample_rate);
- bool set_num_channels(int nchannels);
-
-
- // ACCESSORS
- int num_channels () const;
- double sample_rate () const;
- double update_rate () const;
- int get_decimation_count () const;
- int get_trigger_channel () const;
- gr_trigger_mode get_trigger_mode () const;
- gr_trigger_slope get_trigger_slope () const;
- double get_trigger_level () const;
-
- // # of samples written to each output record.
- int get_samples_per_output_record () const;
-};
-
-#endif /* INCLUDED_GR_OSCOPE_GUTS_H */
diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink.i b/gnuradio-core/src/lib/io/gr_oscope_sink.i
deleted file mode 100644
index 3d7072ed45..0000000000
--- a/gnuradio-core/src/lib/io/gr_oscope_sink.i
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2004 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-%include gr_trigger_mode.h
-
-// GR_SWIG_BLOCK_MAGIC(gr,oscope_sink_x)
-
-%ignore gr_oscope_sink_x;
-class gr_oscope_sink_x : public gr_sync_block
-{
- protected:
- gr_oscope_sink_x (const std::string name,
- gr_io_signature_sptr input_sig,
- double sample_rate);
-
- public:
- ~gr_oscope_sink_x ();
-
- bool set_update_rate (double update_rate);
- bool set_decimation_count (int decimation_count);
- bool set_trigger_channel (int channel);
- bool set_trigger_mode (gr_trigger_mode mode);
- bool set_trigger_slope (gr_trigger_slope slope);
- bool set_trigger_level (double trigger_level);
- bool set_trigger_level_auto (); // set to 50% level
- bool set_sample_rate(double sample_rate);
-
- // ACCESSORS
- int num_channels () const;
- double sample_rate () const;
- double update_rate () const;
- int get_decimation_count () const;
- int get_trigger_channel () const;
- gr_trigger_mode get_trigger_mode () const;
- gr_trigger_slope get_trigger_slope () const;
- double get_trigger_level () const;
-
- // # of samples written to each output record.
- int get_samples_per_output_record () const;
-};
-
-// ----------------------------------------------------------------
-
-GR_SWIG_BLOCK_MAGIC(gr,oscope_sink_f)
-
-gr_oscope_sink_f_sptr
-gr_make_oscope_sink_f (double sample_rate, gr_msg_queue_sptr msgq);
-
-class gr_oscope_sink_f : public gr_oscope_sink_x
-{
-private:
- gr_oscope_sink_f (double sample_rate, gr_msg_queue_sptr msgq);
-
-public:
- ~gr_oscope_sink_f ();
-};
-
-// ----------------------------------------------------------------
diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_f.cc b/gnuradio-core/src/lib/io/gr_oscope_sink_f.cc
deleted file mode 100644
index 493a25e81e..0000000000
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_f.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2004,2005,2010 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_oscope_sink_f.h>
-#include <gr_io_signature.h>
-#include <gr_oscope_guts.h>
-
-
-gr_oscope_sink_f_sptr
-gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq)
-{
- return gnuradio::get_initial_sptr(new gr_oscope_sink_f (sampling_rate, msgq));
-}
-
-
-gr_oscope_sink_f::gr_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq)
- : gr_oscope_sink_x ("oscope_sink_f",
- gr_make_io_signature (1, gr_oscope_guts::MAX_CHANNELS, sizeof (float)),
- sampling_rate),
- d_msgq(msgq)
-{
- d_guts = new gr_oscope_guts (d_sampling_rate, d_msgq);
-}
-
-
-bool
-gr_oscope_sink_f::check_topology (int ninputs, int noutputs)
-{
- return d_guts->set_num_channels(ninputs);
-}
-
-
-gr_oscope_sink_f::~gr_oscope_sink_f ()
-{
-}
-
-int
-gr_oscope_sink_f::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- int ni = input_items.size ();
- float tmp[gr_oscope_guts::MAX_CHANNELS];
-
- for (int i = 0; i < noutput_items; i++){
-
- // FIXME for now, copy the data. Fix later if reqd
- for (int ch = 0; ch < ni; ch++)
- tmp[ch] = ((const float *) input_items[ch])[i];
-
- d_guts->process_sample (tmp);
- }
-
- return noutput_items;
-}
diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_f.h b/gnuradio-core/src/lib/io/gr_oscope_sink_f.h
deleted file mode 100644
index 8d434d2bc4..0000000000
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_f.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2004,2005 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_GR_OSCOPE_SINK_F_H
-#define INCLUDED_GR_OSCOPE_SINK_F_H
-
-#include <gr_core_api.h>
-#include <gr_oscope_sink_x.h>
-#include <gr_msg_queue.h>
-
-class gr_oscope_sink_f;
-typedef boost::shared_ptr<gr_oscope_sink_x> gr_oscope_sink_f_sptr;
-
-GR_CORE_API gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
-
-
-/*!
- * \brief Building block for python oscilloscope module.
- * \ingroup sink_blk
- *
- * Accepts multiple float streams.
- */
-class GR_CORE_API gr_oscope_sink_f : public gr_oscope_sink_x
-{
-private:
- friend GR_CORE_API gr_oscope_sink_f_sptr
- gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
-
- gr_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
-
- gr_msg_queue_sptr d_msgq;
-
- public:
- ~gr_oscope_sink_f ();
-
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-
- bool check_topology (int ninputs, int noutputs);
-};
-
-#endif /* INCLUDED_GR_OSCOPE_SINK_F_H */
-
diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_x.cc b/gnuradio-core/src/lib/io/gr_oscope_sink_x.cc
deleted file mode 100644
index 9580dbf6a3..0000000000
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_x.cc
+++ /dev/null
@@ -1,156 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2004 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_oscope_sink_x.h>
-#include <gr_io_signature.h>
-#include <gr_oscope_guts.h>
-
-
-gr_oscope_sink_x::gr_oscope_sink_x (const std::string name,
- gr_io_signature_sptr input_sig,
- double sampling_rate)
- : gr_sync_block (name, input_sig, gr_make_io_signature (0, 0, 0)),
- d_sampling_rate (sampling_rate), d_guts (0)
-{
-}
-
-gr_oscope_sink_x::~gr_oscope_sink_x ()
-{
- delete d_guts;
-}
-
-// ----------------------------------------------------------------
-
-bool
-gr_oscope_sink_x::set_update_rate (double update_rate)
-{
- return d_guts->set_update_rate (update_rate);
-}
-
-bool
-gr_oscope_sink_x::set_decimation_count (int decimation_count)
-{
- return d_guts->set_decimation_count (decimation_count);
-}
-
-bool
-gr_oscope_sink_x::set_trigger_channel (int channel)
-{
- return d_guts->set_trigger_channel (channel);
-}
-
-bool
-gr_oscope_sink_x::set_trigger_mode (gr_trigger_mode mode)
-{
- return d_guts->set_trigger_mode (mode);
-}
-
-bool
-gr_oscope_sink_x::set_trigger_slope (gr_trigger_slope slope)
-{
- return d_guts->set_trigger_slope (slope);
-}
-
-bool
-gr_oscope_sink_x::set_trigger_level (double trigger_level)
-{
- return d_guts->set_trigger_level (trigger_level);
-}
-
-
-bool
-gr_oscope_sink_x::set_trigger_level_auto ()
-{
- return d_guts->set_trigger_level_auto ();
-}
-
-bool
-gr_oscope_sink_x::set_sample_rate (double sample_rate)
-{
- return d_guts->set_sample_rate (sample_rate);
-}
-
-bool
-gr_oscope_sink_x::set_num_channels (int nchannels)
-{
- return d_guts->set_num_channels (nchannels);
-}
-
-// ACCESSORS
-
-int
-gr_oscope_sink_x::num_channels () const
-{
- return d_guts->num_channels ();
-}
-
-double
-gr_oscope_sink_x::sample_rate () const
-{
- return d_guts->sample_rate ();
-}
-
-double
-gr_oscope_sink_x::update_rate () const
-{
- return d_guts->update_rate ();
-}
-
-int
-gr_oscope_sink_x::get_decimation_count () const
-{
- return d_guts->get_decimation_count ();
-}
-
-int
-gr_oscope_sink_x::get_trigger_channel () const
-{
- return d_guts->get_trigger_channel ();
-}
-
-gr_trigger_mode
-gr_oscope_sink_x::get_trigger_mode () const
-{
- return d_guts->get_trigger_mode ();
-}
-
-gr_trigger_slope
-gr_oscope_sink_x::get_trigger_slope () const
-{
- return d_guts->get_trigger_slope ();
-}
-
-double
-gr_oscope_sink_x::get_trigger_level () const
-{
- return d_guts->get_trigger_level ();
-}
-
-int
-gr_oscope_sink_x::get_samples_per_output_record () const
-{
- return d_guts->get_samples_per_output_record ();
-}
diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_x.h b/gnuradio-core/src/lib/io/gr_oscope_sink_x.h
deleted file mode 100644
index 153d0937ab..0000000000
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_x.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2004 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_GR_OSCOPE_SINK_X_H
-#define INCLUDED_GR_OSCOPE_SINK_X_H
-
-#include <gr_core_api.h>
-#include <gr_sync_block.h>
-#include <gr_trigger_mode.h>
-
-class gr_oscope_guts;
-
-/*!
- * \brief Abstract class for python oscilloscope module.
- * \ingroup sink_blk
- *
- * Don't instantiate this. Use gr_oscope_sink_f or gr_oscope_sink_c instead.
- */
-class GR_CORE_API gr_oscope_sink_x : public gr_sync_block
-{
-protected:
- double d_sampling_rate;
- gr_oscope_guts *d_guts;
-
- gr_oscope_sink_x (const std::string name,
- gr_io_signature_sptr input_sig,
- double sampling_rate);
-
-public:
- ~gr_oscope_sink_x ();
-
- bool set_update_rate (double update_rate);
- bool set_decimation_count (int decimation_count);
- bool set_trigger_channel (int channel);
- bool set_trigger_mode (gr_trigger_mode mode);
- bool set_trigger_slope (gr_trigger_slope slope);
- bool set_trigger_level (double trigger_level);
- bool set_trigger_level_auto (); // set to 50% level
- bool set_sample_rate(double sample_rate);
- bool set_num_channels (int nchannels);
-
-
- // ACCESSORS
- int num_channels () const;
- double sample_rate () const;
- double update_rate () const;
- int get_decimation_count () const;
- int get_trigger_channel () const;
- gr_trigger_mode get_trigger_mode () const;
- gr_trigger_slope get_trigger_slope () const;
- double get_trigger_level () const;
-
- // # of samples written to each output record.
- int get_samples_per_output_record () const;
-
-};
-
-#endif /* INCLUDED_GR_OSCOPE_SINK_X_H */
diff --git a/gnuradio-core/src/lib/swig/CMakeLists.txt b/gnuradio-core/src/lib/swig/CMakeLists.txt
index a397339eeb..f098597df0 100644
--- a/gnuradio-core/src/lib/swig/CMakeLists.txt
+++ b/gnuradio-core/src/lib/swig/CMakeLists.txt
@@ -60,7 +60,7 @@ link_directories(${Boost_LIBRARY_DIRS})
set(GR_SWIG_TARGET_DEPS gnuradio_core_generated_sources
general_generated filter_generated pmt_swig)
-foreach(what runtime general io)
+foreach(what runtime general)
SET(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/${what}_swig_doc.i)
SET(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../${what} ${CMAKE_CURRENT_BINARY_DIR}/../${what})
GR_SWIG_MAKE(gnuradio_core_${what} gnuradio_core_${what}.i)
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core.py b/gnuradio-core/src/lib/swig/gnuradio_core.py
index 98e415f31a..09d00fcdc1 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core.py
+++ b/gnuradio-core/src/lib/swig/gnuradio_core.py
@@ -22,4 +22,3 @@
from gnuradio_core_runtime import *
from gnuradio_core_general import *
-from gnuradio_core_io import *
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_io.i b/gnuradio-core/src/lib/swig/gnuradio_core_io.i
deleted file mode 100644
index 522b12b347..0000000000
--- a/gnuradio-core/src/lib/swig/gnuradio_core_io.i
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006,2009,2010 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-%include "io_swig_doc.i"
-
-#ifndef SWIGIMPORTED
-%module(directors="1") gnuradio_core_io
-#endif
-
- //%feature("autodoc", "1"); // generate python docstrings
-
-%include "gnuradio.i" // the common stuff
-
-%include "io.i"
diff --git a/gr-audio/examples/grc/cvsd_sweep.grc b/gr-audio/examples/grc/cvsd_sweep.grc
index 496fd4f8e7..00da399da1 100644
--- a/gr-audio/examples/grc/cvsd_sweep.grc
+++ b/gr-audio/examples/grc/cvsd_sweep.grc
@@ -520,7 +520,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -595,7 +595,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -761,7 +761,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-digital/examples/demod/ber_simulation.grc b/gr-digital/examples/demod/ber_simulation.grc
index b216912a6f..d0bec741c3 100644
--- a/gr-digital/examples/demod/ber_simulation.grc
+++ b/gr-digital/examples/demod/ber_simulation.grc
@@ -537,7 +537,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-digital/examples/demod/digital_freq_lock.grc b/gr-digital/examples/demod/digital_freq_lock.grc
index 965768ece3..399d52488d 100644
--- a/gr-digital/examples/demod/digital_freq_lock.grc
+++ b/gr-digital/examples/demod/digital_freq_lock.grc
@@ -244,7 +244,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -630,7 +630,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-digital/examples/demod/dpsk_loopback.grc b/gr-digital/examples/demod/dpsk_loopback.grc
index 9befa69b6c..daa076c47b 100644
--- a/gr-digital/examples/demod/dpsk_loopback.grc
+++ b/gr-digital/examples/demod/dpsk_loopback.grc
@@ -374,7 +374,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-digital/examples/demod/pam_sync.grc b/gr-digital/examples/demod/pam_sync.grc
index 693b112088..d8497e423d 100644
--- a/gr-digital/examples/demod/pam_sync.grc
+++ b/gr-digital/examples/demod/pam_sync.grc
@@ -228,7 +228,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -1054,7 +1054,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-digital/examples/demod/pam_timing.grc b/gr-digital/examples/demod/pam_timing.grc
index 632477821a..50dd8a1c86 100644
--- a/gr-digital/examples/demod/pam_timing.grc
+++ b/gr-digital/examples/demod/pam_timing.grc
@@ -519,7 +519,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -594,7 +594,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -669,7 +669,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -744,7 +744,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -819,7 +819,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-howto-write-a-block/apps/howto_square.grc b/gr-howto-write-a-block/apps/howto_square.grc
index ee2c8db271..0eea15426c 100644
--- a/gr-howto-write-a-block/apps/howto_square.grc
+++ b/gr-howto-write-a-block/apps/howto_square.grc
@@ -143,7 +143,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -303,7 +303,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-howto-write-a-block/apps/howto_square.py b/gr-howto-write-a-block/apps/howto_square.py
index 4a9bfe3f8e..818e776232 100755
--- a/gr-howto-write-a-block/apps/howto_square.py
+++ b/gr-howto-write-a-block/apps/howto_square.py
@@ -42,7 +42,7 @@ class howto_square(grc_wxgui.top_block_gui):
ac_couple=False,
xy_mode=False,
num_inputs=1,
- trig_mode=gr.gr_TRIG_MODE_AUTO,
+ trig_mode=wxgui.TRIG_MODE_AUTO,
y_axis_label="Counts",
)
self.Add(self.sink2.win)
@@ -56,7 +56,7 @@ class howto_square(grc_wxgui.top_block_gui):
ac_couple=False,
xy_mode=False,
num_inputs=1,
- trig_mode=gr.gr_TRIG_MODE_AUTO,
+ trig_mode=wxgui.TRIG_MODE_AUTO,
y_axis_label="Counts",
)
self.Add(self.sink.win)
diff --git a/gr-noaa/examples/usrp_rx_hrpt.grc b/gr-noaa/examples/usrp_rx_hrpt.grc
index 1f61a8880f..56d07446bf 100644
--- a/gr-noaa/examples/usrp_rx_hrpt.grc
+++ b/gr-noaa/examples/usrp_rx_hrpt.grc
@@ -1667,7 +1667,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-trellis/examples/grc/interference_cancellation.grc b/gr-trellis/examples/grc/interference_cancellation.grc
index 29452311c6..4555a244a9 100644
--- a/gr-trellis/examples/grc/interference_cancellation.grc
+++ b/gr-trellis/examples/grc/interference_cancellation.grc
@@ -969,7 +969,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc
index 359cfefc83..c0e587a09e 100644
--- a/gr-trellis/examples/grc/pccc.grc
+++ b/gr-trellis/examples/grc/pccc.grc
@@ -389,7 +389,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-trellis/examples/grc/pccc1.grc b/gr-trellis/examples/grc/pccc1.grc
index 8f58404794..4507cae890 100644
--- a/gr-trellis/examples/grc/pccc1.grc
+++ b/gr-trellis/examples/grc/pccc1.grc
@@ -389,7 +389,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-trellis/examples/grc/sccc.grc b/gr-trellis/examples/grc/sccc.grc
index ee532da9fe..ec84665c14 100644
--- a/gr-trellis/examples/grc/sccc.grc
+++ b/gr-trellis/examples/grc/sccc.grc
@@ -395,7 +395,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-trellis/examples/grc/sccc1.grc b/gr-trellis/examples/grc/sccc1.grc
index fa6506ba18..332ec6bdd7 100644
--- a/gr-trellis/examples/grc/sccc1.grc
+++ b/gr-trellis/examples/grc/sccc1.grc
@@ -631,7 +631,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
index 800a5fab84..f16f2d71b5 100755
--- a/gr-uhd/apps/uhd_fft
+++ b/gr-uhd/apps/uhd_fft
@@ -38,6 +38,10 @@ except ImportError:
sys.stderr.write("Error importing GNU Radio's wxgui. Please make sure gr-wxgui is installed.\n")
sys.exit(1)
+import os
+print os.getpid()
+raw_input()
+
class app_top_block(stdgui2.std_top_block):
def __init__(self, frame, panel, vbox, argv):
stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
diff --git a/gr-uhd/examples/grc/uhd_dpsk_mod.grc b/gr-uhd/examples/grc/uhd_dpsk_mod.grc
index 9caafbb6ac..8387890372 100644
--- a/gr-uhd/examples/grc/uhd_dpsk_mod.grc
+++ b/gr-uhd/examples/grc/uhd_dpsk_mod.grc
@@ -226,7 +226,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
diff --git a/gr-uhd/examples/grc/uhd_fft.grc b/gr-uhd/examples/grc/uhd_fft.grc
index 1db98ab8aa..08e5f70edb 100644
--- a/gr-uhd/examples/grc/uhd_fft.grc
+++ b/gr-uhd/examples/grc/uhd_fft.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 11:09:57 2013</timestamp>
+ <timestamp>Mon Mar 18 15:42:27 2013</timestamp>
<block>
<key>options</key>
<param>
@@ -248,7 +248,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>
@@ -1488,7 +1488,7 @@
</param>
<param>
<key>value</key>
- <value></value>
+ <value>addr=192.168.11.2</value>
</param>
<param>
<key>type</key>
diff --git a/gr-wxgui/CMakeLists.txt b/gr-wxgui/CMakeLists.txt
index 04c4a26569..52e0a7061d 100644
--- a/gr-wxgui/CMakeLists.txt
+++ b/gr-wxgui/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2011 Free Software Foundation, Inc.
+# Copyright 2011,2013 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -22,8 +22,8 @@
########################################################################
include(GrPython)
-GR_PYTHON_CHECK_MODULE("wx >= 2.8" wx "wx.version().split()[0] >= '2.8'" WX_FOUND)
-GR_PYTHON_CHECK_MODULE("numpy" numpy True NUMPY_FOUND)
+GR_PYTHON_CHECK_MODULE("wx >= 2.8" wx "wx.version().split()[0] >= '2.8'" WX_FOUND)
+GR_PYTHON_CHECK_MODULE("numpy" numpy True NUMPY_FOUND)
########################################################################
# Register component
@@ -50,6 +50,13 @@ GR_REGISTER_COMPONENT("gr-wxgui" ENABLE_GR_WXGUI
########################################################################
if(ENABLE_GR_WXGUI)
+GR_SET_GLOBAL(GR_WXGUI_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_BINARY_DIR}/lib
+ ${CMAKE_CURRENT_BINARY_DIR}/include
+)
+
########################################################################
# Setup CPack components
########################################################################
@@ -86,7 +93,10 @@ install(
########################################################################
# Add subdirectories
########################################################################
+add_subdirectory(include/wxgui)
+add_subdirectory(lib)
add_subdirectory(grc)
+add_subdirectory(swig)
add_subdirectory(python)
endif(ENABLE_GR_WXGUI)
diff --git a/gr-wxgui/grc/wxgui_constellationsink2.xml b/gr-wxgui/grc/wxgui_constellationsink2.xml
index f9df9d4acd..1c0789e2c0 100644
--- a/gr-wxgui/grc/wxgui_constellationsink2.xml
+++ b/gr-wxgui/grc/wxgui_constellationsink2.xml
@@ -9,6 +9,7 @@
<key>wxgui_constellationsink2</key>
<category>WX GUI Widgets</category>
<import>from gnuradio.wxgui import constsink_gl</import>
+ <import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
constsink_gl.const_sink_c(
$(parent).GetWin(),
diff --git a/gr-wxgui/grc/wxgui_fftsink2.xml b/gr-wxgui/grc/wxgui_fftsink2.xml
index ff5c47b85c..086f7de753 100644
--- a/gr-wxgui/grc/wxgui_fftsink2.xml
+++ b/gr-wxgui/grc/wxgui_fftsink2.xml
@@ -10,6 +10,7 @@
<category>WX GUI Widgets</category>
<import>from gnuradio.fft import window</import>
<import>from gnuradio.wxgui import fftsink2</import>
+ <import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
fftsink2.$(type.fcn)(
$(parent).GetWin(),
diff --git a/gr-wxgui/grc/wxgui_histosink2.xml b/gr-wxgui/grc/wxgui_histosink2.xml
index f4f6a29597..39237755e8 100644
--- a/gr-wxgui/grc/wxgui_histosink2.xml
+++ b/gr-wxgui/grc/wxgui_histosink2.xml
@@ -9,6 +9,7 @@
<key>wxgui_histosink2</key>
<category>WX GUI Widgets</category>
<import>from gnuradio.wxgui import histosink_gl</import>
+ <import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
histosink_gl.histo_sink_f(
$(parent).GetWin(),
diff --git a/gr-wxgui/grc/wxgui_numbersink2.xml b/gr-wxgui/grc/wxgui_numbersink2.xml
index 2559266101..8e47db26e2 100644
--- a/gr-wxgui/grc/wxgui_numbersink2.xml
+++ b/gr-wxgui/grc/wxgui_numbersink2.xml
@@ -9,6 +9,7 @@
<key>wxgui_numbersink2</key>
<category>WX GUI Widgets</category>
<import>from gnuradio.wxgui import numbersink2</import>
+ <import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
numbersink2.$(type.fcn)(
$(parent).GetWin(),
diff --git a/gr-wxgui/grc/wxgui_scopesink2.xml b/gr-wxgui/grc/wxgui_scopesink2.xml
index dbf983e112..596fe03397 100644
--- a/gr-wxgui/grc/wxgui_scopesink2.xml
+++ b/gr-wxgui/grc/wxgui_scopesink2.xml
@@ -9,7 +9,7 @@
<key>wxgui_scopesink2</key>
<category>WX GUI Widgets</category>
<import>from gnuradio.wxgui import scopesink2</import>
- <import>from gnuradio import gr</import>
+ <import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
scopesink2.$(type.fcn)(
$(parent).GetWin(),
@@ -143,19 +143,19 @@ $(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
<type>enum</type>
<option>
<name>Auto</name>
- <key>gr.gr_TRIG_MODE_AUTO</key>
+ <key>wxgui.TRIG_MODE_AUTO</key>
</option>
<option>
<name>Normal</name>
- <key>gr.gr_TRIG_MODE_NORM</key>
+ <key>wxgui.TRIG_MODE_NORM</key>
</option>
<option>
<name>Freerun</name>
- <key>gr.gr_TRIG_MODE_FREE</key>
+ <key>wxgui.TRIG_MODE_FREE</key>
</option>
<option>
<name>Stripchart</name>
- <key>gr.gr_TRIG_MODE_STRIPCHART</key>
+ <key>wxgui.TRIG_MODE_STRIPCHART</key>
</option>
</param>
<param>
diff --git a/gr-wxgui/grc/wxgui_termsink.xml b/gr-wxgui/grc/wxgui_termsink.xml
index 3e35c75788..a13927926b 100644
--- a/gr-wxgui/grc/wxgui_termsink.xml
+++ b/gr-wxgui/grc/wxgui_termsink.xml
@@ -10,6 +10,7 @@
<category>WX GUI Widgets</category>
<import>from gnuradio.wxgui import termsink</import>
+ <import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
termsink.termsink(
diff --git a/gr-wxgui/grc/wxgui_waterfallsink2.xml b/gr-wxgui/grc/wxgui_waterfallsink2.xml
index c02901d336..971e90f413 100644
--- a/gr-wxgui/grc/wxgui_waterfallsink2.xml
+++ b/gr-wxgui/grc/wxgui_waterfallsink2.xml
@@ -10,6 +10,7 @@
<category>WX GUI Widgets</category>
<import>from gnuradio.fft import window</import>
<import>from gnuradio.wxgui import waterfallsink2</import>
+ <import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
waterfallsink2.$(type.fcn)(
$(parent).GetWin(),
diff --git a/gr-wxgui/include/wxgui/CMakeLists.txt b/gr-wxgui/include/wxgui/CMakeLists.txt
new file mode 100644
index 0000000000..fad84792e1
--- /dev/null
+++ b/gr-wxgui/include/wxgui/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Copyright 2013 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ api.h
+ histo_sink_f.h
+ oscope_guts.h
+ oscope_sink_f.h
+ oscope_sink_x.h
+ trigger_mode.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/wxgui
+ COMPONENT "wxgui_devel"
+)
diff --git a/gnuradio-core/src/lib/io/io.i b/gr-wxgui/include/wxgui/api.h
index 2c8def973c..442e112e4b 100644
--- a/gnuradio-core/src/lib/io/io.i
+++ b/gr-wxgui/include/wxgui/api.h
@@ -1,6 +1,5 @@
-/* -*- c++ -*- */
/*
- * Copyright 2004,2007 Free Software Foundation, Inc.
+ * Copyright 2013 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,18 +19,15 @@
* Boston, MA 02110-1301, USA.
*/
-%{
+#ifndef INCLUDED_WXGUI_API_H
+#define INCLUDED_WXGUI_API_H
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_histo_sink_f.h>
-#include <gr_oscope_sink_x.h>
-#include <gr_oscope_sink_f.h>
-%}
-
-%include "gr_histo_sink.i"
-%include "gr_oscope_sink.i"
+#include <gruel/attributes.h>
+#ifdef gnuradio_wxgui_EXPORTS
+# define WXGUI_API __GR_ATTR_EXPORT
+#else
+# define WXGUI_API __GR_ATTR_IMPORT
+#endif
+#endif /* INCLUDED_WXGUI_API_H */
diff --git a/gr-wxgui/include/wxgui/histo_sink_f.h b/gr-wxgui/include/wxgui/histo_sink_f.h
new file mode 100644
index 0000000000..f65517ca35
--- /dev/null
+++ b/gr-wxgui/include/wxgui/histo_sink_f.h
@@ -0,0 +1,55 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GR_HISTO_SINK_F_H
+#define INCLUDED_GR_HISTO_SINK_F_H
+
+#include <wxgui/api.h>
+#include <gr_sync_block.h>
+#include <gr_msg_queue.h>
+
+namespace gr {
+ namespace wxgui {
+
+ /*!
+ * \brief Histogram module.
+ * \ingroup sink_blk
+ */
+ class WXGUI_API histo_sink_f : virtual public gr_sync_block
+ {
+ public:
+ // gr::blocks::histo_sink_f::sptr
+ typedef boost::shared_ptr<histo_sink_f> sptr;
+
+ static sptr make(gr_msg_queue_sptr msgq);
+
+ virtual unsigned int get_frame_size(void) = 0;
+ virtual unsigned int get_num_bins(void) = 0;
+
+ virtual void set_frame_size(unsigned int frame_size) = 0;
+ virtual void set_num_bins(unsigned int num_bins) = 0;
+ };
+
+ } /* namespace wxgui */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_HISTO_SINK_F_H */
diff --git a/gr-wxgui/include/wxgui/oscope_guts.h b/gr-wxgui/include/wxgui/oscope_guts.h
new file mode 100644
index 0000000000..a6abd81539
--- /dev/null
+++ b/gr-wxgui/include/wxgui/oscope_guts.h
@@ -0,0 +1,131 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003,2005,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GR_OSCOPE_GUTS_H
+#define INCLUDED_GR_OSCOPE_GUTS_H
+
+#include <wxgui/api.h>
+#include <wxgui/trigger_mode.h>
+#include <gr_msg_queue.h>
+
+namespace gr {
+ namespace wxgui {
+
+ /*!
+ * \brief guts of oscilloscope trigger and buffer module
+ *
+ * This module processes sets of samples provided the \p
+ * process_sample method. When appropriate given the updateRate,
+ * sampleRate and trigger conditions, process_sample will
+ * periodically write output records of captured data to
+ * output_fd. For each trigger event, nchannels records will be
+ * written. Each record consists of get_samples_per_output_record
+ * binary floats. The trigger instant occurs at the 1/2 way point
+ * in the buffer. Thus, output records consist of 50% pre-trigger
+ * data and 50% post-trigger data.
+ */
+
+ class WXGUI_API oscope_guts
+ {
+ public:
+ static const int MAX_CHANNELS = 8;
+
+ private:
+ enum scope_state { HOLD_OFF, LOOK_FOR_TRIGGER, POST_TRIGGER };
+
+ int d_nchannels; // how many channels
+ gr_msg_queue_sptr d_msgq; // message queue we stuff output records into
+ trigger_mode d_trigger_mode;
+ trigger_slope d_trigger_slope;
+ int d_trigger_channel; // which channel to watch for trigger condition
+ double d_sample_rate; // input sample rate in Hz
+ double d_update_rate; // approx freq to produce an output record (Hz)
+ double d_trigger_level;
+
+ int d_obi; // output buffer index
+ float *d_buffer[MAX_CHANNELS];
+
+ scope_state d_state;
+ int d_decimator_count;
+ int d_decimator_count_init;
+ int d_hold_off_count;
+ int d_hold_off_count_init;
+ int d_pre_trigger_count;
+ int d_post_trigger_count;
+ int d_post_trigger_count_init;
+ float d_trigger_off; //%sample trigger is off
+
+ // NOT IMPLEMENTED
+ oscope_guts(const oscope_guts &rhs); // no copy constructor
+ oscope_guts &operator= (const oscope_guts &rhs); // no assignment operator
+
+ void trigger_changed();
+ void update_rate_or_decimation_changed();
+ bool found_trigger(); // returns true if found
+ void write_output_records();
+
+ void enter_hold_off(); // called on state entry
+ void enter_look_for_trigger();
+ void enter_post_trigger();
+
+ public:
+ // CREATORS
+ oscope_guts(double sample_rate, gr_msg_queue_sptr msgq);
+ ~oscope_guts();
+
+ // MANIPULATORS
+
+ /*!
+ * \param channel_data points to nchannels float values. These
+ * are the values for each channel at this sample time.
+ */
+ void process_sample(const float *channel_data);
+
+ bool set_update_rate(double update_rate);
+ bool set_decimation_count(int decimation_count);
+ bool set_trigger_channel(int channel);
+ bool set_trigger_mode(trigger_mode mode);
+ bool set_trigger_slope(trigger_slope slope);
+ bool set_trigger_level(double trigger_level);
+ bool set_trigger_level_auto(); // set to 50% level
+ bool set_sample_rate(double sample_rate);
+ bool set_num_channels(int nchannels);
+
+ // ACCESSORS
+ int num_channels() const;
+ double sample_rate() const;
+ double update_rate() const;
+ int get_decimation_count() const;
+ int get_trigger_channel() const;
+ trigger_mode get_trigger_mode() const;
+ trigger_slope get_trigger_slope() const;
+ double get_trigger_level() const;
+
+ // # of samples written to each output record.
+ int get_samples_per_output_record() const;
+ };
+
+ } /* namespace wxgui */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_OSCOPE_GUTS_H */
diff --git a/gr-wxgui/include/wxgui/oscope_sink_f.h b/gr-wxgui/include/wxgui/oscope_sink_f.h
new file mode 100644
index 0000000000..a7c7657d40
--- /dev/null
+++ b/gr-wxgui/include/wxgui/oscope_sink_f.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003-2005,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GR_OSCOPE_SINK_F_H
+#define INCLUDED_GR_OSCOPE_SINK_F_H
+
+#include <wxgui/api.h>
+#include <wxgui/oscope_sink_x.h>
+#include <gr_msg_queue.h>
+
+namespace gr {
+ namespace wxgui {
+
+ /*!
+ * \brief Building block for python oscilloscope module.
+ * \ingroup sink_blk
+ *
+ * Accepts multiple float streams.
+ */
+ class WXGUI_API oscope_sink_f
+ : virtual public oscope_sink_x
+ {
+ public:
+ // gr::blocks::oscope_sink_f::sptr
+ typedef boost::shared_ptr<oscope_sink_f> sptr;
+
+ static sptr make(double sampling_rate, gr_msg_queue_sptr msgq);
+ };
+
+ } /* namespace wxgui */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_OSCOPE_SINK_F_H */
+
diff --git a/gr-wxgui/include/wxgui/oscope_sink_x.h b/gr-wxgui/include/wxgui/oscope_sink_x.h
new file mode 100644
index 0000000000..17fa9a0f5a
--- /dev/null
+++ b/gr-wxgui/include/wxgui/oscope_sink_x.h
@@ -0,0 +1,91 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003,2004,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GR_OSCOPE_SINK_X_H
+#define INCLUDED_GR_OSCOPE_SINK_X_H
+
+#include <wxgui/api.h>
+#include <wxgui/trigger_mode.h>
+#include <wxgui/oscope_guts.h>
+#include <gr_sync_block.h>
+
+namespace gr {
+ namespace wxgui {
+
+ /*!
+ * \brief Abstract class for python oscilloscope module.
+ * \ingroup sink_blk
+ *
+ * Don't instantiate this. Use gr::blocks::oscope_sink_f instead.
+ */
+ class WXGUI_API oscope_sink_x : public gr_sync_block
+ {
+ protected:
+ double d_sampling_rate;
+ oscope_guts *d_guts;
+
+ oscope_sink_x() {};
+ oscope_sink_x(const std::string name,
+ gr_io_signature_sptr input_sig,
+ double sampling_rate);
+ public:
+ virtual ~oscope_sink_x();
+
+ //// gr::blocks::oscope_sink_x::sptr
+ //typedef boost::shared_ptr<oscope_sink_x> sptr;
+ //
+ //static sptr make(const std::string name,
+ // gr_io_signature_sptr input_sig,
+ // double sampling_rate);
+
+ bool set_update_rate(double update_rate);
+ bool set_decimation_count(int decimation_count);
+ bool set_trigger_channel(int channel);
+ bool set_trigger_mode(trigger_mode mode);
+ bool set_trigger_slope(trigger_slope slope);
+ bool set_trigger_level(double trigger_level);
+ bool set_trigger_level_auto();
+ bool set_sample_rate(double sample_rate);
+ bool set_num_channels(int nchannels);
+
+ // ACCESSORS
+ int num_channels() const;
+ double sample_rate() const;
+ double update_rate() const;
+ int get_decimation_count() const;
+ int get_trigger_channel() const;
+ trigger_mode get_trigger_mode() const;
+ trigger_slope get_trigger_slope() const;
+ double get_trigger_level() const;
+
+ // # of samples written to each output record.
+ int get_samples_per_output_record() const;
+
+ virtual int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items) = 0;
+ };
+
+ } /* namespace wxgui */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_OSCOPE_SINK_X_H */
diff --git a/gnuradio-core/src/lib/io/gr_trigger_mode.h b/gr-wxgui/include/wxgui/trigger_mode.h
index be131686b4..11654ef6c5 100644
--- a/gnuradio-core/src/lib/io/gr_trigger_mode.h
+++ b/gr-wxgui/include/wxgui/trigger_mode.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2003,2004 Free Software Foundation, Inc.
+ * Copyright 2003,2004,2013 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -23,16 +23,22 @@
#ifndef INCLUDED_GR_TRIGGER_MODE_H
#define INCLUDED_GR_TRIGGER_MODE_H
-enum gr_trigger_mode {
- gr_TRIG_MODE_FREE,
- gr_TRIG_MODE_AUTO,
- gr_TRIG_MODE_NORM,
- gr_TRIG_MODE_STRIPCHART,
-};
+namespace gr {
+ namespace wxgui {
-enum gr_trigger_slope {
- gr_TRIG_SLOPE_POS,
- gr_TRIG_SLOPE_NEG,
-};
+ enum trigger_mode {
+ TRIG_MODE_FREE,
+ TRIG_MODE_AUTO,
+ TRIG_MODE_NORM,
+ TRIG_MODE_STRIPCHART,
+ };
+
+ enum trigger_slope {
+ TRIG_SLOPE_POS,
+ TRIG_SLOPE_NEG,
+ };
+
+ } /* namespace wxgui */
+} /* namespace gr */
#endif /* INCLUDED_GR_TRIGGER_MODE_H */
diff --git a/gr-wxgui/lib/CMakeLists.txt b/gr-wxgui/lib/CMakeLists.txt
new file mode 100644
index 0000000000..8c7c56fdcc
--- /dev/null
+++ b/gr-wxgui/lib/CMakeLists.txt
@@ -0,0 +1,78 @@
+# Copyright 2012-2013 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}/../include
+ ${GR_WXGUI_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${VOLK_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
+
+link_directories(${Boost_LIBRARY_DIRS})
+
+if(ENABLE_GR_CTRLPORT)
+ ADD_DEFINITIONS(-DGR_CTRLPORT)
+ include_directories(${ICE_INCLUDE_DIR})
+endif(ENABLE_GR_CTRLPORT)
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_wxgui_sources
+ histo_sink_f_impl.cc
+ oscope_guts.cc
+ oscope_sink_x.cc
+ oscope_sink_f_impl.cc
+)
+
+#Add Windows DLL resource file if using MSVC
+IF(MSVC)
+ include(${CMAKE_SOURCE_DIR}/cmake/Modules/GrVersion.cmake)
+
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-wxgui.rc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-wxgui.rc
+ @ONLY)
+
+ list(APPEND gr_wxgui_sources
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-wxgui.rc
+ )
+ENDIF(MSVC)
+
+list(APPEND wxgui_libs
+ gnuradio-core
+ volk
+ ${Boost_LIBRARIES}
+ ${BLOCKS_LIBRARIES}
+ ${LOG4CPP_LIBRARIES}
+)
+
+add_library(gnuradio-wxgui SHARED ${gr_wxgui_sources})
+
+target_link_libraries(gnuradio-wxgui ${wxgui_libs})
+GR_LIBRARY_FOO(gnuradio-wxgui
+ RUNTIME_COMPONENT "wxgui_runtime"
+ DEVEL_COMPONENT "wxgui_devel")
diff --git a/gr-wxgui/lib/gnuradio-wxgui.rc.in b/gr-wxgui/lib/gnuradio-wxgui.rc.in
new file mode 100644
index 0000000000..126db75091
--- /dev/null
+++ b/gr-wxgui/lib/gnuradio-wxgui.rc.in
@@ -0,0 +1,54 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <afxres.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION @MAJOR_VERSION@,@API_COMPAT@,@RC_MINOR_VERSION@,@RC_MAINT_VERSION@
+ PRODUCTVERSION @MAJOR_VERSION@,@API_COMPAT@,@RC_MINOR_VERSION@,@RC_MAINT_VERSION@
+ FILEFLAGSMASK 0x3fL
+#ifndef NDEBUG
+ FILEFLAGS 0x0L
+#else
+ FILEFLAGS 0x1L
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VFT2_DRV_INSTALLABLE
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "FileDescription", "gnuradio-blocks"
+ VALUE "FileVersion", "@VERSION@"
+ VALUE "InternalName", "gnuradio-blocks.dll"
+ VALUE "LegalCopyright", "Licensed under GPLv3 or any later version"
+ VALUE "OriginalFilename", "gnuradio-blocks.dll"
+ VALUE "ProductName", "gnuradio-blocks"
+ VALUE "ProductVersion", "@VERSION@"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+ END
diff --git a/gr-wxgui/lib/histo_sink_f_impl.cc b/gr-wxgui/lib/histo_sink_f_impl.cc
new file mode 100644
index 0000000000..f9459ac8d9
--- /dev/null
+++ b/gr-wxgui/lib/histo_sink_f_impl.cc
@@ -0,0 +1,186 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009-2011,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "histo_sink_f_impl.h"
+#include <gr_io_signature.h>
+#include <boost/math/special_functions/round.hpp>
+
+namespace gr {
+ namespace wxgui {
+
+ static float get_clean_num(float num)
+ {
+ if(num == 0)
+ return 0;
+ /* extract sign and exponent from num */
+ int sign = (num < 0) ? -1 : 1; num = fabs(num);
+ float exponent = floor(log10(num));
+ /* search for closest number with base 1, 2, 5, 10 */
+ float closest_num = 10*pow(10, exponent);
+ if(fabs(num - 1*pow(10, exponent)) < fabs(num - closest_num))
+ closest_num = 1*pow(10, exponent);
+ if(fabs(num - 2*pow(10, exponent)) < fabs(num - closest_num))
+ closest_num = 2*pow(10, exponent);
+ if(fabs(num - 5*pow(10, exponent)) < fabs(num - closest_num))
+ closest_num = 5*pow(10, exponent);
+ return sign*closest_num;
+ }
+
+ histo_sink_f::sptr
+ histo_sink_f::make(gr_msg_queue_sptr msgq)
+ {
+ return gnuradio::get_initial_sptr
+ (new histo_sink_f_impl(msgq));
+ }
+
+ histo_sink_f_impl::histo_sink_f_impl(gr_msg_queue_sptr msgq)
+ : gr_sync_block("histo_sink_f",
+ gr_make_io_signature(1, 1, sizeof(float)),
+ gr_make_io_signature(0, 0, 0)),
+ d_msgq(msgq), d_num_bins(11), d_frame_size(1000),
+ d_sample_count(0), d_bins(NULL), d_samps(NULL)
+ {
+ //allocate arrays and clear
+ set_num_bins(d_num_bins);
+ set_frame_size(d_frame_size);
+ }
+
+ histo_sink_f_impl::~histo_sink_f_impl(void)
+ {
+ delete [] d_samps;
+ delete [] d_bins;
+ }
+
+ int
+ histo_sink_f_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const float *in = (const float*)input_items[0];
+ gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this function
+ for(unsigned int i = 0; i < (unsigned int)noutput_items; i++) {
+ d_samps[d_sample_count] = in[i];
+ d_sample_count++;
+ /* processed a frame? */
+ if(d_sample_count == d_frame_size) {
+ send_frame();
+ clear();
+ }
+ }
+ return noutput_items;
+ }
+
+ void
+ histo_sink_f_impl::send_frame(void)
+ {
+ /* output queue full, drop the data */
+ if(d_msgq->full_p())
+ return;
+ /* find the minimum and maximum */
+ float minimum = d_samps[0];
+ float maximum = d_samps[0];
+ for(unsigned int i = 0; i < d_frame_size; i++) {
+ if(d_samps[i] < minimum) minimum = d_samps[i];
+ if(d_samps[i] > maximum) maximum = d_samps[i];
+ }
+ minimum = get_clean_num(minimum);
+ maximum = get_clean_num(maximum);
+ if(minimum == maximum || minimum > maximum)
+ return; //useless data or screw up?
+ /* load the bins */
+ int index;
+ float bin_width = (maximum - minimum)/(d_num_bins-1);
+ for(unsigned int i = 0; i < d_sample_count; i++) {
+ index = boost::math::iround((d_samps[i] - minimum)/bin_width);
+ /* ensure the index range in case a small floating point error is involed */
+ if(index < 0)
+ index = 0;
+ if(index >= (int)d_num_bins)
+ index = d_num_bins-1;
+ d_bins[index]++;
+ }
+ /* Build a message to hold the output records */
+ gr_message_sptr msg = gr_make_message(0, minimum, maximum, d_num_bins*sizeof(float));
+ float *out = (float *)msg->msg(); // get pointer to raw message buffer
+ /* normalize the bins and put into message */
+ for(unsigned int i = 0; i < d_num_bins; i++) {
+ out[i] = ((float)d_bins[i])/d_frame_size;
+ }
+ /* send the message */
+ d_msgq->handle(msg);
+ }
+
+ void
+ histo_sink_f_impl::clear(void)
+ {
+ d_sample_count = 0;
+ /* zero the bins */
+ for(unsigned int i = 0; i < d_num_bins; i++) {
+ d_bins[i] = 0;
+ }
+ }
+
+ /**************************************************
+ * Getters
+ **************************************************/
+ unsigned int
+ histo_sink_f_impl::get_frame_size(void)
+ {
+ return d_frame_size;
+ }
+
+ unsigned int
+ histo_sink_f_impl::get_num_bins(void)
+ {
+ return d_num_bins;
+ }
+
+ /**************************************************
+ * Setters
+ **************************************************/
+ void
+ histo_sink_f_impl::set_frame_size(unsigned int frame_size)
+ {
+ gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this function
+ d_frame_size = frame_size;
+ /* allocate a new sample array */
+ delete [] d_samps;
+ d_samps = new float[d_frame_size];
+ clear();
+ }
+
+ void
+ histo_sink_f_impl::set_num_bins(unsigned int num_bins) {
+ gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this function
+ d_num_bins = num_bins;
+ /* allocate a new bin array */
+ delete [] d_bins;
+ d_bins = new unsigned int[d_num_bins];
+ clear();
+ }
+
+ } /* namespace wxgui */
+} /* namespace gr */
diff --git a/gr-wxgui/lib/histo_sink_f_impl.h b/gr-wxgui/lib/histo_sink_f_impl.h
new file mode 100644
index 0000000000..e160e0e550
--- /dev/null
+++ b/gr-wxgui/lib/histo_sink_f_impl.h
@@ -0,0 +1,63 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GR_HISTO_SINK_F_IMPL_H
+#define INCLUDED_GR_HISTO_SINK_F_IMPL_H
+
+#include <wxgui/histo_sink_f.h>
+
+namespace gr {
+ namespace wxgui {
+
+ class histo_sink_f_impl : public histo_sink_f
+ {
+ private:
+ gr_msg_queue_sptr d_msgq;
+ unsigned int d_num_bins;
+ unsigned int d_frame_size;
+ unsigned int d_sample_count;
+ unsigned int *d_bins;
+ float *d_samps;
+ gruel::mutex d_mutex;
+
+ void send_frame(void);
+ void clear(void);
+
+ public:
+ histo_sink_f_impl(gr_msg_queue_sptr msgq);
+ ~histo_sink_f_impl(void);
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+
+ unsigned int get_frame_size(void);
+ unsigned int get_num_bins(void);
+
+ void set_frame_size(unsigned int frame_size);
+ void set_num_bins(unsigned int num_bins);
+ };
+
+ } /* namespace wxgui */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_HISTO_SINK_F_IMPL_H */
diff --git a/gr-wxgui/lib/oscope_guts.cc b/gr-wxgui/lib/oscope_guts.cc
new file mode 100644
index 0000000000..3d1f085a6f
--- /dev/null
+++ b/gr-wxgui/lib/oscope_guts.cc
@@ -0,0 +1,439 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003,2005,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <wxgui/oscope_guts.h>
+#include <stdexcept>
+#include <stdio.h>
+#include <algorithm>
+#include <unistd.h>
+#include <math.h>
+#include <assert.h>
+
+namespace gr {
+ namespace wxgui {
+
+ /*
+ * Bad performance if it's large, and flaky triggering if it's too small
+ */
+ static const int OUTPUT_RECORD_SIZE = 1024; // Must be power of 2
+
+ /*
+ * For (slow-updated) STRIPCHART triggering, we make the record
+ * size larger, since we potentially want to be able to "see"
+ * hours of data. This works as long as the update rates to a
+ * STRIPCHART are low, which they generally are--that's rather
+ * what a stripchart is all about!
+ */
+ static const int SCHART_MULT = 8;
+
+
+ static inline int
+ wrap_bi(int buffer_index, int mx) // wrap buffer index
+ {
+ return buffer_index & (mx - 1);
+ }
+
+ static inline int
+ incr_bi(int buffer_index, int mx) // increment buffer index
+ {
+ return wrap_bi(buffer_index + 1, mx);
+ }
+
+ static inline int
+ decr_bi(int buffer_index, int mx) // decrement buffer index
+ {
+ return wrap_bi(buffer_index - 1, mx);
+ }
+
+ oscope_guts::oscope_guts(double sample_rate, gr_msg_queue_sptr msgq)
+ : d_nchannels(1),
+ d_msgq(msgq),
+ d_trigger_mode(TRIG_MODE_AUTO),
+ d_trigger_slope(TRIG_SLOPE_POS),
+ d_trigger_channel(0),
+ d_sample_rate(sample_rate),
+ d_update_rate(20),
+ d_trigger_level(0),
+ d_obi(0),
+ d_state(HOLD_OFF),
+ d_decimator_count(0),
+ d_decimator_count_init(1),
+ d_hold_off_count(0),
+ d_hold_off_count_init(OUTPUT_RECORD_SIZE/2-1),
+ d_pre_trigger_count(0),
+ d_post_trigger_count(0),
+ d_post_trigger_count_init(OUTPUT_RECORD_SIZE/2)
+ {
+ for(int i = 0; i < MAX_CHANNELS; i++)
+ d_buffer[i] = 0;
+
+ for(int i = 0; i < MAX_CHANNELS; i++) {
+ d_buffer[i] = new float[OUTPUT_RECORD_SIZE*SCHART_MULT];
+ for(int j = 0; j < OUTPUT_RECORD_SIZE*SCHART_MULT; j++)
+ d_buffer[i][j] = 0.0;
+ }
+
+ // be sure buffer is full before first write
+ enter_hold_off();
+ update_rate_or_decimation_changed();
+ }
+
+ oscope_guts::~oscope_guts()
+ {
+ for(int i = 0; i < MAX_CHANNELS; i++)
+ delete [] d_buffer[i];
+ }
+
+ // MANIPULATORS
+ void
+ oscope_guts::process_sample(const float *channel_data)
+ {
+ d_decimator_count--;
+ if(d_decimator_count > 0)
+ return;
+
+ d_decimator_count = d_decimator_count_init;
+
+ if(d_trigger_mode != TRIG_MODE_STRIPCHART) {
+ for(int i = 0; i < d_nchannels; i++)
+ d_buffer[i][d_obi] = channel_data[i]; // copy data into buffer
+
+ switch(d_state) {
+ case HOLD_OFF:
+ d_hold_off_count--;
+ if(d_hold_off_count <= 0)
+ enter_look_for_trigger ();
+ break;
+
+ case LOOK_FOR_TRIGGER:
+ if(found_trigger())
+ enter_post_trigger();
+ break;
+
+ case POST_TRIGGER:
+ d_post_trigger_count--;
+ if(d_post_trigger_count <= 0) {
+ write_output_records();
+ enter_hold_off();
+ }
+ break;
+
+ default:
+ assert(0);
+ }
+
+ d_obi = incr_bi(d_obi, OUTPUT_RECORD_SIZE);
+ }
+ else {
+ for(int i = 0; i < d_nchannels; i++) {
+ for(int j = (OUTPUT_RECORD_SIZE*SCHART_MULT)-1; j > 0; j--) {
+ d_buffer[i][j] = d_buffer[i][j-1];
+ }
+ d_buffer[i][0] = channel_data[i];
+ }
+ d_trigger_off = 0;
+ write_output_records();
+ }
+ }
+
+ /*
+ * Functions called on state entry
+ */
+
+ void
+ oscope_guts::enter_hold_off()
+ {
+ d_state = HOLD_OFF;
+ d_hold_off_count = d_hold_off_count_init;
+ }
+
+ void
+ oscope_guts::enter_look_for_trigger()
+ {
+ d_pre_trigger_count = 0;
+ d_state = LOOK_FOR_TRIGGER;
+ }
+
+ void
+ oscope_guts::enter_post_trigger()
+ {
+ d_state = POST_TRIGGER;
+ d_post_trigger_count = d_post_trigger_count_init;
+ //ensure that the trigger offset is no more than than half a sample
+ if(d_trigger_off > .5)
+ d_trigger_off -= 1;
+ else
+ d_post_trigger_count--;
+ }
+
+ // ----------------------------------------------------------------
+ // returns true if trigger found
+
+ bool
+ oscope_guts::found_trigger()
+ {
+ int mx = d_trigger_mode == TRIG_MODE_STRIPCHART ? OUTPUT_RECORD_SIZE*SCHART_MULT :
+ OUTPUT_RECORD_SIZE;
+
+ float prev_sample = d_buffer[d_trigger_channel][decr_bi(d_obi, mx)];
+ float new_sample = d_buffer[d_trigger_channel][d_obi];
+
+ switch(d_trigger_mode) {
+
+ case TRIG_MODE_AUTO: //too many samples without a trigger
+ d_pre_trigger_count++;
+ if(d_pre_trigger_count > OUTPUT_RECORD_SIZE/2)
+ return true;
+
+ case TRIG_MODE_NORM: //look for trigger
+ switch(d_trigger_slope) {
+
+ case TRIG_SLOPE_POS: //trigger point in pos slope?
+ if(new_sample < d_trigger_level || prev_sample >= d_trigger_level)
+ return false;
+ break;
+
+ case TRIG_SLOPE_NEG: //trigger point in neg slope?
+ if(new_sample > d_trigger_level || prev_sample <= d_trigger_level)
+ return false;
+ break;
+ }
+
+ //calculate the trigger offset in % sample
+ d_trigger_off = (d_trigger_level - prev_sample)/(new_sample - prev_sample);
+ return true;
+
+ case TRIG_MODE_FREE: //free run mode, always trigger
+ d_trigger_off = 0;
+ return true;
+
+ default:
+ assert(0);
+ return false;
+ }
+ }
+
+ // ----------------------------------------------------------------
+ // write output records (duh!)
+
+ void
+ oscope_guts::write_output_records()
+ {
+ int mx;
+
+ mx = d_trigger_mode == TRIG_MODE_STRIPCHART ?
+ OUTPUT_RECORD_SIZE*SCHART_MULT : OUTPUT_RECORD_SIZE;
+
+ // if the output queue if full, drop the data like its hot.
+ if(d_msgq->full_p())
+ return;
+ // Build a message to hold the output records
+ gr_message_sptr msg =
+ gr_make_message(0, // msg type
+ d_nchannels, // arg1 for other side
+ mx, // arg2 for other side
+ ((d_nchannels * mx) + 1) * sizeof(float)); // sizeof payload
+
+ float *out = (float *)msg->msg(); // get pointer to raw message buffer
+
+ for(int ch = 0; ch < d_nchannels; ch++) {
+ // note that d_obi + 1 points at the oldest sample in the buffer
+ for(int i = 0; i < mx; i++) {
+ out[i] = d_buffer[ch][wrap_bi(d_obi + 1 + i, mx)];
+ }
+ out += mx;
+ }
+ //Set the last sample as the trigger offset:
+ // The non gl scope sink will not look at this last sample.
+ // The gl scope sink will use this last sample as an offset.
+ out[0] = d_trigger_off;
+ d_msgq->handle(msg); // send the msg
+ }
+
+ // ----------------------------------------------------------------
+
+ bool
+ oscope_guts::set_update_rate(double update_rate)
+ {
+ d_update_rate = std::min(std::max (1./10., update_rate), d_sample_rate);
+ update_rate_or_decimation_changed();
+ return true;
+ }
+
+ bool
+ oscope_guts::set_decimation_count(int decimator_count)
+ {
+ decimator_count = std::max(1, decimator_count);
+ d_decimator_count_init = decimator_count;
+ update_rate_or_decimation_changed();
+ return true;
+ }
+
+ bool
+ oscope_guts::set_sample_rate(double sample_rate)
+ {
+ d_sample_rate = sample_rate;
+ return set_update_rate(update_rate());
+ }
+
+ void
+ oscope_guts::update_rate_or_decimation_changed()
+ {
+ d_hold_off_count_init =
+ (int)rint(d_sample_rate / d_update_rate / d_decimator_count_init);
+ }
+
+ bool
+ oscope_guts::set_trigger_channel(int channel)
+ {
+ if(channel >= 0 && channel < d_nchannels) {
+ d_trigger_channel = channel;
+ trigger_changed ();
+ return true;
+ }
+
+ return false;
+ }
+
+ bool
+ oscope_guts::set_trigger_mode(trigger_mode mode)
+ {
+ d_trigger_mode = mode;
+ trigger_changed();
+ return true;
+ }
+
+ bool
+ oscope_guts::set_trigger_slope(trigger_slope slope)
+ {
+ d_trigger_slope = slope;
+ trigger_changed();
+ return true;
+ }
+
+ bool
+ oscope_guts::set_trigger_level(double trigger_level)
+ {
+ d_trigger_level = trigger_level;
+ trigger_changed();
+ return true;
+ }
+
+ bool
+ oscope_guts::set_trigger_level_auto()
+ {
+ // find the level 1/2 way between the min and the max
+
+ float min_v = d_buffer[d_trigger_channel][0];
+ float max_v = d_buffer[d_trigger_channel][0];
+
+ for(int i = 1; i < OUTPUT_RECORD_SIZE; i++) {
+ min_v = std::min (min_v, d_buffer[d_trigger_channel][i]);
+ max_v = std::max (max_v, d_buffer[d_trigger_channel][i]);
+ }
+ return set_trigger_level((min_v + max_v) * 0.5);
+ }
+
+ bool
+ oscope_guts::set_num_channels(int nchannels)
+ {
+ if(nchannels > 0 && nchannels <= MAX_CHANNELS) {
+ d_nchannels = nchannels;
+ return true;
+ }
+ return false;
+ }
+
+ void
+ oscope_guts::trigger_changed()
+ {
+ enter_look_for_trigger();
+ }
+
+ // ACCESSORS
+
+ int
+ oscope_guts::num_channels() const
+ {
+ return d_nchannels;
+ }
+
+ double
+ oscope_guts::sample_rate() const
+ {
+ return d_sample_rate;
+ }
+
+ double
+ oscope_guts::update_rate() const
+ {
+ return d_update_rate;
+ }
+
+ int
+ oscope_guts::get_decimation_count() const
+ {
+ return d_decimator_count_init;
+ }
+
+ int
+ oscope_guts::get_trigger_channel() const
+ {
+ return d_trigger_channel;
+ }
+
+ trigger_mode
+ oscope_guts::get_trigger_mode() const
+ {
+ return d_trigger_mode;
+ }
+
+ trigger_slope
+ oscope_guts::get_trigger_slope() const
+ {
+ return d_trigger_slope;
+ }
+
+ double
+ oscope_guts::get_trigger_level() const
+ {
+ return d_trigger_level;
+ }
+
+ int
+ oscope_guts::get_samples_per_output_record() const
+ {
+ int mx;
+
+ mx = OUTPUT_RECORD_SIZE;
+ if(d_trigger_mode == TRIG_MODE_STRIPCHART) {
+ mx = OUTPUT_RECORD_SIZE*SCHART_MULT;
+ }
+ return mx;
+ }
+
+ } /* namespace wxgui */
+} /* namespace gr */
diff --git a/gr-wxgui/lib/oscope_sink_f_impl.cc b/gr-wxgui/lib/oscope_sink_f_impl.cc
new file mode 100644
index 0000000000..a95bf58827
--- /dev/null
+++ b/gr-wxgui/lib/oscope_sink_f_impl.cc
@@ -0,0 +1,84 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003-2005,2010,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "oscope_sink_f_impl.h"
+#include <wxgui/oscope_sink_x.h>
+#include <wxgui/oscope_guts.h>
+#include <gr_io_signature.h>
+
+namespace gr {
+ namespace wxgui {
+
+ oscope_sink_f::sptr
+ oscope_sink_f::make(double sampling_rate, gr_msg_queue_sptr msgq)
+ {
+ return gnuradio::get_initial_sptr
+ (new oscope_sink_f_impl(sampling_rate, msgq));
+ }
+
+ oscope_sink_f_impl::oscope_sink_f_impl(double sampling_rate, gr_msg_queue_sptr msgq)
+ : oscope_sink_x("oscope_sink_f",
+ gr_make_io_signature(1, oscope_guts::MAX_CHANNELS,
+ sizeof(float)),
+ sampling_rate),
+ d_msgq(msgq)
+ {
+ d_guts = new oscope_guts(d_sampling_rate, d_msgq);
+ }
+
+ oscope_sink_f_impl::~oscope_sink_f_impl()
+ {
+ }
+
+ bool
+ oscope_sink_f_impl::check_topology(int ninputs, int noutputs)
+ {
+ GR_LOG_DEBUG(d_logger, "oscopy_sink_f check_topology");
+ return d_guts->set_num_channels(ninputs);
+ }
+
+ int
+ oscope_sink_f_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ int ni = input_items.size();
+ float tmp[oscope_guts::MAX_CHANNELS];
+
+ for(int i = 0; i < noutput_items; i++) {
+
+ // FIXME for now, copy the data. Fix later if reqd
+ for(int ch = 0; ch < ni; ch++)
+ tmp[ch] = ((const float*)input_items[ch])[i];
+
+ d_guts->process_sample(tmp);
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace wxgui */
+} /* namespace gr */
diff --git a/gr-wxgui/lib/oscope_sink_f_impl.h b/gr-wxgui/lib/oscope_sink_f_impl.h
new file mode 100644
index 0000000000..6ad28a885f
--- /dev/null
+++ b/gr-wxgui/lib/oscope_sink_f_impl.h
@@ -0,0 +1,51 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003-2005,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GR_OSCOPE_SINK_F_IMPL_H
+#define INCLUDED_GR_OSCOPE_SINK_F_IMPL_H
+
+#include <wxgui/oscope_sink_f.h>
+
+namespace gr {
+ namespace wxgui {
+
+ class oscope_sink_f_impl : public oscope_sink_f
+ {
+ private:
+ gr_msg_queue_sptr d_msgq;
+
+ public:
+ oscope_sink_f_impl(double sampling_rate, gr_msg_queue_sptr msgq);
+ ~oscope_sink_f_impl();
+
+ bool check_topology(int ninputs, int noutputs);
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace wxgui */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_OSCOPE_SINK_F_IMPL_H */
+
diff --git a/gr-wxgui/lib/oscope_sink_x.cc b/gr-wxgui/lib/oscope_sink_x.cc
new file mode 100644
index 0000000000..417442979c
--- /dev/null
+++ b/gr-wxgui/lib/oscope_sink_x.cc
@@ -0,0 +1,161 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003,2004,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <wxgui/oscope_sink_x.h>
+#include <wxgui/oscope_guts.h>
+#include <gr_io_signature.h>
+
+namespace gr {
+ namespace wxgui {
+
+ oscope_sink_x::oscope_sink_x(const std::string name,
+ gr_io_signature_sptr input_sig,
+ double sampling_rate)
+ : gr_sync_block(name, input_sig,
+ gr_make_io_signature(0, 0, 0)),
+ d_sampling_rate(sampling_rate), d_guts(0)
+ {
+ }
+
+ oscope_sink_x::~oscope_sink_x()
+ {
+ delete d_guts;
+ }
+
+ // ----------------------------------------------------------------
+
+ bool
+ oscope_sink_x::set_update_rate(double update_rate)
+ {
+ return d_guts->set_update_rate(update_rate);
+ }
+
+ bool
+ oscope_sink_x::set_decimation_count(int decimation_count)
+ {
+ return d_guts->set_decimation_count(decimation_count);
+ }
+
+ bool
+ oscope_sink_x::set_trigger_channel(int channel)
+ {
+ return d_guts->set_trigger_channel(channel);
+ }
+
+ bool
+ oscope_sink_x::set_trigger_mode(trigger_mode mode)
+ {
+ return d_guts->set_trigger_mode(mode);
+ }
+
+ bool
+ oscope_sink_x::set_trigger_slope(trigger_slope slope)
+ {
+ return d_guts->set_trigger_slope(slope);
+ }
+
+ bool
+ oscope_sink_x::set_trigger_level(double trigger_level)
+ {
+ return d_guts->set_trigger_level(trigger_level);
+ }
+
+ bool
+ oscope_sink_x::set_trigger_level_auto()
+ {
+ return d_guts->set_trigger_level_auto();
+ }
+
+ bool
+ oscope_sink_x::set_sample_rate(double sample_rate)
+ {
+ return d_guts->set_sample_rate(sample_rate);
+ }
+
+ bool
+ oscope_sink_x::set_num_channels(int nchannels)
+ {
+ return d_guts->set_num_channels(nchannels);
+ }
+
+ // ACCESSORS
+
+ int
+ oscope_sink_x::num_channels() const
+ {
+ return d_guts->num_channels();
+ }
+
+ double
+ oscope_sink_x::sample_rate() const
+ {
+ return d_guts->sample_rate();
+ }
+
+ double
+ oscope_sink_x::update_rate() const
+ {
+ return d_guts->update_rate();
+ }
+
+ int
+ oscope_sink_x::get_decimation_count() const
+ {
+ return d_guts->get_decimation_count();
+ }
+
+ int
+ oscope_sink_x::get_trigger_channel() const
+ {
+ return d_guts->get_trigger_channel();
+ }
+
+ trigger_mode
+ oscope_sink_x::get_trigger_mode() const
+ {
+ return d_guts->get_trigger_mode();
+ }
+
+ trigger_slope
+ oscope_sink_x::get_trigger_slope() const
+ {
+ return d_guts->get_trigger_slope();
+ }
+
+ double
+ oscope_sink_x::get_trigger_level() const
+ {
+ return d_guts->get_trigger_level();
+ }
+
+ int
+ oscope_sink_x::get_samples_per_output_record() const
+ {
+ return d_guts->get_samples_per_output_record();
+ }
+
+ } /* namespace wxgui */
+} /* namespace gr */
diff --git a/gr-wxgui/python/__init__.py b/gr-wxgui/python/__init__.py
index 07dbaf1620..dd81647fe9 100644
--- a/gr-wxgui/python/__init__.py
+++ b/gr-wxgui/python/__init__.py
@@ -22,3 +22,5 @@
'''
Provides a GUI interface using the Wx backend.
'''
+
+from wxgui_swig import *
diff --git a/gr-wxgui/python/histosink_gl.py b/gr-wxgui/python/histosink_gl.py
index 6fa7539aa7..2126d63191 100644
--- a/gr-wxgui/python/histosink_gl.py
+++ b/gr-wxgui/python/histosink_gl.py
@@ -27,6 +27,7 @@ import common
from gnuradio import gr
from gnuradio import analog
from gnuradio import blocks
+from gnuradio import wxgui
from pubsub import pubsub
from constants import *
@@ -55,7 +56,7 @@ class histo_sink_f(gr.hier_block2, common.wxgui_hb):
)
#blocks
msgq = gr.msg_queue(2)
- histo = gr.histo_sink_f(msgq)
+ histo = wxgui.histo_sink_f(msgq)
histo.set_num_bins(num_bins)
histo.set_frame_size(frame_size)
#controller
diff --git a/gr-wxgui/python/scope_window.py b/gr-wxgui/python/scope_window.py
index 306e1757f1..357998bf95 100644
--- a/gr-wxgui/python/scope_window.py
+++ b/gr-wxgui/python/scope_window.py
@@ -30,6 +30,7 @@ import time
import pubsub
from constants import *
from gnuradio import gr #for gr.prefs, trigger modes
+from gnuradio import wxgui
import forms
##################################################
@@ -38,21 +39,21 @@ import forms
DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'scope_rate', 30)
PERSIST_ALPHA_MIN_EXP, PERSIST_ALPHA_MAX_EXP = -2, 0
SLIDER_STEPS = 100
-DEFAULT_TRIG_MODE = gr.prefs().get_long('wxgui', 'trig_mode', gr.gr_TRIG_MODE_AUTO)
+DEFAULT_TRIG_MODE = gr.prefs().get_long('wxgui', 'trig_mode', wxgui.TRIG_MODE_AUTO)
DEFAULT_WIN_SIZE = (600, 300)
COUPLING_MODES = (
('DC', False),
('AC', True),
)
TRIGGER_MODES = (
- ('Freerun', gr.gr_TRIG_MODE_FREE),
- ('Auto', gr.gr_TRIG_MODE_AUTO),
- ('Normal', gr.gr_TRIG_MODE_NORM),
- ('Stripchart', gr.gr_TRIG_MODE_STRIPCHART),
+ ('Freerun', wxgui.TRIG_MODE_FREE),
+ ('Auto', wxgui.TRIG_MODE_AUTO),
+ ('Normal', wxgui.TRIG_MODE_NORM),
+ ('Stripchart', wxgui.TRIG_MODE_STRIPCHART),
)
TRIGGER_SLOPES = (
- ('Pos +', gr.gr_TRIG_SLOPE_POS),
- ('Neg -', gr.gr_TRIG_SLOPE_NEG),
+ ('Pos +', wxgui.TRIG_SLOPE_POS),
+ ('Neg -', wxgui.TRIG_SLOPE_NEG),
)
CHANNEL_COLOR_SPECS = (
(0.3, 0.3, 1.0),
@@ -281,7 +282,7 @@ class control_panel(wx.Panel):
)
def disable_all(trigger_mode):
for widget in (trigger_slope_chooser, trigger_channel_chooser, trigger_level_buttons, trigger_level_button):
- widget.Disable(trigger_mode == gr.gr_TRIG_MODE_FREE)
+ widget.Disable(trigger_mode == wxgui.TRIG_MODE_FREE)
parent.subscribe(TRIGGER_MODE_KEY, disable_all)
disable_all(parent[TRIGGER_MODE_KEY])
##################################################
@@ -480,12 +481,12 @@ class scope_window(wx.Panel, pubsub.pubsub):
self[TRIGGER_CHANNEL_KEY] = 0
self[TRIGGER_MODE_KEY] = trig_mode
- self[TRIGGER_SLOPE_KEY] = gr.gr_TRIG_SLOPE_POS
+ self[TRIGGER_SLOPE_KEY] = wxgui.TRIG_SLOPE_POS
self[T_FRAC_OFF_KEY] = 0.5
self[USE_PERSISTENCE_KEY] = use_persistence
self[PERSIST_ALPHA_KEY] = persist_alpha
- if self[TRIGGER_MODE_KEY] == gr.gr_TRIG_MODE_STRIPCHART:
+ if self[TRIGGER_MODE_KEY] == wxgui.TRIG_MODE_STRIPCHART:
self[T_FRAC_OFF_KEY] = 0.0
for i in range(num_inputs):
@@ -639,7 +640,7 @@ class scope_window(wx.Panel, pubsub.pubsub):
if self[TRIGGER_LEVEL_KEY] < self.get_y_min():
self[TRIGGER_LEVEL_KEY] = self.get_y_min(); return
#disable the trigger channel
- if not self[TRIGGER_SHOW_KEY] or self[XY_MODE_KEY] or self[TRIGGER_MODE_KEY] == gr.gr_TRIG_MODE_FREE:
+ if not self[TRIGGER_SHOW_KEY] or self[XY_MODE_KEY] or self[TRIGGER_MODE_KEY] == wxgui.TRIG_MODE_FREE:
self.plotter.clear_waveform(channel='Trig')
else: #show trigger channel
trigger_level = self[TRIGGER_LEVEL_KEY]
diff --git a/gr-wxgui/python/scopesink_gl.py b/gr-wxgui/python/scopesink_gl.py
index 21d7169026..b2d5670c77 100644
--- a/gr-wxgui/python/scopesink_gl.py
+++ b/gr-wxgui/python/scopesink_gl.py
@@ -26,6 +26,8 @@ import scope_window
import common
from gnuradio import gr, filter
from gnuradio import blocks
+from gnuradio import analog
+from gnuradio import wxgui
from pubsub import pubsub
from constants import *
import math
@@ -101,7 +103,7 @@ class _scope_sink_base(gr.hier_block2, common.wxgui_hb):
)
#scope
msgq = gr.msg_queue(2)
- scope = gr.oscope_sink_f(sample_rate, msgq)
+ scope = wxgui.oscope_sink_f(sample_rate, msgq)
#controller
self.controller = pubsub()
self.controller.subscribe(SAMPLE_RATE_KEY, scope.set_sample_rate)
@@ -207,12 +209,13 @@ class test_top_block (stdgui2.std_top_block):
# Generate a complex sinusoid
ampl=1.0e3
- self.src0 = analog.sig_source_c(input_rate, gr.GR_SIN_WAVE,
+ self.src0 = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE,
25.1e3*input_rate/default_input_rate, ampl)
- self.noise = analog.sig_source_c (input_rate, analog.GR_SIN_WAVE,
- 11.1*25.1e3*input_rate/default_input_rate, ampl/10)
+ self.noise = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE,
+ 11.1*25.1e3*input_rate/default_input_rate,
+ ampl/10)
#self.noise = analog.noise_source_c(analog.GR_GAUSSIAN, ampl/10)
- self.combine = analog.add_cc()
+ self.combine = blocks.add_cc()
# We add this throttle block so that this demo doesn't suck down
# all the CPU available. You normally wouldn't use it...
diff --git a/gr-wxgui/python/scopesink_nongl.py b/gr-wxgui/python/scopesink_nongl.py
index 2c5ff9278a..28a473860f 100644
--- a/gr-wxgui/python/scopesink_nongl.py
+++ b/gr-wxgui/python/scopesink_nongl.py
@@ -23,6 +23,7 @@
from gnuradio import gr, gru, eng_notation
from gnuradio import analog
from gnuradio import blocks
+from gnuradio import wxgui
from gnuradio.wxgui import stdgui2
import wx
import gnuradio.wxgui.plot as plot
@@ -43,7 +44,7 @@ class scope_sink_f(gr.hier_block2):
gr.io_signature(0,0,0))
msgq = gr.msg_queue(2) # message queue that holds at most 2 messages
- self.guts = gr.oscope_sink_f(sample_rate, msgq)
+ self.guts = wxgui.oscope_sink_f(sample_rate, msgq)
for i in range(num_inputs):
self.connect((self, i), (self.guts, i))
@@ -64,7 +65,7 @@ class scope_sink_c(gr.hier_block2):
gr.io_signature(0,0,0))
msgq = gr.msg_queue(2) # message queue that holds at most 2 messages
- self.guts = gr.oscope_sink_f(sample_rate, msgq)
+ self.guts = wxgui.oscope_sink_f(sample_rate, msgq)
for i in range(num_inputs):
c2f = blocks.complex_to_float()
self.connect((self, i), c2f)
@@ -425,11 +426,11 @@ class scope_window(wx.Panel):
sink = self.info.scopesink
s = evt.GetString()
if s == 'Norm':
- sink.set_trigger_mode(gr.gr_TRIG_MODE_NORM)
+ sink.set_trigger_mode(wxgui.TRIG_MODE_NORM)
elif s == 'Auto':
- sink.set_trigger_mode(gr.gr_TRIG_MODE_AUTO)
+ sink.set_trigger_mode(wxgui.TRIG_MODE_AUTO)
elif s == 'Free':
- sink.set_trigger_mode(gr.gr_TRIG_MODE_FREE)
+ sink.set_trigger_mode(wxgui.TRIG_MODE_FREE)
else:
assert 0, "Bad trig_mode_choice string"
diff --git a/gr-wxgui/python/waterfallsink_nongl.py b/gr-wxgui/python/waterfallsink_nongl.py
index 37b8281927..bd93a84ab7 100644
--- a/gr-wxgui/python/waterfallsink_nongl.py
+++ b/gr-wxgui/python/waterfallsink_nongl.py
@@ -89,7 +89,7 @@ class waterfall_sink_f(gr.hier_block2, waterfall_sink_base):
fft_rate=fft_rate,
average=average, avg_alpha=avg_alpha, title=title)
- self.s2p = gr.serial_to_parallel(gr.sizeof_float, self.fft_size)
+ self.s2p = blocks.stream_to_vector(gr.sizeof_float, self.fft_size)
self.one_in_n = blocks.keep_one_in_n(gr.sizeof_float * self.fft_size,
max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
@@ -120,7 +120,7 @@ class waterfall_sink_c(gr.hier_block2, waterfall_sink_base):
fft_rate=fft_rate,
average=average, avg_alpha=avg_alpha, title=title)
- self.s2p = gr.serial_to_parallel(gr.sizeof_gr_complex, self.fft_size)
+ self.s2p = blocks.stream_to_vector(gr.sizeof_gr_complex, self.fft_size)
self.one_in_n = blocks.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size,
max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
diff --git a/gr-wxgui/swig/CMakeLists.txt b/gr-wxgui/swig/CMakeLists.txt
new file mode 100644
index 0000000000..16e7d65050
--- /dev/null
+++ b/gr-wxgui/swig/CMakeLists.txt
@@ -0,0 +1,57 @@
+# Copyright 2013 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}/../include
+ ${GR_WXGUI_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
+
+if(ENABLE_GR_CTRLPORT)
+ SET(GR_SWIG_FLAGS "-DGR_CTRLPORT")
+endif(ENABLE_GR_CTRLPORT)
+
+set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/wxgui_swig_doc.i)
+set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../lib)
+set(GR_SWIG_TARGET_DEPS wxgui_generated_includes)
+set(GR_SWIG_LIBRARIES gnuradio-wxgui)
+
+GR_SWIG_MAKE(wxgui_swig wxgui_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS wxgui_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui
+ COMPONENT "wxgui_python"
+)
+
+install(
+ FILES
+ wxgui_swig.i
+ ${CMAKE_CURRENT_BINARY_DIR}/wxgui_swig_doc.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "wxgui_swig"
+)
diff --git a/gnuradio-core/src/lib/io/gr_histo_sink.i b/gr-wxgui/swig/wxgui_swig.i
index 14079e1907..1151b17ee5 100644
--- a/gnuradio-core/src/lib/io/gr_histo_sink.i
+++ b/gr-wxgui/swig/wxgui_swig.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2009 Free Software Foundation, Inc.
+ * Copyright 2013 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,20 +20,24 @@
* Boston, MA 02110-1301, USA.
*/
+#define WXGUI_API
-GR_SWIG_BLOCK_MAGIC(gr,histo_sink_f)
+%include "gnuradio.i"
-gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
+//load generated python docstrings
+%include "wxgui_swig_doc.i"
-class gr_histo_sink_f : public gr_sync_block
-{
-public:
- ~gr_histo_sink_f (void);
+%include "wxgui/trigger_mode.h"
- unsigned int get_frame_size(void);
- unsigned int get_num_bins(void);
+%{
+#include "wxgui/oscope_sink_x.h"
+#include "wxgui/histo_sink_f.h"
+#include "wxgui/oscope_sink_f.h"
+%}
- void set_frame_size(unsigned int frame_size);
- void set_num_bins(unsigned int num_bins);
+%include "wxgui/oscope_sink_x.h"
+%include "wxgui/histo_sink_f.h"
+%include "wxgui/oscope_sink_f.h"
-};
+GR_SWIG_BLOCK_MAGIC2(wxgui, histo_sink_f);
+GR_SWIG_BLOCK_MAGIC2(wxgui, oscope_sink_f);
diff --git a/grc/examples/xmlrpc/xmlrpc_server.grc b/grc/examples/xmlrpc/xmlrpc_server.grc
index 7497117f28..3a133fd7c4 100644
--- a/grc/examples/xmlrpc/xmlrpc_server.grc
+++ b/grc/examples/xmlrpc/xmlrpc_server.grc
@@ -170,7 +170,7 @@
</param>
<param>
<key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>y_axis_label</key>