Hi!
You only seem to define a version of make with a char*parameter, but try to
call it without parameters. Can you try doing something like
ACK.Text_Sanitize("rubber ducky") ?
Best regards,
Marcus
Am 19. August 2015 16:38:30 MESZ, schrieb "Washbourne, Logan"
<lwas...@ostatemail.okstate.edu>:
>Hello all,
>
>I know this question has been asked before, several times, but I didn't
>find a solution that allowed me to use my OOT blocks without running
>into
>the error stated in the subject of this email.
>
>I scoured through this webpage(
>http://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModulesConfig)
>and tried adding:
>set(GR_REQUIRED_COMPONENTS RUNTIME PMT)
>
>to my top level CMakeLists.txt file, because I am using PMT objects in
>my
>block, but that didn't get rid of the error.
>
>The full error thrown is this:
>
>Executing: "/home/comm1/Logan/Thesis/top_block.py"
>
>Traceback (most recent call last):
> File "/home/comm1/Logan/Thesis/top_block.py", line 92, in <module>
> tb = top_block()
> File "/home/comm1/Logan/Thesis/top_block.py", line 65, in __init__
> self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
>AttributeError: 'module' object has no attribute 'Text_Sanitize'
>
>
>I looked on the mailing list for that last line error and it pointed me
>to
>doing what I mentioned above with the CMakeLists.txt file, but could it
>be
>an actual problem with the top_block.py file?
>
>In the addendum is all of the files I could think would be necessary
>for
>someone to look at if they chose to, if including this much text is
>frowned
>upon, please let me know.
>
>
>Addendum:
>
>Text_Sanitize_impl.cc
>*****************************************************************************
>#ifdef HAVE_CONFIG_H
>#include "config.h"
>#endif
>
>#include <gnuradio/io_signature.h>
>#include "Text_Sanitize_impl.h"
>#include <pmt/pmt.h>
>#include <stdio.h>
>#include <string>
>#include <iostream>
>#include <cstdio>
>
>namespace gr {
> namespace ACK {
>
> Text_Sanitize::sptr
> Text_Sanitize::make(char* message)
> {
> return gnuradio::get_initial_sptr
> (new Text_Sanitize_impl(message));
> }
>
> void
> Text_Sanitize_impl::print_message(pmt::pmt_t d_message)
> {
> pmt::print(d_message);
> }
>
>
>
>
> /*
> void
> Text_Sanitize_impl::forecast (int noutput_items, gr_vector_int
>&ninput_items_required)
> {
> <+forecast+> e.g. ninput_items_required[0] = noutput_items
> }
> */
> int
> Text_Sanitize_impl::general_work (int noutput_items,
> gr_vector_int &ninput_items,
> gr_vector_const_void_star &input_items,
> gr_vector_void_star &output_items)
> {
> const int *in = (int *) input_items[0];
> pmt::pmt_t *out = (pmt::pmt_t *) output_items[0];
>
>
> d_out_msg = pmt::string_to_symbol(d_message);
> //for(int i = 0; i<strlen(d_message); i++)
> //{
> // pmt::vector_set(d_out_msg,i,d_message[i]);
> //}
>
> // Do <+signal processing+>
> // Tell runtime system how many input items we consumed on
> // each input stream.
> consume_each (noutput_items);
>
> // Tell runtime system how many output items we produced.
> return noutput_items;
> }
>
> /*
> * The private constructor
> */
> Text_Sanitize_impl::Text_Sanitize_impl(char* message)
> : gr::block("Text_Sanitize",
> gr::io_signature::make(1, 1, sizeof(int)),
> gr::io_signature::make(1, 1, sizeof(pmt::pmt_t))),
> d_out_msg(pmt::string_to_symbol(std::string(""))),
> d_message(message)
> {
>
> message_port_register_out(pmt::mp("print_message"));
> set_msg_handler(pmt::mp("print"),
>boost::bind(&Text_Sanitize_impl::print_message, this, _1));
> }
>
> /*
> * Our virtual destructor.
> */
> Text_Sanitize_impl::~Text_Sanitize_impl()
> {
> }
>
>
> } /* namespace ACK */
>} /* namespace gr */
>
>*****************************************************************************
>
>Text_Sanitize_impl.h
>******************************************************************************
>#ifndef INCLUDED_ACK_TEXT_SANITIZE_IMPL_H
>#define INCLUDED_ACK_TEXT_SANITIZE_IMPL_H
>
>#include <ACK/Text_Sanitize.h>
>#include <gnuradio/block.h>
>#include <gnuradio/thread/thread.h>
>#include <pmt/pmt.h>
>
>namespace gr {
> namespace ACK {
>
> class Text_Sanitize_impl : public Text_Sanitize
> {
> private:
> // Nothing to declare in this block.
> pmt::pmt_t d_out_msg;
> char* d_message;
> void print_message(pmt::pmt_t d_message);
>
>
> public:
> Text_Sanitize_impl(char* message);
> ~Text_Sanitize_impl();
>
> // Where all the action really happens
> void forecast (int noutput_items, gr_vector_int
>&ninput_items_required);
>
> int general_work(int noutput_items,
> gr_vector_int &ninput_items,
> gr_vector_const_void_star &input_items,
> gr_vector_void_star &output_items);
> };
>
> } // namespace ACK
>} // namespace gr
>
>#endif /* INCLUDED_ACK_TEXT_SANITIZE_IMPL_H */
>
>*****************************************************************************
>
>Text_Sanitize.h
>****************************************************************************
>#ifndef INCLUDED_ACK_TEXT_SANITIZE_H
>#define INCLUDED_ACK_TEXT_SANITIZE_H
>
>#include <ACK/api.h>
>#include <gnuradio/block.h>
>
>namespace gr {
> namespace ACK {
>
> /*!
> * \brief <+description of block+>
> * \ingroup ACK
> *
> */
> class ACK_API Text_Sanitize : virtual public gr::block
> {
> public:
> typedef boost::shared_ptr<Text_Sanitize> sptr;
>
> /*!
> * \brief Return a shared_ptr to a new instance of ACK::Text_Sanitize.
> *
> * To avoid accidental use of raw pointers, ACK::Text_Sanitize's
> * constructor is in a private implementation
> * class. ACK::Text_Sanitize::make is the public interface for
> * creating new instances.
> */
> static sptr make(char* message);
> };
>
> } // namespace ACK
>} // namespace gr
>
>#endif /* INCLUDED_ACK_TEXT_SANITIZE_H */
>****************************************************************************
>
>Top Level CMakeLists.txt
>***************************************************************************
>########################################################################
># Project setup
>########################################################################
>cmake_minimum_required(VERSION 2.6)
>project(gr-ACK CXX C)
>enable_testing()
>
>#select the release build type by default to get optimization flags
>if(NOT CMAKE_BUILD_TYPE)
> set(CMAKE_BUILD_TYPE "Release")
> message(STATUS "Build type not specified: defaulting to release.")
>endif(NOT CMAKE_BUILD_TYPE)
>set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
>
>#make sure our local CMake Modules path comes first
>list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
>
>########################################################################
># Compiler specific setup
>########################################################################
>if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
> #http://gcc.gnu.org/wiki/Visibility
> add_definitions(-fvisibility=hidden)
>endif()
>
>########################################################################
># Find boost
>########################################################################
>if(UNIX AND EXISTS "/usr/lib64")
> list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
>endif(UNIX AND EXISTS "/usr/lib64")
>set(Boost_ADDITIONAL_VERSIONS
> "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38"
>"1.39.0" "1.39"
> "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43"
>"1.44.0" "1.44"
> "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48"
>"1.49.0" "1.49"
> "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53"
>"1.54.0" "1.54"
> "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58"
>"1.59.0" "1.59"
> "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63"
>"1.64.0" "1.64"
> "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68"
>"1.69.0" "1.69"
>)
>find_package(Boost "1.35" COMPONENTS filesystem system)
>
>if(NOT Boost_FOUND)
> message(FATAL_ERROR "Boost required to compile ACK")
>endif()
>
>########################################################################
># Install directories
>########################################################################
>include(GrPlatform) #define LIB_SUFFIX
>set(GR_RUNTIME_DIR bin)
>set(GR_LIBRARY_DIR lib${LIB_SUFFIX})
>set(GR_INCLUDE_DIR include/ACK)
>set(GR_DATA_DIR share)
>set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
>set(GR_DOC_DIR ${GR_DATA_DIR}/doc)
>set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
>set(GR_CONF_DIR etc)
>set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
>set(GR_LIBEXEC_DIR libexec)
>set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
>set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks)
>
>########################################################################
># On Apple only, set install name and use rpath correctly, if not
>already
>set
>########################################################################
>if(APPLE)
> if(NOT CMAKE_INSTALL_NAME_DIR)
> set(CMAKE_INSTALL_NAME_DIR
> ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
> PATH "Library Install Name Destination Directory" FORCE)
> endif(NOT CMAKE_INSTALL_NAME_DIR)
> if(NOT CMAKE_INSTALL_RPATH)
> set(CMAKE_INSTALL_RPATH
> ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
> PATH "Library Install RPath" FORCE)
> endif(NOT CMAKE_INSTALL_RPATH)
> if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
> set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE
> BOOL "Do Build Using Library Install RPath" FORCE)
> endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
>endif(APPLE)
>
>########################################################################
># Find gnuradio build dependencies
>########################################################################
>find_package(CppUnit)
>find_package(Doxygen)
>
># Search for GNU Radio and its components and versions. Add any
># components required to the list of GR_REQUIRED_COMPONENTS (in all
># caps such as FILTER or FFT) and change the version to the minimum
># API compatible version required.
>set(GR_REQUIRED_COMPONENTS RUNTIME PMT STRING)
>find_package(Gnuradio "3.7.2" REQUIRED)
>
>if(NOT CPPUNIT_FOUND)
> message(FATAL_ERROR "CppUnit required to compile ACK")
>endif()
>
>########################################################################
># Setup doxygen option
>########################################################################
>if(DOXYGEN_FOUND)
> option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
>else(DOXYGEN_FOUND)
> option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
>endif(DOXYGEN_FOUND)
>
>########################################################################
># Setup the include and linker paths
>########################################################################
>include_directories(
> ${CMAKE_SOURCE_DIR}/lib
> ${CMAKE_SOURCE_DIR}/include
> ${CMAKE_BINARY_DIR}/lib
> ${CMAKE_BINARY_DIR}/include
> ${Boost_INCLUDE_DIRS}
> ${CPPUNIT_INCLUDE_DIRS}
> ${GNURADIO_RUNTIME_INCLUDE_DIRS}
> ${GNURADIO_ALL_INCLUDE_DIRS}
>)
>
>link_directories(
> ${Boost_LIBRARY_DIRS}
> ${CPPUNIT_LIBRARY_DIRS}
> ${GNURADIO_RUNTIME_LIBRARY_DIRS}
>)
>
># Set component parameters
>set(GR_ACK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE
>INTERNAL
>"" FORCE)
>set(GR_ACK_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE
>INTERNAL "" FORCE)
>
>########################################################################
># Create uninstall target
>########################################################################
>configure_file(
> ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
> ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
>@ONLY)
>
>add_custom_target(uninstall
> ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
>)
>
>########################################################################
># Add subdirectories
>########################################################################
>add_subdirectory(include/ACK)
>add_subdirectory(lib)
>add_subdirectory(swig)
>add_subdirectory(python)
>add_subdirectory(grc)
>add_subdirectory(apps)
>add_subdirectory(docs)
>
>########################################################################
># Install cmake search helper for this library
>########################################################################
>if(NOT CMAKE_MODULES_DIR)
> set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
>endif(NOT CMAKE_MODULES_DIR)
>
>install(FILES cmake/Modules/ACKConfig.cmake
> DESTINATION ${CMAKE_MODULES_DIR}/ACK
>)
>***************************************************************************
>
>top_block.py
>***************************************************************************
>#!/usr/bin/env python2
>##################################################
># GNU Radio Python Flow Graph
># Title: Top Block
># Generated: Tue Aug 18 11:02:34 2015
>##################################################
>
>if __name__ == '__main__':
> import ctypes
> import sys
> if sys.platform.startswith('linux'):
> try:
> x11 = ctypes.cdll.LoadLibrary('libX11.so')
> x11.XInitThreads()
> except:
> print "Warning: failed to XInitThreads()"
>
>from PyQt4 import Qt
>from gnuradio import analog
>from gnuradio import blocks
>from gnuradio import eng_notation
>from gnuradio import gr
>from gnuradio.eng_option import eng_option
>from gnuradio.filter import firdes
>from optparse import OptionParser
>import ACK
>import sys
>
>
>class top_block(gr.top_block, Qt.QWidget):
>
> def __init__(self):
> gr.top_block.__init__(self, "Top Block")
> Qt.QWidget.__init__(self)
> self.setWindowTitle("Top Block")
> try:
> self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
> except:
> pass
> self.top_scroll_layout = Qt.QVBoxLayout()
> self.setLayout(self.top_scroll_layout)
> self.top_scroll = Qt.QScrollArea()
> self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
> self.top_scroll_layout.addWidget(self.top_scroll)
> self.top_scroll.setWidgetResizable(True)
> self.top_widget = Qt.QWidget()
> self.top_scroll.setWidget(self.top_widget)
> self.top_layout = Qt.QVBoxLayout(self.top_widget)
> self.top_grid_layout = Qt.QGridLayout()
> self.top_layout.addLayout(self.top_grid_layout)
>
> self.settings = Qt.QSettings("GNU Radio", "top_block")
> self.restoreGeometry(self.settings.value("geometry").toByteArray())
>
> ##################################################
> # Variables
> ##################################################
> self.samp_rate = samp_rate = 32000
>
> ##################################################
> # Blocks
> ##################################################
> self.blocks_message_debug_0 = blocks.message_debug()
> self.analog_const_source_x_0 = analog.sig_source_i(0,
>analog.GR_CONST_WAVE, 0, 0, 2)
> self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
>
> ##################################################
> # Connections
> ##################################################
> self.msg_connect((self.ACK_Text_Sanitize_0, 'out'),
>(self.blocks_message_debug_0, 'print'))
> self.connect((self.analog_const_source_x_0, 0),
>(self.ACK_Text_Sanitize_0, 0))
>
> def closeEvent(self, event):
> self.settings = Qt.QSettings("GNU Radio", "top_block")
> self.settings.setValue("geometry", self.saveGeometry())
> event.accept()
>
> def get_samp_rate(self):
> return self.samp_rate
>
> def set_samp_rate(self, samp_rate):
> self.samp_rate = samp_rate
>
>
>if __name__ == '__main__':
>parser = OptionParser(option_class=eng_option, usage="%prog:
>[options]")
> (options, args) = parser.parse_args()
> from distutils.version import StrictVersion
> if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
>
>Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
> qapp = Qt.QApplication(sys.argv)
> tb = top_block()
> tb.start()
> tb.show()
>
> def quitting():
> tb.stop()
> tb.wait()
> qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
> qapp.exec_()
> tb = None # to clean up Qt widgets
>***************************************************************************
>
>Logan Washbourne
>Electrical Engineering Graduate Student
>(Electromagnetics)
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Discuss-gnuradio mailing list
>Discuss-gnuradio@gnu.org
>https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio