diff options
Diffstat (limited to 'gnuradio-core/src/lib')
242 files changed, 0 insertions, 28831 deletions
diff --git a/gnuradio-core/src/lib/CMakeLists.txt b/gnuradio-core/src/lib/CMakeLists.txt deleted file mode 100644 index c72be94db5..0000000000 --- a/gnuradio-core/src/lib/CMakeLists.txt +++ /dev/null @@ -1,163 +0,0 @@ -# Copyright 2010-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. - -######################################################################## -# Setup compatibility checks and defines -######################################################################## -include(${CMAKE_CURRENT_SOURCE_DIR}/ConfigChecks.cmake) - -######################################################################## -# Include subdirs rather to populate to the sources lists. -######################################################################## -GR_INCLUDE_SUBDIRECTORY(missing) -GR_INCLUDE_SUBDIRECTORY(runtime) -GR_INCLUDE_SUBDIRECTORY(general) - -list(APPEND gnuradio_core_sources bug_work_around_6.cc) -list(APPEND test_gnuradio_core_sources bug_work_around_6.cc) - -######################################################################## -# Set up Windows DLL resource files -######################################################################## - -IF(MSVC) - include(${CMAKE_SOURCE_DIR}/cmake/Modules/GrVersion.cmake) - - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-core.rc.in - ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-core.rc - @ONLY) - - list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-core.rc) -ENDIF(MSVC) - -######################################################################## -# Setup the include and linker paths -######################################################################## -include_directories( - ${GNURADIO_CORE_INCLUDE_DIRS} - ${VOLK_INCLUDE_DIRS} - ${GRUEL_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} - ${FFTW3F_INCLUDE_DIRS} -) - -link_directories( - ${Boost_LIBRARY_DIRS} - ${FFTW3F_LIBRARY_DIRS} -) - -include_directories(${LOG4CPP_INCLUDE_DIRS}) -link_directories(${LOG4CPP_LIBRARY_DIRS}) - -######################################################################## -# Setup library -######################################################################## - -# Only use if log4cpp is installed -# Define ENABLE_GR_LOG so .h and .cc files can turn actual -# logging and insert dummy functions. -#if(LOG4CPP_FOUND) -# add_definitions(-DENABLE_GR_LOG) -#endif(LOG4CPP_FOUND) - -list(APPEND gnuradio_core_libs - gruel - ${Boost_LIBRARIES} - ${FFTW3F_LIBRARIES} - ${LOG4CPP_LIBRARIES} -) - -if(FFTW3F_THREADS_LIBRARIES) - list(APPEND gnuradio_core_libs ${FFTW3F_THREADS_LIBRARIES} ) - add_definitions("-DFFTW3F_THREADS") -endif() - -#need to link with librt on ubuntu 11.10 for shm_* -if(LINUX) - list(APPEND gnuradio_core_libs rt) -endif() - -# Link against libvolk -list(APPEND gnuradio_core_libs volk) - -if(ENABLE_GR_CTRLPORT) - -######################################################################## -# Run ICE To compile Slice files -######################################################################## -EXECUTE_PROCESS( - COMMAND "${ICE_SLICE2CPP}" "-I${CMAKE_CURRENT_SOURCE_DIR}/runtime" - "--output-dir=${CMAKE_CURRENT_BINARY_DIR}" - "${CMAKE_CURRENT_SOURCE_DIR}/runtime/gnuradio.ice" - ) - -# Append generated file in build directory -list(APPEND gnuradio_core_generated_sources - ${CMAKE_CURRENT_BINARY_DIR}/gnuradio.cpp -) - -list(APPEND gnuradio_core_generated_includes - ${CMAKE_CURRENT_BINARY_DIR}/gnuradio.h -) - -######################################################################## -# Add controlport stuff to gnuradio-core -######################################################################## - -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -list(APPEND gnuradio_core_libs - ${ICE_LIBRARIES} -) - -endif(ENABLE_GR_CTRLPORT) - -add_library(gnuradio-core SHARED ${gnuradio_core_sources} ${gnuradio_core_generated_sources}) -target_link_libraries(gnuradio-core ${gnuradio_core_libs}) -GR_LIBRARY_FOO(gnuradio-core RUNTIME_COMPONENT "core_runtime" DEVEL_COMPONENT "core_devel") -set_target_properties(gnuradio-core PROPERTIES LINK_INTERFACE_LIBRARIES "gruel") -ADD_DEPENDENCIES(gnuradio-core - gnuradio_core_generated_sources - gnuradio_core_generated_includes - gnuradio_core_generated_swigs) - -######################################################################## -# Setup executables -######################################################################## -add_executable(gnuradio-config-info gnuradio-config-info.cc) -target_link_libraries(gnuradio-config-info gnuradio-core ${Boost_LIBRARIES}) -install( - TARGETS gnuradio-config-info - DESTINATION ${GR_RUNTIME_DIR} - COMPONENT "core_runtime" -) - -######################################################################## -# Setup tests -######################################################################## -if(ENABLE_TESTING) - -include_directories(${CPPUNIT_INCLUDE_DIRS}) -link_directories(${CPPUNIT_LIBRARY_DIRS}) - -add_library(test-gnuradio-core SHARED ${test_gnuradio_core_sources}) -target_link_libraries(test-gnuradio-core gnuradio-core ${CPPUNIT_LIBRARIES} ${Boost_LIBRARIES} ${LOG4CPP_LIBRARIES}) - -endif(ENABLE_TESTING) diff --git a/gnuradio-core/src/lib/ConfigChecks.cmake b/gnuradio-core/src/lib/ConfigChecks.cmake deleted file mode 100644 index 26b778a7a7..0000000000 --- a/gnuradio-core/src/lib/ConfigChecks.cmake +++ /dev/null @@ -1,212 +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. - -######################################################################## -INCLUDE(GrMiscUtils) -INCLUDE(CheckCXXSourceCompiles) - -IF(MSVC) #add this directory for our provided headers -LIST(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_SOURCE_DIR}/msvc) -ENDIF(MSVC) - -GR_CHECK_HDR_N_DEF(netdb.h HAVE_NETDB_H) -GR_CHECK_HDR_N_DEF(sys/time.h HAVE_SYS_TIME_H) -GR_CHECK_HDR_N_DEF(sys/types.h HAVE_SYS_TYPES_H) -GR_CHECK_HDR_N_DEF(sys/select.h HAVE_SYS_SELECT_H) -GR_CHECK_HDR_N_DEF(sys/socket.h HAVE_SYS_SOCKET_H) -GR_CHECK_HDR_N_DEF(io.h HAVE_IO_H) -GR_CHECK_HDR_N_DEF(sys/mman.h HAVE_SYS_MMAN_H) -GR_CHECK_HDR_N_DEF(sys/ipc.h HAVE_SYS_IPC_H) -GR_CHECK_HDR_N_DEF(sys/shm.h HAVE_SYS_SHM_H) -GR_CHECK_HDR_N_DEF(signal.h HAVE_SIGNAL_H) -GR_CHECK_HDR_N_DEF(netinet/in.h HAVE_NETINET_IN_H) -GR_CHECK_HDR_N_DEF(arpa/inet.h HAVE_ARPA_INET_H) -GR_CHECK_HDR_N_DEF(byteswap.h HAVE_BYTESWAP_H) -GR_CHECK_HDR_N_DEF(linux/ppdev.h HAVE_LINUX_PPDEV_H) -GR_CHECK_HDR_N_DEF(dev/ppbus/ppi.h HAVE_DEV_PPBUS_PPI_H) -GR_CHECK_HDR_N_DEF(unistd.h HAVE_UNISTD_H) -GR_CHECK_HDR_N_DEF(malloc.h HAVE_MALLOC_H) - - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <stdio.h> - int main(){snprintf(0, 0, 0); return 0;} - " HAVE_SNPRINTF -) -GR_ADD_COND_DEF(HAVE_SNPRINTF) - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <signal.h> - int main(){sigaction(0, 0, 0); return 0;} - " HAVE_SIGACTION -) -GR_ADD_COND_DEF(HAVE_SIGACTION) - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <sys/select.h> - int main(){select(0, 0, 0, 0, 0); return 0;} - " HAVE_SELECT -) -GR_ADD_COND_DEF(HAVE_SELECT) - - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <unistd.h> - int main(){sysconf(0); return 0;} - " HAVE_SYSCONF -) -GR_ADD_COND_DEF(HAVE_SYSCONF) - -CHECK_CXX_SOURCE_COMPILES(" - #include <unistd.h> - int main(){getpagesize(); return 0;} - " HAVE_GETPAGESIZE -) -GR_ADD_COND_DEF(HAVE_GETPAGESIZE) - - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <Winbase.h> - int main(){Sleep(0); return 0;} - " HAVE_SSLEEP -) -GR_ADD_COND_DEF(HAVE_SSLEEP) - -CHECK_CXX_SOURCE_COMPILES(" - #include <time.h> - int main(){nanosleep(0, 0); return 0;} - " HAVE_NANOSLEEP -) -GR_ADD_COND_DEF(HAVE_NANOSLEEP) - -CHECK_CXX_SOURCE_COMPILES(" - #include <sys/time.h> - int main(){gettimeofday(0, 0); return 0;} - " HAVE_GETTIMEOFDAY -) -GR_ADD_COND_DEF(HAVE_GETTIMEOFDAY) - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <stdlib.h> - int main(){posix_memalign(0, 0, 0); return 0;} - " HAVE_POSIX_MEMALIGN -) -GR_ADD_COND_DEF(HAVE_POSIX_MEMALIGN) - -CHECK_CXX_SOURCE_COMPILES(" - #include <malloc.h> - int main(){valloc(0); return 0;} - " HAVE_VALLOC -) -GR_ADD_COND_DEF(HAVE_VALLOC) - -ADD_DEFINITIONS(-DALIGNED_MALLOC=0) - -######################################################################## -SET(CMAKE_REQUIRED_LIBRARIES -lpthread) -CHECK_CXX_SOURCE_COMPILES(" - #include <signal.h> - int main(){pthread_sigmask(0, 0, 0); return 0;} - " HAVE_PTHREAD_SIGMASK -) -GR_ADD_COND_DEF(HAVE_PTHREAD_SIGMASK) -SET(CMAKE_REQUIRED_LIBRARIES) - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <windows.h> - int main(){ - HANDLE handle; - int size; - LPCTSTR lpName; - handle = CreateFileMapping( - INVALID_HANDLE_VALUE, // use paging file - NULL, // default security - PAGE_READWRITE, // read/write access - 0, // max. object size - size, // buffer size - lpName); // name of mapping object - return 0; - } " HAVE_CREATEFILEMAPPING -) -GR_ADD_COND_DEF(HAVE_CREATEFILEMAPPING) - -######################################################################## -CHECK_INCLUDE_FILE_CXX(windows.h HAVE_WINDOWS_H) -IF(HAVE_WINDOWS_H) - ADD_DEFINITIONS(-DHAVE_WINDOWS_H -DUSING_WINSOCK) - MESSAGE(STATUS "Adding windows libs to gnuradio core libs...") - LIST(APPEND gnuradio_core_libs WS2_32.lib WSock32.lib) -ENDIF(HAVE_WINDOWS_H) - -######################################################################## -SET(CMAKE_REQUIRED_LIBRARIES -lrt) -CHECK_CXX_SOURCE_COMPILES(" - #include <sys/types.h> - #include <sys/mman.h> - int main(){shm_open(0, 0, 0); return 0;} - " HAVE_SHM_OPEN -) -GR_ADD_COND_DEF(HAVE_SHM_OPEN) -SET(CMAKE_REQUIRED_LIBRARIES) - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #define _GNU_SOURCE - #include <math.h> - int main(){double x, sin, cos; sincos(x, &sin, &cos); return 0;} - " HAVE_SINCOS -) -GR_ADD_COND_DEF(HAVE_SINCOS) - -CHECK_CXX_SOURCE_COMPILES(" - #define _GNU_SOURCE - #include <math.h> - int main(){float x, sin, cos; sincosf(x, &sin, &cos); return 0;} - " HAVE_SINCOSF -) -GR_ADD_COND_DEF(HAVE_SINCOSF) - -CHECK_CXX_SOURCE_COMPILES(" - #include <math.h> - int main(){sinf(0); return 0;} - " HAVE_SINF -) -GR_ADD_COND_DEF(HAVE_SINF) - -CHECK_CXX_SOURCE_COMPILES(" - #include <math.h> - int main(){cosf(0); return 0;} - " HAVE_COSF -) -GR_ADD_COND_DEF(HAVE_COSF) - -######################################################################## -CHECK_CXX_SOURCE_COMPILES(" - #include <sys/mman.h> - int main(){mmap(0, 0, 0, 0, 0, 0); return 0;} - " HAVE_MMAP -) -GR_ADD_COND_DEF(HAVE_MMAP) diff --git a/gnuradio-core/src/lib/bug_work_around_6.cc b/gnuradio-core/src/lib/bug_work_around_6.cc deleted file mode 100644 index f8012af0dc..0000000000 --- a/gnuradio-core/src/lib/bug_work_around_6.cc +++ /dev/null @@ -1,3 +0,0 @@ -// if libgrio has no sources, it doesn't get built correctly -#include <gruel/attributes.h> -static int gr_bug_work_around_6 __GR_ATTR_UNUSED; diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt deleted file mode 100644 index d85039fe60..0000000000 --- a/gnuradio-core/src/lib/general/CMakeLists.txt +++ /dev/null @@ -1,159 +0,0 @@ -# Copyright 2010-2012 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 -######################################################################## - -######################################################################## -# Handle the generated sine table -######################################################################## -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sine_table.h - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gen_sine_table.py - COMMAND ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/gen_sine_table.py > - ${CMAKE_CURRENT_BINARY_DIR}/sine_table.h -) - -include(AddFileDependencies) -ADD_FILE_DEPENDENCIES(${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt.cc - ${CMAKE_CURRENT_BINARY_DIR}/sine_table.h -) - -add_custom_target(general_generated DEPENDS - ${CMAKE_CURRENT_BINARY_DIR}/sine_table.h -) - -######################################################################## -# Handle the generated constants -######################################################################## -execute_process(COMMAND ${PYTHON_EXECUTABLE} -c - "import time;print time.strftime('%a, %d %b %Y %H:%M:%S', time.gmtime())" - OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE -) -message(STATUS "Loading build date ${BUILD_DATE} into gr_constants...") - -message(STATUS "Loading version ${VERSION} into gr_constants...") - -#double escape for windows backslash path separators -string(REPLACE "\\" "\\\\" prefix ${prefix}) -string(REPLACE "\\" "\\\\" SYSCONFDIR ${SYSCONFDIR}) -string(REPLACE "\\" "\\\\" GR_PREFSDIR ${GR_PREFSDIR}) - -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/gr_constants.cc.in - ${CMAKE_CURRENT_BINARY_DIR}/gr_constants.cc -@ONLY) - -list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_BINARY_DIR}/gr_constants.cc) - -######################################################################## -# Append gnuradio-core library sources -######################################################################## -list(APPEND gnuradio_core_sources - ${CMAKE_CURRENT_SOURCE_DIR}/gr_circular_file.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_fast_atan2f.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_misc.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_random.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_reverse.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sincos.c - ${CMAKE_CURRENT_SOURCE_DIR}/gri_debugger_hook.cc - ${CMAKE_CURRENT_SOURCE_DIR}/malloc16.c -) - -######################################################################## -# Append gnuradio-core test sources -######################################################################## -list(APPEND test_gnuradio_core_sources - ${CMAKE_CURRENT_SOURCE_DIR}/qa_general.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_circular_file.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fxpt.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fxpt_nco.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fxpt_vco.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_math.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_sincos.cc -) - -######################################################################## -# Install runtime headers -######################################################################## -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/gr_core_api.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_circular_file.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_constants.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_endianness.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_expj.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt_nco.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt_vco.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_math.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_misc.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_nco.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_random.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_reverse.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sincos.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_test_types.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_vco.h - ${CMAKE_CURRENT_SOURCE_DIR}/gri_debugger_hook.h - ${CMAKE_CURRENT_SOURCE_DIR}/malloc16.h - ${CMAKE_CURRENT_SOURCE_DIR}/random.h - DESTINATION ${GR_INCLUDE_DIR}/gnuradio - COMPONENT "core_devel" -) - -######################################################################## -# Install swig headers -######################################################################## -if(ENABLE_PYTHON) -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/general.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_constants.i - DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig - COMPONENT "core_swig" -) -endif(ENABLE_PYTHON) - -######################################################################## -# Handle triple-threat files that have cc, h, and i -######################################################################## -set(gr_core_general_triple_threats - complex_vec_test - gr_block_gateway - gr_feval - gr_prefs - gr_test -) - -foreach(file_tt ${gr_core_general_triple_threats}) - list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.cc) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.h DESTINATION ${GR_INCLUDE_DIR}/gnuradio COMPONENT "core_devel") - if(ENABLE_PYTHON) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.i DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig COMPONENT "core_swig") - endif(ENABLE_PYTHON) -endforeach(file_tt ${gr_core_general_triple_threats}) - -CHECK_CXX_SOURCE_COMPILES(" - #define _GNU_SOURCE - #include <math.h> - int main(){double x, sin, cos; sincos(x, &sin, &cos); return 0;} - " HAVE_SINCOS -) -GR_ADD_COND_DEF(HAVE_SINCOS) diff --git a/gnuradio-core/src/lib/general/atsc_rrc1x.dat b/gnuradio-core/src/lib/general/atsc_rrc1x.dat deleted file mode 100644 index 3dc87bb0b7..0000000000 --- a/gnuradio-core/src/lib/general/atsc_rrc1x.dat +++ /dev/null @@ -1,57 +0,0 @@ -/* - * FILTER SPECIFICATION FILE - * FILTER TYPE:ROOT RAISED COSINE 12H - * PASSBAND RIPPLE IN -dB -.0500 - * STOPBAND RIPPLE IN -dB -50.0000 - * SYMBOL RATE .538112E+07 HERTZ - * ROLLOF FACTOR .115200 - * SAMPLING FREQUENCY .107622E+08 HERTZ - * SAMPLING FREQUENCY .107622E+08 HERTZ - */ - .1821269281208515e-02, - -.9323525242507458e-02, - -.8581001311540604e-02, - .2809949219226837e-02, - .9649330750107765e-03, - -.4944681189954281e-02, - .1624439377337694e-02, - .6519509013742209e-02, - -.4803944379091263e-02, - -.8026130497455597e-02, - .8922342676669359e-02, - .9611152112483978e-02, - -.1463735569268465e-01, - -.1107082655653358e-01, - .2262782817706466e-01, - .1240625558421016e-01, - -.3461387194693089e-01, - -.1348070800304413e-01, - .5474480940029025e-01, - .1432673400267959e-01, - -.9872047463431954e-01, - -.1482593175023794e-01, - .3077511447481811e+00, - .5007477863691747e+00, - .3077511447481811e+00, - -.1482593175023794e-01, - -.9872047463431954e-01, - .1432673400267959e-01, - .5474480940029025e-01, - -.1348070800304413e-01, - -.3461387194693089e-01, - .1240625558421016e-01, - .2262782817706466e-01, - -.1107082655653358e-01, - -.1463735569268465e-01, - .9611152112483978e-02, - .8922342676669359e-02, - -.8026130497455597e-02, - -.4803944379091263e-02, - .6519509013742209e-02, - .1624439377337694e-02, - -.4944681189954281e-02, - .9649330750107765e-03, - .2809949219226837e-02, - -.8581001311540604e-02, - -.9323525242507458e-02, - .1821269281208515e-02 diff --git a/gnuradio-core/src/lib/general/atsc_rrc20.dat b/gnuradio-core/src/lib/general/atsc_rrc20.dat deleted file mode 100644 index 94445e96ec..0000000000 --- a/gnuradio-core/src/lib/general/atsc_rrc20.dat +++ /dev/null @@ -1,101 +0,0 @@ - -.1141865178942680e-01, - .2192483097314835e-01, - -.6814673542976379e-04, - -.5894266534596682e-02, - -.3580642864108086e-02, - .7064016535878182e-03, - .3225978463888168e-02, - .2832664176821709e-02, - .4997388459742069e-03, - -.1796286087483168e-02, - -.2396093215793371e-02, - -.1009003724902868e-02, - .1184449531137943e-02, - .2406611572951078e-02, - .1609810627996922e-02, - -.6790305487811565e-03, - -.2634476870298386e-02, - -.2524725627154112e-02, - -.1492514275014401e-03, - .2789965830743313e-02, - .3848167601972818e-02, - .1755146309733391e-02, - -.2288600429892540e-02, - -.5209952127188444e-02, - -.4314901307225227e-02, - .3885449841618538e-03, - .5747230723500252e-02, - .7460035849362612e-02, - .3387423232197762e-02, - -.4307936877012253e-02, - -.1007711654528976e-01, - -.8849395904690027e-02, - -.1979861408472061e-03, - .1040456583723426e-01, - .1484309835359454e-01, - .8285604882985354e-02, - -.6346960552036762e-02, - -.1915087224915624e-01, - -.1949162455275655e-01, - -.4145141225308180e-02, - .1850909460335970e-01, - .3220130456611514e-01, - .2337836893275380e-01, - -.7863232865929604e-02, - -.4402747144922614e-01, - -.5751598253846169e-01, - -.2598480274900794e-01, - .5246857088059187e-01, - .1544690094888210e+00, - .2405302016995847e+00, - .2741314689628780e+00, - .2405302016995847e+00, - .1544690094888210e+00, - .5246857088059187e-01, - -.2598480274900794e-01, - -.5751598253846169e-01, - -.4402747144922614e-01, - -.7863232865929604e-02, - .2337836893275380e-01, - .3220130456611514e-01, - .1850909460335970e-01, - -.4145141225308180e-02, - -.1949162455275655e-01, - -.1915087224915624e-01, - -.6346960552036762e-02, - .8285604882985354e-02, - .1484309835359454e-01, - .1040456583723426e-01, - -.1979861408472061e-03, - -.8849395904690027e-02, - -.1007711654528976e-01, - -.4307936877012253e-02, - .3387423232197762e-02, - .7460035849362612e-02, - .5747230723500252e-02, - .3885449841618538e-03, - -.4314901307225227e-02, - -.5209952127188444e-02, - -.2288600429892540e-02, - .1755146309733391e-02, - .3848167601972818e-02, - .2789965830743313e-02, - -.1492514275014401e-03, - -.2524725627154112e-02, - -.2634476870298386e-02, - -.6790305487811565e-03, - .1609810627996922e-02, - .2406611572951078e-02, - .1184449531137943e-02, - -.1009003724902868e-02, - -.2396093215793371e-02, - -.1796286087483168e-02, - .4997388459742069e-03, - .2832664176821709e-02, - .3225978463888168e-02, - .7064016535878182e-03, - -.3580642864108086e-02, - -.5894266534596682e-02, - -.6814673542976379e-04, - .2192483097314835e-01, - -.1141865178942680e-01 diff --git a/gnuradio-core/src/lib/general/atsc_rrc2x.dat b/gnuradio-core/src/lib/general/atsc_rrc2x.dat deleted file mode 100644 index 8eae94d773..0000000000 --- a/gnuradio-core/src/lib/general/atsc_rrc2x.dat +++ /dev/null @@ -1,102 +0,0 @@ -/* - * FILTER SPECIFICATION FILE - * FILTER TYPE:ROOT RAISED COSINE 12H - * PASSBAND RIPPLE IN -dB -.0500 - * STOPBAND RIPPLE IN -dB -50.0000 - * SYMBOL RATE .538112E+07 HERTZ - * ROLLOF FACTOR .115200 - * SAMPLING FREQUENCY .215245E+08 HERTZ -*/ - .8186036720871925E-03, - -.1256920862942934E-02, - -.4844595678150654E-02, - -.6055080797523260E-02, - -.4247304052114487E-02, - -.9502284228801727E-03, - .1615938264876604E-02, - .2120061777532101E-02, - .6354246288537979E-03, - -.1464351080358028E-02, - -.2508673351258040E-02, - -.1573510002344847E-02, - .8145328611135483E-03, - .2996938303112984E-02, - .3244197461754084E-02, - .1038576476275921E-02, - -.2401810139417648E-02, - -.4728596191853285E-02, - -.4019895102828741E-02, - -.2215979620814323E-03, - .4481043666601181E-02, - .6867439020425081E-02, - .4793671425431967E-02, - -.1089230179786682E-02, - -.7325290236622095E-02, - -.9580074809491634E-02, - -.5532339215278626E-02, - .3166179172694683E-02, - .1132524851709604E-01, - .1316944882273674E-01, - .6192639470100403E-02, - -.6509334780275822E-02, - -.1730504119768739E-01, - -.1832502009347081E-01, - -.6741075310856104E-02, - .1229691226035357E-01, - .2738198731094599E-01, - .2702147699892521E-01, - .7156732492148876E-02, - -.2432488137856126E-01, - -.4934547096490860E-01, - -.4763523396104574E-01, - -.7410581223666668E-02, - .6681889295578003E-01, - .1538293845951557E+00, - .2236228249967098E+00, - .2502835178747773E+00, - .2236228249967098E+00, - .1538293845951557E+00, - .6681889295578003E-01, - -.7410581223666668E-02, - -.4763523396104574E-01, - -.4934547096490860E-01, - -.2432488137856126E-01, - .7156732492148876E-02, - .2702147699892521E-01, - .2738198731094599E-01, - .1229691226035357E-01, - -.6741075310856104E-02, - -.1832502009347081E-01, - -.1730504119768739E-01, - -.6509334780275822E-02, - .6192639470100403E-02, - .1316944882273674E-01, - .1132524851709604E-01, - .3166179172694683E-02, - -.5532339215278626E-02, - -.9580074809491634E-02, - -.7325290236622095E-02, - -.1089230179786682E-02, - .4793671425431967E-02, - .6867439020425081E-02, - .4481043666601181E-02, - -.2215979620814323E-03, - -.4019895102828741E-02, - -.4728596191853285E-02, - -.2401810139417648E-02, - .1038576476275921E-02, - .3244197461754084E-02, - .2996938303112984E-02, - .8145328611135483E-03, - -.1573510002344847E-02, - -.2508673351258040E-02, - -.1464351080358028E-02, - .6354246288537979E-03, - .2120061777532101E-02, - .1615938264876604E-02, - -.9502284228801727E-03, - -.4247304052114487E-02, - -.6055080797523260E-02, - -.4844595678150654E-02, - -.1256920862942934E-02, - .8186036720871925E-03 diff --git a/gnuradio-core/src/lib/general/complex_vec_test.cc b/gnuradio-core/src/lib/general/complex_vec_test.cc deleted file mode 100644 index 99acc2f355..0000000000 --- a/gnuradio-core/src/lib/general/complex_vec_test.cc +++ /dev/null @@ -1,82 +0,0 @@ -#include <complex_vec_test.h> -#include <stddef.h> - -std::vector<std::complex<float> > -complex_vec_test0() -{ - std::vector<std::complex<float> > r(5); - - for (size_t i = 0; i < r.size(); i++) - r[i] = std::complex<float>(i, i); - - return r; -} - -std::vector<std::complex<float> > -complex_vec_test1(const std::vector<std::complex<float> > &input) -{ - std::vector<std::complex<float> > r(input.size()); - - for (size_t i = 0; i < input.size(); i++) - r[i] = std::complex<float>(input[i].real()+0.5, input[i].imag()-0.5); - - return r; -} - -std::complex<float> -complex_scalar_test0() -{ - return std::complex<float>(5, 5); -} - -std::complex<float> -complex_scalar_test1(std::complex<float> input) -{ - return std::complex<float>(input.real()+0.5, input.imag()-0.5); -} - - -std::vector<float> -float_vec_test0() -{ - std::vector<float> r(5); - - for (size_t i = 0; i < r.size(); i++) - r[i] = (float) i; - - return r; -} - -std::vector<float> -float_vec_test1(const std::vector<float> &input) -{ - std::vector<float> r(input.size()); - - for (size_t i = 0; i < input.size(); i++) - r[i] = input[i] + 0.5; - - return r; -} - -std::vector<int> -int_vec_test0() -{ - std::vector<int> r(5); - - for (size_t i = 0; i < r.size(); i++) - r[i] = (int) i; - - return r; -} - -std::vector<int> -int_vec_test1(const std::vector<int> &input) -{ - std::vector<int> r(input.size()); - - for (size_t i = 0; i < input.size(); i++) - r[i] = input[i] + 1; - - return r; -} - diff --git a/gnuradio-core/src/lib/general/complex_vec_test.h b/gnuradio-core/src/lib/general/complex_vec_test.h deleted file mode 100644 index be4de41fb0..0000000000 --- a/gnuradio-core/src/lib/general/complex_vec_test.h +++ /dev/null @@ -1,28 +0,0 @@ -#include <gr_core_api.h> -#include <vector> -#include <complex> - -GR_CORE_API std::vector<std::complex<float> > -complex_vec_test0(); - -GR_CORE_API std::vector<std::complex<float> > -complex_vec_test1(const std::vector<std::complex<float> > &input); - -GR_CORE_API std::complex<float> -complex_scalar_test0(); - -GR_CORE_API std::complex<float> -complex_scalar_test1(std::complex<float> input); - -GR_CORE_API std::vector<int> -int_vec_test0(); - -GR_CORE_API std::vector<int> -int_vec_test1(const std::vector<int> &input); - -GR_CORE_API std::vector<float> -float_vec_test0(); - -GR_CORE_API std::vector<float> -float_vec_test1(const std::vector<float> &input); - diff --git a/gnuradio-core/src/lib/general/complex_vec_test.i b/gnuradio-core/src/lib/general/complex_vec_test.i deleted file mode 100644 index 4b95633be7..0000000000 --- a/gnuradio-core/src/lib/general/complex_vec_test.i +++ /dev/null @@ -1,25 +0,0 @@ - -std::vector<std::complex<float> > -complex_vec_test0(); - -std::vector<std::complex<float> > -complex_vec_test1(const std::vector<std::complex<float> > &input); - -std::complex<float> -complex_scalar_test0(); - -std::complex<float> -complex_scalar_test1(std::complex<float> input); - -std::vector<int> -int_vec_test0(); - -std::vector<int> -int_vec_test1(const std::vector<int> &input); - -std::vector<float> -float_vec_test0(); - -std::vector<float> -float_vec_test1(const std::vector<float> &input); - diff --git a/gnuradio-core/src/lib/general/gen_sine_table.py b/gnuradio-core/src/lib/general/gen_sine_table.py deleted file mode 100755 index d7d11eff11..0000000000 --- a/gnuradio-core/src/lib/general/gen_sine_table.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# - -import math -import sys - -def wrap (x): - if x >= 2**31: - return x - 2**32 - return x - -def gen_approx_table (f, nentries, min_x, max_x): - """return a list of nentries containing tuples of the form: - (m, c, abs_error). min_x and max_x specify the domain - of the table. - """ - r = [] - incx = float (max_x - min_x) / nentries - for i in range (nentries): - a = (i * incx) + min_x - b = ((i + 1) * incx) + min_x - m = (f(b)-f(a))/(b-a) - c = (3*a+b)*(f(a)-f(b))/(4*(b-a)) + (f((a+b)/2) + f(a))/2 - abs_error = c+m*a-f(a) - r.append ((m, c, abs_error)) - return r - -def scaled_sine (x): - return math.sin (x * math.pi / 2**31) - -def gen_sine_table (): - nbits = 10 - nentries = 2**nbits - - # min_x = -2**31 - # max_x = 2**31-1 - min_x = 0 - max_x = 2**32-1 - t = gen_approx_table (scaled_sine, nentries, min_x, max_x) - - max_error = 0 - for e in t: - max_error = max (max_error, abs (e[2])) - - # sys.stdout.write ('static const int WORDBITS = 32;\n') - # sys.stdout.write ('static const int NBITS = %d;\n' % (nbits,)) - - sys.stdout.write (' // max_error = %22.15e\n' % (max_error,)) - - # sys.stdout.write ('static const double sine_table[%d][2] = {\n'% (nentries,)) - - for e in t: - sys.stdout.write (' { %22.15e, %22.15e },\n' % (2 * e[0], e[1])) - - # sys.stdout.write ('};\n') - -if __name__ == '__main__': - gen_sine_table () diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i deleted file mode 100644 index 68b963702c..0000000000 --- a/gnuradio-core/src/lib/general/general.i +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004-2012 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_prefs.h> -#include <gr_constants.h> -#include <gr_test_types.h> -#include <gr_test.h> -#include <gr_feval.h> -#include <complex_vec_test.h> -#include <gr_endianness.h> -%} - -%include "gr_prefs.i" -%include "gr_constants.i" -%include "gr_test_types.h" -%include "gr_test.i" -%include "gr_feval.i" -%include "complex_vec_test.i" -%include "gr_block_gateway.i" -%include "gr_endianness.h" diff --git a/gnuradio-core/src/lib/general/gr_block_gateway.cc b/gnuradio-core/src/lib/general/gr_block_gateway.cc deleted file mode 100644 index 79b42803af..0000000000 --- a/gnuradio-core/src/lib/general/gr_block_gateway.cc +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright 2011-2012 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_block_gateway.h> -#include <gr_io_signature.h> -#include <iostream> -#include <boost/bind.hpp> - -/*********************************************************************** - * Helper routines - **********************************************************************/ -template <typename OutType, typename InType> -void copy_pointers(OutType &out, const InType &in){ - out.resize(in.size()); - for (size_t i = 0; i < in.size(); i++){ - out[i] = (void *)(in[i]); - } -} - -/*********************************************************************** - * The gr_block gateway implementation class - **********************************************************************/ -class gr_block_gateway_impl : public gr_block_gateway{ -public: - gr_block_gateway_impl( - gr_feval_ll *handler, - const std::string &name, - gr_io_signature_sptr in_sig, - gr_io_signature_sptr out_sig, - const gr_block_gw_work_type work_type, - const unsigned factor - ): - gr_block(name, in_sig, out_sig), - _handler(handler), - _work_type(work_type) - { - switch(_work_type){ - case GR_BLOCK_GW_WORK_GENERAL: - _decim = 1; //not relevant, but set anyway - _interp = 1; //not relevant, but set anyway - break; - - case GR_BLOCK_GW_WORK_SYNC: - _decim = 1; - _interp = 1; - this->set_fixed_rate(true); - break; - - case GR_BLOCK_GW_WORK_DECIM: - _decim = factor; - _interp = 1; - break; - - case GR_BLOCK_GW_WORK_INTERP: - _decim = 1; - _interp = factor; - this->set_output_multiple(_interp); - break; - } - } - - /******************************************************************* - * Overloads for various scheduler-called functions - ******************************************************************/ - void forecast( - int noutput_items, - gr_vector_int &ninput_items_required - ){ - switch(_work_type){ - case GR_BLOCK_GW_WORK_GENERAL: - _message.action = gr_block_gw_message_type::ACTION_FORECAST; - _message.forecast_args_noutput_items = noutput_items; - _message.forecast_args_ninput_items_required = ninput_items_required; - _handler->calleval(0); - ninput_items_required = _message.forecast_args_ninput_items_required; - return; - - default: - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput(noutput_items); - return; - } - } - - int general_work( - int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items - ){ - switch(_work_type){ - case GR_BLOCK_GW_WORK_GENERAL: - _message.action = gr_block_gw_message_type::ACTION_GENERAL_WORK; - _message.general_work_args_noutput_items = noutput_items; - _message.general_work_args_ninput_items = ninput_items; - copy_pointers(_message.general_work_args_input_items, input_items); - _message.general_work_args_output_items = output_items; - _handler->calleval(0); - return _message.general_work_args_return_value; - - default: - int r = work (noutput_items, input_items, output_items); - if (r > 0) consume_each(r*_decim/_interp); - return r; - } - } - - int work( - int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items - ){ - _message.action = gr_block_gw_message_type::ACTION_WORK; - _message.work_args_ninput_items = fixed_rate_noutput_to_ninput(noutput_items); - if (_message.work_args_ninput_items == 0) return -1; - _message.work_args_noutput_items = noutput_items; - copy_pointers(_message.work_args_input_items, input_items); - _message.work_args_output_items = output_items; - _handler->calleval(0); - return _message.work_args_return_value; - } - - int fixed_rate_noutput_to_ninput(int noutput_items){ - return (noutput_items*_decim/_interp) + history() - 1; - } - - int fixed_rate_ninput_to_noutput(int ninput_items){ - return std::max(0, ninput_items - (int)history() + 1)*_interp/_decim; - } - - bool start(void){ - _message.action = gr_block_gw_message_type::ACTION_START; - _handler->calleval(0); - return _message.start_args_return_value; - } - - bool stop(void){ - _message.action = gr_block_gw_message_type::ACTION_STOP; - _handler->calleval(0); - return _message.stop_args_return_value; - } - - gr_block_gw_message_type &gr_block_message(void){ - return _message; - } - -private: - gr_feval_ll *_handler; - gr_block_gw_message_type _message; - const gr_block_gw_work_type _work_type; - unsigned _decim, _interp; -}; - -boost::shared_ptr<gr_block_gateway> gr_make_block_gateway( - gr_feval_ll *handler, - const std::string &name, - gr_io_signature_sptr in_sig, - gr_io_signature_sptr out_sig, - const gr_block_gw_work_type work_type, - const unsigned factor -){ - return boost::shared_ptr<gr_block_gateway>( - new gr_block_gateway_impl(handler, name, in_sig, out_sig, work_type, factor) - ); -} diff --git a/gnuradio-core/src/lib/general/gr_block_gateway.h b/gnuradio-core/src/lib/general/gr_block_gateway.h deleted file mode 100644 index ce87a76c25..0000000000 --- a/gnuradio-core/src/lib/general/gr_block_gateway.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright 2011-2012 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_GRBLOCK_GATEWAY_H -#define INCLUDED_GRBLOCK_GATEWAY_H - -#include <gr_core_api.h> -#include <gr_block.h> -#include <gr_feval.h> - -/*! - * The work type enum tells the gateway what kind of block to implement. - * The choices are familiar gnuradio block overloads (sync, decim, interp). - */ -enum gr_block_gw_work_type{ - GR_BLOCK_GW_WORK_GENERAL, - GR_BLOCK_GW_WORK_SYNC, - GR_BLOCK_GW_WORK_DECIM, - GR_BLOCK_GW_WORK_INTERP, -}; - -/*! - * Shared message structure between python and gateway. - * Each action type represents a scheduler-called function. - */ -struct gr_block_gw_message_type{ - enum action_type{ - ACTION_GENERAL_WORK, //dispatch work - ACTION_WORK, //dispatch work - ACTION_FORECAST, //dispatch forecast - ACTION_START, //dispatch start - ACTION_STOP, //dispatch stop - }; - - action_type action; - - int general_work_args_noutput_items; - std::vector<int> general_work_args_ninput_items; - std::vector<void *> general_work_args_input_items; //TODO this should be const void*, but swig cant int cast it right - std::vector<void *> general_work_args_output_items; - int general_work_args_return_value; - - int work_args_ninput_items; - int work_args_noutput_items; - std::vector<void *> work_args_input_items; //TODO this should be const void*, but swig cant int cast it right - std::vector<void *> work_args_output_items; - int work_args_return_value; - - int forecast_args_noutput_items; - std::vector<int> forecast_args_ninput_items_required; - - bool start_args_return_value; - - bool stop_args_return_value; -}; - -/*! - * The gateway block which performs all the magic. - * - * The gateway provides access to all the gr_block routines. - * The methods prefixed with gr_block__ are renamed - * to class methods without the prefix in python. - */ -class GR_CORE_API gr_block_gateway : virtual public gr_block{ -public: - //! Provide access to the shared message object - virtual gr_block_gw_message_type &gr_block_message(void) = 0; - - long gr_block__unique_id(void) const{ - return gr_block::unique_id(); - } - - std::string gr_block__name(void) const{ - return gr_block::name(); - } - - unsigned gr_block__history(void) const{ - return gr_block::history(); - } - - void gr_block__set_history(unsigned history){ - return gr_block::set_history(history); - } - - void gr_block__set_fixed_rate(bool fixed_rate){ - return gr_block::set_fixed_rate(fixed_rate); - } - - bool gr_block__fixed_rate(void) const{ - return gr_block::fixed_rate(); - } - - void gr_block__set_output_multiple(int multiple){ - return gr_block::set_output_multiple(multiple); - } - - int gr_block__output_multiple(void) const{ - return gr_block::output_multiple(); - } - - void gr_block__consume(int which_input, int how_many_items){ - return gr_block::consume(which_input, how_many_items); - } - - void gr_block__consume_each(int how_many_items){ - return gr_block::consume_each(how_many_items); - } - - void gr_block__produce(int which_output, int how_many_items){ - return gr_block::produce(which_output, how_many_items); - } - - void gr_block__set_relative_rate(double relative_rate){ - return gr_block::set_relative_rate(relative_rate); - } - - double gr_block__relative_rate(void) const{ - return gr_block::relative_rate(); - } - - uint64_t gr_block__nitems_read(unsigned int which_input){ - return gr_block::nitems_read(which_input); - } - - uint64_t gr_block__nitems_written(unsigned int which_output){ - return gr_block::nitems_written(which_output); - } - - gr_block::tag_propagation_policy_t gr_block__tag_propagation_policy(void){ - return gr_block::tag_propagation_policy(); - } - - void gr_block__set_tag_propagation_policy(gr_block::tag_propagation_policy_t p){ - return gr_block::set_tag_propagation_policy(p); - } - - void gr_block__add_item_tag( - unsigned int which_output, const gr_tag_t &tag - ){ - return gr_block::add_item_tag(which_output, tag); - } - - void gr_block__add_item_tag( - unsigned int which_output, - uint64_t abs_offset, - const pmt::pmt_t &key, - const pmt::pmt_t &value, - const pmt::pmt_t &srcid=pmt::PMT_F - ){ - return gr_block::add_item_tag(which_output, abs_offset, key, value, srcid); - } - - std::vector<gr_tag_t> gr_block__get_tags_in_range( - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end - ){ - std::vector<gr_tag_t> tags; - gr_block::get_tags_in_range(tags, which_input, abs_start, abs_end); - return tags; - } - - std::vector<gr_tag_t> gr_block__get_tags_in_range( - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end, - const pmt::pmt_t &key - ){ - std::vector<gr_tag_t> tags; - gr_block::get_tags_in_range(tags, which_input, abs_start, abs_end, key); - return tags; - } - - /* Message passing interface */ - void gr_block__message_port_register_in(pmt::pmt_t port_id){ - gr_basic_block::message_port_register_in(port_id); - } - - void gr_block__message_port_register_out(pmt::pmt_t port_id){ - gr_basic_block::message_port_register_out(port_id); - } - - void gr_block__message_port_pub(pmt::pmt_t port_id, pmt::pmt_t msg){ - gr_basic_block::message_port_pub(port_id, msg); - } - - void gr_block__message_port_sub(pmt::pmt_t port_id, pmt::pmt_t target){ - gr_basic_block::message_port_sub(port_id, target); - } - - void gr_block__message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target){ - gr_basic_block::message_port_unsub(port_id, target); - } - - pmt::pmt_t gr_block__message_ports_in(){ - return gr_basic_block::message_ports_in(); - } - - pmt::pmt_t gr_block__message_ports_out(){ - return gr_basic_block::message_ports_out(); - } - - void set_msg_handler_feval(pmt::pmt_t which_port, gr_feval_p *msg_handler) - { - if(msg_queue.find(which_port) == msg_queue.end()){ - throw std::runtime_error("attempt to set_msg_handler_feval() on bad input message port!"); - } - d_msg_handlers_feval[which_port] = msg_handler; - } - -protected: - typedef std::map<pmt::pmt_t, gr_feval_p *, pmt::comperator> msg_handlers_feval_t; - msg_handlers_feval_t d_msg_handlers_feval; - - void dispatch_msg(pmt::pmt_t which_port, pmt::pmt_t msg){ - // Is there a handler? - if (d_msg_handlers_feval.find(which_port) != d_msg_handlers_feval.end()){ - d_msg_handlers_feval[which_port]->calleval(msg); // Yes, invoke it. - } - else { - // Pass to generic dispatcher if not found - gr_basic_block::dispatch_msg(which_port, msg); - } - } -}; - -/*! - * Make a new gateway block. - * \param handler the swig director object with callback - * \param name the name of the block (Ex: "Shirley") - * \param in_sig the input signature for this block - * \param out_sig the output signature for this block - * \param work_type the type of block overload to implement - * \param factor the decimation or interpolation factor - * \return a new gateway block - */ -GR_CORE_API boost::shared_ptr<gr_block_gateway> gr_make_block_gateway( - gr_feval_ll *handler, - const std::string &name, - gr_io_signature_sptr in_sig, - gr_io_signature_sptr out_sig, - const gr_block_gw_work_type work_type, - const unsigned factor -); - -#endif /* INCLUDED_GRBLOCK_GATEWAY_H */ diff --git a/gnuradio-core/src/lib/general/gr_block_gateway.i b/gnuradio-core/src/lib/general/gr_block_gateway.i deleted file mode 100644 index 8adafdfea3..0000000000 --- a/gnuradio-core/src/lib/general/gr_block_gateway.i +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2011-2012 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. - */ - -//////////////////////////////////////////////////////////////////////// -// standard includes -//////////////////////////////////////////////////////////////////////// -%include <gnuradio.i> -%include <gr_tags.i> -%include <gr_feval.i> - -//////////////////////////////////////////////////////////////////////// -// block headers -//////////////////////////////////////////////////////////////////////// -%{ -#include <gr_block_gateway.h> -%} - -//////////////////////////////////////////////////////////////////////// -// data type support -//////////////////////////////////////////////////////////////////////// -%template(int_vector_t) std::vector<int>; -%template(void_star_vector_t) std::vector<void *>; - -//////////////////////////////////////////////////////////////////////// -// block magic -//////////////////////////////////////////////////////////////////////// -GR_SWIG_BLOCK_MAGIC(gr,block_gateway); -%include <gr_block_gateway.h> diff --git a/gnuradio-core/src/lib/general/gr_circular_file.cc b/gnuradio-core/src/lib/general/gr_circular_file.cc deleted file mode 100644 index 6f710c49b1..0000000000 --- a/gnuradio-core/src/lib/general/gr_circular_file.cc +++ /dev/null @@ -1,203 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,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_circular_file.h> - -#include <unistd.h> -#ifdef HAVE_SYS_MMAN_H -#include <sys/mman.h> -#endif -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <fcntl.h> -#include <stdio.h> -#include <assert.h> -#include <stdlib.h> - -#include <algorithm> -#include <stdio.h> -#include <string.h> - -#ifdef HAVE_IO_H -#include <io.h> -#endif - -static const int HEADER_SIZE = 4096; -static const int HEADER_MAGIC = 0xEB021026; - -static const int HD_MAGIC = 0; -static const int HD_HEADER_SIZE = 1; // integer offsets into header -static const int HD_BUFFER_SIZE = 2; -static const int HD_BUFFER_BASE = 3; -static const int HD_BUFFER_CURRENT = 4; - -gr_circular_file::gr_circular_file (const char *filename, - bool writable, int size) - : d_fd (-1), d_header (0), d_buffer (0), d_mapped_size (0), d_bytes_read (0) -{ - int mm_prot; - if (writable){ -#ifdef HAVE_MMAP - mm_prot = PROT_READ | PROT_WRITE; -#endif - d_fd = open (filename, O_CREAT | O_RDWR | O_TRUNC, 0664); - if (d_fd < 0){ - perror (filename); - exit (1); - } -#ifdef HAVE_MMAP /* FIXME */ - if(ftruncate (d_fd, size + HEADER_SIZE) != 0) { - perror (filename); - exit (1); - } -#endif - } - else { -#ifdef HAVE_MMAP - mm_prot = PROT_READ; -#endif - d_fd = open (filename, O_RDONLY); - if (d_fd < 0){ - perror (filename); - exit (1); - } - } - - struct stat statbuf; - if (fstat (d_fd, &statbuf) < 0){ - perror (filename); - exit (1); - } - - if (statbuf.st_size < HEADER_SIZE){ - fprintf (stderr, "%s: file too small to be circular buffer\n", filename); - exit (1); - } - - d_mapped_size = statbuf.st_size; -#ifdef HAVE_MMAP - void *p = mmap (0, d_mapped_size, mm_prot, MAP_SHARED, d_fd, 0); - if (p == MAP_FAILED){ - perror ("gr_circular_file: mmap failed"); - exit (1); - } - - d_header = (int *) p; -#else - perror ("gr_circular_file: mmap unsupported by this system"); - exit (1); -#endif - - if (writable){ // init header - - if (size < 0){ - fprintf (stderr, "gr_circular_buffer: size must be > 0 when writable\n"); - exit (1); - } - - d_header[HD_MAGIC] = HEADER_MAGIC; - d_header[HD_HEADER_SIZE] = HEADER_SIZE; - d_header[HD_BUFFER_SIZE] = size; - d_header[HD_BUFFER_BASE] = HEADER_SIZE; // right after header - d_header[HD_BUFFER_CURRENT] = 0; - } - - // sanity check (the asserts are a bit unforgiving...) - - assert (d_header[HD_MAGIC] == HEADER_MAGIC); - assert (d_header[HD_HEADER_SIZE] == HEADER_SIZE); - assert (d_header[HD_BUFFER_SIZE] > 0); - assert (d_header[HD_BUFFER_BASE] >= d_header[HD_HEADER_SIZE]); - assert (d_header[HD_BUFFER_BASE] + d_header[HD_BUFFER_SIZE] <= d_mapped_size); - assert (d_header[HD_BUFFER_CURRENT] >= 0 && - d_header[HD_BUFFER_CURRENT] < d_header[HD_BUFFER_SIZE]); - - d_bytes_read = 0; - d_buffer = (unsigned char *) d_header + d_header[HD_BUFFER_BASE]; -} - -gr_circular_file::~gr_circular_file () -{ -#ifdef HAVE_MMAP - if (munmap ((char *) d_header, d_mapped_size) < 0){ - perror ("gr_circular_file: munmap"); - exit (1); - } -#endif - close (d_fd); -} - -bool -gr_circular_file::write (void *vdata, int nbytes) -{ - unsigned char *data = (unsigned char *) vdata; - int buffer_size = d_header[HD_BUFFER_SIZE]; - int buffer_current = d_header[HD_BUFFER_CURRENT]; - - while (nbytes > 0){ - int n = std::min (nbytes, buffer_size - buffer_current); - memcpy (d_buffer + buffer_current, data, n); - - buffer_current += n; - if (buffer_current >= buffer_size) - buffer_current = 0; - - data += n; - nbytes -= n; - } - - d_header[HD_BUFFER_CURRENT] = buffer_current; - return true; -} - -int -gr_circular_file::read (void *vdata, int nbytes) -{ - unsigned char *data = (unsigned char *) vdata; - int buffer_current = d_header[HD_BUFFER_CURRENT]; - int buffer_size = d_header[HD_BUFFER_SIZE]; - int total = 0; - - nbytes = std::min (nbytes, buffer_size - d_bytes_read); - - while (nbytes > 0){ - int offset = (buffer_current + d_bytes_read) % buffer_size; - int n = std::min (nbytes, buffer_size - offset); - memcpy (data, d_buffer + offset, n); - data += n; - d_bytes_read += n; - total += n; - nbytes -= n; - } - return total; -} - -void -gr_circular_file::reset_read_pointer () -{ - d_bytes_read = 0; -} diff --git a/gnuradio-core/src/lib/general/gr_circular_file.h b/gnuradio-core/src/lib/general/gr_circular_file.h deleted file mode 100644 index ca1f793f37..0000000000 --- a/gnuradio-core/src/lib/general/gr_circular_file.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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 _GR_CIRCULAR_FILE_H_ -#define _GR_CIRCULAR_FILE_H_ - -#include <gr_core_api.h> - -/* - * writes input data into a circular buffer on disk. - * - * the file contains a fixed header: - * 0x0000: int32 magic (0xEB021026) - * 0x0004: int32 size in bytes of header (constant 4096) - * 0x0008: int32 size in bytes of circular buffer (not including header) - * 0x000C: int32 file offset to beginning of circular buffer - * 0x0010: int32 byte offset from beginning of circular buffer to - * current start of data - * - */ -class GR_CORE_API gr_circular_file { - int d_fd; - int *d_header; - unsigned char *d_buffer; - int d_mapped_size; - int d_bytes_read; - -public: - gr_circular_file (const char *filename, bool writable = false, int size = 0); - ~gr_circular_file (); - - bool write (void *data, int nbytes); - - // returns # of bytes actually read or 0 if end of buffer, or -1 on error. - int read (void *data, int nbytes); - - // reset read pointer to beginning of buffer. - void reset_read_pointer (); -}; - -#endif /* _GR_CIRCULAR_FILE_H_ */
\ No newline at end of file diff --git a/gnuradio-core/src/lib/general/gr_constants.cc.in b/gnuradio-core/src/lib/general/gr_constants.cc.in deleted file mode 100644 index b94f254d66..0000000000 --- a/gnuradio-core/src/lib/general/gr_constants.cc.in +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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. - */ - -#if HAVE_CONFIG_H -#include <config.h> -#endif - -#include <gr_constants.h> - -const std::string -gr_prefix() -{ - return "@prefix@"; -} - -const std::string -gr_sysconfdir() -{ - return "@SYSCONFDIR@"; -} - -const std::string -gr_prefsdir() -{ - return "@GR_PREFSDIR@"; -} - -const std::string -gr_build_date() -{ - return "@BUILD_DATE@"; -} - -const std::string -gr_version() -{ - return "@VERSION@"; -} diff --git a/gnuradio-core/src/lib/general/gr_constants.h b/gnuradio-core/src/lib/general/gr_constants.h deleted file mode 100644 index 00ed9463d8..0000000000 --- a/gnuradio-core/src/lib/general/gr_constants.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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_CONSTANTS_H -#define INCLUDED_GR_CONSTANTS_H - -#include <gr_core_api.h> -#include <string> - -/*! - * \brief return ./configure --prefix argument. Typically /usr/local - */ -GR_CORE_API const std::string gr_prefix(); - -/*! - * \brief return ./configure --sysconfdir argument. Typically $prefix/etc or /etc - */ -GR_CORE_API const std::string gr_sysconfdir(); - -/*! - * \brief return preferences file directory. Typically $sysconfdir/etc/conf.d - */ -GR_CORE_API const std::string gr_prefsdir(); - -/*! - * \brief return date/time of build, as set when 'bootstrap' is run - */ -GR_CORE_API const std::string gr_build_date(); - -/*! - * \brief return version string defined in configure.ac - */ -GR_CORE_API const std::string gr_version(); - -#endif /* INCLUDED_GR_CONSTANTS_H */ diff --git a/gnuradio-core/src/lib/general/gr_constants.i b/gnuradio-core/src/lib/general/gr_constants.i deleted file mode 100644 index a5aef14925..0000000000 --- a/gnuradio-core/src/lib/general/gr_constants.i +++ /dev/null @@ -1,13 +0,0 @@ -/* -*- c++ -*- */ - -%rename(prefix) gr_prefix; -%rename(sysconfdir) gr_sysconfdir; -%rename(prefsdir) gr_prefsdir; -%rename(build_date) gr_build_date; -%rename(version) gr_version; - -const std::string gr_prefix(); -const std::string gr_sysconfdir(); -const std::string gr_prefsdir(); -const std::string gr_build_date(); -const std::string gr_version(); diff --git a/gnuradio-core/src/lib/general/gr_core_api.h b/gnuradio-core/src/lib/general/gr_core_api.h deleted file mode 100644 index 74c802857b..0000000000 --- a/gnuradio-core/src/lib/general/gr_core_api.h +++ /dev/null @@ -1,33 +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. - */ - -#ifndef INCLUDED_GR_CORE_API_H -#define INCLUDED_GR_CORE_API_H - -#include <gruel/attributes.h> - -#ifdef gnuradio_core_EXPORTS -# define GR_CORE_API __GR_ATTR_EXPORT -#else -# define GR_CORE_API __GR_ATTR_IMPORT -#endif - -#endif /* INCLUDED_GR_CORE_API_H */ diff --git a/gnuradio-core/src/lib/general/gr_endianness.h b/gnuradio-core/src/lib/general/gr_endianness.h deleted file mode 100644 index c4ecb1383e..0000000000 --- a/gnuradio-core/src/lib/general/gr_endianness.h +++ /dev/null @@ -1,27 +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. - */ -#ifndef INCLUDED_GR_ENDIANNESS_H -#define INCLUDED_GR_ENDIANNESS_H - -typedef enum {GR_MSB_FIRST, GR_LSB_FIRST} gr_endianness_t; - -#endif /* INCLUDED_GR_ENDIANNESS_H */ diff --git a/gnuradio-core/src/lib/general/gr_expj.h b/gnuradio-core/src/lib/general/gr_expj.h deleted file mode 100644 index 1d8633242b..0000000000 --- a/gnuradio-core/src/lib/general/gr_expj.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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_EXPJ_H -#define INCLUDED_GR_EXPJ_H - -#include <gr_core_api.h> -#include <gr_sincos.h> -#include <gr_types.h> - -static inline gr_complex -gr_expj(float phase) -{ - float t_imag, t_real; - gr_sincosf(phase, &t_imag, &t_real); - return gr_complex(t_real, t_imag); -} - - -#endif /* INCLUDED_GR_EXPJ_H */ diff --git a/gnuradio-core/src/lib/general/gr_fast_atan2f.cc b/gnuradio-core/src/lib/general/gr_fast_atan2f.cc deleted file mode 100644 index 8b7bfea12e..0000000000 --- a/gnuradio-core/src/lib/general/gr_fast_atan2f.cc +++ /dev/null @@ -1,199 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ - -#include <gr_math.h> // declaration is in here -#include <cmath> - -#define REAL float - -/***************************************************************************/ -/* Constant definitions */ -/***************************************************************************/ - -#define TAN_MAP_RES 0.003921569 /* (smallest non-zero value in table) */ -#define RAD_PER_DEG 0.017453293 -#define TAN_MAP_SIZE 256 - -/* arctangents from 0 to pi/4 radians */ -static REAL -fast_atan_table[257] = { - 0.000000e+00, 3.921549e-03, 7.842976e-03, 1.176416e-02, - 1.568499e-02, 1.960533e-02, 2.352507e-02, 2.744409e-02, - 3.136226e-02, 3.527947e-02, 3.919560e-02, 4.311053e-02, - 4.702413e-02, 5.093629e-02, 5.484690e-02, 5.875582e-02, - 6.266295e-02, 6.656816e-02, 7.047134e-02, 7.437238e-02, - 7.827114e-02, 8.216752e-02, 8.606141e-02, 8.995267e-02, - 9.384121e-02, 9.772691e-02, 1.016096e-01, 1.054893e-01, - 1.093658e-01, 1.132390e-01, 1.171087e-01, 1.209750e-01, - 1.248376e-01, 1.286965e-01, 1.325515e-01, 1.364026e-01, - 1.402496e-01, 1.440924e-01, 1.479310e-01, 1.517652e-01, - 1.555948e-01, 1.594199e-01, 1.632403e-01, 1.670559e-01, - 1.708665e-01, 1.746722e-01, 1.784728e-01, 1.822681e-01, - 1.860582e-01, 1.898428e-01, 1.936220e-01, 1.973956e-01, - 2.011634e-01, 2.049255e-01, 2.086818e-01, 2.124320e-01, - 2.161762e-01, 2.199143e-01, 2.236461e-01, 2.273716e-01, - 2.310907e-01, 2.348033e-01, 2.385093e-01, 2.422086e-01, - 2.459012e-01, 2.495869e-01, 2.532658e-01, 2.569376e-01, - 2.606024e-01, 2.642600e-01, 2.679104e-01, 2.715535e-01, - 2.751892e-01, 2.788175e-01, 2.824383e-01, 2.860514e-01, - 2.896569e-01, 2.932547e-01, 2.968447e-01, 3.004268e-01, - 3.040009e-01, 3.075671e-01, 3.111252e-01, 3.146752e-01, - 3.182170e-01, 3.217506e-01, 3.252758e-01, 3.287927e-01, - 3.323012e-01, 3.358012e-01, 3.392926e-01, 3.427755e-01, - 3.462497e-01, 3.497153e-01, 3.531721e-01, 3.566201e-01, - 3.600593e-01, 3.634896e-01, 3.669110e-01, 3.703234e-01, - 3.737268e-01, 3.771211e-01, 3.805064e-01, 3.838825e-01, - 3.872494e-01, 3.906070e-01, 3.939555e-01, 3.972946e-01, - 4.006244e-01, 4.039448e-01, 4.072558e-01, 4.105574e-01, - 4.138496e-01, 4.171322e-01, 4.204054e-01, 4.236689e-01, - 4.269229e-01, 4.301673e-01, 4.334021e-01, 4.366272e-01, - 4.398426e-01, 4.430483e-01, 4.462443e-01, 4.494306e-01, - 4.526070e-01, 4.557738e-01, 4.589307e-01, 4.620778e-01, - 4.652150e-01, 4.683424e-01, 4.714600e-01, 4.745676e-01, - 4.776654e-01, 4.807532e-01, 4.838312e-01, 4.868992e-01, - 4.899573e-01, 4.930055e-01, 4.960437e-01, 4.990719e-01, - 5.020902e-01, 5.050985e-01, 5.080968e-01, 5.110852e-01, - 5.140636e-01, 5.170320e-01, 5.199904e-01, 5.229388e-01, - 5.258772e-01, 5.288056e-01, 5.317241e-01, 5.346325e-01, - 5.375310e-01, 5.404195e-01, 5.432980e-01, 5.461666e-01, - 5.490251e-01, 5.518738e-01, 5.547124e-01, 5.575411e-01, - 5.603599e-01, 5.631687e-01, 5.659676e-01, 5.687566e-01, - 5.715357e-01, 5.743048e-01, 5.770641e-01, 5.798135e-01, - 5.825531e-01, 5.852828e-01, 5.880026e-01, 5.907126e-01, - 5.934128e-01, 5.961032e-01, 5.987839e-01, 6.014547e-01, - 6.041158e-01, 6.067672e-01, 6.094088e-01, 6.120407e-01, - 6.146630e-01, 6.172755e-01, 6.198784e-01, 6.224717e-01, - 6.250554e-01, 6.276294e-01, 6.301939e-01, 6.327488e-01, - 6.352942e-01, 6.378301e-01, 6.403565e-01, 6.428734e-01, - 6.453808e-01, 6.478788e-01, 6.503674e-01, 6.528466e-01, - 6.553165e-01, 6.577770e-01, 6.602282e-01, 6.626701e-01, - 6.651027e-01, 6.675261e-01, 6.699402e-01, 6.723452e-01, - 6.747409e-01, 6.771276e-01, 6.795051e-01, 6.818735e-01, - 6.842328e-01, 6.865831e-01, 6.889244e-01, 6.912567e-01, - 6.935800e-01, 6.958943e-01, 6.981998e-01, 7.004964e-01, - 7.027841e-01, 7.050630e-01, 7.073330e-01, 7.095943e-01, - 7.118469e-01, 7.140907e-01, 7.163258e-01, 7.185523e-01, - 7.207701e-01, 7.229794e-01, 7.251800e-01, 7.273721e-01, - 7.295557e-01, 7.317307e-01, 7.338974e-01, 7.360555e-01, - 7.382053e-01, 7.403467e-01, 7.424797e-01, 7.446045e-01, - 7.467209e-01, 7.488291e-01, 7.509291e-01, 7.530208e-01, - 7.551044e-01, 7.571798e-01, 7.592472e-01, 7.613064e-01, - 7.633576e-01, 7.654008e-01, 7.674360e-01, 7.694633e-01, - 7.714826e-01, 7.734940e-01, 7.754975e-01, 7.774932e-01, - 7.794811e-01, 7.814612e-01, 7.834335e-01, 7.853983e-01, - 7.853983e-01 - }; - - -/***************************************************************************** -Function: Arc tangent - -Syntax: angle = fast_atan2(y, x); -REAL y y component of input vector -REAL x x component of input vector -REAL angle angle of vector (x, y) in radians - -Description: This function calculates the angle of the vector (x,y) based -on a table lookup and linear interpolation. The table uses -a 256 point table covering -45 to +45 degrees and uses -symetry to determine the final angle value in the range of --180 to 180 degrees. Note that this function uses the small -angle approximation for values close to zero. This routine -calculates the arc tangent with an average error of -+/- 0.045 degrees. -*****************************************************************************/ - -REAL -gr_fast_atan2f(REAL y, REAL x) -{ - REAL x_abs, y_abs, z; - REAL alpha, angle, base_angle; - int index; - - /* don't divide by zero! */ // FIXME could get hosed with -0.0 - if ((y == 0.0) && (x == 0.0)) - return 0.0; - - /* normalize to +/- 45 degree range */ - y_abs = fabs(y); - x_abs = fabs(x); - //z = (y_abs < x_abs ? y_abs / x_abs : x_abs / y_abs); - if (y_abs < x_abs) - z = y_abs / x_abs; - else - z = x_abs / y_abs; - - /* when ratio approaches the table resolution, the angle is */ - /* best approximated with the argument itself... */ - if (z < TAN_MAP_RES) - base_angle = z; - else { - /* find index and interpolation value */ - alpha = z * (REAL) TAN_MAP_SIZE - .5; - index = (int) alpha; - alpha -= (REAL) index; - /* determine base angle based on quadrant and */ - /* add or subtract table value from base angle based on quadrant */ - base_angle = fast_atan_table[index]; - base_angle += - (fast_atan_table[index + 1] - fast_atan_table[index]) * alpha; - } - - if (x_abs > y_abs) { /* -45 -> 45 or 135 -> 225 */ - if (x >= 0.0) { /* -45 -> 45 */ - if (y >= 0.0) - angle = base_angle; /* 0 -> 45, angle OK */ - else - angle = -base_angle; /* -45 -> 0, angle = -angle */ - } else { /* 135 -> 180 or 180 -> -135 */ - angle = 3.14159265358979323846; - if (y >= 0.0) - angle -= base_angle; /* 135 -> 180, angle = 180 - angle */ - else - angle = base_angle - angle; /* 180 -> -135, angle = angle - 180 */ - } - } else { /* 45 -> 135 or -135 -> -45 */ - if (y >= 0.0) { /* 45 -> 135 */ - angle = 1.57079632679489661923; - if (x >= 0.0) - angle -= base_angle; /* 45 -> 90, angle = 90 - angle */ - else - angle += base_angle; /* 90 -> 135, angle = 90 + angle */ - } else { /* -135 -> -45 */ - angle = -1.57079632679489661923; - if (x >= 0.0) - angle += base_angle; /* -90 -> -45, angle = -90 + angle */ - else - angle -= base_angle; /* -135 -> -90, angle = -90 - angle */ - } - } - -#ifdef ZERO_TO_TWOPI - if (angle < 0) - return (angle + TWOPI); - else - return (angle); -#else - return (angle); -#endif -} - diff --git a/gnuradio-core/src/lib/general/gr_feval.cc b/gnuradio-core/src/lib/general/gr_feval.cc deleted file mode 100644 index 89f09984cf..0000000000 --- a/gnuradio-core/src/lib/general/gr_feval.cc +++ /dev/null @@ -1,132 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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_feval.h> - -gr_feval_dd::~gr_feval_dd(){} - -double -gr_feval_dd::eval(double x) -{ - return 0; -} - -double -gr_feval_dd::calleval(double x) -{ - return eval(x); -} - -// ---------------------------------------------------------------- - -gr_feval_cc::~gr_feval_cc(){} - -gr_complex -gr_feval_cc::eval(gr_complex x) -{ - return 0; -} - -gr_complex -gr_feval_cc::calleval(gr_complex x) -{ - return eval(x); -} - -// ---------------------------------------------------------------- - -gr_feval_ll::~gr_feval_ll(){} - -long -gr_feval_ll::eval(long x) -{ - return 0; -} - -long -gr_feval_ll::calleval(long x) -{ - return eval(x); -} - -// ---------------------------------------------------------------- - -gr_feval::~gr_feval(){} - -void -gr_feval::eval(void) -{ - // nop -} - -void -gr_feval::calleval(void) -{ - eval(); -} - -// ---------------------------------------------------------------- - -gr_feval_p::~gr_feval_p(){} - -void -gr_feval_p::eval(pmt::pmt_t x) -{ - // nop -} - -void -gr_feval_p::calleval(pmt::pmt_t x) -{ - eval(x); -} - -/* - * Trivial examples showing C++ (transparently) calling Python - */ -double -gr_feval_dd_example(gr_feval_dd *f, double x) -{ - return f->calleval(x); -} - -gr_complex -gr_feval_cc_example(gr_feval_cc *f, gr_complex x) -{ - return f->calleval(x); -} - -long -gr_feval_ll_example(gr_feval_ll *f, long x) -{ - return f->calleval(x); -} - -void -gr_feval_example(gr_feval *f) -{ - f->calleval(); -} diff --git a/gnuradio-core/src/lib/general/gr_feval.h b/gnuradio-core/src/lib/general/gr_feval.h deleted file mode 100644 index a9bccfe51c..0000000000 --- a/gnuradio-core/src/lib/general/gr_feval.h +++ /dev/null @@ -1,177 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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_FEVAL_H -#define INCLUDED_GR_FEVAL_H - -#include <gr_core_api.h> -#include <gr_complex.h> -#include <gruel/pmt.h> - -/*! - * \brief base class for evaluating a function: double -> double - * \ingroup misc - * - * This class is designed to be subclassed in Python or C++ - * and is callable from both places. It uses SWIG's - * "director" feature to implement the magic. - * It's slow. Don't use it in a performance critical path. - * - * Override eval to define the behavior. - * Use calleval to invoke eval (this kludge is required to allow a - * python specific "shim" to be inserted. - */ -class GR_CORE_API gr_feval_dd -{ -protected: - /*! - * \brief override this to define the function - */ - virtual double eval(double x); - -public: - gr_feval_dd() {} - virtual ~gr_feval_dd(); - - virtual double calleval(double x); // invoke "eval" -}; - -/*! - * \brief base class for evaluating a function: complex -> complex - * \ingroup misc - * - * This class is designed to be subclassed in Python or C++ - * and is callable from both places. It uses SWIG's - * "director" feature to implement the magic. - * It's slow. Don't use it in a performance critical path. - * - * Override eval to define the behavior. - * Use calleval to invoke eval (this kludge is required to allow a - * python specific "shim" to be inserted. - */ -class GR_CORE_API gr_feval_cc -{ -protected: - /*! - * \brief override this to define the function - */ - virtual gr_complex eval(gr_complex x); - -public: - gr_feval_cc() {} - virtual ~gr_feval_cc(); - - virtual gr_complex calleval(gr_complex x); // invoke "eval" -}; - -/*! - * \brief base class for evaluating a function: long -> long - * \ingroup misc - * - * This class is designed to be subclassed in Python or C++ - * and is callable from both places. It uses SWIG's - * "director" feature to implement the magic. - * It's slow. Don't use it in a performance critical path. - * - * Override eval to define the behavior. - * Use calleval to invoke eval (this kludge is required to allow a - * python specific "shim" to be inserted. - */ -class GR_CORE_API gr_feval_ll -{ -protected: - /*! - * \brief override this to define the function - */ - virtual long eval(long x); - -public: - gr_feval_ll() {} - virtual ~gr_feval_ll(); - - virtual long calleval(long x); // invoke "eval" -}; - -/*! - * \brief base class for evaluating a function: void -> void - * \ingroup misc - * - * This class is designed to be subclassed in Python or C++ - * and is callable from both places. It uses SWIG's - * "director" feature to implement the magic. - * It's slow. Don't use it in a performance critical path. - * - * Override eval to define the behavior. - * Use calleval to invoke eval (this kludge is required to allow a - * python specific "shim" to be inserted. - */ -class GR_CORE_API gr_feval -{ -protected: - /*! - * \brief override this to define the function - */ - virtual void eval(); - -public: - gr_feval() {} - virtual ~gr_feval(); - - virtual void calleval(); // invoke "eval" -}; - -/*! - * \brief base class for evaluating a function: pmt -> void - * \ingroup misc - * - * This class is designed to be subclassed in Python or C++ - * and is callable from both places. It uses SWIG's - * "director" feature to implement the magic. - * It's slow. Don't use it in a performance critical path. - * - * Override eval to define the behavior. - * Use calleval to invoke eval (this kludge is required to allow a - * python specific "shim" to be inserted. - */ -class GR_CORE_API gr_feval_p -{ -protected: - /*! - * \brief override this to define the function - */ - virtual void eval(pmt::pmt_t x); - -public: - gr_feval_p() {} - virtual ~gr_feval_p(); - - virtual void calleval(pmt::pmt_t x); // invoke "eval" -}; - -/*! - * \brief trivial examples / test cases showing C++ calling Python code - */ -GR_CORE_API double gr_feval_dd_example(gr_feval_dd *f, double x); -GR_CORE_API gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x); -GR_CORE_API long gr_feval_ll_example(gr_feval_ll *f, long x); -GR_CORE_API void gr_feval_example(gr_feval *f); - -#endif /* INCLUDED_GR_FEVAL_H */ diff --git a/gnuradio-core/src/lib/general/gr_feval.i b/gnuradio-core/src/lib/general/gr_feval.i deleted file mode 100644 index bcf4f1e646..0000000000 --- a/gnuradio-core/src/lib/general/gr_feval.i +++ /dev/null @@ -1,233 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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. - */ - - -/* - * N.B., this is a _very_ non-standard SWIG .i file - * - * It contains a bunch of magic that is required to ensure that when - * these classes are used as base classes for python code, - * everything works when calling back from C++ into Python. - * - * The gist of the problem is that our C++ code is usually not holding - * the Python Global Interpreter Lock (GIL). Thus if we invoke a - * "director" method from C++, we'll end up in Python not holding the - * GIL. Disaster (SIGSEGV) will result. To avoid this we insert a - * "shim" that grabs and releases the GIL. - * - * If you don't understand SWIG "directors" or the Python GIL, - * don't bother trying to understand what's going on in here. - * - * [We could eliminate a bunch of this hair by requiring SWIG 1.3.29 - * or later and some additional magic declarations, but many systems - * aren't shipping that version yet. Thus we kludge...] - */ - - -// Directors are only supported in Python, Java and C# -#ifdef SWIGPYTHON -%include "pmt_swig.i" -using namespace pmt; - -// Enable SWIG directors for these classes -%feature("director") gr_py_feval_dd; -%feature("director") gr_py_feval_cc; -%feature("director") gr_py_feval_ll; -%feature("director") gr_py_feval; -%feature("director") gr_py_feval_p; - -%feature("nodirector") gr_py_feval_dd::calleval; -%feature("nodirector") gr_py_feval_cc::calleval; -%feature("nodirector") gr_py_feval_ll::calleval; -%feature("nodirector") gr_py_feval::calleval; -%feature("nodirector") gr_py_feval_p::calleval; - - -%rename(feval_dd) gr_py_feval_dd; -%rename(feval_cc) gr_py_feval_cc; -%rename(feval_ll) gr_py_feval_ll; -%rename(feval) gr_py_feval; -%rename(feval_p) gr_py_feval_p; - -//%exception { -// try { $action } -// catch (Swig::DirectorException &e) { std::cerr << e.getMessage(); SWIG_fail; } -//} - -%{ - -// class that ensures we acquire and release the Python GIL - -class ensure_py_gil_state { - PyGILState_STATE d_gstate; -public: - ensure_py_gil_state() { d_gstate = PyGILState_Ensure(); } - ~ensure_py_gil_state() { PyGILState_Release(d_gstate); } -}; - -%} - -/* - * These are the real C++ base classes, however we don't want these exposed. - */ -%ignore gr_feval_dd; -class gr_feval_dd -{ -protected: - virtual double eval(double x); - -public: - gr_feval_dd() {} - virtual ~gr_feval_dd(); - - virtual double calleval(double x); -}; - -%ignore gr_feval_cc; -class gr_feval_cc -{ -protected: - virtual gr_complex eval(gr_complex x); - -public: - gr_feval_cc() {} - virtual ~gr_feval_cc(); - - virtual gr_complex calleval(gr_complex x); -}; - -%ignore gr_feval_ll; -class gr_feval_ll -{ -protected: - virtual long eval(long x); - -public: - gr_feval_ll() {} - virtual ~gr_feval_ll(); - - virtual long calleval(long x); -}; - -%ignore gr_feval; -class gr_feval -{ -protected: - virtual void eval(); - -public: - gr_feval() {} - virtual ~gr_feval(); - - virtual void calleval(); -}; - -%ignore gr_feval_p; -class gr_feval_p -{ -protected: - virtual void eval(pmt_t x); - -public: - gr_feval_p() {} - virtual ~gr_feval_p(); - - virtual void calleval(pmt_t x); -}; - -/* - * These are the ones to derive from in Python. They have the magic shim - * that ensures that we're holding the Python GIL when we enter Python land... - */ - -%inline %{ -#include <gruel/pmt.h> - -class gr_py_feval_dd : public gr_feval_dd -{ - public: - double calleval(double x) - { - ensure_py_gil_state _lock; - return eval(x); - } -}; - -class gr_py_feval_cc : public gr_feval_cc -{ - public: - gr_complex calleval(gr_complex x) - { - ensure_py_gil_state _lock; - return eval(x); - } -}; - -class gr_py_feval_ll : public gr_feval_ll -{ - public: - long calleval(long x) - { - ensure_py_gil_state _lock; - return eval(x); - } -}; - -class gr_py_feval : public gr_feval -{ - public: - void calleval() - { - ensure_py_gil_state _lock; - eval(); - } -}; - -class gr_py_feval_p : public gr_feval_p -{ - public: - void calleval(pmt::pmt_t x) - { - ensure_py_gil_state _lock; - eval(x); - } -}; - -%} - - - -// examples / test cases - -%rename(feval_dd_example) gr_feval_dd_example; -double gr_feval_dd_example(gr_feval_dd *f, double x); - -%rename(feval_cc_example) gr_feval_cc_example; -gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x); - -%rename(feval_ll_example) gr_feval_ll_example; -long gr_feval_ll_example(gr_feval_ll *f, long x); - -%rename(feval_example) gr_feval_example; -void gr_feval_example(gr_feval *f); - -#endif // SWIGPYTHON diff --git a/gnuradio-core/src/lib/general/gr_fxpt.cc b/gnuradio-core/src/lib/general/gr_fxpt.cc deleted file mode 100644 index 2ea8520e6b..0000000000 --- a/gnuradio-core/src/lib/general/gr_fxpt.cc +++ /dev/null @@ -1,35 +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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_fxpt.h> - -const float gr_fxpt::s_sine_table[1 << NBITS][2] = { -#include "sine_table.h" -}; - -const float gr_fxpt::PI = 3.14159265358979323846; -const float gr_fxpt::TWO_TO_THE_31 = 2147483648.0; - diff --git a/gnuradio-core/src/lib/general/gr_fxpt.h b/gnuradio-core/src/lib/general/gr_fxpt.h deleted file mode 100644 index 9de6c0c18a..0000000000 --- a/gnuradio-core/src/lib/general/gr_fxpt.h +++ /dev/null @@ -1,104 +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. - */ -#ifndef INCLUDED_GR_FXPT_H -#define INCLUDED_GR_FXPT_H - -#include <gr_core_api.h> -#include <gr_types.h> - -/*! - * \brief fixed point sine and cosine and friends. - * \ingroup misc - * - * fixed pt radians - * --------- -------- - * -2**31 -pi - * 0 0 - * 2**31-1 pi - epsilon - * - */ -class GR_CORE_API gr_fxpt -{ - static const int WORDBITS = 32; - static const int NBITS = 10; - static const float s_sine_table[1 << NBITS][2]; - static const float PI; - static const float TWO_TO_THE_31; -public: - - static gr_int32 - float_to_fixed (float x) - { - // Fold x into -PI to PI. - int d = (int)floor(x/2/PI+0.5); - x -= d*2*PI; - // And convert to an integer. - return (gr_int32) ((float) x * TWO_TO_THE_31 / PI); - } - - static float - fixed_to_float (gr_int32 x) - { - return x * (PI / TWO_TO_THE_31); - } - - /*! - * \brief Given a fixed point angle x, return float sine (x) - */ - static float - sin (gr_int32 x) - { - gr_uint32 ux = x; - int index = ux >> (WORDBITS - NBITS); - return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1]; - } - - /* - * \brief Given a fixed point angle x, return float cosine (x) - */ - static float - cos (gr_int32 x) - { - gr_uint32 ux = x + 0x40000000; - int index = ux >> (WORDBITS - NBITS); - return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1]; - } - - /* - * \brief Given a fixedpoint angle x, return float cos(x) and sin (x) - */ - static void sincos(gr_int32 x, float *s, float *c) - { - gr_uint32 ux = x; - int sin_index = ux >> (WORDBITS - NBITS); - *s = s_sine_table[sin_index][0] * (ux >> 1) + s_sine_table[sin_index][1]; - - ux = x + 0x40000000; - int cos_index = ux >> (WORDBITS - NBITS); - *c = s_sine_table[cos_index][0] * (ux >> 1) + s_sine_table[cos_index][1]; - - return; - } - -}; - -#endif /* INCLUDED_GR_FXPT_H */ diff --git a/gnuradio-core/src/lib/general/gr_fxpt_nco.h b/gnuradio-core/src/lib/general/gr_fxpt_nco.h deleted file mode 100644 index 9defa083da..0000000000 --- a/gnuradio-core/src/lib/general/gr_fxpt_nco.h +++ /dev/null @@ -1,153 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,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_FXPT_NCO_H -#define INCLUDED_GR_FXPT_NCO_H - -#include <gr_core_api.h> -#include <gr_fxpt.h> -#include <gr_complex.h> - -/*! - * \brief Numerically Controlled Oscillator (NCO) - * \ingroup misc - */ -class /*GR_CORE_API*/ gr_fxpt_nco { - gr_uint32 d_phase; - gr_int32 d_phase_inc; - -public: - gr_fxpt_nco () : d_phase (0), d_phase_inc (0) {} - - ~gr_fxpt_nco () {} - - // radians - void set_phase (float angle) { - d_phase = gr_fxpt::float_to_fixed (angle); - } - - void adjust_phase (float delta_phase) { - d_phase += gr_fxpt::float_to_fixed (delta_phase); - } - - // angle_rate is in radians / step - void set_freq (float angle_rate){ - d_phase_inc = gr_fxpt::float_to_fixed (angle_rate); - } - - // angle_rate is a delta in radians / step - void adjust_freq (float delta_angle_rate) - { - d_phase_inc += gr_fxpt::float_to_fixed (delta_angle_rate); - } - - // increment current phase angle - - void step () - { - d_phase += d_phase_inc; - } - - void step (int n) - { - d_phase += d_phase_inc * n; - } - - // units are radians / step - float get_phase () const { return gr_fxpt::fixed_to_float (d_phase); } - float get_freq () const { return gr_fxpt::fixed_to_float (d_phase_inc); } - - // compute sin and cos for current phase angle - void sincos (float *sinx, float *cosx) const - { - *sinx = gr_fxpt::sin (d_phase); - *cosx = gr_fxpt::cos (d_phase); - } - - // compute cos and sin for a block of phase angles - void sincos (gr_complex *output, int noutput_items, double ampl=1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = gr_complex(gr_fxpt::cos (d_phase) * ampl, gr_fxpt::sin (d_phase) * ampl); - step (); - } - } - - // compute sin for a block of phase angles - void sin (float *output, int noutput_items, double ampl=1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = (float)(gr_fxpt::sin (d_phase) * ampl); - step (); - } - } - - // compute cos for a block of phase angles - void cos (float *output, int noutput_items, double ampl=1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = (float)(gr_fxpt::cos (d_phase) * ampl); - step (); - } - } - - // compute sin for a block of phase angles - void sin (short *output, int noutput_items, double ampl=1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = (short)(gr_fxpt::sin (d_phase) * ampl); - step (); - } - } - - // compute cos for a block of phase angles - void cos (short *output, int noutput_items, double ampl=1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = (short)(gr_fxpt::cos (d_phase) * ampl); - step (); - } - } - - // compute sin for a block of phase angles - void sin (int *output, int noutput_items, double ampl=1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = (int)(gr_fxpt::sin (d_phase) * ampl); - step (); - } - } - - // compute cos for a block of phase angles - void cos (int *output, int noutput_items, double ampl=1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = (int)(gr_fxpt::cos (d_phase) * ampl); - step (); - } - } - - // compute cos or sin for current phase angle - float cos () const { return gr_fxpt::cos (d_phase); } - float sin () const { return gr_fxpt::sin (d_phase); } -}; - -#endif /* INCLUDED_GR_FXPT_NCO_H */ diff --git a/gnuradio-core/src/lib/general/gr_fxpt_vco.h b/gnuradio-core/src/lib/general/gr_fxpt_vco.h deleted file mode 100644 index 13be2526bd..0000000000 --- a/gnuradio-core/src/lib/general/gr_fxpt_vco.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,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_FXPT_VCO_H -#define INCLUDED_GR_FXPT_VCO_H - -#include <gr_core_api.h> -#include <gr_fxpt.h> -#include <gr_complex.h> - -/*! - * \brief Voltage Controlled Oscillator (VCO) - * \ingroup misc - */ -class /*GR_CORE_API*/ gr_fxpt_vco { - gr_int32 d_phase; - -public: - gr_fxpt_vco () : d_phase (0) {} - - ~gr_fxpt_vco () {} - - // radians - void set_phase (float angle) { - d_phase = gr_fxpt::float_to_fixed (angle); - } - - void adjust_phase (float delta_phase) { - d_phase += gr_fxpt::float_to_fixed (delta_phase); - } - - float get_phase () const { return gr_fxpt::fixed_to_float (d_phase); } - - // compute sin and cos for current phase angle - void sincos (float *sinx, float *cosx) const - { - *sinx = gr_fxpt::sin (d_phase); - *cosx = gr_fxpt::cos (d_phase); - } - - // compute a block at a time - void cos (float *output, const float *input, int noutput_items, float k, float ampl = 1.0) - { - for (int i = 0; i < noutput_items; i++){ - output[i] = (float)(gr_fxpt::cos (d_phase) * ampl); - adjust_phase(input[i] * k); - } - } - - // compute cos or sin for current phase angle - float cos () const { return gr_fxpt::cos (d_phase); } - float sin () const { return gr_fxpt::sin (d_phase); } -}; - -#endif /* INCLUDED_GR_FXPT_VCO_H */ diff --git a/gnuradio-core/src/lib/general/gr_math.h b/gnuradio-core/src/lib/general/gr_math.h deleted file mode 100644 index b9a802da84..0000000000 --- a/gnuradio-core/src/lib/general/gr_math.h +++ /dev/null @@ -1,209 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,2005,2008 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. - */ - -/* - * mathematical odds and ends. - */ - -#ifndef _GR_MATH_H_ -#define _GR_MATH_H_ - -#include <gr_core_api.h> -#include <gr_complex.h> - -static inline bool -gr_is_power_of_2(long x) -{ - return x != 0 && (x & (x-1)) == 0; -} - -/*! - * \brief Fast arc tangent using table lookup and linear interpolation - * \ingroup misc - * - * \param y component of input vector - * \param x component of input vector - * \returns float angle angle of vector (x, y) in radians - * - * This function calculates the angle of the vector (x,y) based on a - * table lookup and linear interpolation. The table uses a 256 point - * table covering -45 to +45 degrees and uses symetry to determine the - * final angle value in the range of -180 to 180 degrees. Note that - * this function uses the small angle approximation for values close - * to zero. This routine calculates the arc tangent with an average - * error of +/- 0.045 degrees. - */ -GR_CORE_API float gr_fast_atan2f(float y, float x); - -static inline float gr_fast_atan2f(gr_complex z) -{ - return gr_fast_atan2f(z.imag(), z.real()); -} - -/* This bounds x by +/- clip without a branch */ -static inline float gr_branchless_clip(float x, float clip) -{ - float x1 = fabsf(x+clip); - float x2 = fabsf(x-clip); - x1 -= x2; - return 0.5*x1; -} - -static inline float gr_clip(float x, float clip) -{ - float y = x; - if(x > clip) - y = clip; - else if(x < -clip) - y = -clip; - return y; -} - -// Slicer Functions -static inline unsigned int gr_binary_slicer(float x) -{ - if(x >= 0) - return 1; - else - return 0; -} - -static inline unsigned int gr_quad_45deg_slicer(float r, float i) -{ - unsigned int ret = 0; - if((r >= 0) && (i >= 0)) - ret = 0; - else if((r < 0) && (i >= 0)) - ret = 1; - else if((r < 0) && (i < 0)) - ret = 2; - else - ret = 3; - return ret; -} - -static inline unsigned int gr_quad_0deg_slicer(float r, float i) -{ - unsigned int ret = 0; - if(fabsf(r) > fabsf(i)) { - if(r > 0) - ret = 0; - else - ret = 2; - } - else { - if(i > 0) - ret = 1; - else - ret = 3; - } - - return ret; -} - -static inline unsigned int gr_quad_45deg_slicer(gr_complex x) -{ - return gr_quad_45deg_slicer(x.real(), x.imag()); -} - -static inline unsigned int gr_quad_0deg_slicer(gr_complex x) -{ - return gr_quad_0deg_slicer(x.real(), x.imag()); -} - -// Branchless Slicer Functions -static inline unsigned int gr_branchless_binary_slicer(float x) -{ - return (x >= 0); -} - -static inline unsigned int gr_branchless_quad_0deg_slicer(float r, float i) -{ - unsigned int ret = 0; - ret = (fabsf(r) > fabsf(i)) * (((r < 0) << 0x1)); // either 0 (00) or 2 (10) - ret |= (fabsf(i) > fabsf(r)) * (((i < 0) << 0x1) | 0x1); // either 1 (01) or 3 (11) - - return ret; -} - -static inline unsigned int gr_branchless_quad_0deg_slicer(gr_complex x) -{ - return gr_branchless_quad_0deg_slicer(x.real(), x.imag()); -} - -static inline unsigned int gr_branchless_quad_45deg_slicer(float r, float i) -{ - char ret = (r <= 0); - ret |= ((i <= 0) << 1); - return (ret ^ ((ret & 0x2) >> 0x1)); -} - -static inline unsigned int gr_branchless_quad_45deg_slicer(gr_complex x) -{ - return gr_branchless_quad_45deg_slicer(x.real(), x.imag()); -} - -/*! - * \param x any value - * \param pow2 must be a power of 2 - * \returns \p x rounded down to a multiple of \p pow2. - */ -static inline size_t -gr_p2_round_down(size_t x, size_t pow2) -{ - return x & -pow2; -} - -/*! - * \param x any value - * \param pow2 must be a power of 2 - * \returns \p x rounded up to a multiple of \p pow2. - */ -static inline size_t -gr_p2_round_up(size_t x, size_t pow2) -{ - return gr_p2_round_down(x + pow2 - 1, pow2); -} - -/*! - * \param x any value - * \param pow2 must be a power of 2 - * \returns \p x modulo \p pow2. - */ -static inline size_t -gr_p2_modulo(size_t x, size_t pow2) -{ - return x & (pow2 - 1); -} - -/*! - * \param x any value - * \param pow2 must be a power of 2 - * \returns \p pow2 - (\p x modulo \p pow2). - */ -static inline size_t -gr_p2_modulo_neg(size_t x, size_t pow2) -{ - return pow2 - gr_p2_modulo(x, pow2); -} - -#endif /* _GR_MATH_H_ */ diff --git a/gnuradio-core/src/lib/general/gr_misc.cc b/gnuradio-core/src/lib/general/gr_misc.cc deleted file mode 100644 index 1ed2a03d7f..0000000000 --- a/gnuradio-core/src/lib/general/gr_misc.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_misc.h> - -unsigned int -gr_rounduppow2(unsigned int n) -{ - int i; - for (i=0;((n-1)>>i) != 0;i++) - ; - return 1<<i; -} - -// ---------------------------------------------------------------- - -void -gr_zero_vector(std::vector<float> &v) -{ - for(unsigned int i=0; i < v.size(); i++) - v[i] = 0; -} - -void -gr_zero_vector(std::vector<double> &v) -{ - for(unsigned int i=0; i < v.size(); i++) - v[i] = 0; -} - -void -gr_zero_vector(std::vector<int> &v) -{ - for(unsigned int i=0; i < v.size(); i++) - v[i] = 0; -} - -void -gr_zero_vector(std::vector<gr_complex> &v) -{ - for(unsigned int i=0; i < v.size(); i++) - v[i] = 0; -} diff --git a/gnuradio-core/src/lib/general/gr_misc.h b/gnuradio-core/src/lib/general/gr_misc.h deleted file mode 100644 index 0c790e90ce..0000000000 --- a/gnuradio-core/src/lib/general/gr_misc.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_MISC_H -#define INCLUDED_GR_MISC_H - -#include <gr_core_api.h> -#include <gr_types.h> - -GR_CORE_API unsigned int -gr_rounduppow2(unsigned int n); - -// FIXME should be template -GR_CORE_API void gr_zero_vector(std::vector<float> &v); -GR_CORE_API void gr_zero_vector(std::vector<double> &v); -GR_CORE_API void gr_zero_vector(std::vector<int> &v); -GR_CORE_API void gr_zero_vector(std::vector<gr_complex> &v); - - -#endif /* INCLUDED_GR_MISC_H */ diff --git a/gnuradio-core/src/lib/general/gr_nco.h b/gnuradio-core/src/lib/general/gr_nco.h deleted file mode 100644 index fb51106aab..0000000000 --- a/gnuradio-core/src/lib/general/gr_nco.h +++ /dev/null @@ -1,198 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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 _GR_NCO_H_ -#define _GR_NCO_H_ - - -#include <vector> -#include <gr_sincos.h> -#include <cmath> -#include <gr_complex.h> - -/*! - * \brief base class template for Numerically Controlled Oscillator (NCO) - * \ingroup misc - */ - - -//FIXME Eventually generalize this to fixed point - -template<class o_type, class i_type> -class gr_nco { -public: - gr_nco () : phase (0), phase_inc(0) {} - - virtual ~gr_nco () {} - - // radians - void set_phase (double angle) { - phase = angle; - } - - void adjust_phase (double delta_phase) { - phase += delta_phase; - } - - - // angle_rate is in radians / step - void set_freq (double angle_rate){ - phase_inc = angle_rate; - } - - // angle_rate is a delta in radians / step - void adjust_freq (double delta_angle_rate) - { - phase_inc += delta_angle_rate; - } - - // increment current phase angle - - void step () - { - phase += phase_inc; - if (fabs (phase) > M_PI){ - - while (phase > M_PI) - phase -= 2*M_PI; - - while (phase < -M_PI) - phase += 2*M_PI; - } - } - - void step (int n) - { - phase += phase_inc * n; - if (fabs (phase) > M_PI){ - - while (phase > M_PI) - phase -= 2*M_PI; - - while (phase < -M_PI) - phase += 2*M_PI; - } - } - - // units are radians / step - double get_phase () const { return phase; } - double get_freq () const { return phase_inc; } - - // compute sin and cos for current phase angle - void sincos (float *sinx, float *cosx) const; - - // compute cos or sin for current phase angle - float cos () const { return std::cos (phase); } - float sin () const { return std::sin (phase); } - - // compute a block at a time - void sin (float *output, int noutput_items, double ampl = 1.0); - void cos (float *output, int noutput_items, double ampl = 1.0); - void sincos (gr_complex *output, int noutput_items, double ampl = 1.0); - void sin (short *output, int noutput_items, double ampl = 1.0); - void cos (short *output, int noutput_items, double ampl = 1.0); - void sin (int *output, int noutput_items, double ampl = 1.0); - void cos (int *output, int noutput_items, double ampl = 1.0); - -protected: - double phase; - double phase_inc; -}; - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::sincos (float *sinx, float *cosx) const -{ - gr_sincosf (phase, sinx, cosx); -} - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::sin (float *output, int noutput_items, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - output[i] = (float)(sin () * ampl); - step (); - } -} - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::cos (float *output, int noutput_items, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - output[i] = (float)(cos () * ampl); - step (); - } -} - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::sin (short *output, int noutput_items, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - output[i] = (short)(sin() * ampl); - step (); - } -} - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::cos (short *output, int noutput_items, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - output[i] = (short)(cos () * ampl); - step (); - } -} - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::sin (int *output, int noutput_items, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - output[i] = (int)(sin () * ampl); - step (); - } -} - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::cos (int *output, int noutput_items, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - output[i] = (int)(cos () * ampl); - step (); - } -} - -template<class o_type, class i_type> -void -gr_nco<o_type,i_type>::sincos (gr_complex *output, int noutput_items, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - float cosx, sinx; - sincos (&sinx, &cosx); - output[i] = gr_complex(cosx * ampl, sinx * ampl); - step (); - } -} -#endif /* _NCO_H_ */ diff --git a/gnuradio-core/src/lib/general/gr_prefs.cc b/gnuradio-core/src/lib/general/gr_prefs.cc deleted file mode 100644 index 8a79c3335f..0000000000 --- a/gnuradio-core/src/lib/general/gr_prefs.cc +++ /dev/null @@ -1,391 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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 <gr_prefs.h> -#include <gr_sys_paths.h> -#include <gr_constants.h> -#include <algorithm> - -#include <boost/filesystem/operations.hpp> -#include <boost/filesystem/path.hpp> -#include <boost/filesystem/fstream.hpp> -namespace fs = boost::filesystem; - -/* - * Stub implementations - */ - -static gr_prefs s_default_singleton; -static gr_prefs *s_singleton = &s_default_singleton; - -gr_prefs * -gr_prefs::singleton() -{ - return s_singleton; -} - -void -gr_prefs::set_singleton(gr_prefs *p) -{ - s_singleton = p; -} - -gr_prefs::gr_prefs() -{ - _read_files(); -} - -gr_prefs::~gr_prefs() -{ - // nop -} - -std::vector<std::string> -gr_prefs::_sys_prefs_filenames() -{ - std::vector<std::string> fnames; - - fs::path dir = gr_prefsdir(); - if(!fs::is_directory(dir)) - return fnames; - - fs::directory_iterator diritr(dir); - while(diritr != fs::directory_iterator()) { - fs::path p = *diritr++; - if(p.extension() != ".swp") - fnames.push_back(p.string()); - } - std::sort(fnames.begin(), fnames.end()); - - // Find if there is a ~/.gnuradio/config.conf file and add this to - // the end of the file list to override any preferences in the - // installed path config files. - fs::path homedir = fs::path(gr_appdata_path()); - homedir = homedir/".gnuradio/config.conf"; - if(fs::exists(homedir)) { - fnames.push_back(homedir.string()); - } - - return fnames; -} - -void -gr_prefs::_read_files() -{ - std::string config; - - std::vector<std::string> filenames = _sys_prefs_filenames(); - std::vector<std::string>::iterator sitr; - char tmp[1024]; - for(sitr = filenames.begin(); sitr != filenames.end(); sitr++) { - fs::ifstream fin(*sitr); - while(!fin.eof()) { - fin.getline(tmp, 1024); - std::string t(tmp); - // ignore empty lines or lines of just comments - if((t.size() > 0) && (t[0] != '#')) { - // remove any comments in the line - size_t hash = t.find("#"); - - // Use hash marks at the end of each segment as a delimiter - config += t.substr(0, hash) + '#'; - } - } - fin.close(); - } - - // Remove all whitespace. - config.erase(std::remove_if(config.begin(), config.end(), ::isspace), config.end()); - - // Convert the string into a map - _convert_to_map(config); -} - -void -gr_prefs::_convert_to_map(const std::string &conf) -{ - // Convert the string into an map of maps - // Map is structured as {section name: map of options} - // And options map is simply: {option name: option value} - std::string sub = conf; - size_t sec_start = sub.find("["); - while(sec_start != std::string::npos) { - sub = sub.substr(sec_start); - - size_t sec_end = sub.find("]"); - if(sec_end == std::string::npos) - throw std::runtime_error("Config file error: Mismatched section label.\n"); - - std::string sec = sub.substr(1, sec_end-1); - size_t next_sec_start = sub.find("[", sec_end); - std::string subsec = sub.substr(sec_end+1, next_sec_start-sec_end-2); - - std::transform(sec.begin(), sec.end(), sec.begin(), ::tolower); - - std::map<std::string, std::string> options_map = d_config_map[sec]; - size_t next_opt = 0; - size_t next_val = 0; - next_opt = subsec.find("#"); - while(next_opt < subsec.size()-1) { - next_val = subsec.find("=", next_opt); - std::string option = subsec.substr(next_opt+1, next_val-next_opt-1); - - next_opt = subsec.find("#", next_val); - std::string value = subsec.substr(next_val+1, next_opt-next_val-1); - - std::transform(option.begin(), option.end(), option.begin(), ::tolower); - options_map[option] = value; - } - - d_config_map[sec] = options_map; - - sec_start = sub.find("[", sec_end); - } -} - -std::string -gr_prefs::to_string() -{ - gr_config_map_itr sections; - gr_config_map_elem_itr options; - std::stringstream s; - - for(sections = d_config_map.begin(); sections != d_config_map.end(); sections++) { - s << "[" << sections->first << "]" << std::endl; - for(options = sections->second.begin(); options != sections->second.end(); options++) { - s << options->first << " = " << options->second << std::endl; - } - s << std::endl; - } - - return s.str(); -} - -void -gr_prefs::save() -{ - std::string conf = to_string(); - - fs::path homedir = fs::path(gr_appdata_path()); - homedir = homedir/".gnuradio/config.conf"; - fs::ofstream fout(homedir); - fout << conf; - fout.close(); -} - -char * -gr_prefs::option_to_env(std::string section, std::string option) -{ - std::stringstream envname; - std::string secname=section, optname=option; - - std::transform(section.begin(), section.end(), secname.begin(), ::toupper); - std::transform(option.begin(), option.end(), optname.begin(), ::toupper); - envname << "GR_CONF_" << secname << "_" << optname; - - return getenv(envname.str().c_str()); -} - -bool -gr_prefs::has_section(const std::string §ion) -{ - std::string s = section; - std::transform(section.begin(), section.end(), s.begin(), ::tolower); - return d_config_map.count(s) > 0; -} - -bool -gr_prefs::has_option(const std::string §ion, const std::string &option) -{ - if(option_to_env(section, option)) - return true; - - if(has_section(section)) { - std::string s = section; - std::transform(section.begin(), section.end(), s.begin(), ::tolower); - - std::string o = option; - std::transform(option.begin(), option.end(), o.begin(), ::tolower); - - gr_config_map_itr sec = d_config_map.find(s); - return sec->second.count(o) > 0; - } - else { - return false; - } -} - -const std::string -gr_prefs::get_string(const std::string §ion, const std::string &option, - const std::string &default_val) -{ - char *env = option_to_env(section, option); - if(env) - return std::string(env); - - if(has_option(section, option)) { - std::string s = section; - std::transform(section.begin(), section.end(), s.begin(), ::tolower); - - std::string o = option; - std::transform(option.begin(), option.end(), o.begin(), ::tolower); - - gr_config_map_itr sec = d_config_map.find(s); - gr_config_map_elem_itr opt = sec->second.find(o); - return opt->second; - } - else { - return default_val; - } -} - -void -gr_prefs::set_string(const std::string §ion, const std::string &option, - const std::string &val) -{ - std::string s = section; - std::transform(section.begin(), section.end(), s.begin(), ::tolower); - - std::string o = option; - std::transform(option.begin(), option.end(), o.begin(), ::tolower); - - std::map<std::string, std::string> opt_map = d_config_map[s]; - - opt_map[o] = val; - - d_config_map[s] = opt_map; -} - -bool -gr_prefs::get_bool(const std::string §ion, const std::string &option, bool default_val) -{ - if(has_option(section, option)) { - std::string str = get_string(section, option, ""); - if(str == "") { - return default_val; - } - std::transform(str.begin(), str.end(), str.begin(), ::tolower); - if((str == "true") || (str == "on") || (str == "1")) - return true; - else if((str == "false") || (str == "off") || (str == "0")) - return false; - else - return default_val; - } - else { - return default_val; - } -} - -void -gr_prefs::set_bool(const std::string §ion, const std::string &option, bool val) -{ - std::string s = section; - std::transform(section.begin(), section.end(), s.begin(), ::tolower); - - std::string o = option; - std::transform(option.begin(), option.end(), o.begin(), ::tolower); - - std::map<std::string, std::string> opt_map = d_config_map[s]; - - std::stringstream sstr; - sstr << (val == true); - opt_map[o] = sstr.str(); - - d_config_map[s] = opt_map; -} - -long -gr_prefs::get_long(const std::string §ion, const std::string &option, long default_val) -{ - if(has_option(section, option)) { - std::string str = get_string(section, option, ""); - if(str == "") { - return default_val; - } - std::stringstream sstr(str); - long n; - sstr >> n; - return n; - } - else { - return default_val; - } -} - -void -gr_prefs::set_long(const std::string §ion, const std::string &option, long val) -{ - std::string s = section; - std::transform(section.begin(), section.end(), s.begin(), ::tolower); - - std::string o = option; - std::transform(option.begin(), option.end(), o.begin(), ::tolower); - - std::map<std::string, std::string> opt_map = d_config_map[s]; - - std::stringstream sstr; - sstr << val; - opt_map[o] = sstr.str(); - - d_config_map[s] = opt_map; -} - -double -gr_prefs::get_double(const std::string §ion, const std::string &option, double default_val) -{ - if(has_option(section, option)) { - std::string str = get_string(section, option, ""); - if(str == "") { - return default_val; - } - std::stringstream sstr(str); - double n; - sstr >> n; - return n; - } - else { - return default_val; - } -} - -void -gr_prefs::set_double(const std::string §ion, const std::string &option, double val) -{ - std::string s = section; - std::transform(section.begin(), section.end(), s.begin(), ::tolower); - - std::string o = option; - std::transform(option.begin(), option.end(), o.begin(), ::tolower); - - std::map<std::string, std::string> opt_map = d_config_map[s]; - - std::stringstream sstr; - sstr << val; - opt_map[o] = sstr.str(); - - d_config_map[s] = opt_map; -} diff --git a/gnuradio-core/src/lib/general/gr_prefs.h b/gnuradio-core/src/lib/general/gr_prefs.h deleted file mode 100644 index 4e11d04c5b..0000000000 --- a/gnuradio-core/src/lib/general/gr_prefs.h +++ /dev/null @@ -1,143 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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_PREFS_H -#define INCLUDED_GR_PREFS_H - -#include <gr_core_api.h> -#include <string> -#include <map> -#include <gruel/thread.h> - -typedef std::map< std::string, std::map<std::string, std::string> > gr_config_map_t; -typedef std::map< std::string, std::map<std::string, std::string> >::iterator gr_config_map_itr; -typedef std::map<std::string, std::string> gr_config_map_elem_t; -typedef std::map<std::string, std::string>::iterator gr_config_map_elem_itr; - -/*! - * \brief Base class for representing user preferences a la windows INI files. - * \ingroup misc - * - * The real implementation is in Python, and is accessable from C++ - * via the magic of SWIG directors. - */ - -class GR_CORE_API gr_prefs -{ -public: - static gr_prefs *singleton(); - static void set_singleton(gr_prefs *p); - - gr_prefs(); - virtual ~gr_prefs(); - - /*! - * \brief Returns the configuration options as a string. - */ - std::string to_string(); - - /*! - * \brief Saves the configuration settings to ${HOME}/.gnuradio/config.conf. - * - * WARNING: this will overwrite your current config.conf file. - */ - void save(); - - /*! - * \brief Does \p section exist? - */ - virtual bool has_section(const std::string §ion); - - /*! - * \brief Does \p option exist? - */ - virtual bool has_option(const std::string §ion, const std::string &option); - - /*! - * \brief If option exists return associated value; else default_val. - */ - virtual const std::string get_string(const std::string §ion, - const std::string &option, - const std::string &default_val); - - /*! - * \brief Set or add a string \p option to \p section with value \p val. - */ - virtual void set_string(const std::string §ion, - const std::string &option, - const std::string &val); - - /*! - * \brief If option exists and value can be converted to bool, return it; else default_val. - */ - virtual bool get_bool(const std::string §ion, - const std::string &option, - bool default_val); - - /*! - * \brief Set or add a bool \p option to \p section with value \p val. - */ - virtual void set_bool(const std::string §ion, - const std::string &option, - bool val); - - /*! - * \brief If option exists and value can be converted to long, return it; else default_val. - */ - virtual long get_long(const std::string §ion, - const std::string &option, - long default_val); - - /*! - * \brief Set or add a long \p option to \p section with value \p val. - */ - virtual void set_long(const std::string §ion, - const std::string &option, - long val); - - /*! - * \brief If option exists and value can be converted to double, return it; else default_val. - */ - virtual double get_double(const std::string §ion, - const std::string &option, - double default_val); - - /*! - * \brief Set or add a double \p option to \p section with value \p val. - */ - virtual void set_double(const std::string §ion, - const std::string &option, - double val); - - protected: - virtual std::vector<std::string> _sys_prefs_filenames(); - virtual void _read_files(); - virtual void _convert_to_map(const std::string &conf); - virtual char * option_to_env(std::string section, std::string option); - - private: - gruel::mutex d_mutex; - gr_config_map_t d_config_map; -}; - - -#endif /* INCLUDED_GR_PREFS_H */ diff --git a/gnuradio-core/src/lib/general/gr_prefs.i b/gnuradio-core/src/lib/general/gr_prefs.i deleted file mode 100644 index adf567a135..0000000000 --- a/gnuradio-core/src/lib/general/gr_prefs.i +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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. - */ - -class gr_prefs -{ -public: - static gr_prefs *singleton(); - static void set_singleton(gr_prefs *p); - - virtual ~gr_prefs(); - - std::string to_string(); - void save(); - - virtual bool has_section(const std::string §ion); - - virtual bool has_option(const std::string §ion, const std::string &option); - - virtual const std::string get_string(const std::string §ion, - const std::string &option, - const std::string &default_val); - virtual void set_string(const std::string §ion, - const std::string &option, - const std::string &val); - - virtual bool get_bool(const std::string §ion, - const std::string &option, - bool default_val); - virtual void set_bool(const std::string §ion, - const std::string &option, - bool val); - - virtual long get_long(const std::string §ion, - const std::string &option, - long default_val); - virtual void set_long(const std::string §ion, - const std::string &option, - long val); - - virtual double get_double(const std::string §ion, - const std::string &option, - double default_val); - virtual void set_double(const std::string §ion, - const std::string &option, - double val); -}; - diff --git a/gnuradio-core/src/lib/general/gr_random.cc b/gnuradio-core/src/lib/general/gr_random.cc deleted file mode 100644 index 323839acc7..0000000000 --- a/gnuradio-core/src/lib/general/gr_random.cc +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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. - */ - -/* - * Copyright 1997 Massachusetts Institute of Technology - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. M.I.T. makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <math.h> -#include <gr_random.h> - -#define IA 16807 -#define IM 2147483647 -#define AM (1.0/IM) -#define IQ 127773 -#define IR 2836 -#define NDIV (1+(IM-1)/NTAB) -#define EPS 1.2e-7 -#define RNMX (1.0-EPS) - - -gr_random::gr_random (long seed) -{ - reseed (seed); -} - -void -gr_random::reseed (long seed) -{ - d_seed = seed; - d_iy = 0; - for (int i = 0; i < NTAB; i++) - d_iv[i] = 0; - d_iset = 0; - d_gset = 0; -} - -/* - * This looks like it returns a uniform random deviate between 0.0 and 1.0 - * It looks similar to code from "Numerical Recipes in C". - */ -float gr_random::ran1() -{ - int j; - long k; - float temp; - - if (d_seed <= 0 || !d_iy) { - if (-d_seed < 1) - d_seed=1; - else - d_seed = -d_seed; - for (j=NTAB+7;j>=0;j--) { - k=d_seed/IQ; - d_seed=IA*(d_seed-k*IQ)-IR*k; - if (d_seed < 0) - d_seed += IM; - if (j < NTAB) - d_iv[j] = d_seed; - } - d_iy=d_iv[0]; - } - k=(d_seed)/IQ; - d_seed=IA*(d_seed-k*IQ)-IR*k; - if (d_seed < 0) - d_seed += IM; - j=d_iy/NDIV; - d_iy=d_iv[j]; - d_iv[j] = d_seed; - temp=AM * d_iy; - if (temp > RNMX) - temp = RNMX; - return temp; -} - -/* - * Returns a normally distributed deviate with zero mean and variance 1. - * Also looks like it's from "Numerical Recipes in C". - */ -float gr_random::gasdev() -{ - float fac,rsq,v1,v2; - d_iset = 1 - d_iset; - if (d_iset) { - do { - v1=2.0*ran1()-1.0; - v2=2.0*ran1()-1.0; - rsq=v1*v1+v2*v2; - } while (rsq >= 1.0 || rsq == 0.0); - fac= sqrt(-2.0*log(rsq)/rsq); - d_gset=v1*fac; - return v2*fac; - } - return d_gset; -} - -/* - * Copied from The KC7WW / OH2BNS Channel Simulator - * FIXME Need to check how good this is at some point - */ - -float gr_random::laplacian() -{ - float z = ran1(); - if (z < 0.5) - return log(2.0 * z) / M_SQRT2; - else - return -log(2.0 * (1.0 - z)) / M_SQRT2; -} - -/* - * Copied from The KC7WW / OH2BNS Channel Simulator - * FIXME Need to check how good this is at some point - */ - - // 5 => scratchy, 8 => Geiger - -float gr_random::impulse(float factor = 5) -{ - float z = -M_SQRT2 * log(ran1()); - if (fabsf(z) <= factor) - return 0.0; - else - return z; -} - -/* - * Complex rayleigh is really gaussian I and gaussian Q - * It can also be generated by real rayleigh magnitude and - * uniform random angle - * Adapted from The KC7WW / OH2BNS Channel Simulator - * FIXME Need to check how good this is at some point - */ - -gr_complex gr_random::rayleigh_complex() -{ - return gr_complex(gasdev(),gasdev()); -} - -/* Other option - mag = rayleigh(); - ang = 2.0 * M_PI * RNG(); - *Rx = rxx * cos(z); - *Iy = rxx * sin(z); -*/ - - -float gr_random::rayleigh() -{ - return sqrt(-2.0 * log(ran1())); -} diff --git a/gnuradio-core/src/lib/general/gr_random.h b/gnuradio-core/src/lib/general/gr_random.h deleted file mode 100644 index 96a8f44180..0000000000 --- a/gnuradio-core/src/lib/general/gr_random.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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_RANDOM_H -#define INCLUDED_GR_RANDOM_H - -#include <gr_core_api.h> -#include <gr_complex.h> - -/*! - * \brief pseudo random number generator - * \ingroup math_blk - */ -class GR_CORE_API gr_random { -protected: - static const int NTAB = 32; - long d_seed; - long d_iy; - long d_iv[NTAB]; - int d_iset; - float d_gset; - - -public: - gr_random (long seed=3021); - - void reseed (long seed); - - /*! - * \brief uniform random deviate in the range [0.0, 1.0) - */ - float ran1 (); - - /*! - * \brief normally distributed deviate with zero mean and variance 1 - */ - float gasdev (); - - float laplacian (); - float impulse (float factor); - float rayleigh (); - gr_complex rayleigh_complex (); -}; - -#endif /* INCLUDED_GR_RANDOM_H */ - diff --git a/gnuradio-core/src/lib/general/gr_reverse.cc b/gnuradio-core/src/lib/general/gr_reverse.cc deleted file mode 100644 index 08c588cb55..0000000000 --- a/gnuradio-core/src/lib/general/gr_reverse.cc +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_reverse.h> - - -std::vector<float> -gr_reverse (const std::vector<float> &taps) -{ - int size = taps.size (); - std::vector<float> new_taps(size); - - if (size == 0) - return new_taps; - - for (int i = 0; i < size; i++) - new_taps[i] = taps[size - i - 1]; - - return new_taps; -} - - -std::vector<gr_complex> -gr_reverse (const std::vector<gr_complex> &taps) -{ - int size = taps.size (); - std::vector<gr_complex> new_taps(size); - - if (size == 0) - return new_taps; - - for (int i = 0; i < size; i++) - new_taps[i] = taps[size - i - 1]; - - return new_taps; -} - diff --git a/gnuradio-core/src/lib/general/gr_reverse.h b/gnuradio-core/src/lib/general/gr_reverse.h deleted file mode 100644 index 15bf3cb73a..0000000000 --- a/gnuradio-core/src/lib/general/gr_reverse.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_REVERSE_H -#define INCLUDED_GR_REVERSE_H - -#include <gr_core_api.h> -#include <vector> -#include <gr_complex.h> - -// reverse the order of taps -std::vector<float> gr_reverse (const std::vector<float> &taps); -std::vector<gr_complex> gr_reverse (const std::vector<gr_complex> &taps); - - -#endif /* INCLUDED_GR_REVERSE_H */ diff --git a/gnuradio-core/src/lib/general/gr_sincos.c b/gnuradio-core/src/lib/general/gr_sincos.c deleted file mode 100644 index a8d01b0da4..0000000000 --- a/gnuradio-core/src/lib/general/gr_sincos.c +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,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 - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE // ask for GNU extensions if available -#endif - -#include <gr_sincos.h> -#include <math.h> - -// ---------------------------------------------------------------- - -#if defined (HAVE_SINCOS) - -void -gr_sincos (double x, double *sinx, double *cosx) -{ - sincos (x, sinx, cosx); -} - -#else - -void -gr_sincos (double x, double *sinx, double *cosx) -{ - *sinx = sin (x); - *cosx = cos (x); -} - -#endif - -// ---------------------------------------------------------------- - -#if defined (HAVE_SINCOSF) - -void -gr_sincosf (float x, float *sinx, float *cosx) -{ - sincosf (x, sinx, cosx); -} - -#elif defined (HAVE_SINF) && defined (HAVE_COSF) - -void -gr_sincosf (float x, float *sinx, float *cosx) -{ - *sinx = sinf (x); - *cosx = cosf (x); -} - -#else - -void -gr_sincosf (float x, float *sinx, float *cosx) -{ - *sinx = sin (x); - *cosx = cos (x); -} - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sincos.h b/gnuradio-core/src/lib/general/gr_sincos.h deleted file mode 100644 index 516f43437a..0000000000 --- a/gnuradio-core/src/lib/general/gr_sincos.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,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_SINCOS_H -#define INCLUDED_GR_SINCOS_H - -#include <gr_core_api.h> - -#ifdef __cplusplus -extern "C" { -#endif - -// compute sine and cosine at the same time - -GR_CORE_API void gr_sincos (double x, double *sin, double *cos); -GR_CORE_API void gr_sincosf (float x, float *sin, float *cos); - -#ifdef __cplusplus -}; -#endif - -#endif /* INCLUDED_GR_SINCOS_H */ diff --git a/gnuradio-core/src/lib/general/gr_test.cc b/gnuradio-core/src/lib/general/gr_test.cc deleted file mode 100644 index cd5ef83611..0000000000 --- a/gnuradio-core/src/lib/general/gr_test.cc +++ /dev/null @@ -1,177 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2008,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_test.h> -#include <gr_io_signature.h> -#include <stdexcept> -#include <iostream> -#include <string.h> - -gr_test_sptr gr_make_test (const std::string &name, - int min_inputs, int max_inputs, unsigned int sizeof_input_item, - int min_outputs, int max_outputs, unsigned int sizeof_output_item, - unsigned int history,unsigned int output_multiple,double relative_rate, - bool fixed_rate,gr_consume_type_t cons_type, gr_produce_type_t prod_type) -{ - return gnuradio::get_initial_sptr(new gr_test (name, min_inputs,max_inputs,sizeof_input_item, - min_outputs,max_outputs,sizeof_output_item, - history,output_multiple,relative_rate,fixed_rate,cons_type, prod_type)); -} - - gr_test::gr_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item, - int min_outputs, int max_outputs, unsigned int sizeof_output_item, - unsigned int history,unsigned int output_multiple,double relative_rate, - bool fixed_rate,gr_consume_type_t cons_type, gr_produce_type_t prod_type): gr_block (name, - gr_make_io_signature (min_inputs, max_inputs, sizeof_input_item), - gr_make_io_signature (min_outputs, max_outputs, sizeof_output_item)), - d_sizeof_input_item(sizeof_input_item), - d_sizeof_output_item(sizeof_output_item), - d_check_topology(true), - d_consume_type(cons_type), - d_min_consume(0), - d_max_consume(0), - d_produce_type(prod_type), - d_min_produce(0), - d_max_produce(0) - { - set_history(history); - set_output_multiple(output_multiple); - set_relative_rate(relative_rate); - set_fixed_rate(fixed_rate); - } - -int -gr_test::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) - { - //touch all inputs and outputs to detect segfaults - unsigned ninputs = input_items.size (); - unsigned noutputs= output_items.size(); - for (unsigned i = 0; i < ninputs; i++) - { - char * in=(char *)input_items[i]; - if (ninput_items[i]< (int)(noutput_items+history())) - { - std::cerr << "ERROR: ninput_items[" << i << "] < noutput_items+history()" << std::endl; - std::cerr << "ninput_items[" << i << "] = " << ninput_items[i] << std::endl; - std::cerr << "noutput_items+history() = " << noutput_items+history() << std::endl; - std::cerr << "noutput_items = " << noutput_items << std::endl; - std::cerr << "history() = " << history() << std::endl; - throw std::runtime_error ("gr_test"); - } else - { - for (int j=0;j<ninput_items[i];j++) - { - //Touch every available input_item - //We use a class variable to avoid the compiler to optimize this away - for(unsigned int k=0;k<d_sizeof_input_item;k++) - d_temp= in[j*d_sizeof_input_item+k]; - } - switch (d_consume_type) - { - case CONSUME_NOUTPUT_ITEMS: - consume(i,noutput_items); - break; - case CONSUME_NOUTPUT_ITEMS_LIMIT_MAX: - consume(i,std::min(noutput_items,d_max_consume)); - break; - case CONSUME_NOUTPUT_ITEMS_LIMIT_MIN: - consume(i,std::min(std::max(noutput_items,d_min_consume),ninput_items[i])); - break; - case CONSUME_ALL_AVAILABLE: - consume(i,ninput_items[i]); - break; - case CONSUME_ALL_AVAILABLE_LIMIT_MAX: - consume(i,std::min(ninput_items[i],d_max_consume)); - break; -/* //This could result in segfault, uncomment if you want to test this - case CONSUME_ALL_AVAILABLE_LIMIT_MIN: - consume(i,std::max(ninput_items[i],d_max_consume)); - break;*/ - case CONSUME_ZERO: - consume(i,0); - break; - case CONSUME_ONE: - consume(i,1); - break; - case CONSUME_MINUS_ONE: - consume(i,-1); - break; - default: - consume(i,noutput_items); - } - } - } - for (unsigned i = 0; i < noutputs; i++) - { - char * out=(char *)output_items[i]; - { - for (int j=0;j<noutput_items;j++) - { - //Touch every available output_item - for(unsigned int k=0;k<d_sizeof_output_item;k++) - out[j*d_sizeof_input_item+k]=0; - } - } - } - //Now copy input to output until max ninputs or max noutputs is reached - int common_nports=std::min(ninputs,noutputs); - if(d_sizeof_output_item==d_sizeof_input_item) - for (int i = 0; i < common_nports; i++) - { - memcpy(output_items[i],input_items[i],noutput_items*d_sizeof_input_item); - } - int noutput_items_produced=0; - switch (d_produce_type){ - case PRODUCE_NOUTPUT_ITEMS: - noutput_items_produced=noutput_items; - break; - case PRODUCE_NOUTPUT_ITEMS_LIMIT_MAX: - noutput_items_produced=std::min(noutput_items,d_max_produce); - break; -/* //This could result in segfault, uncomment if you want to test this - case PRODUCE_NOUTPUT_ITEMS_LIMIT_MIN: - noutput_items_produced=std::max(noutput_items,d_min_produce); - break;*/ - case PRODUCE_ZERO: - noutput_items_produced=0; - break; - case PRODUCE_ONE: - noutput_items_produced=1; - break; - case PRODUCE_MINUS_ONE: - noutput_items_produced=-1; - break; - default: - noutput_items_produced=noutput_items; - } - return noutput_items_produced; - } - - - diff --git a/gnuradio-core/src/lib/general/gr_test.h b/gnuradio-core/src/lib/general/gr_test.h deleted file mode 100644 index caeba4c511..0000000000 --- a/gnuradio-core/src/lib/general/gr_test.h +++ /dev/null @@ -1,195 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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_TEST_H -#define INCLUDED_GR_TEST_H - -#include <gr_core_api.h> -#include <gr_block.h> -#include <string> -#include "gr_test_types.h" - -class gr_test; -typedef boost::shared_ptr<gr_test> gr_test_sptr; - -// public constructor -GR_CORE_API gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"), - int min_inputs=1, int max_inputs=1, unsigned int sizeof_input_item=1, - int min_outputs=1, int max_outputs=1, unsigned int sizeof_output_item=1, - unsigned int history=1,unsigned int output_multiple=1,double relative_rate=1.0, - bool fixed_rate=true,gr_consume_type_t cons_type=CONSUME_NOUTPUT_ITEMS, gr_produce_type_t prod_type=PRODUCE_NOUTPUT_ITEMS); - -/*! - * \brief Test class for testing runtime system (setting up buffers and such.) - * \ingroup misc - * - * This block does not do any usefull actual data processing. - * It just exposes setting all standard block parameters using the contructor or public methods. - * - * This block can be usefull when testing the runtime system. - * You can force this block to have a large history, decimation - * factor and/or large output_multiple. - * The runtime system should detect this and create large enough buffers - * all through the signal chain. - */ -class GR_CORE_API gr_test : public gr_block { - - public: - - ~gr_test (){} - -int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - // ---------------------------------------------------------------- - // override these to define your behavior - // ---------------------------------------------------------------- - - /*! - * \brief Estimate input requirements given output request - * - * \param noutput_items number of output items to produce - * \param ninput_items_required number of input items required on each input stream - * - * Given a request to product \p noutput_items, estimate the number of - * data items required on each input stream. The estimate doesn't have - * to be exact, but should be close. - */ - void forecast (int noutput_items, - gr_vector_int &ninput_items_required) - { - unsigned ninputs = ninput_items_required.size (); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = (int)((double)noutput_items / relative_rate()) + (int)history(); - } - - - /*! - * \brief Force check topology to return true or false. - * - * \param check_topology value to return when check_topology is called (true or false) - * default check_topology returns true - * - */ - void set_check_topology (bool check_topology){ d_check_topology=check_topology;} - - /*! - * \brief Confirm that ninputs and noutputs is an acceptable combination. - * - * \param ninputs number of input streams connected - * \param noutputs number of output streams connected - * - * \returns true if this is a valid configuration for this block. - * - * This function is called by the runtime system whenever the - * topology changes. Most classes do not need to override this. - * This check is in addition to the constraints specified by the input - * and output gr_io_signatures. - */ - bool check_topology (int ninputs, int noutputs) { return d_check_topology;} - - // ---------------------------------------------------------------- - /* - * The following two methods provide special case info to the - * scheduler in the event that a block has a fixed input to output - * ratio. gr_sync_block, gr_sync_decimator and gr_sync_interpolator - * override these. If you're fixed rate, subclass one of those. - */ - /*! - * \brief Given ninput samples, return number of output samples that will be produced. - * N.B. this is only defined if fixed_rate returns true. - * Generally speaking, you don't need to override this. - */ - int fixed_rate_ninput_to_noutput(int ninput) { return (int)((double)ninput/relative_rate()); } - - /*! - * \brief Given noutput samples, return number of input samples required to produce noutput. - * N.B. this is only defined if fixed_rate returns true. - */ - int fixed_rate_noutput_to_ninput(int noutput) { return (int)((double)noutput*relative_rate()); } - - /*! - * \brief Set if fixed rate should return true. - * N.B. This is normally a private method but we make it available here as public. - */ - void set_fixed_rate_public(bool fixed_rate){ set_fixed_rate(fixed_rate);} - - /*! - * \brief Set the consume pattern. - * - * \param cons_type which consume pattern to use - */ - void set_consume_type (gr_consume_type_t cons_type) { d_consume_type=cons_type;} - - /*! - * \brief Set the consume limit. - * - * \param limit min or maximum items to consume (depending on consume_type) - */ - void set_consume_limit (unsigned int limit) { d_min_consume=limit; d_max_consume=limit;} - - /*! - * \brief Set the produce pattern. - * - * \param prod_type which produce pattern to use - */ - void set_produce_type (gr_produce_type_t prod_type) { d_produce_type=prod_type;} - - /*! - * \brief Set the produce limit. - * - * \param limit min or maximum items to produce (depending on produce_type) - */ - void set_produce_limit (unsigned int limit) { d_min_produce=limit; d_max_produce=limit;} - - // ---------------------------------------------------------------------------- - - - - protected: - unsigned int d_sizeof_input_item; - unsigned int d_sizeof_output_item; - bool d_check_topology; - char d_temp; - gr_consume_type_t d_consume_type; - int d_min_consume; - int d_max_consume; - gr_produce_type_t d_produce_type; - int d_min_produce; - int d_max_produce; - gr_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item, - int min_outputs, int max_outputs, unsigned int sizeof_output_item, - unsigned int history,unsigned int output_multiple,double relative_rate, - bool fixed_rate,gr_consume_type_t cons_type, gr_produce_type_t prod_type); - - - - friend GR_CORE_API gr_test_sptr gr_make_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item, - int min_outputs, int max_outputs, unsigned int sizeof_output_item, - unsigned int history,unsigned int output_multiple,double relative_rate, - bool fixed_rate,gr_consume_type_t cons_type, gr_produce_type_t prod_type); -}; - - - -#endif /* INCLUDED_GR_TEST_H */ diff --git a/gnuradio-core/src/lib/general/gr_test.i b/gnuradio-core/src/lib/general/gr_test.i deleted file mode 100644 index d810250116..0000000000 --- a/gnuradio-core/src/lib/general/gr_test.i +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,test); - - -class gr_test; -typedef boost::shared_ptr<gr_test> gr_test_sptr; - - -// public constructor -gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"), - int min_inputs=1, int max_inputs=1, unsigned int sizeof_input_item=1, - int min_outputs=1, int max_outputs=1, unsigned int sizeof_output_item=1, - unsigned int history=1,unsigned int output_multiple=1,double relative_rate=1.0, - bool fixed_rate=true,gr_consume_type_t cons_type=CONSUME_NOUTPUT_ITEMS, gr_produce_type_t prod_type=PRODUCE_NOUTPUT_ITEMS); - - -class gr_test : public gr_block { - - public: - - ~gr_test (); - void forecast (int noutput_items, - gr_vector_int &ninput_items_required); - void set_check_topology (bool check_topology); - bool check_topology (int ninputs, int noutputs); - int fixed_rate_ninput_to_noutput(int ninput); - int fixed_rate_noutput_to_ninput(int noutput); - void set_fixed_rate_public(bool fixed_rate); - void set_consume_type (gr_consume_type_t cons_type); - void set_consume_limit (unsigned int limit); - void set_produce_type (gr_produce_type_t prod_type); - void set_produce_limit (unsigned int limit); - - protected: - gr_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item, - int min_outputs, int max_outputs, unsigned int sizeof_output_item, - unsigned int history,unsigned int output_multiple,double relative_rate, - bool fixed_rate,gr_consume_type_t cons_type, gr_produce_type_t prod_type); - -}; - - - diff --git a/gnuradio-core/src/lib/general/gr_test_types.h b/gnuradio-core/src/lib/general/gr_test_types.h deleted file mode 100644 index 04f38f7b26..0000000000 --- a/gnuradio-core/src/lib/general/gr_test_types.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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_TEST_TYPES_H -#define INCLUDED_GR_TEST_TYPES_H - -typedef enum { - CONSUME_NOUTPUT_ITEMS=0, - CONSUME_NOUTPUT_ITEMS_LIMIT_MAX=1, - CONSUME_NOUTPUT_ITEMS_LIMIT_MIN=2, - CONSUME_ALL_AVAILABLE=3, - CONSUME_ALL_AVAILABLE_LIMIT_MAX=4, - /*CONSUME_ALL_AVAILABLE_LIMIT_MIN=5,*/ - CONSUME_ZERO=6, - CONSUME_ONE=7, - CONSUME_MINUS_ONE=8 - } gr_consume_type_t; - -typedef enum { - PRODUCE_NOUTPUT_ITEMS=0, - PRODUCE_NOUTPUT_ITEMS_LIMIT_MAX=1, - /*PRODUCE_NOUTPUT_ITEMS_LIMIT_MIN=2,*/ - PRODUCE_ZERO=6, - PRODUCE_ONE=7, - PRODUCE_MINUS_ONE=8 - } gr_produce_type_t; - -#endif /* INCLUDED_GR_TEST_TYPES_H */ diff --git a/gnuradio-core/src/lib/general/gr_vco.h b/gnuradio-core/src/lib/general/gr_vco.h deleted file mode 100644 index 3ceaf15dd4..0000000000 --- a/gnuradio-core/src/lib/general/gr_vco.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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 _GR_VCO_H_ -#define _GR_VCO_H_ - - -#include <vector> -#include <gr_sincos.h> -#include <cmath> -#include <gr_complex.h> - -/*! - * \brief base class template for Voltage Controlled Oscillator (VCO) - * \ingroup misc - */ - -//FIXME Eventually generalize this to fixed point - -template<class o_type, class i_type> -class gr_vco { -public: - gr_vco () : d_phase (0) {} - - virtual ~gr_vco () {} - - // radians - void set_phase (double angle) { - d_phase = angle; - } - - void adjust_phase (double delta_phase) { - d_phase += delta_phase; - if (fabs (d_phase) > M_PI){ - - while (d_phase > M_PI) - d_phase -= 2*M_PI; - - while (d_phase < -M_PI) - d_phase += 2*M_PI; - } - } - - double get_phase () const { return d_phase; } - - // compute sin and cos for current phase angle - void sincos (float *sinx, float *cosx) const; - - // compute cos or sin for current phase angle - float cos () const { return std::cos (d_phase); } - float sin () const { return std::sin (d_phase); } - - // compute a block at a time - void cos (float *output, const float *input, int noutput_items, double k, double ampl = 1.0); - -protected: - double d_phase; -}; - -template<class o_type, class i_type> -void -gr_vco<o_type,i_type>::sincos (float *sinx, float *cosx) const -{ - gr_sincosf (d_phase, sinx, cosx); -} - -template<class o_type, class i_type> -void -gr_vco<o_type,i_type>::cos (float *output, const float *input, int noutput_items, double k, double ampl) -{ - for (int i = 0; i < noutput_items; i++){ - output[i] = cos() * ampl; - adjust_phase(input[i] * k); - } -} -#endif /* _GR_VCO_H_ */ diff --git a/gnuradio-core/src/lib/general/gri_debugger_hook.cc b/gnuradio-core/src/lib/general/gri_debugger_hook.cc deleted file mode 100644 index d9270c435f..0000000000 --- a/gnuradio-core/src/lib/general/gri_debugger_hook.cc +++ /dev/null @@ -1,29 +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 <gri_debugger_hook.h> - -void -gri_debugger_hook () -{ - // nop. set a breakpoint here -} diff --git a/gnuradio-core/src/lib/general/gri_debugger_hook.h b/gnuradio-core/src/lib/general/gri_debugger_hook.h deleted file mode 100644 index c871c7bf67..0000000000 --- a/gnuradio-core/src/lib/general/gri_debugger_hook.h +++ /dev/null @@ -1,30 +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. - */ - -#ifndef INCLUDED_GRI_DEBUGGER_HOOK_H -#define INCLUDED_GRI_DEBUGGER_HOOK_H - -#include <gr_core_api.h> - -GR_CORE_API void gri_debugger_hook (); - -#endif /* INCLUDED_GRI_DEBUGGER_HOOK_H */
\ No newline at end of file diff --git a/gnuradio-core/src/lib/general/malloc16.c b/gnuradio-core/src/lib/general/malloc16.c deleted file mode 100644 index 2cc6135e77..0000000000 --- a/gnuradio-core/src/lib/general/malloc16.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Wrapper functions for malloc/free that force 16-byte alignment - * See http://perso.club-internet.fr/matmac/sourcesc.htm - - * Copyright 2001 Phil Karn, KA9Q - * May be used under the terms of the GNU Public License (GPL) - */ - -#include "malloc16.h" -#include <string.h> - -void *malloc16Align(int size){ - void *p; - void **p1; - - if((p = malloc(size+31)) == NULL) - return NULL; - - /* Round up to next 16-byte boundary */ - p1 = (void **)(((long)p + 31) & (~15)); - - /* Stash actual start of block just before ptr we return */ - p1[-1] = p; - - /* Return 16-byte aligned address */ - return (void *)p1; -} - -void *calloc16Align(size_t nmemb,size_t size){ - int nbytes; - void *p; - - nbytes = nmemb*size; - if((p = malloc16Align(nbytes)) == NULL) - return NULL; - - memset(p,0,nbytes); - return p; -} - -void free16Align(void *p){ - - if(p != NULL){ - /* Retrieve pointer to actual start of block and free it */ - free(((void **)p)[-1]); - } -} diff --git a/gnuradio-core/src/lib/general/malloc16.h b/gnuradio-core/src/lib/general/malloc16.h deleted file mode 100644 index eaa32c6251..0000000000 --- a/gnuradio-core/src/lib/general/malloc16.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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_core_api.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdlib.h> - -GR_CORE_API void *malloc16Align(int size); -GR_CORE_API void *calloc16Align(size_t nmemb,size_t size); -GR_CORE_API void free16Align(void *p); - -#ifdef __cplusplus -} -#endif diff --git a/gnuradio-core/src/lib/general/qa_general.cc b/gnuradio-core/src/lib/general/qa_general.cc deleted file mode 100644 index 121551b050..0000000000 --- a/gnuradio-core/src/lib/general/qa_general.cc +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2002 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 class gathers together all the test cases for the gr - * directory into a single test suite. As you create new test cases, - * add them here. - */ - -#include <qa_general.h> -#include <qa_gr_circular_file.h> -#include <qa_gr_fxpt.h> -#include <qa_gr_fxpt_nco.h> -#include <qa_gr_fxpt_vco.h> -#include <qa_gr_math.h> -#include <qa_sincos.h> - -CppUnit::TestSuite * -qa_general::suite () -{ - CppUnit::TestSuite *s = new CppUnit::TestSuite ("general"); - - s->addTest (qa_gr_circular_file::suite ()); - s->addTest (qa_gr_fxpt::suite ()); - s->addTest (qa_gr_fxpt_nco::suite ()); - s->addTest (qa_gr_fxpt_vco::suite ()); - s->addTest (qa_gr_math::suite ()); - s->addTest(gr::analog::qa_sincos::suite()); - - return s; -} diff --git a/gnuradio-core/src/lib/general/qa_general.h b/gnuradio-core/src/lib/general/qa_general.h deleted file mode 100644 index bf52cddc1a..0000000000 --- a/gnuradio-core/src/lib/general/qa_general.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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 _QA_GENERAL_H_ -#define _QA_GENERAL_H_ - -#include <gruel/attributes.h> -#include <cppunit/TestSuite.h> - -//! collect all the tests for the gr directory - -class __GR_ATTR_EXPORT qa_general { - public: - //! return suite of tests for all of gr directory - static CppUnit::TestSuite *suite (); -}; - - -#endif /* _QA_GENERAL_H_ */ diff --git a/gnuradio-core/src/lib/general/qa_gr_circular_file.cc b/gnuradio-core/src/lib/general/qa_gr_circular_file.cc deleted file mode 100644 index 243e44784b..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_circular_file.cc +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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 <qa_gr_circular_file.h> -#include <gr_circular_file.h> -#include <cppunit/TestAssert.h> -#include <iostream> -#include <stdio.h> -#include <unistd.h> - -static const char *test_file = "qa_gr_circular_file.data"; -static const int BUFFER_SIZE = 8192; -static const int NWRITE = 8192 * 9 / 8; - -void -qa_gr_circular_file::t1 () -{ -#ifdef HAVE_MMAP - gr_circular_file *cf_writer; - gr_circular_file *cf_reader; - - // write the data... - - cf_writer = new gr_circular_file (test_file, true, BUFFER_SIZE * sizeof (short)); - - short sd; - for (int i = 0; i < NWRITE; i++){ - sd = i; - cf_writer->write (&sd, sizeof (sd)); - } - - delete cf_writer; - - // now read it back... - - cf_reader = new gr_circular_file (test_file); - for (int i = 0; i < BUFFER_SIZE; i++){ - int n = cf_reader->read (&sd, sizeof (sd)); - CPPUNIT_ASSERT_EQUAL ((int) sizeof (sd), n); - CPPUNIT_ASSERT_EQUAL (NWRITE - BUFFER_SIZE + i, (int) sd); - } - - int n = cf_reader->read (&sd, sizeof (sd)); - CPPUNIT_ASSERT_EQUAL (0, n); - - delete cf_reader; - unlink (test_file); -#endif // HAVE_MMAP -} - diff --git a/gnuradio-core/src/lib/general/qa_gr_circular_file.h b/gnuradio-core/src/lib/general/qa_gr_circular_file.h deleted file mode 100644 index df35ab077b..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_circular_file.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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 _QA_GR_CIRCULAR_FILE_H_ -#define _QA_GR_CIRCULAR_FILE_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_gr_circular_file : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_gr_circular_file); - CPPUNIT_TEST (t1); - CPPUNIT_TEST_SUITE_END (); - - private: - void t1 (); - -}; - - -#endif /* _QA_GR_CIRCULAR_FILE_H_ */ diff --git a/gnuradio-core/src/lib/general/qa_gr_fxpt.cc b/gnuradio-core/src/lib/general/qa_gr_fxpt.cc deleted file mode 100644 index 7eac0d8964..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_fxpt.cc +++ /dev/null @@ -1,103 +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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <qa_gr_fxpt.h> -#include <gr_fxpt.h> -#include <cppunit/TestAssert.h> -#include <iostream> -#include <stdio.h> -#include <unistd.h> -#include <math.h> - -static const float SIN_COS_TOLERANCE = 1e-5; - -void -qa_gr_fxpt::t0 () -{ - CPPUNIT_ASSERT_DOUBLES_EQUAL (M_PI/2, gr_fxpt::fixed_to_float (0x40000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL (0.0, gr_fxpt::fixed_to_float (0x00000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL (-M_PI, gr_fxpt::fixed_to_float (0x80000000), SIN_COS_TOLERANCE); - - if (0){ - /* - * These are disabled because of some precision issues. - * - * Different compilers seem to have different opinions on whether - * the calulations are done single or double (or extended) - * precision. Any of the answers are fine for our real purpose, but - * sometimes the answer is off by a few bits at the bottom. - * Hence, the disabled check. - */ - CPPUNIT_ASSERT_EQUAL ((gr_int32) 0x40000000, gr_fxpt::float_to_fixed (M_PI/2)); - CPPUNIT_ASSERT_EQUAL ((gr_int32) 0, gr_fxpt::float_to_fixed (0)); - CPPUNIT_ASSERT_EQUAL ((gr_int32) 0x80000000, gr_fxpt::float_to_fixed (-M_PI)); - } -} - -void -qa_gr_fxpt::t1 () -{ - - CPPUNIT_ASSERT_DOUBLES_EQUAL ( 0, gr_fxpt::sin (0x00000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL ( 0.707106781, gr_fxpt::sin (0x20000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL ( 1, gr_fxpt::sin (0x40000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL ( 0.707106781, gr_fxpt::sin (0x60000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL ( 0, gr_fxpt::sin (0x7fffffff), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL ( 0, gr_fxpt::sin (0x80000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL ( 0, gr_fxpt::sin (0x80000001), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL (-1, gr_fxpt::sin (-0x40000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL (-0.707106781, gr_fxpt::sin (-0x20000000), SIN_COS_TOLERANCE); - - - for (float p = -M_PI; p < M_PI; p += 2 * M_PI / 3600){ - float expected = sin (p); - float actual = gr_fxpt::sin (gr_fxpt::float_to_fixed (p)); - CPPUNIT_ASSERT_DOUBLES_EQUAL (expected, actual, SIN_COS_TOLERANCE); - } -} - -void -qa_gr_fxpt::t2 () -{ - for (float p = -M_PI; p < M_PI; p += 2 * M_PI / 3600){ - float expected = cos (p); - float actual = gr_fxpt::cos (gr_fxpt::float_to_fixed (p)); - CPPUNIT_ASSERT_DOUBLES_EQUAL (expected, actual, SIN_COS_TOLERANCE); - } -} - -void -qa_gr_fxpt::t3 () -{ - for (float p = -M_PI; p < M_PI; p += 2 * M_PI / 3600){ - float expected_sin = sin (p); - float expected_cos = cos (p); - float actual_sin; - float actual_cos; - gr_fxpt::sincos (gr_fxpt::float_to_fixed (p), &actual_sin, &actual_cos); - CPPUNIT_ASSERT_DOUBLES_EQUAL (expected_sin, actual_sin, SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL (expected_cos, actual_cos, SIN_COS_TOLERANCE); - } -} diff --git a/gnuradio-core/src/lib/general/qa_gr_fxpt.h b/gnuradio-core/src/lib/general/qa_gr_fxpt.h deleted file mode 100644 index 72211563e7..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_fxpt.h +++ /dev/null @@ -1,48 +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. - */ -#ifndef INCLUDED_QA_GR_FXPT_H -#define INCLUDED_QA_GR_FXPT_H - - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_gr_fxpt : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_gr_fxpt); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST (t2); - CPPUNIT_TEST (t3); - CPPUNIT_TEST_SUITE_END (); - - private: - void t0 (); - void t1 (); - void t2 (); - void t3 (); - -}; - -#endif /* INCLUDED_QA_GR_FXPT_H */ - - diff --git a/gnuradio-core/src/lib/general/qa_gr_fxpt_nco.cc b/gnuradio-core/src/lib/general/qa_gr_fxpt_nco.cc deleted file mode 100644 index 6f208eac80..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_fxpt_nco.cc +++ /dev/null @@ -1,119 +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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <qa_gr_fxpt_nco.h> -#include <gr_fxpt_nco.h> -#include <gr_nco.h> -#include <cppunit/TestAssert.h> -#include <iostream> -#include <stdio.h> -#include <unistd.h> -#include <math.h> - -static const float SIN_COS_TOLERANCE = 1e-5; - -//static const float SIN_COS_FREQ = 5003; -static const float SIN_COS_FREQ = 4096; - -static const int SIN_COS_BLOCK_SIZE = 100000; - -static double max_d(double a, double b) -{ - return fabs(a) > fabs(b) ? a : b; -} - -void -qa_gr_fxpt_nco::t0 () -{ - gr_nco<float,float> ref_nco; - gr_fxpt_nco new_nco; - double max_error = 0, max_phase_error = 0; - - ref_nco.set_freq ((float)(2 * M_PI / SIN_COS_FREQ)); - new_nco.set_freq ((float)(2 * M_PI / SIN_COS_FREQ)); - - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_nco.get_freq(), new_nco.get_freq(), SIN_COS_TOLERANCE); - - for (int i = 0; i < SIN_COS_BLOCK_SIZE; i++){ - float ref_sin = ref_nco.sin (); - float new_sin = new_nco.sin (); - //printf ("i = %6d\n", i); - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_sin, new_sin, SIN_COS_TOLERANCE); - - max_error = max_d (max_error, ref_sin-new_sin); - - float ref_cos = ref_nco.cos (); - float new_cos = new_nco.cos (); - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_cos, new_cos, SIN_COS_TOLERANCE); - - max_error = max_d (max_error, ref_cos-new_cos); - - ref_nco.step (); - new_nco.step (); - - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_nco.get_phase(), new_nco.get_phase(), SIN_COS_TOLERANCE); - - max_phase_error = max_d (max_phase_error, ref_nco.get_phase()-new_nco.get_phase()); - } - // printf ("Fxpt max error %.9f, max phase error %.9f\n", max_error, max_phase_error); -} - -void -qa_gr_fxpt_nco::t1 () -{ - gr_nco<float,float> ref_nco; - gr_fxpt_nco new_nco; - gr_complex ref_block[SIN_COS_BLOCK_SIZE]; - gr_complex new_block[SIN_COS_BLOCK_SIZE]; - double max_error = 0; - - ref_nco.set_freq ((float)(2 * M_PI / SIN_COS_FREQ)); - new_nco.set_freq ((float)(2 * M_PI / SIN_COS_FREQ)); - - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_nco.get_freq(), new_nco.get_freq(), SIN_COS_TOLERANCE); - - ref_nco.sincos ((gr_complex*)ref_block, SIN_COS_BLOCK_SIZE); - new_nco.sincos ((gr_complex*)new_block, SIN_COS_BLOCK_SIZE); - - for (int i = 0; i < SIN_COS_BLOCK_SIZE; i++){ - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_block[i].real(), new_block[i].real(), SIN_COS_TOLERANCE); - max_error = max_d (max_error, ref_block[i].real()-new_block[i].real()); - - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_block[i].imag(), new_block[i].imag(), SIN_COS_TOLERANCE); - max_error = max_d (max_error, ref_block[i].imag()-new_block[i].imag()); - } - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_nco.get_phase(), new_nco.get_phase(), SIN_COS_TOLERANCE); - // printf ("Fxpt max error %.9f, max phase error %.9f\n", max_error, max_phase_error); -} - -void -qa_gr_fxpt_nco::t2 () -{ -} - -void -qa_gr_fxpt_nco::t3 () -{ -} diff --git a/gnuradio-core/src/lib/general/qa_gr_fxpt_nco.h b/gnuradio-core/src/lib/general/qa_gr_fxpt_nco.h deleted file mode 100644 index 8998922bbb..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_fxpt_nco.h +++ /dev/null @@ -1,48 +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. - */ -#ifndef INCLUDED_QA_GR_FXPT_NCO_H -#define INCLUDED_QA_GR_FXPT_NCO_H - - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_gr_fxpt_nco : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_gr_fxpt_nco); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST (t2); - CPPUNIT_TEST (t3); - CPPUNIT_TEST_SUITE_END (); - - private: - void t0 (); - void t1 (); - void t2 (); - void t3 (); - -}; - -#endif /* INCLUDED_QA_GR_FXPT_NCO_H */ - - diff --git a/gnuradio-core/src/lib/general/qa_gr_fxpt_vco.cc b/gnuradio-core/src/lib/general/qa_gr_fxpt_vco.cc deleted file mode 100644 index 5b6993a30c..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_fxpt_vco.cc +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <qa_gr_fxpt_vco.h> -#include <gr_fxpt_vco.h> -#include <gr_vco.h> -#include <cppunit/TestAssert.h> -#include <iostream> -#include <stdio.h> -#include <unistd.h> -#include <math.h> - -static const float SIN_COS_TOLERANCE = 1e-5; - -static const float SIN_COS_K = 0.42; -static const float SIN_COS_AMPL = 0.8; - -static const int SIN_COS_BLOCK_SIZE = 100000; - -static double max_d(double a, double b) -{ - return fabs(a) > fabs(b) ? a : b; -} - -void -qa_gr_fxpt_vco::t0 () -{ - gr_vco<float,float> ref_vco; - gr_fxpt_vco new_vco; - double max_error = 0, max_phase_error = 0; - float input[SIN_COS_BLOCK_SIZE]; - - for (int i = 0; i < SIN_COS_BLOCK_SIZE; i++){ - input[i] = sin(double(i)); - } - - for (int i = 0; i < SIN_COS_BLOCK_SIZE; i++){ - float ref_cos = ref_vco.cos (); - float new_cos = new_vco.cos (); - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_cos, new_cos, SIN_COS_TOLERANCE); - - max_error = max_d (max_error, ref_cos-new_cos); - - ref_vco.adjust_phase (input[i]); - new_vco.adjust_phase (input[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_vco.get_phase(), new_vco.get_phase(), SIN_COS_TOLERANCE); - - max_phase_error = max_d (max_phase_error, ref_vco.get_phase()-new_vco.get_phase()); - } - // printf ("Fxpt max error %.9f, max phase error %.9f\n", max_error, max_phase_error); -} - - -void -qa_gr_fxpt_vco::t1 () -{ - gr_vco<float,float> ref_vco; - gr_fxpt_vco new_vco; - float ref_block[SIN_COS_BLOCK_SIZE]; - float new_block[SIN_COS_BLOCK_SIZE]; - float input[SIN_COS_BLOCK_SIZE]; - double max_error = 0; - - for (int i = 0; i < SIN_COS_BLOCK_SIZE; i++){ - input[i] = sin(double(i)); - } - - ref_vco.cos (ref_block, input, SIN_COS_BLOCK_SIZE, SIN_COS_K, SIN_COS_AMPL); - new_vco.cos (new_block, input, SIN_COS_BLOCK_SIZE, SIN_COS_K, SIN_COS_AMPL); - - for (int i = 0; i < SIN_COS_BLOCK_SIZE; i++){ - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_block[i], new_block[i], SIN_COS_TOLERANCE); - max_error = max_d (max_error, ref_block[i]-new_block[i]); - } - CPPUNIT_ASSERT_DOUBLES_EQUAL (ref_vco.get_phase(), new_vco.get_phase(), SIN_COS_TOLERANCE); - // printf ("Fxpt max error %.9f, max phase error %.9f\n", max_error, ref_vco.get_phase()-new_vco.get_phase()); -} - -void -qa_gr_fxpt_vco::t2 () -{ -} - -void -qa_gr_fxpt_vco::t3 () -{ -} diff --git a/gnuradio-core/src/lib/general/qa_gr_fxpt_vco.h b/gnuradio-core/src/lib/general/qa_gr_fxpt_vco.h deleted file mode 100644 index fab8022e36..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_fxpt_vco.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_QA_GR_FXPT_VCO_H -#define INCLUDED_QA_GR_FXPT_VCO_H - - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_gr_fxpt_vco : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_gr_fxpt_vco); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST (t2); - CPPUNIT_TEST (t3); - CPPUNIT_TEST_SUITE_END (); - - private: - void t0 (); - void t1 (); - void t2 (); - void t3 (); - -}; - -#endif /* INCLUDED_QA_GR_FXPT_VCO_H */ - - diff --git a/gnuradio-core/src/lib/general/qa_gr_math.cc b/gnuradio-core/src/lib/general/qa_gr_math.cc deleted file mode 100644 index 74d51b536e..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_math.cc +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2008 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_math.h> -#include <qa_gr_math.h> -#include <cppunit/TestAssert.h> -#include <stdio.h> - -void -qa_gr_math::test_binary_slicer1 () -{ - float x[5] = {-1, -0.5, 0, 0.5, 1.0}; - unsigned int z[5] = {0, 0, 1, 1, 1}; - unsigned int y; - - //printf("\nBinary\n"); - for (unsigned int i = 0; i < 5; i++) { - y = gr_binary_slicer(x[i]); - //printf("in: %f out: %d desired: %d\n", x[i], y, z[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); - } - - //printf("\nBranchless Binary\n"); - for (unsigned int i = 0; i < 5; i++) { - y = gr_branchless_binary_slicer(x[i]); - //printf("in: %f out: %d desired: %d\n", x[i], y, z[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); - } -} - -void -qa_gr_math::test_quad_0deg_slicer1 () -{ - gr_complex x[4] = {gr_complex(1, 0), - gr_complex(0, 1), - gr_complex(-1, 0), - gr_complex(0, -1)}; - - unsigned int z[4] = {0, 1, 2, 3}; - unsigned int y; - - //printf("\nQuad0\n"); - for (unsigned int i = 0; i < 4; i++) { - y = gr_quad_0deg_slicer(x[i]); - //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); - } - - //printf("\nBranchless Quad0\n"); - for (unsigned int i = 0; i < 4; i++) { - y = gr_branchless_quad_0deg_slicer(x[i]); - //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); - } -} - -void -qa_gr_math::test_quad_45deg_slicer1 () -{ - gr_complex x[4] = {gr_complex(0.707, 0.707), - gr_complex(-0.707, 0.707), - gr_complex(-0.707, -0.707), - gr_complex(0.707, -0.707)}; - - unsigned int z[4] = {0, 1, 2, 3}; - unsigned int y; - - //printf("\nQuad45\n"); - for (unsigned int i = 0; i < 4; i++) { - y = gr_quad_45deg_slicer(x[i]); - //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); - } - - //printf("\nBranchless Quad45\n"); - for (unsigned int i = 0; i < 4; i++) { - y = gr_branchless_quad_45deg_slicer(x[i]); - //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); - } -} diff --git a/gnuradio-core/src/lib/general/qa_gr_math.h b/gnuradio-core/src/lib/general/qa_gr_math.h deleted file mode 100644 index 86858c03d5..0000000000 --- a/gnuradio-core/src/lib/general/qa_gr_math.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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 _QA_GR_MATH_H_ -#define _QA_GR_MATH_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_gr_math : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE(qa_gr_math); - CPPUNIT_TEST(test_binary_slicer1); - CPPUNIT_TEST(test_quad_0deg_slicer1); - CPPUNIT_TEST(test_quad_45deg_slicer1); - CPPUNIT_TEST_SUITE_END(); - - private: - void test_binary_slicer1(); - void test_quad_0deg_slicer1(); - void test_quad_45deg_slicer1(); -}; - -#endif /* _QA_GR_MATH_H_ */ diff --git a/gnuradio-core/src/lib/general/qa_sincos.cc b/gnuradio-core/src/lib/general/qa_sincos.cc deleted file mode 100644 index 0066ff6b92..0000000000 --- a/gnuradio-core/src/lib/general/qa_sincos.cc +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <qa_sincos.h> -#include <gr_sincos.h> -#include <gruel/attributes.h> -#include <cppunit/TestAssert.h> -#include <cmath> - -namespace gr { - namespace analog { - - void - qa_sincos::t1() - { - static const unsigned int N = 1000; - double c_sin, c_cos; - double gr_sin, gr_cos; - - for(unsigned i = 0; i < N; i++) { - double x = i/100.0; - c_sin = sin(x); - c_cos = cos(x); - - gr_sincos(x, &gr_sin, &gr_cos); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_sin, gr_sin, 0.0001); - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_cos, gr_cos, 0.0001); - } - } - - void - qa_sincos::t2() - { - static const unsigned int N = 1000; - float c_sin, c_cos; - float gr_sin, gr_cos; - - for(unsigned i = 0; i < N; i++) { - float x = i/100.0; - c_sin = sinf(x); - c_cos = cosf(x); - - gr_sincosf(x, &gr_sin, &gr_cos); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_sin, gr_sin, 0.0001); - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_cos, gr_cos, 0.0001); - } - } - - } /* namespace analog */ -} /* namespace gr */ diff --git a/gnuradio-core/src/lib/general/qa_sincos.h b/gnuradio-core/src/lib/general/qa_sincos.h deleted file mode 100644 index f18e879dd8..0000000000 --- a/gnuradio-core/src/lib/general/qa_sincos.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 _QA_ANALOG_SINCOS_H_ -#define _QA_ANALOG_SINCOS_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -namespace gr { - namespace analog { - - class qa_sincos : public CppUnit::TestCase - { - CPPUNIT_TEST_SUITE(qa_sincos); - CPPUNIT_TEST(t1); - CPPUNIT_TEST(t2); - CPPUNIT_TEST_SUITE_END(); - - private: - void t1(); - void t2(); - }; - - } /* namespace analog */ -} /* namespace gr */ - -#endif /* _QA_ANALOG_SINCOS_H_ */ diff --git a/gnuradio-core/src/lib/general/random.h b/gnuradio-core/src/lib/general/random.h deleted file mode 100644 index c643c3e422..0000000000 --- a/gnuradio-core/src/lib/general/random.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003, 2008 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 _RANDOM_H_ -#define _RANDOM_H_ - -// While rand(3) specifies RAND_MAX, random(3) says that the output -// ranges from 0 to 2^31-1 but does not specify a macro to denote -// this. We define RANDOM_MAX for cleanliness. We must omit the -// definition for systems that have made the same choice. (Note that -// random(3) is from 4.2BSD, and not specified by POSIX.) - -#ifndef RANDOM_MAX -static const int RANDOM_MAX = 2147483647; // 2^31-1 -#endif /* RANDOM_MAX */ - -#include <stdlib.h> - -#endif // _RANDOM_H_ diff --git a/gnuradio-core/src/lib/general/sine_table.h b/gnuradio-core/src/lib/general/sine_table.h deleted file mode 100644 index 69834943bc..0000000000 --- a/gnuradio-core/src/lib/general/sine_table.h +++ /dev/null @@ -1,1025 +0,0 @@ - // max_error = 2.353084136763606e-06 - { 2.925817799165007e-09, 7.219194364267018e-09 }, - { 2.925707643778599e-09, 2.526699001579799e-07 }, - { 2.925487337153070e-09, 1.191140162167675e-06 }, - { 2.925156887582842e-09, 3.284585035595589e-06 }, - { 2.924716307509151e-09, 6.994872605695784e-06 }, - { 2.924165613519592e-09, 1.278374920658798e-05 }, - { 2.923504826347475e-09, 2.111280464718590e-05 }, - { 2.922733970871080e-09, 3.244343744537165e-05 }, - { 2.921853076112655e-09, 4.723682007436170e-05 }, - { 2.920862175237416e-09, 6.595386421935634e-05 }, - { 2.919761305552202e-09, 8.905518605213658e-05 }, - { 2.918550508504146e-09, 1.170010715193098e-04 }, - { 2.917229829679050e-09, 1.502514416517192e-04 }, - { 2.915799318799769e-09, 1.892658178912071e-04 }, - { 2.914259029724184e-09, 2.345032874456615e-04 }, - { 2.912609020443340e-09, 2.864224686607020e-04 }, - { 2.910849353079123e-09, 3.454814764261432e-04 }, - { 2.908980093882049e-09, 4.121378876027343e-04 }, - { 2.907001313228646e-09, 4.868487064877691e-04 }, - { 2.904913085618902e-09, 5.700703303049837e-04 }, - { 2.902715489673383e-09, 6.622585147355725e-04 }, - { 2.900408608130373e-09, 7.638683394782519e-04 }, - { 2.897992527842612e-09, 8.753541738578119e-04 }, - { 2.895467339774186e-09, 9.971696424604937e-04 }, - { 2.892833138996999e-09, 1.129767590823255e-03 }, - { 2.890090024687216e-09, 1.273600051161478e-03 }, - { 2.887238100121550e-09, 1.429118208142094e-03 }, - { 2.884277472673313e-09, 1.596772364709564e-03 }, - { 2.881208253808507e-09, 1.777011907950626e-03 }, - { 2.878030559081432e-09, 1.970285275029487e-03 }, - { 2.874744508130554e-09, 2.177039919152579e-03 }, - { 2.871350224673798e-09, 2.397722275614272e-03 }, - { 2.867847836504030e-09, 2.632777727878843e-03 }, - { 2.864237475484149e-09, 2.882650573737405e-03 }, - { 2.860519277542297e-09, 3.147783991507308e-03 }, - { 2.856693382666432e-09, 3.428620006328931e-03 }, - { 2.852759934899389e-09, 3.725599456482154e-03 }, - { 2.848719082333207e-09, 4.039161959812243e-03 }, - { 2.844570977103752e-09, 4.369745880190706e-03 }, - { 2.840315775384800e-09, 4.717788294077374e-03 }, - { 2.835953637382310e-09, 5.083724957128360e-03 }, - { 2.831484727328322e-09, 5.467990270896617e-03 }, - { 2.826909213474759e-09, 5.871017249604038e-03 }, - { 2.822227268087134e-09, 6.293237486988512e-03 }, - { 2.817439067438018e-09, 6.735081123237729e-03 }, - { 2.812544791800534e-09, 7.196976811989608e-03 }, - { 2.807544625441273e-09, 7.679351687456759e-03 }, - { 2.802438756613836e-09, 8.182631331563162e-03 }, - { 2.797227377551135e-09, 8.707239741274575e-03 }, - { 2.791910684458716e-09, 9.253599295902304e-03 }, - { 2.786488877507140e-09, 9.822130724578715e-03 }, - { 2.780962160824228e-09, 1.041325307382490e-02 }, - { 2.775330742487884e-09, 1.102738367513773e-02 }, - { 2.769594834517682e-09, 1.166493811278924e-02 }, - { 2.763754652867477e-09, 1.232633019159818e-02 }, - { 2.757810417416620e-09, 1.301197190494069e-02 }, - { 2.751762351962413e-09, 1.372227340270610e-02 }, - { 2.745610684210923e-09, 1.445764295952962e-02 }, - { 2.739355645769094e-09, 1.521848694296229e-02 }, - { 2.732997472135539e-09, 1.600520978188769e-02 }, - { 2.726536402691907e-09, 1.681821393496225e-02 }, - { 2.719972680693777e-09, 1.765789985920713e-02 }, - { 2.713306553261610e-09, 1.852466597868779e-02 }, - { 2.706538271371373e-09, 1.941890865333146e-02 }, - { 2.699668089844909e-09, 2.034102214787814e-02 }, - { 2.692696267340880e-09, 2.129139860085272e-02 }, - { 2.685623066344263e-09, 2.227042799383416e-02 }, - { 2.678448753157212e-09, 2.327849812064098e-02 }, - { 2.671173597888530e-09, 2.431599455681316e-02 }, - { 2.663797874443630e-09, 2.538330062913108e-02 }, - { 2.656321860514457e-09, 2.648079738524795e-02 }, - { 2.648745837568575e-09, 2.760886356354952e-02 }, - { 2.641070090839117e-09, 2.876787556300114e-02 }, - { 2.633294909313421e-09, 2.995820741329835e-02 }, - { 2.625420585722845e-09, 3.118023074495535e-02 }, - { 2.617447416531143e-09, 3.243431475972608e-02 }, - { 2.609375701923643e-09, 3.372082620101990e-02 }, - { 2.601205745795833e-09, 3.504012932452527e-02 }, - { 2.592937855741933e-09, 3.639258586895711e-02 }, - { 2.584572343043400e-09, 3.777855502693250e-02 }, - { 2.576109522656942e-09, 3.919839341605197e-02 }, - { 2.567549713203028e-09, 4.065245505002102e-02 }, - { 2.558893236953688e-09, 4.214109131001403e-02 }, - { 2.550140419820252e-09, 4.366465091617666e-02 }, - { 2.541291591341445e-09, 4.522347989919473e-02 }, - { 2.532347084670572e-09, 4.681792157215026e-02 }, - { 2.523307236563343e-09, 4.844831650239501e-02 }, - { 2.514172387364900e-09, 5.011500248369893e-02 }, - { 2.504942880997064e-09, 5.181831450849345e-02 }, - { 2.495619064945627e-09, 5.355858474024022e-02 }, - { 2.486201290246928e-09, 5.533614248606705e-02 }, - { 2.476689911475047e-09, 5.715131416942842e-02 }, - { 2.467085286727668e-09, 5.900442330315692e-02 }, - { 2.457387777613798e-09, 6.089579046229943e-02 }, - { 2.447597749239101e-09, 6.282573325755320e-02 }, - { 2.437715570192557e-09, 6.479456630859221e-02 }, - { 2.427741612532542e-09, 6.680260121764925e-02 }, - { 2.417676251773166e-09, 6.885014654319160e-02 }, - { 2.407519866869294e-09, 7.093750777401114e-02 }, - { 2.397272840203310e-09, 7.306498730310884e-02 }, - { 2.386935557569868e-09, 7.523288440214027e-02 }, - { 2.376508408161815e-09, 7.744149519577415e-02 }, - { 2.365991784555363e-09, 7.969111263635709e-02 }, - { 2.355386082695641e-09, 8.198202647865405e-02 }, - { 2.344691701881232e-09, 8.431452325495814e-02 }, - { 2.333909044749407e-09, 8.668888625021409e-02 }, - { 2.323038517261246e-09, 8.910539547731611e-02 }, - { 2.312080528685971e-09, 9.156432765274414e-02 }, - { 2.301035491585642e-09, 9.406595617227698e-02 }, - { 2.289903821799651e-09, 9.661055108691619e-02 }, - { 2.278685938428940e-09, 9.919837907903295e-02 }, - { 2.267382263820762e-09, 1.018297034385580e-01 }, - { 2.255993223551837e-09, 1.045047840397028e-01 }, - { 2.244519246413220e-09, 1.072238773174577e-01 }, - { 2.232960764393620e-09, 1.099872362446146e-01 }, - { 2.221318212663309e-09, 1.127951103088245e-01 }, - { 2.209592029557811e-09, 1.156477454898748e-01 }, - { 2.197782656561395e-09, 1.185453842371912e-01 }, - { 2.185890538290176e-09, 1.214882654476019e-01 }, - { 2.173916122475606e-09, 1.244766244431883e-01 }, - { 2.161859859947797e-09, 1.275106929493488e-01 }, - { 2.149722204618256e-09, 1.305906990731841e-01 }, - { 2.137503613462743e-09, 1.337168672820376e-01 }, - { 2.125204546504321e-09, 1.368894183821595e-01 }, - { 2.112825466795944e-09, 1.401085694976751e-01 }, - { 2.100366840402933e-09, 1.433745340497602e-01 }, - { 2.087829136385612e-09, 1.466875217359607e-01 }, - { 2.075212826781308e-09, 1.500477385098620e-01 }, - { 2.062518386587093e-09, 1.534553865607503e-01 }, - { 2.049746293741359e-09, 1.569106642937665e-01 }, - { 2.036897029106193e-09, 1.604137663100403e-01 }, - { 2.023971076449323e-09, 1.639648833871233e-01 }, - { 2.010968922425217e-09, 1.675642024598467e-01 }, - { 1.997891056557933e-09, 1.712119066008896e-01 }, - { 1.984737971221581e-09, 1.749081750021970e-01 }, - { 1.971510161622434e-09, 1.786531829561379e-01 }, - { 1.958208125780130e-09, 1.824471018371070e-01 }, - { 1.944832364508511e-09, 1.862900990834311e-01 }, - { 1.931383381397782e-09, 1.901823381790926e-01 }, - { 1.917861682794392e-09, 1.941239786363039e-01 }, - { 1.904267777782611e-09, 1.981151759777950e-01 }, - { 1.890602178165317e-09, 2.021560817195309e-01 }, - { 1.876865398444616e-09, 2.062468433536743e-01 }, - { 1.863057955802572e-09, 2.103876043317229e-01 }, - { 1.849180370081465e-09, 2.145785040479915e-01 }, - { 1.835233163764673e-09, 2.188196778231083e-01 }, - { 1.821216861956509e-09, 2.231112568880342e-01 }, - { 1.807131992362945e-09, 2.274533683680190e-01 }, - { 1.792979085271234e-09, 2.318461352671018e-01 }, - { 1.778758673530482e-09, 2.362896764525300e-01 }, - { 1.764471292530943e-09, 2.407841066397789e-01 }, - { 1.750117480184598e-09, 2.453295363773890e-01 }, - { 1.735697776904342e-09, 2.499260720324433e-01 }, - { 1.721212725583874e-09, 2.545738157760434e-01 }, - { 1.706662871577097e-09, 2.592728655691494e-01 }, - { 1.692048762677849e-09, 2.640233151485341e-01 }, - { 1.677370949099090e-09, 2.688252540131204e-01 }, - { 1.662629983452104e-09, 2.736787674105404e-01 }, - { 1.647826420726167e-09, 2.785839363237506e-01 }, - { 1.632960818266680e-09, 2.835408374583758e-01 }, - { 1.618033735755429e-09, 2.885495432295704e-01 }, - { 1.603045735188609e-09, 2.936101217498361e-01 }, - { 1.587997380855918e-09, 2.987226368167127e-01 }, - { 1.572889239319430e-09, 3.038871479007593e-01 }, - { 1.557721879392051e-09, 3.091037101339017e-01 }, - { 1.542495872116447e-09, 3.143723742978435e-01 }, - { 1.527211790743024e-09, 3.196931868130269e-01 }, - { 1.511870210708909e-09, 3.250661897274744e-01 }, - { 1.496471709615926e-09, 3.304914207062036e-01 }, - { 1.481016867208896e-09, 3.359689130207621e-01 }, - { 1.465506265353924e-09, 3.414986955389885e-01 }, - { 1.449940488016384e-09, 3.470807927151147e-01 }, - { 1.434320121238994e-09, 3.527152245800635e-01 }, - { 1.418645753119802e-09, 3.584020067320109e-01 }, - { 1.402917973789838e-09, 3.641411503272979e-01 }, - { 1.387137375391042e-09, 3.699326620714776e-01 }, - { 1.371304552054134e-09, 3.757765442106153e-01 }, - { 1.355420099875958e-09, 3.816727945230153e-01 }, - { 1.339484616897137e-09, 3.876214063110671e-01 }, - { 1.323498703079580e-09, 3.936223683933865e-01 }, - { 1.307462960283922e-09, 3.996756650972121e-01 }, - { 1.291377992246768e-09, 4.057812762511174e-01 }, - { 1.275244404558188e-09, 4.119391771778626e-01 }, - { 1.259062804638585e-09, 4.181493386877248e-01 }, - { 1.242833801715929e-09, 4.244117270719281e-01 }, - { 1.226558006803155e-09, 4.307263040962509e-01 }, - { 1.210236032674760e-09, 4.370930269951803e-01 }, - { 1.193868493843725e-09, 4.435118484661861e-01 }, - { 1.177456006538695e-09, 4.499827166641340e-01 }, - { 1.160999188680582e-09, 4.565055751961679e-01 }, - { 1.144498659859216e-09, 4.630803631168164e-01 }, - { 1.127955041310214e-09, 4.697070149232604e-01 }, - { 1.111368955891417e-09, 4.763854605510119e-01 }, - { 1.094741028059551e-09, 4.831156253697562e-01 }, - { 1.078071883846871e-09, 4.898974301794375e-01 }, - { 1.061362150836978e-09, 4.967307912069362e-01 }, - { 1.044612458142151e-09, 5.036156201023686e-01 }, - { 1.027823436378632e-09, 5.105518239364775e-01 }, - { 1.010995717643647e-09, 5.175393051975563e-01 }, - { 9.941299354913699e-10, 5.245779617890562e-01 }, - { 9.772267249089968e-10, 5.316676870274011e-01 }, - { 9.602867222926046e-10, 5.388083696401416e-01 }, - { 9.433105654240147e-10, 5.459998937639375e-01 }, - { 9.262988934458084e-10, 5.532421389435711e-01 }, - { 9.092523468378193e-10, 5.605349801305876e-01 }, - { 8.921715673928355e-10, 5.678782876825250e-01 }, - { 8.750571981926701e-10, 5.752719273622372e-01 }, - { 8.579098835836508e-10, 5.827157603377209e-01 }, - { 8.407302691522673e-10, 5.902096431821322e-01 }, - { 8.235190017016133e-10, 5.977534278737073e-01 }, - { 8.062767292259225e-10, 6.053469617967722e-01 }, - { 7.890041008871165e-10, 6.129900877421282e-01 }, - { 7.717017669898175e-10, 6.206826439083659e-01 }, - { 7.543703789572603e-10, 6.284244639030392e-01 }, - { 7.370105893063053e-10, 6.362153767444958e-01 }, - { 7.196230516231919e-10, 6.440552068636356e-01 }, - { 7.022084205389746e-10, 6.519437741060674e-01 }, - { 6.847673517046416e-10, 6.598808937346672e-01 }, - { 6.673005017664976e-10, 6.678663764322770e-01 }, - { 6.498085283416530e-10, 6.759000283046127e-01 }, - { 6.322920899929834e-10, 6.839816508836737e-01 }, - { 6.147518462045659e-10, 6.921110411311926e-01 }, - { 5.971884573565851e-10, 7.002879914425926e-01 }, - { 5.796025847007168e-10, 7.085122896509806e-01 }, - { 5.619948903351406e-10, 7.167837190315758e-01 }, - { 5.443660371796048e-10, 7.251020583063744e-01 }, - { 5.267166889504394e-10, 7.334670816491009e-01 }, - { 5.090475101356742e-10, 7.418785586903696e-01 }, - { 4.913591659698399e-10, 7.503362545232619e-01 }, - { 4.736523224091392e-10, 7.588399297089872e-01 }, - { 4.559276461062478e-10, 7.673893402829834e-01 }, - { 4.381858043851147e-10, 7.759842377612828e-01 }, - { 4.204274652161870e-10, 7.846243691469355e-01 }, - { 4.026532971908398e-10, 7.933094769370790e-01 }, - { 3.848639694963359e-10, 8.020392991300200e-01 }, - { 3.670601518910503e-10, 8.108135692324444e-01 }, - { 3.492425146784233e-10, 8.196320162675177e-01 }, - { 3.314117286825031e-10, 8.284943647824689e-01 }, - { 3.135684652223755e-10, 8.374003348569865e-01 }, - { 2.957133960867535e-10, 8.463496421118015e-01 }, - { 2.778471935089361e-10, 8.553419977173513e-01 }, - { 2.599705301412391e-10, 8.643771084029740e-01 }, - { 2.420840790301135e-10, 8.734546764660205e-01 }, - { 2.241885135902046e-10, 8.825743997817682e-01 }, - { 2.062845075795238e-10, 8.917359718130367e-01 }, - { 1.883727350736140e-10, 9.009390816205823e-01 }, - { 1.704538704408269e-10, 9.101834138731877e-01 }, - { 1.525285883160648e-10, 9.194686488588080e-01 }, - { 1.345975635762696e-10, 9.287944624950824e-01 }, - { 1.166614713141648e-10, 9.381605263410157e-01 }, - { 9.872098681369190e-11, 9.475665076080466e-01 }, - { 8.077678552380464e-11, 9.570120691722380e-01 }, - { 6.282954303364090e-11, 9.664968695860140e-01 }, - { 4.487993504668797e-11, 9.760205630906909e-01 }, - { 2.692863735553042e-11, 9.855827996289697e-01 }, - { 8.976325816439114e-12, 9.951832248577780e-01 }, - { -8.976323676304494e-12, 1.004821480161519e+00 }, - { -2.692863521550168e-11, 1.014497202665280e+00 }, - { -4.487993290681805e-11, 1.024210025248670e+00 }, - { -6.282954089398273e-11, 1.033959576559617e+00 }, - { -8.077678338451706e-11, 1.043745481028715e+00 }, - { -9.872098467477489e-11, 1.053567358883467e+00 }, - { -1.166614691757772e-10, 1.063424826163223e+00 }, - { -1.345975614383584e-10, 1.073317494734013e+00 }, - { -1.525285861788948e-10, 1.083244972303963e+00 }, - { -1.704538683042922e-10, 1.093206862438572e+00 }, - { -1.883727329379793e-10, 1.103202764576806e+00 }, - { -2.062845054446831e-10, 1.113232274046796e+00 }, - { -2.241885114563697e-10, 1.123294982082432e+00 }, - { -2.420840768973375e-10, 1.133390475839767e+00 }, - { -2.599705280096278e-10, 1.143518338413855e+00 }, - { -2.778471913784365e-10, 1.153678148855860e+00 }, - { -2.957133939575774e-10, 1.163869482190458e+00 }, - { -3.135684630945758e-10, 1.174091909433296e+00 }, - { -3.314117265561857e-10, 1.184344997608959e+00 }, - { -3.492425125535882e-10, 1.194628309769018e+00 }, - { -3.670601497678034e-10, 1.204941405010466e+00 }, - { -3.848639673748360e-10, 1.215283838494269e+00 }, - { -4.026532950710339e-10, 1.225655161464298e+00 }, - { -4.204274630982869e-10, 1.236054921266445e+00 }, - { -4.381858022691734e-10, 1.246482661367958e+00 }, - { -4.559276439922654e-10, 1.256937921377146e+00 }, - { -4.736523202972214e-10, 1.267420237063216e+00 }, - { -4.913591638600925e-10, 1.277929140376502e+00 }, - { -5.090475080282032e-10, 1.288464159468706e+00 }, - { -5.267166868452449e-10, 1.299024818713528e+00 }, - { -5.443660350768455e-10, 1.309610638727845e+00 }, - { -5.619948882348695e-10, 1.320221136392390e+00 }, - { -5.796025826029868e-10, 1.330855824873457e+00 }, - { -5.971884552615020e-10, 1.341514213644420e+00 }, - { -6.147518441122357e-10, 1.352195808507556e+00 }, - { -6.322920879034590e-10, 1.362900111616144e+00 }, - { -6.498085262549874e-10, 1.373626621496939e+00 }, - { -6.673004996827436e-10, 1.384374833072571e+00 }, - { -6.847673496239581e-10, 1.395144237684605e+00 }, - { -7.022084184613616e-10, 1.405934323116231e+00 }, - { -7.196230495488082e-10, 1.416744573616104e+00 }, - { -7.370105872352039e-10, 1.427574469921397e+00 }, - { -7.543703768894941e-10, 1.438423489281758e+00 }, - { -7.717017649255453e-10, 1.449291105483472e+00 }, - { -7.890040988262324e-10, 1.460176788873383e+00 }, - { -8.062767271686383e-10, 1.471080006383765e+00 }, - { -8.235189996479819e-10, 1.482000221556656e+00 }, - { -8.407302671024475e-10, 1.492936894569018e+00 }, - { -8.579098815375368e-10, 1.503889482257845e+00 }, - { -8.750571961505266e-10, 1.514857438145604e+00 }, - { -8.921715653546624e-10, 1.525840212465756e+00 }, - { -9.092523448036167e-10, 1.536837252188703e+00 }, - { -9.262988914157881e-10, 1.547848001047890e+00 }, - { -9.433105633981766e-10, 1.558871899565883e+00 }, - { -9.602867202711075e-10, 1.569908385081254e+00 }, - { -9.772267228916820e-10, 1.580956891774897e+00 }, - { -9.941299334786078e-10, 1.592016850697478e+00 }, - { -1.010995715635332e-09, 1.603087689796053e+00 }, - { -1.027823434374870e-09, 1.614168833942028e+00 }, - { -1.044612456143047e-09, 1.625259704958335e+00 }, - { -1.061362148842745e-09, 1.636359721647526e+00 }, - { -1.078071881857297e-09, 1.647468299819543e+00 }, - { -1.094741026074900e-09, 1.658584852320419e+00 }, - { -1.111368953911690e-09, 1.669708789060341e+00 }, - { -1.127955039335462e-09, 1.680839517042381e+00 }, - { -1.144498657889600e-09, 1.691976440391624e+00 }, - { -1.160999186716154e-09, 1.703118960383971e+00 }, - { -1.177456004579561e-09, 1.714266475475616e+00 }, - { -1.193868491889832e-09, 1.725418381332405e+00 }, - { -1.210236030726319e-09, 1.736574070859850e+00 }, - { -1.226558004860220e-09, 1.747732934232508e+00 }, - { -1.242833799778447e-09, 1.758894358924547e+00 }, - { -1.259062802706714e-09, 1.770057729740021e+00 }, - { -1.275244402631982e-09, 1.781222428842935e+00 }, - { -1.291377990326492e-09, 1.792387835788660e+00 }, - { -1.307462958369363e-09, 1.803553327553897e+00 }, - { -1.323498701170897e-09, 1.814718278568759e+00 }, - { -1.339484614994490e-09, 1.825882060747428e+00 }, - { -1.355420097979292e-09, 1.837044043519582e+00 }, - { -1.371304550163662e-09, 1.848203593862598e+00 }, - { -1.387137373506711e-09, 1.859360076332671e+00 }, - { -1.402917971911754e-09, 1.870512853097495e+00 }, - { -1.418645751248018e-09, 1.881661283967967e+00 }, - { -1.434320119373722e-09, 1.892804726431080e+00 }, - { -1.449940486157623e-09, 1.903942535681972e+00 }, - { -1.465506263501516e-09, 1.915074064656886e+00 }, - { -1.481016865363264e-09, 1.926198664066737e+00 }, - { -1.496471707776859e-09, 1.937315682428795e+00 }, - { -1.511870208876724e-09, 1.948424466101625e+00 }, - { -1.527211788917509e-09, 1.959524359317042e+00 }, - { -1.542495870297867e-09, 1.970614704215133e+00 }, - { -1.557721877580406e-09, 1.981694840876775e+00 }, - { -1.572889237514880e-09, 1.992764107358707e+00 }, - { -1.587997379058514e-09, 2.003821839726753e+00 }, - { -1.603045733398246e-09, 2.014867372090665e+00 }, - { -1.618033733972424e-09, 2.025900036638798e+00 }, - { -1.632960816490822e-09, 2.036919163671778e+00 }, - { -1.647826418957721e-09, 2.047924081638631e+00 }, - { -1.662629981691070e-09, 2.058914117170269e+00 }, - { -1.677370947345626e-09, 2.069888595116115e+00 }, - { -1.692048760931849e-09, 2.080846838577820e+00 }, - { -1.706662869838827e-09, 2.091788168946183e+00 }, - { -1.721212723853279e-09, 2.102711905935372e+00 }, - { -1.735697775181424e-09, 2.113617367619504e+00 }, - { -1.750117478469621e-09, 2.124503870468520e+00 }, - { -1.764471290823748e-09, 2.135370729383332e+00 }, - { -1.778758671831281e-09, 2.146217257733207e+00 }, - { -1.792979083579974e-09, 2.157042767390815e+00 }, - { -1.807131990679890e-09, 2.167846568770014e+00 }, - { -1.821216860281448e-09, 2.178627970860822e+00 }, - { -1.835233162097977e-09, 2.189386281268046e+00 }, - { -1.849180368423027e-09, 2.200120806246095e+00 }, - { -1.863057954152340e-09, 2.210830850737588e+00 }, - { -1.876865396802907e-09, 2.221515718409926e+00 }, - { -1.890602176531920e-09, 2.232174711691990e+00 }, - { -1.904267776157843e-09, 2.242807131812679e+00 }, - { -1.917861681178094e-09, 2.253412278837029e+00 }, - { -1.931383379790273e-09, 2.263989451705295e+00 }, - { -1.944832362909578e-09, 2.274537948269257e+00 }, - { -1.958208124189984e-09, 2.285057065331676e+00 }, - { -1.971510160041235e-09, 2.295546098682665e+00 }, - { -1.984737969649064e-09, 2.306004343138794e+00 }, - { -1.997891054994522e-09, 2.316431092581699e+00 }, - { -2.010968920870647e-09, 2.326825639994779e+00 }, - { -2.023971074903858e-09, 2.337187277503834e+00 }, - { -2.036897027569834e-09, 2.347515296413520e+00 }, - { -2.049746292214264e-09, 2.357808987247877e+00 }, - { -2.062518385069210e-09, 2.368067639787542e+00 }, - { -2.075212825272584e-09, 2.378290543109652e+00 }, - { -2.087829134886364e-09, 2.388476985626922e+00 }, - { -2.100366838912949e-09, 2.398626255125417e+00 }, - { -2.112825465315542e-09, 2.408737638805759e+00 }, - { -2.125204545033289e-09, 2.418810423320288e+00 }, - { -2.137503612001452e-09, 2.428843894814472e+00 }, - { -2.149722203166389e-09, 2.438837338964302e+00 }, - { -2.161859858505829e-09, 2.448790041018174e+00 }, - { -2.173916121043380e-09, 2.458701285834241e+00 }, - { -2.185890536867478e-09, 2.468570357921585e+00 }, - { -2.197782655148702e-09, 2.478396541480230e+00 }, - { -2.209592028154913e-09, 2.488179120439544e+00 }, - { -2.221318211270522e-09, 2.497917378500214e+00 }, - { -2.232960763010574e-09, 2.507610599172123e+00 }, - { -2.244519245040444e-09, 2.517258065817044e+00 }, - { -2.255993222189014e-09, 2.526859061686102e+00 }, - { -2.267382262468209e-09, 2.536412869962689e+00 }, - { -2.278685937086658e-09, 2.545918773800664e+00 }, - { -2.289903820467374e-09, 2.555376056366064e+00 }, - { -2.301035490263848e-09, 2.564784000877677e+00 }, - { -2.312080527374447e-09, 2.574141890646339e+00 }, - { -2.323038515960257e-09, 2.583449009117307e+00 }, - { -2.333909043458635e-09, 2.592704639909166e+00 }, - { -2.344691700601153e-09, 2.601908066856634e+00 }, - { -2.355386081425938e-09, 2.611058574048749e+00 }, - { -2.365991783296513e-09, 2.620155445872768e+00 }, - { -2.376508406913500e-09, 2.629197967052127e+00 }, - { -2.386935556332088e-09, 2.638185422689490e+00 }, - { -2.397272838976436e-09, 2.647117098307332e+00 }, - { -2.407519865653114e-09, 2.655992279887846e+00 }, - { -2.417676250567891e-09, 2.664810253915885e+00 }, - { -2.427741611338014e-09, 2.673570307418169e+00 }, - { -2.437715569009093e-09, 2.682271728006635e+00 }, - { -2.447597748066437e-09, 2.690913803917100e+00 }, - { -2.457387776452357e-09, 2.699495824053297e+00 }, - { -2.467085285577292e-09, 2.708017078025636e+00 }, - { -2.476689910335470e-09, 2.716476856194105e+00 }, - { -2.486201289118733e-09, 2.724874449709689e+00 }, - { -2.495619063828443e-09, 2.733209150554255e+00 }, - { -2.504942879891263e-09, 2.741480251583985e+00 }, - { -2.514172386270163e-09, 2.749687046568741e+00 }, - { -2.523307235480146e-09, 2.757828830235740e+00 }, - { -2.532347083598520e-09, 2.765904898308531e+00 }, - { -2.541291590280960e-09, 2.773914547551261e+00 }, - { -2.550140418771202e-09, 2.781857075807392e+00 }, - { -2.558893235915887e-09, 2.789731782043156e+00 }, - { -2.567549712176927e-09, 2.797537966388929e+00 }, - { -2.576109521642196e-09, 2.805274930179221e+00 }, - { -2.584572342040407e-09, 2.812941975996573e+00 }, - { -2.592937854750428e-09, 2.820538407710556e+00 }, - { -2.601205744816134e-09, 2.828063530521908e+00 }, - { -2.609375700955458e-09, 2.835516651001539e+00 }, - { -2.617447415574869e-09, 2.842897077134583e+00 }, - { -2.625420584778350e-09, 2.850204118359573e+00 }, - { -2.633294908380520e-09, 2.857437085611509e+00 }, - { -2.641070089918234e-09, 2.864595291363663e+00 }, - { -2.648745836659391e-09, 2.871678049666939e+00 }, - { -2.656321859617343e-09, 2.878684676194483e+00 }, - { -2.663797873558322e-09, 2.885614488280000e+00 }, - { -2.671173597015318e-09, 2.892466804962122e+00 }, - { -2.678448752295859e-09, 2.899240947023252e+00 }, - { -2.685623065495139e-09, 2.905936237033475e+00 }, - { -2.692696266503800e-09, 2.912551999389617e+00 }, - { -2.699668089019767e-09, 2.919087560358171e+00 }, - { -2.706538270558513e-09, 2.925542248116882e+00 }, - { -2.713306552460767e-09, 2.931915392794031e+00 }, - { -2.719972679905295e-09, 2.938206326512581e+00 }, - { -2.726536401915442e-09, 2.944414383428562e+00 }, - { -2.732997471371516e-09, 2.950538899775061e+00 }, - { -2.739355645017194e-09, 2.956579213900666e+00 }, - { -2.745610683471516e-09, 2.962534666313284e+00 }, - { -2.751762351235315e-09, 2.968404599718795e+00 }, - { -2.757810416701751e-09, 2.974188359063684e+00 }, - { -2.763754652165128e-09, 2.979885291576143e+00 }, - { -2.769594833827588e-09, 2.985494746805227e+00 }, - { -2.775330741810390e-09, 2.991016076664491e+00 }, - { -2.780962160159068e-09, 2.996448635469842e+00 }, - { -2.786488876854607e-09, 3.001791779983262e+00 }, - { -2.791910683818570e-09, 3.007044869450794e+00 }, - { -2.797227376923695e-09, 3.012207265645876e+00 }, - { -2.802438755998943e-09, 3.017278332907412e+00 }, - { -2.807544624838820e-09, 3.022257438182037e+00 }, - { -2.812544791210840e-09, 3.027143951064684e+00 }, - { -2.817439066860792e-09, 3.031937243837070e+00 }, - { -2.822227267522746e-09, 3.036636691510884e+00 }, - { -2.826909212922864e-09, 3.041241671864994e+00 }, - { -2.831484726789317e-09, 3.045751565488710e+00 }, - { -2.835953636855826e-09, 3.050165755818853e+00 }, - { -2.840315774871260e-09, 3.054483629182857e+00 }, - { -2.844570976602957e-09, 3.058704574835744e+00 }, - { -2.848719081844986e-09, 3.062827985002047e+00 }, - { -2.852759934424164e-09, 3.066853254915581e+00 }, - { -2.856693382203833e-09, 3.070779782857041e+00 }, - { -2.860519277092708e-09, 3.074606970196721e+00 }, - { -2.864237475047239e-09, 3.078334221430809e+00 }, - { -2.867847836080156e-09, 3.081960944223928e+00 }, - { -2.871350224262603e-09, 3.085486549445314e+00 }, - { -2.874744507732462e-09, 3.088910451211251e+00 }, - { -2.878030558696270e-09, 3.092232066921130e+00 }, - { -2.881208253436038e-09, 3.095450817298478e+00 }, - { -2.884277472313999e-09, 3.098566126429974e+00 }, - { -2.887238099774968e-09, 3.101577421802070e+00 }, - { -2.890090024353816e-09, 3.104484134342861e+00 }, - { -2.892833138676371e-09, 3.107285698457308e+00 }, - { -2.895467339466766e-09, 3.109981552069083e+00 }, - { -2.897992527547963e-09, 3.112571136655481e+00 }, - { -2.900408607848946e-09, 3.115053897289195e+00 }, - { -2.902715489404992e-09, 3.117429282673042e+00 }, - { -2.904913085363323e-09, 3.119696745180238e+00 }, - { -2.907001312986328e-09, 3.121855740892224e+00 }, - { -2.908980093652563e-09, 3.123905729634218e+00 }, - { -2.910849352862924e-09, 3.125846175016163e+00 }, - { -2.912609020239985e-09, 3.127676544466606e+00 }, - { -2.914259029534118e-09, 3.129396309273659e+00 }, - { -2.915799318622574e-09, 3.131004944618667e+00 }, - { -2.917229829515169e-09, 3.132501929616775e+00 }, - { -2.918550508353347e-09, 3.133886747350606e+00 }, - { -2.919761305414294e-09, 3.135158884909254e+00 }, - { -2.920862175112829e-09, 3.136317833424958e+00 }, - { -2.921853076000972e-09, 3.137363088107359e+00 }, - { -2.922733970772719e-09, 3.138294148283254e+00 }, - { -2.923504826262027e-09, 3.139110517429204e+00 }, - { -2.924165613447473e-09, 3.139811703211207e+00 }, - { -2.924716307449950e-09, 3.140397217517018e+00 }, - { -2.925156887536978e-09, 3.140866576495489e+00 }, - { -2.925487337120335e-09, 3.141219300588825e+00 }, - { -2.925707643758784e-09, 3.141454914570261e+00 }, - { -2.925817799158535e-09, 3.141572947579352e+00 }, - { -2.925817799171455e-09, 3.141572933154836e+00 }, - { -2.925707643798390e-09, 3.141454409272987e+00 }, - { -2.925487337185779e-09, 3.141216918378770e+00 }, - { -2.925156887628892e-09, 3.140860007424112e+00 }, - { -2.924716307568119e-09, 3.140383227898687e+00 }, - { -2.924165613591896e-09, 3.139786135867868e+00 }, - { -2.923504826432903e-09, 3.139068292003385e+00 }, - { -2.922733970969412e-09, 3.138229261619561e+00 }, - { -2.921853076224321e-09, 3.137268614707029e+00 }, - { -2.920862175361976e-09, 3.136185925964038e+00 }, - { -2.919761305690083e-09, 3.134980774833275e+00 }, - { -2.918550508654911e-09, 3.133652745531368e+00 }, - { -2.917229829843137e-09, 3.132201427085629e+00 }, - { -2.915799318976726e-09, 3.130626413363146e+00 }, - { -2.914259029914435e-09, 3.128927303107136e+00 }, - { -2.912609020646661e-09, 3.127103699965947e+00 }, - { -2.910849353295315e-09, 3.125155212527586e+00 }, - { -2.908980094111509e-09, 3.123081454351802e+00 }, - { -2.907001313470937e-09, 3.120882043999591e+00 }, - { -2.904913085874448e-09, 3.118556605068443e+00 }, - { -2.902715489941767e-09, 3.116104766219928e+00 }, - { -2.900408608411958e-09, 3.113526161214776e+00 }, - { -2.897992528137022e-09, 3.110820428940251e+00 }, - { -2.895467340081818e-09, 3.107987213444579e+00 }, - { -2.892833139317615e-09, 3.105026163964191e+00 }, - { -2.890090025020589e-09, 3.101936934956479e+00 }, - { -2.887238100468092e-09, 3.098719186130021e+00 }, - { -2.884277473032614e-09, 3.095372582472161e+00 }, - { -2.881208254180937e-09, 3.091896794282404e+00 }, - { -2.878030559466594e-09, 3.088291497198199e+00 }, - { -2.874744508528832e-09, 3.084556372228054e+00 }, - { -2.871350225084755e-09, 3.080691105776848e+00 }, - { -2.867847836928063e-09, 3.076695389678615e+00 }, - { -2.864237475921086e-09, 3.072568921221621e+00 }, - { -2.860519277991847e-09, 3.068311403179147e+00 }, - { -2.856693383129018e-09, 3.063922543837792e+00 }, - { -2.852759935374575e-09, 3.059402057023109e+00 }, - { -2.848719082821403e-09, 3.054749662130841e+00 }, - { -2.844570977604520e-09, 3.049965084150782e+00 }, - { -2.840315775898525e-09, 3.045048053697736e+00 }, - { -2.835953637908582e-09, 3.039998307034967e+00 }, - { -2.831484727867511e-09, 3.034815586104635e+00 }, - { -2.826909214026628e-09, 3.029499638550941e+00 }, - { -2.822227268651470e-09, 3.024050217748861e+00 }, - { -2.817439068015245e-09, 3.018467082830179e+00 }, - { -2.812544792390175e-09, 3.012749998707001e+00 }, - { -2.807544626043751e-09, 3.006898736100911e+00 }, - { -2.802438757228650e-09, 3.000913071564665e+00 }, - { -2.797227378178760e-09, 2.994792787510961e+00 }, - { -2.791910685098702e-09, 2.988537672233504e+00 }, - { -2.786488878159805e-09, 2.982147519935565e+00 }, - { -2.780962161489413e-09, 2.975622130750641e+00 }, - { -2.775330743165298e-09, 2.968961310769028e+00 }, - { -2.769594835207775e-09, 2.962164872061613e+00 }, - { -2.763754653569747e-09, 2.955232632701135e+00 }, - { -2.757810418131543e-09, 2.948164416789036e+00 }, - { -2.751762352689432e-09, 2.940960054474719e+00 }, - { -2.745610684950541e-09, 2.933619381982341e+00 }, - { -2.739355646520809e-09, 2.926142241629213e+00 }, - { -2.732997472899722e-09, 2.918528481852205e+00 }, - { -2.726536403468318e-09, 2.910777957226018e+00 }, - { -2.719972681482232e-09, 2.902890528487386e+00 }, - { -2.713306554062453e-09, 2.894866062556452e+00 }, - { -2.706538272184154e-09, 2.886704432555728e+00 }, - { -2.699668090670078e-09, 2.878405517834426e+00 }, - { -2.692696268177908e-09, 2.869969203985464e+00 }, - { -2.685623067193599e-09, 2.861395382869544e+00 }, - { -2.678448754018380e-09, 2.852683952631486e+00 }, - { -2.671173598761847e-09, 2.843834817723832e+00 }, - { -2.663797875328991e-09, 2.834847888922988e+00 }, - { -2.656321861411517e-09, 2.825723083350459e+00 }, - { -2.648745838477759e-09, 2.816460324492298e+00 }, - { -2.641070091759922e-09, 2.807059542215146e+00 }, - { -2.633294910246296e-09, 2.797520672788269e+00 }, - { -2.625420586667340e-09, 2.787843658897949e+00 }, - { -2.617447417487602e-09, 2.778028449668942e+00 }, - { -2.609375702891616e-09, 2.768075000678399e+00 }, - { -2.601205746775692e-09, 2.757983273976943e+00 }, - { -2.592937856733464e-09, 2.747753238101915e+00 }, - { -2.584572344046340e-09, 2.737384868096553e+00 }, - { -2.576109523671634e-09, 2.726878145526201e+00 }, - { -2.567549714229129e-09, 2.716233058492422e+00 }, - { -2.558893237991435e-09, 2.705449601651722e+00 }, - { -2.550140420869302e-09, 2.694527776227857e+00 }, - { -2.541291592402089e-09, 2.683467590030445e+00 }, - { -2.532347085742440e-09, 2.672269057466213e+00 }, - { -2.523307237646751e-09, 2.660932199557362e+00 }, - { -2.514172388459584e-09, 2.649457043952206e+00 }, - { -2.504942882102813e-09, 2.637843624941622e+00 }, - { -2.495619066062810e-09, 2.626091983472908e+00 }, - { -2.486201291375123e-09, 2.614202167160335e+00 }, - { -2.476689912614465e-09, 2.602174230302269e+00 }, - { -2.467085287878098e-09, 2.590008233889805e+00 }, - { -2.457387778775451e-09, 2.577704245623143e+00 }, - { -2.447597750411553e-09, 2.565262339920002e+00 }, - { -2.437715571376127e-09, 2.552682597931055e+00 }, - { -2.427741613727123e-09, 2.539965107548168e+00 }, - { -2.417676252978335e-09, 2.527109963417675e+00 }, - { -2.407519868085581e-09, 2.514117266951687e+00 }, - { -2.397272841430131e-09, 2.500987126335739e+00 }, - { -2.386935558807595e-09, 2.487719656543254e+00 }, - { -2.376508409410024e-09, 2.474314979341178e+00 }, - { -2.365991785814531e-09, 2.460773223303822e+00 }, - { -2.355386083965131e-09, 2.447094523817833e+00 }, - { -2.344691703161363e-09, 2.433279023095734e+00 }, - { -2.333909046040126e-09, 2.419326870180582e+00 }, - { -2.323038518562289e-09, 2.405238220956597e+00 }, - { -2.312080529997549e-09, 2.391013238157397e+00 }, - { -2.301035492907384e-09, 2.376652091371587e+00 }, - { -2.289903823131822e-09, 2.362154957053137e+00 }, - { -2.278685939771276e-09, 2.347522018525197e+00 }, - { -2.267382265173420e-09, 2.332753465990296e+00 }, - { -2.255993224914501e-09, 2.317849496533128e+00 }, - { -2.244519247786155e-09, 2.302810314130351e+00 }, - { -2.232960765776561e-09, 2.287636129652823e+00 }, - { -2.221318214056095e-09, 2.272327160873552e+00 }, - { -2.209592030960763e-09, 2.256883632472565e+00 }, - { -2.197782657974034e-09, 2.241305776039511e+00 }, - { -2.185890539712767e-09, 2.225593830081461e+00 }, - { -2.173916123907886e-09, 2.209748040023618e+00 }, - { -2.161859861389976e-09, 2.193768658216360e+00 }, - { -2.149722206070124e-09, 2.177655943935795e+00 }, - { -2.137503614923981e-09, 2.161410163388424e+00 }, - { -2.125204547975352e-09, 2.145031589714984e+00 }, - { -2.112825468276292e-09, 2.128520502989477e+00 }, - { -2.100366841892917e-09, 2.111877190225612e+00 }, - { -2.087829137884807e-09, 2.095101945374541e+00 }, - { -2.075212828290086e-09, 2.078195069329960e+00 }, - { -2.062518388104923e-09, 2.061156869925600e+00 }, - { -2.049746295268559e-09, 2.043987661939897e+00 }, - { -2.036897030642658e-09, 2.026687767092888e+00 }, - { -2.023971077994576e-09, 2.009257514048162e+00 }, - { -2.010968923979840e-09, 1.991697238413571e+00 }, - { -1.997891058121344e-09, 1.974007282737320e+00 }, - { -1.984737972794098e-09, 1.956187996511354e+00 }, - { -1.971510163203686e-09, 1.938239736166060e+00 }, - { -1.958208127370276e-09, 1.920162865072273e+00 }, - { -1.944832366107339e-09, 1.901957753535934e+00 }, - { -1.931383383005451e-09, 1.883624778799427e+00 }, - { -1.917861684410531e-09, 1.865164325035177e+00 }, - { -1.904267779407432e-09, 1.846576783346324e+00 }, - { -1.890602179798714e-09, 1.827862551760622e+00 }, - { -1.876865400086483e-09, 1.809022035228338e+00 }, - { -1.863057957452539e-09, 1.790055645617624e+00 }, - { -1.849180371740008e-09, 1.770963801711725e+00 }, - { -1.835233165431475e-09, 1.751746929201178e+00 }, - { -1.821216863631569e-09, 1.732405460681919e+00 }, - { -1.807131994045840e-09, 1.712939835648088e+00 }, - { -1.792979086962494e-09, 1.693350500488565e+00 }, - { -1.778758675229683e-09, 1.673637908477153e+00 }, - { -1.764471294238191e-09, 1.653802519770021e+00 }, - { -1.750117481899733e-09, 1.633844801396848e+00 }, - { -1.735697778626995e-09, 1.613765227254186e+00 }, - { -1.721212727314574e-09, 1.593564278099856e+00 }, - { -1.706662873315474e-09, 1.573242441540939e+00 }, - { -1.692048764423848e-09, 1.552800212030258e+00 }, - { -1.677370950852395e-09, 1.532238090855187e+00 }, - { -1.662629985213192e-09, 1.511556586131055e+00 }, - { -1.647826422494560e-09, 1.490756212788764e+00 }, - { -1.632960820042537e-09, 1.469837492568651e+00 }, - { -1.618033737538645e-09, 1.448800954008929e+00 }, - { -1.603045736978760e-09, 1.427647132435469e+00 }, - { -1.587997382653428e-09, 1.406376569953373e+00 }, - { -1.572889241124034e-09, 1.384989815432507e+00 }, - { -1.557721881203696e-09, 1.363487424499449e+00 }, - { -1.542495873934815e-09, 1.341869959524515e+00 }, - { -1.527211792568486e-09, 1.320137989611176e+00 }, - { -1.511870212541253e-09, 1.298292090581491e+00 }, - { -1.496471711454994e-09, 1.276332844965754e+00 }, - { -1.481016869054634e-09, 1.254260841988828e+00 }, - { -1.465506267206068e-09, 1.232076677556547e+00 }, - { -1.449940489875303e-09, 1.209780954243628e+00 }, - { -1.434320123104372e-09, 1.187374281276747e+00 }, - { -1.418645754991533e-09, 1.164857274523495e+00 }, - { -1.402917975667710e-09, 1.142230556475749e+00 }, - { -1.387137377275425e-09, 1.119494756236361e+00 }, - { -1.371304553944712e-09, 1.096650509501278e+00 }, - { -1.355420101772623e-09, 1.073698458546610e+00 }, - { -1.339484618799891e-09, 1.050639252211352e+00 }, - { -1.323498704988051e-09, 1.027473545880543e+00 }, - { -1.307462962198534e-09, 1.004202001471034e+00 }, - { -1.291377994167204e-09, 9.808252874104182e-01 }, - { -1.275244406484394e-09, 9.573440786237052e-01 }, - { -1.259062806570190e-09, 9.337590565128454e-01 }, - { -1.242833803653464e-09, 9.100709089414796e-01 }, - { -1.226558008746195e-09, 8.862803302125812e-01 }, - { -1.210236034623253e-09, 8.623880210538113e-01 }, - { -1.193868495797618e-09, 8.383946885959868e-01 }, - { -1.177456008497777e-09, 8.143010463544786e-01 }, - { -1.160999190645010e-09, 7.901078142102129e-01 }, - { -1.144498661828833e-09, 7.658157183877095e-01 }, - { -1.127955043284965e-09, 7.414254914366063e-01 }, - { -1.111368957870986e-09, 7.169378722095157e-01 }, - { -1.094741030044308e-09, 6.923536058430697e-01 }, - { -1.078071885836393e-09, 6.676734437331688e-01 }, - { -1.061362152831423e-09, 6.428981435165511e-01 }, - { -1.044612460141255e-09, 6.180284690466404e-01 }, - { -1.027823438382183e-09, 5.930651903718045e-01 }, - { -1.010995719652015e-09, 5.680090837138436e-01 }, - { -9.941299375042378e-10, 5.428609314418970e-01 }, - { -9.772267269262058e-10, 5.176215220520872e-01 }, - { -9.602867243141016e-10, 4.922916501421032e-01 }, - { -9.433105674499058e-10, 4.668721163885412e-01 }, - { -9.262988954758817e-10, 4.413637275202624e-01 }, - { -9.092523488719689e-10, 4.157672962958654e-01 }, - { -8.921715694311144e-10, 3.900836414778084e-01 }, - { -8.750572002347607e-10, 3.643135878065193e-01 }, - { -8.579098856296589e-10, 3.384579659762392e-01 }, - { -8.407302712022458e-10, 3.125176126069478e-01 }, - { -8.235190037551917e-10, 2.864933702193017e-01 }, - { -8.062767312831008e-10, 2.603860872080448e-01 }, - { -7.890041029479477e-10, 2.341966178147619e-01 }, - { -7.717017690542486e-10, 2.079258220999725e-01 }, - { -7.543703810250266e-10, 1.815745659161734e-01 }, - { -7.370105913774597e-10, 1.551437208801425e-01 }, - { -7.196230536974697e-10, 1.286341643433767e-01 }, - { -7.022084226165876e-10, 1.020467793657360e-01 }, - { -6.847673537853251e-10, 7.538245468350446e-02 }, - { -6.673005038502516e-10, 4.864208468284503e-02 }, - { -6.498085304282128e-10, 2.182656936863137e-02 }, - { -6.322920920826137e-10, -5.063185663820913e-03 }, - { -6.147518482969490e-10, -3.202626926150343e-02 }, - { -5.971884594516681e-10, -5.906176474160862e-02 }, - { -5.796025867984469e-10, -8.616874992366363e-02 }, - { -5.619948924353588e-10, -1.133462971605448e-01 }, - { -5.443660392823640e-10, -1.405934733692621e-01 }, - { -5.267166910556339e-10, -1.679093400638023e-01 }, - { -5.090475122431451e-10, -1.952929533862739e-01 }, - { -4.913591680795342e-10, -2.227433641394564e-01 }, - { -4.736523245210571e-10, -2.502596178194491e-01 }, - { -4.559276482202303e-10, -2.778407546490776e-01 }, - { -4.381858065011618e-10, -3.054858096104932e-01 }, - { -4.204274673340870e-10, -3.331938124792702e-01 }, - { -4.026532993105397e-10, -3.609637878577768e-01 }, - { -3.848639716178888e-10, -3.887947552098022e-01 }, - { -3.670601540142443e-10, -4.166857288948674e-01 }, - { -3.492425168032583e-10, -4.446357182029681e-01 }, - { -3.314117308088734e-10, -4.726437273896633e-01 }, - { -3.135684673501752e-10, -5.007087557112619e-01 }, - { -2.957133982159296e-10, -5.288297974607742e-01 }, - { -2.778471956393828e-10, -5.570058420037128e-01 }, - { -2.599705322729564e-10, -5.852358738143247e-01 }, - { -2.420840811628366e-10, -6.135188725122560e-01 }, - { -2.241885157240923e-10, -6.418538128986450e-01 }, - { -2.062845097142585e-10, -6.702396649949099e-01 }, - { -1.883727372093546e-10, -6.986753940779493e-01 }, - { -1.704538725773087e-10, -7.271599607197149e-01 }, - { -1.525285904532877e-10, -7.556923208240308e-01 }, - { -1.345975657140748e-10, -7.842714256651911e-01 }, - { -1.166614734526054e-10, -8.128962219265712e-01 }, - { -9.872098895260891e-11, -8.415656517393372e-01 }, - { -8.077678766314517e-11, -8.702786527215916e-01 }, - { -6.282954517324612e-11, -8.990341580176152e-01 }, - { -4.487993718655790e-11, -9.278310963373758e-01 }, - { -2.692863949561210e-11, -9.566683919968972e-01 }, - { -8.976327956520795e-12, -9.855449649582175e-01 }, - { 8.976321536169872e-12, -1.014459730869357e+00 }, - { 2.692863307547294e-11, -1.043411601105914e+00 }, - { 4.487993076694813e-11, -1.072399482811314e+00 }, - { 6.282953875437751e-11, -1.101422278938424e+00 }, - { 8.077678124517653e-11, -1.130478888291020e+00 }, - { 9.872098253591082e-11, -1.159568205565684e+00 }, - { 1.166614670373367e-10, -1.188689121393192e+00 }, - { 1.345975593005002e-10, -1.217840522381901e+00 }, - { 1.525285840416718e-10, -1.247021291159495e+00 }, - { 1.704538661678104e-10, -1.276230306415868e+00 }, - { 1.883727308022916e-10, -1.305466442946703e+00 }, - { 2.062845033098954e-10, -1.334728571696106e+00 }, - { 2.241885093225349e-10, -1.364015559800721e+00 }, - { 2.420840747645085e-10, -1.393326270633325e+00 }, - { 2.599705258779635e-10, -1.422659563847049e+00 }, - { 2.778471892479898e-10, -1.452014295419243e+00 }, - { 2.957133918284542e-10, -1.481389317696831e+00 }, - { 3.135684609667761e-10, -1.510783479440191e+00 }, - { 3.314117244297624e-10, -1.540195625869043e+00 }, - { 3.492425104288060e-10, -1.569624598707558e+00 }, - { 3.670601476445565e-10, -1.599069236228850e+00 }, - { 3.848639652533361e-10, -1.628528373302631e+00 }, - { 4.026532929512281e-10, -1.658000841439269e+00 }, - { 4.204274609803869e-10, -1.687485468837799e+00 }, - { 4.381858001531792e-10, -1.716981080430596e+00 }, - { 4.559276418782829e-10, -1.746486497931567e+00 }, - { 4.736523181853565e-10, -1.776000539882225e+00 }, - { 4.913591617503452e-10, -1.805522021699094e+00 }, - { 5.090475059206794e-10, -1.835049755721194e+00 }, - { 5.267166847401562e-10, -1.864582551257262e+00 }, - { 5.443660329740862e-10, -1.894119214633676e+00 }, - { 5.619948861345454e-10, -1.923658549242818e+00 }, - { 5.796025805053097e-10, -1.953199355591180e+00 }, - { 5.971884531664190e-10, -1.982740431347091e+00 }, - { 6.147518420199055e-10, -2.012280571390674e+00 }, - { 6.322920858139346e-10, -2.041818567861395e+00 }, - { 6.498085241682158e-10, -2.071353210208005e+00 }, - { 6.673004975990425e-10, -2.100883285238127e+00 }, - { 6.847673475432746e-10, -2.130407577166309e+00 }, - { 7.022084163838545e-10, -2.159924867664933e+00 }, - { 7.196230474743716e-10, -2.189433935913779e+00 }, - { 7.370105851640495e-10, -2.218933558650552e+00 }, - { 7.543703748217808e-10, -2.248422510220072e+00 }, - { 7.717017628611672e-10, -2.277899562625407e+00 }, - { 7.890040967654542e-10, -2.307363485579104e+00 }, - { 8.062767251113011e-10, -2.336813046552684e+00 }, - { 8.235189975944034e-10, -2.366247010829556e+00 }, - { 8.407302650525749e-10, -2.395664141553858e+00 }, - { 8.579098794915287e-10, -2.425063199784153e+00 }, - { 8.750571941082773e-10, -2.454442944543319e+00 }, - { 8.921715633164894e-10, -2.483802132872044e+00 }, - { 9.092523427695200e-10, -2.513139519878584e+00 }, - { 9.262988893857148e-10, -2.542453858792682e+00 }, - { 9.433105613723914e-10, -2.571743901017465e+00 }, - { 9.602867182493987e-10, -2.601008396180870e+00 }, - { 9.772267208744730e-10, -2.630246092190425e+00 }, - { 9.941299314658458e-10, -2.659455735283526e+00 }, - { 1.010995713627070e-09, -2.688636070081818e+00 }, - { 1.027823432371055e-09, -2.717785839644439e+00 }, - { 1.044612454143997e-09, -2.746903785521352e+00 }, - { 1.061362146848353e-09, -2.775988647805256e+00 }, - { 1.078071879867828e-09, -2.805039165187255e+00 }, - { 1.094741024090249e-09, -2.834054075009077e+00 }, - { 1.111368951931856e-09, -2.863032113318052e+00 }, - { 1.127955037360817e-09, -2.891972014920939e+00 }, - { 1.144498655920037e-09, -2.920872513436805e+00 }, - { 1.160999184751779e-09, -2.949732341353290e+00 }, - { 1.177456002620215e-09, -2.978550230079517e+00 }, - { 1.193868489936097e-09, -3.007324910002949e+00 }, - { 1.210236028777826e-09, -3.036055110540183e+00 }, - { 1.226558002917232e-09, -3.064739560196251e+00 }, - { 1.242833797841123e-09, -3.093376986616735e+00 }, - { 1.259062800774685e-09, -3.121966116643377e+00 }, - { 1.275244400705935e-09, -3.150505676371791e+00 }, - { 1.291377988406056e-09, -3.178994391202159e+00 }, - { 1.307462956454857e-09, -3.207430985899192e+00 }, - { 1.323498699262108e-09, -3.235814184645077e+00 }, - { 1.339484613091842e-09, -3.264142711097884e+00 }, - { 1.355420096082785e-09, -3.292415288443373e+00 }, - { 1.371304548273191e-09, -3.320630639454825e+00 }, - { 1.387137371622433e-09, -3.348787486547389e+00 }, - { 1.402917970033511e-09, -3.376884551834256e+00 }, - { 1.418645749376393e-09, -3.404920557184582e+00 }, - { 1.434320117508396e-09, -3.432894224276359e+00 }, - { 1.449940484298756e-09, -3.460804274656981e+00 }, - { 1.465506261649108e-09, -3.488649429796768e+00 }, - { 1.481016863517580e-09, -3.516428411149154e+00 }, - { 1.496471705937951e-09, -3.544139940202303e+00 }, - { 1.511870207044433e-09, -3.571782738540999e+00 }, - { 1.527211787092206e-09, -3.599355527901174e+00 }, - { 1.542495868479076e-09, -3.626857030226671e+00 }, - { 1.557721875768920e-09, -3.654285967729458e+00 }, - { 1.572889235710329e-09, -3.681641062941412e+00 }, - { 1.587997377261005e-09, -3.708921038776707e+00 }, - { 1.603045731607830e-09, -3.736124618586623e+00 }, - { 1.618033732189314e-09, -3.763250526218862e+00 }, - { 1.632960814715177e-09, -3.790297486071938e+00 }, - { 1.647826417189275e-09, -3.817264223155802e+00 }, - { 1.662629979930247e-09, -3.844149463148589e+00 }, - { 1.677370945591844e-09, -3.870951932452996e+00 }, - { 1.692048759186008e-09, -3.897670358257890e+00 }, - { 1.706662868100504e-09, -3.924303468590212e+00 }, - { 1.721212722122685e-09, -3.950849992378278e+00 }, - { 1.735697773458400e-09, -3.977308659506432e+00 }, - { 1.750117476754591e-09, -4.003678200876669e+00 }, - { 1.764471289116712e-09, -4.029957348461003e+00 }, - { 1.778758670132079e-09, -4.056144835364877e+00 }, - { 1.792979081888926e-09, -4.082239395882965e+00 }, - { 1.807131988996465e-09, -4.108239765556996e+00 }, - { 1.821216858606652e-09, -4.134144681236933e+00 }, - { 1.835233160431175e-09, -4.159952881133585e+00 }, - { 1.849180366764537e-09, -4.185663104882633e+00 }, - { 1.863057952502055e-09, -4.211274093599509e+00 }, - { 1.876865395161145e-09, -4.236784589940537e+00 }, - { 1.890602174898734e-09, -4.262193338157148e+00 }, - { 1.904267774533022e-09, -4.287499084158302e+00 }, - { 1.917861679562008e-09, -4.312700575567174e+00 }, - { 1.931383378182392e-09, -4.337796561778708e+00 }, - { 1.944832361310856e-09, -4.362785794021793e+00 }, - { 1.958208122599839e-09, -4.387667025411434e+00 }, - { 1.971510158459931e-09, -4.412439011013396e+00 }, - { 1.984737968076495e-09, -4.437100507898339e+00 }, - { 1.997891053431005e-09, -4.461650275204912e+00 }, - { 2.010968919316289e-09, -4.486087074191693e+00 }, - { 2.023971073358447e-09, -4.510409668301784e+00 }, - { 2.036897026033634e-09, -4.534616823217992e+00 }, - { 2.049746290686799e-09, -4.558707306921882e+00 }, - { 2.062518383551274e-09, -4.582679889754607e+00 }, - { 2.075212823764071e-09, -4.606533344469879e+00 }, - { 2.087829133387063e-09, -4.630266446298172e+00 }, - { 2.100366837422912e-09, -4.653877973001258e+00 }, - { 2.112825463835087e-09, -4.677366704934605e+00 }, - { 2.125204543562522e-09, -4.700731425099899e+00 }, - { 2.137503610540056e-09, -4.723970919208608e+00 }, - { 2.149722201714786e-09, -4.747083975738060e+00 }, - { 2.161859857063438e-09, -4.770069385989595e+00 }, - { 2.173916119610994e-09, -4.792925944149308e+00 }, - { 2.185890535445098e-09, -4.815652447340950e+00 }, - { 2.197782653735957e-09, -4.838247695689436e+00 }, - { 2.209592026751962e-09, -4.860710492376411e+00 }, - { 2.221318209877576e-09, -4.883039643700314e+00 }, - { 2.232960761627846e-09, -4.905233959130168e+00 }, - { 2.244519243667616e-09, -4.927292251368517e+00 }, - { 2.255993220826402e-09, -4.949213336406265e+00 }, - { 2.267382261115285e-09, -4.970996033581527e+00 }, - { 2.278685935744269e-09, -4.992639165639563e+00 }, - { 2.289903819135414e-09, -5.014141558784778e+00 }, - { 2.301035488942000e-09, -5.035502042744443e+00 }, - { 2.312080526062763e-09, -5.056719450823151e+00 }, - { 2.323038514659161e-09, -5.077792619963239e+00 }, - { 2.333909042168180e-09, -5.098720390796817e+00 }, - { 2.344691699320969e-09, -5.119501607709159e+00 }, - { 2.355386080156553e-09, -5.140135118892792e+00 }, - { 2.365991782037187e-09, -5.160619776404897e+00 }, - { 2.376508405665132e-09, -5.180954436227641e+00 }, - { 2.386935555094626e-09, -5.201137958319343e+00 }, - { 2.397272837749508e-09, -5.221169206676762e+00 }, - { 2.407519864436774e-09, -5.241047049389645e+00 }, - { 2.417676249362563e-09, -5.260770358700167e+00 }, - { 2.427741610143750e-09, -5.280338011053974e+00 }, - { 2.437715567825576e-09, -5.299748887163106e+00 }, - { 2.447597746894037e-09, -5.319001872058887e+00 }, - { 2.457387775290440e-09, -5.338095855149190e+00 }, - { 2.467085284426756e-09, -5.357029730277389e+00 }, - { 2.476689909196263e-09, -5.375802395772283e+00 }, - { 2.486201287990485e-09, -5.394412754510426e+00 }, - { 2.495619062711154e-09, -5.412859713968929e+00 }, - { 2.504942878785408e-09, -5.431142186284682e+00 }, - { 2.514172385175743e-09, -5.449259088303476e+00 }, - { 2.523307234396791e-09, -5.467209341642627e+00 }, - { 2.532347082526785e-09, -5.484991872743321e+00 }, - { 2.541291589219998e-09, -5.502605612925014e+00 }, - { 2.550140417722072e-09, -5.520049498445633e+00 }, - { 2.558893234878378e-09, -5.537322470548212e+00 }, - { 2.567549711150773e-09, -5.554423475524196e+00 }, - { 2.576109520627371e-09, -5.571351464763084e+00 }, - { 2.584572341037361e-09, -5.588105394812198e+00 }, - { 2.592937853759161e-09, -5.604684227423386e+00 }, - { 2.601205743836355e-09, -5.621086929615246e+00 }, - { 2.609375699987564e-09, -5.637312473723475e+00 }, - { 2.617447414618146e-09, -5.653359837454964e+00 }, - { 2.625420583833750e-09, -5.669228003945694e+00 }, - { 2.633294907447937e-09, -5.684915961806963e+00 }, - { 2.641070088997271e-09, -5.700422705186584e+00 }, - { 2.648745835750128e-09, -5.715747233817712e+00 }, - { 2.656321858720176e-09, -5.730888553077074e+00 }, - { 2.663797872673252e-09, -5.745845674030161e+00 }, - { 2.671173596142054e-09, -5.760617613492118e+00 }, - { 2.678448751434797e-09, -5.775203394076705e+00 }, - { 2.685623064645538e-09, -5.789602044248679e+00 }, - { 2.692696265666640e-09, -5.803812598380606e+00 }, - { 2.699668088194915e-09, -5.817834096797069e+00 }, - { 2.706538269745573e-09, -5.831665585834668e+00 }, - { 2.713306551659817e-09, -5.845306117889361e+00 }, - { 2.719972679116734e-09, -5.858754751472542e+00 }, - { 2.726536401139295e-09, -5.872010551255358e+00 }, - { 2.732997470607439e-09, -5.885072588127400e+00 }, - { 2.739355644265558e-09, -5.897939939244211e+00 }, - { 2.745610682731633e-09, -5.910611688078208e+00 }, - { 2.751762350508137e-09, -5.923086924473290e+00 }, - { 2.757810415987146e-09, -5.935364744687794e+00 }, - { 2.763754651462700e-09, -5.947444251452243e+00 }, - { 2.769594833137415e-09, -5.959324554015538e+00 }, - { 2.775330741132843e-09, -5.971004768198829e+00 }, - { 2.780962159494174e-09, -5.982484016437981e+00 }, - { 2.786488876202047e-09, -5.993761427840588e+00 }, - { 2.791910683178690e-09, -6.004836138231525e+00 }, - { 2.797227376295779e-09, -6.015707290202086e+00 }, - { 2.802438755383971e-09, -6.026374033162623e+00 }, - { 2.807544624236659e-09, -6.036835523383457e+00 }, - { 2.812544790621093e-09, -6.047090924050914e+00 }, - { 2.817439066283459e-09, -6.057139405311101e+00 }, - { 2.822227266958278e-09, -6.066980144322601e+00 }, - { 2.826909212371261e-09, -6.076612325295799e+00 }, - { 2.831484726250221e-09, -6.086035139548830e+00 }, - { 2.835953636329660e-09, -6.095247785550617e+00 }, - { 2.840315774357203e-09, -6.104249468967751e+00 }, - { 2.844570976102082e-09, -6.113039402715685e+00 }, - { 2.848719081357095e-09, -6.121616806996519e+00 }, - { 2.852759933948860e-09, -6.129980909353977e+00 }, - { 2.856693381741114e-09, -6.138130944714082e+00 }, - { 2.860519276643053e-09, -6.146066155436312e+00 }, - { 2.864237474610633e-09, -6.153785791350256e+00 }, - { 2.867847835656203e-09, -6.161289109809551e+00 }, - { 2.871350223851726e-09, -6.168575375732642e+00 }, - { 2.874744507333867e-09, -6.175643861647406e+00 }, - { 2.878030558310989e-09, -6.182493847739853e+00 }, - { 2.881208253063899e-09, -6.189124621889823e+00 }, - { 2.884277471954592e-09, -6.195535479723423e+00 }, - { 2.887238099428306e-09, -6.201725724651554e+00 }, - { 2.890090024020323e-09, -6.207694667918394e+00 }, - { 2.892833138356060e-09, -6.213441628635915e+00 }, - { 2.895467339159240e-09, -6.218965933835304e+00 }, - { 2.897992527253659e-09, -6.224266918505075e+00 }, - { 2.900408607567016e-09, -6.229343925633495e+00 }, - { 2.902715489136496e-09, -6.234196306254763e+00 }, - { 2.904913085108075e-09, -6.238823419482017e+00 }, - { 2.907001312743911e-09, -6.243224632557377e+00 }, - { 2.908980093422997e-09, -6.247399320887848e+00 }, - { 2.910849352646620e-09, -6.251346868091392e+00 }, - { 2.912609020036956e-09, -6.255066666028537e+00 }, - { 2.914259029343965e-09, -6.258558114851525e+00 }, - { 2.915799318445710e-09, -6.261820623039620e+00 }, - { 2.917229829350759e-09, -6.264853607438842e+00 }, - { 2.918550508202463e-09, -6.267656493305673e+00 }, - { 2.919761305276718e-09, -6.270228714337005e+00 }, - { 2.920862174988150e-09, -6.272569712717951e+00 }, - { 2.921853075889193e-09, -6.274678939154603e+00 }, - { 2.922733970674264e-09, -6.276555852917634e+00 }, - { 2.923504826176907e-09, -6.278199921870962e+00 }, - { 2.924165613375264e-09, -6.279610622518139e+00 }, - { 2.924716307391075e-09, -6.280787440034993e+00 }, - { 2.925156887490598e-09, -6.281729868306345e+00 }, - { 2.925487337087508e-09, -6.282437409966992e+00 }, - { 2.925707643739298e-09, -6.282909576428774e+00 }, - { 2.925817799151970e-09, -6.283145887925411e+00 }, diff --git a/gnuradio-core/src/lib/gnuradio-config-info.cc b/gnuradio-core/src/lib/gnuradio-config-info.cc deleted file mode 100644 index d3e6454fd8..0000000000 --- a/gnuradio-core/src/lib/gnuradio-config-info.cc +++ /dev/null @@ -1,72 +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. - */ - -#if HAVE_CONFIG_H -#include <config.h> -#endif - -#include <gr_constants.h> -#include <boost/program_options.hpp> -#include <iostream> - -namespace po = boost::program_options; - -int -main(int argc, char **argv) -{ - po::options_description desc("Program options: gnuradio [options]"); - po::variables_map vm; - - desc.add_options() - ("help,h", "print help message") - ("prefix", "print gnuradio installation prefix") - ("sysconfdir", "print gnuradio system configuration directory") - ("prefsdir", "print gnuradio preferences directory") - ("builddate", "print gnuradio build date (RFC2822 format)") - ("version,v", "print gnuradio version") - ; - - po::store(po::parse_command_line(argc, argv, desc), vm); - po::notify(vm); - - if (vm.size() == 0 || vm.count("help")) { - std::cout << desc << std::endl; - return 1; - } - - if (vm.count("prefix")) - std::cout << gr_prefix() << std::endl; - - if (vm.count("sysconfdir")) - std::cout << gr_sysconfdir() << std::endl; - - if (vm.count("prefsdir")) - std::cout << gr_prefsdir() << std::endl; - - if (vm.count("builddate")) - std::cout << gr_build_date() << std::endl; - - if (vm.count("version")) - std::cout << gr_version() << std::endl; - - return 0; -} diff --git a/gnuradio-core/src/lib/gnuradio-core.rc.in b/gnuradio-core/src/lib/gnuradio-core.rc.in deleted file mode 100644 index a5579ce4ed..0000000000 --- a/gnuradio-core/src/lib/gnuradio-core.rc.in +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- 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-core" - VALUE "FileVersion", "@VERSION@" - VALUE "InternalName", "gnuradio-core.dll" - VALUE "LegalCopyright", "Licensed under GPLv3 or any later version" - VALUE "OriginalFilename", "gnuradio-core.dll" - VALUE "ProductName", "gnuradio-core" - VALUE "ProductVersion", "@VERSION@" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END - END diff --git a/gnuradio-core/src/lib/missing/CMakeLists.txt b/gnuradio-core/src/lib/missing/CMakeLists.txt deleted file mode 100644 index 85267ee482..0000000000 --- a/gnuradio-core/src/lib/missing/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 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. - -######################################################################## -# This file included, use CMake directory variables -######################################################################## - -list(APPEND gnuradio_core_sources - ${CMAKE_CURRENT_SOURCE_DIR}/bug_work_around_8.cc -) - -if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)") - list(APPEND gnuradio_core_sources - ${CMAKE_CURRENT_SOURCE_DIR}/posix_memalign.cc - ) -endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)") diff --git a/gnuradio-core/src/lib/missing/bug_work_around_8.cc b/gnuradio-core/src/lib/missing/bug_work_around_8.cc deleted file mode 100644 index 5e431a210c..0000000000 --- a/gnuradio-core/src/lib/missing/bug_work_around_8.cc +++ /dev/null @@ -1,3 +0,0 @@ -// if libmisc has no sources, it doesn't get built correctly -#include <gruel/attributes.h> -static int gr_bug_work_around_8 __GR_ATTR_UNUSED; diff --git a/gnuradio-core/src/lib/missing/getopt.c b/gnuradio-core/src/lib/missing/getopt.c deleted file mode 100644 index 69c7c16f75..0000000000 --- a/gnuradio-core/src/lib/missing/getopt.c +++ /dev/null @@ -1,733 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu - before changing it! - - Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 - Free Software Foundation, Inc. - - This program 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. - - This program 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* NOTE!!! AIX requires this to be the first thing in the file. - Do not put ANYTHING before it! */ -#if !defined (__GNUC__) && defined (_AIX) - #pragma alloca -#endif - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else /* not __GNUC__ */ -#if defined (HAVE_ALLOCA_H) || (defined(sparc) && (defined(sun) || (!defined(USG) && !defined(SVR4) && !defined(__svr4__)))) -#include <alloca.h> -#else -#ifndef _AIX -char *alloca (); -#endif -#endif /* alloca.h */ -#endif /* not __GNUC__ */ - -#if !__STDC__ && !defined(const) && IN_GCC -#define const -#endif - -/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. */ -#ifndef _NO_PROTO -#define _NO_PROTO -#endif - -#include <stdio.h> - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#if defined (_LIBC) || !defined (__GNU_LIBRARY__) - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -#undef alloca -/* Don't include stdlib.h for non-GNU C libraries because some of them - contain conflicting prototypes for getopt. */ -#include <stdlib.h> -#else /* Not GNU C library. */ -#define __alloca alloca -#endif /* GNU C library. */ - -/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a - long-named option. Because this is not POSIX.2 compliant, it is - being phased out. */ -/* #define GETOPT_COMPAT */ - -/* This version of `getopt' appears to the caller like standard Unix `getopt' - but it behaves differently for the user, since it allows the user - to intersperse the options with the other arguments. - - As `getopt' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Setting the environment variable POSIXLY_CORRECT disables permutation. - Then the behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt.h" - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -char *optarg = 0; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns EOF, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -/* XXX 1003.2 says this must be 1 before any call. */ -int optind = 0; - -/* The next char to be scanned in the option-element - in which the last option character we returned was found. - This allows us to pick up the scan where we left off. - - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - -static char *nextchar; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -int optopt = '?'; - -/* Describe how to deal with options that follow non-option ARGV-elements. - - If the caller did not specify anything, - the default is REQUIRE_ORDER if the environment variable - POSIXLY_CORRECT is defined, PERMUTE otherwise. - - REQUIRE_ORDER means don't recognize them as options; - stop option processing when the first non-option is seen. - This is what Unix does. - This mode of operation is selected by either setting the environment - variable POSIXLY_CORRECT, or using `+' as the first character - of the list of option characters. - - PERMUTE is the default. We permute the contents of ARGV as we scan, - so that eventually all the non-options are at the end. This allows options - to be given in any order, even with programs that were not written to - expect this. - - RETURN_IN_ORDER is an option available to programs that were written - to expect options and other ARGV-elements in any order and that care about - the ordering of the two. We describe each non-option ARGV-element - as if it were the argument of an option with character code 1. - Using `-' as the first character of the list of option characters - selects this mode of operation. - - The special argument `--' forces an end of option-scanning regardless - of the value of `ordering'. In the case of RETURN_IN_ORDER, only - `--' can cause `getopt' to return EOF with `optind' != ARGC. */ - -static enum -{ - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER -} ordering; - -#ifdef __GNU_LIBRARY__ -/* We want to avoid inclusion of string.h with non-GNU libraries - because there are many ways it can cause trouble. - On some systems, it contains special magic macros that don't work - in GCC. */ -#include <string.h> -#define my_index strchr -#define my_bcopy(src, dst, n) memcpy ((dst), (src), (n)) -#else - -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -char *getenv (); - -static char * -my_index (str, chr) - const char *str; - int chr; -{ - while (*str) - { - if (*str == chr) - return (char *) str; - str++; - } - return 0; -} - -static void -my_bcopy (from, to, size) - const char *from; - char *to; - int size; -{ - int i; - for (i = 0; i < size; i++) - to[i] = from[i]; -} -#endif /* GNU C library. */ - -/* Handle permutation of arguments. */ - -/* Describe the part of ARGV that contains non-options that have - been skipped. `first_nonopt' is the index in ARGV of the first of them; - `last_nonopt' is the index after the last of them. */ - -static int first_nonopt; -static int last_nonopt; - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. */ - -static void -exchange (argv) - char **argv; -{ - int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *); - char **temp = (char **) __alloca (nonopts_size); - - /* Interchange the two blocks of data in ARGV. */ - - my_bcopy ((char *) &argv[first_nonopt], (char *) temp, nonopts_size); - my_bcopy ((char *) &argv[last_nonopt], (char *) &argv[first_nonopt], - (optind - last_nonopt) * sizeof (char *)); - my_bcopy ((char *) temp, - (char *) &argv[first_nonopt + optind - last_nonopt], - nonopts_size); - - /* Update records for the slots the non-options now occupy. */ - - first_nonopt += (optind - last_nonopt); - last_nonopt = optind; -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns `EOF'. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return '?' after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return '?'. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - The elements of ARGV aren't really const, because we permute them. - But we pretend they're const in the prototype to be compatible - with other systems. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. */ - -int -_getopt_internal (argc, argv, optstring, longopts, longind, long_only) - int argc; - char *const *argv; - const char *optstring; - const struct option *longopts; - int *longind; - int long_only; -{ - int option_index; - - optarg = 0; - - /* Initialize the internal data when the first call is made. - Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - if (optind == 0) - { - first_nonopt = last_nonopt = optind = 1; - - nextchar = NULL; - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - ordering = REQUIRE_ORDER; - ++optstring; - } - else if (getenv ("POSIXLY_CORRECT") != NULL) - ordering = REQUIRE_ORDER; - else - ordering = PERMUTE; - } - - if (nextchar == NULL || *nextchar == '\0') - { - if (ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (last_nonopt != optind) - first_nonopt = optind; - - /* Now skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (optind < argc - && (argv[optind][0] != '-' || argv[optind][1] == '\0') -#ifdef GETOPT_COMPAT - && (longopts == NULL - || argv[optind][0] != '+' || argv[optind][1] == '\0') -#endif /* GETOPT_COMPAT */ - ) - optind++; - last_nonopt = optind; - } - - /* Special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (optind != argc && !strcmp (argv[optind], "--")) - { - optind++; - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (first_nonopt == last_nonopt) - first_nonopt = optind; - last_nonopt = argc; - - optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (first_nonopt != last_nonopt) - optind = first_nonopt; - return EOF; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if ((argv[optind][0] != '-' || argv[optind][1] == '\0') -#ifdef GETOPT_COMPAT - && (longopts == NULL - || argv[optind][0] != '+' || argv[optind][1] == '\0') -#endif /* GETOPT_COMPAT */ - ) - { - if (ordering == REQUIRE_ORDER) - return EOF; - optarg = argv[optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Start decoding its characters. */ - - nextchar = (argv[optind] + 1 - + (longopts != NULL && argv[optind][1] == '-')); - } - - if (longopts != NULL - && ((argv[optind][0] == '-' - && (argv[optind][1] == '-' || long_only)) -#ifdef GETOPT_COMPAT - || argv[optind][0] == '+' -#endif /* GETOPT_COMPAT */ - )) - { - const struct option *p; - char *s = nextchar; - int exact = 0; - int ambig = 0; - const struct option *pfound = NULL; - int indfound; - - while (*s && *s != '=') - s++; - - /* Test all options for either exact match or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; - p++, option_index++) - if (!strncmp (p->name, nextchar, s - nextchar)) - { - if (s - nextchar == strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, "%s: option `%s' is ambiguous\n", - argv[0], argv[optind]); - nextchar += strlen (nextchar); - optind++; - return '?'; - } - - if (pfound != NULL) - { - option_index = indfound; - optind++; - if (*s) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = s + 1; - else - { - if (opterr) - { - if (argv[optind - 1][1] == '-') - /* --option */ - fprintf (stderr, - "%s: option `--%s' doesn't allow an argument\n", - argv[0], pfound->name); - else - /* +option or -option */ - fprintf (stderr, - "%s: option `%c%s' doesn't allow an argument\n", - argv[0], argv[optind - 1][0], pfound->name); - } - nextchar += strlen (nextchar); - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, "%s: option `%s' requires an argument\n", - argv[0], argv[optind - 1]); - nextchar += strlen (nextchar); - return optstring[0] == ':' ? ':' : '?'; - } - } - nextchar += strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[optind][1] == '-' -#ifdef GETOPT_COMPAT - || argv[optind][0] == '+' -#endif /* GETOPT_COMPAT */ - || my_index (optstring, *nextchar) == NULL) - { - if (opterr) - { - if (argv[optind][1] == '-') - /* --option */ - fprintf (stderr, "%s: unrecognized option `--%s'\n", - argv[0], nextchar); - else - /* +option or -option */ - fprintf (stderr, "%s: unrecognized option `%c%s'\n", - argv[0], argv[optind][0], nextchar); - } - nextchar = (char *) ""; - optind++; - return '?'; - } - } - - /* Look at and handle the next option-character. */ - - { - char c = *nextchar++; - char *temp = my_index (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*nextchar == '\0') - ++optind; - - if (temp == NULL || c == ':') - { - if (opterr) - { -#if 0 - if (c < 040 || c >= 0177) - fprintf (stderr, "%s: unrecognized option, character code 0%o\n", - argv[0], c); - else - fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c); -#else - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); -#endif - } - optopt = c; - return '?'; - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*nextchar != '\0') - { - optarg = nextchar; - optind++; - } - else - optarg = 0; - nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { -#if 0 - fprintf (stderr, "%s: option `-%c' requires an argument\n", - argv[0], c); -#else - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, "%s: option requires an argument -- %c\n", - argv[0], c); -#endif - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - nextchar = NULL; - } - } - return c; - } -} - -#ifdef GETOPT -int -getopt (argc, argv, optstring) - int argc; - char *const *argv; - const char *optstring; -{ - return _getopt_internal (argc, argv, optstring, - (const struct option *) 0, - (int *) 0, - 0); -} -#endif - -#endif /* _LIBC or not __GNU_LIBRARY__. */ - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (argc, argv) - int argc; - char **argv; -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == EOF) - break; - - switch (c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/gnuradio-core/src/lib/missing/getopt.h b/gnuradio-core/src/lib/missing/getopt.h deleted file mode 100644 index 0679081473..0000000000 --- a/gnuradio-core/src/lib/missing/getopt.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. - - This program 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. - - This program 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#ifndef _GETOPT_H -#define _GETOPT_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns EOF, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Set to an option character which was unrecognized. */ - -extern int optopt; - -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ -#if __STDC__ - const char *name; -#else - char *name; -#endif - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -#define no_argument 0 -#define required_argument 1 -#define optional_argument 2 - -#if __STDC__ -#if defined(__GNU_LIBRARY__) -/* Many other libraries have conflicting prototypes for getopt, with - differences in the consts, in stdlib.h. To avoid compilation - errors, only prototype getopt for the GNU C library. */ -extern int getopt (int argc, char *const *argv, const char *shortopts); -#else /* not __GNU_LIBRARY__ */ -extern int getopt (); -#endif /* not __GNU_LIBRARY__ */ -extern int getopt_long (int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind); -extern int getopt_long_only (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only); -#else /* not __STDC__ */ -extern int getopt (); -extern int getopt_long (); -extern int getopt_long_only (); - -extern int _getopt_internal (); -#endif /* not __STDC__ */ - -#ifdef __cplusplus -} -#endif - -#endif /* _GETOPT_H */ diff --git a/gnuradio-core/src/lib/missing/gettimeofday.c b/gnuradio-core/src/lib/missing/gettimeofday.c deleted file mode 100644 index a53e47ed90..0000000000 --- a/gnuradio-core/src/lib/missing/gettimeofday.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2003 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 <config.h> - -#ifdef HAVE_WINDOWS_H -#include <windows.h> -#endif -#ifdef HAVE_WINBASE_H -# include <winbase.h> -#endif - -#ifdef HAVE_SYS_TIME_H -#include <sys/time.h> -#endif - -/* - * broken implementation for WIN32. - * FIXME: usec precision - */ -int gettimeofday(struct timeval *tv, struct timezone *tz) -{ - if (tv) { - time_t tm; - - time(&tm); - tv->tv_sec = tm; - tv->tv_usec = 0; - } - return 0; -} - diff --git a/gnuradio-core/src/lib/missing/posix_memalign.cc b/gnuradio-core/src/lib/missing/posix_memalign.cc deleted file mode 100644 index aaeff78042..0000000000 --- a/gnuradio-core/src/lib/missing/posix_memalign.cc +++ /dev/null @@ -1,114 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008,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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "posix_memalign.h" - -#ifdef HAVE_MALLOC_H -// for Cygwin valloc () prototype -#include <malloc.h> -#endif - -#ifndef HAVE_POSIX_MEMALIGN - -/* emulate posix_memalign functionality, to some degree */ - -#include <errno.h> -#include "gr_pagesize.h" - -int posix_memalign -(void **memptr, size_t alignment, size_t size) -{ - /* emulate posix_memalign functionality, to some degree */ - - /* make sure the return handle is valid; return "bad address" if not valid */ - if (memptr == 0) - return (EFAULT); - *memptr = (void*) 0; - - /* make sure 'alignment' is a power of 2 - * and multiple of sizeof (void*) - */ - - /* make sure 'alignment' is a multiple of sizeof (void*) */ - if ((alignment % sizeof (void*)) != 0) - return (EINVAL); - - /* make sure 'alignment' is a power of 2 */ - if ((alignment & (alignment - 1)) != 0) - return (EINVAL); - - /* good alignment */ - -#if (ALIGNED_MALLOC != 0) - - /* if 'malloc' is known to be aligned, and the desired 'alignment' - * matches is <= that provided by 'malloc', then use 'malloc'. This - * works on, e.g., Darwin 8 & 9: for which malloc is 16-byte aligned. - */ - size_t am = (size_t) ALIGNED_MALLOC; - if (alignment <= am) { - /* make sure ALIGNED_MALLOC is a power of 2, to guarantee that the - * alignment is correct (since 'alignment' must be a power of 2). - */ - if ((am & (am - 1)) != 0) - return (EINVAL); - /* good malloc alignment */ - *memptr = malloc (size); - } - -#endif /* (ALIGNED_MALLOC != 0) */ -#ifdef HAVE_VALLOC - - if (*memptr == (void*) 0) { - /* try valloc if it exists */ - /* cheap and easy way to make sure alignment is met, so long as it - * is <= pagesize () */ - if (alignment <= (size_t) gr_pagesize ()) { - *memptr = valloc (size); - } - } - -#endif /* HAVE_VALLOC */ - -#if (ALIGNED_MALLOC == 0) && !defined (HAVE_VALLOC) - /* no posix_memalign, valloc, and malloc isn't known to be aligned - * (enough for the input arguments); no idea what to do. - */ - -#error gnuradio-core/src/libmissing/posix_memalign.cc: Cannot find a way to alloc aligned memory. - -#endif - - /* if the pointer wasn't allocated properly, return that there was - * not enough memory to allocate; otherwise, return OK (0). - */ - if (*memptr == (void*) 0) - return (ENOMEM); - else - return (0); -}; - -#endif /* ! HAVE_POSIX_MEMALIGN */ diff --git a/gnuradio-core/src/lib/missing/posix_memalign.h b/gnuradio-core/src/lib/missing/posix_memalign.h deleted file mode 100644 index ea79ced2ef..0000000000 --- a/gnuradio-core/src/lib/missing/posix_memalign.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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 _POSIX_MEMALIGN_H_ -#define _POSIX_MEMALIGN_H_ - -#include <stdlib.h> - -#ifndef HAVE_POSIX_MEMALIGN - -#ifdef __cplusplus -extern "C" { -#endif - -extern int posix_memalign (void** memptr, size_t alignment, size_t size); - -#ifdef __cplusplus -}; -#endif - -#endif /* ! HAVE_POSIX_MEMALIGN */ - -#endif /* _POSIX_MEMALIGN_H_ */ diff --git a/gnuradio-core/src/lib/missing/usleep.c b/gnuradio-core/src/lib/missing/usleep.c deleted file mode 100644 index b1d7dad473..0000000000 --- a/gnuradio-core/src/lib/missing/usleep.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 3 of the -License, or (at your option) any later version. - -The GNU C Library 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <config.h> - -#ifndef HAVE_USLEEP - -#include <sys/types.h> -#include <sys/time.h> - -#ifdef HAVE_SYS_SELECT_H -# include <sys/select.h> -#endif - -#ifdef HAVE_WINDOWS_H -#include <windows.h> -#endif -#ifdef HAVE_WINBASE_H -# include <winbase.h> -#endif - -#ifdef apollo -# include <apollo/base.h> -# include <apollo/time.h> - static time_$clock_t DomainTime100mS = - { - 0, 100000/4 - }; - static status_$t DomainStatus; -#endif - -/* Sleep USECONDS microseconds, or until a previously set timer goes off. */ -int -usleep (unsigned long useconds) -{ -#ifdef apollo - /* The usleep function does not work under the SYS5.3 environment. - Use the Domain/OS time_$wait call instead. */ - time_$wait (time_$relative, DomainTime100mS, &DomainStatus); -#elif defined(HAVE_SSLEEP) /* Win32 */ - Sleep( useconds/1000 ); -#else - struct timeval delay; - - delay.tv_sec = 0; - delay.tv_usec = useconds; - select (0, 0, 0, 0, &delay); -#endif - return 0; -} - -#endif /* !HAVE_USLEEP */ diff --git a/gnuradio-core/src/lib/runtime/CMakeLists.txt b/gnuradio-core/src/lib/runtime/CMakeLists.txt deleted file mode 100644 index f3982f53cd..0000000000 --- a/gnuradio-core/src/lib/runtime/CMakeLists.txt +++ /dev/null @@ -1,223 +0,0 @@ -# Copyright 2010-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. - -######################################################################## -# This file included, use CMake directory variables -######################################################################## - -######################################################################## -# Control availability of vmcircbuf methods. -# For now, only allows disabling of shm methods, which cause uncatchable -# segmentation faults on Cygwin with gcc 4.x (x <= 5) -# Usage: -# GR_VMCIRCBUF() -# -# Will set TRY_SHM_VMCIRCBUF to 1 by default except on Windows machines. -# Can manually set with -DTRY_SHM_VMCIRCBUF=0|1 -######################################################################## - - if(WIN32) - OPTION(TRY_SHM_VMCIRCBUF "Try SHM VMCIRCBUF" OFF) - else(WIN32) - OPTION(TRY_SHM_VMCIRCBUF "Try SHM VMCIRCBUF" ON) - endif(WIN32) - - message(STATUS "TRY_SHM_VMCIRCBUF set to ${TRY_SHM_VMCIRCBUF}.") - - if(TRY_SHM_VMCIRCBUF) - add_definitions( -DTRY_SHM_VMCIRCBUF ) - endif(TRY_SHM_VMCIRCBUF) - -######################################################################## -# Append gnuradio-core library sources -######################################################################## -list(APPEND gnuradio_core_sources - ${CMAKE_CURRENT_SOURCE_DIR}/gr_basic_block.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_flowgraph.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_flat_flowgraph.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_detail.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_executor.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_registry.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2_detail.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_buffer.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_dispatcher.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_local_sighandler.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_logger.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_message.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_accepter.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_queue.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_pagesize.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_preferences.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_realtime.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_sts.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_tpb.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_single_threaded_scheduler.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sptr_magic.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_block.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_decimator.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_interpolator.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sys_paths.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tagged_stream_block.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block_impl.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_detail.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_thread_body.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_mmap_shm_open.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_mmap_tmpfile.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_createfilemapping.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_sysv_shm.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gr_select_handler.cc -) - -if(ENABLE_GR_CTRLPORT) -list(APPEND gnuradio_core_sources - ${CMAKE_CURRENT_SOURCE_DIR}/ice_application_base.cc - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_ice.cc - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_booter_ice.cc - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_booter_aggregator.cc - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_aggregator.cc - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_selector.cc - ${CMAKE_CURRENT_SOURCE_DIR}/rpcpmtconverters_ice.cc - ${CMAKE_CURRENT_SOURCE_DIR}/rpcmanager.cc -) -endif(ENABLE_GR_CTRLPORT) - - -######################################################################## -# Append gnuradio-core test sources -######################################################################## -list(APPEND test_gnuradio_core_sources - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_buffer.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_io_signature.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_vmcircbuf.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_logger.cc -) - -######################################################################## -# Install runtime headers -######################################################################## -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/gr_basic_block.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_flowgraph.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_flat_flowgraph.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_detail.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_executor.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_registry.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2_detail.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_buffer.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_complex.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_dispatcher.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_local_sighandler.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_logger.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_message.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_accepter.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_queue.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_pagesize.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_preferences.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_realtime.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_runtime_types.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_sts.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_tpb.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_select_handler.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_single_threaded_scheduler.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sptr_magic.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_block.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_decimator.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_interpolator.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tagged_stream_block.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block_impl.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_detail.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_thread_body.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_timer.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sys_paths.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_types.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_unittests.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf.h - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tags.h - DESTINATION ${GR_INCLUDE_DIR}/gnuradio - COMPONENT "core_devel" -) - - -if(ENABLE_GR_CTRLPORT) -ADD_DEFINITIONS(-DGR_CTRLPORT) -INSTALL(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/ice_application_base.h - ${CMAKE_CURRENT_SOURCE_DIR}/ice_server_template.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpccallbackregister_base.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcmanager_base.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcmanager.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcpmtconverters_ice.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcregisterhelpers.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_aggregator.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_base.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_booter_aggregator.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_booter_base.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_booter_ice.h - ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_selector.h - DESTINATION ${GR_INCLUDE_DIR}/gnuradio - COMPONENT "core_devel" -) -endif(ENABLE_GR_CTRLPORT) - -######################################################################## -# Install swig headers -######################################################################## -if(ENABLE_PYTHON) -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/gr_basic_block.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_detail.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_buffer.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_dispatcher.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_logger.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_message.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_queue.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_realtime.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_single_threaded_scheduler.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_block.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_decimator.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_interpolator.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tagged_stream_block.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_tags.i - ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block.i - ${CMAKE_CURRENT_SOURCE_DIR}/runtime.i - DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig - COMPONENT "core_swig" -) - -endif(ENABLE_PYTHON) diff --git a/gnuradio-core/src/lib/runtime/ICE_LICENSE b/gnuradio-core/src/lib/runtime/ICE_LICENSE deleted file mode 100644 index 43ea7572d9..0000000000 --- a/gnuradio-core/src/lib/runtime/ICE_LICENSE +++ /dev/null @@ -1,54 +0,0 @@ -Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved. - -This copy of Ice is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License version 2 as -published by the Free Software Foundation. - -Ice 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 version -2 along with this program; if not, see http://www.gnu.org/licenses. - -Linking Ice statically or dynamically with other software (such as a -library, module or application) is making a combined work based on Ice. -Thus, the terms and conditions of the GNU General Public License version -2 cover this combined work. - -If such software can only be used together with Ice, then not only the -combined work but the software itself is a work derived from Ice and as -such shall be licensed under the terms of the GNU General Public License -version 2. This includes the situation where Ice is only being used -through an abstraction layer. - -As a special exception to the above, ZeroC grants to the contributors for -the following projects the permission to license their Ice-based software -under the terms of the GNU Lesser General Public License (LGPL) version -2.1 or of the BSD license: - - - Orca Robotics (http://orca-robotics.sourceforge.net) - - - Mumble (http://mumble.sourceforge.net) - -This exception does not extend to the parts of Ice used by these -projects, or to any other derived work: as a whole, any work based on Ice -shall be licensed under the terms and conditions of the GNU General -Public License version 2. - -You may also combine Ice with any software not derived from Ice, provided -the license of such software is compatible with the GNU General Public -License version 2. In addition, as a special exception, ZeroC grants you -permission to combine Ice with: - - - the OpenSSL library, or with a modified version of the OpenSSL library - that uses the same license as OpenSSL - - - any library not derived from Ice and licensed under the terms of - the Apache License, version 2.0 - (http://www.apache.org/licenses/LICENSE-2.0.html) - -If you modify this copy of Ice, you may extend any of the exceptions -provided above to your version of Ice, but you are not obligated to -do so. diff --git a/gnuradio-core/src/lib/runtime/IcePy_Communicator.h b/gnuradio-core/src/lib/runtime/IcePy_Communicator.h deleted file mode 100644 index d613190d2c..0000000000 --- a/gnuradio-core/src/lib/runtime/IcePy_Communicator.h +++ /dev/null @@ -1,35 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -#ifndef ICEPY_COMMUNICATOR_H -#define ICEPY_COMMUNICATOR_H - -#include <Ice/CommunicatorF.h> -#include <gr_core_api.h> - -namespace IcePy -{ - -extern PyTypeObject CommunicatorType; - -GR_CORE_API bool initCommunicator(PyObject*); - -GR_CORE_API Ice::CommunicatorPtr getCommunicator(PyObject*); - -GR_CORE_API PyObject* createCommunicator(const Ice::CommunicatorPtr&); -GR_CORE_API PyObject* getCommunicatorWrapper(const Ice::CommunicatorPtr&); - -} - -extern "C" PyObject* IcePy_initialize(PyObject*, PyObject*); -extern "C" PyObject* IcePy_initializeWithProperties(PyObject*, PyObject*); -extern "C" PyObject* IcePy_initializeWithLogger(PyObject*, PyObject*); -extern "C" PyObject* IcePy_initializeWithPropertiesAndLogger(PyObject*, PyObject*); - -#endif diff --git a/gnuradio-core/src/lib/runtime/frontend.ice b/gnuradio-core/src/lib/runtime/frontend.ice deleted file mode 100644 index befb5b7a97..0000000000 --- a/gnuradio-core/src/lib/runtime/frontend.ice +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2012 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 <gnuradio.ice> - -[["python:package:gnuradio.ctrlport"]] -module GNURadio { - module Frontend { - - exception NotSupported {}; - exception InvalidSetting { string msg; }; - exception ReceiverFailure { string msg; }; - exception NotExist {}; - dictionary<string, string> TunerArgs; - - struct TunerStatus { - int a2dbits; - float gain; - bool isInverted; - }; - - interface Tuner { - TunerStatus configureTuner(TunerArgs args); //ADDED - idempotent TunerStatus status(); - idempotent float setGain(float gain) throws NotSupported, InvalidSetting; - idempotent bool setInversion(bool inverted) throws NotSupported, InvalidSetting; - }; - - struct ChannelStatus { - string uid; - bool active; - float freq; - float bandwidth; - int payloadBits; - bool isComplex; - string signalName; - }; - - interface Channel extends Component { - idempotent ChannelStatus status(); - idempotent FeedInfo feed(); - idempotent bool active(); - void start(); - void stop(); - idempotent float setCenterFreq(float freq) throws NotSupported, InvalidSetting; - idempotent float setBandwidth(float bw) throws NotSupported, InvalidSetting; - idempotent int setPayloadBits(int bits) throws NotSupported, InvalidSetting; - idempotent bool setComplex(bool complex) throws NotSupported, InvalidSetting; - void removeChannel() throws NotSupported; - }; - - sequence<Tuner*> TunerSeq; - sequence<Channel*> ChannelSeq; - - struct ChannelizerStatus { - string uid; - string signalName; - }; - - interface Channelizer extends Component { - idempotent ChannelizerStatus status(); - idempotent Tuner* getTuner(); - idempotent ChannelSeq getChannels(); - idempotent ChannelSeq getActiveChannels(); - idempotent ChannelSeq getInactiveChannels(); - Channel* createChannel(float freq, float bw, int payloadBits, string address, int port) throws NotSupported; - }; - - sequence<Channelizer*> ChannelizerSeq; - - interface Receiver extends AbstractReceiver { - idempotent ChannelizerSeq getInputs(); -// idempotent ChannelizerSeq getActiveInputs(); -// idempotent ChannelizerSeq getInactiveInputs(); - idempotent Channel* getChannelByID(string id) throws NotExist; - idempotent Channelizer* getChannelizerByID(string id) throws NotExist; - }; - - - }; - - - -}; diff --git a/gnuradio-core/src/lib/runtime/gnuradio.ice b/gnuradio-core/src/lib/runtime/gnuradio.ice deleted file mode 100644 index e17d91901b..0000000000 --- a/gnuradio-core/src/lib/runtime/gnuradio.ice +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2012 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. - */ - -[["python:package:gnuradio.ctrlport"]] - -#ifndef GNURADIO_DEBUG -#define GNURADIO_DEBUG - -module GNURadio { -class Knob {}; -class KnobB extends Knob { bool value; }; -class KnobC extends Knob { byte value; }; -class KnobI extends Knob { int value; }; -class KnobF extends Knob { float value; }; -class KnobD extends Knob { double value; }; -class KnobL extends Knob { long value; }; -class KnobS extends Knob { string value; }; - -sequence<bool> VectorB; sequence<byte> VectorC; -sequence<int> VectorI; sequence<float> VectorF; -sequence<double> VectorD; sequence<string> VectorS; -sequence<long> VectorL; - -class KnobVecB extends Knob { VectorB value; }; -class KnobVecC extends Knob { VectorC value; }; -class KnobVecI extends Knob { VectorI value; }; -class KnobVecF extends Knob { VectorF value; }; -class KnobVecD extends Knob { VectorD value; }; -class KnobVecL extends Knob { VectorL value; }; -class KnobVecS extends Knob { VectorS value; }; - -enum KnobType { KNOBBOOL, KNOBCHAR, KNOBINT, KNOBFLOAT, - KNOBDOUBLE, KNOBSTRING, KNOBLONG, KNOBVECBOOL, - KNOBVECCHAR, KNOBVECINT, KNOBVECFLOAT, KNOBVECDOUBLE, - KNOBVECSTRING, KNOBVECLONG }; - -const int DISPNULL = 0x0000; -const int DISPTIME = 0x0001; -const int DISPXY = 0x0002; -const int DISPPSD = 0x0004; -const int DISPSPEC = 0x0008; -const int DISPRAST = 0x0010; -const int DISPOPTCPLX = 0x0100; -const int DISPOPTLOG = 0x0200; -const int DISPOPTSTEM = 0x0400; -const int DISPOPTSTRIP = 0x0800; -const int DISPOPTSCATTER = 0x1000; - -struct KnobProp { - KnobType type; - string units; - string description; - int display; - Knob min; - Knob max; - Knob defaultvalue; -}; - -sequence<string> KnobIDList; -dictionary<string, Knob> KnobMap; -dictionary<string, KnobProp> KnobPropMap; -dictionary<string, string> WaveformArgMap; - -interface StreamReceiver { - void push(VectorC data); -}; - -interface ControlPort { - void set(KnobMap knobs); - idempotent KnobMap get(KnobIDList knobs); - idempotent KnobPropMap properties(KnobIDList knobs); - void shutdown(); - -// string subscribe(StreamReceiver* proxy, string streamName, int requestedPeriod, int RequestedSize); -// idempotent void unsubscribe(string streamID); -}; - -struct FeedInfo { - string protocol; - string address; - string iface; - string port; -}; - -//TODO: convert this part to a Feed Info -struct ReceiverInfo { - string uid; - string signalType; - string signalName; - string allocatableObjectID; - string signalProtocol; - string signalAddress; - string signalInterface; - string signalPort; -}; - -interface Component { - void setName(string newName); -}; - -module Frontend { - interface AbstractReceiver extends Component { - idempotent ReceiverInfo getReceiverInfo(); - }; -}; - -module Booter { - dictionary<string, string> WaveformArgs; - - exception WaveformRunningError { - string waveformClass; - float centerFrequencyHz; - }; - exception SignalSourceError {string msg; }; - - interface WaveformBooter extends Frontend::AbstractReceiver { - string launchWaveform(string waveformClass, WaveformArgs args) - throws WaveformRunningError, SignalSourceError; - -// string launchWaveformWithSession(string waveformClass, WaveformArgs args, IceGrid::Session* session) -// throws WaveformRunningError; - WaveformArgMap getDriverEnum(); - WaveformArgMap getSourceInfo(); - idempotent bool waveformRunning(); - idempotent string getWaveformClass(); - void shutdown(); - }; -}; - -//interface Pingable { -// bool ping(); -//}; - -}; - -#endif diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.cc b/gnuradio-core/src/lib/runtime/gr_basic_block.cc deleted file mode 100644 index 35ea797167..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_basic_block.cc +++ /dev/null @@ -1,226 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2012 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_basic_block.h> -#include <gr_block_registry.h> -#include <stdexcept> -#include <sstream> -#include <iostream> - -static long s_next_id = 0; -static long s_ncurrently_allocated = 0; - -long -gr_basic_block_ncurrently_allocated() -{ - return s_ncurrently_allocated; -} - -gr_basic_block::gr_basic_block(const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature) - : d_name(name), - d_input_signature(input_signature), - d_output_signature(output_signature), - d_unique_id(s_next_id++), - d_symbolic_id(global_block_registry.block_register(this)), - d_symbol_name(global_block_registry.register_symbolic_name(this)), - d_color(WHITE), - d_rpc_set(false), - message_subscribers(pmt::make_dict()) -{ - s_ncurrently_allocated++; -} - -gr_basic_block::~gr_basic_block() -{ - s_ncurrently_allocated--; - global_block_registry.block_unregister(this); -} - -gr_basic_block_sptr -gr_basic_block::to_basic_block() -{ - return shared_from_this(); -} - -void -gr_basic_block::set_block_alias(std::string name) -{ - global_block_registry.register_symbolic_name(this, name); -} - -// ** Message passing interface ** - -// - register a new input message port -void -gr_basic_block::message_port_register_in(pmt::pmt_t port_id) -{ - if(!pmt::is_symbol(port_id)) { - throw std::runtime_error("message_port_register_in: bad port id"); - } - msg_queue[port_id] = msg_queue_t(); - msg_queue_ready[port_id] = boost::shared_ptr<boost::condition_variable>(new boost::condition_variable()); -} - -pmt::pmt_t -gr_basic_block::message_ports_in() -{ - pmt::pmt_t port_names = pmt::make_vector(msg_queue.size(), pmt::PMT_NIL); - msg_queue_map_itr itr = msg_queue.begin(); - for(size_t i = 0; i < msg_queue.size(); i++) { - pmt::vector_set(port_names, i, (*itr).first); - itr++; - } - return port_names; -} - -// - register a new output message port -void -gr_basic_block::message_port_register_out(pmt::pmt_t port_id) -{ - if(!pmt::is_symbol(port_id)) { - throw std::runtime_error("message_port_register_out: bad port id"); - } - if(pmt::dict_has_key(message_subscribers, port_id)) { - throw std::runtime_error("message_port_register_out: port already in use"); - } - message_subscribers = pmt::dict_add(message_subscribers, port_id, pmt::PMT_NIL); -} - -pmt::pmt_t -gr_basic_block::message_ports_out() -{ - size_t len = pmt::length(message_subscribers); - pmt::pmt_t port_names = pmt::make_vector(len, pmt::PMT_NIL); - pmt::pmt_t keys = pmt::dict_keys(message_subscribers); - for(size_t i = 0; i < len; i++) { - pmt::vector_set(port_names, i, pmt::nth(i, keys)); - } - return port_names; -} - -// - publish a message on a message port -void gr_basic_block::message_port_pub(pmt::pmt_t port_id, pmt::pmt_t msg) -{ - if(!pmt::dict_has_key(message_subscribers, port_id)) { - throw std::runtime_error("port does not exist"); - } - - pmt::pmt_t currlist = pmt::dict_ref(message_subscribers, port_id, pmt::PMT_NIL); - // iterate through subscribers on port - while(pmt::is_pair(currlist)) { - pmt::pmt_t target = pmt::car(currlist); - - pmt::pmt_t block = pmt::car(target); - pmt::pmt_t port = pmt::cdr(target); - - currlist = pmt::cdr(currlist); - gr_basic_block_sptr blk = global_block_registry.block_lookup(block); - //blk->post(msg); - blk->post(port, msg); - } -} - -// - subscribe to a message port -void -gr_basic_block::message_port_sub(pmt::pmt_t port_id, pmt::pmt_t target){ - if(!pmt::dict_has_key(message_subscribers, port_id)){ - std::stringstream ss; - ss << "Port does not exist: \"" << pmt::write_string(port_id) << "\" on block: " << pmt::write_string(target) << std::endl; - throw std::runtime_error(ss.str()); - } - pmt::pmt_t currlist = pmt::dict_ref(message_subscribers,port_id,pmt::PMT_NIL); - - // ignore re-adds of the same target - if(!pmt::list_has(currlist, target)) - message_subscribers = pmt::dict_add(message_subscribers,port_id,pmt::list_add(currlist,target)); -} - -void -gr_basic_block::message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target){ - if(!pmt::dict_has_key(message_subscribers, port_id)){ - std::stringstream ss; - ss << "Port does not exist: \"" << pmt::write_string(port_id) << "\" on block: " << pmt::write_string(target) << std::endl; - throw std::runtime_error(ss.str()); - } - - // ignore unsubs of unknown targets - pmt::pmt_t currlist = pmt::dict_ref(message_subscribers,port_id,pmt::PMT_NIL); - message_subscribers = pmt::dict_add(message_subscribers,port_id,pmt::list_rm(currlist,target)); -} - -void -gr_basic_block::_post(pmt::pmt_t which_port, pmt::pmt_t msg) -{ - insert_tail(which_port, msg); -} - -void -gr_basic_block::insert_tail(pmt::pmt_t which_port, pmt::pmt_t msg) -{ - gruel::scoped_lock guard(mutex); - - if( (msg_queue.find(which_port) == msg_queue.end()) || (msg_queue_ready.find(which_port) == msg_queue_ready.end())){ - std::cout << "target port = " << pmt::symbol_to_string(which_port) << std::endl; - throw std::runtime_error("attempted to insert_tail on invalid queue!"); - } - - msg_queue[which_port].push_back(msg); - msg_queue_ready[which_port]->notify_one(); - - // wake up thread if BLKD_IN or BLKD_OUT - global_block_registry.notify_blk(alias()); -} - -pmt::pmt_t -gr_basic_block::delete_head_nowait(pmt::pmt_t which_port) -{ - gruel::scoped_lock guard(mutex); - - if (empty_p(which_port)){ - return pmt::pmt_t(); - } - - pmt::pmt_t m(msg_queue[which_port].front()); - msg_queue[which_port].pop_front(); - - return m; -} - -pmt::pmt_t -gr_basic_block::delete_head_blocking(pmt::pmt_t which_port) -{ - gruel::scoped_lock guard(mutex); - - while (empty_p(which_port)){ - msg_queue_ready[which_port]->wait(guard); - } - - pmt::pmt_t m(msg_queue[which_port].front()); - msg_queue[which_port].pop_front(); - return m; -} diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.h b/gnuradio-core/src/lib/runtime/gr_basic_block.h deleted file mode 100644 index 66fb72d87e..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_basic_block.h +++ /dev/null @@ -1,344 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2008,2009,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. - */ - -#ifndef INCLUDED_GR_BASIC_BLOCK_H -#define INCLUDED_GR_BASIC_BLOCK_H - -#include <gr_core_api.h> -#include <gr_runtime_types.h> -#include <gr_sptr_magic.h> -#include <boost/enable_shared_from_this.hpp> -#include <boost/function.hpp> -#include <gr_msg_accepter.h> -#include <string> -#include <deque> -#include <map> -#include <gr_io_signature.h> -#include <gruel/thread.h> -#include <boost/foreach.hpp> -#include <boost/thread/condition_variable.hpp> -#include <iostream> - -#ifdef GR_CTRLPORT -#include <rpcregisterhelpers.h> -#endif - -/*! - * \brief The abstract base class for all signal processing blocks. - * \ingroup internal - * - * Basic blocks are the bare abstraction of an entity that has a name, - * a set of inputs and outputs, and a message queue. These are never instantiated - * directly; rather, this is the abstract parent class of both gr_hier_block, - * which is a recursive container, and gr_block, which implements actual - * signal processing functions. - */ - -class GR_CORE_API gr_basic_block : public gr_msg_accepter, public boost::enable_shared_from_this<gr_basic_block> -{ - typedef boost::function<void(pmt::pmt_t)> msg_handler_t; - - private: - - //msg_handler_t d_msg_handler; - typedef std::map<pmt::pmt_t , msg_handler_t, pmt::comperator> d_msg_handlers_t; - d_msg_handlers_t d_msg_handlers; - - typedef std::deque<pmt::pmt_t> msg_queue_t; - typedef std::map<pmt::pmt_t, msg_queue_t, pmt::comperator> msg_queue_map_t; - typedef std::map<pmt::pmt_t, msg_queue_t, pmt::comperator>::iterator msg_queue_map_itr; - std::map<pmt::pmt_t, boost::shared_ptr<boost::condition_variable>, pmt::comperator> msg_queue_ready; - - gruel::mutex mutex; //< protects all vars - - protected: - friend class gr_flowgraph; - friend class gr_flat_flowgraph; // TODO: will be redundant - friend class gr_tpb_thread_body; - - enum vcolor { WHITE, GREY, BLACK }; - - std::string d_name; - gr_io_signature_sptr d_input_signature; - gr_io_signature_sptr d_output_signature; - long d_unique_id; - long d_symbolic_id; - std::string d_symbol_name; - std::string d_symbol_alias; - vcolor d_color; - bool d_rpc_set; - - msg_queue_map_t msg_queue; - std::vector<boost::any> d_rpc_vars; // container for all RPC variables - - gr_basic_block(void){} //allows pure virtual interface sub-classes - - //! Protected constructor prevents instantiation by non-derived classes - gr_basic_block(const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - - //! may only be called during constructor - void set_input_signature(gr_io_signature_sptr iosig) { - d_input_signature = iosig; - } - - //! may only be called during constructor - void set_output_signature(gr_io_signature_sptr iosig) { - d_output_signature = iosig; - } - - /*! - * \brief Allow the flowgraph to set for sorting and partitioning - */ - void set_color(vcolor color) { d_color = color; } - vcolor color() const { return d_color; } - - /*! - * \brief Tests if there is a handler attached to port \p which_port - */ - bool has_msg_handler(pmt::pmt_t which_port) { - return (d_msg_handlers.find(which_port) != d_msg_handlers.end()); - } - - /* - * This function is called by the runtime system to dispatch messages. - * - * The thread-safety guarantees mentioned in set_msg_handler are implemented - * by the callers of this method. - */ - virtual void dispatch_msg(pmt::pmt_t which_port, pmt::pmt_t msg) - { - // AA Update this - if(has_msg_handler(which_port)) { // Is there a handler? - d_msg_handlers[which_port](msg); // Yes, invoke it. - } - } - - // Message passing interface - pmt::pmt_t message_subscribers; - - public: - virtual ~gr_basic_block(); - long unique_id() const { return d_unique_id; } - long symbolic_id() const { return d_symbolic_id; } - std::string name() const { return d_name; } - std::string symbol_name() const { return d_symbol_name; } - gr_io_signature_sptr input_signature() const { return d_input_signature; } - gr_io_signature_sptr output_signature() const { return d_output_signature; } - gr_basic_block_sptr to_basic_block(); // Needed for Python type coercion - bool alias_set() { return !d_symbol_alias.empty(); } - std::string alias(){ return alias_set()?d_symbol_alias:symbol_name(); } - pmt::pmt_t alias_pmt(){ return pmt::intern(alias()); } - void set_block_alias(std::string name); - - // ** Message passing interface ** - void message_port_register_in(pmt::pmt_t port_id); - void message_port_register_out(pmt::pmt_t port_id); - void message_port_pub(pmt::pmt_t port_id, pmt::pmt_t msg); - void message_port_sub(pmt::pmt_t port_id, pmt::pmt_t target); - void message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target); - - virtual bool message_port_is_hier(pmt::pmt_t port_id) { (void) port_id; std::cout << "is_hier\n"; return false; } - virtual bool message_port_is_hier_in(pmt::pmt_t port_id) { (void) port_id; std::cout << "is_hier_in\n"; return false; } - virtual bool message_port_is_hier_out(pmt::pmt_t port_id) { (void) port_id; std::cout << "is_hier_out\n"; return false; } - - /*! - * \brief Get input message port names. - * - * Returns the available input message ports for a block. The - * return object is a PMT vector that is filled with PMT symbols. - */ - pmt::pmt_t message_ports_in(); - - /*! - * \brief Get output message port names. - * - * Returns the available output message ports for a block. The - * return object is a PMT vector that is filled with PMT symbols. - */ - pmt::pmt_t message_ports_out(); - - /*! - * Accept msg, place in queue, arrange for thread to be awakened if it's not already. - */ - void _post(pmt::pmt_t which_port, pmt::pmt_t msg); - - //! is the queue empty? - //bool empty_p(const pmt::pmt_t &which_port) const { return msg_queue[which_port].empty(); } - bool empty_p(pmt::pmt_t which_port) { - if(msg_queue.find(which_port) == msg_queue.end()) - throw std::runtime_error("port does not exist!"); - return msg_queue[which_port].empty(); - } - bool empty_p() { - bool rv = true; - BOOST_FOREACH(msg_queue_map_t::value_type &i, msg_queue) { - rv &= msg_queue[i.first].empty(); - } - return rv; - } - - //! How many messages in the queue? - size_t nmsgs(pmt::pmt_t which_port) { - if(msg_queue.find(which_port) == msg_queue.end()) - throw std::runtime_error("port does not exist!"); - return msg_queue[which_port].size(); - } - - //| Acquires and release the mutex - void insert_tail( pmt::pmt_t which_port, pmt::pmt_t msg); - /*! - * \returns returns pmt at head of queue or pmt_t() if empty. - */ - pmt::pmt_t delete_head_nowait( pmt::pmt_t which_port); - - /*! - * \returns returns pmt at head of queue or pmt_t() if empty. - */ - pmt::pmt_t delete_head_blocking( pmt::pmt_t which_port); - - msg_queue_t::iterator get_iterator(pmt::pmt_t which_port){ - return msg_queue[which_port].begin(); - } - - void erase_msg(pmt::pmt_t which_port, msg_queue_t::iterator it){ - msg_queue[which_port].erase(it); - } - - virtual bool has_msg_port(pmt::pmt_t which_port){ - if(msg_queue.find(which_port) != msg_queue.end()){ - return true; - } - if(pmt::dict_has_key(message_subscribers, which_port)){ - return true; - } - return false; - } - -#ifdef GR_CTRLPORT - /*! - * \brief Add an RPC variable (get or set). - * - * Using controlport, we create new getters/setters and need to - * store them. Each block has a vector to do this, and these never - * need to be accessed again once they are registered with the RPC - * backend. This function takes a - * boost::shared_sptr<rpcbasic_base> so that when the block is - * deleted, all RPC registered variables are cleaned up. - * - * \param s an rpcbasic_sptr of the new RPC variable register to store. - */ - void add_rpc_variable(rpcbasic_sptr s) - { - d_rpc_vars.push_back(s); - } -#endif /* GR_CTRLPORT */ - - /*! - * \brief Set up the RPC registered variables. - * - * This must be overloaded by a block that wants to use - * controlport. This is where rpcbasic_register_{get,set} pointers - * are created, which then get wrapped as shared pointers - * (rpcbasic_sptr(...)) and stored using add_rpc_variable. - */ - virtual void setup_rpc() {}; - - /*! - * \brief Ask if this block has been registered to the RPC. - * - * We can only register a block once, so we use this to protect us - * from calling it multiple times. - */ - bool is_rpc_set() { return d_rpc_set; } - - /*! - * \brief When the block is registered with the RPC, set this. - */ - void rpc_set() { d_rpc_set = true; } - - /*! - * \brief Confirm that ninputs and noutputs is an acceptable combination. - * - * \param ninputs number of input streams connected - * \param noutputs number of output streams connected - * - * \returns true if this is a valid configuration for this block. - * - * This function is called by the runtime system whenever the - * topology changes. Most classes do not need to override this. - * This check is in addition to the constraints specified by the input - * and output gr_io_signatures. - */ - virtual bool check_topology(int ninputs, int noutputs) { (void) ninputs; (void) noutputs; return true; } - - /*! - * \brief Set the callback that is fired when messages are available. - * - * \p msg_handler can be any kind of function pointer or function object - * that has the signature: - * <pre> - * void msg_handler(pmt::pmt msg); - * </pre> - * - * (You may want to use boost::bind to massage your callable into - * the correct form. See gr::blocks::nop for an example that sets - * up a class method as the callback.) - * - * Blocks that desire to handle messages must call this method in their - * constructors to register the handler that will be invoked when messages - * are available. - * - * If the block inherits from gr_block, the runtime system will ensure that - * msg_handler is called in a thread-safe manner, such that work and - * msg_handler will never be called concurrently. This allows msg_handler - * to update state variables without having to worry about thread-safety - * issues with work, general_work or another invocation of msg_handler. - * - * If the block inherits from gr_hier_block2, the runtime system will - * ensure that no reentrant calls are made to msg_handler. - */ - template <typename T> void set_msg_handler(pmt::pmt_t which_port, T msg_handler){ - if(msg_queue.find(which_port) == msg_queue.end()){ - throw std::runtime_error("attempt to set_msg_handler() on bad input message port!"); } - d_msg_handlers[which_port] = msg_handler_t(msg_handler); - } -}; - -inline bool operator<(gr_basic_block_sptr lhs, gr_basic_block_sptr rhs) -{ - return lhs->unique_id() < rhs->unique_id(); -} - -typedef std::vector<gr_basic_block_sptr> gr_basic_block_vector_t; -typedef std::vector<gr_basic_block_sptr>::iterator gr_basic_block_viter_t; - -GR_CORE_API long gr_basic_block_ncurrently_allocated(); - -inline std::ostream &operator << (std::ostream &os, gr_basic_block_sptr basic_block) -{ - os << basic_block->name() << "(" << basic_block->unique_id() << ")"; - return os; -} - -#endif /* INCLUDED_GR_BASIC_BLOCK_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.i b/gnuradio-core/src/lib/runtime/gr_basic_block.i deleted file mode 100644 index 62f16462d6..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_basic_block.i +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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. - */ - -class gr_basic_block; -typedef boost::shared_ptr<gr_basic_block> gr_basic_block_sptr; -%template(gr_basic_block_sptr) boost::shared_ptr<gr_basic_block>; -%include "pmt_swig.i" -using namespace pmt; - -// support vectors of these... -namespace std { - %template(x_vector_gr_basic_block_sptr) vector<gr_basic_block_sptr>; -}; - -class gr_basic_block -{ -protected: - gr_basic_block(); - -public: - virtual ~gr_basic_block(); - std::string name() const; - std::string symbol_name() const; - gr_io_signature_sptr input_signature() const; - gr_io_signature_sptr output_signature() const; - long unique_id() const; - gr_basic_block_sptr to_basic_block(); - bool check_topology (int ninputs, int noutputs); - std::string alias(); - void set_block_alias(std::string name); - void _post(pmt_t which_port, pmt_t msg); - pmt_t message_ports_in(); - pmt_t message_ports_out(); -}; - -%rename(block_ncurrently_allocated) gr_basic_block_ncurrently_allocated; -long gr_basic_block_ncurrently_allocated(); - -#ifdef SWIGPYTHON -%pythoncode %{ -gr_basic_block_sptr.__repr__ = lambda self: "<gr_basic_block %s (%d)>" % (self.name(), self.unique_id ()) -%} -#endif diff --git a/gnuradio-core/src/lib/runtime/gr_block.cc b/gnuradio-core/src/lib/runtime/gr_block.cc deleted file mode 100644 index 8c8b85dc7e..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block.cc +++ /dev/null @@ -1,687 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2009,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 <gr_block.h> -#include <gr_block_detail.h> -#include <stdexcept> -#include <iostream> -#include <gr_block_registry.h> -#include <gr_prefs.h> - -gr_block::gr_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature) - : gr_basic_block(name, input_signature, output_signature), - d_output_multiple (1), - d_output_multiple_set(false), - d_unaligned(0), - d_is_unaligned(false), - d_relative_rate (1.0), - d_history(1), - d_fixed_rate(false), - d_max_noutput_items_set(false), - d_max_noutput_items(0), - d_min_noutput_items(0), - d_tag_propagation_policy(TPP_ALL_TO_ALL), - d_pc_rpc_set(false), - d_max_output_buffer(std::max(output_signature->max_streams(),1), -1), - d_min_output_buffer(std::max(output_signature->max_streams(),1), -1) -{ - global_block_registry.register_primitive(alias(), this); - -#ifdef ENABLE_GR_LOG -#ifdef HAVE_LOG4CPP - gr_prefs *p = gr_prefs::singleton(); - std::string config_file = p->get_string("LOG", "log_config", ""); - std::string log_level = p->get_string("LOG", "log_level", "off"); - std::string log_file = p->get_string("LOG", "log_file", ""); - std::string debug_level = p->get_string("LOG", "debug_level", "off"); - std::string debug_file = p->get_string("LOG", "debug_file", ""); - - GR_CONFIG_LOGGER(config_file); - - GR_LOG_GETLOGGER(LOG, "gr_log." + alias()); - GR_LOG_SET_LEVEL(LOG, log_level); - if(log_file.size() > 0) { - if(log_file == "stdout") { - GR_LOG_ADD_CONSOLE_APPENDER(LOG, "cout","gr::log :%p: %c{1} - %m%n"); - } - else if(log_file == "stderr") { - GR_LOG_ADD_CONSOLE_APPENDER(LOG, "cerr","gr::log :%p: %c{1} - %m%n"); - } - else { - GR_LOG_ADD_FILE_APPENDER(LOG, log_file , true,"%r :%p: %c{1} - %m%n"); - } - } - d_logger = LOG; - - GR_LOG_GETLOGGER(DLOG, "gr_log_debug." + alias()); - GR_LOG_SET_LEVEL(DLOG, debug_level); - if(debug_file.size() > 0) { - if(debug_file == "stdout") { - GR_LOG_ADD_CONSOLE_APPENDER(DLOG, "cout","gr::debug :%p: %c{1} - %m%n"); - } - else if(debug_file == "stderr") { - GR_LOG_ADD_CONSOLE_APPENDER(DLOG, "cerr", "gr::debug :%p: %c{1} - %m%n"); - } - else { - GR_LOG_ADD_FILE_APPENDER(DLOG, debug_file, true, "%r :%p: %c{1} - %m%n"); - } - } - d_debug_logger = DLOG; -#endif /* HAVE_LOG4CPP */ -#else /* ENABLE_GR_LOG */ - d_logger = NULL; - d_debug_logger = NULL; -#endif /* ENABLE_GR_LOG */ -} - -gr_block::~gr_block () -{ - global_block_registry.unregister_primitive(alias()); -} - -// stub implementation: 1:1 - -void -gr_block::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size (); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = noutput_items + history() - 1; -} - -// default implementation - -bool -gr_block::start() -{ - return true; -} - -bool -gr_block::stop() -{ - return true; -} - -void -gr_block::set_output_multiple (int multiple) -{ - if (multiple < 1) - throw std::invalid_argument ("gr_block::set_output_multiple"); - - d_output_multiple_set = true; - d_output_multiple = multiple; -} - -void -gr_block::set_alignment (int multiple) -{ - if (multiple < 1) - throw std::invalid_argument ("gr_block::set_alignment_multiple"); - - d_output_multiple = multiple; -} - -void -gr_block::set_unaligned (int na) -{ - // unaligned value must be less than 0 and it doesn't make sense - // that it's larger than the alignment value. - if ((na < 0) || (na > d_output_multiple)) - throw std::invalid_argument ("gr_block::set_unaligned"); - - d_unaligned = na; -} - -void -gr_block::set_is_unaligned (bool u) -{ - d_is_unaligned = u; -} - -void -gr_block::set_relative_rate (double relative_rate) -{ - if (relative_rate < 0.0) - throw std::invalid_argument ("gr_block::set_relative_rate"); - - d_relative_rate = relative_rate; -} - - -void -gr_block::consume (int which_input, int how_many_items) -{ - d_detail->consume (which_input, how_many_items); -} - -void -gr_block::consume_each (int how_many_items) -{ - d_detail->consume_each (how_many_items); -} - -void -gr_block::produce (int which_output, int how_many_items) -{ - d_detail->produce (which_output, how_many_items); -} - -int -gr_block::fixed_rate_ninput_to_noutput(int ninput) -{ - throw std::runtime_error("Unimplemented"); -} - -int -gr_block::fixed_rate_noutput_to_ninput(int noutput) -{ - throw std::runtime_error("Unimplemented"); -} - -uint64_t -gr_block::nitems_read(unsigned int which_input) -{ - if(d_detail) { - return d_detail->nitems_read(which_input); - } - else { - //throw std::runtime_error("No block_detail associated with block yet"); - return 0; - } -} - -uint64_t -gr_block::nitems_written(unsigned int which_output) -{ - if(d_detail) { - return d_detail->nitems_written(which_output); - } - else { - //throw std::runtime_error("No block_detail associated with block yet"); - return 0; - } -} - -void -gr_block::add_item_tag(unsigned int which_output, - const gr_tag_t &tag) -{ - d_detail->add_item_tag(which_output, tag); -} - -void -gr_block::remove_item_tag(unsigned int which_input, - const gr_tag_t &tag) -{ - d_detail->remove_item_tag(which_input, tag); -} - -void -gr_block::get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_output, - uint64_t start, uint64_t end) -{ - d_detail->get_tags_in_range(v, which_output, start, end); -} - -void -gr_block::get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_output, - uint64_t start, uint64_t end, - const pmt::pmt_t &key) -{ - d_detail->get_tags_in_range(v, which_output, start, end, key); -} - -gr_block::tag_propagation_policy_t -gr_block::tag_propagation_policy() -{ - return d_tag_propagation_policy; -} - -void -gr_block::set_tag_propagation_policy(tag_propagation_policy_t p) -{ - d_tag_propagation_policy = p; -} - - -int -gr_block::max_noutput_items() -{ - return d_max_noutput_items; -} - -void -gr_block::set_max_noutput_items(int m) -{ - if(m <= 0) - throw std::runtime_error("gr_block::set_max_noutput_items: value for max_noutput_items must be greater than 0.\n"); - - d_max_noutput_items = m; - d_max_noutput_items_set = true; -} - -void -gr_block::unset_max_noutput_items() -{ - d_max_noutput_items_set = false; -} - -bool -gr_block::is_set_max_noutput_items() -{ - return d_max_noutput_items_set; -} - -void -gr_block::set_processor_affinity(const std::vector<unsigned int> &mask) -{ - d_affinity = mask; - if(d_detail) { - d_detail->set_processor_affinity(d_affinity); - } -} - -void -gr_block::unset_processor_affinity() -{ - d_affinity.clear(); - if(d_detail) { - d_detail->unset_processor_affinity(); - } -} - -float -gr_block::pc_noutput_items() -{ - if(d_detail) { - return d_detail->pc_noutput_items(); - } - else { - return 0; - } -} - -float -gr_block::pc_noutput_items_avg() -{ - if(d_detail) { - return d_detail->pc_noutput_items_avg(); - } - else { - return 0; - } -} - -float -gr_block::pc_noutput_items_var() -{ - if(d_detail) { - return d_detail->pc_noutput_items_var(); - } - else { - return 0; - } -} - -float -gr_block::pc_nproduced() -{ - if(d_detail) { - return d_detail->pc_nproduced(); - } - else { - return 0; - } -} - -float -gr_block::pc_nproduced_avg() -{ - if(d_detail) { - return d_detail->pc_nproduced_avg(); - } - else { - return 0; - } -} - -float -gr_block::pc_nproduced_var() -{ - if(d_detail) { - return d_detail->pc_nproduced_var(); - } - else { - return 0; - } -} - -float -gr_block::pc_input_buffers_full(int which) -{ - if(d_detail) { - return d_detail->pc_input_buffers_full(static_cast<size_t>(which)); - } - else { - return 0; - } -} - -float -gr_block::pc_input_buffers_full_avg(int which) -{ - if(d_detail) { - return d_detail->pc_input_buffers_full_avg(static_cast<size_t>(which)); - } - else { - return 0; - } -} - -float -gr_block::pc_input_buffers_full_var(int which) -{ - if(d_detail) { - return d_detail->pc_input_buffers_full_var(static_cast<size_t>(which)); - } - else { - return 0; - } -} - -std::vector<float> -gr_block::pc_input_buffers_full() -{ - if(d_detail) { - return d_detail->pc_input_buffers_full(); - } - else { - return std::vector<float>(1,0); - } -} - -std::vector<float> -gr_block::pc_input_buffers_full_avg() -{ - if(d_detail) { - return d_detail->pc_input_buffers_full_avg(); - } - else { - return std::vector<float>(1,0); - } -} - -std::vector<float> -gr_block::pc_input_buffers_full_var() -{ - if(d_detail) { - return d_detail->pc_input_buffers_full_var(); - } - else { - return std::vector<float>(1,0); - } -} - -float -gr_block::pc_output_buffers_full(int which) -{ - if(d_detail) { - return d_detail->pc_output_buffers_full(static_cast<size_t>(which)); - } - else { - return 0; - } -} - -float -gr_block::pc_output_buffers_full_avg(int which) -{ - if(d_detail) { - return d_detail->pc_output_buffers_full_avg(static_cast<size_t>(which)); - } - else { - return 0; - } -} - -float -gr_block::pc_output_buffers_full_var(int which) -{ - if(d_detail) { - return d_detail->pc_output_buffers_full_var(static_cast<size_t>(which)); - } - else { - return 0; - } -} - -std::vector<float> -gr_block::pc_output_buffers_full() -{ - if(d_detail) { - return d_detail->pc_output_buffers_full(); - } - else { - return std::vector<float>(1,0); - } -} - -std::vector<float> -gr_block::pc_output_buffers_full_avg() -{ - if(d_detail) { - return d_detail->pc_output_buffers_full_avg(); - } - else { - return std::vector<float>(1,0); - } -} - -std::vector<float> -gr_block::pc_output_buffers_full_var() -{ - if(d_detail) { - return d_detail->pc_output_buffers_full_var(); - } - else { - return std::vector<float>(1,0); - } -} - -float -gr_block::pc_work_time() -{ - if(d_detail) { - return d_detail->pc_work_time(); - } - else { - return 0; - } -} - -float -gr_block::pc_work_time_avg() -{ - if(d_detail) { - return d_detail->pc_work_time_avg(); - } - else { - return 0; - } -} - -float -gr_block::pc_work_time_var() -{ - if(d_detail) { - return d_detail->pc_work_time_var(); - } - else { - return 0; - } -} - -void -gr_block::reset_perf_counters() -{ - if(d_detail) { - d_detail->reset_perf_counters(); - } -} - -void -gr_block::setup_pc_rpc() -{ - d_pc_rpc_set = true; -#ifdef GR_CTRLPORT - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "noutput_items", &gr_block::pc_noutput_items, - pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "noutput items", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "avg noutput_items", &gr_block::pc_noutput_items_avg, - pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Average noutput items", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "var noutput_items", &gr_block::pc_noutput_items_var, - pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Var. noutput items", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "nproduced", &gr_block::pc_nproduced, - pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "items produced", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "avg nproduced", &gr_block::pc_nproduced_avg, - pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Average items produced", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "var nproduced", &gr_block::pc_nproduced_var, - pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Var. items produced", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "work time", &gr_block::pc_work_time, - pmt::mp(0), pmt::mp(1e9), pmt::mp(0), - "", "clock cycles in call to work", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "avg work time", &gr_block::pc_work_time_avg, - pmt::mp(0), pmt::mp(1e9), pmt::mp(0), - "", "Average clock cycles in call to work", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "var work time", &gr_block::pc_work_time_var, - pmt::mp(0), pmt::mp(1e9), pmt::mp(0), - "", "Var. clock cycles in call to work", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "input \% full", &gr_block::pc_input_buffers_full, - pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "how full input buffers are", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "avg input \% full", &gr_block::pc_input_buffers_full_avg, - pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Average of how full input buffers are", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "var input \% full", &gr_block::pc_input_buffers_full_var, - pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Var. of how full input buffers are", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "output \% full", &gr_block::pc_output_buffers_full, - pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "how full output buffers are", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "avg output \% full", &gr_block::pc_output_buffers_full_avg, - pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Average of how full output buffers are", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_rpc_vars.push_back( - rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "var output \% full", &gr_block::pc_output_buffers_full_var, - pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Var. of how full output buffers are", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); -#endif /* GR_CTRLPORT */ -} - -std::ostream& -operator << (std::ostream& os, const gr_block *m) -{ - os << "<gr_block " << m->name() << " (" << m->unique_id() << ")>"; - return os; -} - -int -gr_block::general_work(int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - throw std::runtime_error("gr_block::general_work() not implemented"); - return 0; -} diff --git a/gnuradio-core/src/lib/runtime/gr_block.h b/gnuradio-core/src/lib/runtime/gr_block.h deleted file mode 100644 index f13f54870d..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block.h +++ /dev/null @@ -1,700 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2007,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 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_BLOCK_H -#define INCLUDED_GR_BLOCK_H - -#include <gr_core_api.h> -#include <gr_basic_block.h> -#include <gr_tags.h> -#include <gr_logger.h> - -/*! - * \brief The abstract base class for all 'terminal' processing blocks. - * \ingroup base_blk - * - * A signal processing flow is constructed by creating a tree of - * hierarchical blocks, which at any level may also contain terminal nodes - * that actually implement signal processing functions. This is the base - * class for all such leaf nodes. - - * Blocks have a set of input streams and output streams. The - * input_signature and output_signature define the number of input - * streams and output streams respectively, and the type of the data - * items in each stream. - * - * Although blocks may consume data on each input stream at a - * different rate, all outputs streams must produce data at the same - * rate. That rate may be different from any of the input rates. - * - * User derived blocks override two methods, forecast and general_work, - * to implement their signal processing behavior. forecast is called - * by the system scheduler to determine how many items are required on - * each input stream in order to produce a given number of output - * items. - * - * general_work is called to perform the signal processing in the block. - * It reads the input items and writes the output items. - */ - -class GR_CORE_API gr_block : public gr_basic_block { - - public: - - //! Magic return values from general_work - enum { - WORK_CALLED_PRODUCE = -2, - WORK_DONE = -1 - }; - - enum tag_propagation_policy_t { - TPP_DONT = 0, - TPP_ALL_TO_ALL = 1, - TPP_ONE_TO_ONE = 2 - }; - - virtual ~gr_block (); - - /*! - * Assume block computes y_i = f(x_i, x_i-1, x_i-2, x_i-3...) - * History is the number of x_i's that are examined to produce one y_i. - * This comes in handy for FIR filters, where we use history to - * ensure that our input contains the appropriate "history" for the - * filter. History should be equal to the number of filter taps. - */ - unsigned history () const { return d_history; } - void set_history (unsigned history) { d_history = history; } - - /*! - * \brief Return true if this block has a fixed input to output rate. - * - * If true, then fixed_rate_in_to_out and fixed_rate_out_to_in may be called. - */ - bool fixed_rate() const { return d_fixed_rate; } - - // ---------------------------------------------------------------- - // override these to define your behavior - // ---------------------------------------------------------------- - - /*! - * \brief Estimate input requirements given output request - * - * \param noutput_items number of output items to produce - * \param ninput_items_required number of input items required on each input stream - * - * Given a request to product \p noutput_items, estimate the number of - * data items required on each input stream. The estimate doesn't have - * to be exact, but should be close. - */ - virtual void forecast (int noutput_items, - gr_vector_int &ninput_items_required); - - /*! - * \brief compute output items from input items - * - * \param noutput_items number of output items to write on each output stream - * \param ninput_items number of input items available on each input stream - * \param input_items vector of pointers to the input items, one entry per input stream - * \param output_items vector of pointers to the output items, one entry per output stream - * - * \returns number of items actually written to each output stream, or -1 on EOF. - * It is OK to return a value less than noutput_items. -1 <= return value <= noutput_items - * - * general_work must call consume or consume_each to indicate how many items - * were consumed on each input stream. - */ - virtual int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - /*! - * \brief Called to enable drivers, etc for i/o devices. - * - * This allows a block to enable an associated driver to begin - * transfering data just before we start to execute the scheduler. - * The end result is that this reduces latency in the pipeline when - * dealing with audio devices, usrps, etc. - */ - virtual bool start(); - - /*! - * \brief Called to disable drivers, etc for i/o devices. - */ - virtual bool stop(); - - // ---------------------------------------------------------------- - - /*! - * \brief Constrain the noutput_items argument passed to forecast and general_work - * - * set_output_multiple causes the scheduler to ensure that the noutput_items - * argument passed to forecast and general_work will be an integer multiple - * of \param multiple The default value of output multiple is 1. - */ - void set_output_multiple (int multiple); - int output_multiple () const { return d_output_multiple; } - bool output_multiple_set () const { return d_output_multiple_set; } - - /*! - * \brief Constrains buffers to work on a set item alignment (for SIMD) - * - * set_alignment_multiple causes the scheduler to ensure that the noutput_items - * argument passed to forecast and general_work will be an integer multiple - * of \param multiple The default value is 1. - * - * This control is similar to the output_multiple setting, except - * that if the number of items passed to the block is less than the - * output_multiple, this value is ignored and the block can produce - * like normal. The d_unaligned value is set to the number of items - * the block is off by. In the next call to general_work, the - * noutput_items is set to d_unaligned or less until - * d_unaligned==0. The buffers are now aligned again and the aligned - * calls can be performed again. - */ - void set_alignment (int multiple); - int alignment () const { return d_output_multiple; } - - void set_unaligned (int na); - int unaligned () const { return d_unaligned; } - void set_is_unaligned (bool u); - bool is_unaligned () const { return d_is_unaligned; } - - /*! - * \brief Tell the scheduler \p how_many_items of input stream \p which_input were consumed. - */ - void consume (int which_input, int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were consumed on each input stream. - */ - void consume_each (int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were produced on output stream \p which_output. - * - * If the block's general_work method calls produce, \p general_work must return WORK_CALLED_PRODUCE. - */ - void produce (int which_output, int how_many_items); - - /*! - * \brief Set the approximate output rate / input rate - * - * Provide a hint to the buffer allocator and scheduler. - * The default relative_rate is 1.0 - * - * decimators have relative_rates < 1.0 - * interpolators have relative_rates > 1.0 - */ - void set_relative_rate (double relative_rate); - - /*! - * \brief return the approximate output rate / input rate - */ - double relative_rate () const { return d_relative_rate; } - - /* - * The following two methods provide special case info to the - * scheduler in the event that a block has a fixed input to output - * ratio. gr_sync_block, gr_sync_decimator and gr_sync_interpolator - * override these. If you're fixed rate, subclass one of those. - */ - /*! - * \brief Given ninput samples, return number of output samples that will be produced. - * N.B. this is only defined if fixed_rate returns true. - * Generally speaking, you don't need to override this. - */ - virtual int fixed_rate_ninput_to_noutput(int ninput); - - /*! - * \brief Given noutput samples, return number of input samples required to produce noutput. - * N.B. this is only defined if fixed_rate returns true. - * Generally speaking, you don't need to override this. - */ - virtual int fixed_rate_noutput_to_ninput(int noutput); - - /*! - * \brief Return the number of items read on input stream which_input - */ - uint64_t nitems_read(unsigned int which_input); - - /*! - * \brief Return the number of items written on output stream which_output - */ - uint64_t nitems_written(unsigned int which_output); - - /*! - * \brief Asks for the policy used by the scheduler to moved tags downstream. - */ - tag_propagation_policy_t tag_propagation_policy(); - - /*! - * \brief Set the policy by the scheduler to determine how tags are moved downstream. - */ - void set_tag_propagation_policy(tag_propagation_policy_t p); - - /*! - * \brief Return the minimum number of output items this block can - * produce during a call to work. - * - * Should be 0 for most blocks. Useful if we're dealing with packets and - * the block produces one packet per call to work. - */ - int min_noutput_items() const { return d_min_noutput_items; } - - /*! - * \brief Set the minimum number of output items this block can - * produce during a call to work. - * - * \param m the minimum noutput_items this block can produce. - */ - void set_min_noutput_items(int m) { d_min_noutput_items = m; } - - /*! - * \brief Return the maximum number of output items this block will - * handle during a call to work. - */ - int max_noutput_items(); - - /*! - * \brief Set the maximum number of output items this block will - * handle during a call to work. - * - * \param m the maximum noutput_items this block will handle. - */ - void set_max_noutput_items(int m); - - /*! - * \brief Clear the switch for using the max_noutput_items value of this block. - * - * When is_set_max_noutput_items() returns 'true', the scheduler - * will use the value returned by max_noutput_items() to limit the - * size of the number of items possible for this block's work - * function. If is_set_max_notput_items() returns 'false', then the - * scheduler ignores the internal value and uses the value set - * globally in the top_block. - * - * Use this value to clear the 'is_set' flag so the scheduler will - * ignore this. Use the set_max_noutput_items(m) call to both set a - * new value for max_noutput_items and to reenable its use in the - * scheduler. - */ - void unset_max_noutput_items(); - - /*! - * \brief Ask the block if the flag is or is not set to use the - * internal value of max_noutput_items during a call to work. - */ - bool is_set_max_noutput_items(); - - /* - * Used to expand the vectors that hold the min/max buffer sizes. - * - * Specifically, when -1 is used, the vectors are just initialized - * with 1 value; this is used by the flat_flowgraph to expand when - * required to add a new value for new ports on these blocks. - */ - void expand_minmax_buffer(int port) { - if((size_t)port >= d_max_output_buffer.size()) - set_max_output_buffer(port, -1); - if((size_t)port >= d_min_output_buffer.size()) - set_min_output_buffer(port, -1); - } - - /*! - * \brief Returns max buffer size on output port \p i. - */ - long max_output_buffer(size_t i) { - if(i >= d_max_output_buffer.size()) - throw std::invalid_argument("gr_basic_block::max_output_buffer: port out of range."); - return d_max_output_buffer[i]; - } - - /*! - * \brief Sets max buffer size on all output ports. - */ - void set_max_output_buffer(long max_output_buffer) { - for(int i = 0; i < output_signature()->max_streams(); i++) { - set_max_output_buffer(i, max_output_buffer); - } - } - - /*! - * \brief Sets max buffer size on output port \p port. - */ - void set_max_output_buffer(int port, long max_output_buffer) { - if((size_t)port >= d_max_output_buffer.size()) - d_max_output_buffer.push_back(max_output_buffer); - else - d_max_output_buffer[port] = max_output_buffer; - } - - /*! - * \brief Returns min buffer size on output port \p i. - */ - long min_output_buffer(size_t i) { - if(i >= d_min_output_buffer.size()) - throw std::invalid_argument("gr_basic_block::min_output_buffer: port out of range."); - return d_min_output_buffer[i]; - } - - /*! - * \brief Sets min buffer size on all output ports. - */ - void set_min_output_buffer(long min_output_buffer) { - for(int i=0; i<output_signature()->max_streams(); i++) { - set_min_output_buffer(i, min_output_buffer); - } - } - - /*! - * \brief Sets min buffer size on output port \p port. - */ - void set_min_output_buffer(int port, long min_output_buffer) { - if((size_t)port >= d_min_output_buffer.size()) - d_min_output_buffer.push_back(min_output_buffer); - else - d_min_output_buffer[port] = min_output_buffer; - } - - // --------------- Performance counter functions ------------- - - /*! - * \brief Gets instantaneous noutput_items performance counter. - */ - float pc_noutput_items(); - - /*! - * \brief Gets average noutput_items performance counter. - */ - float pc_noutput_items_avg(); - - /*! - * \brief Gets variance of noutput_items performance counter. - */ - float pc_noutput_items_var(); - - /*! - * \brief Gets instantaneous num items produced performance counter. - */ - float pc_nproduced(); - - /*! - * \brief Gets average num items produced performance counter. - */ - float pc_nproduced_avg(); - - /*! - * \brief Gets variance of num items produced performance counter. - */ - float pc_nproduced_var(); - - /*! - * \brief Gets instantaneous fullness of \p which input buffer. - */ - float pc_input_buffers_full(int which); - - /*! - * \brief Gets average fullness of \p which input buffer. - */ - float pc_input_buffers_full_avg(int which); - - /*! - * \brief Gets variance of fullness of \p which input buffer. - */ - float pc_input_buffers_full_var(int which); - - /*! - * \brief Gets instantaneous fullness of all input buffers. - */ - std::vector<float> pc_input_buffers_full(); - - /*! - * \brief Gets average fullness of all input buffers. - */ - std::vector<float> pc_input_buffers_full_avg(); - - /*! - * \brief Gets variance of fullness of all input buffers. - */ - std::vector<float> pc_input_buffers_full_var(); - - /*! - * \brief Gets instantaneous fullness of \p which input buffer. - */ - float pc_output_buffers_full(int which); - - /*! - * \brief Gets average fullness of \p which input buffer. - */ - float pc_output_buffers_full_avg(int which); - - /*! - * \brief Gets variance of fullness of \p which input buffer. - */ - float pc_output_buffers_full_var(int which); - - /*! - * \brief Gets instantaneous fullness of all output buffers. - */ - std::vector<float> pc_output_buffers_full(); - - /*! - * \brief Gets average fullness of all output buffers. - */ - std::vector<float> pc_output_buffers_full_avg(); - - /*! - * \brief Gets variance of fullness of all output buffers. - */ - std::vector<float> pc_output_buffers_full_var(); - - /*! - * \brief Gets instantaneous clock cycles spent in work. - */ - float pc_work_time(); - - /*! - * \brief Gets average clock cycles spent in work. - */ - float pc_work_time_avg(); - - /*! - * \brief Gets average clock cycles spent in work. - */ - float pc_work_time_var(); - - /*! - * \brief Resets the performance counters - */ - void reset_perf_counters(); - - /*! - * \brief Sets up export of perf. counters to ControlPort. Only - * called by the scheduler. - */ - void setup_pc_rpc(); - - /*! - * \brief Checks if this block is already exporting perf. counters - * to ControlPort. - */ - bool is_pc_rpc_set() { return d_pc_rpc_set; } - - /*! - * \brief If the block calls this in its constructor, it's - * perf. counters will not be exported. - */ - void no_pc_rpc() { d_pc_rpc_set = true; } - - - // ---------------------------------------------------------------------------- - // Functions to handle thread affinity - - /*! - * \brief Set the thread's affinity to processor core \p n. - * - * \param mask a vector of unsigned ints of the core numbers available to this block. - */ - void set_processor_affinity(const std::vector<unsigned int> &mask); - - /*! - * \brief Remove processor affinity to a specific core. - */ - void unset_processor_affinity(); - - /*! - * \brief Get the current processor affinity. - */ - std::vector<unsigned int> processor_affinity() { return d_affinity; } - - // ---------------------------------------------------------------------------- - - private: - - int d_output_multiple; - bool d_output_multiple_set; - int d_unaligned; - bool d_is_unaligned; - double d_relative_rate; // approx output_rate / input_rate - gr_block_detail_sptr d_detail; // implementation details - unsigned d_history; - bool d_fixed_rate; - bool d_max_noutput_items_set; // if d_max_noutput_items is valid - int d_max_noutput_items; // value of max_noutput_items for this block - int d_min_noutput_items; - tag_propagation_policy_t d_tag_propagation_policy; // policy for moving tags downstream - std::vector<unsigned int> d_affinity; // thread affinity proc. mask - bool d_pc_rpc_set; - - protected: - gr_block (void){} //allows pure virtual interface sub-classes - gr_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - - void set_fixed_rate(bool fixed_rate){ d_fixed_rate = fixed_rate; } - - - /*! - * \brief Adds a new tag onto the given output buffer. - * - * \param which_output an integer of which output stream to attach the tag - * \param abs_offset a uint64 number of the absolute item number - * assicated with the tag. Can get from nitems_written. - * \param key the tag key as a PMT symbol - * \param value any PMT holding any value for the given key - * \param srcid optional source ID specifier; defaults to PMT_F - */ - inline void add_item_tag(unsigned int which_output, - uint64_t abs_offset, - const pmt::pmt_t &key, - const pmt::pmt_t &value, - const pmt::pmt_t &srcid=pmt::PMT_F) - { - gr_tag_t tag; - tag.offset = abs_offset; - tag.key = key; - tag.value = value; - tag.srcid = srcid; - this->add_item_tag(which_output, tag); - } - - /*! - * \brief Adds a new tag onto the given output buffer. - * - * \param which_output an integer of which output stream to attach the tag - * \param tag the tag object to add - */ - void add_item_tag(unsigned int which_output, const gr_tag_t &tag); - - /*! - * \brief Removes a tag from the given input buffer. - * - * \param which_input an integer of which input stream to remove the tag from - * \param abs_offset a uint64 number of the absolute item number - * assicated with the tag. Can get from nitems_written. - * \param key the tag key as a PMT symbol - * \param value any PMT holding any value for the given key - * \param srcid optional source ID specifier; defaults to PMT_F - * - * If no such tag is found, does nothing. - */ - inline void remove_item_tag(unsigned int which_input, - uint64_t abs_offset, - const pmt::pmt_t &key, - const pmt::pmt_t &value, - const pmt::pmt_t &srcid=pmt::PMT_F) - { - gr_tag_t tag; - tag.offset = abs_offset; - tag.key = key; - tag.value = value; - tag.srcid = srcid; - this->remove_item_tag(which_input, tag); - } - - /*! - * \brief Removes a tag from the given input buffer. - * - * If no such tag is found, does nothing. - * - * \param which_input an integer of which input stream to remove the tag from - * \param tag the tag object to remove - */ - void remove_item_tag(unsigned int which_input, const gr_tag_t &tag); - - /*! - * \brief Given a [start,end), returns a vector of all tags in the range. - * - * Range of counts is from start to end-1. - * - * Tags are tuples of: - * (item count, source id, key, value) - * - * \param v a vector reference to return tags into - * \param which_input an integer of which input stream to pull from - * \param abs_start a uint64 count of the start of the range of interest - * \param abs_end a uint64 count of the end of the range of interest - */ - void get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end); - - /*! - * \brief Given a [start,end), returns a vector of all tags in the range - * with a given key. - * - * Range of counts is from start to end-1. - * - * Tags are tuples of: - * (item count, source id, key, value) - * - * \param v a vector reference to return tags into - * \param which_input an integer of which input stream to pull from - * \param abs_start a uint64 count of the start of the range of interest - * \param abs_end a uint64 count of the end of the range of interest - * \param key a PMT symbol key to filter only tags of this key - */ - void get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end, - const pmt::pmt_t &key); - - std::vector<long> d_max_output_buffer; - std::vector<long> d_min_output_buffer; - - /*! Used by block's setters and work functions to make - * setting/resetting of parameters thread-safe. - * - * Used by calling gruel::scoped_lock l(d_setlock); - */ - gruel::mutex d_setlock; - - /*! Used by blocks to access the logger system. - */ - gr_logger_ptr d_logger; - gr_logger_ptr d_debug_logger; - - // These are really only for internal use, but leaving them public avoids - // having to work up an ever-varying list of friend GR_CORE_APIs - - public: - gr_block_detail_sptr detail () const { return d_detail; } - void set_detail (gr_block_detail_sptr detail) { d_detail = detail; } -}; - -typedef std::vector<gr_block_sptr> gr_block_vector_t; -typedef std::vector<gr_block_sptr>::iterator gr_block_viter_t; - -inline gr_block_sptr cast_to_block_sptr(gr_basic_block_sptr p) -{ - return boost::dynamic_pointer_cast<gr_block, gr_basic_block>(p); -} - - -std::ostream& -operator << (std::ostream& os, const gr_block *m); - -#endif /* INCLUDED_GR_BLOCK_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_block.i b/gnuradio-core/src/lib/runtime/gr_block.i deleted file mode 100644 index a80f64d027..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block.i +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,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. - */ - -%include <gr_basic_block.i> - -class gr_block; -typedef boost::shared_ptr<gr_block> gr_block_sptr; -%template(gr_block_sptr) boost::shared_ptr<gr_block>; - -// support vectors of these... -namespace std { - %template(x_vector_gr_block_sptr) vector<gr_block_sptr>; -}; - -class gr_block : public gr_basic_block { - protected: - gr_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - - public: - - virtual ~gr_block (); - - unsigned history () const; - - int output_multiple () const; - double relative_rate () const; - - bool start(); - bool stop(); - - uint64_t nitems_read(unsigned int which_input); - uint64_t nitems_written(unsigned int which_output); - - // Methods to manage the block's max_noutput_items size. - int max_noutput_items(); - void set_max_noutput_items(int m); - void unset_max_noutput_items(); - bool is_set_max_noutput_items(); - - // Methods to manage block's min/max buffer sizes. - long max_output_buffer(int i); - void set_max_output_buffer(long max_output_buffer); - void set_max_output_buffer(int port, long max_output_buffer); - long min_output_buffer(int i); - void set_min_output_buffer(long min_output_buffer); - void set_min_output_buffer(int port, long min_output_buffer); - - // Methods to access performance counters - float pc_noutput_items(); - float pc_noutput_items_var(); - float pc_nproduced(); - float pc_nproduced_var(); - float pc_input_buffers_full(int which); - float pc_input_buffers_full_var(int which); - std::vector<float> pc_input_buffers_full(); - std::vector<float> pc_input_buffers_full_var(); - float pc_output_buffers_full(int which); - float pc_output_buffers_full_var(int which); - std::vector<float> pc_output_buffers_full(); - std::vector<float> pc_output_buffers_full_var(); - float pc_work_time(); - float pc_work_time_var(); - - // Methods to manage processor affinity. - void set_processor_affinity(const gr_vector_uint &mask); - void unset_processor_affinity(); - gr_vector_uint processor_affinity(); - - // internal use - gr_block_detail_sptr detail () const { return d_detail; } - void set_detail (gr_block_detail_sptr detail) { d_detail = detail; } -}; diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.cc b/gnuradio-core/src/lib/runtime/gr_block_detail.cc deleted file mode 100644 index c85c0e9fba..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block_detail.cc +++ /dev/null @@ -1,473 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,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 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_block_detail.h> -#include <gr_buffer.h> -#include <iostream> - -static long s_ncurrently_allocated = 0; - -long -gr_block_detail_ncurrently_allocated () -{ - return s_ncurrently_allocated; -} - -gr_block_detail::gr_block_detail (unsigned int ninputs, unsigned int noutputs) - : d_produce_or(0), - d_ninputs (ninputs), d_noutputs (noutputs), - d_input (ninputs), d_output (noutputs), - d_done (false), - d_ins_noutput_items(0), - d_avg_noutput_items(0), - d_var_noutput_items(0), - d_ins_nproduced(0), - d_avg_nproduced(0), - d_var_nproduced(0), - d_ins_input_buffers_full(ninputs, 0), - d_avg_input_buffers_full(ninputs, 0), - d_var_input_buffers_full(ninputs, 0), - d_ins_output_buffers_full(noutputs, 0), - d_avg_output_buffers_full(noutputs, 0), - d_var_output_buffers_full(noutputs, 0), - d_ins_work_time(0), - d_avg_work_time(0), - d_var_work_time(0), - d_pc_counter(0) -{ - s_ncurrently_allocated++; -} - -gr_block_detail::~gr_block_detail () -{ - // should take care of itself - s_ncurrently_allocated--; -} - -void -gr_block_detail::set_input (unsigned int which, gr_buffer_reader_sptr reader) -{ - if (which >= d_ninputs) - throw std::invalid_argument ("gr_block_detail::set_input"); - - d_input[which] = reader; -} - -void -gr_block_detail::set_output (unsigned int which, gr_buffer_sptr buffer) -{ - if (which >= d_noutputs) - throw std::invalid_argument ("gr_block_detail::set_output"); - - d_output[which] = buffer; -} - -gr_block_detail_sptr -gr_make_block_detail (unsigned int ninputs, unsigned int noutputs) -{ - return gr_block_detail_sptr (new gr_block_detail (ninputs, noutputs)); -} - -void -gr_block_detail::set_done (bool done) -{ - d_done = done; - for (unsigned int i = 0; i < d_noutputs; i++) - d_output[i]->set_done (done); - - for (unsigned int i = 0; i < d_ninputs; i++) - d_input[i]->set_done (done); -} - -void -gr_block_detail::consume (int which_input, int how_many_items) -{ - if (how_many_items > 0) { - input (which_input)->update_read_pointer (how_many_items); - } -} - - -void -gr_block_detail::consume_each (int how_many_items) -{ - if (how_many_items > 0) { - for (int i = 0; i < ninputs (); i++) { - d_input[i]->update_read_pointer (how_many_items); - } - } -} - -void -gr_block_detail::produce (int which_output, int how_many_items) -{ - if (how_many_items > 0){ - d_output[which_output]->update_write_pointer (how_many_items); - d_produce_or |= how_many_items; - } -} - -void -gr_block_detail::produce_each (int how_many_items) -{ - if (how_many_items > 0) { - for (int i = 0; i < noutputs (); i++) { - d_output[i]->update_write_pointer (how_many_items); - } - d_produce_or |= how_many_items; - } -} - - -uint64_t -gr_block_detail::nitems_read(unsigned int which_input) -{ - if(which_input >= d_ninputs) - throw std::invalid_argument ("gr_block_detail::n_input_items"); - return d_input[which_input]->nitems_read(); -} - -uint64_t -gr_block_detail::nitems_written(unsigned int which_output) -{ - if(which_output >= d_noutputs) - throw std::invalid_argument ("gr_block_detail::n_output_items"); - return d_output[which_output]->nitems_written(); -} - -void -gr_block_detail::add_item_tag(unsigned int which_output, const gr_tag_t &tag) -{ - if(!pmt::is_symbol(tag.key)) { - throw pmt::wrong_type("gr_block_detail::add_item_tag key", tag.key); - } - else { - // Add tag to gr_buffer's deque tags - d_output[which_output]->add_item_tag(tag); - } -} - -void -gr_block_detail::remove_item_tag(unsigned int which_input, const gr_tag_t &tag) -{ - if(!pmt::is_symbol(tag.key)) { - throw pmt::wrong_type("gr_block_detail::add_item_tag key", tag.key); - } - else { - // Add tag to gr_buffer's deque tags - d_input[which_input]->buffer()->remove_item_tag(tag); - } -} - -void -gr_block_detail::get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end) -{ - // get from gr_buffer_reader's deque of tags - d_input[which_input]->get_tags_in_range(v, abs_start, abs_end); -} - -void -gr_block_detail::get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end, - const pmt::pmt_t &key) -{ - std::vector<gr_tag_t> found_items; - - v.resize(0); - - // get from gr_buffer_reader's deque of tags - d_input[which_input]->get_tags_in_range(found_items, abs_start, abs_end); - - // Filter further by key name - pmt::pmt_t itemkey; - std::vector<gr_tag_t>::iterator itr; - for(itr = found_items.begin(); itr != found_items.end(); itr++) { - itemkey = (*itr).key; - if(pmt::eqv(key, itemkey)) { - v.push_back(*itr); - } - } -} - -void -gr_block_detail::set_processor_affinity(const std::vector<unsigned int> &mask) -{ - if(threaded) { - try { - gruel::thread_bind_to_processor(thread, mask); - } - catch (std::runtime_error e) { - std::cerr << "set_processor_affinity: invalid mask." << std::endl;; - } - } -} - -void -gr_block_detail::unset_processor_affinity() -{ - if(threaded) { - gruel::thread_unbind(thread); - } -} - -void -gr_block_detail::start_perf_counters() -{ - d_start_of_work = gruel::high_res_timer_now(); -} - -void -gr_block_detail::stop_perf_counters(int noutput_items, int nproduced) -{ - d_end_of_work = gruel::high_res_timer_now(); - gruel::high_res_timer_type diff = d_end_of_work - d_start_of_work; - - if(d_pc_counter == 0) { - d_ins_work_time = diff; - d_avg_work_time = diff; - d_var_work_time = 0; - d_ins_nproduced = nproduced; - d_avg_nproduced = nproduced; - d_var_nproduced = 0; - d_ins_noutput_items = noutput_items; - d_avg_noutput_items = noutput_items; - d_var_noutput_items = 0; - for(size_t i=0; i < d_input.size(); i++) { - float pfull = static_cast<float>(d_input[i]->items_available()) / - static_cast<float>(d_input[i]->max_possible_items_available()); - d_ins_input_buffers_full[i] = pfull; - d_avg_input_buffers_full[i] = pfull; - d_var_input_buffers_full[i] = 0; - } - for(size_t i=0; i < d_output.size(); i++) { - float pfull = 1.0f - static_cast<float>(d_output[i]->space_available()) / - static_cast<float>(d_output[i]->bufsize()); - d_ins_output_buffers_full[i] = pfull; - d_avg_output_buffers_full[i] = pfull; - d_var_output_buffers_full[i] = 0; - } - } - else { - float d = diff - d_avg_work_time; - d_ins_work_time = diff; - d_avg_work_time = d_avg_work_time + d/d_pc_counter; - d_var_work_time = d_var_work_time + d*d; - - d = nproduced - d_avg_nproduced; - d_ins_nproduced = nproduced; - d_avg_nproduced = d_avg_nproduced + d/d_pc_counter; - d_var_nproduced = d_var_nproduced + d*d; - - d = noutput_items - d_avg_noutput_items; - d_ins_noutput_items = noutput_items; - d_avg_noutput_items = d_avg_noutput_items + d/d_pc_counter; - d_var_noutput_items = d_var_noutput_items + d*d; - - for(size_t i=0; i < d_input.size(); i++) { - float pfull = static_cast<float>(d_input[i]->items_available()) / - static_cast<float>(d_input[i]->max_possible_items_available()); - - d = pfull - d_avg_input_buffers_full[i]; - d_ins_input_buffers_full[i] = pfull; - d_avg_input_buffers_full[i] = d_avg_input_buffers_full[i] + d/d_pc_counter; - d_var_input_buffers_full[i] = d_var_input_buffers_full[i] + d*d; - } - - for(size_t i=0; i < d_output.size(); i++) { - float pfull = 1.0f - static_cast<float>(d_output[i]->space_available()) / - static_cast<float>(d_output[i]->bufsize()); - - d = pfull - d_avg_output_buffers_full[i]; - d_ins_output_buffers_full[i] = pfull; - d_avg_output_buffers_full[i] = d_avg_output_buffers_full[i] + d/d_pc_counter; - d_var_output_buffers_full[i] = d_var_output_buffers_full[i] + d*d; - } - } - - d_pc_counter++; -} - -void -gr_block_detail::reset_perf_counters() -{ - d_pc_counter = 0; -} - -float -gr_block_detail::pc_noutput_items() -{ - return d_ins_noutput_items; -} - -float -gr_block_detail::pc_nproduced() -{ - return d_ins_nproduced; -} - -float -gr_block_detail::pc_input_buffers_full(size_t which) -{ - if(which < d_ins_input_buffers_full.size()) - return d_ins_input_buffers_full[which]; - else - return 0; -} - -std::vector<float> -gr_block_detail::pc_input_buffers_full() -{ - return d_ins_input_buffers_full; -} - -float -gr_block_detail::pc_output_buffers_full(size_t which) -{ - if(which < d_ins_output_buffers_full.size()) - return d_ins_output_buffers_full[which]; - else - return 0; -} - -std::vector<float> -gr_block_detail::pc_output_buffers_full() -{ - return d_ins_output_buffers_full; -} - -float -gr_block_detail::pc_work_time() -{ - return d_ins_work_time; -} - -float -gr_block_detail::pc_noutput_items_avg() -{ - return d_avg_noutput_items; -} - -float -gr_block_detail::pc_nproduced_avg() -{ - return d_avg_nproduced; -} - -float -gr_block_detail::pc_input_buffers_full_avg(size_t which) -{ - if(which < d_avg_input_buffers_full.size()) - return d_avg_input_buffers_full[which]; - else - return 0; -} - -std::vector<float> -gr_block_detail::pc_input_buffers_full_avg() -{ - return d_avg_input_buffers_full; -} - -float -gr_block_detail::pc_output_buffers_full_avg(size_t which) -{ - if(which < d_avg_output_buffers_full.size()) - return d_avg_output_buffers_full[which]; - else - return 0; -} - -std::vector<float> -gr_block_detail::pc_output_buffers_full_avg() -{ - return d_avg_output_buffers_full; -} - -float -gr_block_detail::pc_work_time_avg() -{ - return d_avg_work_time; -} - - -float -gr_block_detail::pc_noutput_items_var() -{ - return d_var_noutput_items/(d_pc_counter-1); -} - -float -gr_block_detail::pc_nproduced_var() -{ - return d_var_nproduced/(d_pc_counter-1); -} - -float -gr_block_detail::pc_input_buffers_full_var(size_t which) -{ - if(which < d_avg_input_buffers_full.size()) - return d_var_input_buffers_full[which]/(d_pc_counter-1); - else - return 0; -} - -std::vector<float> -gr_block_detail::pc_input_buffers_full_var() -{ - std::vector<float> var(d_avg_input_buffers_full.size(), 0); - for(size_t i = 0; i < d_avg_input_buffers_full.size(); i++) - var[i] = d_avg_input_buffers_full[i]/(d_pc_counter-1); - return var; -} - -float -gr_block_detail::pc_output_buffers_full_var(size_t which) -{ - if(which < d_avg_output_buffers_full.size()) - return d_var_output_buffers_full[which]/(d_pc_counter-1); - else - return 0; -} - -std::vector<float> -gr_block_detail::pc_output_buffers_full_var() -{ - std::vector<float> var(d_avg_output_buffers_full.size(), 0); - for(size_t i = 0; i < d_avg_output_buffers_full.size(); i++) - var[i] = d_avg_output_buffers_full[i]/(d_pc_counter-1); - return var; -} - -float -gr_block_detail::pc_work_time_var() -{ - return d_var_work_time/(d_pc_counter-1); -} diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.h b/gnuradio-core/src/lib/runtime/gr_block_detail.h deleted file mode 100644 index 8a5a08bcf3..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block_detail.h +++ /dev/null @@ -1,248 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,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 detail. - * - * 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_BLOCK_DETAIL_H -#define INCLUDED_GR_BLOCK_DETAIL_H - -#include <gr_core_api.h> -#include <gr_runtime_types.h> -#include <gr_tpb_detail.h> -#include <gr_tags.h> -#include <gruel/high_res_timer.h> -#include <stdexcept> - -/*! - * \brief Implementation details to support the signal processing abstraction - * \ingroup internal - * - * This class contains implementation detail that should be "out of sight" - * of almost all users of GNU Radio. This decoupling also means that - * we can make changes to the guts without having to recompile everything. - */ -class GR_CORE_API gr_block_detail { - public: - ~gr_block_detail (); - - int ninputs () const { return d_ninputs; } - int noutputs () const { return d_noutputs; } - bool sink_p () const { return d_noutputs == 0; } - bool source_p () const { return d_ninputs == 0; } - - void set_done (bool done); - bool done () const { return d_done; } - - void set_input (unsigned int which, gr_buffer_reader_sptr reader); - gr_buffer_reader_sptr input (unsigned int which) - { - if (which >= d_ninputs) - throw std::invalid_argument ("gr_block_detail::input"); - return d_input[which]; - } - - void set_output (unsigned int which, gr_buffer_sptr buffer); - gr_buffer_sptr output (unsigned int which) - { - if (which >= d_noutputs) - throw std::invalid_argument ("gr_block_detail::output"); - return d_output[which]; - } - - /*! - * \brief Tell the scheduler \p how_many_items of input stream \p which_input were consumed. - */ - void consume (int which_input, int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were consumed on each input stream. - */ - void consume_each (int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were produced on output stream \p which_output. - */ - void produce (int which_output, int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were produced on each output stream. - */ - void produce_each (int how_many_items); - - // Return the number of items read on input stream which_input - uint64_t nitems_read(unsigned int which_input); - - // Return the number of items written on output stream which_output - uint64_t nitems_written(unsigned int which_output); - - - /*! - * \brief Adds a new tag to the given output stream. - * - * Calls gr_buffer::add_item_tag(), - * which appends the tag onto its deque. - * - * \param which_output an integer of which output stream to attach the tag - * \param tag the tag object to add - */ - void add_item_tag(unsigned int which_output, const gr_tag_t &tag); - - /*! - * \brief Removes a tag from the given input stream. - * - * Calls gr_buffer::remove_item_tag(), which removes the tag from its deque. - * - * \param which_input an integer of which input stream to remove the tag from - * \param tag the tag object to add - */ - void remove_item_tag(unsigned int which_input, const gr_tag_t &tag); - - /*! - * \brief Given a [start,end), returns a vector of all tags in the range. - * - * Pass-through function to gr_buffer_reader to get a vector of tags - * in given range. Range of counts is from start to end-1. - * - * Tags are tuples of: - * (item count, source id, key, value) - * - * \param v a vector reference to return tags into - * \param which_input an integer of which input stream to pull from - * \param abs_start a uint64 count of the start of the range of interest - * \param abs_end a uint64 count of the end of the range of interest - */ - void get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end); - - /*! - * \brief Given a [start,end), returns a vector of all tags in the range - * with a given key. - * - * Calls get_tags_in_range(which_input, abs_start, abs_end) to get a vector of - * tags from the buffers. This function then provides a secondary filter to - * the tags to extract only tags with the given 'key'. - * - * Tags are tuples of: - * (item count, source id, key, value) - * - * \param v a vector reference to return tags into - * \param which_input an integer of which input stream to pull from - * \param abs_start a uint64 count of the start of the range of interest - * \param abs_end a uint64 count of the end of the range of interest - * \param key a PMT symbol to select only tags of this key - */ - void get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end, - const pmt::pmt_t &key); - - /*! - * \brief Set core affinity of block to the cores in the vector mask. - * - * \param mask a vector of unsigned ints of the core numbers available to this block. - */ - void set_processor_affinity(const std::vector<unsigned int> &mask); - - /*! - * \brief Unset core affinity. - */ - void unset_processor_affinity(); - - bool threaded; // set if thread is currently running. - gruel::gr_thread_t thread; // portable thread handle - - void start_perf_counters(); - void stop_perf_counters(int noutput_items, int nproduced); - void reset_perf_counters(); - - // Calls to get performance counter items - float pc_noutput_items(); - float pc_nproduced(); - float pc_input_buffers_full(size_t which); - std::vector<float> pc_input_buffers_full(); - float pc_output_buffers_full(size_t which); - std::vector<float> pc_output_buffers_full(); - float pc_work_time(); - - float pc_noutput_items_avg(); - float pc_nproduced_avg(); - float pc_input_buffers_full_avg(size_t which); - std::vector<float> pc_input_buffers_full_avg(); - float pc_output_buffers_full_avg(size_t which); - std::vector<float> pc_output_buffers_full_avg(); - float pc_work_time_avg(); - - float pc_noutput_items_var(); - float pc_nproduced_var(); - float pc_input_buffers_full_var(size_t which); - std::vector<float> pc_input_buffers_full_var(); - float pc_output_buffers_full_var(size_t which); - std::vector<float> pc_output_buffers_full_var(); - float pc_work_time_var(); - - gr_tpb_detail d_tpb; // used by thread-per-block scheduler - int d_produce_or; - - // ---------------------------------------------------------------------------- - - private: - unsigned int d_ninputs; - unsigned int d_noutputs; - std::vector<gr_buffer_reader_sptr> d_input; - std::vector<gr_buffer_sptr> d_output; - bool d_done; - - // Performance counters - float d_ins_noutput_items; - float d_avg_noutput_items; - float d_var_noutput_items; - float d_ins_nproduced; - float d_avg_nproduced; - float d_var_nproduced; - std::vector<float> d_ins_input_buffers_full; - std::vector<float> d_avg_input_buffers_full; - std::vector<float> d_var_input_buffers_full; - std::vector<float> d_ins_output_buffers_full; - std::vector<float> d_avg_output_buffers_full; - std::vector<float> d_var_output_buffers_full; - gruel::high_res_timer_type d_start_of_work, d_end_of_work; - float d_ins_work_time; - float d_avg_work_time; - float d_var_work_time; - float d_pc_counter; - - gr_block_detail (unsigned int ninputs, unsigned int noutputs); - - friend struct gr_tpb_detail; - - friend GR_CORE_API gr_block_detail_sptr - gr_make_block_detail (unsigned int ninputs, unsigned int noutputs); -}; - -GR_CORE_API gr_block_detail_sptr -gr_make_block_detail (unsigned int ninputs, unsigned int noutputs); - -GR_CORE_API long -gr_block_detail_ncurrently_allocated (); - -#endif /* INCLUDED_GR_BLOCK_DETAIL_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.i b/gnuradio-core/src/lib/runtime/gr_block_detail.i deleted file mode 100644 index 74ff463604..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block_detail.i +++ /dev/null @@ -1,66 +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. - */ - -class gr_block_detail; -typedef boost::shared_ptr<gr_block_detail> gr_block_detail_sptr; -%template(gr_block_detail_sptr) boost::shared_ptr<gr_block_detail>; -%rename(block_detail) gr_make_block_detail; -%ignore gr_block_detail; - -gr_block_detail_sptr gr_make_block_detail (unsigned int ninputs, unsigned int noutputs); - -class gr_block_detail { - public: - - ~gr_block_detail (); - - int ninputs () const { return d_ninputs; } - int noutputs () const { return d_noutputs; } - bool sink_p () const { return d_noutputs == 0; } - bool source_p () const { return d_ninputs == 0; } - - void set_input (unsigned int which, gr_buffer_reader_sptr reader); - gr_buffer_reader_sptr input (unsigned int which) - { - if (which >= d_ninputs) - throw std::invalid_argument ("gr_block_detail::input"); - return d_input[which]; - } - - void set_output (unsigned int which, gr_buffer_sptr buffer); - gr_buffer_sptr output (unsigned int which) - { - if (which >= d_noutputs) - throw std::invalid_argument ("gr_block_detail::output"); - return d_output[which]; - } - - // ---------------------------------------------------------------------------- - - private: - gr_block_detail (unsigned int ninputs, unsigned int noutputs); - -}; - - -%rename(block_detail_ncurrently_allocated) gr_block_detail_ncurrently_allocated; -long gr_block_detail_ncurrently_allocated (); diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.cc b/gnuradio-core/src/lib/runtime/gr_block_executor.cc deleted file mode 100644 index e070f3c508..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block_executor.cc +++ /dev/null @@ -1,487 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2008,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 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_block_executor.h> -#include <gr_block.h> -#include <gr_block_detail.h> -#include <gr_buffer.h> -#include <gr_prefs.h> -#include <boost/thread.hpp> -#include <boost/format.hpp> -#include <iostream> -#include <limits> -#include <assert.h> -#include <stdio.h> - -// must be defined to either 0 or 1 -#define ENABLE_LOGGING 0 - -#if (ENABLE_LOGGING) -#define LOG(x) do { x; } while(0) -#else -#define LOG(x) do {;} while(0) -#endif - -static int which_scheduler = 0; - -inline static unsigned int -round_up (unsigned int n, unsigned int multiple) -{ - return ((n + multiple - 1) / multiple) * multiple; -} - -inline static unsigned int -round_down (unsigned int n, unsigned int multiple) -{ - return (n / multiple) * multiple; -} - -// -// Return minimum available write space in all our downstream buffers -// or -1 if we're output blocked and the output we're blocked -// on is done. -// -static int -min_available_space (gr_block_detail *d, int output_multiple, int min_noutput_items) -{ - int min_space = std::numeric_limits<int>::max(); - if (min_noutput_items == 0) - min_noutput_items = 1; - for (int i = 0; i < d->noutputs (); i++){ - gruel::scoped_lock guard(*d->output(i)->mutex()); - int avail_n = round_down(d->output(i)->space_available(), output_multiple); - int best_n = round_down(d->output(i)->bufsize()/2, output_multiple); - if (best_n < min_noutput_items) - throw std::runtime_error("Buffer too small for min_noutput_items"); - int n = std::min(avail_n, best_n); - if (n < min_noutput_items){ // We're blocked on output. - if (d->output(i)->done()){ // Downstream is done, therefore we're done. - return -1; - } - return 0; - } - min_space = std::min (min_space, n); - } - return min_space; -} - -static bool -propagate_tags(gr_block::tag_propagation_policy_t policy, gr_block_detail *d, - const std::vector<uint64_t> &start_nitems_read, double rrate, - std::vector<gr_tag_t> &rtags) -{ - // Move tags downstream - // if a sink, we don't need to move downstream - if(d->sink_p()) { - return true; - } - - switch(policy) { - case gr_block::TPP_DONT: - return true; - break; - case gr_block::TPP_ALL_TO_ALL: - // every tag on every input propogates to everyone downstream - for(int i = 0; i < d->ninputs(); i++) { - d->get_tags_in_range(rtags, i, start_nitems_read[i], - d->nitems_read(i)); - - std::vector<gr_tag_t>::iterator t; - if(rrate == 1.0) { - for(t = rtags.begin(); t != rtags.end(); t++) { - for(int o = 0; o < d->noutputs(); o++) - d->output(o)->add_item_tag(*t); - } - } - else { - for(t = rtags.begin(); t != rtags.end(); t++) { - gr_tag_t new_tag = *t; - new_tag.offset *= rrate; - for(int o = 0; o < d->noutputs(); o++) - d->output(o)->add_item_tag(new_tag); - } - } - } - break; - case gr_block::TPP_ONE_TO_ONE: - // tags from input i only go to output i - // this requires d->ninputs() == d->noutputs; this is checked when this - // type of tag-propagation system is selected in gr_block_detail - if(d->ninputs() == d->noutputs()) { - for(int i = 0; i < d->ninputs(); i++) { - d->get_tags_in_range(rtags, i, start_nitems_read[i], - d->nitems_read(i)); - - std::vector<gr_tag_t>::iterator t; - for(t = rtags.begin(); t != rtags.end(); t++) { - gr_tag_t new_tag = *t; - new_tag.offset *= rrate; - d->output(i)->add_item_tag(new_tag); - } - } - } - else { - std::cerr << "Error: gr_block_executor: propagation_policy 'ONE-TO-ONE' requires ninputs == noutputs" << std::endl; - return false; - } - - break; - default: - return true; - } - return true; -} - -gr_block_executor::gr_block_executor (gr_block_sptr block, int max_noutput_items) - : d_block(block), d_log(0), d_max_noutput_items(max_noutput_items) -{ - if (ENABLE_LOGGING){ - std::string name = str(boost::format("sst-%03d.log") % which_scheduler++); - d_log = new std::ofstream(name.c_str()); - std::unitbuf(*d_log); // make it unbuffered... - *d_log << "gr_block_executor: " - << d_block << std::endl; - } - -#ifdef GR_PERFORMANCE_COUNTERS - gr_prefs *prefs = gr_prefs::singleton(); - d_use_pc = prefs->get_bool("PerfCounters", "on", false); -#endif /* GR_PERFORMANCE_COUNTERS */ - - d_block->start(); // enable any drivers, etc. -} - -gr_block_executor::~gr_block_executor () -{ - if (ENABLE_LOGGING) - delete d_log; - - d_block->stop(); // stop any drivers, etc. -} - -gr_block_executor::state -gr_block_executor::run_one_iteration() -{ - int noutput_items; - int max_items_avail; - int max_noutput_items = d_max_noutput_items; - int new_alignment=0; - int alignment_state=-1; - - gr_block *m = d_block.get(); - gr_block_detail *d = m->detail().get(); - - LOG(*d_log << std::endl << m); - - if (d->done()){ - assert(0); - return DONE; - } - - if (d->source_p ()){ - d_ninput_items_required.resize (0); - d_ninput_items.resize (0); - d_input_items.resize (0); - d_input_done.resize(0); - d_output_items.resize (d->noutputs ()); - d_start_nitems_read.resize(0); - - // determine the minimum available output space - noutput_items = min_available_space (d, m->output_multiple (), m->min_noutput_items ()); - noutput_items = std::min(noutput_items, max_noutput_items); - LOG(*d_log << " source\n noutput_items = " << noutput_items << std::endl); - if (noutput_items == -1) // we're done - goto were_done; - - if (noutput_items == 0){ // we're output blocked - LOG(*d_log << " BLKD_OUT\n"); - return BLKD_OUT; - } - - goto setup_call_to_work; // jump to common code - } - - else if (d->sink_p ()){ - d_ninput_items_required.resize (d->ninputs ()); - d_ninput_items.resize (d->ninputs ()); - d_input_items.resize (d->ninputs ()); - d_input_done.resize(d->ninputs()); - d_output_items.resize (0); - d_start_nitems_read.resize(d->ninputs()); - LOG(*d_log << " sink\n"); - - max_items_avail = 0; - for (int i = 0; i < d->ninputs (); i++){ - { - /* - * Acquire the mutex and grab local copies of items_available and done. - */ - gruel::scoped_lock guard(*d->input(i)->mutex()); - d_ninput_items[i] = d->input(i)->items_available(); - d_input_done[i] = d->input(i)->done(); - } - - LOG(*d_log << " d_ninput_items[" << i << "] = " << d_ninput_items[i] << std::endl); - LOG(*d_log << " d_input_done[" << i << "] = " << d_input_done[i] << std::endl); - - if (d_ninput_items[i] < m->output_multiple() && d_input_done[i]) - goto were_done; - - max_items_avail = std::max (max_items_avail, d_ninput_items[i]); - } - - // take a swag at how much output we can sink - noutput_items = (int) (max_items_avail * m->relative_rate ()); - noutput_items = round_down (noutput_items, m->output_multiple ()); - noutput_items = std::min(noutput_items, max_noutput_items); - LOG(*d_log << " max_items_avail = " << max_items_avail << std::endl); - LOG(*d_log << " noutput_items = " << noutput_items << std::endl); - - if (noutput_items == 0){ // we're blocked on input - LOG(*d_log << " BLKD_IN\n"); - return BLKD_IN; - } - - goto try_again; // Jump to code shared with regular case. - } - - else { - // do the regular thing - d_ninput_items_required.resize (d->ninputs ()); - d_ninput_items.resize (d->ninputs ()); - d_input_items.resize (d->ninputs ()); - d_input_done.resize(d->ninputs()); - d_output_items.resize (d->noutputs ()); - d_start_nitems_read.resize(d->ninputs()); - - max_items_avail = 0; - for (int i = 0; i < d->ninputs (); i++){ - { - /* - * Acquire the mutex and grab local copies of items_available and done. - */ - gruel::scoped_lock guard(*d->input(i)->mutex()); - d_ninput_items[i] = d->input(i)->items_available (); - d_input_done[i] = d->input(i)->done(); - } - max_items_avail = std::max (max_items_avail, d_ninput_items[i]); - } - - // determine the minimum available output space - noutput_items = min_available_space (d, m->output_multiple (), m->min_noutput_items ()); - if (ENABLE_LOGGING){ - *d_log << " regular "; - if (m->relative_rate() >= 1.0) - *d_log << "1:" << m->relative_rate() << std::endl; - else - *d_log << 1.0/m->relative_rate() << ":1\n"; - *d_log << " max_items_avail = " << max_items_avail << std::endl; - *d_log << " noutput_items = " << noutput_items << std::endl; - } - if (noutput_items == -1) // we're done - goto were_done; - - if (noutput_items == 0){ // we're output blocked - LOG(*d_log << " BLKD_OUT\n"); - return BLKD_OUT; - } - - try_again: - if (m->fixed_rate()){ - // try to work it forward starting with max_items_avail. - // We want to try to consume all the input we've got. - int reqd_noutput_items = m->fixed_rate_ninput_to_noutput(max_items_avail); - - // only test this if we specifically set the output_multiple - if(m->output_multiple_set()) - reqd_noutput_items = round_down(reqd_noutput_items, m->output_multiple()); - - if (reqd_noutput_items > 0 && reqd_noutput_items <= noutput_items) - noutput_items = reqd_noutput_items; - - // if we need this many outputs, overrule the max_noutput_items setting - max_noutput_items = std::max(m->output_multiple(), max_noutput_items); - } - noutput_items = std::min(noutput_items, max_noutput_items); - - // Check if we're still unaligned; use up items until we're - // aligned again. Otherwise, make sure we set the alignment - // requirement. - if(!m->output_multiple_set()) { - if(m->is_unaligned()) { - // When unaligned, don't just set noutput_items to the remaining - // samples to meet alignment; this causes too much overhead in - // requiring a premature call back here. Set the maximum amount - // of samples to handle unalignment and get us back aligned. - if(noutput_items >= m->unaligned()) { - noutput_items = round_up(noutput_items, m->alignment()) \ - - (m->alignment() - m->unaligned()); - new_alignment = 0; - } - else { - new_alignment = m->unaligned() - noutput_items; - } - alignment_state = 0; - } - else if(noutput_items < m->alignment()) { - // if we don't have enough for an aligned call, keep track of - // misalignment, set unaligned flag, and proceed. - new_alignment = m->alignment() - noutput_items; - m->set_unaligned(new_alignment); - m->set_is_unaligned(true); - alignment_state = 1; - } - else { - // enough to round down to the nearest alignment and process. - noutput_items = round_down(noutput_items, m->alignment()); - m->set_is_unaligned(false); - alignment_state = 2; - } - } - - // ask the block how much input they need to produce noutput_items - m->forecast (noutput_items, d_ninput_items_required); - - // See if we've got sufficient input available - - int i; - for (i = 0; i < d->ninputs (); i++) - if (d_ninput_items_required[i] > d_ninput_items[i]) // not enough - break; - - if (i < d->ninputs ()){ // not enough input on input[i] - // if we can, try reducing the size of our output request - if (noutput_items > m->output_multiple ()){ - noutput_items /= 2; - noutput_items = round_up (noutput_items, m->output_multiple ()); - goto try_again; - } - - // We're blocked on input - LOG(*d_log << " BLKD_IN\n"); - if (d_input_done[i]) // If the upstream block is done, we're done - goto were_done; - - // Is it possible to ever fulfill this request? - if (d_ninput_items_required[i] > d->input(i)->max_possible_items_available ()){ - // Nope, never going to happen... - std::cerr << "\nsched: <gr_block " << m->name() - << " (" << m->unique_id() << ")>" - << " is requesting more input data\n" - << " than we can provide.\n" - << " ninput_items_required = " - << d_ninput_items_required[i] << "\n" - << " max_possible_items_available = " - << d->input(i)->max_possible_items_available() << "\n" - << " If this is a filter, consider reducing the number of taps.\n"; - goto were_done; - } - - // If we were made unaligned in this round but return here without - // processing; reset the unalignment claim before next entry. - if(alignment_state == 1) { - m->set_unaligned(0); - m->set_is_unaligned(false); - } - return BLKD_IN; - } - - // We've got enough data on each input to produce noutput_items. - // Finish setting up the call to work. - - for (int i = 0; i < d->ninputs (); i++) - d_input_items[i] = d->input(i)->read_pointer(); - - setup_call_to_work: - - d->d_produce_or = 0; - for (int i = 0; i < d->noutputs (); i++) - d_output_items[i] = d->output(i)->write_pointer(); - - // determine where to start looking for new tags - for (int i = 0; i < d->ninputs(); i++) - d_start_nitems_read[i] = d->nitems_read(i); - -#ifdef GR_PERFORMANCE_COUNTERS - if(d_use_pc) - d->start_perf_counters(); -#endif /* GR_PERFORMANCE_COUNTERS */ - - // Do the actual work of the block - int n = m->general_work (noutput_items, d_ninput_items, - d_input_items, d_output_items); - -#ifdef GR_PERFORMANCE_COUNTERS - if(d_use_pc) - d->stop_perf_counters(noutput_items, n); -#endif /* GR_PERFORMANCE_COUNTERS */ - - LOG(*d_log << " general_work: noutput_items = " << noutput_items - << " result = " << n << std::endl); - - // Adjust number of unaligned items left to process - if(m->is_unaligned()) { - m->set_unaligned(new_alignment); - m->set_is_unaligned(m->unaligned() != 0); - } - - if(!propagate_tags(m->tag_propagation_policy(), d, - d_start_nitems_read, m->relative_rate(), - d_returned_tags)) - goto were_done; - - if (n == gr_block::WORK_DONE) - goto were_done; - - if (n != gr_block::WORK_CALLED_PRODUCE) - d->produce_each (n); // advance write pointers - - if (d->d_produce_or > 0) // block produced something - return READY; - - // We didn't produce any output even though we called general_work. - // We have (most likely) consumed some input. - - /* - // If this is a source, it's broken. - if (d->source_p()){ - std::cerr << "gr_block_executor: source " << m - << " produced no output. We're marking it DONE.\n"; - // FIXME maybe we ought to raise an exception... - goto were_done; - } - */ - - // Have the caller try again... - return READY_NO_OUTPUT; - } - assert (0); - - were_done: - LOG(*d_log << " were_done\n"); - d->set_done (true); - return DONE; -} diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.h b/gnuradio-core/src/lib/runtime/gr_block_executor.h deleted file mode 100644 index fb7f9c2690..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block_executor.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2008 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_BLOCK_EXECUTOR_H -#define INCLUDED_GR_BLOCK_EXECUTOR_H - -#include <gr_core_api.h> -#include <gr_runtime_types.h> -#include <fstream> -#include <gr_tags.h> - -//class gr_block_executor; -//typedef boost::shared_ptr<gr_block_executor> gr_block_executor_sptr; - - -/*! - * \brief Manage the execution of a single block. - * \ingroup internal - */ - -class GR_CORE_API gr_block_executor { -protected: - gr_block_sptr d_block; // The block we're trying to run - std::ofstream *d_log; - - // These are allocated here so we don't have to on each iteration - - gr_vector_int d_ninput_items_required; - gr_vector_int d_ninput_items; - gr_vector_const_void_star d_input_items; - std::vector<bool> d_input_done; - gr_vector_void_star d_output_items; - std::vector<uint64_t> d_start_nitems_read; //stores where tag counts are before work - std::vector<gr_tag_t> d_returned_tags; - int d_max_noutput_items; - -#ifdef GR_PERFORMANCE_COUNTERS - bool d_use_pc; -#endif /* GR_PERFORMANCE_COUNTERS */ - - public: - gr_block_executor(gr_block_sptr block, int max_noutput_items=100000); - ~gr_block_executor (); - - enum state { - READY, // We made progress; everything's cool. - READY_NO_OUTPUT, // We consumed some input, but produced no output. - BLKD_IN, // no progress; we're blocked waiting for input data. - BLKD_OUT, // no progress; we're blocked waiting for output buffer space. - DONE, // we're done; don't call me again. - }; - - /* - * \brief Run one iteration. - */ - state run_one_iteration(); -}; - -#endif /* INCLUDED_GR_BLOCK_EXECUTOR_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_block_registry.cc b/gnuradio-core/src/lib/runtime/gr_block_registry.cc deleted file mode 100644 index eaa770dcaf..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block_registry.cc +++ /dev/null @@ -1,76 +0,0 @@ -#include <gr_basic_block.h> -#include <gr_block_registry.h> -#include <gr_tpb_detail.h> -#include <gr_block_detail.h> -#include <gr_block.h> -#include <stdio.h> - -gr_block_registry global_block_registry; - -gr_block_registry::gr_block_registry(){ - d_ref_map = pmt::make_dict(); -} - -long gr_block_registry::block_register(gr_basic_block* block){ - if(d_map.find(block->name()) == d_map.end()){ - d_map[block->name()] = blocksubmap_t(); - d_map[block->name()][0] = block; - return 0; - } else { - for(size_t i=0; i<=d_map[block->name()].size(); i++){ - if(d_map[block->name()].find(i) == d_map[block->name()].end()){ - d_map[block->name()][i] = block; - return i; - } - } - } - throw std::runtime_error("should not reach this"); -} - -void gr_block_registry::block_unregister(gr_basic_block* block){ - d_map[block->name()].erase( d_map[block->name()].find(block->symbolic_id())); - d_ref_map = pmt::dict_delete(d_ref_map, pmt::intern(block->symbol_name())); - if(block->alias_set()){ - d_ref_map = pmt::dict_delete(d_ref_map, pmt::intern(block->alias())); - } -} - -std::string gr_block_registry::register_symbolic_name(gr_basic_block* block){ - std::stringstream ss; - ss << block->name() << block->symbolic_id(); - //std::cout << "register_symbolic_name: " << ss.str() << std::endl; - register_symbolic_name(block, ss.str()); - return ss.str(); -} - -void gr_block_registry::register_symbolic_name(gr_basic_block* block, std::string name){ - if(dict_has_key(d_ref_map, pmt::intern(name))){ - throw std::runtime_error("symbol already exists, can not re-use!"); - } - d_ref_map = dict_add(d_ref_map, pmt::intern(name), pmt::make_any(block)); -} - -gr_basic_block_sptr gr_block_registry::block_lookup(pmt::pmt_t symbol){ - pmt::pmt_t ref = dict_ref(d_ref_map, symbol, pmt::PMT_NIL); - if(pmt::eq(ref, pmt::PMT_NIL)){ - throw std::runtime_error("block lookup failed! block not found!"); - } - gr_basic_block* blk = boost::any_cast<gr_basic_block*>( pmt::any_ref(ref) ); - return blk->shared_from_this(); -} - - -void gr_block_registry::register_primitive(std::string blk, gr_block* ref){ - primitive_map[blk] = ref; -} - -void gr_block_registry::unregister_primitive(std::string blk){ - primitive_map.erase(primitive_map.find(blk)); -} - -void gr_block_registry::notify_blk(std::string blk){ - if(primitive_map.find(blk) == primitive_map.end()){ return; } - if(primitive_map[blk]->detail().get()) - primitive_map[blk]->detail()->d_tpb.notify_msg(); -} - diff --git a/gnuradio-core/src/lib/runtime/gr_block_registry.h b/gnuradio-core/src/lib/runtime/gr_block_registry.h deleted file mode 100644 index 2e0a3b6d5c..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_block_registry.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef GR_BLOCK_REGISTRY_H -#define GR_BLOCK_REGISTRY_H - -#include <gr_core_api.h> -#include <map> -#include <gr_basic_block.h> - -#ifndef GR_BASIC_BLOCK_H -class gr_basic_block; -class gr_block; -#endif - -class GR_CORE_API gr_block_registry { - public: - gr_block_registry(); - - long block_register(gr_basic_block* block); - void block_unregister(gr_basic_block* block); - - std::string register_symbolic_name(gr_basic_block* block); - void register_symbolic_name(gr_basic_block* block, std::string name); - - gr_basic_block_sptr block_lookup(pmt::pmt_t symbol); - - void register_primitive(std::string blk, gr_block* ref); - void unregister_primitive(std::string blk); - void notify_blk(std::string blk); - - private: - - //typedef std::map< long, gr_basic_block_sptr > blocksubmap_t; - typedef std::map< long, gr_basic_block* > blocksubmap_t; - typedef std::map< std::string, blocksubmap_t > blockmap_t; - - blockmap_t d_map; - pmt::pmt_t d_ref_map; - std::map< std::string, gr_block*> primitive_map; - -}; - -GR_CORE_API extern gr_block_registry global_block_registry; - -#endif - diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.cc b/gnuradio-core/src/lib/runtime/gr_buffer.cc deleted file mode 100644 index 369959d65f..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_buffer.cc +++ /dev/null @@ -1,347 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,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 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_buffer.h> -#include <gr_vmcircbuf.h> -#include <gr_math.h> -#include <stdexcept> -#include <iostream> -#include <assert.h> -#include <algorithm> -#include <boost/math/common_factor_rt.hpp> - -static long s_buffer_count = 0; // counts for debugging storage mgmt -static long s_buffer_reader_count = 0; - -// ---------------------------------------------------------------------------- -// Notes on storage management -// -// Pretty much all the fundamental classes are now using the -// shared_ptr stuff for automatic reference counting. To ensure that -// no mistakes are made, we make the constructors for classes private, -// and then provide a free factory function that returns a smart -// pointer to the desired class. -// -// gr_buffer and gr_buffer_reader are no exceptions. However, they -// both want pointers to each other, and unless we do something, we'll -// never delete any of them because of the circular structure. -// They'll always have a reference count of at least one. We could -// use boost::weak_ptr's from gr_buffer to gr_buffer_reader but that -// introduces it's own problems. (gr_buffer_reader's destructor needs -// to call gr_buffer::drop_reader, but has no easy way to get a -// shared_ptr to itself.) -// -// Instead, we solve this problem by having gr_buffer hold a raw -// pointer to gr_buffer_reader in its d_reader vector. -// gr_buffer_reader's destructor calls gr_buffer::drop_reader, so -// we're never left with an dangling pointer. gr_buffer_reader still -// has a shared_ptr to the buffer ensuring that the buffer doesn't go -// away under it. However, when the reference count of a -// gr_buffer_reader goes to zero, we can successfully reclaim it. -// ---------------------------------------------------------------------------- - - -/* - * Compute the minimum number of buffer items that work (i.e., - * address space wrap-around works). To work is to satisfy this - * contraint for integer buffer_size and k: - * - * type_size * nitems == k * page_size - */ -static long -minimum_buffer_items (long type_size, long page_size) -{ - return page_size / boost::math::gcd (type_size, page_size); -} - - -gr_buffer::gr_buffer (int nitems, size_t sizeof_item, gr_block_sptr link) - : d_base (0), d_bufsize (0), d_vmcircbuf (0), - d_sizeof_item (sizeof_item), d_link(link), - d_write_index (0), d_abs_write_offset(0), d_done (false), - d_last_min_items_read(0) -{ - if (!allocate_buffer (nitems, sizeof_item)) - throw std::bad_alloc (); - - s_buffer_count++; -} - -gr_buffer_sptr -gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link) -{ - return gr_buffer_sptr (new gr_buffer (nitems, sizeof_item, link)); -} - -gr_buffer::~gr_buffer () -{ - delete d_vmcircbuf; - assert (d_readers.size() == 0); - s_buffer_count--; -} - -/*! - * sets d_vmcircbuf, d_base, d_bufsize. - * returns true iff successful. - */ -bool -gr_buffer::allocate_buffer (int nitems, size_t sizeof_item) -{ - int orig_nitems = nitems; - - // Any buffersize we come up with must be a multiple of min_nitems. - - int granularity = gr_vmcircbuf_sysconfig::granularity (); - int min_nitems = minimum_buffer_items (sizeof_item, granularity); - - // Round-up nitems to a multiple of min_nitems. - - if (nitems % min_nitems != 0) - nitems = ((nitems / min_nitems) + 1) * min_nitems; - - // If we rounded-up a whole bunch, give the user a heads up. - // This only happens if sizeof_item is not a power of two. - - if (nitems > 2 * orig_nitems && nitems * (int) sizeof_item > granularity){ - std::cerr << "gr_buffer::allocate_buffer: warning: tried to allocate\n" - << " " << orig_nitems << " items of size " - << sizeof_item << ". Due to alignment requirements\n" - << " " << nitems << " were allocated. If this isn't OK, consider padding\n" - << " your structure to a power-of-two bytes.\n" - << " On this platform, our allocation granularity is " << granularity << " bytes.\n"; - } - - d_bufsize = nitems; - d_vmcircbuf = gr_vmcircbuf_sysconfig::make (d_bufsize * d_sizeof_item); - if (d_vmcircbuf == 0){ - std::cerr << "gr_buffer::allocate_buffer: failed to allocate buffer of size " - << d_bufsize * d_sizeof_item / 1024 << " KB\n"; - return false; - } - - d_base = (char *) d_vmcircbuf->pointer_to_first_copy (); - return true; -} - - -int -gr_buffer::space_available () -{ - if (d_readers.empty ()) - return d_bufsize - 1; // See comment below - - else { - - // Find out the maximum amount of data available to our readers - - int most_data = d_readers[0]->items_available (); - uint64_t min_items_read = d_readers[0]->nitems_read(); - for (size_t i = 1; i < d_readers.size (); i++) { - most_data = std::max (most_data, d_readers[i]->items_available ()); - min_items_read = std::min(min_items_read, d_readers[i]->nitems_read()); - } - - if(min_items_read != d_last_min_items_read) { - prune_tags(d_last_min_items_read); - d_last_min_items_read = min_items_read; - } - - // The -1 ensures that the case d_write_index == d_read_index is - // unambiguous. It indicates that there is no data for the reader - - return d_bufsize - most_data - 1; - } -} - -void * -gr_buffer::write_pointer () -{ - return &d_base[d_write_index * d_sizeof_item]; -} - -void -gr_buffer::update_write_pointer (int nitems) -{ - gruel::scoped_lock guard(*mutex()); - d_write_index = index_add (d_write_index, nitems); - d_abs_write_offset += nitems; -} - -void -gr_buffer::set_done (bool done) -{ - gruel::scoped_lock guard(*mutex()); - d_done = done; -} - -gr_buffer_reader_sptr -gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link) -{ - if (nzero_preload < 0) - throw std::invalid_argument("gr_buffer_add_reader: nzero_preload must be >= 0"); - - gr_buffer_reader_sptr r (new gr_buffer_reader (buf, - buf->index_sub(buf->d_write_index, - nzero_preload), - link)); - buf->d_readers.push_back (r.get ()); - - return r; -} - -void -gr_buffer::drop_reader (gr_buffer_reader *reader) -{ - // isn't C++ beautiful... GAG! - - std::vector<gr_buffer_reader *>::iterator result = - std::find (d_readers.begin (), d_readers.end (), reader); - - if (result == d_readers.end ()) - throw std::invalid_argument ("gr_buffer::drop_reader"); // we didn't find it... - - d_readers.erase (result); -} - -void -gr_buffer::add_item_tag(const gr_tag_t &tag) -{ - gruel::scoped_lock guard(*mutex()); - d_item_tags.push_back(tag); -} - -void -gr_buffer::remove_item_tag(const gr_tag_t &tag) -{ - gruel::scoped_lock guard(*mutex()); - for (std::deque<gr_tag_t>::iterator it = d_item_tags.begin(); it != d_item_tags.end(); ++it) { - if (*it == tag) { - d_item_tags.erase(it); - break; - } - } -} - -void -gr_buffer::prune_tags(uint64_t max_time) -{ - /* NOTE: this function _should_ lock the mutex before editing - d_item_tags. In practice, this function is only called at - runtime by min_available_space in gr_block_executor.cc, - which locks the mutex itself. - - If this function is used elsewhere, remember to lock the - buffer's mutex al la the scoped_lock line below. - */ - //gruel::scoped_lock guard(*mutex()); - std::deque<gr_tag_t>::iterator itr = d_item_tags.begin(); - - uint64_t item_time; - - // Since tags are not guarenteed to be in any particular order, - // we need to erase here instead of pop_front. An erase in the - // middle invalidates all iterators; so this resets the iterator - // to find more. Mostly, we wil be erasing from the front and - // therefore lose little time this way. - while(itr != d_item_tags.end()) { - item_time = (*itr).offset; - if(item_time < max_time) { - d_item_tags.erase(itr); - itr = d_item_tags.begin(); - } - else - itr++; - } -} - -long -gr_buffer_ncurrently_allocated () -{ - return s_buffer_count; -} - -// ---------------------------------------------------------------------------- - -gr_buffer_reader::gr_buffer_reader(gr_buffer_sptr buffer, unsigned int read_index, - gr_block_sptr link) - : d_buffer(buffer), d_read_index(read_index), d_abs_read_offset(0), d_link(link) -{ - s_buffer_reader_count++; -} - -gr_buffer_reader::~gr_buffer_reader () -{ - d_buffer->drop_reader(this); - s_buffer_reader_count--; -} - -int -gr_buffer_reader::items_available () const -{ - return d_buffer->index_sub (d_buffer->d_write_index, d_read_index); -} - -const void * -gr_buffer_reader::read_pointer () -{ - return &d_buffer->d_base[d_read_index * d_buffer->d_sizeof_item]; -} - -void -gr_buffer_reader::update_read_pointer (int nitems) -{ - gruel::scoped_lock guard(*mutex()); - d_read_index = d_buffer->index_add (d_read_index, nitems); - d_abs_read_offset += nitems; -} - -void -gr_buffer_reader::get_tags_in_range(std::vector<gr_tag_t> &v, - uint64_t abs_start, - uint64_t abs_end) -{ - gruel::scoped_lock guard(*mutex()); - - v.resize(0); - std::deque<gr_tag_t>::iterator itr = d_buffer->get_tags_begin(); - - uint64_t item_time; - while(itr != d_buffer->get_tags_end()) { - item_time = (*itr).offset; - - if((item_time >= abs_start) && (item_time < abs_end)) { - v.push_back(*itr); - } - - itr++; - } -} - -long -gr_buffer_reader_ncurrently_allocated () -{ - return s_buffer_reader_count; -} diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.h b/gnuradio-core/src/lib/runtime/gr_buffer.h deleted file mode 100644 index 28ea977269..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_buffer.h +++ /dev/null @@ -1,309 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,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. - */ - -#ifndef INCLUDED_GR_BUFFER_H -#define INCLUDED_GR_BUFFER_H - -#include <gr_core_api.h> -#include <gr_runtime_types.h> -#include <boost/weak_ptr.hpp> -#include <gruel/thread.h> -#include <gr_tags.h> -#include <deque> - -class gr_vmcircbuf; - -/*! - * \brief Allocate a buffer that holds at least \p nitems of size \p sizeof_item. - * - * The total size of the buffer will be rounded up to a system - * dependent boundary. This is typically the system page size, but - * under MS windows is 64KB. - * - * \param nitems is the minimum number of items the buffer will hold. - * \param sizeof_item is the size of an item in bytes. - * \param link is the block that writes to this buffer. - */ -GR_CORE_API gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link=gr_block_sptr()); - - -/*! - * \brief Single writer, multiple reader fifo. - * \ingroup internal - */ -class GR_CORE_API gr_buffer { - public: - - virtual ~gr_buffer (); - - /*! - * \brief return number of items worth of space available for writing - */ - int space_available (); - - /*! - * \brief return size of this buffer in items - */ - int bufsize() const { return d_bufsize; } - - /*! - * \brief return pointer to write buffer. - * - * The return value points at space that can hold at least - * space_available() items. - */ - void *write_pointer (); - - /*! - * \brief tell buffer that we wrote \p nitems into it - */ - void update_write_pointer (int nitems); - - void set_done (bool done); - bool done () const { return d_done; } - - /*! - * \brief Return the block that writes to this buffer. - */ - gr_block_sptr link() { return gr_block_sptr(d_link); } - - size_t nreaders() const { return d_readers.size(); } - gr_buffer_reader* reader(size_t index) { return d_readers[index]; } - - gruel::mutex *mutex() { return &d_mutex; } - - uint64_t nitems_written() { return d_abs_write_offset; } - - size_t get_sizeof_item() { return d_sizeof_item; } - - /*! - * \brief Adds a new tag to the buffer. - * - * \param tag the new tag - */ - void add_item_tag(const gr_tag_t &tag); - - /*! - * \brief Removes an existing tag from the buffer. - * - * If no such tag is found, does nothing. - * - * \param tag the tag that needs to be removed - */ - void remove_item_tag(const gr_tag_t &tag); - - /*! - * \brief Removes all tags before \p max_time from buffer - * - * \param max_time the time (item number) to trim up until. - */ - void prune_tags(uint64_t max_time); - - std::deque<gr_tag_t>::iterator get_tags_begin() { return d_item_tags.begin(); } - std::deque<gr_tag_t>::iterator get_tags_end() { return d_item_tags.end(); } - - // ------------------------------------------------------------------------- - - private: - - friend class gr_buffer_reader; - friend GR_CORE_API gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); - friend GR_CORE_API gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link); - - protected: - char *d_base; // base address of buffer - unsigned int d_bufsize; // in items - private: - gr_vmcircbuf *d_vmcircbuf; - size_t d_sizeof_item; // in bytes - std::vector<gr_buffer_reader *> d_readers; - boost::weak_ptr<gr_block> d_link; // block that writes to this buffer - - // - // The mutex protects d_write_index, d_abs_write_offset, d_done, d_item_tags - // and the d_read_index's and d_abs_read_offset's in the buffer readers. - // - gruel::mutex d_mutex; - unsigned int d_write_index; // in items [0,d_bufsize) - uint64_t d_abs_write_offset; // num items written since the start - bool d_done; - std::deque<gr_tag_t> d_item_tags; - uint64_t d_last_min_items_read; - - unsigned - index_add (unsigned a, unsigned b) - { - unsigned s = a + b; - - if (s >= d_bufsize) - s -= d_bufsize; - - assert (s < d_bufsize); - return s; - } - - unsigned - index_sub (unsigned a, unsigned b) - { - int s = a - b; - - if (s < 0) - s += d_bufsize; - - assert ((unsigned) s < d_bufsize); - return s; - } - - virtual bool allocate_buffer (int nitems, size_t sizeof_item); - - /*! - * \brief constructor is private. Use gr_make_buffer to create instances. - * - * Allocate a buffer that holds at least \p nitems of size \p sizeof_item. - * - * \param nitems is the minimum number of items the buffer will hold. - * \param sizeof_item is the size of an item in bytes. - * \param link is the block that writes to this buffer. - * - * The total size of the buffer will be rounded up to a system - * dependent boundary. This is typically the system page size, but - * under MS windows is 64KB. - */ - gr_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); - - /*! - * \brief disassociate \p reader from this buffer - */ - void drop_reader (gr_buffer_reader *reader); - -}; - -/*! - * \brief Create a new gr_buffer_reader and attach it to buffer \p buf - * \param buf is the buffer the \p gr_buffer_reader reads from. - * \param nzero_preload -- number of zero items to "preload" into buffer. - * \param link is the block that reads from the buffer using this gr_buffer_reader. - */ -GR_CORE_API gr_buffer_reader_sptr -gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link=gr_block_sptr()); - -//! returns # of gr_buffers currently allocated -GR_CORE_API long gr_buffer_ncurrently_allocated (); - - -// --------------------------------------------------------------------------- - -/*! - * \brief How we keep track of the readers of a gr_buffer. - * \ingroup internal - */ - -class GR_CORE_API gr_buffer_reader { - public: - - ~gr_buffer_reader (); - - /*! - * \brief Return number of items available for reading. - */ - int items_available () const; - - /*! - * \brief Return buffer this reader reads from. - */ - gr_buffer_sptr buffer () const { return d_buffer; } - - - /*! - * \brief Return maximum number of items that could ever be available for reading. - * This is used as a sanity check in the scheduler to avoid looping forever. - */ - int max_possible_items_available () const { return d_buffer->d_bufsize - 1; } - - /*! - * \brief return pointer to read buffer. - * - * The return value points to items_available() number of items - */ - const void *read_pointer (); - - /* - * \brief tell buffer we read \p items from it - */ - void update_read_pointer (int nitems); - - void set_done (bool done) { d_buffer->set_done (done); } - bool done () const { return d_buffer->done (); } - - gruel::mutex *mutex() { return d_buffer->mutex(); } - - - uint64_t nitems_read() { return d_abs_read_offset; } - - size_t get_sizeof_item() { return d_buffer->get_sizeof_item(); } - - /*! - * \brief Return the block that reads via this reader. - * - */ - gr_block_sptr link() { return gr_block_sptr(d_link); } - - - /*! - * \brief Given a [start,end), returns a vector all tags in the range. - * - * Get a vector of tags in given range. Range of counts is from start to end-1. - * - * Tags are tuples of: - * (item count, source id, key, value) - * - * \param v a vector reference to return tags into - * \param abs_start a uint64 count of the start of the range of interest - * \param abs_end a uint64 count of the end of the range of interest - */ - void get_tags_in_range(std::vector<gr_tag_t> &v, - uint64_t abs_start, - uint64_t abs_end); - - // ------------------------------------------------------------------------- - - private: - - friend class gr_buffer; - friend GR_CORE_API gr_buffer_reader_sptr - gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link); - - - gr_buffer_sptr d_buffer; - unsigned int d_read_index; // in items [0,d->buffer.d_bufsize) - uint64_t d_abs_read_offset; // num items seen since the start - boost::weak_ptr<gr_block> d_link; // block that reads via this buffer reader - - //! constructor is private. Use gr_buffer::add_reader to create instances - gr_buffer_reader (gr_buffer_sptr buffer, unsigned int read_index, gr_block_sptr link); -}; - -//! returns # of gr_buffer_readers currently allocated -GR_CORE_API long gr_buffer_reader_ncurrently_allocated (); - - -#endif /* INCLUDED_GR_BUFFER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.i b/gnuradio-core/src/lib/runtime/gr_buffer.i deleted file mode 100644 index 390a94e050..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_buffer.i +++ /dev/null @@ -1,63 +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. - */ - -class gr_buffer; -typedef boost::shared_ptr<gr_buffer> gr_buffer_sptr; -%template(gr_buffer_sptr) boost::shared_ptr<gr_buffer>; -%rename(buffer) gr_make_buffer; -%ignore gr_buffer; - -gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); - -class gr_buffer { - public: - ~gr_buffer (); - - private: - gr_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); -}; - - -class gr_buffer_reader; -typedef boost::shared_ptr<gr_buffer_reader> gr_buffer_reader_sptr; -%template(gr_buffer_reader_sptr) boost::shared_ptr<gr_buffer_reader>; -%ignore gr_buffer_reader; - -%rename(buffer_add_reader) gr_buffer_add_reader; -gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link); - -class gr_buffer_reader { - public: - ~gr_buffer_reader (); - - private: - friend class gr_buffer; - gr_buffer_reader (gr_buffer_sptr buffer, unsigned int read_index, gr_block_sptr link); -}; - - -%rename(buffer_ncurrently_allocated) gr_buffer_ncurrently_allocated; -long gr_buffer_ncurrently_allocated (); - -%rename(buffer_reader_ncurrently_allocated) gr_buffer_reader_ncurrently_allocated; -long gr_buffer_reader_ncurrently_allocated (); - diff --git a/gnuradio-core/src/lib/runtime/gr_complex.h b/gnuradio-core/src/lib/runtime/gr_complex.h deleted file mode 100644 index 58d1525b4d..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_complex.h +++ /dev/null @@ -1,46 +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. - */ -#ifndef INCLUDED_GR_COMPLEX_H -#define INCLUDED_GR_COMPLEX_H - -#include <complex> -typedef std::complex<float> gr_complex; -typedef std::complex<double> gr_complexd; - - -inline bool is_complex (gr_complex x) { (void) x; return true;} -inline bool is_complex (gr_complexd x) { (void) x; return true;} -inline bool is_complex (float x) { (void) x; return false;} -inline bool is_complex (double x) { (void) x; return false;} -inline bool is_complex (int x) { (void) x; return false;} -inline bool is_complex (char x) { (void) x; return false;} -inline bool is_complex (short x) { (void) x; return false;} - - -// this doesn't really belong here, but there are worse places for it... - -#define CPPUNIT_ASSERT_COMPLEXES_EQUAL(expected,actual,delta) \ - CPPUNIT_ASSERT_DOUBLES_EQUAL (expected.real(), actual.real(), delta); \ - CPPUNIT_ASSERT_DOUBLES_EQUAL (expected.imag(), actual.imag(), delta); - -#endif /* INCLUDED_GR_COMPLEX_H */ - diff --git a/gnuradio-core/src/lib/runtime/gr_dispatcher.cc b/gnuradio-core/src/lib/runtime/gr_dispatcher.cc deleted file mode 100644 index 96ebe9ad8b..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_dispatcher.cc +++ /dev/null @@ -1,193 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_dispatcher.h> -#include <math.h> -#include <errno.h> -#include <stdio.h> - -#ifdef HAVE_SELECT -# ifdef HAVE_SYS_SELECT_H -# include <sys/select.h> -# else -# ifdef HAVE_SYS_TIME_H -# include <sys/time.h> -# endif -# ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> -# endif -# ifdef HAVE_UNISTD_H -# include <unistd.h> -# endif -# endif -#endif - - -static gr_dispatcher_sptr s_singleton; - -gr_dispatcher_sptr -gr_make_dispatcher() -{ - return gr_dispatcher_sptr(new gr_dispatcher()); -} - -gr_dispatcher_sptr -gr_dispatcher_singleton() -{ - if (s_singleton) - return s_singleton; - - s_singleton = gr_make_dispatcher(); - return s_singleton; -} - -#if !defined(HAVE_SELECT) // Stub it out - -gr_dispatcher::gr_dispatcher() -{ -} - -gr_dispatcher::~gr_dispatcher() -{ -} - -bool -gr_dispatcher::add_handler(gr_select_handler_sptr handler) -{ - return true; -} - -bool -gr_dispatcher::del_handler(gr_select_handler_sptr handler) -{ - return true; -} - -bool -gr_dispatcher::del_handler(gr_select_handler *handler) -{ - return true; -} - -void -gr_dispatcher::loop(double timeout) -{ -} - -#else // defined(HAVE_SELECT) - -gr_dispatcher::gr_dispatcher() - : d_handler(FD_SETSIZE), d_max_index(-1) -{ -} - -gr_dispatcher::~gr_dispatcher() -{ -} - -bool -gr_dispatcher::add_handler(gr_select_handler_sptr handler) -{ - int fd = handler->fd(); - if (fd < 0 || fd >= FD_SETSIZE) - return false; - - d_max_index = std::max(d_max_index, fd); - d_handler[fd] = handler; - return true; -} - -bool -gr_dispatcher::del_handler(gr_select_handler_sptr handler) -{ - return del_handler(handler.get()); -} - -bool -gr_dispatcher::del_handler(gr_select_handler *handler) -{ - int fd = handler->fd(); - if (fd < 0 || fd >= FD_SETSIZE) - return false; - - d_handler[fd].reset(); - - if (fd == d_max_index){ - int i; - for (i = fd - 1; i >= 0 && !d_handler[i]; i--) - ; - d_max_index = i; - } - return true; -} - - -void -gr_dispatcher::loop(double timeout) -{ - struct timeval master; - struct timeval tmp; - fd_set rd_set; - fd_set wr_set; - - double secs = floor (timeout); - master.tv_sec = (long) secs; - master.tv_usec = (long) ((timeout - secs) * 1e6); - - while (d_max_index >= 0){ - FD_ZERO(&rd_set); - FD_ZERO(&wr_set); - - for (int i = 0; i <= d_max_index; i++){ - if (d_handler[i] && d_handler[i]->readable()) - FD_SET(i, &rd_set); - if (d_handler[i] && d_handler[i]->writable()) - FD_SET(i, &wr_set); - } - - tmp = master; - int retval = select(d_max_index+1, &rd_set, &wr_set, 0, &tmp); - if (retval == 0) // timed out with nothing ready - continue; - if (retval < 0){ - if (errno == EINTR) - continue; - perror ("gr_dispatcher/select"); - return; - } - - for (int i = 0; i <= d_max_index; i++){ - if (FD_ISSET(i, &rd_set)) - if (d_handler[i]) - d_handler[i]->handle_read(); - if (FD_ISSET(i, &wr_set)) - if (d_handler[i]) - d_handler[i]->handle_write(); - } - } -} - -#endif diff --git a/gnuradio-core/src/lib/runtime/gr_dispatcher.h b/gnuradio-core/src/lib/runtime/gr_dispatcher.h deleted file mode 100644 index 72a0b0176b..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_dispatcher.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_DISPATCHER_H -#define INCLUDED_GR_DISPATCHER_H - -#include <gr_core_api.h> -#include <gr_select_handler.h> -#include <vector> - -class gr_dispatcher; -typedef boost::shared_ptr<gr_dispatcher> gr_dispatcher_sptr; - -GR_CORE_API gr_dispatcher_sptr gr_dispatcher_singleton(); -GR_CORE_API gr_dispatcher_sptr gr_make_dispatcher(); - -/*! - * \brief invoke callbacks based on select. - * \ingroup internal - * - * \sa gr_select_handler - */ -class GR_CORE_API gr_dispatcher -{ - gr_dispatcher(); - friend GR_CORE_API gr_dispatcher_sptr gr_make_dispatcher(); - - std::vector<gr_select_handler_sptr> d_handler; - int d_max_index; - -public: - ~gr_dispatcher(); - - bool add_handler(gr_select_handler_sptr handler); - bool del_handler(gr_select_handler_sptr handler); - bool del_handler(gr_select_handler *handler); - - /*! - * \brief Event dispatching loop. - * - * Enter a polling loop that only terminates after all gr_select_handlers - * have been removed. \p timeout sets the timeout parameter to the select() - * call, measured in seconds. - * - * \param timeout maximum number of seconds to block in select. - */ - void loop(double timeout=10); -}; - -#endif /* INCLUDED_GR_DISPATCHER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_dispatcher.i b/gnuradio-core/src/lib/runtime/gr_dispatcher.i deleted file mode 100644 index 28737cd317..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_dispatcher.i +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ - -class gr_dispatcher; -typedef boost::shared_ptr<gr_dispatcher> gr_dispatcher_sptr; -%template(gr_dispatcher_sptr) boost::shared_ptr<gr_dispatcher>; - -%rename(dispatcher) gr_make_dispatcher; -gr_dispatcher_sptr gr_make_dispatcher(); - -%rename(dispatcher_singleton) gr_dispatcher_singleton; -gr_dispatcher_sptr gr_dispatcher_singleton(); - -/*! - * \brief invoke callbacks based on select. - * - * \sa gr_select_handler - */ -class gr_dispatcher -{ - gr_dispatcher(); - -public: - ~gr_dispatcher(); - - /*! - * \brief Event dispatching loop. - * - * Enter a polling loop that only terminates after all gr_select_handlers - * have been removed. \p timeout sets the timeout parameter to the select() - * call, measured in seconds. - * - * \param timeout maximum number of seconds to block in select. - */ - void loop(double timeout=10); -}; diff --git a/gnuradio-core/src/lib/runtime/gr_error_handler.cc b/gnuradio-core/src/lib/runtime/gr_error_handler.cc deleted file mode 100644 index 448682966e..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_error_handler.cc +++ /dev/null @@ -1,244 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ -/* - * This code is based on error.cc from the "Click Modular Router". - * Original copyright follows: - */ -/* - * error.{cc,hh} -- flexible classes for error reporting - * Eddie Kohler - * - * Copyright (c) 1999-2000 Massachusetts Institute of Technology - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, subject to the conditions - * listed in the Click LICENSE file. These conditions include: you must - * preserve this copyright notice, and you cannot mention the copyright - * holders in advertising related to the Software without their permission. - * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This - * notice is a summary of the Click LICENSE file; the license in that file is - * legally binding. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_error_handler.h> -#include <assert.h> -#include <stdexcept> -#include <unistd.h> - -#ifdef HAVE_IO_H -#include <io.h> -#endif - -static gr_error_handler *s_default_handler = 0; -static gr_error_handler *s_silent_handler = 0; - -bool -gr_error_handler::has_default_handler() -{ - return s_default_handler != 0; -} - -void -gr_error_handler::set_default_handler(gr_error_handler *errh) -{ - s_default_handler = errh; -} - -gr_error_handler * -gr_error_handler::default_handler() -{ - assert (s_default_handler != 0); - return s_default_handler; -} - -gr_error_handler * -gr_error_handler::silent_handler() -{ - assert (s_silent_handler != 0); - return s_silent_handler; -} - -// ---------------------------------------------------------------- - -gr_error_handler::~gr_error_handler() -{ - // nop -} - -void -gr_error_handler::debug(const char *format, ...) -{ - va_list val; - va_start(val, format); - verror(ERR_DEBUG, format, val); - va_end(val); -} - -void -gr_error_handler::message(const char *format, ...) -{ - va_list val; - va_start(val, format); - verror(ERR_MESSAGE, format, val); - va_end(val); -} - -void -gr_error_handler::warning(const char *format, ...) -{ - va_list val; - va_start(val, format); - verror(ERR_WARNING, format, val); - va_end(val); -} - -void -gr_error_handler::error(const char *format, ...) -{ - va_list val; - va_start(val, format); - verror(ERR_ERROR, format, val); - va_end(val); -} - -void -gr_error_handler::fatal(const char *format, ...) -{ - va_list val; - va_start(val, format); - verror(ERR_FATAL, format, val); - va_end(val); -} - -void -gr_error_handler::verror(seriousness s, const char *format, va_list val) -{ - std::string text = make_text(s, format, val); - handle_text(s, text); - count_error(s); -} - -void -gr_error_handler::verror_text(seriousness s, const std::string &text) -{ - // text is already made - handle_text(s, text); - count_error(s); -} - -std::string -gr_error_handler::make_text(seriousness s, const char *format, va_list val) -{ - char text_buf[4096]; - vsnprintf(text_buf, sizeof(text_buf), format, val); - text_buf[sizeof(text_buf)-1] = 0; - return text_buf; -} - -// ---------------------------------------------------------------- - -void -gr_base_error_handler::count_error(seriousness s) -{ - if (s < ERR_WARNING) - /* do nothing */; - else if (s < ERR_ERROR) - d_nwarnings++; - else - d_nerrors++; -} - -// ---------------------------------------------------------------- - -gr_file_error_handler::gr_file_error_handler(FILE *file) - : d_file(file), d_fd(-1) -{ -} - -gr_file_error_handler::gr_file_error_handler(int file_descriptor) -{ - d_fd = dup(file_descriptor); // so we can fclose it - if (d_fd == -1){ - perror("gr_file_error_handler:dup"); - throw std::invalid_argument("gr_file_error_handler:dup"); - } - d_file = fdopen(d_fd, "w"); - if (d_file == 0){ - perror("gr_file_error_handler:fdopen"); - throw std::invalid_argument("gr_file_error_handler:fdopen"); - } -} - -gr_file_error_handler::~gr_file_error_handler() -{ - if (d_fd != -1){ - fclose(d_file); - } -} - -void -gr_file_error_handler::handle_text(seriousness s, const std::string &text) -{ - if (text.length() <= 0) - return; - - fwrite(text.data(), 1, text.length(), d_file); - if (text[text.length()-1] != '\n') - fwrite("\n", 1, 1, d_file); - - if (d_fd != -1) - fflush(d_file); // keep synced with any other users of fd -} - - -// ---------------------------------------------------------------- -// static error handlers -// - -class gr_silent_error_handler : public gr_base_error_handler -{ -public: - gr_silent_error_handler() {} - void handle_text(seriousness s, const std::string &str); -}; - -void -gr_silent_error_handler::handle_text(seriousness s, const std::string &str) -{ - // nop -} - -class force_init { -public: - force_init() - { - s_default_handler = new gr_file_error_handler(stdout); - s_silent_handler = new gr_silent_error_handler(); - } -}; - -static force_init kludge; diff --git a/gnuradio-core/src/lib/runtime/gr_error_handler.h b/gnuradio-core/src/lib/runtime/gr_error_handler.h deleted file mode 100644 index 569c01c457..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_error_handler.h +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ -/* - * This code is based on error.hh from the "Click Modular Router". - * Original copyright follows: - */ -/* - * error.{cc,hh} -- flexible classes for error reporting - * Eddie Kohler - * - * Copyright (c) 1999-2000 Massachusetts Institute of Technology - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, subject to the conditions - * listed in the Click LICENSE file. These conditions include: you must - * preserve this copyright notice, and you cannot mention the copyright - * holders in advertising related to the Software without their permission. - * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This - * notice is a summary of the Click LICENSE file; the license in that file is - * legally binding. - */ - -#ifndef INCLUDED_GR_ERROR_HANDLER_H -#define INCLUDED_GR_ERROR_HANDLER_H - -#include <gr_core_api.h> -#include <stdarg.h> -#include <string> -#include <cstdio> // for FILE - -/*! - * \brief abstract error handler - * \ingroup base - */ -class GR_CORE_API gr_error_handler { -public: - enum seriousness { - ERR_DEBUG = 0x00000000, - ERR_MESSAGE = 0x00010000, - ERR_WARNING = 0x00020000, - ERR_ERROR = 0x00030000, - ERR_FATAL = 0x00040000 - }; - - gr_error_handler() {} - virtual ~gr_error_handler(); - - static gr_error_handler *default_handler(); - static gr_error_handler *silent_handler(); - - static bool has_default_handler(); - static void set_default_handler(gr_error_handler *errh); - - void debug(const char *format, ...); - void message(const char *format, ...); - void warning(const char *format, ...); - void error(const char *format, ...); - void fatal(const char *format, ...); - - virtual int nwarnings() const = 0; - virtual int nerrors() const = 0; - virtual void reset_counts() = 0; - - void verror(seriousness s, const char *format, va_list); - void verror_text(seriousness s, const std::string &text); - -protected: - virtual void count_error(seriousness s) = 0; - virtual void handle_text(seriousness s, const std::string &str) = 0; - std::string make_text(seriousness s, const char *format, va_list); -}; - - -class GR_CORE_API gr_base_error_handler : public gr_error_handler { - int d_nwarnings; - int d_nerrors; - -public: - gr_base_error_handler() : d_nwarnings(0), d_nerrors(0) {} - int nwarnings() const { return d_nwarnings; } - int nerrors() const { return d_nerrors; } - void reset_counts() { d_nwarnings = d_nerrors = 0; } - void count_error(seriousness s); -}; - -class GR_CORE_API gr_file_error_handler : public gr_base_error_handler { - FILE *d_file; - int d_fd; -public: - gr_file_error_handler(FILE *file); - gr_file_error_handler(int file_descriptor); - ~gr_file_error_handler(); - - void handle_text(seriousness s, const std::string &str); -}; - -#endif /* INCLUDED_GR_ERROR_HANDLER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_error_handler.i b/gnuradio-core/src/lib/runtime/gr_error_handler.i deleted file mode 100644 index 072394a727..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_error_handler.i +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ - -%rename(error_handler) gr_error_handler; -%rename(file_error_handler) gr_file_error_handler; - -class gr_error_handler { -public: - enum seriousness { - ERR_DEBUG = 0x00000000, - ERR_MESSAGE = 0x00010000, - ERR_WARNING = 0x00020000, - ERR_ERROR = 0x00030000, - ERR_FATAL = 0x00040000 - }; - - gr_error_handler() {} - virtual ~gr_error_handler(); - - static gr_error_handler *default_handler(); - static gr_error_handler *silent_handler(); - - static bool has_default_handler(); - static void set_default_handler(gr_error_handler *errh); - - virtual int nwarnings() const = 0; - virtual int nerrors() const = 0; - virtual void reset_counts() = 0; - - void verror_text(seriousness s, const std::string &text); -}; - -%ignore gr_base_error_handler; -class gr_base_error_handler : public gr_error_handler { - int d_nwarnings; - int d_nerrors; - -public: - gr_base_error_handler() : d_nwarnings(0), d_nerrors(0) {} - int nwarnings() const { return d_nwarnings; } - int nerrors() const { return d_nerrors; } - void reset_counts() { d_nwarnings = d_nerrors = 0; } - void count_error(seriousness s); -}; - -class gr_file_error_handler : public gr_base_error_handler { -public: - gr_file_error_handler(int file_descriptor); - ~gr_file_error_handler(); -}; diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc deleted file mode 100644 index de1e227ef0..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc +++ /dev/null @@ -1,427 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007 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_flat_flowgraph.h> -#include <gr_block_detail.h> -#include <gr_io_signature.h> -#include <gr_buffer.h> -#include <gr_prefs.h> -#include <volk/volk.h> -#include <iostream> -#include <map> -#include <boost/format.hpp> - -#define GR_FLAT_FLOWGRAPH_DEBUG 0 - -// 32Kbyte buffer size between blocks -#define GR_FIXED_BUFFER_SIZE (32*(1L<<10)) - -static const unsigned int s_fixed_buffer_size = GR_FIXED_BUFFER_SIZE; - -gr_flat_flowgraph_sptr -gr_make_flat_flowgraph() -{ - return gr_flat_flowgraph_sptr(new gr_flat_flowgraph()); -} - -gr_flat_flowgraph::gr_flat_flowgraph() -{ -} - -gr_flat_flowgraph::~gr_flat_flowgraph() -{ -} - -void -gr_flat_flowgraph::setup_connections() -{ - gr_basic_block_vector_t blocks = calc_used_blocks(); - - // Assign block details to blocks - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) - cast_to_block_sptr(*p)->set_detail(allocate_block_detail(*p)); - - // Connect inputs to outputs for each block - for(gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { - connect_block_inputs(*p); - - gr_block_sptr block = cast_to_block_sptr(*p); - block->set_unaligned(0); - block->set_is_unaligned(false); - } - - // Connect message ports connetions - for(gr_msg_edge_viter_t i = d_msg_edges.begin(); i != d_msg_edges.end(); i++){ - if(GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << boost::format("flat_fg connecting msg primitives: (%s, %s)->(%s, %s)\n") % - i->src().block() % i->src().port() % - i->dst().block() % i->dst().port(); - i->src().block()->message_port_sub( i->src().port(), pmt::cons(i->dst().block()->alias_pmt(), i->dst().port()) ); - } - -} - -gr_block_detail_sptr -gr_flat_flowgraph::allocate_block_detail(gr_basic_block_sptr block) -{ - int ninputs = calc_used_ports(block, true).size(); - int noutputs = calc_used_ports(block, false).size(); - gr_block_detail_sptr detail = gr_make_block_detail(ninputs, noutputs); - - gr_block_sptr grblock = cast_to_block_sptr(block); - if(!grblock) - throw std::runtime_error("allocate_block_detail found non-gr_block"); - - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "Creating block detail for " << block << std::endl; - - for (int i = 0; i < noutputs; i++) { - grblock->expand_minmax_buffer(i); - - gr_buffer_sptr buffer = allocate_buffer(block, i); - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "Allocated buffer for output " << block << ":" << i << std::endl; - detail->set_output(i, buffer); - - // Update the block's max_output_buffer based on what was actually allocated. - grblock->set_max_output_buffer(i, buffer->bufsize()); - } - - return detail; -} - -gr_buffer_sptr -gr_flat_flowgraph::allocate_buffer(gr_basic_block_sptr block, int port) -{ - gr_block_sptr grblock = cast_to_block_sptr(block); - if (!grblock) - throw std::runtime_error("allocate_buffer found non-gr_block"); - int item_size = block->output_signature()->sizeof_stream_item(port); - - // *2 because we're now only filling them 1/2 way in order to - // increase the available parallelism when using the TPB scheduler. - // (We're double buffering, where we used to single buffer) - int nitems = s_fixed_buffer_size * 2 / item_size; - - // Make sure there are at least twice the output_multiple no. of items - if (nitems < 2*grblock->output_multiple()) // Note: this means output_multiple() - nitems = 2*grblock->output_multiple(); // can't be changed by block dynamically - - // If any downstream blocks are decimators and/or have a large output_multiple, - // ensure we have a buffer at least twice their decimation factor*output_multiple - gr_basic_block_vector_t blocks = calc_downstream_blocks(block, port); - - // limit buffer size if indicated - if(grblock->max_output_buffer(port) > 0) { -// std::cout << "constraining output items to " << block->max_output_buffer(port) << "\n"; - nitems = std::min((long)nitems, (long)grblock->max_output_buffer(port)); - nitems -= nitems%grblock->output_multiple(); - if( nitems < 1 ) - throw std::runtime_error("problems allocating a buffer with the given max output buffer constraint!"); - } - else if(grblock->min_output_buffer(port) > 0) { - nitems = std::max((long)nitems, (long)grblock->min_output_buffer(port)); - nitems -= nitems%grblock->output_multiple(); - if( nitems < 1 ) - throw std::runtime_error("problems allocating a buffer with the given min output buffer constraint!"); - } - - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { - gr_block_sptr dgrblock = cast_to_block_sptr(*p); - if (!dgrblock) - throw std::runtime_error("allocate_buffer found non-gr_block"); - - double decimation = (1.0/dgrblock->relative_rate()); - int multiple = dgrblock->output_multiple(); - int history = dgrblock->history(); - nitems = std::max(nitems, static_cast<int>(2*(decimation*multiple+history))); - } - -// std::cout << "gr_make_buffer(" << nitems << ", " << item_size << ", " << grblock << "\n"; - return gr_make_buffer(nitems, item_size, grblock); -} - -void -gr_flat_flowgraph::connect_block_inputs(gr_basic_block_sptr block) -{ - gr_block_sptr grblock = cast_to_block_sptr(block); - if (!grblock) - throw std::runtime_error("connect_block_inputs found non-gr_block"); - - // Get its detail and edges that feed into it - gr_block_detail_sptr detail = grblock->detail(); - gr_edge_vector_t in_edges = calc_upstream_edges(block); - - // For each edge that feeds into it - for (gr_edge_viter_t e = in_edges.begin(); e != in_edges.end(); e++) { - // Set the buffer reader on the destination port to the output - // buffer on the source port - int dst_port = e->dst().port(); - int src_port = e->src().port(); - gr_basic_block_sptr src_block = e->src().block(); - gr_block_sptr src_grblock = cast_to_block_sptr(src_block); - if (!src_grblock) - throw std::runtime_error("connect_block_inputs found non-gr_block"); - gr_buffer_sptr src_buffer = src_grblock->detail()->output(src_port); - - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "Setting input " << dst_port << " from edge " << (*e) << std::endl; - - detail->set_input(dst_port, gr_buffer_add_reader(src_buffer, grblock->history()-1, grblock)); - } -} - -void -gr_flat_flowgraph::merge_connections(gr_flat_flowgraph_sptr old_ffg) -{ - // Allocate block details if needed. Only new blocks that aren't pruned out - // by flattening will need one; existing blocks still in the new flowgraph will - // already have one. - for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { - gr_block_sptr block = cast_to_block_sptr(*p); - - if (!block->detail()) { - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "merge: allocating new detail for block " << (*p) << std::endl; - block->set_detail(allocate_block_detail(block)); - } - else - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "merge: reusing original detail for block " << (*p) << std::endl; - } - - // Calculate the old edges that will be going away, and clear the buffer readers - // on the RHS. - for (gr_edge_viter_t old_edge = old_ffg->d_edges.begin(); old_edge != old_ffg->d_edges.end(); old_edge++) { - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "merge: testing old edge " << (*old_edge) << "..."; - - gr_edge_viter_t new_edge; - for (new_edge = d_edges.begin(); new_edge != d_edges.end(); new_edge++) - if (new_edge->src() == old_edge->src() && - new_edge->dst() == old_edge->dst()) - break; - - if (new_edge == d_edges.end()) { // not found in new edge list - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "not in new edge list" << std::endl; - // zero the buffer reader on RHS of old edge - gr_block_sptr block(cast_to_block_sptr(old_edge->dst().block())); - int port = old_edge->dst().port(); - block->detail()->set_input(port, gr_buffer_reader_sptr()); - } - else { - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "found in new edge list" << std::endl; - } - } - - // Now connect inputs to outputs, reusing old buffer readers if they exist - for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { - gr_block_sptr block = cast_to_block_sptr(*p); - - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "merge: merging " << (*p) << "..."; - - if (old_ffg->has_block_p(*p)) { - // Block exists in old flow graph - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "used in old flow graph" << std::endl; - gr_block_detail_sptr detail = block->detail(); - - // Iterate through the inputs and see what needs to be done - int ninputs = calc_used_ports(block, true).size(); // Might be different now - for (int i = 0; i < ninputs; i++) { - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "Checking input " << block << ":" << i << "..."; - gr_edge edge = calc_upstream_edge(*p, i); - - // Fish out old buffer reader and see if it matches correct buffer from edge list - gr_block_sptr src_block = cast_to_block_sptr(edge.src().block()); - gr_block_detail_sptr src_detail = src_block->detail(); - gr_buffer_sptr src_buffer = src_detail->output(edge.src().port()); - gr_buffer_reader_sptr old_reader; - if (i < detail->ninputs()) // Don't exceed what the original detail has - old_reader = detail->input(i); - - // If there's a match, use it - if (old_reader && (src_buffer == old_reader->buffer())) { - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "matched, reusing" << std::endl; - } - else { - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "needs a new reader" << std::endl; - - // Create new buffer reader and assign - detail->set_input(i, gr_buffer_add_reader(src_buffer, block->history()-1, block)); - } - } - } - else { - // Block is new, it just needs buffer readers at this point - if (GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << "new block" << std::endl; - connect_block_inputs(block); - - // Make sure all buffers are aligned - setup_buffer_alignment(block); - } - - // Now deal with the fact that the block details might have changed numbers of - // inputs and outputs vs. in the old flowgraph. - } -} - -void -gr_flat_flowgraph::setup_buffer_alignment(gr_block_sptr block) -{ - const int alignment = volk_get_alignment(); - for(int i = 0; i < block->detail()->ninputs(); i++) { - void *r = (void*)block->detail()->input(i)->read_pointer(); - unsigned long int ri = (unsigned long int)r % alignment; - //std::cerr << "reader: " << r << " alignment: " << ri << std::endl; - if(ri != 0) { - size_t itemsize = block->detail()->input(i)->get_sizeof_item(); - block->detail()->input(i)->update_read_pointer(alignment-ri/itemsize); - } - block->set_unaligned(0); - block->set_is_unaligned(false); - } - - for(int i = 0; i < block->detail()->noutputs(); i++) { - void *w = (void*)block->detail()->output(i)->write_pointer(); - unsigned long int wi = (unsigned long int)w % alignment; - //std::cerr << "writer: " << w << " alignment: " << wi << std::endl; - if(wi != 0) { - size_t itemsize = block->detail()->output(i)->get_sizeof_item(); - block->detail()->output(i)->update_write_pointer(alignment-wi/itemsize); - } - block->set_unaligned(0); - block->set_is_unaligned(false); - } -} - -std::string -gr_flat_flowgraph::edge_list() -{ - std::stringstream s; - for(gr_edge_viter_t e = d_edges.begin(); e != d_edges.end(); e++) - s << (*e) << std::endl; - return s.str(); -} - -void gr_flat_flowgraph::dump() -{ - for (gr_edge_viter_t e = d_edges.begin(); e != d_edges.end(); e++) - std::cout << " edge: " << (*e) << std::endl; - - for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { - std::cout << " block: " << (*p) << std::endl; - gr_block_detail_sptr detail = cast_to_block_sptr(*p)->detail(); - std::cout << " detail @" << detail << ":" << std::endl; - - int ni = detail->ninputs(); - int no = detail->noutputs(); - for (int i = 0; i < no; i++) { - gr_buffer_sptr buffer = detail->output(i); - std::cout << " output " << i << ": " << buffer << std::endl; - } - - for (int i = 0; i < ni; i++) { - gr_buffer_reader_sptr reader = detail->input(i); - std::cout << " reader " << i << ": " << reader - << " reading from buffer=" << reader->buffer() << std::endl; - } - } - -} - -gr_block_vector_t -gr_flat_flowgraph::make_block_vector(gr_basic_block_vector_t &blocks) -{ - gr_block_vector_t result; - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { - result.push_back(cast_to_block_sptr(*p)); - } - - return result; -} - - -void gr_flat_flowgraph::clear_endpoint(const gr_msg_endpoint &e, bool is_src){ - for(size_t i=0; i<d_msg_edges.size(); i++){ - if(is_src){ - if(d_msg_edges[i].src() == e){ - d_msg_edges.erase(d_msg_edges.begin() + i); - i--; - } - } else { - if(d_msg_edges[i].dst() == e){ - d_msg_edges.erase(d_msg_edges.begin() + i); - i--; - } - } - } -} - -void gr_flat_flowgraph::replace_endpoint(const gr_msg_endpoint &e, const gr_msg_endpoint &r, bool is_src){ - size_t n_replr(0); - if(GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << boost::format("gr_flat_flowgraph::replace_endpoint( %s, %s, %d )\n") % e.block()% r.block()% is_src; - for(size_t i=0; i<d_msg_edges.size(); i++){ - if(is_src){ - if(d_msg_edges[i].src() == e){ - if(GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << boost::format("gr_flat_flowgraph::replace_endpoint() flattening to ( %s, %s )\n") % r.block()% d_msg_edges[i].dst().block(); - d_msg_edges.push_back( gr_msg_edge(r, d_msg_edges[i].dst() ) ); - n_replr++; - } - } else { - if(d_msg_edges[i].dst() == e){ - if(GR_FLAT_FLOWGRAPH_DEBUG) - std::cout << boost::format("gr_flat_flowgraph::replace_endpoint() flattening to ( %s, %s )\n") % r.block()% d_msg_edges[i].dst().block(); - d_msg_edges.push_back( gr_msg_edge(d_msg_edges[i].src(), r ) ); - n_replr++; - } - } - } -} - -void -gr_flat_flowgraph::enable_pc_rpc() -{ -#ifdef GR_PERFORMANCE_COUNTERS - if(gr_prefs::singleton()->get_bool("PerfCounters", "on", false)) { - gr_basic_block_viter_t p; - for(p = d_blocks.begin(); p != d_blocks.end(); p++) { - gr_block_sptr block = cast_to_block_sptr(*p); - if(!block->is_pc_rpc_set()) - block->setup_pc_rpc(); - } - } -#endif /* GR_PERFORMANCE_COUNTERS */ -} diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h deleted file mode 100644 index 3cd3228f41..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007 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_FLAT_FLOWGRAPH_H -#define INCLUDED_GR_FLAT_FLOWGRAPH_H - -#include <gr_core_api.h> -#include <gr_flowgraph.h> -#include <gr_block.h> - -// Create a shared pointer to a heap allocated gr_flat_flowgraph -// (types defined in gr_runtime_types.h) -GR_CORE_API gr_flat_flowgraph_sptr gr_make_flat_flowgraph(); - -/*! - *\brief Class specializing gr_flat_flowgraph that has all nodes - * as gr_blocks, with no hierarchy - * \ingroup internal - */ -class GR_CORE_API gr_flat_flowgraph : public gr_flowgraph -{ -public: - friend GR_CORE_API gr_flat_flowgraph_sptr gr_make_flat_flowgraph(); - - // Destruct an arbitrary gr_flat_flowgraph - ~gr_flat_flowgraph(); - - // Wire gr_blocks together in new flat_flowgraph - void setup_connections(); - - // Merge applicable connections from existing flat flowgraph - void merge_connections(gr_flat_flowgraph_sptr sfg); - - // Return a string list of edges - std::string edge_list(); - - void dump(); - - /*! - * Make a vector of gr_block from a vector of gr_basic_block - */ - static gr_block_vector_t make_block_vector(gr_basic_block_vector_t &blocks); - - void replace_endpoint(const gr_msg_endpoint &e, const gr_msg_endpoint &r, bool is_src); - void clear_endpoint(const gr_msg_endpoint &e, bool is_src); - - /*! - * Enables export of perf. counters to ControlPort on all blocks in - * the flowgraph. - */ - void enable_pc_rpc(); - -private: - gr_flat_flowgraph(); - - gr_block_detail_sptr allocate_block_detail(gr_basic_block_sptr block); - gr_buffer_sptr allocate_buffer(gr_basic_block_sptr block, int port); - void connect_block_inputs(gr_basic_block_sptr block); - - /* When reusing a flowgraph's blocks, this call makes sure all of the - * buffer's are aligned at the machine's alignment boundary and tells - * the blocks that they are aligned. - * - * Called from both setup_connections and merge_connections for - * start and restarts. - */ - void setup_buffer_alignment(gr_block_sptr block); -}; - -#endif /* INCLUDED_GR_FLAT_FLOWGRAPH_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_flowgraph.cc b/gnuradio-core/src/lib/runtime/gr_flowgraph.cc deleted file mode 100644 index 63a2084802..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_flowgraph.cc +++ /dev/null @@ -1,515 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007,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_flowgraph.h> -#include <gr_io_signature.h> -#include <stdexcept> -#include <sstream> -#include <iterator> - -#define GR_FLOWGRAPH_DEBUG 0 - -gr_edge::~gr_edge() -{ -} - -gr_flowgraph_sptr gr_make_flowgraph() -{ - return gr_flowgraph_sptr(new gr_flowgraph()); -} - -gr_flowgraph::gr_flowgraph() -{ -} - -gr_flowgraph::~gr_flowgraph() -{ -} - -// FIXME: move to libgruel as a utility function -template<class T> -static -std::vector<T> -unique_vector(std::vector<T> v) -{ - std::vector<T> result; - std::insert_iterator<std::vector<T> > inserter(result, result.begin()); - - sort(v.begin(), v.end()); - unique_copy(v.begin(), v.end(), inserter); - return result; -} - -void -gr_flowgraph::connect(const gr_endpoint &src, const gr_endpoint &dst) -{ - check_valid_port(src.block()->output_signature(), src.port()); - check_valid_port(dst.block()->input_signature(), dst.port()); - check_dst_not_used(dst); - check_type_match(src, dst); - - // All ist klar, Herr Kommisar - d_edges.push_back(gr_edge(src,dst)); -} - -void -gr_flowgraph::disconnect(const gr_endpoint &src, const gr_endpoint &dst) -{ - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { - if (src == p->src() && dst == p->dst()) { - d_edges.erase(p); - return; - } - } - - std::stringstream msg; - msg << "cannot disconnect edge " << gr_edge(src, dst) << ", not found"; - throw std::invalid_argument(msg.str()); -} - -void -gr_flowgraph::validate() -{ - d_blocks = calc_used_blocks(); - - for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { - std::vector<int> used_ports; - int ninputs, noutputs; - - if (GR_FLOWGRAPH_DEBUG) - std::cout << "Validating block: " << (*p) << std::endl; - - used_ports = calc_used_ports(*p, true); // inputs - ninputs = used_ports.size(); - check_contiguity(*p, used_ports, true); // inputs - - used_ports = calc_used_ports(*p, false); // outputs - noutputs = used_ports.size(); - check_contiguity(*p, used_ports, false); // outputs - - if (!((*p)->check_topology(ninputs, noutputs))) { - std::stringstream msg; - msg << "check topology failed on " << (*p) - << " using ninputs=" << ninputs - << ", noutputs=" << noutputs; - throw std::runtime_error(msg.str()); - } - } -} - -void -gr_flowgraph::clear() -{ - // Boost shared pointers will deallocate as needed - d_blocks.clear(); - d_edges.clear(); -} - -void -gr_flowgraph::check_valid_port(gr_io_signature_sptr sig, int port) -{ - std::stringstream msg; - - if (port < 0) { - msg << "negative port number " << port << " is invalid"; - throw std::invalid_argument(msg.str()); - } - - int max = sig->max_streams(); - if (max != gr_io_signature::IO_INFINITE && port >= max) { - msg << "port number " << port << " exceeds max of "; - if (max == 0) - msg << "(none)"; - else - msg << max-1; - throw std::invalid_argument(msg.str()); - } -} - -void -gr_flowgraph::check_valid_port(const gr_msg_endpoint &e) -{ - if (GR_FLOWGRAPH_DEBUG) - std::cout << "check_valid_port( " << e.block() << ", " << e.port() << ")\n"; - - if(!e.block()->has_msg_port(e.port())) - throw std::invalid_argument("invalid msg port in connect() or disconnect()"); -} - -void -gr_flowgraph::check_dst_not_used(const gr_endpoint &dst) -{ - // A destination is in use if it is already on the edge list - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) - if (p->dst() == dst) { - std::stringstream msg; - msg << "destination already in use by edge " << (*p); - throw std::invalid_argument(msg.str()); - } -} - -void -gr_flowgraph::check_type_match(const gr_endpoint &src, const gr_endpoint &dst) -{ - int src_size = src.block()->output_signature()->sizeof_stream_item(src.port()); - int dst_size = dst.block()->input_signature()->sizeof_stream_item(dst.port()); - - if (src_size != dst_size) { - std::stringstream msg; - msg << "itemsize mismatch: " << src << " using " << src_size - << ", " << dst << " using " << dst_size; - throw std::invalid_argument(msg.str()); - } -} - -gr_basic_block_vector_t -gr_flowgraph::calc_used_blocks() -{ - gr_basic_block_vector_t tmp; - - // make sure free standing message blocks are included - for (gr_msg_edge_viter_t p = d_msg_edges.begin(); p != d_msg_edges.end(); p++) { -// for now only blocks receiving messages get a thread context - uncomment to allow senders to also obtain one -// tmp.push_back(p->src().block()); - tmp.push_back(p->dst().block()); - } - - // Collect all blocks in the edge list - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { - tmp.push_back(p->src().block()); - tmp.push_back(p->dst().block()); - } - - return unique_vector<gr_basic_block_sptr>(tmp); -} - -std::vector<int> -gr_flowgraph::calc_used_ports(gr_basic_block_sptr block, bool check_inputs) -{ - std::vector<int> tmp; - - // Collect all seen ports - gr_edge_vector_t edges = calc_connections(block, check_inputs); - for (gr_edge_viter_t p = edges.begin(); p != edges.end(); p++) { - if (check_inputs == true) - tmp.push_back(p->dst().port()); - else - tmp.push_back(p->src().port()); - } - - return unique_vector<int>(tmp); -} - -gr_edge_vector_t -gr_flowgraph::calc_connections(gr_basic_block_sptr block, bool check_inputs) -{ - gr_edge_vector_t result; - - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { - if (check_inputs) { - if (p->dst().block() == block) - result.push_back(*p); - } - else { - if (p->src().block() == block) - result.push_back(*p); - } - } - - return result; // assumes no duplicates -} - -void -gr_flowgraph::check_contiguity(gr_basic_block_sptr block, - const std::vector<int> &used_ports, - bool check_inputs) -{ - std::stringstream msg; - - gr_io_signature_sptr sig = - check_inputs ? block->input_signature() : block->output_signature(); - - int nports = used_ports.size(); - int min_ports = sig->min_streams(); - int max_ports = sig->max_streams(); - - if (nports == 0 && min_ports == 0) - return; - - if (nports < min_ports) { - msg << block << ": insufficient connected " - << (check_inputs ? "input ports " : "output ports ") - << "(" << min_ports << " needed, " << nports << " connected)"; - throw std::runtime_error(msg.str()); - } - - if (nports > max_ports && max_ports != gr_io_signature::IO_INFINITE) { - msg << block << ": too many connected " - << (check_inputs ? "input ports " : "output ports ") - << "(" << max_ports << " allowed, " << nports << " connected)"; - throw std::runtime_error(msg.str()); - } - - if (used_ports[nports-1]+1 != nports) { - for (int i = 0; i < nports; i++) { - if (used_ports[i] != i) { - msg << block << ": missing connection " - << (check_inputs ? "to input port " : "from output port ") - << i; - throw std::runtime_error(msg.str()); - } - } - } -} - -gr_basic_block_vector_t -gr_flowgraph::calc_downstream_blocks(gr_basic_block_sptr block, int port) -{ - gr_basic_block_vector_t tmp; - - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) - if (p->src() == gr_endpoint(block, port)) - tmp.push_back(p->dst().block()); - - return unique_vector<gr_basic_block_sptr>(tmp); -} - -gr_basic_block_vector_t -gr_flowgraph::calc_downstream_blocks(gr_basic_block_sptr block) -{ - gr_basic_block_vector_t tmp; - - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) - if (p->src().block() == block) - tmp.push_back(p->dst().block()); - - return unique_vector<gr_basic_block_sptr>(tmp); -} - -gr_edge_vector_t -gr_flowgraph::calc_upstream_edges(gr_basic_block_sptr block) -{ - gr_edge_vector_t result; - - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) - if (p->dst().block() == block) - result.push_back(*p); - - return result; // Assume no duplicates -} - -bool -gr_flowgraph::has_block_p(gr_basic_block_sptr block) -{ - gr_basic_block_viter_t result; - result = std::find(d_blocks.begin(), d_blocks.end(), block); - return (result != d_blocks.end()); -} - -gr_edge -gr_flowgraph::calc_upstream_edge(gr_basic_block_sptr block, int port) -{ - gr_edge result; - - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { - if (p->dst() == gr_endpoint(block, port)) { - result = (*p); - break; - } - } - - return result; -} - -std::vector<gr_basic_block_vector_t> -gr_flowgraph::partition() -{ - std::vector<gr_basic_block_vector_t> result; - gr_basic_block_vector_t blocks = calc_used_blocks(); - gr_basic_block_vector_t graph; - - while (blocks.size() > 0) { - graph = calc_reachable_blocks(blocks[0], blocks); - assert(graph.size()); - result.push_back(topological_sort(graph)); - - for (gr_basic_block_viter_t p = graph.begin(); p != graph.end(); p++) - blocks.erase(find(blocks.begin(), blocks.end(), *p)); - } - - return result; -} - -gr_basic_block_vector_t -gr_flowgraph::calc_reachable_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks) -{ - gr_basic_block_vector_t result; - - // Mark all blocks as unvisited - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) - (*p)->set_color(gr_basic_block::WHITE); - - // Recursively mark all reachable blocks - reachable_dfs_visit(block, blocks); - - // Collect all the blocks that have been visited - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) - if ((*p)->color() == gr_basic_block::BLACK) - result.push_back(*p); - - return result; -} - -// Recursively mark all reachable blocks from given block and block list -void -gr_flowgraph::reachable_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks) -{ - // Mark the current one as visited - block->set_color(gr_basic_block::BLACK); - - // Recurse into adjacent vertices - gr_basic_block_vector_t adjacent = calc_adjacent_blocks(block, blocks); - - for (gr_basic_block_viter_t p = adjacent.begin(); p != adjacent.end(); p++) - if ((*p)->color() == gr_basic_block::WHITE) - reachable_dfs_visit(*p, blocks); -} - -// Return a list of block adjacent to a given block along any edge -gr_basic_block_vector_t -gr_flowgraph::calc_adjacent_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks) -{ - gr_basic_block_vector_t tmp; - - // Find any blocks that are inputs or outputs - for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { - if (p->src().block() == block) - tmp.push_back(p->dst().block()); - if (p->dst().block() == block) - tmp.push_back(p->src().block()); - } - - return unique_vector<gr_basic_block_sptr>(tmp); -} - -gr_basic_block_vector_t -gr_flowgraph::topological_sort(gr_basic_block_vector_t &blocks) -{ - gr_basic_block_vector_t tmp; - gr_basic_block_vector_t result; - tmp = sort_sources_first(blocks); - - // Start 'em all white - for (gr_basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) - (*p)->set_color(gr_basic_block::WHITE); - - for (gr_basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) { - if ((*p)->color() == gr_basic_block::WHITE) - topological_dfs_visit(*p, result); - } - - reverse(result.begin(), result.end()); - return result; -} - -gr_basic_block_vector_t -gr_flowgraph::sort_sources_first(gr_basic_block_vector_t &blocks) -{ - gr_basic_block_vector_t sources, nonsources, result; - - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { - if (source_p(*p)) - sources.push_back(*p); - else - nonsources.push_back(*p); - } - - for (gr_basic_block_viter_t p = sources.begin(); p != sources.end(); p++) - result.push_back(*p); - - for (gr_basic_block_viter_t p = nonsources.begin(); p != nonsources.end(); p++) - result.push_back(*p); - - return result; -} - -bool -gr_flowgraph::source_p(gr_basic_block_sptr block) -{ - return (calc_upstream_edges(block).size() == 0); -} - -void -gr_flowgraph::topological_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &output) -{ - block->set_color(gr_basic_block::GREY); - gr_basic_block_vector_t blocks(calc_downstream_blocks(block)); - - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { - switch ((*p)->color()) { - case gr_basic_block::WHITE: - topological_dfs_visit(*p, output); - break; - - case gr_basic_block::GREY: - throw std::runtime_error("flow graph has loops!"); - - case gr_basic_block::BLACK: - continue; - - default: - throw std::runtime_error("invalid color on block!"); - } - } - - block->set_color(gr_basic_block::BLACK); - output.push_back(block); -} - -void gr_flowgraph::connect(const gr_msg_endpoint &src, const gr_msg_endpoint &dst){ - check_valid_port(src); - check_valid_port(dst); - for (gr_msg_edge_viter_t p = d_msg_edges.begin(); p != d_msg_edges.end(); p++) { - if(p->src() == src && p->dst() == dst){ - throw std::runtime_error("connect called on already connected edge!"); - } - } - d_msg_edges.push_back(gr_msg_edge(src,dst)); -} - -void gr_flowgraph::disconnect(const gr_msg_endpoint &src, const gr_msg_endpoint &dst){ - check_valid_port(src); - check_valid_port(dst); - for (gr_msg_edge_viter_t p = d_msg_edges.begin(); p != d_msg_edges.end(); p++) { - if(p->src() == src && p->dst() == dst){ - d_msg_edges.erase(p); - return; - } - } - throw std::runtime_error("disconnect called on non-connected edge!"); -} - - diff --git a/gnuradio-core/src/lib/runtime/gr_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flowgraph.h deleted file mode 100644 index 40e9dc3675..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_flowgraph.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007 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_FLOWGRAPH_H -#define INCLUDED_GR_FLOWGRAPH_H - -#include <gr_core_api.h> -#include <gr_basic_block.h> -#include <iostream> - -/*! - * \brief Class representing a specific input or output graph endpoint - * \ingroup internal - */ -class GR_CORE_API gr_endpoint -{ -private: - gr_basic_block_sptr d_basic_block; - int d_port; - -public: - gr_endpoint() : d_basic_block(), d_port(0) { } - gr_endpoint(gr_basic_block_sptr block, int port) { d_basic_block = block; d_port = port; } - gr_basic_block_sptr block() const { return d_basic_block; } - int port() const { return d_port; } - - bool operator==(const gr_endpoint &other) const; -}; - -inline bool gr_endpoint::operator==(const gr_endpoint &other) const -{ - return (d_basic_block == other.d_basic_block && - d_port == other.d_port); -} - -class GR_CORE_API gr_msg_endpoint -{ -private: - gr_basic_block_sptr d_basic_block; - pmt::pmt_t d_port; - bool d_is_hier; -public: - gr_msg_endpoint() : d_basic_block(), d_port(pmt::PMT_NIL) { } - gr_msg_endpoint(gr_basic_block_sptr block, pmt::pmt_t port, bool is_hier=false){ d_basic_block = block; d_port = port; d_is_hier = is_hier;} - gr_basic_block_sptr block() const { return d_basic_block; } - pmt::pmt_t port() const { return d_port; } - bool is_hier() const { return d_is_hier; } - void set_hier(bool h) { d_is_hier = h; } - - bool operator==(const gr_msg_endpoint &other) const; - -}; - -inline bool gr_msg_endpoint::operator==(const gr_msg_endpoint &other) const -{ - return (d_basic_block == other.d_basic_block && - pmt::equal(d_port, other.d_port)); -} - - -// Hold vectors of gr_endpoint objects -typedef std::vector<gr_endpoint> gr_endpoint_vector_t; -typedef std::vector<gr_endpoint>::iterator gr_endpoint_viter_t; - -/*! - *\brief Class representing a connection between to graph endpoints - * - */ -class GR_CORE_API gr_edge -{ -public: - gr_edge() : d_src(), d_dst() { }; - gr_edge(const gr_endpoint &src, const gr_endpoint &dst) : d_src(src), d_dst(dst) { } - ~gr_edge(); - - const gr_endpoint &src() const { return d_src; } - const gr_endpoint &dst() const { return d_dst; } - -private: - gr_endpoint d_src; - gr_endpoint d_dst; -}; - - -// Hold vectors of gr_edge objects -typedef std::vector<gr_edge> gr_edge_vector_t; -typedef std::vector<gr_edge>::iterator gr_edge_viter_t; - - -/*! - *\brief Class representing a msg connection between to graph msg endpoints - * - */ -class GR_CORE_API gr_msg_edge -{ -public: - gr_msg_edge() : d_src(), d_dst() { }; - gr_msg_edge(const gr_msg_endpoint &src, const gr_msg_endpoint &dst) : d_src(src), d_dst(dst) { } - ~gr_msg_edge() {} - - const gr_msg_endpoint &src() const { return d_src; } - const gr_msg_endpoint &dst() const { return d_dst; } - -private: - gr_msg_endpoint d_src; - gr_msg_endpoint d_dst; -}; - -// Hold vectors of gr_edge objects -typedef std::vector<gr_msg_edge> gr_msg_edge_vector_t; -typedef std::vector<gr_msg_edge>::iterator gr_msg_edge_viter_t; - -// Create a shared pointer to a heap allocated flowgraph -// (types defined in gr_runtime_types.h) -GR_CORE_API gr_flowgraph_sptr gr_make_flowgraph(); - -/*! - * \brief Class representing a directed, acyclic graph of basic blocks - * \ingroup internal - */ -class GR_CORE_API gr_flowgraph -{ -public: - friend GR_CORE_API gr_flowgraph_sptr gr_make_flowgraph(); - - // Destruct an arbitrary flowgraph - ~gr_flowgraph(); - - // Connect two endpoints - void connect(const gr_endpoint &src, const gr_endpoint &dst); - - // Disconnect two endpoints - void disconnect(const gr_endpoint &src, const gr_endpoint &dst); - - // Connect an output port to an input port (convenience) - void connect(gr_basic_block_sptr src_block, int src_port, - gr_basic_block_sptr dst_block, int dst_port); - - // Disconnect an input port from an output port (convenience) - void disconnect(gr_basic_block_sptr src_block, int src_port, - gr_basic_block_sptr dst_block, int dst_port); - - // Connect two msg endpoints - void connect(const gr_msg_endpoint &src, const gr_msg_endpoint &dst); - - // Disconnect two msg endpoints - void disconnect(const gr_msg_endpoint &src, const gr_msg_endpoint &dst); - - // Validate connectivity, raise exception if invalid - void validate(); - - // Clear existing flowgraph - void clear(); - - // Return vector of edges - const gr_edge_vector_t &edges() const { return d_edges; } - - // Return vector of msg edges - const gr_msg_edge_vector_t &msg_edges() const { return d_msg_edges; } - - // Return vector of connected blocks - gr_basic_block_vector_t calc_used_blocks(); - - // Return toplogically sorted vector of blocks. All the sources come first. - gr_basic_block_vector_t topological_sort(gr_basic_block_vector_t &blocks); - - // Return vector of vectors of disjointly connected blocks, topologically - // sorted. - std::vector<gr_basic_block_vector_t> partition(); - -protected: - gr_basic_block_vector_t d_blocks; - gr_edge_vector_t d_edges; - gr_msg_edge_vector_t d_msg_edges; - - gr_flowgraph(); - std::vector<int> calc_used_ports(gr_basic_block_sptr block, bool check_inputs); - gr_basic_block_vector_t calc_downstream_blocks(gr_basic_block_sptr block, int port); - gr_edge_vector_t calc_upstream_edges(gr_basic_block_sptr block); - bool has_block_p(gr_basic_block_sptr block); - gr_edge calc_upstream_edge(gr_basic_block_sptr block, int port); - -private: - - void check_valid_port(gr_io_signature_sptr sig, int port); - void check_valid_port(const gr_msg_endpoint &e); - void check_dst_not_used(const gr_endpoint &dst); - void check_type_match(const gr_endpoint &src, const gr_endpoint &dst); - gr_edge_vector_t calc_connections(gr_basic_block_sptr block, bool check_inputs); // false=use outputs - void check_contiguity(gr_basic_block_sptr block, const std::vector<int> &used_ports, bool check_inputs); - - gr_basic_block_vector_t calc_downstream_blocks(gr_basic_block_sptr block); - gr_basic_block_vector_t calc_reachable_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks); - void reachable_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks); - gr_basic_block_vector_t calc_adjacent_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks); - gr_basic_block_vector_t sort_sources_first(gr_basic_block_vector_t &blocks); - bool source_p(gr_basic_block_sptr block); - void topological_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &output); -}; - -// Convenience functions -inline -void gr_flowgraph::connect(gr_basic_block_sptr src_block, int src_port, - gr_basic_block_sptr dst_block, int dst_port) -{ - connect(gr_endpoint(src_block, src_port), - gr_endpoint(dst_block, dst_port)); -} - -inline -void gr_flowgraph::disconnect(gr_basic_block_sptr src_block, int src_port, - gr_basic_block_sptr dst_block, int dst_port) -{ - disconnect(gr_endpoint(src_block, src_port), - gr_endpoint(dst_block, dst_port)); -} - -inline std::ostream& -operator <<(std::ostream &os, const gr_endpoint endp) -{ - os << endp.block()->alias() << ":" << endp.port(); - return os; -} - -inline std::ostream& -operator <<(std::ostream &os, const gr_edge edge) -{ - os << edge.src() << "->" << edge.dst(); - return os; -} - -#endif /* INCLUDED_GR_FLOWGRAPH_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.cc b/gnuradio-core/src/lib/runtime/gr_hier_block2.cc deleted file mode 100644 index 9e924fdaf5..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_hier_block2.cc +++ /dev/null @@ -1,153 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007,2008 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_hier_block2.h> -#include <gr_io_signature.h> -#include <gr_hier_block2_detail.h> -#include <iostream> - -#define GR_HIER_BLOCK2_DEBUG 0 - - -gr_hier_block2_sptr -gr_make_hier_block2(const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature) -{ - return gnuradio::get_initial_sptr(new gr_hier_block2(name, input_signature, output_signature)); -} - -gr_hier_block2::gr_hier_block2(const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature) - : gr_basic_block(name, input_signature, output_signature), - d_detail(new gr_hier_block2_detail(this)), - hier_message_ports_in(pmt::PMT_NIL), - hier_message_ports_out(pmt::PMT_NIL) -{ - // This bit of magic ensures that self() works in the constructors of derived classes. - gnuradio::detail::sptr_magic::create_and_stash_initial_sptr(this); -} - -gr_hier_block2::~gr_hier_block2() -{ - delete d_detail; -} - -gr_hier_block2::opaque_self -gr_hier_block2::self() -{ - return shared_from_this(); -} - -gr_hier_block2_sptr -gr_hier_block2::to_hier_block2() -{ - return cast_to_hier_block2_sptr(shared_from_this()); -} - -void -gr_hier_block2::connect(gr_basic_block_sptr block) -{ - d_detail->connect(block); -} - -void -gr_hier_block2::connect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port) -{ - d_detail->connect(src, src_port, dst, dst_port); -} - -void -gr_hier_block2::msg_connect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport) -{ - if(!pmt::is_symbol(srcport)){throw std::runtime_error("bad port id"); } - d_detail->msg_connect(src, srcport, dst, dstport); -} - -void -gr_hier_block2::msg_connect(gr_basic_block_sptr src, std::string srcport, - gr_basic_block_sptr dst, std::string dstport) -{ - d_detail->msg_connect(src, pmt::mp(srcport), dst, pmt::mp(dstport)); -} - -void -gr_hier_block2::msg_disconnect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport) -{ - if(!pmt::is_symbol(srcport)){throw std::runtime_error("bad port id"); } - d_detail->msg_disconnect(src, srcport, dst, dstport); -} - -void -gr_hier_block2::msg_disconnect(gr_basic_block_sptr src, std::string srcport, - gr_basic_block_sptr dst, std::string dstport) -{ - d_detail->msg_disconnect(src, pmt::mp(srcport), dst, pmt::mp(dstport)); -} - -void -gr_hier_block2::disconnect(gr_basic_block_sptr block) -{ - d_detail->disconnect(block); -} - -void -gr_hier_block2::disconnect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port) -{ - d_detail->disconnect(src, src_port, dst, dst_port); -} - -void -gr_hier_block2::disconnect_all() -{ - d_detail->disconnect_all(); -} - -void -gr_hier_block2::lock() -{ - d_detail->lock(); -} - -void -gr_hier_block2::unlock() -{ - d_detail->unlock(); -} - - -gr_flat_flowgraph_sptr -gr_hier_block2::flatten() const -{ - gr_flat_flowgraph_sptr new_ffg = gr_make_flat_flowgraph(); - d_detail->flatten_aux(new_ffg); - return new_ffg; -} diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.h b/gnuradio-core/src/lib/runtime/gr_hier_block2.h deleted file mode 100644 index aa6b180cac..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_hier_block2.h +++ /dev/null @@ -1,208 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007,2008,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_HIER_BLOCK2_H -#define INCLUDED_GR_HIER_BLOCK2_H - -#include <gr_core_api.h> -#include <gr_basic_block.h> - -/*! - * \brief public constructor for gr_hier_block2 - - */ -GR_CORE_API gr_hier_block2_sptr gr_make_hier_block2(const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - -class gr_hier_block2_detail; - -/*! - * \brief Hierarchical container class for gr_block's and gr_hier_block2's - * \ingroup container_blk - * \ingroup base_blk - * - */ -class GR_CORE_API gr_hier_block2 : public gr_basic_block -{ -private: - friend class gr_hier_block2_detail; - friend GR_CORE_API gr_hier_block2_sptr gr_make_hier_block2(const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - - /*! - * \brief Private implementation details of gr_hier_block2 - */ - gr_hier_block2_detail *d_detail; - -protected: - gr_hier_block2 (void){} //allows pure virtual interface sub-classes - gr_hier_block2(const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - -public: - virtual ~gr_hier_block2(); - - /*! - * \brief typedef for object returned from self(). - * - * This type is only guaranteed to be passable to connect and disconnect. - * No other assumptions should be made about it. - */ - typedef gr_basic_block_sptr opaque_self; - - /*! - * \brief Return an object, representing the current block, which can be passed to connect. - * - * The returned object may only be used as an argument to connect or disconnect. - * Any other use of self() results in unspecified (erroneous) behavior. - */ - opaque_self self(); - - /*! - * \brief Add a stand-alone (possibly hierarchical) block to internal graph - * - * This adds a gr-block or hierarchical block to the internal graph - * without wiring it to anything else. - */ - void connect(gr_basic_block_sptr block); - - /*! - * \brief Add gr-blocks or hierarchical blocks to internal graph and wire together - * - * This adds (if not done earlier by another connect) a pair of gr-blocks or - * hierarchical blocks to the internal flowgraph, and wires the specified output - * port to the specified input port. - */ - void connect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port); - - /*! - * \brief Add gr-blocks or hierarchical blocks to internal graph and wire together - * - * This adds (if not done earlier by another connect) a pair of gr-blocks or - * hierarchical blocks to the internal message port subscription - */ - void msg_connect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport); - void msg_connect(gr_basic_block_sptr src, std::string srcport, - gr_basic_block_sptr dst, std::string dstport); - void msg_disconnect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport); - void msg_disconnect(gr_basic_block_sptr src, std::string srcport, - gr_basic_block_sptr dst, std::string dstport); - - /*! - * \brief Remove a gr-block or hierarchical block from the internal flowgraph. - * - * This removes a gr-block or hierarchical block from the internal flowgraph, - * disconnecting it from other blocks as needed. - * - */ - void disconnect(gr_basic_block_sptr block); - - /*! - * \brief Disconnect a pair of gr-blocks or hierarchical blocks in internal - * flowgraph. - * - * This disconnects the specified input port from the specified output port - * of a pair of gr-blocks or hierarchical blocks. - */ - void disconnect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port); - - /*! - * \brief Disconnect all connections in the internal flowgraph. - * - * This call removes all output port to input port connections in the internal - * flowgraph. - */ - void disconnect_all(); - - /*! - * Lock a flowgraph in preparation for reconfiguration. When an equal - * number of calls to lock() and unlock() have occurred, the flowgraph - * will be reconfigured. - * - * N.B. lock() and unlock() may not be called from a flowgraph thread - * (E.g., gr_block::work method) or deadlock will occur when - * reconfiguration happens. - */ - virtual void lock(); - - /*! - * Unlock a flowgraph in preparation for reconfiguration. When an equal - * number of calls to lock() and unlock() have occurred, the flowgraph - * will be reconfigured. - * - * N.B. lock() and unlock() may not be called from a flowgraph thread - * (E.g., gr_block::work method) or deadlock will occur when - * reconfiguration happens. - */ - virtual void unlock(); - - // This is a public method for ease of code organization, but should be - // ignored by the user. - gr_flat_flowgraph_sptr flatten() const; - - gr_hier_block2_sptr to_hier_block2(); // Needed for Python type coercion - - bool has_msg_port(pmt::pmt_t which_port){ - return message_port_is_hier(which_port) || gr_basic_block::has_msg_port(which_port); - } - - bool message_port_is_hier(pmt::pmt_t port_id){ - return message_port_is_hier_in(port_id) || message_port_is_hier_out(port_id); - } - bool message_port_is_hier_in(pmt::pmt_t port_id){ - return pmt::list_has(hier_message_ports_in, port_id); - } - bool message_port_is_hier_out(pmt::pmt_t port_id){ - return pmt::list_has(hier_message_ports_out, port_id); - } - - pmt::pmt_t hier_message_ports_in; - pmt::pmt_t hier_message_ports_out; - - void message_port_register_hier_in(pmt::pmt_t port_id){ - if(pmt::list_has(hier_message_ports_in, port_id)) - throw std::invalid_argument("hier msg in port by this name already registered"); - if(msg_queue.find(port_id) != msg_queue.end()) - throw std::invalid_argument("block already has a primitive input port by this name"); - hier_message_ports_in = pmt::list_add(hier_message_ports_in, port_id); - } - void message_port_register_hier_out(pmt::pmt_t port_id){ - if(pmt::list_has(hier_message_ports_out, port_id)) - throw std::invalid_argument("hier msg out port by this name already registered"); - if(pmt::dict_has_key(message_subscribers, port_id)) - throw std::invalid_argument("block already has a primitive output port by this name"); - hier_message_ports_out = pmt::list_add(hier_message_ports_out, port_id); - } - -}; - -inline gr_hier_block2_sptr cast_to_hier_block2_sptr(gr_basic_block_sptr block) { - return boost::dynamic_pointer_cast<gr_hier_block2, gr_basic_block>(block); -} - -#endif /* INCLUDED_GR_HIER_BLOCK2_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.i b/gnuradio-core/src/lib/runtime/gr_hier_block2.i deleted file mode 100644 index a857394ca7..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_hier_block2.i +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005,2006,2007 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_basic_block.i> - -class gr_hier_block2; -typedef boost::shared_ptr<gr_hier_block2> gr_hier_block2_sptr; -%template(gr_hier_block2_sptr) boost::shared_ptr<gr_hier_block2>; - -// Hack to have a Python shim implementation of gr.hier_block2 -// that instantiates one of these and passes through calls -%rename(hier_block2_swig) gr_make_hier_block2; -gr_hier_block2_sptr gr_make_hier_block2(const std::string name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature) - throw (std::runtime_error); - -// Rename connect and disconnect so that we can more easily build a -// better interface in scripting land. -%rename(primitive_connect) gr_hier_block2::connect; -%rename(primitive_disconnect) gr_hier_block2::disconnect; -%rename(primitive_msg_connect) gr_hier_block2::msg_connect; -%rename(primitive_msg_disconnect) gr_hier_block2::msg_disconnect; -%rename(primitive_message_port_register_hier_in) gr_hier_block2::message_port_register_hier_in; -%rename(primitive_message_port_register_hier_out) gr_hier_block2::message_port_register_hier_out; - -class gr_hier_block2 : public gr_basic_block -{ -private: - gr_hier_block2(const std::string name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - -public: - ~gr_hier_block2 (); - - void connect(gr_basic_block_sptr block) - throw (std::invalid_argument); - void connect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port) - throw (std::invalid_argument); - void msg_connect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport) - throw (std::runtime_error); - void msg_connect(gr_basic_block_sptr src, std::string srcport, - gr_basic_block_sptr dst, std::string dstport) - throw (std::runtime_error); - void msg_disconnect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport) - throw (std::runtime_error); - void msg_disconnect(gr_basic_block_sptr src, std::string srcport, - gr_basic_block_sptr dst, std::string dstport) - throw (std::runtime_error); - - void disconnect(gr_basic_block_sptr block) - throw (std::invalid_argument); - void disconnect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port) - throw (std::invalid_argument); - void disconnect_all(); - void lock(); - void unlock(); - - void message_port_register_hier_in(pmt::pmt_t port_id); - void message_port_register_hier_out(pmt::pmt_t port_id); - - - gr_hier_block2_sptr to_hier_block2(); // Needed for Python type coercion -}; diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc deleted file mode 100644 index c8564f6698..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc +++ /dev/null @@ -1,641 +0,0 @@ -/* - * Copyright 2006,2007,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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_hier_block2_detail.h> -#include <gr_io_signature.h> -#include <gr_prefs.h> -#include <stdexcept> -#include <sstream> -#include <boost/format.hpp> - -#define GR_HIER_BLOCK2_DETAIL_DEBUG 0 - -gr_hier_block2_detail::gr_hier_block2_detail(gr_hier_block2 *owner) : - d_owner(owner), - d_parent_detail(0), - d_fg(gr_make_flowgraph()) -{ - int min_inputs = owner->input_signature()->min_streams(); - int max_inputs = owner->input_signature()->max_streams(); - int min_outputs = owner->output_signature()->min_streams(); - int max_outputs = owner->output_signature()->max_streams(); - - if (max_inputs == gr_io_signature::IO_INFINITE || - max_outputs == gr_io_signature::IO_INFINITE || - (min_inputs != max_inputs) ||(min_outputs != max_outputs) ) { - std::stringstream msg; - msg << "Hierarchical blocks do not yet support arbitrary or" - << " variable numbers of inputs or outputs (" << d_owner->name() << ")"; - throw std::runtime_error(msg.str()); - } - - d_inputs = std::vector<gr_endpoint_vector_t>(max_inputs); - d_outputs = gr_endpoint_vector_t(max_outputs); -} - - -gr_hier_block2_detail::~gr_hier_block2_detail() -{ - d_owner = 0; // Don't use delete, we didn't allocate -} - -void -gr_hier_block2_detail::connect(gr_basic_block_sptr block) -{ - std::stringstream msg; - - // Check if duplicate - if (std::find(d_blocks.begin(), d_blocks.end(), block) != d_blocks.end()) { - msg << "Block " << block << " already connected."; - throw std::invalid_argument(msg.str()); - } - - // Check if has inputs or outputs - if (block->input_signature()->max_streams() != 0 || - block->output_signature()->max_streams() != 0) { - msg << "Block " << block << " must not have any input or output ports"; - throw std::invalid_argument(msg.str()); - } - - gr_hier_block2_sptr hblock(cast_to_hier_block2_sptr(block)); - - if (hblock && hblock.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "connect: block is hierarchical, setting parent to " << this << std::endl; - hblock->d_detail->d_parent_detail = this; - } - - d_blocks.push_back(block); -} - -void -gr_hier_block2_detail::connect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port) -{ - std::stringstream msg; - - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "connecting: " << gr_endpoint(src, src_port) - << " -> " << gr_endpoint(dst, dst_port) << std::endl; - - if (src.get() == dst.get()) - throw std::invalid_argument("connect: src and destination blocks cannot be the same"); - - gr_hier_block2_sptr src_block(cast_to_hier_block2_sptr(src)); - gr_hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst)); - - if (src_block && src.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "connect: src is hierarchical, setting parent to " << this << std::endl; - src_block->d_detail->d_parent_detail = this; - } - - if (dst_block && dst.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "connect: dst is hierarchical, setting parent to " << this << std::endl; - dst_block->d_detail->d_parent_detail = this; - } - - // Connections to block inputs or outputs - int max_port; - if (src.get() == d_owner) { - max_port = src->input_signature()->max_streams(); - if ((max_port != -1 && (src_port >= max_port)) || src_port < 0) { - msg << "source port " << src_port << " out of range for " << src; - throw std::invalid_argument(msg.str()); - } - - return connect_input(src_port, dst_port, dst); - } - - if (dst.get() == d_owner) { - max_port = dst->output_signature()->max_streams(); - if ((max_port != -1 && (dst_port >= max_port)) || dst_port < 0) { - msg << "destination port " << dst_port << " out of range for " << dst; - throw std::invalid_argument(msg.str()); - } - - return connect_output(dst_port, src_port, src); - } - - // Internal connections - d_fg->connect(src, src_port, dst, dst_port); - - // TODO: connects to NC -} - -void -gr_hier_block2_detail::msg_connect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport) -{ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "connecting message port..." << std::endl; - - // register the subscription -// this is done later... -// src->message_port_sub(srcport, pmt::cons(dst->alias_pmt(), dstport)); - - // add block uniquely to list to internal blocks - if (std::find(d_blocks.begin(), d_blocks.end(), dst) == d_blocks.end()){ - d_blocks.push_back(src); - d_blocks.push_back(dst); - } - - bool hier_out = (d_owner == src.get()) && src->message_port_is_hier_out(srcport);; - bool hier_in = (d_owner == dst.get()) && dst->message_port_is_hier_in(dstport); - - gr_hier_block2_sptr src_block(cast_to_hier_block2_sptr(src)); - gr_hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst)); - - if (src_block && src.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "connect: src is hierarchical, setting parent to " << this << std::endl; - src_block->d_detail->d_parent_detail = this; - } - - if (dst_block && dst.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "connect: dst is hierarchical, setting parent to " << this << std::endl; - dst_block->d_detail->d_parent_detail = this; - } - - // add edge for this message connection - if(GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << boost::format("connect( (%s, %s, %d), (%s, %s, %d) )\n") % - src % srcport % hier_out % - dst % dstport % hier_in; - d_fg->connect( gr_msg_endpoint(src, srcport, hier_out), gr_msg_endpoint(dst, dstport, hier_in)); -} - -void -gr_hier_block2_detail::msg_disconnect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport) -{ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "disconnecting message port..." << std::endl; - - // unregister the subscription - if already subscribed - src->message_port_unsub(srcport, pmt::cons(dst->alias_pmt(), dstport)); - - // remove edge for this message connection - bool hier_out = (d_owner == src.get()) && src->message_port_is_hier_out(srcport);; - bool hier_in = (d_owner == dst.get()) && dst->message_port_is_hier_in(dstport); - d_fg->disconnect( gr_msg_endpoint(src, srcport, hier_out), gr_msg_endpoint(dst, dstport, hier_in)); -} - -void -gr_hier_block2_detail::disconnect(gr_basic_block_sptr block) -{ - // Check on singleton list - for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { - if (*p == block) { - d_blocks.erase(p); - - gr_hier_block2_sptr hblock(cast_to_hier_block2_sptr(block)); - if (block && block.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "disconnect: block is hierarchical, clearing parent" << std::endl; - hblock->d_detail->d_parent_detail = 0; - } - - return; - } - } - - // Otherwise find all edges containing block - gr_edge_vector_t edges, tmp = d_fg->edges(); - gr_edge_vector_t::iterator p; - for (p = tmp.begin(); p != tmp.end(); p++) { - if ((*p).src().block() == block || (*p).dst().block() == block) { - edges.push_back(*p); - - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "disconnect: block found in edge " << (*p) << std::endl; - } - } - - if (edges.size() == 0) { - std::stringstream msg; - msg << "cannot disconnect block " << block << ", not found"; - throw std::invalid_argument(msg.str()); - } - - for (p = edges.begin(); p != edges.end(); p++) { - disconnect((*p).src().block(), (*p).src().port(), - (*p).dst().block(), (*p).dst().port()); - } -} - -void -gr_hier_block2_detail::disconnect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port) -{ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "disconnecting: " << gr_endpoint(src, src_port) - << " -> " << gr_endpoint(dst, dst_port) << std::endl; - - if (src.get() == dst.get()) - throw std::invalid_argument("disconnect: source and destination blocks cannot be the same"); - - gr_hier_block2_sptr src_block(cast_to_hier_block2_sptr(src)); - gr_hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst)); - - if (src_block && src.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "disconnect: src is hierarchical, clearing parent" << std::endl; - src_block->d_detail->d_parent_detail = 0; - } - - if (dst_block && dst.get() != d_owner) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "disconnect: dst is hierarchical, clearing parent" << std::endl; - dst_block->d_detail->d_parent_detail = 0; - } - - if (src.get() == d_owner) - return disconnect_input(src_port, dst_port, dst); - - if (dst.get() == d_owner) - return disconnect_output(dst_port, src_port, src); - - // Internal connections - d_fg->disconnect(src, src_port, dst, dst_port); -} - -void -gr_hier_block2_detail::connect_input(int my_port, int port, gr_basic_block_sptr block) -{ - std::stringstream msg; - - if (my_port < 0 || my_port >= (signed)d_inputs.size()) { - msg << "input port " << my_port << " out of range for " << block; - throw std::invalid_argument(msg.str()); - } - - gr_endpoint_vector_t &endps = d_inputs[my_port]; - gr_endpoint endp(block, port); - - gr_endpoint_viter_t p = std::find(endps.begin(), endps.end(), endp); - if (p != endps.end()) { - msg << "external input port " << my_port << " already wired to " << endp; - throw std::invalid_argument(msg.str()); - } - - endps.push_back(endp); -} - -void -gr_hier_block2_detail::connect_output(int my_port, int port, gr_basic_block_sptr block) -{ - std::stringstream msg; - - if (my_port < 0 || my_port >= (signed)d_outputs.size()) { - msg << "output port " << my_port << " out of range for " << block; - throw std::invalid_argument(msg.str()); - } - - if (d_outputs[my_port].block()) { - msg << "external output port " << my_port << " already connected from " - << d_outputs[my_port]; - throw std::invalid_argument(msg.str()); - } - - d_outputs[my_port] = gr_endpoint(block, port); -} - -void -gr_hier_block2_detail::disconnect_input(int my_port, int port, gr_basic_block_sptr block) -{ - std::stringstream msg; - - if (my_port < 0 || my_port >= (signed)d_inputs.size()) { - msg << "input port number " << my_port << " out of range for " << block; - throw std::invalid_argument(msg.str()); - } - - gr_endpoint_vector_t &endps = d_inputs[my_port]; - gr_endpoint endp(block, port); - - gr_endpoint_viter_t p = std::find(endps.begin(), endps.end(), endp); - if (p == endps.end()) { - msg << "external input port " << my_port << " not connected to " << endp; - throw std::invalid_argument(msg.str()); - } - - endps.erase(p); -} - -void -gr_hier_block2_detail::disconnect_output(int my_port, int port, gr_basic_block_sptr block) -{ - std::stringstream msg; - - if (my_port < 0 || my_port >= (signed)d_outputs.size()) { - msg << "output port number " << my_port << " out of range for " << block; - throw std::invalid_argument(msg.str()); - } - - if (d_outputs[my_port].block() != block) { - msg << "block " << block << " not assigned to output " - << my_port << ", can't disconnect"; - throw std::invalid_argument(msg.str()); - } - - d_outputs[my_port] = gr_endpoint(); -} - -gr_endpoint_vector_t -gr_hier_block2_detail::resolve_port(int port, bool is_input) -{ - std::stringstream msg; - - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "Resolving port " << port << " as an " - << (is_input ? "input" : "output") - << " of " << d_owner->name() << std::endl; - - gr_endpoint_vector_t result; - - if (is_input) { - if (port < 0 || port >= (signed)d_inputs.size()) { - msg << "resolve_port: hierarchical block '" << d_owner->name() - << "': input " << port << " is out of range"; - throw std::runtime_error(msg.str()); - } - - if (d_inputs[port].empty()) { - msg << "resolve_port: hierarchical block '" << d_owner->name() - << "': input " << port << " is not connected internally"; - throw std::runtime_error(msg.str()); - } - - gr_endpoint_vector_t &endps = d_inputs[port]; - gr_endpoint_viter_t p; - for (p = endps.begin(); p != endps.end(); p++) { - gr_endpoint_vector_t tmp = resolve_endpoint(*p, true); - std::copy(tmp.begin(), tmp.end(), back_inserter(result)); - } - } - else { - if (port < 0 || port >= (signed)d_outputs.size()) { - msg << "resolve_port: hierarchical block '" << d_owner->name() - << "': output " << port << " is out of range"; - throw std::runtime_error(msg.str()); - } - - if (d_outputs[port] == gr_endpoint()) { - msg << "resolve_port: hierarchical block '" << d_owner->name() - << "': output " << port << " is not connected internally"; - throw std::runtime_error(msg.str()); - } - - result = resolve_endpoint(d_outputs[port], false); - } - - if (result.empty()) { - msg << "resolve_port: hierarchical block '" << d_owner->name() - << "': unable to resolve " - << (is_input ? "input port " : "output port ") - << port; - throw std::runtime_error(msg.str()); - } - - return result; -} - -void -gr_hier_block2_detail::disconnect_all() -{ - d_fg->clear(); - d_blocks.clear(); - d_inputs.clear(); - d_outputs.clear(); -} - -gr_endpoint_vector_t -gr_hier_block2_detail::resolve_endpoint(const gr_endpoint &endp, bool is_input) const -{ - std::stringstream msg; - gr_endpoint_vector_t result; - - // Check if endpoint is a leaf node - if (cast_to_block_sptr(endp.block())) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "Block " << endp.block() << " is a leaf node, returning." << std::endl; - result.push_back(endp); - return result; - } - - // Check if endpoint is a hierarchical block - gr_hier_block2_sptr hier_block2(cast_to_hier_block2_sptr(endp.block())); - if (hier_block2) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "Resolving endpoint " << endp << " as an " - << (is_input ? "input" : "output") - << ", recursing" << std::endl; - return hier_block2->d_detail->resolve_port(endp.port(), is_input); - } - - msg << "unable to resolve" << (is_input ? " input " : " output ") - << "endpoint " << endp; - throw std::runtime_error(msg.str()); -} - -void -gr_hier_block2_detail::flatten_aux(gr_flat_flowgraph_sptr sfg) const -{ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << " ** Flattening " << d_owner->name() << std::endl; - - // Add my edges to the flow graph, resolving references to actual endpoints - gr_edge_vector_t edges = d_fg->edges(); - gr_msg_edge_vector_t msg_edges = d_fg->msg_edges(); - gr_edge_viter_t p; - gr_msg_edge_viter_t q,u; - - // Only run setup_rpc if ControlPort config param is enabled. - bool ctrlport_on = gr_prefs::singleton()->get_bool("ControlPort", "on", false); - - // For every block (gr_block and gr_hier_block2), set up the RPC - // interface. - for(p = edges.begin(); p != edges.end(); p++) { - gr_basic_block_sptr b; - b = p->src().block(); - - if(ctrlport_on) { - if(!b->is_rpc_set()) { - b->setup_rpc(); - b->rpc_set(); - } - } - - b = p->dst().block(); - if(ctrlport_on) { - if(!b->is_rpc_set()) { - b->setup_rpc(); - b->rpc_set(); - } - } - } - - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "Flattening stream connections: " << std::endl; - - for (p = edges.begin(); p != edges.end(); p++) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "Flattening edge " << (*p) << std::endl; - - gr_endpoint_vector_t src_endps = resolve_endpoint(p->src(), false); - gr_endpoint_vector_t dst_endps = resolve_endpoint(p->dst(), true); - - gr_endpoint_viter_t s, d; - for (s = src_endps.begin(); s != src_endps.end(); s++) { - for (d = dst_endps.begin(); d != dst_endps.end(); d++) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << (*s) << "->" << (*d) << std::endl; - sfg->connect(*s, *d); - } - } - } - - // loop through flattening hierarchical connections - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "Flattening msg connections: " << std::endl; - - - std::vector<std::pair<gr_msg_endpoint, bool> > resolved_endpoints; - for(q = msg_edges.begin(); q != msg_edges.end(); q++) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << boost::format(" flattening edge ( %s, %s, %d) -> ( %s, %s, %d)\n") % q->src().block() % q->src().port() % q->src().is_hier() % q->dst().block() % q->dst().port() % q->dst().is_hier(); - - bool normal_connection = true; - - // resolve existing connections to hier ports - if(q->dst().is_hier()){ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << boost::format(" resolve hier output (%s, %s)") % q->dst().block() % q->dst().port() << std::endl; - sfg->replace_endpoint( q->dst(), q->src(), true ); - resolved_endpoints.push_back(std::pair<gr_msg_endpoint, bool>(q->dst(),true)); - normal_connection = false; - } - - if(q->src().is_hier()){ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << boost::format(" resolve hier input (%s, %s)") % q->src().block() % q->src().port() << std::endl; - sfg->replace_endpoint( q->src(), q->dst(), false ); - resolved_endpoints.push_back(std::pair<gr_msg_endpoint, bool>(q->src(),false)); - normal_connection = false; - } - - // propogate non hier connections through - if(normal_connection){ - sfg->connect( q->src(), q->dst() ); - } - } - for(std::vector<std::pair<gr_msg_endpoint, bool> >::iterator it = resolved_endpoints.begin(); it != resolved_endpoints.end(); it++){ - sfg->clear_endpoint( (*it).first, (*it).second ); - } - -/* // connect primitive edges in the new fg - for(q = msg_edges.begin(); q != msg_edges.end(); q++) { - if( (!q->src().is_hier()) && (!q->dst().is_hier()) ){ - sfg->connect( q->src(), q->dst() ); - } else { - std::cout << "not connecting hier connection!" << std::endl; - } - }*/ - - // Construct unique list of blocks used either in edges, inputs, - // outputs, or by themselves. I still hate STL. - gr_basic_block_vector_t blocks; // unique list of used blocks - gr_basic_block_vector_t tmp = d_fg->calc_used_blocks(); - - // First add the list of singleton blocks - std::vector<gr_basic_block_sptr>::const_iterator b; // Because flatten_aux is const - for (b = d_blocks.begin(); b != d_blocks.end(); b++) - tmp.push_back(*b); - - // Now add the list of connected input blocks - std::stringstream msg; - for (unsigned int i = 0; i < d_inputs.size(); i++) { - if (d_inputs[i].size() == 0) { - msg << "In hierarchical block " << d_owner->name() << ", input " << i - << " is not connected internally"; - throw std::runtime_error(msg.str()); - } - - for (unsigned int j = 0; j < d_inputs[i].size(); j++) - tmp.push_back(d_inputs[i][j].block()); - } - - for (unsigned int i = 0; i < d_outputs.size(); i++) { - gr_basic_block_sptr blk = d_outputs[i].block(); - if (!blk) { - msg << "In hierarchical block " << d_owner->name() << ", output " << i - << " is not connected internally"; - throw std::runtime_error(msg.str()); - } - tmp.push_back(blk); - } - sort(tmp.begin(), tmp.end()); - - std::insert_iterator<gr_basic_block_vector_t> inserter(blocks, blocks.begin()); - unique_copy(tmp.begin(), tmp.end(), inserter); - - // Recurse hierarchical children - for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { - gr_hier_block2_sptr hier_block2(cast_to_hier_block2_sptr(*p)); - if (hier_block2 && (hier_block2.get() != d_owner)) { - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "flatten_aux: recursing into hierarchical block " << hier_block2 << std::endl; - hier_block2->d_detail->flatten_aux(sfg); - } - } -} - -void -gr_hier_block2_detail::lock() -{ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "lock: entered in " << this << std::endl; - - if (d_parent_detail) - d_parent_detail->lock(); - else - d_owner->lock(); -} - -void -gr_hier_block2_detail::unlock() -{ - if (GR_HIER_BLOCK2_DETAIL_DEBUG) - std::cout << "unlock: entered in " << this << std::endl; - - if (d_parent_detail) - d_parent_detail->unlock(); - else - d_owner->unlock(); -} - diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h deleted file mode 100644 index b38dae3016..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007,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_HIER_BLOCK2_DETAIL_H -#define INCLUDED_GR_HIER_BLOCK2_DETAIL_H - -#include <gr_core_api.h> -#include <gr_hier_block2.h> -#include <gr_flat_flowgraph.h> -#include <boost/utility.hpp> - -/*! - * \ingroup internal - */ -class GR_CORE_API gr_hier_block2_detail : boost::noncopyable -{ -public: - gr_hier_block2_detail(gr_hier_block2 *owner); - ~gr_hier_block2_detail(); - - void connect(gr_basic_block_sptr block); - void connect(gr_basic_block_sptr src, int src_port, - gr_basic_block_sptr dst, int dst_port); - void msg_connect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport); - void msg_disconnect(gr_basic_block_sptr src, pmt::pmt_t srcport, - gr_basic_block_sptr dst, pmt::pmt_t dstport); - void disconnect(gr_basic_block_sptr block); - void disconnect(gr_basic_block_sptr, int src_port, - gr_basic_block_sptr, int dst_port); - void disconnect_all(); - void lock(); - void unlock(); - void flatten_aux(gr_flat_flowgraph_sptr sfg) const; - -private: - - // Private implementation data - gr_hier_block2 *d_owner; - gr_hier_block2_detail *d_parent_detail; - gr_flowgraph_sptr d_fg; - std::vector<gr_endpoint_vector_t> d_inputs; // Multiple internal endpoints per external input - gr_endpoint_vector_t d_outputs; // Single internal endpoint per external output - gr_basic_block_vector_t d_blocks; - - - void connect_input(int my_port, int port, gr_basic_block_sptr block); - void connect_output(int my_port, int port, gr_basic_block_sptr block); - void disconnect_input(int my_port, int port, gr_basic_block_sptr block); - void disconnect_output(int my_port, int port, gr_basic_block_sptr block); - - gr_endpoint_vector_t resolve_port(int port, bool is_input); - gr_endpoint_vector_t resolve_endpoint(const gr_endpoint &endp, bool is_input) const; -}; - -#endif /* INCLUDED_GR_HIER_BLOCK2_DETAIL_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.cc b/gnuradio-core/src/lib/runtime/gr_io_signature.cc deleted file mode 100644 index 6ac9acd17d..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_io_signature.cc +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2007 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_io_signature.h> -#include <stdexcept> -#include <iostream> - -gr_io_signature_sptr -gr_make_io_signaturev(int min_streams, int max_streams, - const std::vector<int> &sizeof_stream_items) -{ - return gr_io_signature_sptr (new gr_io_signature (min_streams, max_streams, - sizeof_stream_items)); -} - -gr_io_signature_sptr -gr_make_io_signature(int min_streams, int max_streams, - int sizeof_stream_item) -{ - std::vector<int> sizeof_items(1); - sizeof_items[0] = sizeof_stream_item; - return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); -} - -gr_io_signature_sptr -gr_make_io_signature2(int min_streams, int max_streams, - int sizeof_stream_item1, - int sizeof_stream_item2) -{ - std::vector<int> sizeof_items(2); - sizeof_items[0] = sizeof_stream_item1; - sizeof_items[1] = sizeof_stream_item2; - return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); -} - -gr_io_signature_sptr -gr_make_io_signature3(int min_streams, int max_streams, - int sizeof_stream_item1, - int sizeof_stream_item2, - int sizeof_stream_item3) -{ - std::vector<int> sizeof_items(3); - sizeof_items[0] = sizeof_stream_item1; - sizeof_items[1] = sizeof_stream_item2; - sizeof_items[2] = sizeof_stream_item3; - return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); -} - -// ------------------------------------------------------------------------ - - -gr_io_signature::gr_io_signature (int min_streams, int max_streams, - const std::vector<int> &sizeof_stream_items) -{ - if (min_streams < 0 - || (max_streams != IO_INFINITE && max_streams < min_streams)) - throw std::invalid_argument ("gr_io_signature(1)"); - - if (sizeof_stream_items.size() < 1) - throw std::invalid_argument("gr_io_signature(2)"); - - for (size_t i = 0; i < sizeof_stream_items.size(); i++){ - if (max_streams != 0 && sizeof_stream_items[i] < 1) - throw std::invalid_argument("gr_io_signature(3)"); - } - - d_min_streams = min_streams; - d_max_streams = max_streams; - d_sizeof_stream_item = sizeof_stream_items; -} - -gr_io_signature::~gr_io_signature () -{ -} - -int -gr_io_signature::sizeof_stream_item (int _index) const -{ - if (_index < 0) - throw std::invalid_argument ("gr_io_signature::sizeof_stream_item"); - - size_t index = _index; - return d_sizeof_stream_item[std::min(index, d_sizeof_stream_item.size() - 1)]; -} - -std::vector<int> -gr_io_signature::sizeof_stream_items() const -{ - return d_sizeof_stream_item; -} diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.h b/gnuradio-core/src/lib/runtime/gr_io_signature.h deleted file mode 100644 index fd18257973..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_io_signature.h +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2007 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_IO_SIGNATURE_H -#define INCLUDED_IO_SIGNATURE_H - -#include <gr_core_api.h> -#include <gr_runtime_types.h> - -/*! - * \brief Create an i/o signature - * - * \ingroup internal - * \param min_streams specify minimum number of streams (>= 0) - * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) - * \param sizeof_stream_item specify the size of the items in each stream - */ -GR_CORE_API gr_io_signature_sptr -gr_make_io_signature(int min_streams, int max_streams, - int sizeof_stream_item); - -/*! - * \brief Create an i/o signature - * - * \param min_streams specify minimum number of streams (>= 0) - * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) - * \param sizeof_stream_item1 specify the size of the items in the first stream - * \param sizeof_stream_item2 specify the size of the items in the second and subsequent streams - */ -GR_CORE_API gr_io_signature_sptr -gr_make_io_signature2(int min_streams, int max_streams, - int sizeof_stream_item1, - int sizeof_stream_item2 - ); - -/*! - * \brief Create an i/o signature - * - * \param min_streams specify minimum number of streams (>= 0) - * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) - * \param sizeof_stream_item1 specify the size of the items in the first stream - * \param sizeof_stream_item2 specify the size of the items in the second stream - * \param sizeof_stream_item3 specify the size of the items in the third and subsequent streams - */ -GR_CORE_API gr_io_signature_sptr -gr_make_io_signature3(int min_streams, int max_streams, - int sizeof_stream_item1, - int sizeof_stream_item2, - int sizeof_stream_item3 - ); - -/*! - * \brief Create an i/o signature - * - * \param min_streams specify minimum number of streams (>= 0) - * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) - * \param sizeof_stream_items specify the size of the items in the streams - * - * If there are more streams than there are entries in sizeof_stream_items, the - * value of the last entry in sizeof_stream_items is used for the missing values. - * sizeof_stream_items must contain at least 1 entry. - */ -GR_CORE_API gr_io_signature_sptr -gr_make_io_signaturev(int min_streams, int max_streams, - const std::vector<int> &sizeof_stream_items); - - -/*! - * \brief i/o signature for input and output ports. - * \brief misc - */ -class GR_CORE_API gr_io_signature { - int d_min_streams; - int d_max_streams; - std::vector<int> d_sizeof_stream_item; - - gr_io_signature(int min_streams, int max_streams, - const std::vector<int> &sizeof_stream_items); - - friend GR_CORE_API gr_io_signature_sptr - gr_make_io_signaturev(int min_streams, - int max_streams, - const std::vector<int> &sizeof_stream_items); - - public: - - static const int IO_INFINITE = -1; - - ~gr_io_signature (); - - int min_streams () const { return d_min_streams; } - int max_streams () const { return d_max_streams; } - int sizeof_stream_item (int index) const; - std::vector<int> sizeof_stream_items() const; -}; - - -#endif /* INCLUDED_IO_SIGNATURE_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.i b/gnuradio-core/src/lib/runtime/gr_io_signature.i deleted file mode 100644 index fe1707e410..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_io_signature.i +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2005,2007 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. - */ - -class gr_io_signature; -typedef boost::shared_ptr<gr_io_signature> gr_io_signature_sptr; -%template(gr_io_signature_sptr) boost::shared_ptr<gr_io_signature>; - -%rename(io_signature) gr_make_io_signature; -%rename(io_signature2) gr_make_io_signature2; -%rename(io_signature3) gr_make_io_signature3; -%rename(io_signaturev) gr_make_io_signaturev; - - -gr_io_signature_sptr -gr_make_io_signature(int min_streams, int max_streams, - int sizeof_stream_item); - -gr_io_signature_sptr -gr_make_io_signature2(int min_streams, int max_streams, - int sizeof_stream_item1, - int sizeof_stream_item2 - ); -gr_io_signature_sptr -gr_make_io_signature3(int min_streams, int max_streams, - int sizeof_stream_item1, - int sizeof_stream_item2, - int sizeof_stream_item3 - ); -gr_io_signature_sptr -gr_make_io_signaturev(int min_streams, int max_streams, - const std::vector<int> &sizeof_stream_items); - - -class gr_io_signature { - gr_io_signature (int min_streams, int max_streams, int sizeof_stream_item); - - friend gr_io_signature_sptr - gr_make_io_signaturev(int min_streams, - int max_streams, - const std::vector<int> &sizeof_stream_item); - - public: - - // disabled. Suspected bug in SWIG 1.3.24 - // static const int IO_INFINITE = -1; - - ~gr_io_signature (); - - int min_streams () const { return d_min_streams; } - int max_streams () const { return d_max_streams; } - int sizeof_stream_item (int index) const; - std::vector<int> sizeof_stream_items() const; -}; - diff --git a/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc b/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc deleted file mode 100644 index fb31742e13..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc +++ /dev/null @@ -1,187 +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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_local_sighandler.h> -#include <stdexcept> -#include <stdio.h> -#include <string.h> - - -gr_local_sighandler::gr_local_sighandler (int signum, - void (*new_handler)(int)) - : d_signum (signum) -{ -#ifdef HAVE_SIGACTION - struct sigaction new_action; - memset (&new_action, 0, sizeof (new_action)); - - new_action.sa_handler = new_handler; - sigemptyset (&new_action.sa_mask); - new_action.sa_flags = 0; - - if (sigaction (d_signum, &new_action, &d_old_action) < 0){ - perror ("sigaction (install new)"); - throw std::runtime_error ("sigaction"); - } -#endif -} - -gr_local_sighandler::~gr_local_sighandler () -{ -#ifdef HAVE_SIGACTION - if (sigaction (d_signum, &d_old_action, 0) < 0){ - perror ("sigaction (restore old)"); - throw std::runtime_error ("sigaction"); - } -#endif -} - -void -gr_local_sighandler::throw_signal (int signum) -{ - throw gr_signal (signum); -} - -/* - * Semi-hideous way to may a signal number into a signal name - */ - -#define SIGNAME(x) case x: return #x - -std::string -gr_signal::name () const -{ - char tmp[128]; - - switch (signal ()){ -#ifdef SIGHUP - SIGNAME (SIGHUP); -#endif -#ifdef SIGINT - SIGNAME (SIGINT); -#endif -#ifdef SIGQUIT - SIGNAME (SIGQUIT); -#endif -#ifdef SIGILL - SIGNAME (SIGILL); -#endif -#ifdef SIGTRAP - SIGNAME (SIGTRAP); -#endif -#ifdef SIGABRT - SIGNAME (SIGABRT); -#endif -#ifdef SIGBUS - SIGNAME (SIGBUS); -#endif -#ifdef SIGFPE - SIGNAME (SIGFPE); -#endif -#ifdef SIGKILL - SIGNAME (SIGKILL); -#endif -#ifdef SIGUSR1 - SIGNAME (SIGUSR1); -#endif -#ifdef SIGSEGV - SIGNAME (SIGSEGV); -#endif -#ifdef SIGUSR2 - SIGNAME (SIGUSR2); -#endif -#ifdef SIGPIPE - SIGNAME (SIGPIPE); -#endif -#ifdef SIGALRM - SIGNAME (SIGALRM); -#endif -#ifdef SIGTERM - SIGNAME (SIGTERM); -#endif -#ifdef SIGSTKFLT - SIGNAME (SIGSTKFLT); -#endif -#ifdef SIGCHLD - SIGNAME (SIGCHLD); -#endif -#ifdef SIGCONT - SIGNAME (SIGCONT); -#endif -#ifdef SIGSTOP - SIGNAME (SIGSTOP); -#endif -#ifdef SIGTSTP - SIGNAME (SIGTSTP); -#endif -#ifdef SIGTTIN - SIGNAME (SIGTTIN); -#endif -#ifdef SIGTTOU - SIGNAME (SIGTTOU); -#endif -#ifdef SIGURG - SIGNAME (SIGURG); -#endif -#ifdef SIGXCPU - SIGNAME (SIGXCPU); -#endif -#ifdef SIGXFSZ - SIGNAME (SIGXFSZ); -#endif -#ifdef SIGVTALRM - SIGNAME (SIGVTALRM); -#endif -#ifdef SIGPROF - SIGNAME (SIGPROF); -#endif -#ifdef SIGWINCH - SIGNAME (SIGWINCH); -#endif -#ifdef SIGIO - SIGNAME (SIGIO); -#endif -#ifdef SIGPWR - SIGNAME (SIGPWR); -#endif -#ifdef SIGSYS - SIGNAME (SIGSYS); -#endif - default: -#if defined (HAVE_SNPRINTF) -#if defined (SIGRTMIN) && defined (SIGRTMAX) - if (signal () >= SIGRTMIN && signal () <= SIGRTMAX){ - snprintf (tmp, sizeof (tmp), "SIGRTMIN + %d", signal ()); - return tmp; - } -#endif - snprintf (tmp, sizeof (tmp), "SIGNAL %d", signal ()); - return tmp; -#else - return "Unknown signal"; -#endif - } -} diff --git a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h b/gnuradio-core/src/lib/runtime/gr_local_sighandler.h deleted file mode 100644 index a30e2c13a5..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h +++ /dev/null @@ -1,65 +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. - */ - -#ifndef INCLUDED_GR_LOCAL_SIGHANDLER_H -#define INCLUDED_GR_LOCAL_SIGHANDLER_H - -#ifdef HAVE_SIGNAL_H -#include <signal.h> -#endif - -#include <gr_core_api.h> -#include <string> - -/*! - * \brief Get and set signal handler. - * - * \ingroup internal - * Constructor installs new handler, destructor reinstalls - * original value. - */ -class GR_CORE_API gr_local_sighandler { - int d_signum; -#ifdef HAVE_SIGACTION - struct sigaction d_old_action; -#endif -public: - gr_local_sighandler (int signum, void (*new_handler)(int)); - ~gr_local_sighandler (); - - /* throw gr_signal (signum) */ - static void throw_signal (int signum); -}; - -/*! - * \brief Representation of signal. - */ -class GR_CORE_API gr_signal -{ - int d_signum; -public: - gr_signal (int signum) : d_signum (signum) {} - int signal () const { return d_signum; } - std::string name () const; -}; - -#endif /* INCLUDED_GR_LOCAL_SIGHANDLER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_logger.cc b/gnuradio-core/src/lib/runtime/gr_logger.cc deleted file mode 100644 index 7e0116d036..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_logger.cc +++ /dev/null @@ -1,291 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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. - */ - -/******************************************************************************* -* Author: Mark Plett -* Description: -* The gr_log module wraps the log4cpp library for logging in gnuradio. -*******************************************************************************/ - -#include <gr_logger.h> -#include <stdexcept> -#include <algorithm> - -#ifdef ENABLE_GR_LOG -#ifdef HAVE_LOG4CPP - -/**************************** BEGIN LOG4CPP HELPERS ***************************/ -/* Logger config class. This is a singleton that controls how log4cpp is configured - * If watch_period>0 a thread is started to watch teh config file for changes. - */ - -// Getters of logger_config -logger_config& -logger_config::get_instance(void){ - static logger_config instance; - return instance; -}; - -std::string -logger_config::get_filename(){ - logger_config& in=get_instance(); - return in.filename; -}; - -unsigned int -logger_config::get_watch_period(){ - logger_config& in=get_instance(); - return in.watch_period; -}; - -// Method to watch config file for changes -void logger_config::watch_file(std::string filename,unsigned int watch_period){ - std::time_t last_write(boost::filesystem::last_write_time(filename)); - std::time_t current_time(0); - while(true){ - try{ - current_time = boost::filesystem::last_write_time(filename); - if(current_time>last_write){ - std::cout<<"GNURadio Reloading logger configuration:"<<filename<<std::endl; - last_write = current_time; -// Should we wipe out all old configuration or just add the new? Just adding... -// logger_reset_config(); - logger_load_config(filename); - }; - boost::this_thread::sleep(boost::posix_time::time_duration(0,0,watch_period,0)); - } - catch(const boost::thread_interrupted&){ - std::cout<<"GNURadio leaving logger config file watch."<<std::endl; - break; - }; - }; -}; - -// Method to load the confifuration. It only loads if the filename or watch has changed -void logger_config::load_config(std::string filename,unsigned int watch_period){ - logger_config& instance = get_instance(); -// Only reconfigure if filename or watch has changed - if(instance.filename!=filename || watch_period!=instance.watch_period){ - instance.filename = filename; - instance.watch_period = watch_period; -// Stop any file watching thread - if(instance.watch_thread!=NULL) stop_watch(); -// Load configuration - std::cout<<"GNURadio Loading logger configuration:"<<instance.filename<<std::endl; - logger_load_config(instance.filename); -// Start watch if required - if(instance.watch_period>0){ - instance.watch_thread = new boost::thread(watch_file,instance.filename,instance.watch_period); - } - }; -}; - -// Method to stop the watcher thread -void logger_config::stop_watch(){ - logger_config& instance = get_instance(); - if(instance.watch_thread){ - instance.watch_thread->interrupt(); - instance.watch_thread->join(); - delete(instance.watch_thread); - instance.watch_thread=NULL; - }; -}; - -// Method to reset logger configuration -void -logger_config::reset_config(void){ - logger_config& instance = get_instance(); - stop_watch(); - std::vector<log4cpp::Category*> *loggers = log4cpp::Category::getCurrentCategories(); - std::vector<log4cpp::Category*>::iterator logger = loggers->begin(); -// We can't destroy categories but we can neuter them by removing all appenders. - for (;logger!=loggers->end();logger++){ - (*logger)->removeAllAppenders(); - }; - instance.filename=std::string(""); - instance.watch_period=0; -} - -/***************** Functions to call log4cpp methods *************************/ - -gr_logger_ptr -logger_get_logger(std::string name) -{ - if(log4cpp::Category::exists(name)){ - gr_logger_ptr logger = &log4cpp::Category::getInstance(name); - return logger; - } - else - { - gr_logger_ptr logger = &log4cpp::Category::getInstance(name); - logger->setPriority(log4cpp::Priority::NOTSET); - return logger; - }; -}; - -void -logger_load_config(const std::string &config_filename) -{ - if(config_filename.size() != 0) { - try - { - log4cpp::PropertyConfigurator::configure(config_filename); - } - catch( log4cpp::ConfigureFailure &e ) - { - std::cout << "Logger config failed :" << e.what() << std::endl; - } - }; -} - -void -logger_set_level(gr_logger_ptr logger, const std::string &level) -{ - std::string nocase = level; - std::transform(level.begin(), level.end(), nocase.begin(), ::tolower); - - if(nocase == "off" || nocase == "notset") - logger_set_level(logger, log4cpp::Priority::NOTSET); - else if(nocase == "all" || nocase == "debug") - logger_set_level(logger, log4cpp::Priority::DEBUG); - else if(nocase == "info") - logger_set_level(logger, log4cpp::Priority::INFO); - else if(nocase == "notice") - logger_set_level(logger, log4cpp::Priority::NOTICE); - else if(nocase == "warn") - logger_set_level(logger, log4cpp::Priority::WARN); - else if(nocase == "error") - logger_set_level(logger, log4cpp::Priority::ERROR); - else if(nocase == "crit") - logger_set_level(logger, log4cpp::Priority::CRIT); - else if(nocase == "alert") - logger_set_level(logger, log4cpp::Priority::ALERT); - else if(nocase=="fatal") - logger_set_level(logger, log4cpp::Priority::FATAL); - else if(nocase == "emerg") - logger_set_level(logger, log4cpp::Priority::EMERG); - else - throw std::runtime_error("logger_set_level: Bad level type.\n"); -} - -void -logger_set_level(gr_logger_ptr logger, log4cpp::Priority::Value level) -{ - logger->setPriority(level); -} - -void -logger_get_level(gr_logger_ptr logger, std::string &level) -{ - log4cpp::Priority::Value levelPtr = logger->getPriority(); - if(levelPtr == log4cpp::Priority::NOTSET) level = "noset"; - if(levelPtr == log4cpp::Priority::DEBUG) level = "debug"; - if(levelPtr == log4cpp::Priority::INFO) level = "info"; - if(levelPtr == log4cpp::Priority::NOTICE) level = "notice"; - if(levelPtr == log4cpp::Priority::WARN) level = "warn"; - if(levelPtr == log4cpp::Priority::ERROR) level = "error"; - if(levelPtr == log4cpp::Priority::CRIT) level = "crit"; - if(levelPtr == log4cpp::Priority::ALERT) level = "alert"; - if(levelPtr == log4cpp::Priority::FATAL) level = "fatal"; - if(levelPtr == log4cpp::Priority::EMERG) level = "emerg"; -}; - -void -logger_get_level(gr_logger_ptr logger,log4cpp::Priority::Value level) -{ - level = logger->getPriority(); -} - -void -logger_add_console_appender(gr_logger_ptr logger,std::string target,std::string pattern) -{ - - log4cpp::PatternLayout* layout = new log4cpp::PatternLayout(); - log4cpp::Appender* app; - if(target=="stdout") - app = new log4cpp::OstreamAppender("ConsoleAppender::",&std::cout); - else - app = new log4cpp::OstreamAppender("ConsoleAppender::",&std::cerr); - - layout->setConversionPattern(pattern); - app->setLayout(layout); - logger->setAppender(app); - -} - -void -logger_add_file_appender(gr_logger_ptr logger,std::string filename,bool append,std::string pattern) -{ - - log4cpp::PatternLayout* layout = new log4cpp::PatternLayout(); - log4cpp::Appender* app = new - log4cpp::FileAppender("FileAppender::"+filename, - filename); - layout->setConversionPattern(pattern); - app->setLayout(layout); - logger->setAppender(app); - -} - -void -logger_add_rollingfile_appender(gr_logger_ptr logger,std::string filename, - size_t filesize,int bkup_index,bool append,mode_t mode,std::string pattern) -{ - log4cpp::PatternLayout* layout = new log4cpp::PatternLayout(); - log4cpp::Appender* app = new - log4cpp::RollingFileAppender("RollFileAppender::"+filename,filename,filesize,bkup_index,append,mode); - layout->setConversionPattern(pattern); - app->setLayout(layout); - logger->setAppender(app); -} - -std::vector<std::string> -logger_get_logger_names(void){ - std::vector<std::string> names; - std::vector<log4cpp::Category*> *loggers = log4cpp::Category::getCurrentCategories(); - std::vector<log4cpp::Category*>::iterator logger = loggers->begin(); - - for (;logger!=loggers->end();logger++){ - names.push_back((*logger)->getName()); - }; - return names; - -} - -#endif /* HAVE_LOG4CPP */ - -/****** Start Methods to provide Python the capabilities of the macros ********/ -void gr_logger_config(const std::string config_filename, unsigned int watch_period){ - GR_CONFIG_AND_WATCH_LOGGER(config_filename,watch_period); -}; -std::vector<std::string> gr_logger_get_logger_names(void){ - std::vector<std::string> names; - GR_GET_LOGGER_NAMES(names); - return names; -}; -void gr_logger_reset_config(void){ - GR_RESET_CONFIGURATION(); -}; - -// Remaining capability provided by gr_logger class in gr_logger.h - -#endif /* ENABLE_GR_LOGGER */ diff --git a/gnuradio-core/src/lib/runtime/gr_logger.h b/gnuradio-core/src/lib/runtime/gr_logger.h deleted file mode 100644 index db6df722ec..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_logger.h +++ /dev/null @@ -1,643 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -/******************************************************************************* -* Author: Mark Plett -* Description: -* The gr_logger module wraps the log4cpp library for logging in gnuradio -*******************************************************************************/ - -#ifndef INCLUDED_GR_LOGGER_H -#define INCLUDED_GR_LOGGER_H - -/*! -* \file gr_logger.h -* \ingroup logging -* \brief GNURADIO logging wrapper for log4cpp library (C++ port of log4j) -* -*/ - -#ifndef ENABLE_GR_LOG -#include "config.h" -#endif - -#include <gr_core_api.h> -#include <assert.h> -#include <iostream> -#include <time.h> -#include <boost/filesystem.hpp> -#include <boost/thread.hpp> - -#ifdef ENABLE_GR_LOG - -// We have three configurations... first logging to stdout/stderr -#ifndef HAVE_LOG4CPP -//#warning GR logging Enabled and using std::cout - -typedef std::string gr_logger_ptr; - -#define GR_LOG_DECLARE_LOGPTR(logger) -#define GR_LOG_ASSIGN_LOGPTR(logger,name) -#define GR_CONFIG_LOGGER(config) -#define GR_CONFIG_AND_WATCH_LOGGER(config,period) -#define GR_LOG_GETLOGGER(logger, name) -#define GR_SET_LEVEL(name, level) -#define GR_LOG_SET_LEVEL(logger, level) -#define GR_GET_LEVEL(name, level) -#define GR_LOG_GET_LEVEL(logger, level) -#define GR_ADD_CONSOLE_APPENDER(logger,target,pattern) -#define GR_LOG_ADD_CONSOLE_APPENDER(logger,target,pattern) -#define GR_ADD_FILE_APPENDER(name,filename,append,pattern) -#define GR_LOG_ADD_FILE_APPENDER(logger,filename,append,pattern) -#define GR_ADD_ROLLINGFILE_APPENDER(name,filename,filesize,bkup_index,append,mode,pattern) -#define GR_LOG_ADD_ROLLINGFILE_APPENDER(logger,filename,filesize,bkup_index,append,mode,pattern) -#define GR_GET_LOGGER_NAMES(names) -#define GR_RESET_CONFIGURATION() -#define GR_DEBUG(name, msg) std::cout<<"DEBUG: "<<msg<<std::endl -#define GR_INFO(name, msg) std::cout<<"INFO: "<<msg<<std::endl -#define GR_NOTICE(name, msg) std::cout<<"NOTICE: "<<msg<<std::endl -#define GR_WARN(name, msg) std::cerr<<"WARN: "<<msg<<std::endl -#define GR_ERROR(name, msg) std::cerr<<"ERROR: "<<msg<<std::endl -#define GR_ALERT(name, msg) std::cerr<<"ERROR: "<<msg<<std::endl -#define GR_CRIT(name, msg) std::cerr<<"ERROR: "<<msg<<std::endl -#define GR_FATAL(name, msg) std::cerr<<"FATAL: "<<msg<<std::endl -#define GR_EMERG(name, msg) std::cerr<<"EMERG: "<<msg<<std::endl -#define GR_ERRORIF(name, cond, msg) {if((cond)) std::cerr<<"ERROR: "<<msg<<std::endl;} -#define GR_ASSERT(name, cond, msg) {if(!(cond)) std::cerr<<"FATAL: "<<msg<<std::endl; assert(cond);} -#define GR_LOG_DEBUG(logger, msg) std::cout<<"DEBUG: "<<msg<<std::endl -#define GR_LOG_INFO(logger, msg) std::cout<<"INFO: "<<msg<<std::endl -#define GR_LOG_NOTICE(logger, msg) std::cout<<"NOTICE: "<<msg<<std::endl -#define GR_LOG_WARN(logger, msg) std::cerr<<"WARN: "<<msg<<std::endl -#define GR_LOG_ERROR(logger, msg) std::cerr<<"ERROR: "<<msg<<std::endl -#define GR_LOG_ALERT(logger, msg) std::cerr<<"ALERT: "<<msg<<std::endl -#define GR_LOG_CRIT(logger, msg) std::cerr<<"CRIT: "<<msg<<std::endl -#define GR_LOG_FATAL(logger, msg) std::cerr<<"FATAL: "<<msg<<std::endl -#define GR_LOG_EMERG(logger, msg) std::cerr<<"EMERG: "<<msg<<std::endl -#define GR_LOG_ERRORIF(logger, cond, msg) {\ - if((cond)) std::cerr<<"ERROR: "<<msg<<std::endl;} -#define GR_LOG_ASSERT(logger, cond, msg) {\ - if(!(cond)) {std::cerr<<"FATAL: "<<msg<<std::endl; assert(cond);};} - -#else /* HAVE_LOG4CPP */ -// Second configuration...logging to log4cpp - -#include <log4cpp/Category.hh> -#include <log4cpp/PropertyConfigurator.hh> -#include <log4cpp/FileAppender.hh> -#include <log4cpp/RollingFileAppender.hh> -#include <log4cpp/OstreamAppender.hh> -#include <log4cpp/PatternLayout.hh> - -/*! - * \brief GR_LOG macros - * \ingroup logging - * - * These macros wrap the standard LOG4CPP_LEVEL macros. The availablie macros - * are: - * GR_LOG_DEBUG - * GR_LOG_INFO - * GR_LOG_WARN - * GR_LOG_TRACE - * GR_LOG_ERROR - * GR_LOG_ALERT - * GR_LOG_CRIT - * GR_LOG_FATAL - * GR_LOG_EMERG - */ -typedef log4cpp::Category* gr_logger_ptr; - -/* Macros for Programmatic Configuration */ -#define GR_LOG_DECLARE_LOGPTR(logger) \ - gr_logger_ptr logger; - -#define GR_LOG_ASSIGN_LOGPTR(logger,name) \ - logger = logger_get_logger(name); - -#define GR_CONFIG_LOGGER(config) \ - logger_config::load_config(config) - -#define GR_CONFIG_AND_WATCH_LOGGER(config,period) \ - logger_config::load_config(config,period) - -#define GR_LOG_GETLOGGER(logger, name) \ - gr_logger_ptr logger = logger_get_logger(name); - -#define GR_SET_LEVEL(name, level){ \ - gr_logger_ptr logger = logger_get_logger(name);\ - logger_set_level(logger,level);} - -#define GR_LOG_SET_LEVEL(logger, level) \ - logger_set_level(logger, level); - -#define GR_GET_LEVEL(name, level){ \ - gr_logger_ptr logger = logger_get_logger(name);\ - logger_get_level(logger,level);} - -#define GR_LOG_GET_LEVEL(logger, level) \ - logger_get_level(logger,level); - -#define GR_ADD_CONSOLE_APPENDER(name,target,pattern){\ - gr_logger_ptr logger = logger_get_logger(name);\ - logger_add_console_appender(logger,target,pattern);} - -#define GR_LOG_ADD_CONSOLE_APPENDER(logger,target,pattern){\ - logger_add_console_appender(logger,target,pattern);} - -#define GR_ADD_FILE_APPENDER(name,filename,append,pattern){\ - gr_logger_ptr logger = logger_get_logger(name);\ - logger_add_file_appender(logger,filename,append,pattern);} - -#define GR_LOG_ADD_FILE_APPENDER(logger,filename,append,pattern){\ - logger_add_file_appender(logger,filename,append,pattern);} - -#define GR_ADD_ROLLINGFILE_APPENDER(name,filename,filesize,bkup_index,append,mode,pattern){\ - gr_logger_ptr logger = logger_get_logger(name);\ - logger_add_rollingfile_appender(logger,filename,filesize,bkup_index,append,mode,pattern);} - -#define GR_LOG_ADD_ROLLINGFILE_APPENDER(logger,filename,filesize,bkup_index,append,mode,pattern){\ - logger_add_rollingfile_appender(logger,filename,filesize,bkup_index,append,mode,pattern);} - -#define GR_GET_LOGGER_NAMES(names){ \ - names = logger_get_logger_names();} - -#define GR_RESET_CONFIGURATION(){ \ - logger_config::reset_config();} - -/* Logger name referenced macros */ -#define GR_DEBUG(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::DEBUG << msg << log4cpp::eol;} - -#define GR_INFO(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::INFO << msg << log4cpp::eol;} - -#define GR_NOTICE(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger << log4cpp::Priority::NOTICE << msg;} - -#define GR_WARN(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::WARN << msg << log4cpp::eol;} - -#define GR_ERROR(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::ERROR << msg << log4cpp::eol;} - -#define GR_CRIT(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::CRIT << msg << log4cpp::eol;} - -#define GR_ALERT(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::ALERT << msg << log4cpp::eol;} - -#define GR_FATAL(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::FATAL << msg << log4cpp::eol;} - -#define GR_EMERG(name, msg) { \ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::EMERG << msg << log4cpp::eol;} - -#define GR_ERRORIF(name, cond, msg) { \ -if((cond)){\ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::ERROR << msg << log4cpp::eol;};\ -}; - -#define GR_ASSERT(name, cond, msg) { \ -if(!(cond)){\ - gr_logger_ptr logger = logger_get_logger(name);\ - *logger<< log4cpp::Priority::EMERG << msg << log4cpp::eol;};\ - assert(0);\ -}; - -/* LoggerPtr Referenced Macros */ -#define GR_LOG_DEBUG(logger, msg) { \ - *logger << log4cpp::Priority::DEBUG << msg << log4cpp::eol;} - -#define GR_LOG_INFO(logger, msg) { \ - *logger << log4cpp::Priority::INFO << msg << log4cpp::eol;} - -#define GR_LOG_NOTICE(logger, msg) { \ - *logger << log4cpp::Priority::NOTICE << msg << log4cpp::eol;} - -#define GR_LOG_WARN(logger, msg) { \ - *logger << log4cpp::Priority::WARN << msg << log4cpp::eol;} - -#define GR_LOG_ERROR(logger, msg) { \ - *logger << log4cpp::Priority::ERROR << msg << log4cpp::eol;} - -#define GR_LOG_CRIT(logger, msg) { \ - *logger << log4cpp::Priority::CRIT << msg << log4cpp::eol;} - -#define GR_LOG_ALERT(logger, msg) { \ - *logger << log4cpp::Priority::ALERT << msg << log4cpp::eol;} - -#define GR_LOG_FATAL(logger, msg) { \ - *logger << log4cpp::Priority::FATAL << msg << log4cpp::eol;} - -#define GR_LOG_EMERG(logger, msg) { \ - *logger << log4cpp::Priority::EMERG << msg << log4cpp::eol;} - -#define GR_LOG_ERRORIF(logger,cond, msg) { \ -if((cond)){\ - *logger<< log4cpp::Priority::ERROR << msg << log4cpp::eol;};\ -}; - -#define GR_LOG_ASSERT(logger, cond, msg) { \ -if(!(cond)){\ - *logger<< log4cpp::Priority::EMERG << msg << log4cpp::eol;\ - assert(0);};\ -}; - -/*! - * \brief Class to control configuration of logger. - * This is a singleton that cna launch a thread to wathc a config file for changes - * \ingroup logging - */ -class logger_config { -private: - /*! \brief filename of logger config file */ - std::string filename; - /*! \brief Period (seconds) over which watcher thread checks config file for changes */ - unsigned int watch_period; - /*! \brief Pointer to watch thread for config file changes */ - boost::thread *watch_thread; - - /*! \brief Watcher thread method - * /param filename Name of configuration file - * /param watch_period Seconds between checks for changes in config file - */ - static void watch_file(std::string filename,unsigned int watch_period); - - logger_config(){}; //!< Constructor - logger_config(logger_config const&); //!<Copy constructor - void operator=(logger_config const&); //!<Assignment Operator - - /*! \brief destrcutor stops watch thread before exits */ - ~logger_config(){ - stop_watch(); - }; - - /*! \brief Instance getter for singleton. Only used by class. */ - static logger_config& get_instance(void); - -public: - /*! \brief Getter for config filename */ - static std::string get_filename(); - /*! \brief Getter for watch period */ - static unsigned int get_watch_period(); - /*! \brief Method to load configuration - * /param filename Name of configuration file - * /param watch_period Seconds between checks for changes in config file - */ - static void load_config(std::string filename,unsigned int watch_period=0); - /*! \brief Method to stop watcher thread */ - static void stop_watch(); - /*! \brief method to reset logger configuration */ - static void reset_config(void); -}; - -/*! - * \brief Retrieve a pointer to a logger by name - * - * Retrives a logger pointer - * \p name. - * - * \param name Name of the logger for which a pointer is requested - */ -GR_CORE_API gr_logger_ptr logger_get_logger(std::string name); - -/*! - * \brief Load logger's configuration file. - * - * Initialize the GNU Radio logger by loading the configuration file - * \p config_filename. - * - * \param config_filename The configuration file. Set to "" for the - * basic logger that outputs to the console. - */ -GR_CORE_API void logger_load_config(const std::string &config_filename=""); - -/*! - * \brief Reset logger's configuration file. - * - * Remove all appenders from loggers - */ -GR_CORE_API void logger_reset_config(void); - -/*! - * \brief Set the logger's output level. - * - * Sets the level of the logger. This takes a string that is - * translated to the standard levels and can be (case insensitive): - * - * \li off , notset - * \li debug - * \li info - * \li notice - * \li warn - * \li error - * \li crit - * \li alert - * \li fatal - * \li emerg - * - * \param logger the logger to set the level of. - * \param level string to set the level to. - */ -GR_CORE_API void logger_set_level(gr_logger_ptr logger, const std::string &level); - -/*! - * \brief Set the logger's output level. - * - * Sets the level of the logger. This takes the actual Log4cpp::Priority - * data type, which can be: - * - * \li log4cpp::Priority::NOTSET - * \li log4cpp::Priority::DEBUG - * \li log4cpp::Priority::INFO - * \li log4cpp::Priority::NOTICE - * \li log4cpp::Priority::WARN - * \li log4cpp::Priority::ERROR - * \li log4cpp::Priority::CRIT - * \li log4cpp::Priority::ALERT - * \li log4cpp::Priority::FATAL - * \li log4cpp::Priority::EMERG - * - * \param logger the logger to set the level of. - * \param level new logger level of type Log4cpp::Priority - */ -GR_CORE_API void logger_set_level(gr_logger_ptr logger, log4cpp::Priority::Value level); - - -/*! - * \brief Get the logger's output level. - * - * Gets the level of the logger. This returns a string that - * corresponds to the standard levels and can be (case insensitive): - * - * \li notset - * \li debug - * \li info - * \li notice - * \li warn - * \li error - * \li crit - * \li alert - * \li fatal - * \li emerg - * - * \param logger the logger to get the level of. - * \param level string to get the level into. - */ -GR_CORE_API void logger_get_level(gr_logger_ptr logger, std::string &level); - -/*! - * \brief Get the logger's output level. - * - * Gets the level of the logger. This returns the actual Log4cpp::Level - * data type, which can be: - * - * \li log4cpp::Priority::NOTSET - * \li log4cpp::Priority::DEBUG - * \li log4cpp::Priority::INFO - * \li log4cpp::Priority::NOTICE - * \li log4cpp::Priority::WARN - * \li log4cpp::Priority::ERROR - * \li log4cpp::Priority::CRIT - * \li log4cpp::Priority::ALERT - * \li log4cpp::Priority::FATAL - * \li log4cpp::Priority::EMERG - * - * \param logger the logger to get the level of. - * \param level of the logger. - */ -GR_CORE_API void logger_get_level(gr_logger_ptr logger, log4cpp::Priority::Value &level); - -/*! - * \brief Add console appender to a given logger - * - * Add console appender to a given logger - * - * \param logger Logger to which appender will be added - * \param target Std target to write 'cout' or 'cerr' (default is cout) - * \param pattern Formating pattern for log messages - */ -GR_CORE_API void logger_add_console_appender(gr_logger_ptr logger,std::string target,std::string pattern); - -/*! - * \brief Add file appender to a given logger - * - * Add file appender to a given logger - * - * \param logger Logger to which appender will be added - * \param filename File to which log will be written - * \param append Overwrite or append to log file - * \param pattern Formating pattern for log messages - */ -GR_CORE_API void logger_add_file_appender(gr_logger_ptr logger,std::string filename,bool append,std::string pattern); - -/*! - * \brief Add rolling file appender to a given logger - * - * Add rolling file appender to a given logger - * - * \param logger Logger to which appender will be added - * \param filename File to which log will be written - * \param filesize Sizez of files to write - * \param bkup_index Number of files to write - * \param append Overwrite or append to log file - * \param mode Permissions to set on log file - * \param pattern Formating pattern for log messages - */ -GR_CORE_API void logger_add_rollingfile_appender(gr_logger_ptr logger,std::string filename, - size_t filesize,int bkup_index,bool append,mode_t mode,std::string pattern); - -/*! - * \brief Add rolling file appender to a given logger - * - * Add rolling file appender to a given logger - * - * \return vector of string names of loggers - */ -GR_CORE_API std::vector<std::string> logger_get_logger_names(void); - -#endif /* HAVE_LOG4CPP */ - - -// If Logger disable do nothing -#else /* ENABLE_GR_LOG */ - -typedef void* gr_logger_ptr; - -#define GR_LOG_DECLARE_LOGPTR(logger) -#define GR_LOG_ASSIGN_LOGPTR(logger,name) -#define GR_CONFIG_LOGGER(config) -#define GR_CONFIG_AND_WATCH_LOGGER(config,period) -#define GR_LOG_GETLOGGER(logger, name) -#define GR_SET_LEVEL(name, level) -#define GR_LOG_SET_LEVEL(logger, level) -#define GR_GET_LEVEL(name, level) -#define GR_LOG_GET_LEVEL(logger, level) -#define GR_ADD_CONSOLE_APPENDER(logger,target,pattern) -#define GR_LOG_ADD_CONSOLE_APPENDER(logger,target,pattern) -#define GR_ADD_FILE_APPENDER(name,filename,append,pattern) -#define GR_LOG_ADD_FILE_APPENDER(logger,filename,append,pattern) -#define GR_ADD_ROLLINGFILE_APPENDER(name,filename,filesize,bkup_index,append,mode,pattern) -#define GR_LOG_ADD_ROLLINGFILE_APPENDER(logger,filename,filesize,bkup_index,append,mode,pattern) -#define GR_GET_LOGGER_NAMES(names) -#define GR_RESET_CONFIGURATION() -#define GR_DEBUG(name, msg) -#define GR_INFO(name, msg) -#define GR_NOTICE(name, msg) -#define GR_WARN(name, msg) -#define GR_ERROR(name, msg) -#define GR_ALERT(name, msg) -#define GR_CRIT(name, msg) -#define GR_FATAL(name, msg) -#define GR_EMERG(name, msg) -#define GR_ERRORIF(name, cond, msg) -#define GR_ASSERT(name, cond, msg) -#define GR_LOG_DEBUG(logger, msg) -#define GR_LOG_INFO(logger, msg) -#define GR_LOG_NOTICE(logger, msg) -#define GR_LOG_WARN(logger, msg) -#define GR_LOG_ERROR(logger, msg) -#define GR_LOG_ALERT(logger, msg) -#define GR_LOG_CRIT(logger, msg) -#define GR_LOG_FATAL(logger, msg) -#define GR_LOG_EMERG(logger, msg) -#define GR_LOG_ERRORIF(logger, cond, msg) -#define GR_LOG_ASSERT(logger, cond, msg) - -#endif /* ENABLE_GR_LOG */ - -// Even if logger is disabled we'll need for methods below to exist in python. -// The macros these call will be disabled if ENABLE_GR_LOG is undefined - -/********************* Start Classes and Methods for Python ******************/ -/*! - * \brief Logger class for referencing loggers in python. Not needed in C++ (use macros) - * Wraps and manipulates loggers for python as python has no macros - * \ingroup logging - * - */ -class gr_logger -{ - private: - /*! \brief logger pointer to logger associated wiith this wrapper class */ - gr_logger_ptr d_logger; - public: - /*! - * \brief contructor Provide name of logger to associate with this class - * \param logger_name Name of logger associated with class - */ - gr_logger(std::string logger_name) { - GR_LOG_ASSIGN_LOGPTR(d_logger,logger_name); - }; - - /*! \brief Destructor */ - ~gr_logger(){;}; - - // Wrappers for logging macros - /*! \brief inline function, wrapper to set the logger level */ - void set_level(std::string level){GR_LOG_SET_LEVEL(d_logger,level);} - - /*! \brief inline function, wrapper to get the logger level */ - void get_level(std::string &level){GR_LOG_GET_LEVEL(d_logger,level);} - - /*! \brief inline function, wrapper for LOG4CPP_DEBUG for DEBUG message */ - void debug(std::string msg){GR_LOG_DEBUG(d_logger,msg);}; - - /*! \brief inline function, wrapper for LOG4CPP_INFO for INFO message */ - void info(std::string msg){GR_LOG_INFO(d_logger,msg);}; - - /*! \brief inline function, wrapper for NOTICE message */ - void notice(std::string msg){GR_LOG_NOTICE(d_logger,msg);}; - - /*! \brief inline function, wrapper for LOG4CPP_WARN for WARN message */ - void warn(std::string msg){GR_LOG_WARN(d_logger,msg);}; - - /*! \brief inline function, wrapper for LOG4CPP_ERROR for ERROR message */ - void error(std::string msg){GR_LOG_ERROR(d_logger,msg);}; - - /*! \brief inline function, wrapper for NOTICE message */ - void crit(std::string msg){GR_LOG_CRIT(d_logger,msg);}; - - /*! \brief inline function, wrapper for ALERT message */ - void alert(std::string msg){GR_LOG_ALERT(d_logger,msg);}; - - /*! \brief inline function, wrapper for FATAL message */ - void fatal(std::string msg){GR_LOG_FATAL(d_logger,msg);}; - - /*! \brief inline function, wrapper for EMERG message */ - void emerg(std::string msg){GR_LOG_EMERG(d_logger,msg);}; - - /*! \brief inline function, wrapper for LOG4CPP_ASSERT for conditional ERROR message */ - void errorIF(bool cond,std::string msg){GR_LOG_ERRORIF(d_logger,cond,msg);}; - - /*! \brief inline function, wrapper for LOG4CPP_ASSERT for conditional ERROR message */ - void log_assert(bool cond,std::string msg){GR_LOG_ASSERT(d_logger,cond,msg);}; - - /*! \brief inline function, Method to add console appender to logger */ - void add_console_appender(std::string target,std::string pattern){ - GR_LOG_ADD_CONSOLE_APPENDER(d_logger,target,pattern); - }; - - /*! \brief inline function, Method to add file appender to logger */ - void add_file_appender(std::string filename,bool append,std::string pattern){ - GR_LOG_ADD_FILE_APPENDER(d_logger,filename,append,pattern); - }; - - /*! \brief inline function, Method to add rolling file appender to logger */ - void add_rollingfile_appender(std::string filename,size_t filesize, - int bkup_index,bool append,mode_t mode,std::string pattern){ - GR_LOG_ADD_ROLLINGFILE_APPENDER(d_logger,filename,filesize, - bkup_index,append,mode,pattern); - }; -}; - -/**************** Start Configuration Class and Methods for Python ************/ -/*! - * \brief Function to call configuration macro from python. - * Note: Configuration is only updated if filename or watch_period has changed. - * \param config_filename Name of configuration file - * \param watch_period Seconds to wait between checking for changes in conf file. - * Watch_period defaults to 0 in which case the file is not watched for changes - */ -GR_CORE_API void gr_logger_config(const std::string config_filename, unsigned int watch_period = 0); -/*! - * \brief Function to return logger names to python - * \return Vector of name strings - * - */ -GR_CORE_API std::vector<std::string> gr_logger_get_logger_names(void); -/*! - * \brief Function to reset logger configuration from python - * - */ -GR_CORE_API void gr_logger_reset_config(void); - -#endif /* INCLUDED_GR_LOGGER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_logger.i b/gnuradio-core/src/lib/runtime/gr_logger.i deleted file mode 100644 index b43bff5a89..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_logger.i +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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. - */ - -/******************************************************************************* -* Copyright 2011 Johns Hopkins University Applied Physics Lab -* Author: Mark Plett -* Description: -* SWIG interface generator file for gr_logger module. gr_logger wraps log4cpp logging -* for gnuradio. -*******************************************************************************/ - -%feature("autodoc", "1"); // generate python docstrings - -%include "exception.i" -%import "gnuradio.i" // the common stuff - -%{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix -#include <stdexcept> -%} - -//----------------------------------- - -%{ -// The .h files -#include <gr_logger.h> -%} - -%rename(logger) gr_logger; -%rename(logger_config) gr_logger_config; -%rename(logger_get_names) gr_logger_get_logger_names; -%rename(logger_reset_config) gr_logger_reset_config; - - -void gr_logger_config(const std::string config_filename,unsigned int watch_period = 0); -std::vector<std::string> gr_logger_get_logger_names(void); -void gr_logger_reset_config(void); - -class gr_logger -{ - public: - gr_logger(std::string logger_name); - void set_level(std::string level){GR_LOG_SET_LEVEL(d_logger,level);} - void get_level(std::string &level){GR_LOG_GET_LEVEL(d_logger,level);} - void debug(std::string msg){GR_LOG_DEBUG(d_logger,msg);}; - void info(std::string msg){GR_LOG_INFO(d_logger,msg);}; - void notice(std::string msg){GR_LOG_NOTICE(d_logger,msg);}; - void warn(std::string msg){GR_LOG_WARN(d_logger,msg);}; - void error(std::string msg){GR_LOG_ERROR(d_logger,msg);}; - void crit(std::string msg){GR_LOG_CRIT(d_logger,msg);}; - void alert(std::string msg){GR_LOG_ALERT(d_logger,msg);}; - void fatal(std::string msg){GR_LOG_FATAL(d_logger,msg);}; - void emerg(std::string msg){GR_LOG_EMERG(d_logger,msg);}; - void errorIF(bool cond,std::string msg){GR_LOG_ERRORIF(d_logger,cond,msg);}; - void log_assert(bool cond,std::string msg){GR_LOG_ASSERT(d_logger,cond,msg);}; - void add_console_appender(std::string target,std::string pattern); - void add_file_appender(std::string filename,bool append,std::string pattern); - void add_rollingfile_appender(std::string filename,size_t filesize,int bkup_index,bool append,mode_t mode,std::string pattern); -}; - - diff --git a/gnuradio-core/src/lib/runtime/gr_message.cc b/gnuradio-core/src/lib/runtime/gr_message.cc deleted file mode 100644 index a99dcd7653..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_message.cc +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_message.h> -#include <assert.h> -#include <string.h> - -static long s_ncurrently_allocated = 0; - -gr_message_sptr -gr_make_message (long type, double arg1, double arg2, size_t length) -{ - return gr_message_sptr (new gr_message (type, arg1, arg2, length)); -} - -gr_message_sptr -gr_make_message_from_string(const std::string s, long type, double arg1, double arg2) -{ - gr_message_sptr m = gr_make_message(type, arg1, arg2, s.size()); - memcpy(m->msg(), s.data(), s.size()); - return m; -} - - -gr_message::gr_message (long type, double arg1, double arg2, size_t length) - : d_type(type), d_arg1(arg1), d_arg2(arg2) -{ - if (length == 0) - d_buf_start = d_msg_start = d_msg_end = d_buf_end = 0; - else { - d_buf_start = new unsigned char [length]; - d_msg_start = d_buf_start; - d_msg_end = d_buf_end = d_buf_start + length; - } - s_ncurrently_allocated++; -} - -gr_message::~gr_message () -{ - assert (d_next == 0); - delete [] d_buf_start; - d_msg_start = d_msg_end = d_buf_end = 0; - s_ncurrently_allocated--; -} - -std::string -gr_message::to_string() const -{ - return std::string((char *)d_msg_start, length()); -} - -long -gr_message_ncurrently_allocated () -{ - return s_ncurrently_allocated; -} diff --git a/gnuradio-core/src/lib/runtime/gr_message.h b/gnuradio-core/src/lib/runtime/gr_message.h deleted file mode 100644 index d386ca0097..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_message.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_MESSAGE_H -#define INCLUDED_GR_MESSAGE_H - -#include <gr_core_api.h> -#include <gr_types.h> -#include <string> - -class gr_message; -typedef boost::shared_ptr<gr_message> gr_message_sptr; - -/*! - * \brief public constructor for gr_message - */ -GR_CORE_API gr_message_sptr -gr_make_message(long type = 0, double arg1 = 0, double arg2 = 0, size_t length = 0); - -GR_CORE_API gr_message_sptr -gr_make_message_from_string(const std::string s, long type = 0, double arg1 = 0, double arg2 = 0); - -/*! - * \brief Message class. - * - * \ingroup misc - * The ideas and method names for adjustable message length were - * lifted from the click modular router "Packet" class. - */ -class GR_CORE_API gr_message { - gr_message_sptr d_next; // link field for msg queue - long d_type; // type of the message - double d_arg1; // optional arg1 - double d_arg2; // optional arg2 - - unsigned char *d_buf_start; // start of allocated buffer - unsigned char *d_msg_start; // where the msg starts - unsigned char *d_msg_end; // one beyond end of msg - unsigned char *d_buf_end; // one beyond end of allocated buffer - - gr_message (long type, double arg1, double arg2, size_t length); - - friend GR_CORE_API gr_message_sptr - gr_make_message (long type, double arg1, double arg2, size_t length); - - friend GR_CORE_API gr_message_sptr - gr_make_message_from_string (const std::string s, long type, double arg1, double arg2); - - friend class gr_msg_queue; - - unsigned char *buf_data() const { return d_buf_start; } - size_t buf_len() const { return d_buf_end - d_buf_start; } - -public: - ~gr_message (); - - long type() const { return d_type; } - double arg1() const { return d_arg1; } - double arg2() const { return d_arg2; } - - void set_type(long type) { d_type = type; } - void set_arg1(double arg1) { d_arg1 = arg1; } - void set_arg2(double arg2) { d_arg2 = arg2; } - - unsigned char *msg() const { return d_msg_start; } - size_t length() const { return d_msg_end - d_msg_start; } - std::string to_string() const; - -}; - -GR_CORE_API long gr_message_ncurrently_allocated (); - -#endif /* INCLUDED_GR_MESSAGE_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_message.i b/gnuradio-core/src/lib/runtime/gr_message.i deleted file mode 100644 index 356bba5b58..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_message.i +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ - -class gr_message; -typedef boost::shared_ptr<gr_message> gr_message_sptr; -%template(gr_message_sptr) boost::shared_ptr<gr_message>; - -%rename(message_from_string) gr_make_message_from_string; -gr_message_sptr -gr_make_message_from_string(const std::string s, long type = 0, double arg1 = 0, double arg2 = 0); - -%rename(message) gr_make_message; -gr_message_sptr -gr_make_message(long type = 0, double arg1 = 0, double arg2 = 0, size_t length = 0); - -/*! - * \brief Message. - * - * The ideas and method names for adjustable message length were - * lifted from the click modular router "Packet" class. - */ -class gr_message { - gr_message (long type, double arg1, double arg2, size_t length); - - unsigned char *buf_data() const { return d_buf_start; } - size_t buf_len() const { return d_buf_end - d_buf_start; } - -public: - ~gr_message (); - - long type() const { return d_type; } - double arg1() const { return d_arg1; } - double arg2() const { return d_arg2; } - - void set_type(long type) { d_type = type; } - void set_arg1(double arg1) { d_arg1 = arg1; } - void set_arg2(double arg2) { d_arg2 = arg2; } - - size_t length() const; - std::string to_string() const; - -}; - -%rename(message_ncurrently_allocated) gr_message_ncurrently_allocated; -long gr_message_ncurrently_allocated(); - diff --git a/gnuradio-core/src/lib/runtime/gr_msg_accepter.cc b/gnuradio-core/src/lib/runtime/gr_msg_accepter.cc deleted file mode 100644 index 93d5fb20e8..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_accepter.cc +++ /dev/null @@ -1,59 +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 this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if HAVE_CONFIG_H -#include <config.h> -#endif - -#include <gr_msg_accepter.h> -#include <gr_block.h> -#include <gr_block_detail.h> -#include <gr_hier_block2.h> -#include <stdexcept> - -using namespace pmt; - -gr_msg_accepter::gr_msg_accepter() -{ -} - -gr_msg_accepter::~gr_msg_accepter() -{ - // NOP, required as virtual destructor -} - -void -gr_msg_accepter::post(pmt_t which_port, pmt_t msg) -{ - // Notify derived class, handled case by case - gr_block *p = dynamic_cast<gr_block *>(this); - if (p) { - p->_post(which_port,msg); - return; - } - gr_hier_block2 *p2 = dynamic_cast<gr_hier_block2 *>(this); - if (p2){ - // FIXME do the right thing - return; - } - - throw std::runtime_error("unknown derived class"); -} diff --git a/gnuradio-core/src/lib/runtime/gr_msg_accepter.h b/gnuradio-core/src/lib/runtime/gr_msg_accepter.h deleted file mode 100644 index a497ba6e7d..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_accepter.h +++ /dev/null @@ -1,43 +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 this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef INCLUDED_GR_MSG_ACCEPTER_H -#define INCLUDED_GR_MSG_ACCEPTER_H - -#include <gr_core_api.h> -#include <gruel/msg_accepter.h> -#include <gruel/pmt.h> - -/*! - * \brief Accepts messages and inserts them into a message queue, then notifies - * subclass gr_basic_block there is a message pending. - */ -class GR_CORE_API gr_msg_accepter : public gruel::msg_accepter -{ -public: - gr_msg_accepter(); - ~gr_msg_accepter(); - - void post(pmt::pmt_t which_port, pmt::pmt_t msg); - -}; - -#endif /* INCLUDED_GR_MSG_ACCEPTER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_msg_handler.cc b/gnuradio-core/src/lib/runtime/gr_msg_handler.cc deleted file mode 100644 index 0f93497088..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_handler.cc +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_msg_handler.h> - -gr_msg_handler::~gr_msg_handler () -{ -} diff --git a/gnuradio-core/src/lib/runtime/gr_msg_handler.h b/gnuradio-core/src/lib/runtime/gr_msg_handler.h deleted file mode 100644 index 57e8a95d62..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_handler.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_MSG_HANDLER_H -#define INCLUDED_GR_MSG_HANDLER_H - -#include <gr_core_api.h> -#include <gr_message.h> - -class gr_msg_handler; -typedef boost::shared_ptr<gr_msg_handler> gr_msg_handler_sptr; - -/*! - * \brief abstract class of message handlers - * \ingroup base - */ -class GR_CORE_API gr_msg_handler { -public: - virtual ~gr_msg_handler (); - - //! handle \p msg - virtual void handle (gr_message_sptr msg) = 0; -}; - -#endif /* INCLUDED_GR_MSG_HANDLER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_msg_handler.i b/gnuradio-core/src/lib/runtime/gr_msg_handler.i deleted file mode 100644 index f493dac1b2..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_handler.i +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ - -/*! - * \brief abstract class of message handlers - */ -class gr_msg_handler { -public: - virtual ~gr_msg_handler () = 0; - - //! handle \p msg - virtual void handle (gr_message_sptr msg) = 0; -}; diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.cc b/gnuradio-core/src/lib/runtime/gr_msg_queue.cc deleted file mode 100644 index 0cf0467715..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_queue.cc +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005,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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <gr_msg_queue.h> -#include <stdexcept> - -gr_msg_queue_sptr -gr_make_msg_queue(unsigned int limit) -{ - return gr_msg_queue_sptr (new gr_msg_queue(limit)); -} - -gr_msg_queue::gr_msg_queue(unsigned int limit) - : d_not_empty(), d_not_full(), - /*d_head(0), d_tail(0),*/ d_count(0), d_limit(limit) -{ -} - -gr_msg_queue::~gr_msg_queue() -{ - flush (); -} - -void -gr_msg_queue::insert_tail(gr_message_sptr msg) -{ - if (msg->d_next) - throw std::invalid_argument("gr_msg_queue::insert_tail: msg already in queue"); - - gruel::scoped_lock guard(d_mutex); - - while (full_p()) - d_not_full.wait(guard); - - if (d_tail == 0){ - d_tail = d_head = msg; - //msg->d_next = 0; - msg->d_next.reset(); - } - else { - d_tail->d_next = msg; - d_tail = msg; - //msg->d_next = 0; - msg->d_next.reset(); - } - d_count++; - d_not_empty.notify_one(); -} - -gr_message_sptr -gr_msg_queue::delete_head() -{ - gruel::scoped_lock guard(d_mutex); - gr_message_sptr m; - - while ((m = d_head) == 0) - d_not_empty.wait(guard); - - d_head = m->d_next; - if (d_head == 0){ - //d_tail = 0; - d_tail.reset(); - } - - d_count--; - // m->d_next = 0; - m->d_next.reset(); - d_not_full.notify_one(); - return m; -} - -gr_message_sptr -gr_msg_queue::delete_head_nowait() -{ - gruel::scoped_lock guard(d_mutex); - gr_message_sptr m; - - if ((m = d_head) == 0){ - //return 0; - return gr_message_sptr(); - } - - d_head = m->d_next; - if (d_head == 0){ - //d_tail = 0; - d_tail.reset(); - } - - d_count--; - //m->d_next = 0; - m->d_next.reset(); - d_not_full.notify_one(); - return m; -} - -void -gr_msg_queue::flush() -{ - gr_message_sptr m; - - while ((m = delete_head_nowait ()) != 0) - ; -} diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.h b/gnuradio-core/src/lib/runtime/gr_msg_queue.h deleted file mode 100644 index 86440bbb01..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_queue.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005,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_MSG_QUEUE_H -#define INCLUDED_GR_MSG_QUEUE_H - -#include <gr_core_api.h> -#include <gr_msg_handler.h> -#include <gruel/thread.h> - -class gr_msg_queue; -typedef boost::shared_ptr<gr_msg_queue> gr_msg_queue_sptr; - -GR_CORE_API gr_msg_queue_sptr gr_make_msg_queue(unsigned int limit=0); - -/*! - * \brief thread-safe message queue - * \ingroup misc - */ -class GR_CORE_API gr_msg_queue : public gr_msg_handler { - - gruel::mutex d_mutex; - gruel::condition_variable d_not_empty; - gruel::condition_variable d_not_full; - gr_message_sptr d_head; - gr_message_sptr d_tail; - unsigned int d_count; // # of messages in queue. - unsigned int d_limit; // max # of messages in queue. 0 -> unbounded - -public: - gr_msg_queue(unsigned int limit); - ~gr_msg_queue(); - - //! Generic msg_handler method: insert the message. - void handle(gr_message_sptr msg) { insert_tail (msg); } - - /*! - * \brief Insert message at tail of queue. - * \param msg message - * - * Block if queue if full. - */ - void insert_tail(gr_message_sptr msg); - - /*! - * \brief Delete message from head of queue and return it. - * Block if no message is available. - */ - gr_message_sptr delete_head(); - - /*! - * \brief If there's a message in the q, delete it and return it. - * If no message is available, return 0. - */ - gr_message_sptr delete_head_nowait(); - - //! Delete all messages from the queue - void flush(); - - //! is the queue empty? - bool empty_p() const { return d_count == 0; } - - //! is the queue full? - bool full_p() const { return d_limit != 0 && d_count >= d_limit; } - - //! return number of messages in queue - unsigned int count() const { return d_count; } - - //! return limit on number of message in queue. 0 -> unbounded - unsigned int limit() const { return d_limit; } - -}; - -#endif /* INCLUDED_GR_MSG_QUEUE_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.i b/gnuradio-core/src/lib/runtime/gr_msg_queue.i deleted file mode 100644 index 65cbe782b9..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_msg_queue.i +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005,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. - */ - -class gr_msg_queue; -typedef boost::shared_ptr<gr_msg_queue> gr_msg_queue_sptr; -%template(gr_msg_queue_sptr) boost::shared_ptr<gr_msg_queue>; - -%rename(msg_queue) gr_make_msg_queue; -gr_msg_queue_sptr gr_make_msg_queue(unsigned limit=0); - -/*! - * \brief thread-safe message queue - */ -%ignore gr_msg_queue; -class gr_msg_queue : public gr_msg_handler { -public: - gr_msg_queue(unsigned int limit); - ~gr_msg_queue(); - - //! Generic msg_handler method: insert the message. - //void handle(gr_message_sptr msg) { insert_tail (msg); } - - /*! - * \brief Insert message at tail of queue. - * \param msg message - * - * Block if queue if full. - */ - //void insert_tail(gr_message_sptr msg); - - /*! - * \brief Delete message from head of queue and return it. - * Block if no message is available. - */ - //gr_message_sptr delete_head(); - - /*! - * \brief If there's a message in the q, delete it and return it. - * If no message is available, return 0. - */ - gr_message_sptr delete_head_nowait(); - - //! is the queue empty? - bool empty_p() const; - - //! is the queue full? - bool full_p() const; - - //! return number of messages in queue - unsigned int count() const; - - //! Delete all messages from the queue - void flush(); -}; - -/* - * The following kludge-o-rama releases the Python global interpreter - * lock around these potentially blocking calls. We don't want - * libgnuradio-core to be dependent on Python, thus we create these - * functions that serve as replacements for the normal C++ delete_head - * and insert_tail methods. The %pythoncode smashes these new C++ - * functions into the gr.msg_queue wrapper class, so that everything - * appears normal. (An evil laugh is heard in the distance...) - */ -#ifdef SWIGPYTHON -%inline %{ - gr_message_sptr gr_py_msg_queue__delete_head(gr_msg_queue_sptr q) { - gr_message_sptr msg; - GR_PYTHON_BLOCKING_CODE( - msg = q->delete_head(); - ) - return msg; - } - - void gr_py_msg_queue__insert_tail(gr_msg_queue_sptr q, gr_message_sptr msg) { - GR_PYTHON_BLOCKING_CODE( - q->insert_tail(msg); - ) - } -%} - -// smash in new python delete_head and insert_tail methods... -%pythoncode %{ -gr_msg_queue_sptr.delete_head = gr_py_msg_queue__delete_head -gr_msg_queue_sptr.insert_tail = gr_py_msg_queue__insert_tail -gr_msg_queue_sptr.handle = gr_py_msg_queue__insert_tail -%} -#endif // SWIGPYTHON diff --git a/gnuradio-core/src/lib/runtime/gr_pagesize.cc b/gnuradio-core/src/lib/runtime/gr_pagesize.cc deleted file mode 100644 index e31e05ca70..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_pagesize.cc +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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_pagesize.h> -#include <unistd.h> -#include <stdio.h> - -#if defined(_WIN32) && defined(HAVE_GETPAGESIZE) -extern "C" size_t getpagesize(void); -#endif - -int -gr_pagesize () -{ - static int s_pagesize = -1; - - if (s_pagesize == -1){ -#if defined(HAVE_GETPAGESIZE) - s_pagesize = getpagesize (); -#elif defined (HAVE_SYSCONF) - s_pagesize = sysconf (_SC_PAGESIZE); - if (s_pagesize == -1){ - perror ("_SC_PAGESIZE"); - s_pagesize = 4096; - } -#else - fprintf (stderr, "gr_pagesize: no info; setting pagesize = 4096\n"); - s_pagesize = 4096; -#endif - } - return s_pagesize; -} - diff --git a/gnuradio-core/src/lib/runtime/gr_pagesize.h b/gnuradio-core/src/lib/runtime/gr_pagesize.h deleted file mode 100644 index 3e2daa9255..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_pagesize.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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 _GR_PAGESIZE_H_ -#define _GR_PAGESIZE_H_ - -#include <gr_core_api.h> - -/*! - * \brief return the page size in bytes - */ - -GR_CORE_API int gr_pagesize (); - - -#endif /* _GR_PAGESIZE_H_ */
\ No newline at end of file diff --git a/gnuradio-core/src/lib/runtime/gr_preferences.cc b/gnuradio-core/src/lib/runtime/gr_preferences.cc deleted file mode 100644 index a0f5616603..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_preferences.cc +++ /dev/null @@ -1,108 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,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_preferences.h> -#include <gr_sys_paths.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <string.h> - -#include <boost/filesystem/operations.hpp> -#include <boost/filesystem/path.hpp> -namespace fs = boost::filesystem; - -/* - * The simplest thing that could possibly work: - * the key is the filename; the value is the file contents. - */ - -static const char * -pathname (const char *key) -{ - static fs::path path; - path = fs::path(gr_appdata_path()) / ".gnuradio" / "prefs" / key; - return path.string().c_str(); -} - -static void -ensure_dir_path () -{ - fs::path path = fs::path(gr_appdata_path()) / ".gnuradio"; - if (!fs::is_directory(path)) fs::create_directory(path); - - path = path / "prefs"; - if (!fs::is_directory(path)) fs::create_directory(path); -} - -const char * -gr_preferences::get (const char *key) -{ - static char buf[1024]; - - FILE *fp = fopen (pathname (key), "r"); - if (fp == 0) { - perror (pathname (key)); - return 0; - } - - memset (buf, 0, sizeof (buf)); - size_t ret = fread (buf, 1, sizeof (buf) - 1, fp); - if(ret == 0) { - if(ferror(fp) != 0) { - perror (pathname (key)); - fclose (fp); - return 0; - } - } - fclose (fp); - return buf; -} - -void -gr_preferences::set (const char *key, const char *value) -{ - ensure_dir_path (); - - FILE *fp = fopen (pathname (key), "w"); - if (fp == 0){ - perror (pathname (key)); - return; - } - - size_t ret = fwrite (value, 1, strlen (value), fp); - if(ret == 0) { - if(ferror(fp) != 0) { - perror (pathname (key)); - fclose (fp); - return; - } - } - fclose (fp); -}; diff --git a/gnuradio-core/src/lib/runtime/gr_preferences.h b/gnuradio-core/src/lib/runtime/gr_preferences.h deleted file mode 100644 index bfcc0424b6..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_preferences.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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 _GR_PREFERENCES_H_ -#define _GR_PREFERENCES_H_ - -#include <gr_core_api.h> - -class GR_CORE_API gr_preferences { - public: - static const char *get (const char *key); - static void set (const char *key, const char *value); -}; - -#endif /* _GR_PREFERENCES_H_ */
\ No newline at end of file diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.cc b/gnuradio-core/src/lib/runtime/gr_realtime.cc deleted file mode 100644 index 75b497999d..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_realtime.cc +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007,2008 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_realtime.h> - -gr_rt_status_t -gr_enable_realtime_scheduling() -{ - return gruel::enable_realtime_scheduling(); -} diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.h b/gnuradio-core/src/lib/runtime/gr_realtime.h deleted file mode 100644 index fe6549039f..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_realtime.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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_REALTIME_H -#define INCLUDED_GR_REALTIME_H - -#include <gr_core_api.h> -#include <gruel/realtime.h> - -typedef gruel::rt_status_t gr_rt_status_t; - -/*! - * \brief If possible, enable high-priority "real time" scheduling. - * \ingroup misc - */ -GR_CORE_API gr_rt_status_t gr_enable_realtime_scheduling(); - -#endif /* INCLUDED_GR_REALTIME_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.i b/gnuradio-core/src/lib/runtime/gr_realtime.i deleted file mode 100644 index 1051d3e2b3..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_realtime.i +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ - -%rename(enable_realtime_scheduling) gr_enable_realtime_scheduling; - -// NOTE: This is duplicated from gruel/src/include/gruel/gr_realtime.h, -// and must be kept in sync with it. This is the least evil workaround -// for allowing 3rd party code builds to work when GNU Radio is -// installed from binary packages into the standard system directories. -// Otherwise, they can't find #include <gruel/gr_realtime.h>, since -// pkg-config strips -I/usr/include from the --cflags path. - -namespace gruel { - - typedef enum { - RT_OK = 0, - RT_NOT_IMPLEMENTED, - RT_NO_PRIVS, - RT_OTHER_ERROR - } rt_status_t; - -} - -typedef gruel::rt_status_t gr_rt_status_t; -gr_rt_status_t gr_enable_realtime_scheduling(); diff --git a/gnuradio-core/src/lib/runtime/gr_runtime_types.h b/gnuradio-core/src/lib/runtime/gr_runtime_types.h deleted file mode 100644 index 0d61492881..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_runtime_types.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2007 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_RUNTIME_TYPES_H -#define INCLUDED_GR_RUNTIME_TYPES_H - -#include <gr_core_api.h> -#include <gr_types.h> - -/* - * typedefs for smart pointers we use throughout the runtime system - */ - -class gr_basic_block; -class gr_block; -class gr_block_detail; -class gr_hier_block2; -class gr_io_signature; -class gr_buffer; -class gr_buffer_reader; -class gr_flowgraph; -class gr_flat_flowgraph; -class gr_top_block; -class gr_top_block_detail; - -typedef boost::shared_ptr<gr_basic_block> gr_basic_block_sptr; -typedef boost::shared_ptr<gr_block> gr_block_sptr; -typedef boost::shared_ptr<gr_block_detail> gr_block_detail_sptr; -typedef boost::shared_ptr<gr_hier_block2> gr_hier_block2_sptr; -typedef boost::shared_ptr<gr_io_signature> gr_io_signature_sptr; -typedef boost::shared_ptr<gr_buffer> gr_buffer_sptr; -typedef boost::shared_ptr<gr_buffer_reader> gr_buffer_reader_sptr; -typedef boost::shared_ptr<gr_flowgraph> gr_flowgraph_sptr; -typedef boost::shared_ptr<gr_flat_flowgraph> gr_flat_flowgraph_sptr; -typedef boost::shared_ptr<gr_top_block> gr_top_block_sptr; - -#endif /* INCLUDED_GR_RUNTIME_TYPES_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler.cc b/gnuradio-core/src/lib/runtime/gr_scheduler.cc deleted file mode 100644 index c691f5d99f..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_scheduler.cc +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <gr_scheduler.h> - -gr_scheduler::gr_scheduler(gr_flat_flowgraph_sptr ffg, int max_noutput_items) -{ -} - -gr_scheduler::~gr_scheduler() -{ -} diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler.h b/gnuradio-core/src/lib/runtime/gr_scheduler.h deleted file mode 100644 index 6d130327fc..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_scheduler.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ - -#ifndef INCLUDED_GR_SCHEDULER_H -#define INCLUDED_GR_SCHEDULER_H - -#include <gr_core_api.h> -#include <boost/utility.hpp> -#include <gr_block.h> -#include <gr_flat_flowgraph.h> - - -class gr_scheduler; -typedef boost::shared_ptr<gr_scheduler> gr_scheduler_sptr; - - -/*! - * \brief Abstract scheduler that takes a flattened flow graph and runs it. - * - * Preconditions: details, buffers and buffer readers have been assigned. - */ -class GR_CORE_API gr_scheduler : boost::noncopyable -{ - -public: - /*! - * \brief Construct a scheduler and begin evaluating the graph. - * - * The scheduler will continue running until all blocks until they - * report that they are done or the stop method is called. - */ - gr_scheduler(gr_flat_flowgraph_sptr ffg, int max_noutput_items); - - virtual ~gr_scheduler(); - - /*! - * \brief Tell the scheduler to stop executing. - */ - virtual void stop() = 0; - - /*! - * \brief Block until the graph is done. - */ - virtual void wait() = 0; -}; - -#endif /* INCLUDED_GR_SCHEDULER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.cc b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.cc deleted file mode 100644 index 2c96def6d1..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.cc +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <gr_scheduler_sts.h> -#include <gr_single_threaded_scheduler.h> -#include <gruel/thread_body_wrapper.h> - -class sts_container -{ - gr_block_vector_t d_blocks; - -public: - - sts_container(gr_block_vector_t blocks) - : d_blocks(blocks) {} - - void operator()() - { - gr_make_single_threaded_scheduler(d_blocks)->run(); - } -}; - - -gr_scheduler_sptr -gr_scheduler_sts::make(gr_flat_flowgraph_sptr ffg, int max_noutput_items) -{ - return gr_scheduler_sptr(new gr_scheduler_sts(ffg, max_noutput_items)); -} - -gr_scheduler_sts::gr_scheduler_sts(gr_flat_flowgraph_sptr ffg, int max_noutput_items) - : gr_scheduler(ffg, max_noutput_items) -{ - // Split the flattened flow graph into discrete partitions, each - // of which is topologically sorted. - - std::vector<gr_basic_block_vector_t> graphs = ffg->partition(); - - // For each partition, create a thread to evaluate it using - // an instance of the gr_single_threaded_scheduler - - for (std::vector<gr_basic_block_vector_t>::iterator p = graphs.begin(); - p != graphs.end(); p++) { - - gr_block_vector_t blocks = gr_flat_flowgraph::make_block_vector(*p); - d_threads.create_thread( - gruel::thread_body_wrapper<sts_container>(sts_container(blocks), - "single-threaded-scheduler")); - } -} - -gr_scheduler_sts::~gr_scheduler_sts() -{ - stop(); -} - -void -gr_scheduler_sts::stop() -{ - d_threads.interrupt_all(); -} - -void -gr_scheduler_sts::wait() -{ - d_threads.join_all(); -} diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h deleted file mode 100644 index 011874ec0a..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ -#ifndef INCLUDED_GR_SCHEDULER_STS_H -#define INCLUDED_GR_SCHEDULER_STS_H - -#include <gr_core_api.h> -#include <gr_scheduler.h> -#include <gruel/thread_group.h> - -/*! - * \brief Concrete scheduler that uses the single_threaded_scheduler - */ -class GR_CORE_API gr_scheduler_sts : public gr_scheduler -{ - gruel::thread_group d_threads; - -protected: - /*! - * \brief Construct a scheduler and begin evaluating the graph. - * - * The scheduler will continue running until all blocks until they - * report that they are done or the stop method is called. - */ - gr_scheduler_sts(gr_flat_flowgraph_sptr ffg, int max_noutput_items); - -public: - static gr_scheduler_sptr make(gr_flat_flowgraph_sptr ffg, int max_noutput_items); - - ~gr_scheduler_sts(); - - /*! - * \brief Tell the scheduler to stop executing. - */ - void stop(); - - /*! - * \brief Block until the graph is done. - */ - void wait(); -}; - - - - -#endif /* INCLUDED_GR_SCHEDULER_STS_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.cc b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.cc deleted file mode 100644 index 2824eb1b3b..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.cc +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <gr_scheduler_tpb.h> -#include <gr_tpb_thread_body.h> -#include <gruel/thread_body_wrapper.h> -#include <sstream> - -/* - * You know, a lambda expression would be sooo much easier... - */ -class tpb_container -{ - gr_block_sptr d_block; - int d_max_noutput_items; - -public: - tpb_container(gr_block_sptr block, int max_noutput_items) - : d_block(block), d_max_noutput_items(max_noutput_items) {} - - void operator()() - { - gr_tpb_thread_body body(d_block, d_max_noutput_items); - } -}; - - -gr_scheduler_sptr -gr_scheduler_tpb::make(gr_flat_flowgraph_sptr ffg, int max_noutput_items) -{ - return gr_scheduler_sptr(new gr_scheduler_tpb(ffg, max_noutput_items)); -} - -gr_scheduler_tpb::gr_scheduler_tpb(gr_flat_flowgraph_sptr ffg, int max_noutput_items) - : gr_scheduler(ffg, max_noutput_items) -{ - // Get a topologically sorted vector of all the blocks in use. - // Being topologically sorted probably isn't going to matter, but - // there's a non-zero chance it might help... - - gr_basic_block_vector_t used_blocks = ffg->calc_used_blocks(); - used_blocks = ffg->topological_sort(used_blocks); - gr_block_vector_t blocks = gr_flat_flowgraph::make_block_vector(used_blocks); - - // Ensure that the done flag is clear on all blocks - - for (size_t i = 0; i < blocks.size(); i++){ - blocks[i]->detail()->set_done(false); - } - - // Fire off a thead for each block - - for (size_t i = 0; i < blocks.size(); i++){ - std::stringstream name; - name << "thread-per-block[" << i << "]: " << blocks[i]; - - // If set, use internal value instead of global value - if(blocks[i]->is_set_max_noutput_items()) - max_noutput_items = blocks[i]->max_noutput_items(); - - d_threads.create_thread( - gruel::thread_body_wrapper<tpb_container>(tpb_container(blocks[i], max_noutput_items), - name.str())); - } -} - -gr_scheduler_tpb::~gr_scheduler_tpb() -{ - stop(); -} - -void -gr_scheduler_tpb::stop() -{ - d_threads.interrupt_all(); -} - -void -gr_scheduler_tpb::wait() -{ - d_threads.join_all(); -} diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h deleted file mode 100644 index a9b3abcfa6..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ -#ifndef INCLUDED_GR_SCHEDULER_TPB_H -#define INCLUDED_GR_SCHEDULER_TPB_H - -#include <gr_core_api.h> -#include <gr_scheduler.h> -#include <gruel/thread_group.h> - -/*! - * \brief Concrete scheduler that uses a kernel thread-per-block - */ -class GR_CORE_API gr_scheduler_tpb : public gr_scheduler -{ - gruel::thread_group d_threads; - -protected: - /*! - * \brief Construct a scheduler and begin evaluating the graph. - * - * The scheduler will continue running until all blocks until they - * report that they are done or the stop method is called. - */ - gr_scheduler_tpb(gr_flat_flowgraph_sptr ffg, int max_noutput_items); - -public: - static gr_scheduler_sptr make(gr_flat_flowgraph_sptr ffg, int max_noutput_items=100000); - - ~gr_scheduler_tpb(); - - /*! - * \brief Tell the scheduler to stop executing. - */ - void stop(); - - /*! - * \brief Block until the graph is done. - */ - void wait(); -}; - - -#endif /* INCLUDED_GR_SCHEDULER_TPB_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_select_handler.cc b/gnuradio-core/src/lib/runtime/gr_select_handler.cc deleted file mode 100644 index 0fc86354a6..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_select_handler.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_select_handler.h> - -gr_select_handler::gr_select_handler(int fd) - : d_fd(fd) -{ -} - -gr_select_handler::~gr_select_handler() -{ -} diff --git a/gnuradio-core/src/lib/runtime/gr_select_handler.h b/gnuradio-core/src/lib/runtime/gr_select_handler.h deleted file mode 100644 index c4c3592132..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_select_handler.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_SELECT_HANDLER_H -#define INCLUDED_GR_SELECT_HANDLER_H - -#include <gr_core_api.h> -#include <boost/shared_ptr.hpp> - -class gr_select_handler; -typedef boost::shared_ptr<gr_select_handler> gr_select_handler_sptr; - - -/*! - * \brief Abstract handler for select based notification. - * \ingroup base - * - * \sa gr_dispatcher - */ -class GR_CORE_API gr_select_handler -{ - int d_fd; - -protected: - gr_select_handler(int file_descriptor); - -public: - virtual ~gr_select_handler(); - - int fd() const { return d_fd; } - int file_descriptor() const { return d_fd; } - - /*! - * \brief Called when file_descriptor is readable. - * - * Called when the dispatcher detects that file_descriptor can - * be read without blocking. - */ - virtual void handle_read() = 0; - - /*! - * \brief Called when file_descriptor is writable. - * - * Called when dispatcher detects that file descriptor can be - * written without blocking. - */ - virtual void handle_write() = 0; - - /*! - * Called each time around the dispatcher loop to determine whether - * this handler's file descriptor should be added to the list on which - * read events can occur. The default method returns true, indicating - * that by default, all handlers are interested in read events. - */ - virtual bool readable() { return true; } - - /*! - * Called each time around the dispatcher loop to determine whether - * this handler's file descriptor should be added to the list on which - * write events can occur. The default method returns true, indicating - * that by default, all handlers are interested in write events. - */ - virtual bool writable() { return true; } -}; - -#endif /* INCLUDED_GR_SELECT_HANDLER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc deleted file mode 100644 index 1bb9e9b0a8..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc +++ /dev/null @@ -1,364 +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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_single_threaded_scheduler.h> -#include <gr_block.h> -#include <gr_block_detail.h> -#include <gr_buffer.h> -#include <boost/thread.hpp> -#include <boost/format.hpp> -#include <iostream> -#include <limits> -#include <assert.h> -#include <stdio.h> - -// must be defined to either 0 or 1 -#define ENABLE_LOGGING 0 - -#if (ENABLE_LOGGING) -#define LOG(x) do { x; } while(0) -#else -#define LOG(x) do {;} while(0) -#endif - -static int which_scheduler = 0; - -gr_single_threaded_scheduler_sptr -gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks) -{ - return - gr_single_threaded_scheduler_sptr (new gr_single_threaded_scheduler (blocks)); -} - -gr_single_threaded_scheduler::gr_single_threaded_scheduler ( - const std::vector<gr_block_sptr> &blocks) - : d_blocks (blocks), d_enabled (true), d_log(0) -{ - if (ENABLE_LOGGING){ - std::string name = str(boost::format("sst-%d.log") % which_scheduler++); - d_log = new std::ofstream(name.c_str()); - *d_log << "gr_single_threaded_scheduler: " - << d_blocks.size () - << " blocks\n"; - } -} - -gr_single_threaded_scheduler::~gr_single_threaded_scheduler () -{ - if (ENABLE_LOGGING) - delete d_log; -} - -void -gr_single_threaded_scheduler::run () -{ - // d_enabled = true; // KLUDGE - main_loop (); -} - -void -gr_single_threaded_scheduler::stop () -{ - if (0) - std::cout << "gr_singled_threaded_scheduler::stop() " - << this << std::endl; - d_enabled = false; -} - -inline static unsigned int -round_up (unsigned int n, unsigned int multiple) -{ - return ((n + multiple - 1) / multiple) * multiple; -} - -inline static unsigned int -round_down (unsigned int n, unsigned int multiple) -{ - return (n / multiple) * multiple; -} - -// -// Return minimum available write space in all our downstream buffers -// or -1 if we're output blocked and the output we're blocked -// on is done. -// -static int -min_available_space (gr_block_detail *d, int output_multiple) -{ - int min_space = std::numeric_limits<int>::max(); - - for (int i = 0; i < d->noutputs (); i++){ - int n = round_down (d->output(i)->space_available (), output_multiple); - if (n == 0){ // We're blocked on output. - if (d->output(i)->done()){ // Downstream is done, therefore we're done. - return -1; - } - return 0; - } - min_space = std::min (min_space, n); - } - return min_space; -} - -void -gr_single_threaded_scheduler::main_loop () -{ - static const int DEFAULT_CAPACITY = 16; - - int noutput_items; - gr_vector_int ninput_items_required (DEFAULT_CAPACITY); - gr_vector_int ninput_items (DEFAULT_CAPACITY); - gr_vector_const_void_star input_items (DEFAULT_CAPACITY); - gr_vector_void_star output_items (DEFAULT_CAPACITY); - unsigned int bi; - unsigned int nalive; - int max_items_avail; - bool made_progress_last_pass; - bool making_progress; - - for (unsigned i = 0; i < d_blocks.size (); i++) - d_blocks[i]->detail()->set_done (false); // reset any done flags - - for (unsigned i = 0; i < d_blocks.size (); i++) // enable any drivers, etc. - d_blocks[i]->start(); - - - bi = 0; - made_progress_last_pass = true; - making_progress = false; - - // Loop while there are still blocks alive - - nalive = d_blocks.size (); - while (d_enabled && nalive > 0){ - - if (boost::this_thread::interruption_requested()) - break; - - gr_block *m = d_blocks[bi].get (); - gr_block_detail *d = m->detail().get (); - - LOG(*d_log << std::endl << m); - - if (d->done ()) - goto next_block; - - if (d->source_p ()){ - // Invoke sources as a last resort. As long as the previous pass - // made progress, don't call a source. - if (made_progress_last_pass){ - LOG(*d_log << " Skipping source\n"); - goto next_block; - } - - ninput_items_required.resize (0); - ninput_items.resize (0); - input_items.resize (0); - output_items.resize (d->noutputs ()); - - // determine the minimum available output space - noutput_items = min_available_space (d, m->output_multiple ()); - LOG(*d_log << " source\n noutput_items = " << noutput_items << std::endl); - if (noutput_items == -1) // we're done - goto were_done; - - if (noutput_items == 0){ // we're output blocked - LOG(*d_log << " BLKD_OUT\n"); - goto next_block; - } - - goto setup_call_to_work; // jump to common code - } - - else if (d->sink_p ()){ - ninput_items_required.resize (d->ninputs ()); - ninput_items.resize (d->ninputs ()); - input_items.resize (d->ninputs ()); - output_items.resize (0); - LOG(*d_log << " sink\n"); - - max_items_avail = 0; - for (int i = 0; i < d->ninputs (); i++){ - ninput_items[i] = d->input(i)->items_available(); - //if (ninput_items[i] == 0 && d->input(i)->done()) - if (ninput_items[i] < m->output_multiple() && d->input(i)->done()) - goto were_done; - - max_items_avail = std::max (max_items_avail, ninput_items[i]); - } - - // take a swag at how much output we can sink - noutput_items = (int) (max_items_avail * m->relative_rate ()); - noutput_items = round_down (noutput_items, m->output_multiple ()); - LOG(*d_log << " max_items_avail = " << max_items_avail << std::endl); - LOG(*d_log << " noutput_items = " << noutput_items << std::endl); - - if (noutput_items == 0){ // we're blocked on input - LOG(*d_log << " BLKD_IN\n"); - goto next_block; - } - - goto try_again; // Jump to code shared with regular case. - } - - else { - // do the regular thing - ninput_items_required.resize (d->ninputs ()); - ninput_items.resize (d->ninputs ()); - input_items.resize (d->ninputs ()); - output_items.resize (d->noutputs ()); - - max_items_avail = 0; - for (int i = 0; i < d->ninputs (); i++){ - ninput_items[i] = d->input(i)->items_available (); - max_items_avail = std::max (max_items_avail, ninput_items[i]); - } - - // determine the minimum available output space - noutput_items = min_available_space (d, m->output_multiple ()); - if (ENABLE_LOGGING){ - *d_log << " regular "; - if (m->relative_rate() >= 1.0) - *d_log << "1:" << m->relative_rate() << std::endl; - else - *d_log << 1.0/m->relative_rate() << ":1\n"; - *d_log << " max_items_avail = " << max_items_avail << std::endl; - *d_log << " noutput_items = " << noutput_items << std::endl; - } - if (noutput_items == -1) // we're done - goto were_done; - - if (noutput_items == 0){ // we're output blocked - LOG(*d_log << " BLKD_OUT\n"); - goto next_block; - } - -#if 0 - // Compute best estimate of noutput_items that we can really use. - noutput_items = - std::min ((unsigned) noutput_items, - std::max ((unsigned) m->output_multiple(), - round_up ((unsigned) (max_items_avail * m->relative_rate()), - m->output_multiple ()))); - - LOG(*d_log << " revised noutput_items = " << noutput_items << std::endl); -#endif - - try_again: - if (m->fixed_rate()){ - // try to work it forward starting with max_items_avail. - // We want to try to consume all the input we've got. - int reqd_noutput_items = m->fixed_rate_ninput_to_noutput(max_items_avail); - reqd_noutput_items = round_up(reqd_noutput_items, m->output_multiple()); - if (reqd_noutput_items > 0 && reqd_noutput_items <= noutput_items) - noutput_items = reqd_noutput_items; - } - - // ask the block how much input they need to produce noutput_items - m->forecast (noutput_items, ninput_items_required); - - // See if we've got sufficient input available - - int i; - for (i = 0; i < d->ninputs (); i++) - if (ninput_items_required[i] > ninput_items[i]) // not enough - break; - - if (i < d->ninputs ()){ // not enough input on input[i] - // if we can, try reducing the size of our output request - if (noutput_items > m->output_multiple ()){ - noutput_items /= 2; - noutput_items = round_up (noutput_items, m->output_multiple ()); - goto try_again; - } - - // We're blocked on input - LOG(*d_log << " BLKD_IN\n"); - if (d->input(i)->done()) // If the upstream block is done, we're done - goto were_done; - - // Is it possible to ever fulfill this request? - if (ninput_items_required[i] > d->input(i)->max_possible_items_available ()){ - // Nope, never going to happen... - std::cerr << "\nsched: <gr_block " << m->name() - << " (" << m->unique_id() << ")>" - << " is requesting more input data\n" - << " than we can provide.\n" - << " ninput_items_required = " - << ninput_items_required[i] << "\n" - << " max_possible_items_available = " - << d->input(i)->max_possible_items_available() << "\n" - << " If this is a filter, consider reducing the number of taps.\n"; - goto were_done; - } - - goto next_block; - } - - // We've got enough data on each input to produce noutput_items. - // Finish setting up the call to work. - - for (int i = 0; i < d->ninputs (); i++) - input_items[i] = d->input(i)->read_pointer(); - - setup_call_to_work: - - for (int i = 0; i < d->noutputs (); i++) - output_items[i] = d->output(i)->write_pointer(); - - // Do the actual work of the block - int n = m->general_work (noutput_items, ninput_items, - input_items, output_items); - LOG(*d_log << " general_work: noutput_items = " << noutput_items - << " result = " << n << std::endl); - - if (n == -1) // block is done - goto were_done; - - d->produce_each (n); // advance write pointers - if (n > 0) - making_progress = true; - - goto next_block; - } - assert (0); - - were_done: - LOG(*d_log << " were_done\n"); - d->set_done (true); - nalive--; - - next_block: - if (++bi >= d_blocks.size ()){ - bi = 0; - made_progress_last_pass = making_progress; - making_progress = false; - } - } - - for (unsigned i = 0; i < d_blocks.size (); i++) // disable any drivers, etc. - d_blocks[i]->stop(); -} diff --git a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h deleted file mode 100644 index 3a95c7194f..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h +++ /dev/null @@ -1,62 +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. - */ - -#ifndef INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H -#define INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H - -#include <gr_core_api.h> -#include <gr_runtime_types.h> -#include <fstream> - -class gr_single_threaded_scheduler; -typedef boost::shared_ptr<gr_single_threaded_scheduler> gr_single_threaded_scheduler_sptr; - - -/*! - * \brief Simple scheduler for stream computations. - * \ingroup internal - */ - -class GR_CORE_API gr_single_threaded_scheduler { - public: - ~gr_single_threaded_scheduler (); - - void run (); - void stop (); - - private: - const std::vector<gr_block_sptr> d_blocks; - volatile bool d_enabled; - std::ofstream *d_log; - - gr_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks); - - void main_loop (); - - friend GR_CORE_API gr_single_threaded_scheduler_sptr - gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks); -}; - -GR_CORE_API gr_single_threaded_scheduler_sptr -gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks); - -#endif /* INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i deleted file mode 100644 index 7305cc9ada..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i +++ /dev/null @@ -1,54 +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_runtime.h> - -class gr_single_threaded_scheduler; -typedef boost::shared_ptr<gr_single_threaded_scheduler> gr_single_threaded_scheduler_sptr; -%template(gr_single_threaded_scheduler_sptr) boost::shared_ptr<gr_single_threaded_scheduler>; -%rename(single_threaded_scheduler) gr_make_single_threaded_scheduler; -%ignore gr_single_threaded_scheduler; - -gr_single_threaded_scheduler_sptr -gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &modules); - -class gr_single_threaded_scheduler { - public: - ~gr_single_threaded_scheduler (); - - // void run (); - void stop (); - - private: - gr_single_threaded_scheduler (const std::vector<gr_block_sptr> &modules); -}; - -#ifdef SWIGPYTHON -%inline %{ - void sts_pyrun (gr_single_threaded_scheduler_sptr s) { - Py_BEGIN_ALLOW_THREADS; // release global interpreter lock - s->run (); - Py_END_ALLOW_THREADS; // acquire global interpreter lock - } -%} -#endif - diff --git a/gnuradio-core/src/lib/runtime/gr_sptr_magic.cc b/gnuradio-core/src/lib/runtime/gr_sptr_magic.cc deleted file mode 100644 index 7fdadf24a2..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sptr_magic.cc +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <gr_sptr_magic.h> -#include <gr_hier_block2.h> -#include <map> -#include <stdexcept> - - -#include <gruel/thread.h> - -namespace gnuradio { - - static gruel::mutex s_mutex; - typedef std::map<gr_basic_block*, gr_basic_block_sptr> sptr_map; - static sptr_map s_map; - - void - detail::sptr_magic::create_and_stash_initial_sptr(gr_hier_block2 *p) - { - gr_basic_block_sptr sptr(p); - gruel::scoped_lock guard(s_mutex); - s_map.insert(sptr_map::value_type(static_cast<gr_basic_block *>(p), sptr)); - } - - - gr_basic_block_sptr - detail::sptr_magic::fetch_initial_sptr(gr_basic_block *p) - { - /* - * If p isn't a subclass of gr_hier_block2, just create the - * shared ptr and return it. - */ - gr_hier_block2 *hb2 = dynamic_cast<gr_hier_block2 *>(p); - if (!hb2){ - return gr_basic_block_sptr(p); - } - - /* - * p is a subclass of gr_hier_block2, thus we've already created the shared pointer - * and stashed it away. Fish it out and return it. - */ - gruel::scoped_lock guard(s_mutex); - sptr_map::iterator pos = s_map.find(static_cast<gr_basic_block *>(p)); - if (pos == s_map.end()) - throw std::invalid_argument("gr_sptr_magic: invalid pointer!"); - - gr_basic_block_sptr sptr = pos->second; - s_map.erase(pos); - return sptr; - } -}; diff --git a/gnuradio-core/src/lib/runtime/gr_sptr_magic.h b/gnuradio-core/src/lib/runtime/gr_sptr_magic.h deleted file mode 100644 index 3d997539c0..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sptr_magic.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ -#ifndef INCLUDED_GR_SPTR_MAGIC_H -#define INCLUDED_GR_SPTR_MAGIC_H - -#include <gr_core_api.h> -#include <boost/shared_ptr.hpp> - -class gr_basic_block; -class gr_hier_block2; - -namespace gnuradio { - - namespace detail { - - class GR_CORE_API sptr_magic { - public: - static boost::shared_ptr<gr_basic_block> fetch_initial_sptr(gr_basic_block *p); - static void create_and_stash_initial_sptr(gr_hier_block2 *p); - }; - }; - - /* - * \brief New! Improved! Standard method to get/create the boost::shared_ptr for a block. - */ - template<class T> - boost::shared_ptr<T> - get_initial_sptr(T *p) - { - return boost::dynamic_pointer_cast<T, gr_basic_block>(detail::sptr_magic::fetch_initial_sptr(p)); - } -}; - -#endif /* INCLUDED_GR_SPTR_MAGIC_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_sync_block.cc b/gnuradio-core/src/lib/runtime/gr_sync_block.cc deleted file mode 100644 index 94efcdc8ee..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_block.cc +++ /dev/null @@ -1,68 +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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_sync_block.h> - -gr_sync_block::gr_sync_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature) - : gr_block(name, input_signature, output_signature) -{ - set_fixed_rate(true); -} - - -void -gr_sync_block::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput (noutput_items); -} - -int -gr_sync_block::fixed_rate_noutput_to_ninput(int noutput_items) -{ - return noutput_items + history() - 1; -} - -int -gr_sync_block::fixed_rate_ninput_to_noutput(int ninput_items) -{ - return std::max(0, ninput_items - (int)history() + 1); -} - -int -gr_sync_block::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int r = work (noutput_items, input_items, output_items); - if (r > 0) - consume_each (r); - return r; -} diff --git a/gnuradio-core/src/lib/runtime/gr_sync_block.h b/gnuradio-core/src/lib/runtime/gr_sync_block.h deleted file mode 100644 index 1e4109b035..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_block.h +++ /dev/null @@ -1,66 +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. - */ - -#ifndef INCLUDED_GR_SYNC_BLOCK_H -#define INCLUDED_GR_SYNC_BLOCK_H - -#include <gr_core_api.h> -#include <gr_block.h> - -/*! - * \brief synchronous 1:1 input to output with history - * \ingroup base_blk - * - * Override work to provide the signal processing implementation. - */ -class GR_CORE_API gr_sync_block : public gr_block -{ - protected: - gr_sync_block (void){} //allows pure virtual interface sub-classes - gr_sync_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - - public: - - /*! - * \brief just like gr_block::general_work, only this arranges to call consume_each for you - * - * The user must override work to define the signal processing code - */ - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) = 0; - - - // gr_sync_block overrides these to assist work - 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); - - int fixed_rate_ninput_to_noutput(int ninput); - int fixed_rate_noutput_to_ninput(int noutput); -}; - -#endif /* INCLUDED_GR_SYNC_BLOCK_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_sync_block.i b/gnuradio-core/src/lib/runtime/gr_sync_block.i deleted file mode 100644 index d3e1bb9578..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_block.i +++ /dev/null @@ -1,29 +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. - */ -class gr_sync_block : public gr_block -{ - protected: - - gr_sync_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); -}; diff --git a/gnuradio-core/src/lib/runtime/gr_sync_decimator.cc b/gnuradio-core/src/lib/runtime/gr_sync_decimator.cc deleted file mode 100644 index a0f907db53..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_decimator.cc +++ /dev/null @@ -1,69 +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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_sync_decimator.h> - -gr_sync_decimator::gr_sync_decimator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned decimation) - : gr_sync_block (name, input_signature, output_signature) -{ - set_decimation (decimation); -} - -void -gr_sync_decimator::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size (); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput(noutput_items); -} - -int -gr_sync_decimator::fixed_rate_noutput_to_ninput(int noutput_items) -{ - return noutput_items * decimation() + history() - 1; -} - -int -gr_sync_decimator::fixed_rate_ninput_to_noutput(int ninput_items) -{ - return std::max(0, ninput_items - (int)history() + 1) / decimation(); -} - -int -gr_sync_decimator::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int r = work (noutput_items, input_items, output_items); - if (r > 0) - consume_each (r * decimation ()); - return r; -} - diff --git a/gnuradio-core/src/lib/runtime/gr_sync_decimator.h b/gnuradio-core/src/lib/runtime/gr_sync_decimator.h deleted file mode 100644 index 657aba9852..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_decimator.h +++ /dev/null @@ -1,69 +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. - */ - -#ifndef INCLUDED_GR_SYNC_DECIMATOR_H -#define INCLUDED_GR_SYNC_DECIMATOR_H - -#include <gr_core_api.h> -#include <gr_sync_block.h> - -/*! - * \brief synchronous N:1 input to output with history - * \ingroup base_blk - * - * Override work to provide the signal processing implementation. - */ -class GR_CORE_API gr_sync_decimator : public gr_sync_block -{ - private: - unsigned d_decimation; - - protected: - gr_sync_decimator (void){} //allows pure virtual interface sub-classes - gr_sync_decimator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned decimation); - public: - - unsigned decimation () const { return d_decimation; } - void set_decimation (unsigned decimation) - { - d_decimation = decimation; - set_relative_rate (1.0 / decimation); - } - - // gr_sync_decimator overrides these to assist work - 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); - - // derived classes should override work - - int fixed_rate_ninput_to_noutput(int ninput); - int fixed_rate_noutput_to_ninput(int noutput); -}; - - -#endif /* INCLUDED_GR_SYNC_DECIMATOR_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_sync_decimator.i b/gnuradio-core/src/lib/runtime/gr_sync_decimator.i deleted file mode 100644 index af4574b193..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_decimator.i +++ /dev/null @@ -1,31 +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. - */ - -class gr_sync_decimator : public gr_sync_block -{ - protected: - - gr_sync_decimator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned decimation); -}; diff --git a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.cc b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.cc deleted file mode 100644 index ece873c14a..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2008 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_sync_interpolator.h> - -gr_sync_interpolator::gr_sync_interpolator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned interpolation) - : gr_sync_block (name, input_signature, output_signature) -{ - set_interpolation (interpolation); -} - -void -gr_sync_interpolator::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size (); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput(noutput_items); -} - -int -gr_sync_interpolator::fixed_rate_noutput_to_ninput(int noutput_items) -{ - return noutput_items / interpolation() + history() - 1; -} - -int -gr_sync_interpolator::fixed_rate_ninput_to_noutput(int ninput_items) -{ - return std::max(0, ninput_items - (int)history() + 1) * interpolation(); -} - -int -gr_sync_interpolator::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int r = work (noutput_items, input_items, output_items); - if (r > 0) - consume_each (r / interpolation ()); - return r; -} - - diff --git a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h deleted file mode 100644 index 86d2fde430..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2008 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_SYNC_INTERPOLATOR_H -#define INCLUDED_GR_SYNC_INTERPOLATOR_H - -#include <gr_core_api.h> -#include <gr_sync_block.h> - -/*! - * \brief synchronous 1:N input to output with history - * \ingroup base_blk - * - * Override work to provide the signal processing implementation. - */ -class GR_CORE_API gr_sync_interpolator : public gr_sync_block -{ - private: - unsigned d_interpolation; - - protected: - gr_sync_interpolator (void){} //allows pure virtual interface sub-classes - gr_sync_interpolator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned interpolation); - public: - - unsigned interpolation () const { return d_interpolation; } - void set_interpolation (unsigned interpolation) - { - d_interpolation = interpolation; - set_relative_rate (1.0 * interpolation); - set_output_multiple (interpolation); - } - - // gr_sync_interpolator overrides these to assist work - 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); - - // derived classes should override work - - int fixed_rate_ninput_to_noutput(int ninput); - int fixed_rate_noutput_to_ninput(int noutput); -}; - - -#endif /* INCLUDED_GR_SYNC_INTERPOLATOR_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.i b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.i deleted file mode 100644 index 6f8b08252f..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.i +++ /dev/null @@ -1,31 +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. - */ - -class gr_sync_interpolator : public gr_sync_block -{ - protected: - - gr_sync_interpolator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned interpolation); -}; diff --git a/gnuradio-core/src/lib/runtime/gr_sys_paths.cc b/gnuradio-core/src/lib/runtime/gr_sys_paths.cc deleted file mode 100644 index b4918af33d..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sys_paths.cc +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 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. - */ - -#include <gr_sys_paths.h> -#include <cstdlib> //getenv -#include <cstdio> //P_tmpdir (maybe) - -const char *gr_tmp_path(){ - const char *path; - - //first case, try TMP environment variable - path = getenv("TMP"); - if (path) return path; - - //second case, try P_tmpdir when its defined - #ifdef P_tmpdir - if (P_tmpdir) return P_tmpdir; - #endif /*P_tmpdir*/ - - //fall-through case, nothing worked - return "/tmp"; -} - -const char *gr_appdata_path(){ - const char *path; - - //first case, try HOME environment variable (unix) - path = getenv("HOME"); - if (path) return path; - - //second case, try APPDATA environment variable (windows) - path = getenv("APPDATA"); - if (path) return path; - - //fall-through case, nothing worked - return gr_tmp_path(); -} diff --git a/gnuradio-core/src/lib/runtime/gr_sys_paths.h b/gnuradio-core/src/lib/runtime/gr_sys_paths.h deleted file mode 100644 index bd51ebdf94..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_sys_paths.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 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. - */ - -#ifndef _GR_SYS_PATHS_H_ -#define _GR_SYS_PATHS_H_ - -#include <gr_core_api.h> - -//! directory to create temporary files -GR_CORE_API const char *gr_tmp_path(); - -//! directory to store application data -GR_CORE_API const char *gr_appdata_path(); - -#endif /* _GR_SYS_PATHS_H_ */ diff --git a/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.cc b/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.cc deleted file mode 100644 index 32b6a09033..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.cc +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_tagged_stream_block.h> - -gr_tagged_stream_block::gr_tagged_stream_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - const std::string &length_tag_key) - : gr_block(name, input_signature, output_signature), - d_length_tag_key(pmt::string_to_symbol(length_tag_key)), - d_n_input_items_reqd(input_signature->min_streams(), 0), - d_length_tag_key_str(length_tag_key) -{ -} - - -// This is evil hackery: We trick the scheduler into creating the right number of input items -void -gr_tagged_stream_block::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) { - if (i < d_n_input_items_reqd.size() && d_n_input_items_reqd[i] != 0) { - ninput_items_required[i] = d_n_input_items_reqd[i]; - } else { - // If there's no item, there's no tag--so there must at least be one! - ninput_items_required[i] = std::max(1, (int) std::floor((double) noutput_items / relative_rate() + 0.5)); - } - } -} - - -void -gr_tagged_stream_block::parse_length_tags( - const std::vector<std::vector<gr_tag_t> > &tags, - gr_vector_int &n_input_items_reqd -){ - for (unsigned i = 0; i < tags.size(); i++) { - for (unsigned k = 0; k < tags[i].size(); k++) { - if (tags[i][k].key == d_length_tag_key) { - n_input_items_reqd[i] = pmt::to_long(tags[i][k].value); - remove_item_tag(i, tags[i][k]); - } - } - } -} - - -int -gr_tagged_stream_block::calculate_output_stream_length(const gr_vector_int &ninput_items) -{ - int noutput_items = *std::max_element(ninput_items.begin(), ninput_items.end()); - return (int) std::floor(relative_rate() * noutput_items + 0.5); -} - - -void -gr_tagged_stream_block::update_length_tags(int n_produced, int n_ports) -{ - for (int i = 0; i < n_ports; i++) { - add_item_tag(i, nitems_written(i), - d_length_tag_key, - pmt::from_long(n_produced) - ); - } - return; -} - - -int -gr_tagged_stream_block::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - if (d_length_tag_key_str.empty()) { - return work(noutput_items, ninput_items, input_items, output_items); - } - - if (d_n_input_items_reqd[0] == 0) { // Otherwise, it's already set from a previous call - std::vector<std::vector<gr_tag_t> > tags(input_items.size(), std::vector<gr_tag_t>()); - for (unsigned i = 0; i < input_items.size(); i++) { - get_tags_in_range(tags[i], i, nitems_read(i), nitems_read(i)+1); - } - d_n_input_items_reqd.assign(input_items.size(), -1); - parse_length_tags(tags, d_n_input_items_reqd); - } - for (unsigned i = 0; i < input_items.size(); i++) { - if (d_n_input_items_reqd[i] == -1) { - throw std::runtime_error("Missing length tag."); - } - if (d_n_input_items_reqd[i] > ninput_items[i]) { - return 0; - } - } - - int min_output_size = calculate_output_stream_length(d_n_input_items_reqd); - if (noutput_items < min_output_size) { - set_min_noutput_items(min_output_size); - return 0; - } - set_min_noutput_items(1); - - // WORK CALLED HERE // - int n_produced = work(noutput_items, d_n_input_items_reqd, input_items, output_items); - ////////////////////// - - if (n_produced == WORK_DONE) { - return n_produced; - } - for (int i = 0; i < (int) d_n_input_items_reqd.size(); i++) { - consume(i, d_n_input_items_reqd[i]); - } - update_length_tags(n_produced, output_items.size()); - - d_n_input_items_reqd.assign(input_items.size(), 0); - - return n_produced; -} - diff --git a/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.h b/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.h deleted file mode 100644 index a9d396c06f..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.h +++ /dev/null @@ -1,138 +0,0 @@ -/* -*- 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. - */ - -#ifndef INCLUDED_GR_TAGGED_STREAM_BLOCK_H -#define INCLUDED_GR_TAGGED_STREAM_BLOCK_H - -#include <gr_core_api.h> -#include <gr_block.h> - -/*! - * \brief Block that operates on PDUs in form of tagged streams - * \ingroup base_blk - * - * Override work to provide the signal processing implementation. - */ -class GR_CORE_API gr_tagged_stream_block : public gr_block -{ - private: - pmt::pmt_t d_length_tag_key; //! This is the key for the tag that stores the PDU length - gr_vector_int d_n_input_items_reqd; //! How many input items do I need to process the next PDU? - - protected: - std::string d_length_tag_key_str; - gr_tagged_stream_block (void){} //allows pure virtual interface sub-classes - gr_tagged_stream_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - const std::string &length_tag_key); - - /* \brief Parse all tags on the first sample of a PDU, return the number of items per input - * and prune the length tags. - * - * In most cases, you don't need to override this, unless the number of items read - * is not directly coded in one single tag. - * - * Default behaviour: - * - Go through all input ports - * - On every input port, search for the tag with the key specified in \p length_tag_key - * - Copy that value as an int to the corresponding position in \p n_input_items_reqd - * - Remove the length tag. - * - * \param[in] tags All the tags found on the first item of every input port. - * \param[out] n_input_items_reqd Number of items which will be read from every input - */ - virtual void parse_length_tags( - const std::vector<std::vector<gr_tag_t> > &tags, - gr_vector_int &n_input_items_reqd - ); - - /* \brief Calculate the number of output items. - * - * This is basically the inverse function to forecast(): Given a number of input - * items, it returns the maximum number of output items. - * - * You most likely need to override this function, unless your block is a sync - * block or integer interpolator/decimator. - * - */ - virtual int calculate_output_stream_length(const gr_vector_int &ninput_items); - - /* \brief Set the new length tags on the output stream - * - * Default behaviour: Set a tag with key \p length_tag_key and - * the number of produced items on every output port. - * - * For anything else, override this. - * - * \param n_produced Length of the new PDU - * \param n_ports Number of output ports - */ - virtual void update_length_tags(int n_produced, int n_ports); - - public: - - /* \brief Don't override this. - */ - void /* final */ forecast (int noutput_items, gr_vector_int &ninput_items_required); - - /* - Reads the number of input items from the tags using parse_length_tags() - * - Checks there's enough data on the input and output buffers - * - If not, inform the scheduler and do nothing - * - Calls work() with the exact number of items per PDU - * - Updates the tags using update_length_tags() - */ - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - /*! - * \brief Just like gr_block::general_work, but makes sure the input is valid - * - * The user must override work to define the signal processing code. - * Check the documentation for general_work() to see what happens here. - * - * Like gr_sync_block, this calls consume() for you (it consumes ninput_items[i] - * items from the i-th port). - * - * A note on tag propagation: The PDU length tags are handled by other functions, - * but all other tags are handled just as in any other \p gr_block. So, most likely, - * you either set the tag propagation policy to TPP_DONT and handle the tag - * propagation manually, or you propagate tags through the scheduler and don't - * do anything here. - * - * \param noutput_items The size of the writable output buffer - * \param ninput_items The exact size of the items on every input for this particular PDU. - * These will be consumed if a length tag key is provided! - * \param input_items See gr_block - * \param output_items See gr_block - */ - virtual int work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) = 0; - -}; - -#endif /* INCLUDED_GR_TAGGED_STREAM_BLOCK_H */ - diff --git a/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.i b/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.i deleted file mode 100644 index 9fc803dca1..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tagged_stream_block.i +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- 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. - */ -class gr_tagged_stream_block : public gr_block -{ - protected: - gr_tagged_stream_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - const std::string &length_tag_key); -}; - diff --git a/gnuradio-core/src/lib/runtime/gr_tags.h b/gnuradio-core/src/lib/runtime/gr_tags.h deleted file mode 100644 index a9ca902352..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tags.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 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. - */ - -#ifndef INCLUDED_GR_TAGS_H -#define INCLUDED_GR_TAGS_H - -#include <gr_core_api.h> -#include <gruel/pmt.h> - -struct GR_CORE_API gr_tag_t{ - - //! the item \p tag occurred at (as a uint64_t) - uint64_t offset; - - //! the key of \p tag (as a PMT symbol) - pmt::pmt_t key; - - //! the value of \p tag (as a PMT) - pmt::pmt_t value; - - //! the source ID of \p tag (as a PMT) - pmt::pmt_t srcid; - - //! Comparison function to test which tag, \p x or \p y, came first in time - static inline bool offset_compare( - const gr_tag_t &x, const gr_tag_t &y - ){ - return x.offset < y.offset; - } - - inline bool operator == (const gr_tag_t &t) const - { - return (t.key == key) && (t.value == value) && (t.srcid == srcid) && (t.offset == offset); - } -}; - -#endif /*INCLUDED_GR_TAGS_H*/ diff --git a/gnuradio-core/src/lib/runtime/gr_tags.i b/gnuradio-core/src/lib/runtime/gr_tags.i deleted file mode 100644 index 828d0147ce..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tags.i +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 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. - */ - -%{ -#include <gr_tags.h> -%} - -%include <pmt_swig.i> //for pmt support - -%include <gr_tags.h> - -//gives support for a vector of tags (get tags in range) -%include "std_vector.i" -%template(tags_vector_t) std::vector<gr_tag_t>; diff --git a/gnuradio-core/src/lib/runtime/gr_timer.h b/gnuradio-core/src/lib/runtime/gr_timer.h deleted file mode 100644 index e0b4cc4378..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_timer.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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_TIMER_H -#define INCLUDED_GR_TIMER_H - -#include <gr_core_api.h> -#include <gr_types.h> - -class gr_timer; - -typedef boost::shared_ptr<gr_timer> gr_timer_sptr; - -GR_CORE_API typedef void (*gr_timer_hook)(gr_timer *, void *); - -/*! - * \brief create a timeout. - * - * \ingroup misc - * gr_timer_hook is called when timer fires. - */ -GR_CORE_API gr_timer_sptr gr_make_timer (gr_timer_hook, void *); - -/*! - * \brief implement timeouts - */ -class GR_CORE_API gr_timer { - double d_expiry; - double d_period; - gr_timer_hook d_hook; - void *d_hook_arg; - - friend GR_CORE_API gr_timer_sptr gr_make_timer (gr_timer_hook, void *); - - gr_timer (...); - -public: - ~gr_timer (); - - //! return absolute current time (seconds since the epoc). - static double now (); - - /*! - * \brief schedule timer to fire at abs_when - * \param abs_when absolute time in seconds since the epoc. - */ - void schedule_at (double abs_when); - - /*! - * \brief schedule timer to fire rel_when seconds from now. - * \param rel_when relative time in seconds from now. - */ - void schedule_after (double rel_when); // relative time in seconds - - /*! - * \brief schedule a periodic timeout. - * \param abs_when absolute time to fire first time - * \param period time between firings - */ - void schedule_periodic (double abs_when, double period); - - //! cancel timer - void unschedule (); -}; - -#endif /* INCLUDED_GR_TIMER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.cc b/gnuradio-core/src/lib/runtime/gr_top_block.cc deleted file mode 100644 index c6118bcfdd..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_top_block.cc +++ /dev/null @@ -1,160 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007 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 <unistd.h> -#include <gr_top_block.h> -#include <gr_top_block_impl.h> -#include <gr_io_signature.h> -#include <gr_prefs.h> -#include <iostream> - -gr_top_block_sptr -gr_make_top_block(const std::string &name) -{ - return gnuradio::get_initial_sptr(new gr_top_block(name)); -} - -gr_top_block::gr_top_block(const std::string &name) - : gr_hier_block2(name, - gr_make_io_signature(0,0,0), - gr_make_io_signature(0,0,0)) - -{ - d_impl = new gr_top_block_impl(this); -} - -gr_top_block::~gr_top_block() -{ - stop(); - wait(); - - delete d_impl; -} - -void -gr_top_block::start(int max_noutput_items) -{ - d_impl->start(max_noutput_items); - - if(gr_prefs::singleton()->get_bool("ControlPort", "on", false)) { - setup_rpc(); - } -} - -void -gr_top_block::stop() -{ - d_impl->stop(); -} - -void -gr_top_block::wait() -{ - d_impl->wait(); -} - -void -gr_top_block::run(int max_noutput_items) -{ - start(max_noutput_items); - wait(); -} - -void -gr_top_block::lock() -{ - d_impl->lock(); -} - -void -gr_top_block::unlock() -{ - d_impl->unlock(); -} - -std::string -gr_top_block::edge_list() -{ - return d_impl->edge_list(); -} - -void -gr_top_block::dump() -{ - d_impl->dump(); -} - -int -gr_top_block::max_noutput_items() -{ - return d_impl->max_noutput_items(); -} - -void -gr_top_block::set_max_noutput_items(int nmax) -{ - d_impl->set_max_noutput_items(nmax); -} - -gr_top_block_sptr -gr_top_block::to_top_block() -{ - return cast_to_top_block_sptr(shared_from_this()); -} - -void -gr_top_block::setup_rpc() -{ -#ifdef GR_CTRLPORT - // Getters - add_rpc_variable( - rpcbasic_sptr(new rpcbasic_register_get<gr_top_block, int>( - alias(), "max nouptut_items", - &gr_top_block::max_noutput_items, - pmt::mp(0), pmt::mp(8192), pmt::mp(8192), - "items", "Max number of output items", - RPC_PRIVLVL_MIN, DISPNULL))); - - if(gr_prefs::singleton()->get_bool("ControlPort", "edges_list", false)) { - add_rpc_variable( - rpcbasic_sptr(new rpcbasic_register_get<gr_top_block, std::string>( - alias(), "edge list", - &gr_top_block::edge_list, - pmt::mp(""), pmt::mp(""), pmt::mp(""), - "edges", "List of edges in the graph", - RPC_PRIVLVL_MIN, DISPNULL))); - } - - // Setters - add_rpc_variable( - rpcbasic_sptr(new rpcbasic_register_set<gr_top_block, int>( - alias(), "max noutput_items", - &gr_top_block::set_max_noutput_items, - pmt::mp(0), pmt::mp(8192), pmt::mp(8192), - "items", "Max number of output items", - RPC_PRIVLVL_MIN, DISPNULL))); -#endif /* GR_CTRLPORT */ -} diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.h b/gnuradio-core/src/lib/runtime/gr_top_block.h deleted file mode 100644 index 9634b53f3c..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_top_block.h +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007-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_TOP_BLOCK_H -#define INCLUDED_GR_TOP_BLOCK_H - -#include <gr_core_api.h> -#include <gr_hier_block2.h> - -class gr_top_block_impl; - -GR_CORE_API gr_top_block_sptr gr_make_top_block(const std::string &name); - -/*! - *\brief Top-level hierarchical block representing a flowgraph - * \ingroup container_blk - * - */ -class GR_CORE_API gr_top_block : public gr_hier_block2 -{ -private: - friend GR_CORE_API gr_top_block_sptr gr_make_top_block(const std::string &name); - - gr_top_block_impl *d_impl; - -protected: - gr_top_block(const std::string &name); - -public: - ~gr_top_block(); - - /*! - * \brief The simple interface to running a flowgraph. - * - * Calls start() then wait(). Used to run a flowgraph that will stop - * on its own, or when another thread will call stop(). - * - * \param max_noutput_items the maximum number of output items - * allowed for any block in the flowgraph. This passes through to - * the start function; see that function for more details. - */ - void run(int max_noutput_items=100000000); - - /*! - * Start the contained flowgraph. Creates one or more threads to - * execute the flow graph. Returns to the caller once the threads - * are created. Calling start() on a top_block that is already - * started IS an error. - * - * \param max_noutput_items the maximum number of output items - * allowed for any block in the flowgraph; the noutput_items can - * always be less than this, but this will cap it as a maximum. Use - * this to adjust the maximum latency a flowgraph can exhibit. - */ - void start(int max_noutput_items=100000000); - - /*! - * Stop the running flowgraph. Notifies each thread created by the - * scheduler to shutdown, then returns to caller. Calling stop() on - * a top_block that is already stopped IS NOT an error. - */ - void stop(); - - /*! - * Wait for a flowgraph to complete. Flowgraphs complete when - * either (1) all blocks indicate that they are done (typically only - * when using blocks.file_source, or blocks.head, or (2) after stop() has been - * called to request shutdown. Calling wait on a top_block that is - * not running IS NOT an error (wait returns w/o blocking). - */ - void wait(); - - /*! - * Lock a flowgraph in preparation for reconfiguration. When an equal - * number of calls to lock() and unlock() have occurred, the flowgraph - * will be reconfigured. - * - * N.B. lock() and unlock() may not be called from a flowgraph thread - * (E.g., gr_block::work method) or deadlock will occur when - * reconfiguration happens. - */ - virtual void lock(); - - /*! - * Unlock a flowgraph in preparation for reconfiguration. When an equal - * number of calls to lock() and unlock() have occurred, the flowgraph - * will be reconfigured. - * - * N.B. lock() and unlock() may not be called from a flowgraph thread - * (E.g., gr_block::work method) or deadlock will occur when - * reconfiguration happens. - */ - virtual void unlock(); - - /*! - * Returns a string that lists the edge connections in the flattened - * flowgraph. - */ - std::string edge_list(); - - /*! - * Displays flattened flowgraph edges and block connectivity - */ - void dump(); - - //! Get the number of max noutput_items in the flowgraph - int max_noutput_items(); - - //! Set the maximum number of noutput_items in the flowgraph - void set_max_noutput_items(int nmax); - - gr_top_block_sptr to_top_block(); // Needed for Python type coercion - - void setup_rpc(); -}; - -inline gr_top_block_sptr cast_to_top_block_sptr(gr_basic_block_sptr block) { - return boost::dynamic_pointer_cast<gr_top_block, gr_basic_block>(block); -} - - -#endif /* INCLUDED_GR_TOP_BLOCK_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.i b/gnuradio-core/src/lib/runtime/gr_top_block.i deleted file mode 100644 index 1612ddf8c5..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_top_block.i +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007,2008,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. - */ - -class gr_top_block; -typedef boost::shared_ptr<gr_top_block> gr_top_block_sptr; -%template(gr_top_block_sptr) boost::shared_ptr<gr_top_block>; - -// Hack to have a Python shim implementation of gr.top_block -// that instantiates one of these and passes through calls -%rename(top_block_swig) gr_make_top_block; -gr_top_block_sptr gr_make_top_block(const std::string name) - throw (std::logic_error); - -class gr_top_block : public gr_hier_block2 -{ -private: - gr_top_block(const std::string &name); - -public: - ~gr_top_block(); - - void start(int max_noutput_items=100000000) throw (std::runtime_error); - void stop(); - //void wait(); - //void run() throw (std::runtime_error); - void lock(); - void unlock() throw (std::runtime_error); - std::string edge_list(); - void dump(); - - int max_noutput_items(); - void set_max_noutput_items(int nmax); - - gr_top_block_sptr to_top_block(); // Needed for Python type coercion -}; - -#ifdef SWIGPYTHON - -%inline %{ -void top_block_run_unlocked(gr_top_block_sptr r) throw (std::runtime_error) -{ - Py_BEGIN_ALLOW_THREADS; // release global interpreter lock - r->run(); - Py_END_ALLOW_THREADS; // acquire global interpreter lock -} - -void top_block_wait_unlocked(gr_top_block_sptr r) throw (std::runtime_error) -{ - Py_BEGIN_ALLOW_THREADS; // release global interpreter lock - r->wait(); - Py_END_ALLOW_THREADS; // acquire global interpreter lock -} -%} - -#endif diff --git a/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc b/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc deleted file mode 100644 index b6d427ce27..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc +++ /dev/null @@ -1,211 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007,2008 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_top_block.h> -#include <gr_top_block_impl.h> -#include <gr_flat_flowgraph.h> -#include <gr_scheduler_sts.h> -#include <gr_scheduler_tpb.h> -#include <gr_prefs.h> - -#include <stdexcept> -#include <iostream> -#include <string.h> -#include <unistd.h> -#include <stdlib.h> - -#define GR_TOP_BLOCK_IMPL_DEBUG 0 - - -typedef gr_scheduler_sptr (*scheduler_maker)(gr_flat_flowgraph_sptr ffg, - int max_noutput_items); - -static struct scheduler_table { - const char *name; - scheduler_maker f; -} scheduler_table[] = { - { "TPB", gr_scheduler_tpb::make }, // first entry is default - { "STS", gr_scheduler_sts::make } -}; - -static gr_scheduler_sptr -make_scheduler(gr_flat_flowgraph_sptr ffg, int max_noutput_items) -{ - static scheduler_maker factory = 0; - - if (factory == 0){ - char *v = getenv("GR_SCHEDULER"); - if (!v) - factory = scheduler_table[0].f; // use default - else { - for (size_t i = 0; i < sizeof(scheduler_table)/sizeof(scheduler_table[0]); i++){ - if (strcmp(v, scheduler_table[i].name) == 0){ - factory = scheduler_table[i].f; - break; - } - } - if (factory == 0){ - std::cerr << "warning: Invalid GR_SCHEDULER environment variable value \"" - << v << "\". Using \"" << scheduler_table[0].name << "\"\n"; - factory = scheduler_table[0].f; - } - } - } - return factory(ffg, max_noutput_items); -} - - -gr_top_block_impl::gr_top_block_impl(gr_top_block *owner) - : d_owner(owner), d_ffg(), - d_state(IDLE), d_lock_count(0) -{ -} - -gr_top_block_impl::~gr_top_block_impl() -{ - d_owner = 0; -} - -void -gr_top_block_impl::start(int max_noutput_items) -{ - gruel::scoped_lock l(d_mutex); - - d_max_noutput_items = max_noutput_items; - - if (d_state != IDLE) - throw std::runtime_error("top_block::start: top block already running or wait() not called after previous stop()"); - - if (d_lock_count > 0) - throw std::runtime_error("top_block::start: can't start with flow graph locked"); - - // Create new flat flow graph by flattening hierarchy - d_ffg = d_owner->flatten(); - - // Validate new simple flow graph and wire it up - d_ffg->validate(); - d_ffg->setup_connections(); - - // Only export perf. counters if ControlPort config param is enabled - // and if the PerfCounter option 'export' is turned on. - gr_prefs *p = gr_prefs::singleton(); - if(p->get_bool("ControlPort", "on", false) && p->get_bool("PerfCounters", "export", false)) - d_ffg->enable_pc_rpc(); - - d_scheduler = make_scheduler(d_ffg, d_max_noutput_items); - d_state = RUNNING; -} - -void -gr_top_block_impl::stop() -{ - if (d_scheduler) - d_scheduler->stop(); -} - - -void -gr_top_block_impl::wait() -{ - if (d_scheduler) - d_scheduler->wait(); - - d_state = IDLE; -} - -// N.B. lock() and unlock() cannot be called from a flow graph thread or -// deadlock will occur when reconfiguration happens -void -gr_top_block_impl::lock() -{ - gruel::scoped_lock lock(d_mutex); - d_lock_count++; -} - -void -gr_top_block_impl::unlock() -{ - gruel::scoped_lock lock(d_mutex); - - if (d_lock_count <= 0){ - d_lock_count = 0; // fix it, then complain - throw std::runtime_error("unpaired unlock() call"); - } - - d_lock_count--; - if (d_lock_count > 0 || d_state == IDLE) // nothing to do - return; - - restart(); -} - -/* - * restart is called with d_mutex held - */ -void -gr_top_block_impl::restart() -{ - stop(); // Stop scheduler and wait for completion - wait(); - - // Create new simple flow graph - gr_flat_flowgraph_sptr new_ffg = d_owner->flatten(); - new_ffg->validate(); // check consistency, sanity, etc - new_ffg->merge_connections(d_ffg); // reuse buffers, etc - d_ffg = new_ffg; - - // Create a new scheduler to execute it - d_scheduler = make_scheduler(d_ffg, d_max_noutput_items); - d_state = RUNNING; -} - -std::string -gr_top_block_impl::edge_list() -{ - if(d_ffg) - return d_ffg->edge_list(); - else - return ""; -} - -void -gr_top_block_impl::dump() -{ - if (d_ffg) - d_ffg->dump(); -} - -int -gr_top_block_impl::max_noutput_items() -{ - return d_max_noutput_items; -} - -void -gr_top_block_impl::set_max_noutput_items(int nmax) -{ - d_max_noutput_items = nmax; -} diff --git a/gnuradio-core/src/lib/runtime/gr_top_block_impl.h b/gnuradio-core/src/lib/runtime/gr_top_block_impl.h deleted file mode 100644 index 3e4da332ae..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_top_block_impl.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007,2008 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_TOP_BLOCK_IMPL_H -#define INCLUDED_GR_TOP_BLOCK_IMPL_H - -#include <gr_core_api.h> -#include <gr_scheduler.h> -#include <gruel/thread.h> - -/*! - *\brief Abstract implementation details of gr_top_block - * \ingroup internal - * - * The actual implementation of gr_top_block. Separate class allows - * decoupling of changes from dependent classes. - * - */ -class GR_CORE_API gr_top_block_impl -{ -public: - gr_top_block_impl(gr_top_block *owner); - ~gr_top_block_impl(); - - // Create and start scheduler threads - void start(int max_noutput_items=100000000); - - // Signal scheduler threads to stop - void stop(); - - // Wait for scheduler threads to exit - void wait(); - - // Lock the top block to allow reconfiguration - void lock(); - - // Unlock the top block at end of reconfiguration - void unlock(); - - // Return a string list of edges - std::string edge_list(); - - // Dump the flowgraph to stdout - void dump(); - - // Get the number of max noutput_items in the flowgraph - int max_noutput_items(); - - // Set the maximum number of noutput_items in the flowgraph - void set_max_noutput_items(int nmax); - -protected: - - enum tb_state { IDLE, RUNNING }; - - gr_top_block *d_owner; - gr_flat_flowgraph_sptr d_ffg; - gr_scheduler_sptr d_scheduler; - - gruel::mutex d_mutex; // protects d_state and d_lock_count - tb_state d_state; - int d_lock_count; - int d_max_noutput_items; - -private: - void restart(); -}; - -#endif /* INCLUDED_GR_TOP_BLOCK_IMPL_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc b/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc deleted file mode 100644 index 46eb6bbe0d..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <gr_tpb_detail.h> -#include <gr_block.h> -#include <gr_block_detail.h> -#include <gr_buffer.h> - -using namespace pmt; - -/* - * We assume that no worker threads are ever running when the - * graph structure is being manipulated, thus it's safe for us to poke - * around in our neighbors w/o holding any locks. - */ - -void -gr_tpb_detail::notify_upstream(gr_block_detail *d) -{ - // For each of our inputs, tell the guy upstream that we've consumed - // some input, and that he most likely has more output buffer space - // available. - - for (size_t i = 0; i < d->d_input.size(); i++){ - // Can you say, "pointer chasing?" - d->d_input[i]->buffer()->link()->detail()->d_tpb.set_output_changed(); - } -} - -void -gr_tpb_detail::notify_downstream(gr_block_detail *d) -{ - // For each of our outputs, tell the guys downstream that they have - // new input available. - - for (size_t i = 0; i < d->d_output.size(); i++){ - gr_buffer_sptr buf = d->d_output[i]; - for (size_t j = 0, k = buf->nreaders(); j < k; j++) - buf->reader(j)->link()->detail()->d_tpb.set_input_changed(); - } -} - -void -gr_tpb_detail::notify_neighbors(gr_block_detail *d) -{ - notify_downstream(d); - notify_upstream(d); -} - diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h deleted file mode 100644 index 69feb60073..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef INCLUDED_GR_TPB_DETAIL_H -#define INCLUDED_GR_TPB_DETAIL_H - -#include <gr_core_api.h> -#include <gruel/thread.h> -#include <deque> -#include <gruel/pmt.h> - -class gr_block_detail; - -/*! - * \brief used by thread-per-block scheduler - */ -struct GR_CORE_API gr_tpb_detail { - - gruel::mutex mutex; //< protects all vars - bool input_changed; - gruel::condition_variable input_cond; - bool output_changed; - gruel::condition_variable output_cond; - -public: - gr_tpb_detail() - : input_changed(false), output_changed(false) { } - - //! Called by us to tell all our upstream blocks that their output may have changed. - void notify_upstream(gr_block_detail *d); - - //! Called by us to tell all our downstream blocks that their input may have changed. - void notify_downstream(gr_block_detail *d); - - //! Called by us to notify both upstream and downstream - void notify_neighbors(gr_block_detail *d); - - //! Called by pmt msg posters - void notify_msg(){ - input_cond.notify_one(); - output_cond.notify_one(); - } - - //! Called by us - void clear_changed() - { - gruel::scoped_lock guard(mutex); - input_changed = false; - output_changed = false; - } - -private: - - //! Used by notify_downstream - void set_input_changed() - { - gruel::scoped_lock guard(mutex); - input_changed = true; - input_cond.notify_one(); - } - - //! Used by notify_upstream - void set_output_changed() - { - gruel::scoped_lock guard(mutex); - output_changed = true; - output_cond.notify_one(); - } - -}; - -#endif /* INCLUDED_GR_TPB_DETAIL_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc deleted file mode 100644 index 679fd15124..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc +++ /dev/null @@ -1,151 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008,2009,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 this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <gr_tpb_thread_body.h> -#include <gr_prefs.h> -#include <iostream> -#include <boost/thread.hpp> -#include <gruel/pmt.h> -#include <boost/foreach.hpp> - -using namespace pmt; - -gr_tpb_thread_body::gr_tpb_thread_body(gr_block_sptr block, int max_noutput_items) - : d_exec(block, max_noutput_items) -{ - //std::cerr << "gr_tpb_thread_body: " << block << std::endl; - - gr_block_detail *d = block->detail().get(); - gr_block_executor::state s; - pmt_t msg; - - d->threaded = true; - d->thread = gruel::get_current_thread_id(); - - gr_prefs *p = gr_prefs::singleton(); - size_t max_nmsgs = static_cast<size_t>(p->get_long("DEFAULT", "max_messages", 100)); - - // Set thread affinity if it was set before fg was started. - if(block->processor_affinity().size() > 0) { - gruel::thread_bind_to_processor(d->thread, block->processor_affinity()); - } - - while (1){ - boost::this_thread::interruption_point(); - - // handle any queued up messages - //BOOST_FOREACH( pmt::pmt_t port, block->msg_queue.keys() ) - - BOOST_FOREACH( gr_basic_block::msg_queue_map_t::value_type &i, block->msg_queue ) - { - // Check if we have a message handler attached before getting - // any messages. This is mostly a protection for the unknown - // startup sequence of the threads. - if(block->has_msg_handler(i.first)) { - while ((msg = block->delete_head_nowait(i.first))){ - block->dispatch_msg(i.first,msg); - } - } - else { - // If we don't have a handler but are building up messages, - // prune the queue from the front to keep memory in check. - if(block->nmsgs(i.first) > max_nmsgs) - msg = block->delete_head_nowait(i.first); - } - } - - d->d_tpb.clear_changed(); - // run one iteration if we are a connected stream block - if(d->noutputs() >0 || d->ninputs()>0){ - s = d_exec.run_one_iteration(); - } else { - s = gr_block_executor::BLKD_IN; - } - - switch(s){ - case gr_block_executor::READY: // Tell neighbors we made progress. - d->d_tpb.notify_neighbors(d); - break; - - case gr_block_executor::READY_NO_OUTPUT: // Notify upstream only - d->d_tpb.notify_upstream(d); - break; - - case gr_block_executor::DONE: // Game over. - d->d_tpb.notify_neighbors(d); - return; - - case gr_block_executor::BLKD_IN: // Wait for input. - { - gruel::scoped_lock guard(d->d_tpb.mutex); - while (!d->d_tpb.input_changed){ - - // wait for input or message - while(!d->d_tpb.input_changed && block->empty_p()) - d->d_tpb.input_cond.wait(guard); - - // handle all pending messages - BOOST_FOREACH( gr_basic_block::msg_queue_map_t::value_type &i, block->msg_queue ) - { - while ((msg = block->delete_head_nowait(i.first))){ - guard.unlock(); // release lock while processing msg - block->dispatch_msg(i.first, msg); - guard.lock(); - } - } - } - } - break; - - - case gr_block_executor::BLKD_OUT: // Wait for output buffer space. - { - gruel::scoped_lock guard(d->d_tpb.mutex); - while (!d->d_tpb.output_changed){ - - // wait for output room or message - while(!d->d_tpb.output_changed && block->empty_p()) - d->d_tpb.output_cond.wait(guard); - - // handle all pending messages - BOOST_FOREACH( gr_basic_block::msg_queue_map_t::value_type &i, block->msg_queue ) - { - while ((msg = block->delete_head_nowait(i.first))){ - guard.unlock(); // release lock while processing msg - block->dispatch_msg(i.first,msg); - guard.lock(); - } - } - } - } - break; - - default: - assert(0); - } - } -} - -gr_tpb_thread_body::~gr_tpb_thread_body() -{ -} diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h deleted file mode 100644 index f920663a2a..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2008 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. - */ -#ifndef INCLUDED_GR_TPB_THREAD_BODY_H -#define INCLUDED_GR_TPB_THREAD_BODY_H - -#include <gr_core_api.h> -#include <gr_block_executor.h> -#include <gr_block.h> -#include <gr_block_detail.h> - -/*! - * \brief The body of each thread-per-block thread. - * - * One of these is instantiated in its own thread for each block. The - * constructor turns into the main loop which returns when the block is - * done or is interrupted. - */ - -class GR_CORE_API gr_tpb_thread_body { - gr_block_executor d_exec; - -public: - gr_tpb_thread_body(gr_block_sptr block, int max_noutput_items=100000); - ~gr_tpb_thread_body(); -}; - - -#endif /* INCLUDED_GR_TPB_THREAD_BODY_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_types.h b/gnuradio-core/src/lib/runtime/gr_types.h deleted file mode 100644 index db13e456aa..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_types.h +++ /dev/null @@ -1,65 +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. - */ - -#ifndef INCLUDED_GR_TYPES_H -#define INCLUDED_GR_TYPES_H - -#include <gr_core_api.h> -#include <boost/shared_ptr.hpp> -#include <vector> -#include <stddef.h> // size_t - -#include <gr_complex.h> - -typedef std::vector<int> gr_vector_int; -typedef std::vector<unsigned int> gr_vector_uint; -typedef std::vector<float> gr_vector_float; -typedef std::vector<double> gr_vector_double; -typedef std::vector<void *> gr_vector_void_star; -typedef std::vector<const void *> gr_vector_const_void_star; - -/* - * #include <config.h> must be placed beforehand - * in the source file including gr_types.h for - * the following to work correctly - */ -#ifdef HAVE_STDINT_H -#include <stdint.h> -typedef int16_t gr_int16; -typedef int32_t gr_int32; -typedef int64_t gr_int64; -typedef uint16_t gr_uint16; -typedef uint32_t gr_uint32; -typedef uint64_t gr_uint64; -#else -/* - * Note: these defaults may be wrong on 64-bit systems - */ -typedef short gr_int16; -typedef int gr_int32; -typedef long long gr_int64; -typedef unsigned short gr_uint16; -typedef unsigned int gr_uint32; -typedef unsigned long long gr_uint64; -#endif /* HAVE_STDINT_H */ - -#endif /* INCLUDED_GR_TYPES_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_unittests.h b/gnuradio-core/src/lib/runtime/gr_unittests.h deleted file mode 100644 index 9fbf228cd0..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_unittests.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gr_core_api.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <string> - -#include <boost/filesystem/operations.hpp> -#include <boost/filesystem/path.hpp> - -static std::string get_unittest_path(const std::string &filename){ - boost::filesystem::path path = boost::filesystem::current_path() / ".unittests"; - if (!boost::filesystem::is_directory(path)) boost::filesystem::create_directory(path); - return (path / filename).string(); -} diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc deleted file mode 100644 index 522d9515d0..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc +++ /dev/null @@ -1,295 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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_vmcircbuf.h> -#include <assert.h> -#include <stdexcept> -#include <gr_preferences.h> -#include <stdio.h> -#include <string.h> -#include <gr_local_sighandler.h> -#include <vector> -#include <boost/format.hpp> - -// all the factories we know about -#include <gr_vmcircbuf_createfilemapping.h> -#include <gr_vmcircbuf_sysv_shm.h> -#include <gr_vmcircbuf_mmap_shm_open.h> -#include <gr_vmcircbuf_mmap_tmpfile.h> - -static const char *FACTORY_PREF_KEY = "gr_vmcircbuf_default_factory"; - -gr_vmcircbuf::~gr_vmcircbuf () -{ -} - -gr_vmcircbuf_factory::~gr_vmcircbuf_factory () -{ -} - -// ---------------------------------------------------------------- - -static gr_vmcircbuf_factory *s_default_factory = 0; - -gr_vmcircbuf_factory * -gr_vmcircbuf_sysconfig::get_default_factory () -{ - if (s_default_factory) - return s_default_factory; - - bool verbose = false; - - std::vector<gr_vmcircbuf_factory *> all = all_factories (); - - const char *name = gr_preferences::get (FACTORY_PREF_KEY); - - if (name){ - for (unsigned int i = 0; i < all.size (); i++){ - if (strcmp (name, all[i]->name ()) == 0){ - s_default_factory = all[i]; - if (verbose) - fprintf (stderr, "gr_vmcircbuf_sysconfig: using %s\n", - s_default_factory->name ()); - return s_default_factory; - } - } - } - - // either we don't have a default, or the default named is not in our - // list of factories. Find the first factory that works. - - if (verbose) - fprintf (stderr, "gr_vmcircbuf_sysconfig: finding a working factory...\n"); - - for (unsigned int i = 0; i < all.size (); i++){ - if (test_factory (all[i], verbose)){ - set_default_factory (all[i]); - return s_default_factory; - } - } - - // We're screwed! - - fprintf (stderr, "gr_vmcircbuf_sysconfig: unable to find a working factory!\n"); - throw std::runtime_error ("gr_vmcircbuf_sysconfig"); -} - -std::vector<gr_vmcircbuf_factory *> -gr_vmcircbuf_sysconfig::all_factories () -{ - std::vector<gr_vmcircbuf_factory *> result; - - result.push_back (gr_vmcircbuf_createfilemapping_factory::singleton ()); -#ifdef TRY_SHM_VMCIRCBUF - result.push_back (gr_vmcircbuf_sysv_shm_factory::singleton ()); - result.push_back (gr_vmcircbuf_mmap_shm_open_factory::singleton ()); -#endif - result.push_back (gr_vmcircbuf_mmap_tmpfile_factory::singleton ()); - - return result; -} - -void -gr_vmcircbuf_sysconfig::set_default_factory (gr_vmcircbuf_factory *f) -{ - gr_preferences::set (FACTORY_PREF_KEY, f->name ()); - s_default_factory = f; -} - - -// ------------------------------------------------------------------------ -// test code for vmcircbuf factories -// ------------------------------------------------------------------------ - -static void -init_buffer (gr_vmcircbuf *c, int counter, int size) -{ - unsigned int *p = (unsigned int *) c->pointer_to_first_copy (); - for (unsigned int i = 0; i < size / sizeof (int); i++) - p[i] = counter + i; -} - -static bool -check_mapping (gr_vmcircbuf *c, int counter, int size, const char *msg, bool verbose) -{ - bool ok = true; - - if (verbose) - fprintf (stderr, "... %s", msg); - - unsigned int *p1 = (unsigned int *) c->pointer_to_first_copy (); - unsigned int *p2 = (unsigned int *) c->pointer_to_second_copy (); - - // fprintf (stderr, "p1 = %p, p2 = %p\n", p1, p2); - - for (unsigned int i = 0; i < size / sizeof (int); i++){ - if (p1[i] != counter + i){ - ok = false; - if (verbose) - fprintf (stderr, " p1[%d] == %u, expected %u\n", i, p1[i], counter + i); - break; - } - if (p2[i] != counter + i){ - if (verbose) - fprintf (stderr, " p2[%d] == %u, expected %u\n", i, p2[i], counter + i); - ok = false; - break; - } - } - - if (ok && verbose){ - fprintf (stderr, " OK\n"); - } - return ok; -} - -static const char * -memsize (int size) -{ - static std::string buf; - if (size >= (1 << 20)){ - buf = str(boost::format("%dMB") % (size / (1 << 20))); - } - else if (size >= (1 << 10)){ - buf = str(boost::format("%dKB") % (size / (1 << 10))); - } - else { - buf = str(boost::format("%d") % size); - } - return buf.c_str(); -} - -static bool -test_a_bunch (gr_vmcircbuf_factory *factory, int n, int size, int *start_ptr, bool verbose) -{ - bool ok = true; - std::vector<int> counter(n); - std::vector<gr_vmcircbuf *> c(n); - int cum_size = 0; - - for (int i = 0; i < n; i++){ - counter[i] = *start_ptr; - *start_ptr += size; - if ((c[i] = factory->make (size)) == 0){ - if (verbose) - fprintf (stderr, - "Failed to allocate gr_vmcircbuf number %d of size %d (cum = %s)\n", - i + 1, size, memsize (cum_size)); - return false; - } - init_buffer (c[i], counter[i], size); - cum_size += size; - } - - for (int i = 0; i < n; i++){ - std::string msg = str(boost::format("test_a_bunch_%dx%s[%d]") % n % memsize (size) % i); - ok &= check_mapping (c[i], counter[i], size, msg.c_str(), verbose); - } - - for (int i = 0; i < n; i++){ - delete c[i]; - c[i] = 0; - } - - return ok; -} - -static bool -standard_tests (gr_vmcircbuf_factory *f, int verbose) -{ - if (verbose >= 1) - fprintf (stderr, "Testing %s...\n", f->name ()); - - bool v = verbose >= 2; - int granularity = f->granularity (); - int start = 0; - bool ok = true; - - ok &= test_a_bunch (f, 1, 1 * granularity, &start, v); // 1 x 4KB = 4KB - - if (ok){ - ok &= test_a_bunch (f, 64, 4 * granularity, &start, v); // 64 x 16KB = 1MB - ok &= test_a_bunch (f, 4, 4 * (1L << 20), &start, v); // 4 x 4MB = 16MB -// ok &= test_a_bunch (f, 256, 256 * (1L << 10), &start, v); // 256 x 256KB = 64MB - } - - if (verbose >= 1) - fprintf (stderr, "....... %s: %s", f->name (), ok ? "OK\n" : "Doesn't work\n"); - - return ok; -} - -bool -gr_vmcircbuf_sysconfig::test_factory (gr_vmcircbuf_factory *f, int verbose) -{ - // Install local signal handlers for SIGSEGV and SIGBUS. - // If something goes wrong, these signals may be invoked. - -#ifdef SIGSEGV - gr_local_sighandler sigsegv (SIGSEGV, gr_local_sighandler::throw_signal); -#endif -#ifdef SIGBUS - gr_local_sighandler sigbus (SIGBUS, gr_local_sighandler::throw_signal); -#endif -#ifdef SIGSYS - gr_local_sighandler sigsys (SIGSYS, gr_local_sighandler::throw_signal); -#endif - - try { - return standard_tests (f, verbose); - } - catch (gr_signal &sig){ - if (verbose){ - fprintf (stderr, "....... %s: %s", f->name (), "Doesn't work\n"); - fprintf (stderr, - "gr_vmcircbuf_factory::test_factory (%s): caught %s\n", - f->name (), sig.name().c_str()); - return false; - } - } - catch (...){ - if (verbose){ - fprintf (stderr, "....... %s: %s", f->name (), "Doesn't work\n"); - fprintf (stderr, - "gr_vmcircbuf_factory::test_factory (%s): some kind of uncaught exception\n", - f->name ()); - } - return false; - } - return false; // never gets here. shut compiler up. -} - -bool -gr_vmcircbuf_sysconfig::test_all_factories (int verbose) -{ - bool ok = false; - - std::vector<gr_vmcircbuf_factory *> all = all_factories (); - - for (unsigned int i = 0; i < all.size (); i++) - ok |= test_factory (all[i], verbose); - - return ok; -} diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h deleted file mode 100644 index 45c6f969c1..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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 _GR_VMCIRCBUF_H_ -#define _GR_VMCIRCBUF_H_ - -#include <gr_core_api.h> -#include <vector> - -/*! - * \brief abstract class to implement doubly mapped virtual memory circular buffers - * \ingroup internal - */ -class GR_CORE_API gr_vmcircbuf { - protected: - int d_size; - char *d_base; - - // CREATORS - gr_vmcircbuf (int size) : d_size (size), d_base (0) {}; - - public: - virtual ~gr_vmcircbuf (); - - // ACCESSORS - void *pointer_to_first_copy () const { return d_base; } - void *pointer_to_second_copy () const { return d_base + d_size; } -}; - -/*! - * \brief abstract factory for creating circular buffers - */ -class GR_CORE_API gr_vmcircbuf_factory { - protected: - gr_vmcircbuf_factory () {}; - virtual ~gr_vmcircbuf_factory (); - - public: - - /*! - * \brief return name of this factory - */ - virtual const char *name () const = 0; - - /*! - * \brief return granularity of mapping, typically equal to page size - */ - virtual int granularity () = 0; - - /*! - * \brief return a gr_vmcircbuf, or 0 if unable. - * - * Call this to create a doubly mapped circular buffer. - */ - virtual gr_vmcircbuf *make (int size) = 0; -}; - -/* - * \brief pulls together all implementations of gr_vmcircbuf - */ -class GR_CORE_API gr_vmcircbuf_sysconfig { - public: - - /* - * \brief return the single instance of the default factory. - * - * returns the default factory to use if it's already defined, - * else find the first working factory and use it. - */ - static gr_vmcircbuf_factory *get_default_factory (); - - - static int granularity () { return get_default_factory()->granularity(); } - static gr_vmcircbuf *make (int size) { return get_default_factory()->make(size); } - - - // N.B. not all factories are guaranteed to work. - // It's too hard to check everything at config time, so we check at runtime - static std::vector<gr_vmcircbuf_factory *> all_factories (); - - // make this factory the default - static void set_default_factory (gr_vmcircbuf_factory *f); - - /*! - * \brief Does this factory really work? - * - * verbose = 0: silent - * verbose = 1: names of factories tested and results - * verbose = 2: all intermediate results - */ - static bool test_factory (gr_vmcircbuf_factory *f, int verbose); - - /*! - * \brief Test all factories, return true if at least one of them works - * verbose = 0: silent - * verbose = 1: names of factories tested and results - * verbose = 2: all intermediate results - */ - static bool test_all_factories (int verbose); -}; - - -#endif /* _GR_VMCIRCBUF_H_ */ diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc deleted file mode 100644 index 1b4d9700a5..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc +++ /dev/null @@ -1,204 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,2005,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 <stdexcept> -#include <assert.h> -#include <unistd.h> -#include <fcntl.h> -#ifdef HAVE_SYS_TYPES_H -#include <sys/types.h> -#endif -#ifdef HAVE_SYS_MMAN_H -#include <sys/mman.h> -#endif -#include <errno.h> -#include <stdio.h> -#include <gr_pagesize.h> -#include <gr_vmcircbuf_createfilemapping.h> -#include <boost/format.hpp> - -#ifdef HAVE_CREATEFILEMAPPING -// Print Windows error (could/should be global?) -static void -werror( char *where, DWORD last_error ) -{ - char buf[1024]; - - FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - last_error, - 0, // default language - buf, - sizeof(buf)/sizeof(TCHAR), // buffer size - NULL ); - fprintf( stderr, "%s: Error %d: %s", where, last_error, buf ); - return; -} -#endif - - -gr_vmcircbuf_createfilemapping::gr_vmcircbuf_createfilemapping (int size) - : gr_vmcircbuf (size) -{ -#if !defined(HAVE_CREATEFILEMAPPING) - fprintf (stderr, "%s: createfilemapping is not available\n",__FUNCTION__); - throw std::runtime_error ("gr_vmcircbuf_createfilemapping"); -#else - static int s_seg_counter = 0; - - if (size <= 0 || (size % gr_pagesize ()) != 0){ - fprintf (stderr, "gr_vmcircbuf_createfilemapping: invalid size = %d\n", size); - throw std::runtime_error ("gr_vmcircbuf_createfilemapping"); - } - - std::string seg_name = str(boost::format("/gnuradio-%d-%d") % getpid () % s_seg_counter); - - d_handle = CreateFileMapping(INVALID_HANDLE_VALUE, // use paging file - NULL, // default security - PAGE_READWRITE, // read/write access - 0, // max. object size - size, // buffer size - seg_name.c_str()); // name of mapping object - - s_seg_counter++; - if (d_handle == NULL || d_handle == INVALID_HANDLE_VALUE){ - std::string msg = str(boost::format( - "gr_vmcircbuf_mmap_createfilemapping: CreateFileMapping [%s]") % - seg_name ); - werror((char *) msg.c_str(), GetLastError() ); - throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping"); - } - - // Allocate virtual memory of the needed size, then free it so we can use it - LPVOID first_tmp; - first_tmp = VirtualAlloc( NULL, 2*size, MEM_RESERVE, PAGE_NOACCESS ); - if (first_tmp == NULL){ - werror( "gr_vmcircbuf_mmap_createfilemapping: VirtualAlloc", GetLastError()); - CloseHandle(d_handle); // cleanup - throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping"); - } - - if (VirtualFree(first_tmp, 0, MEM_RELEASE) == 0){ - werror( "gr_vmcircbuf_mmap_createfilemapping: VirtualFree", GetLastError()); - CloseHandle(d_handle); // cleanup - throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping"); - } - - d_first_copy = MapViewOfFileEx((HANDLE)d_handle, // handle to map object - FILE_MAP_WRITE, // read/write permission - 0, - 0, - size, - first_tmp); - if (d_first_copy != first_tmp){ - werror( "gr_vmcircbuf_mmap_createfilemapping: MapViewOfFileEx(1)", GetLastError()); - CloseHandle(d_handle); // cleanup - throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping"); - } - - d_second_copy = MapViewOfFileEx((HANDLE)d_handle, // handle to map object - FILE_MAP_WRITE, // read/write permission - 0, - 0, - size, - (char *)first_tmp + size);//(LPVOID) ((char *)d_first_copy + size)); - - if (d_second_copy != (char *)first_tmp + size){ - werror( "gr_vmcircbuf_mmap_createfilemapping: MapViewOfFileEx(2)", GetLastError()); - UnmapViewOfFile(d_first_copy); - CloseHandle(d_handle); // cleanup - throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping"); - } - -#ifdef DEBUG - fprintf (stderr,"gr_vmcircbuf_mmap_createfilemapping: contiguous? mmap %p %p %p %p\n", - (char *)d_first_copy, (char *)d_second_copy, size, (char *)d_first_copy + size); -#endif - - // Now remember the important stuff - d_base = (char *) d_first_copy; - d_size = size; -#endif /*HAVE_CREATEFILEMAPPING*/ -} - -gr_vmcircbuf_createfilemapping::~gr_vmcircbuf_createfilemapping () -{ -#ifdef HAVE_CREATEFILEMAPPING - if (UnmapViewOfFile(d_first_copy) == 0) - { - werror("gr_vmcircbuf_createfilemapping: UnmapViewOfFile(d_first_copy)", GetLastError()); - } - d_base=NULL; - if (UnmapViewOfFile(d_second_copy) == 0) - { - werror("gr_vmcircbuf_createfilemapping: UnmapViewOfFile(d_second_copy)", GetLastError()); - } - //d_second=NULL; - CloseHandle(d_handle); -#endif -} - -// ---------------------------------------------------------------- -// The factory interface -// ---------------------------------------------------------------- - - -gr_vmcircbuf_factory *gr_vmcircbuf_createfilemapping_factory::s_the_factory = 0; - -gr_vmcircbuf_factory * -gr_vmcircbuf_createfilemapping_factory::singleton () -{ - if (s_the_factory) - return s_the_factory; - s_the_factory = new gr_vmcircbuf_createfilemapping_factory (); - return s_the_factory; -} - -int -gr_vmcircbuf_createfilemapping_factory::granularity () -{ -#ifdef HAVE_CREATEFILEMAPPING - // return 65536;//TODO, check, is this needed or can we just use gr_pagesize() - SYSTEM_INFO system_info; - GetSystemInfo(&system_info); - //fprintf(stderr,"win32 AllocationGranularity %p\n",(int)system_info.dwAllocationGranularity); - return (int)system_info.dwAllocationGranularity; -#else - return gr_pagesize (); -#endif -} - -gr_vmcircbuf * -gr_vmcircbuf_createfilemapping_factory::make (int size) -{ - try - { - return new gr_vmcircbuf_createfilemapping (size); - } - catch (...) - { - return 0; - } -} diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h deleted file mode 100644 index 5ef31f5c65..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h +++ /dev/null @@ -1,76 +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 _GR_VMCIRCBUF_CREATEFILEMAPPING_H_ -#define _GR_VMCIRCBUF_CREATEFILEMAPPING_H_ - -#include <gr_core_api.h> -#include <gr_vmcircbuf.h> - -#ifdef HAVE_CREATEFILEMAPPING -#include <windows.h> -#endif -/*! - * \brief concrete class to implement circular buffers with mmap and shm_open - * \ingroup internal - */ -class GR_CORE_API gr_vmcircbuf_createfilemapping : public gr_vmcircbuf -{ - public: - // CREATORS - gr_vmcircbuf_createfilemapping (int size); - virtual ~gr_vmcircbuf_createfilemapping (); -#ifdef HAVE_CREATEFILEMAPPING - private: - HANDLE d_handle; - LPVOID d_first_copy; - LPVOID d_second_copy; -#endif -}; - -/*! - * \brief concrete factory for circular buffers built using mmap and shm_open - */ -class GR_CORE_API gr_vmcircbuf_createfilemapping_factory : public gr_vmcircbuf_factory -{ - private: - static gr_vmcircbuf_factory *s_the_factory; - - public: - static gr_vmcircbuf_factory *singleton (); - - virtual const char *name () const { return "gr_vmcircbuf_createfilemapping_factory"; } - - /*! - * \brief return granularity of mapping, typically equal to page size - */ - virtual int granularity (); - - /*! - * \brief return a gr_vmcircbuf, or 0 if unable. - * - * Call this to create a doubly mapped circular buffer. - */ - virtual gr_vmcircbuf *make (int size); -}; - -#endif /* _GR_VMCIRCBUF_CREATEFILEMAPPING_H_ */ diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.cc deleted file mode 100644 index 3d170081d0..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.cc +++ /dev/null @@ -1,205 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,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_vmcircbuf_mmap_shm_open.h> -#include <stdexcept> -#include <assert.h> -#include <unistd.h> -#include <fcntl.h> -#ifdef HAVE_SYS_TYPES_H -#include <sys/types.h> -#endif -#ifdef HAVE_SYS_MMAN_H -#include <sys/mman.h> -#endif -#include <errno.h> -#include <stdio.h> -#include <gr_pagesize.h> -#include <gr_sys_paths.h> - - -gr_vmcircbuf_mmap_shm_open::gr_vmcircbuf_mmap_shm_open (int size) - : gr_vmcircbuf (size) -{ -#if !defined(HAVE_MMAP) || !defined(HAVE_SHM_OPEN) - fprintf (stderr, "gr_vmcircbuf_mmap_shm_open: mmap or shm_open is not available\n"); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); -#else - static int s_seg_counter = 0; - - if (size <= 0 || (size % gr_pagesize ()) != 0){ - fprintf (stderr, "gr_vmcircbuf_mmap_shm_open: invalid size = %d\n", size); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } - - int shm_fd = -1; - char seg_name[1024]; - static bool portable_format = true; - - // open a new named shared memory segment - - while (1){ - if (portable_format){ - - // This is the POSIX recommended "portable format". - // Of course the "portable format" doesn't work on some systems... - - snprintf (seg_name, sizeof (seg_name), - "/gnuradio-%d-%d", getpid (), s_seg_counter); - } - else { - - // Where the "portable format" doesn't work, we try building - // a full filesystem pathname pointing into a suitable temporary directory. - - snprintf (seg_name, sizeof (seg_name), - "%s/gnuradio-%d-%d", gr_tmp_path (), getpid (), s_seg_counter); - } - - shm_fd = shm_open (seg_name, O_RDWR | O_CREAT | O_EXCL, 0600); - if (shm_fd == -1 && errno == EACCES && portable_format){ - portable_format = false; - continue; // try again using "non-portable format" - } - - s_seg_counter++; - - if (shm_fd == -1){ - if (errno == EEXIST) // Named segment already exists (shouldn't happen). Try again - continue; - - char msg[1024]; - snprintf (msg, sizeof (msg), "gr_vmcircbuf_mmap_shm_open: shm_open [%s]", seg_name); - perror (msg); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } - break; - } - - // We've got a new shared memory segment fd open. - // Now set it's length to 2x what we really want and mmap it in. - - if (ftruncate (shm_fd, (off_t) 2 * size) == -1){ - close (shm_fd); // cleanup - perror ("gr_vmcircbuf_mmap_shm_open: ftruncate (1)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } - - void *first_copy = mmap (0, 2 * size, - PROT_READ | PROT_WRITE, MAP_SHARED, - shm_fd, (off_t) 0); - - if (first_copy == MAP_FAILED){ - close (shm_fd); // cleanup - perror ("gr_vmcircbuf_mmap_shm_open: mmap (1)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } - - // unmap the 2nd half - if (munmap ((char *) first_copy + size, size) == -1){ - close (shm_fd); // cleanup - perror ("gr_vmcircbuf_mmap_shm_open: munmap (1)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } - - // map the first half into the now available hole where the - // second half used to be. - - void *second_copy = mmap ((char *) first_copy + size, size, - PROT_READ | PROT_WRITE, MAP_SHARED, - shm_fd, (off_t) 0); - - if (second_copy == MAP_FAILED){ - close (shm_fd); // cleanup - perror ("gr_vmcircbuf_mmap_shm_open: mmap (2)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } - -#if 0 // OS/X doesn't allow you to resize the segment - - // cut the shared memory segment down to size - if (ftruncate (shm_fd, (off_t) size) == -1){ - close (shm_fd); // cleanup - perror ("gr_vmcircbuf_mmap_shm_open: ftruncate (2)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } -#endif - - close (shm_fd); // fd no longer needed. The mapping is retained. - - if (shm_unlink (seg_name) == -1){ // unlink the seg_name. - perror ("gr_vmcircbuf_mmap_shm_open: shm_unlink"); - throw std::runtime_error ("gr_vmcircbuf_mmap_shm_open"); - } - - // Now remember the important stuff - - d_base = (char *) first_copy; - d_size = size; -#endif -} - -gr_vmcircbuf_mmap_shm_open::~gr_vmcircbuf_mmap_shm_open () -{ -#if defined(HAVE_MMAP) - if (munmap (d_base, 2 * d_size) == -1){ - perror ("gr_vmcircbuf_mmap_shm_open: munmap (2)"); - } -#endif -} - -// ---------------------------------------------------------------- -// The factory interface -// ---------------------------------------------------------------- - - -gr_vmcircbuf_factory *gr_vmcircbuf_mmap_shm_open_factory::s_the_factory = 0; - -gr_vmcircbuf_factory * -gr_vmcircbuf_mmap_shm_open_factory::singleton () -{ - if (s_the_factory) - return s_the_factory; - - s_the_factory = new gr_vmcircbuf_mmap_shm_open_factory (); - return s_the_factory; -} - -int -gr_vmcircbuf_mmap_shm_open_factory::granularity () -{ - return gr_pagesize (); -} - -gr_vmcircbuf * -gr_vmcircbuf_mmap_shm_open_factory::make (int size) -{ - try { - return new gr_vmcircbuf_mmap_shm_open (size); - } - catch (...){ - return 0; - } -} diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h deleted file mode 100644 index bcbbbac424..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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 _GR_VMCIRCBUF_MMAP_SHM_OPEN_H_ -#define _GR_VMCIRCBUF_MMAP_SHM_OPEN_H_ - -#include <gr_core_api.h> -#include <gr_vmcircbuf.h> - -/*! - * \brief concrete class to implement circular buffers with mmap and shm_open - * \ingroup internal - */ -class GR_CORE_API gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf { - public: - - // CREATORS - - gr_vmcircbuf_mmap_shm_open (int size); - virtual ~gr_vmcircbuf_mmap_shm_open (); -}; - -/*! - * \brief concrete factory for circular buffers built using mmap and shm_open - */ -class GR_CORE_API gr_vmcircbuf_mmap_shm_open_factory : public gr_vmcircbuf_factory { - private: - static gr_vmcircbuf_factory *s_the_factory; - - public: - static gr_vmcircbuf_factory *singleton (); - - virtual const char *name () const { return "gr_vmcircbuf_mmap_shm_open_factory"; } - - /*! - * \brief return granularity of mapping, typically equal to page size - */ - virtual int granularity (); - - /*! - * \brief return a gr_vmcircbuf, or 0 if unable. - * - * Call this to create a doubly mapped circular buffer. - */ - virtual gr_vmcircbuf *make (int size); -}; - -#endif /* _GR_VMCIRCBUF_MMAP_SHM_OPEN_H_ */ diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc deleted file mode 100644 index 35de64699e..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,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_vmcircbuf_mmap_tmpfile.h> -#include <stdexcept> -#include <assert.h> -#include <unistd.h> -#include <stdlib.h> -#ifdef HAVE_SYS_TYPES_H -#include <sys/types.h> -#endif -#ifdef HAVE_SYS_MMAN_H -#include <sys/mman.h> -#endif -#include <fcntl.h> -#include <errno.h> -#include <stdio.h> -#include <string.h> -#include <gr_pagesize.h> -#include <gr_sys_paths.h> - -gr_vmcircbuf_mmap_tmpfile::gr_vmcircbuf_mmap_tmpfile (int size) - : gr_vmcircbuf (size) -{ -#if !defined(HAVE_MMAP) - fprintf (stderr, "gr_vmcircbuf_mmap_tmpfile: mmap or mkstemp is not available\n"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); -#else - - if (size <= 0 || (size % gr_pagesize ()) != 0){ - fprintf (stderr, "gr_vmcircbuf_mmap_tmpfile: invalid size = %d\n", size); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - int seg_fd = -1; - char seg_name[1024]; - - static int s_seg_counter = 0; - - - // open a temporary file that we'll map in a bit later - - while (1){ - snprintf (seg_name, sizeof (seg_name), - "%s/gnuradio-%d-%d-XXXXXX", gr_tmp_path (), getpid (), s_seg_counter); - s_seg_counter++; - - seg_fd = open (seg_name, O_RDWR | O_CREAT | O_EXCL, 0600); - if (seg_fd == -1){ - if (errno == EEXIST) // File already exists (shouldn't happen). Try again - continue; - - char msg[1024]; - snprintf (msg, sizeof (msg), - "gr_vmcircbuf_mmap_tmpfile: open [%s]", seg_name); - perror (msg); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - break; - } - - if (unlink (seg_name) == -1){ - perror ("gr_vmcircbuf_mmap_tmpfile: unlink"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - // We've got a valid file descriptor to a tmp file. - // Now set it's length to 2x what we really want and mmap it in. - - if (ftruncate (seg_fd, (off_t) 2 * size) == -1){ - close (seg_fd); // cleanup - perror ("gr_vmcircbuf_mmap_tmpfile: ftruncate (1)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - void *first_copy = mmap (0, 2 * size, - PROT_READ | PROT_WRITE, MAP_SHARED, - seg_fd, (off_t) 0); - - if (first_copy == MAP_FAILED){ - close (seg_fd); // cleanup - perror ("gr_vmcircbuf_mmap_tmpfile: mmap (1)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - // unmap the 2nd half - if (munmap ((char *) first_copy + size, size) == -1){ - close (seg_fd); // cleanup - perror ("gr_vmcircbuf_mmap_tmpfile: munmap (1)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - // map the first half into the now available hole where the - // second half used to be. - - void *second_copy = mmap ((char *) first_copy + size, size, - PROT_READ | PROT_WRITE, MAP_SHARED, - seg_fd, (off_t) 0); - - if (second_copy == MAP_FAILED){ - munmap(first_copy, size); // cleanup - close (seg_fd); - perror ("gr_vmcircbuf_mmap_tmpfile: mmap (2)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - // check for contiguity - if ((char *) second_copy != (char *) first_copy + size){ - munmap(first_copy, size); // cleanup - munmap(second_copy, size); - close (seg_fd); - perror ("gr_vmcircbuf_mmap_tmpfile: non-contiguous second copy"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - // cut the tmp file down to size - if (ftruncate (seg_fd, (off_t) size) == -1){ - munmap(first_copy, size); // cleanup - munmap(second_copy, size); - close (seg_fd); - perror ("gr_vmcircbuf_mmap_tmpfile: ftruncate (2)"); - throw std::runtime_error ("gr_vmcircbuf_mmap_tmpfile"); - } - - close (seg_fd); // fd no longer needed. The mapping is retained. - - // Now remember the important stuff - - d_base = (char *) first_copy; - d_size = size; -#endif -} - -gr_vmcircbuf_mmap_tmpfile::~gr_vmcircbuf_mmap_tmpfile () -{ -#if defined(HAVE_MMAP) - if (munmap (d_base, 2 * d_size) == -1){ - perror ("gr_vmcircbuf_mmap_tmpfile: munmap (2)"); - } -#endif -} - -// ---------------------------------------------------------------- -// The factory interface -// ---------------------------------------------------------------- - - -gr_vmcircbuf_factory *gr_vmcircbuf_mmap_tmpfile_factory::s_the_factory = 0; - -gr_vmcircbuf_factory * -gr_vmcircbuf_mmap_tmpfile_factory::singleton () -{ - if (s_the_factory) - return s_the_factory; - - s_the_factory = new gr_vmcircbuf_mmap_tmpfile_factory (); - return s_the_factory; -} - -int -gr_vmcircbuf_mmap_tmpfile_factory::granularity () -{ - return gr_pagesize (); -} - -gr_vmcircbuf * -gr_vmcircbuf_mmap_tmpfile_factory::make (int size) -{ - try { - return new gr_vmcircbuf_mmap_tmpfile (size); - } - catch (...){ - return 0; - } -} diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h deleted file mode 100644 index 28ff314908..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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 _GR_VMCIRCBUF_MMAP_TMPFILE_H_ -#define _GR_VMCIRCBUF_MMAP_TMPFILE_H_ - -#include <gr_core_api.h> -#include <gr_vmcircbuf.h> - -/*! - * \brief concrete class to implement circular buffers with mmap and shm_open - * \ingroup internal - */ -class GR_CORE_API gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf { - public: - - // CREATORS - - gr_vmcircbuf_mmap_tmpfile (int size); - virtual ~gr_vmcircbuf_mmap_tmpfile (); -}; - -/*! - * \brief concrete factory for circular buffers built using mmap and shm_open - */ -class GR_CORE_API gr_vmcircbuf_mmap_tmpfile_factory : public gr_vmcircbuf_factory { - private: - static gr_vmcircbuf_factory *s_the_factory; - - public: - static gr_vmcircbuf_factory *singleton (); - - virtual const char *name () const { return "gr_vmcircbuf_mmap_tmpfile_factory"; } - - /*! - * \brief return granularity of mapping, typically equal to page size - */ - virtual int granularity (); - - /*! - * \brief return a gr_vmcircbuf, or 0 if unable. - * - * Call this to create a doubly mapped circular buffer. - */ - virtual gr_vmcircbuf *make (int size); -}; - -#endif /* _GR_VMCIRCBUF_MMAP_TMPFILE_H_ */ diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.cc deleted file mode 100644 index d9cf75e70f..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.cc +++ /dev/null @@ -1,194 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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_vmcircbuf_sysv_shm.h> -#include <stdexcept> -#include <assert.h> -#include <unistd.h> -#include <stdlib.h> -#include <fcntl.h> -#ifdef HAVE_SYS_IPC_H -#include <sys/ipc.h> -#endif -#ifdef HAVE_SYS_SHM_H -#include <sys/shm.h> -#endif -#include <errno.h> -#include <stdio.h> -#include <gr_pagesize.h> - - -gr_vmcircbuf_sysv_shm::gr_vmcircbuf_sysv_shm (int size) - : gr_vmcircbuf (size) -{ -#if !defined(HAVE_SYS_SHM_H) - fprintf (stderr, "gr_vmcircbuf_sysv_shm: sysv shared memory is not available\n"); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); -#else - - int pagesize = gr_pagesize(); - - if (size <= 0 || (size % pagesize) != 0){ - fprintf (stderr, "gr_vmcircbuf_sysv_shm: invalid size = %d\n", size); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - int shmid_guard = -1; - int shmid1 = -1; - int shmid2 = -1; - - // We use this as a guard page. We'll map it read-only on both ends of the buffer. - // Ideally we'd map it no access, but I don't think that's possible with SysV - if ((shmid_guard = shmget (IPC_PRIVATE, pagesize, IPC_CREAT | 0400)) == -1){ - perror ("gr_vmcircbuf_sysv_shm: shmget (0)"); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - if ((shmid2 = shmget (IPC_PRIVATE, 2 * size + 2 * pagesize, IPC_CREAT | 0700)) == -1){ - perror ("gr_vmcircbuf_sysv_shm: shmget (1)"); - shmctl (shmid_guard, IPC_RMID, 0); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - if ((shmid1 = shmget (IPC_PRIVATE, size, IPC_CREAT | 0700)) == -1){ - perror ("gr_vmcircbuf_sysv_shm: shmget (2)"); - shmctl (shmid_guard, IPC_RMID, 0); - shmctl (shmid2, IPC_RMID, 0); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - void *first_copy = shmat (shmid2, 0, 0); - if (first_copy == (void *) -1){ - perror ("gr_vmcircbuf_sysv_shm: shmat (1)"); - shmctl (shmid_guard, IPC_RMID, 0); - shmctl (shmid2, IPC_RMID, 0); - shmctl (shmid1, IPC_RMID, 0); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - shmctl (shmid2, IPC_RMID, 0); - - // There may be a race between our detach and attach. - // - // If the system allocates all shared memory segments at the same - // virtual addresses in all processes and if the system allocates - // some other segment to first_copy or first_copoy + size between - // our detach and attach, the attaches below could fail [I've never - // seen it fail for this reason]. - - shmdt (first_copy); - - // first read-only guard page - if (shmat (shmid_guard, first_copy, SHM_RDONLY) == (void *) -1){ - perror ("gr_vmcircbuf_sysv_shm: shmat (2)"); - shmctl (shmid_guard, IPC_RMID, 0); - shmctl (shmid1, IPC_RMID, 0); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - // first copy - if (shmat (shmid1, (char *) first_copy + pagesize, 0) == (void *) -1){ - perror ("gr_vmcircbuf_sysv_shm: shmat (3)"); - shmctl (shmid_guard, IPC_RMID, 0); - shmctl (shmid1, IPC_RMID, 0); - shmdt (first_copy); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - // second copy - if (shmat (shmid1, (char *) first_copy + pagesize + size, 0) == (void *) -1){ - perror ("gr_vmcircbuf_sysv_shm: shmat (4)"); - shmctl (shmid_guard, IPC_RMID, 0); - shmctl (shmid1, IPC_RMID, 0); - shmdt ((char *)first_copy + pagesize); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - // second read-only guard page - if (shmat (shmid_guard, (char *) first_copy + pagesize + 2 * size, SHM_RDONLY) == (void *) -1){ - perror ("gr_vmcircbuf_sysv_shm: shmat (5)"); - shmctl (shmid_guard, IPC_RMID, 0); - shmctl (shmid1, IPC_RMID, 0); - shmdt (first_copy); - shmdt ((char *)first_copy + pagesize); - shmdt ((char *)first_copy + pagesize + size); - throw std::runtime_error ("gr_vmcircbuf_sysv_shm"); - } - - shmctl (shmid1, IPC_RMID, 0); - shmctl (shmid_guard, IPC_RMID, 0); - - // Now remember the important stuff - - d_base = (char *) first_copy + pagesize; - d_size = size; -#endif -} - -gr_vmcircbuf_sysv_shm::~gr_vmcircbuf_sysv_shm () -{ -#if defined(HAVE_SYS_SHM_H) - if (shmdt (d_base - gr_pagesize()) == -1 - || shmdt (d_base) == -1 - || shmdt (d_base + d_size) == -1 - || shmdt (d_base + 2 * d_size) == -1){ - perror ("gr_vmcircbuf_sysv_shm: shmdt (2)"); - } -#endif -} - -// ---------------------------------------------------------------- -// The factory interface -// ---------------------------------------------------------------- - - -gr_vmcircbuf_factory *gr_vmcircbuf_sysv_shm_factory::s_the_factory = 0; - -gr_vmcircbuf_factory * -gr_vmcircbuf_sysv_shm_factory::singleton () -{ - if (s_the_factory) - return s_the_factory; - - s_the_factory = new gr_vmcircbuf_sysv_shm_factory (); - return s_the_factory; -} - -int -gr_vmcircbuf_sysv_shm_factory::granularity () -{ - return gr_pagesize (); -} - -gr_vmcircbuf * -gr_vmcircbuf_sysv_shm_factory::make (int size) -{ - try { - return new gr_vmcircbuf_sysv_shm (size); - } - catch (...){ - return 0; - } -} diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h deleted file mode 100644 index 9f5c04f0d6..0000000000 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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 _GR_VMCIRCBUF_SYSV_SHM_H_ -#define _GR_VMCIRCBUF_SYSV_SHM_H_ - -#include <gr_core_api.h> -#include <gr_vmcircbuf.h> - -/*! - * \brief concrete class to implement circular buffers with mmap and shm_open - * \ingroup internal - */ -class GR_CORE_API gr_vmcircbuf_sysv_shm : public gr_vmcircbuf { - public: - - // CREATORS - - gr_vmcircbuf_sysv_shm (int size); - virtual ~gr_vmcircbuf_sysv_shm (); -}; - -/*! - * \brief concrete factory for circular buffers built using mmap and shm_open - */ -class GR_CORE_API gr_vmcircbuf_sysv_shm_factory : public gr_vmcircbuf_factory { - private: - static gr_vmcircbuf_factory *s_the_factory; - - public: - static gr_vmcircbuf_factory *singleton (); - - virtual const char *name () const { return "gr_vmcircbuf_sysv_shm_factory"; } - - /*! - * \brief return granularity of mapping, typically equal to page size - */ - virtual int granularity (); - - /*! - * \brief return a gr_vmcircbuf, or 0 if unable. - * - * Call this to create a doubly mapped circular buffer. - */ - virtual gr_vmcircbuf *make (int size); -}; - -#endif /* _GR_VMCIRCBUF_SYSV_SHM_H_ */ diff --git a/gnuradio-core/src/lib/runtime/ice_application_base.cc b/gnuradio-core/src/lib/runtime/ice_application_base.cc deleted file mode 100644 index 88db6056c1..0000000000 --- a/gnuradio-core/src/lib/runtime/ice_application_base.cc +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <ice_application_base.h> - -int ice_application_common::d_reacquire_attributes(0); -bool ice_application_common::d_main_called(false); -bool ice_application_common::d_have_ice_config(false); -boost::shared_ptr<boost::thread> ice_application_common::d_thread; -std::string ice_application_common::d_endpointStr(""); - -boost::shared_ptr<ice_application_common> -ice_application_common::Instance() -{ - static boost::shared_ptr<ice_application_common> - instance(new ice_application_common()); - return instance; -} - -int ice_application_common::run(int, char**) -{ - communicator()->waitForShutdown(); - return EXIT_SUCCESS; -} diff --git a/gnuradio-core/src/lib/runtime/ice_application_base.h b/gnuradio-core/src/lib/runtime/ice_application_base.h deleted file mode 100644 index 799ab9c21e..0000000000 --- a/gnuradio-core/src/lib/runtime/ice_application_base.h +++ /dev/null @@ -1,222 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 ICE_APPLICATION_BASE_H -#define ICE_APPLICATION_BASE_H - -#include <gr_core_api.h> -#include <gr_prefs.h> -#include <Ice/Ice.h> -#include <boost/thread.hpp> -#include <boost/thread/mutex.hpp> -#include <stdio.h> -#include <iostream> -#include <set> -#include <string> -#include <stdio.h> - -namespace { - static const unsigned int ICEAPPLICATION_ACTIVATION_TIMEOUT_MS(600); -}; - - -class GR_CORE_API ice_application_common : public Ice::Application -{ - public: - template<typename TserverBase, typename TserverClass> friend class ice_application_base; - static boost::shared_ptr<ice_application_common> Instance(); - ~ice_application_common() {;} - static int d_reacquire_attributes; - - protected: - static bool d_main_called, d_have_ice_config; - static std::string d_endpointStr; - static boost::shared_ptr<boost::thread> d_thread; - ice_application_common() {;} - int run(int, char*[]); -}; - -template<typename TserverBase, typename TserverClass> -class ice_application_base -{ -public: - boost::shared_ptr<ice_application_common> d_application; - ice_application_base(TserverClass* _this); - ~ice_application_base() {;} - - static TserverBase* i(); - static const std::vector<std::string> endpoints(); - -protected: - bool have_ice_config() { return d_application->d_have_ice_config; } - void set_endpoint(const std::string& endpoint) { d_application->d_endpointStr = endpoint;} - - //this one is the key... overwrite in templated/inherited variants - virtual TserverBase* i_impl() = 0; - - //tools for the i_impl... - //tell it when it has to resync with the communicator - virtual bool reacquire_sync(); - virtual void sync_reacquire(); - - static TserverClass* d_this; - - int d_reacquire; - //static int d_reacquire_attributes; - -private: - void starticeexample(); - - bool application_started(); - - int run(int, char*[]); - - static void kickoff(); -}; - -template<typename TserverBase, typename TserverClass> -TserverClass* ice_application_base<TserverBase, TserverClass>::d_this(0); - -//template<typename TserverBase, typename TserverClass> -//int ice_application_base<TserverBase, TserverClass>::d_reacquire_attributes(0); - -template<typename TserverBase, typename TserverClass> -ice_application_base<TserverBase, TserverClass>::ice_application_base(TserverClass* _this) - : d_reacquire(0) -{ - //d_reacquire_attributes = 0; - d_this = _this; - d_application = ice_application_common::Instance(); -} - -template<typename TserverBase, typename TserverClass> -void ice_application_base<TserverBase, TserverClass>::starticeexample() -{ - char* argv[2]; - argv[0] = (char*)""; - - std::string conffile = gr_prefs::singleton()->get_string("ControlPort", "config", ""); - - if(conffile.size() > 0) { - std::stringstream iceconf; - ice_application_common::d_have_ice_config = true; - ice_application_common::d_main_called = true; - iceconf << conffile; - d_application->main(0, argv, iceconf.str().c_str()); - } - else { - ice_application_common::d_have_ice_config = false; - ice_application_common::d_main_called = true; - d_application->main(0, argv); - } -} - -template<typename TserverBase, typename TserverClass> -void ice_application_base<TserverBase, TserverClass>::kickoff() -{ - static bool run_once = false; - - //if(!d_this->application_started()) { - if(!run_once) { - ++d_this->d_application->d_reacquire_attributes; - - ice_application_common::d_thread = boost::shared_ptr<boost::thread> - (new boost::thread(boost::bind(&ice_application_base::starticeexample, d_this))); - - ::timespec timer_ts, rem_ts; - timer_ts.tv_sec = 0; timer_ts.tv_nsec = ICEAPPLICATION_ACTIVATION_TIMEOUT_MS*1000; - - int iter = 0; - while(!d_this->application_started()) { - ::nanosleep(&timer_ts, &rem_ts); - if(!d_this->application_started()) - std::cout << "@"; - if(iter++ > 100) { - std::cout << "ice_application_base::kickoff(), timeout waiting to get communicator() d_application->main() might have failed?!" << std::endl;; - break; - } - } - - run_once = true; - } - - return; -} - - -template<typename TserverBase, typename TserverClass> -bool ice_application_base<TserverBase, TserverClass>::reacquire_sync() -{ - return (d_this->d_reacquire != d_application->d_reacquire_attributes); -} - -template<typename TserverBase, typename TserverClass> -void ice_application_base<TserverBase, TserverClass>::sync_reacquire() -{ - d_this->d_reacquire = d_application->d_reacquire_attributes; -} - - -template<typename TserverBase, typename TserverClass> -const std::vector<std::string> ice_application_base<TserverBase, TserverClass>::endpoints() -{ - std::vector<std::string> ep; ep.push_back(d_this->d_application->d_endpointStr); return ep; -} - -template<typename TserverBase, typename TserverClass> -TserverBase* ice_application_base<TserverBase, TserverClass>::i() -{ - //printf("indacall\n"); - - assert(d_this != 0); - if(!d_this->application_started()) { - //printf("anotherkickoff\n"); - kickoff(); - } - //printf("donekickedoff\n"); - - /*else if(!d_proxy) { - d_proxy = d_this->i_impl(); - assert(d_proxy != 0); - }*/ - - return d_this->i_impl(); -} - -/*template<typename TserverBase, typename TserverClass> - int ice_application_base<TserverBase, TserverClass>::run(int argc, char* argv[]) { - int implreturn(run_impl(argc, argv)); - ice_application_base<TserverBase, TserverClass>::communicator()->waitForShutdown(); - return implreturn; - }*/ - -template<typename TserverBase, typename TImplClass> -bool ice_application_base<TserverBase, TImplClass>::application_started() -{ - return ice_application_base<TserverBase, TImplClass>::d_this->d_application->communicator(); -} - -/*template<typename TserverBase, typename TImplClass> -int ice_application_base<TserverBase, TImplClass>::run_impl(int argc, char* argv[]) { return EXIT_SUCCESS; } -*/ - -#endif diff --git a/gnuradio-core/src/lib/runtime/ice_server_template.h b/gnuradio-core/src/lib/runtime/ice_server_template.h deleted file mode 100644 index 8ddb03cc8e..0000000000 --- a/gnuradio-core/src/lib/runtime/ice_server_template.h +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 ICE_SERVER_TEMPLATE_H -#define ICE_SERVER_TEMPLATE_H - -#include <ice_application_base.h> -#include <iostream> - -template<typename TserverBase, typename TserverClass, typename TImplClass, typename TIceClass> -class ice_server_template : public ice_application_base<TserverBase, TImplClass> -{ -public: - ice_server_template(TImplClass* _this, - const std::string& contolPortName, - const std::string& endpointName); - ~ice_server_template(); - -protected: - //virtual bool application_started(); - TserverBase* i_impl(); - friend class ice_application_base<TserverBase, TImplClass>; - -private: - //virtual int run_impl(int, char*[]); - Ice::ObjectAdapterPtr d_adapter; - TserverBase* d_iceserver; - const std::string d_contolPortName, d_endpointName; -}; - -template<typename TserverBase, typename TserverClass, typename TImplClass, typename TIceClass> -ice_server_template<TserverBase, TserverClass, TImplClass, TIceClass>::ice_server_template - (TImplClass* _this, const std::string& controlPortName, const std::string& endpointName) - : ice_application_base<TserverBase, TImplClass>(_this), - d_iceserver(0), - d_contolPortName(controlPortName), - d_endpointName(endpointName) -{;} - -template<typename TserverBase, typename TserverClass, typename TImplClass, typename TIceClass> -ice_server_template<TserverBase, TserverClass,TImplClass, TIceClass>::~ice_server_template() -{ - if(d_adapter) { - d_adapter->deactivate(); - delete(d_iceserver); - d_adapter = 0; - } -} - -template<typename TserverBase, typename TserverClass, typename TImplClass, typename TIceClass> -TserverBase* ice_server_template<TserverBase, TserverClass, TImplClass, TIceClass>::i_impl() -{ - if(ice_application_base<TserverBase, TImplClass>::d_this->reacquire_sync()) { - d_adapter = (ice_application_base<TserverBase, TImplClass>::d_this->have_ice_config()) ? - ice_application_base<TserverBase, TImplClass>::d_this->d_this->d_application->communicator()->createObjectAdapter(d_contolPortName) : - ice_application_base<TserverBase, TImplClass>::d_this->d_this->d_application->communicator()->createObjectAdapterWithEndpoints(d_contolPortName,"tcp -h *"); - - TserverClass* server_ice(new TserverClass()); - TIceClass obj(server_ice); - - Ice::Identity id(ice_application_base<TserverBase, TImplClass>::d_this->d_this->d_application->communicator()->stringToIdentity(d_endpointName)); - d_adapter->add(obj, id); - d_adapter->activate(); - ice_application_base<TserverBase, TImplClass>::d_this->set_endpoint(ice_application_common::communicator()->proxyToString(d_adapter->createDirectProxy(id))); - - std::cout << std::endl << "Ice Radio Endpoint: " - << ice_server_template<TserverBase, TserverClass, TImplClass, TIceClass>::endpoints()[0] - << std::endl; - - d_iceserver = (TserverBase*) server_ice; - ice_application_base<TserverBase, TImplClass>::d_this->sync_reacquire(); - } - - return d_iceserver; -} - -#endif /* ICE_SERVER_TEMPLATE_H */ diff --git a/gnuradio-core/src/lib/runtime/nop.h b/gnuradio-core/src/lib/runtime/nop.h deleted file mode 100644 index 5b3166da7b..0000000000 --- a/gnuradio-core/src/lib/runtime/nop.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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_CTRLPORT_NOP_H -#define INCLUDED_CTRLPORT_NOP_H - -#include <ctrlport/api.h> -#include <gr_sync_block.h> - -namespace gr { - namespace ctrlport { - - /*! - * \brief A NOP block for testing ctrlport - * - */ - class CTRLPORT_API nop : virtual public gr_sync_block - { - public: - // gr::ctrlport::nop::sptr - typedef boost::shared_ptr<nop> sptr; - - /*! - * Build a simple test block - */ - static sptr make(size_t itemsize, int a, int b); - - virtual void set_a(int b) = 0; - virtual void set_b(int b) = 0; - virtual int a() const = 0; - virtual int b() const = 0; - }; - - } /* namespace ctrlport */ -} /* namespace gr */ - -#endif /* INCLUDED_CTRLPORT_NOP_H */ - diff --git a/gnuradio-core/src/lib/runtime/nop_impl.cc b/gnuradio-core/src/lib/runtime/nop_impl.cc deleted file mode 100644 index def1740678..0000000000 --- a/gnuradio-core/src/lib/runtime/nop_impl.cc +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 "nop_impl.h" -#include <gr_io_signature.h> - -namespace gr { - namespace ctrlport { - - nop::sptr - nop::make(size_t itemsize, int a, int b) - { - return gnuradio::get_initial_sptr - (new nop_impl(itemsize, a, b)); - } - - - nop_impl::nop_impl(size_t itemsize, int a, int b) - : gr_sync_block("nop", - gr_make_io_signature(1, 1, itemsize), - gr_make_io_signature(0, 0, 0)) - { - set_a(a); - set_b(b); - } - - nop_impl::~nop_impl() - { - } - - void - nop_impl::set_a(int a) - { - d_a = a; - } - - void - nop_impl::set_b(int b) - { - d_b = b; - } - - int - nop_impl::a() const - { - return d_a; - } - - int - nop_impl::b() const - { - return d_b; - } - - int - nop_impl::work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) - { - return noutput_items; - } - - void - nop_impl::setup_rpc() - { - d_get_32i_rpcs.push_back(get_32i_sptr - (new get_32i_t(d_name, "a", this, unique_id(), - &nop_impl::a, - pmt::mp(-128), pmt::mp(127), pmt::mp(0), - "", "Value of a", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_get_32i_rpcs.push_back(get_32i_sptr - (new get_32i_t(d_name, "b", this, unique_id(), - &nop_impl::b, - pmt::mp(-128), pmt::mp(127), pmt::mp(0), - "", "Value of b", RPC_PRIVLVL_MIN, - DISPTIME | DISPOPTSTRIP))); - - d_set_32i_rpcs.push_back(set_32i_sptr - (new set_32i_t(d_name, "a", this, unique_id(), - &nop_impl::set_a, - pmt::mp(-128), pmt::mp(127), pmt::mp(0), - "", "Value of a", - RPC_PRIVLVL_MIN, DISPNULL))); - - d_set_32i_rpcs.push_back(set_32i_sptr - (new set_32i_t(d_name, "b", this, unique_id(), - &nop_impl::set_b, - pmt::mp(-128), pmt::mp(127), pmt::mp(0), - "", "Value of b", - RPC_PRIVLVL_MIN, DISPNULL))); - } - - } /* namespace ctrlport */ -} /* namespace gr */ diff --git a/gnuradio-core/src/lib/runtime/nop_impl.h b/gnuradio-core/src/lib/runtime/nop_impl.h deleted file mode 100644 index a39ddac8f9..0000000000 --- a/gnuradio-core/src/lib/runtime/nop_impl.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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_CTRLPORT_NOP_IMPL_H -#define INCLUDED_CTRLPORT_NOP_IMPL_H - -#include <ctrlport/nop.h> -#include <ctrlport/rpcregisterhelpers.h> -#include <boost/thread/shared_mutex.hpp> - -namespace gr { - namespace ctrlport { - - class CTRLPORT_API nop_impl : public nop - { - private: - typedef rpcbasic_register_get<nop_impl, int> get_32i_t; - typedef rpcbasic_register_set<nop_impl, int> set_32i_t; - - typedef boost::shared_ptr<get_32i_t> get_32i_sptr; - typedef boost::shared_ptr<set_32i_t> set_32i_sptr; - - std::vector<get_32i_sptr> d_get_32i_rpcs; - std::vector<set_32i_sptr> d_set_32i_rpcs; - - void setup_rpc(); - - int d_a, d_b; - - public: - nop_impl(size_t itemsize, int a, int b); - ~nop_impl(); - - void set_a(int a); - void set_b(int b); - int a() const; - int b() const; - - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - }; - - } /* namespace ctrlport */ -} /* namespace gr */ - -#endif /* INCLUDED_CTRLPORT_NOP_IMPL_H */ - diff --git a/gnuradio-core/src/lib/runtime/pycallback_object.h b/gnuradio-core/src/lib/runtime/pycallback_object.h deleted file mode 100644 index 922e03393e..0000000000 --- a/gnuradio-core/src/lib/runtime/pycallback_object.h +++ /dev/null @@ -1,207 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <iostream> -#include <rpcregisterhelpers.h> -#include <ice_application_base.h> -#include <IcePy_Communicator.h> -#include <pythread.h> -#include <boost/format.hpp> -#include <config.h> - -enum pyport_t { - PYPORT_STRING, - PYPORT_FLOAT -}; - -class Instance -{ -public: - static boost::shared_ptr<ice_application_common> get_application() - { - return ice_application_common::Instance(); - } - static Ice::CommunicatorPtr get_swig_communicator() - { - return get_application()->communicator(); - } -}; - -int pycallback_object_count = 500; - -// a simple to-PMT converter template class-function -template <class myType> class pmt_assist -{ -public: - static pmt::pmt_t make(myType _val) - { - return pmt::mp(_val); - } -}; - -/* template specializations for vectors that cant use pmt::mp() */ -template<> -pmt::pmt_t pmt_assist<std::vector<float> >::make(std::vector<float> _val) -{ - return pmt::init_f32vector(_val.size(), &_val[0]); -} - -template<> -pmt::pmt_t pmt_assist<std::vector<gr_complex> >::make(std::vector<gr_complex> _val) -{ - return pmt::init_c32vector(_val.size(), &_val[0]); -} - -template <class myType> class pycallback_object -{ -public: - pycallback_object(std::string name, std::string functionbase, - std::string units, std::string desc, - myType min, myType max, myType deflt, - DisplayType dtype) : - d_callback(NULL), - d_functionbase(functionbase), d_units(units), d_desc(desc), - d_min(min), d_max(max), d_deflt(deflt), d_dtype(dtype), - d_name(name), d_id(pycallback_object_count++) - { - d_callback = NULL; - setup_rpc(); - } - - void add_rpc_variable(rpcbasic_sptr s) - { - d_rpc_vars.push_back(s); - } - - myType get() { - myType rVal; - if(d_callback == NULL) { - printf("WARNING: pycallback_object get() called without py callback set!\n"); - return rVal; - } - else { - // obtain PyGIL - PyGILState_STATE state = PyGILState_Ensure(); - - PyObject *func; - //PyObject *arglist; - PyObject *result; - - func = (PyObject *) d_callback; // Get Python function - //arglist = Py_BuildValue(""); // Build argument list - result = PyEval_CallObject(func,NULL); // Call Python - //result = PyEval_CallObject(func,arglist); // Call Python - //Py_DECREF(arglist); // Trash arglist - if(result) { // If no errors, return double - rVal = pyCast(result); - } - Py_XDECREF(result); - - // release PyGIL - PyGILState_Release(state); - return rVal; - } - } - - void set_callback(PyObject *cb) - { - d_callback = cb; - } - - void setup_rpc() - { -#ifdef GR_CTRLPORT - add_rpc_variable( - rpcbasic_sptr(new rpcbasic_register_get<pycallback_object, myType>( - (boost::format("%s%d") % d_name % d_id).str() , d_functionbase.c_str(), - this, &pycallback_object::get, pmt_assist<myType>::make(d_min), - pmt_assist<myType>::make(d_max), pmt_assist<myType>::make(d_deflt), - d_units.c_str(), d_desc.c_str(), RPC_PRIVLVL_MIN, d_dtype))); -#endif /* GR_CTRLPORT */ - } - -private: - PyObject* d_callback; - std::string d_functionbase, d_units, d_desc; - myType d_min, d_max, d_deflt; - DisplayType d_dtype; - - myType pyCast(PyObject* obj) { - printf("TYPE NOT IMPLEMENTED!\n"); - assert(0); - }; - std::vector<boost::any> d_rpc_vars; // container for all RPC variables - std::string d_name; - int d_id; - -}; - - -// template specialization conversion functions -// get data out of the PyObject and into the real world -template<> -std::string pycallback_object<std::string>::pyCast(PyObject* obj) -{ - return std::string(PyString_AsString(obj)); -} - -template<> -double pycallback_object<double>::pyCast(PyObject* obj) -{ - return PyFloat_AsDouble(obj); -} - -template<> -float pycallback_object<float>::pyCast(PyObject* obj) -{ - return (float)PyFloat_AsDouble(obj); -} - -template<> -int pycallback_object<int>::pyCast(PyObject* obj) -{ - return PyInt_AsLong(obj); -} - -template<> -std::vector<float> pycallback_object<std::vector<float> >::pyCast(PyObject* obj) -{ - int size = PyObject_Size(obj); - std::vector<float> rval(size); - for(int i=0; i<size; i++) { - rval[i] = (float)PyFloat_AsDouble(PyList_GetItem(obj, i)); - } - return rval; -} - -template<> -std::vector<gr_complex> pycallback_object<std::vector<gr_complex> >::pyCast(PyObject* obj) -{ - int size = PyObject_Size(obj); - std::vector<gr_complex> rval(size); - for(int i=0; i<size; i++){ rval[i] = \ - gr_complex((float)PyComplex_RealAsDouble(PyList_GetItem(obj, i)), - (float)PyComplex_ImagAsDouble(PyList_GetItem(obj, i))); - } - return rval; -} -// TODO: add more template specializations as needed! diff --git a/gnuradio-core/src/lib/runtime/qa_gr_buffer.cc b/gnuradio-core/src/lib/runtime/qa_gr_buffer.cc deleted file mode 100644 index c74baf398e..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_buffer.cc +++ /dev/null @@ -1,307 +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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <qa_gr_buffer.h> -#include <gr_buffer.h> -#include <cppunit/TestAssert.h> -#include <stdlib.h> -#include <gr_random.h> - -static void -leak_check (void f ()) -{ - long buffer_count = gr_buffer_ncurrently_allocated (); - long buffer_reader_count = gr_buffer_reader_ncurrently_allocated (); - - f (); - - CPPUNIT_ASSERT_EQUAL (buffer_reader_count, gr_buffer_reader_ncurrently_allocated ()); - CPPUNIT_ASSERT_EQUAL (buffer_count, gr_buffer_ncurrently_allocated ()); -} - - -// ---------------------------------------------------------------------------- -// test single writer, no readers... -// - -static void -t0_body () -{ - int nitems = 4000 / sizeof (int); - int counter = 0; - - gr_buffer_sptr buf(gr_make_buffer(nitems, sizeof (int), gr_block_sptr())); - - int last_sa; - int sa; - - sa = buf->space_available (); - CPPUNIT_ASSERT (sa > 0); - last_sa = sa; - - for (int i = 0; i < 5; i++){ - sa = buf->space_available (); - CPPUNIT_ASSERT_EQUAL (last_sa, sa); - last_sa = sa; - - int *p = (int *) buf->write_pointer (); - CPPUNIT_ASSERT (p != 0); - - for (int j = 0; j < sa; j++) - *p++ = counter++; - - buf->update_write_pointer (sa); - } -} - -// ---------------------------------------------------------------------------- -// test single writer, single reader -// - -static void -t1_body () - { - int nitems = 4000 / sizeof (int); - int write_counter = 0; - int read_counter = 0; - - gr_buffer_sptr buf(gr_make_buffer(nitems, sizeof (int), gr_block_sptr())); - gr_buffer_reader_sptr r1 (gr_buffer_add_reader (buf, 0, gr_block_sptr())); - - - int sa; - - // write 1/3 of buffer - - sa = buf->space_available (); - CPPUNIT_ASSERT (sa > 0); - - int *p = (int *) buf->write_pointer (); - CPPUNIT_ASSERT (p != 0); - - for (int j = 0; j < sa/3; j++){ - *p++ = write_counter++; - } - buf->update_write_pointer (sa/3); - - - // write the next 1/3 (1/2 of what's left) - - sa = buf->space_available (); - CPPUNIT_ASSERT (sa > 0); - - p = (int *) buf->write_pointer (); - CPPUNIT_ASSERT (p != 0); - - for (int j = 0; j < sa/2; j++){ - *p++ = write_counter++; - } - buf->update_write_pointer (sa/2); - - - // check that we can read it OK - - int ia = r1->items_available (); - CPPUNIT_ASSERT_EQUAL (write_counter, ia); - - int *rp = (int *) r1->read_pointer (); - CPPUNIT_ASSERT (rp != 0); - - for (int i = 0; i < ia/2; i++){ - CPPUNIT_ASSERT_EQUAL (read_counter, *rp); - read_counter++; - rp++; - } - r1->update_read_pointer (ia/2); - - // read the rest - - ia = r1->items_available (); - rp = (int *) r1->read_pointer (); - CPPUNIT_ASSERT (rp != 0); - - for (int i = 0; i < ia; i++){ - CPPUNIT_ASSERT_EQUAL (read_counter, *rp); - read_counter++; - rp++; - } - r1->update_read_pointer (ia); -} - -// ---------------------------------------------------------------------------- -// single writer, single reader: check wrap-around -// - -static void -t2_body () -{ - // 64K is the largest granularity we've seen so far (MS windows file mapping). - // This allows a bit of "white box testing" - - int nitems = (64 * (1L << 10)) / sizeof (int); // 64K worth of ints - - gr_buffer_sptr buf(gr_make_buffer (nitems, sizeof (int), gr_block_sptr())); - gr_buffer_reader_sptr r1 (gr_buffer_add_reader (buf, 0, gr_block_sptr())); - - int read_counter = 0; - int write_counter = 0; - int n; - int *wp = 0; - int *rp = 0; - - // Write 3/4 of buffer - - n = (int) (buf->space_available () * 0.75); - wp = (int *) buf->write_pointer (); - - for (int i = 0; i < n; i++) - *wp++ = write_counter++; - buf->update_write_pointer (n); - - // Now read it all - - int m = r1->items_available (); - CPPUNIT_ASSERT_EQUAL (n, m); - rp = (int *) r1->read_pointer (); - - for (int i = 0; i < m; i++){ - CPPUNIT_ASSERT_EQUAL (read_counter, *rp); - read_counter++; - rp++; - } - r1->update_read_pointer (m); - - // Now write as much as we can. - // This will wrap around the buffer - - n = buf->space_available (); - CPPUNIT_ASSERT_EQUAL (nitems - 1, n); // white box test - wp = (int *) buf->write_pointer (); - - for (int i = 0; i < n; i++) - *wp++ = write_counter++; - buf->update_write_pointer (n); - - // now read it all - - m = r1->items_available (); - CPPUNIT_ASSERT_EQUAL (n, m); - rp = (int *) r1->read_pointer (); - - for (int i = 0; i < m; i++){ - CPPUNIT_ASSERT_EQUAL (read_counter, *rp); - read_counter++; - rp++; - } - r1->update_read_pointer (m); - -} - -// ---------------------------------------------------------------------------- -// single writer, N readers, randomized order and lengths -// ---------------------------------------------------------------------------- - -static void -t3_body () -{ - int nitems = (64 * (1L << 10)) / sizeof (int); - - static const int N = 5; - gr_buffer_sptr buf(gr_make_buffer(nitems, sizeof (int), gr_block_sptr())); - gr_buffer_reader_sptr reader[N]; - int read_counter[N]; - int write_counter = 0; - gr_random random; - - for (int i = 0; i < N; i++){ - read_counter[i] = 0; - reader[i] = gr_buffer_add_reader (buf, 0, gr_block_sptr()); - } - - for (int lc = 0; lc < 1000; lc++){ - - // write some - - int n = (int) (buf->space_available () * random.ran1 ()); - int *wp = (int *) buf->write_pointer (); - - for (int i = 0; i < n; i++) - *wp++ = write_counter++; - - buf->update_write_pointer (n); - - // pick a random reader and read some - - int r = (int) (N * random.ran1 ()); - CPPUNIT_ASSERT (0 <= r && r < N); - - int m = reader[r]->items_available (); - int *rp = (int *) reader[r]->read_pointer (); - - for (int i = 0; i < m; i++){ - CPPUNIT_ASSERT_EQUAL (read_counter[r], *rp); - read_counter[r]++; - rp++; - } - reader[r]->update_read_pointer (m); - } -} - - -// ---------------------------------------------------------------------------- - -void -qa_gr_buffer::t0 () -{ - leak_check (t0_body); -} - -void -qa_gr_buffer::t1 () -{ - leak_check (t1_body); -} - -void -qa_gr_buffer::t2 () -{ - leak_check (t2_body); -} - -void -qa_gr_buffer::t3 () -{ - leak_check (t3_body); -} - -void -qa_gr_buffer::t4 () -{ -} - -void -qa_gr_buffer::t5 () -{ -} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_buffer.h b/gnuradio-core/src/lib/runtime/qa_gr_buffer.h deleted file mode 100644 index 2937c24b68..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_buffer.h +++ /dev/null @@ -1,53 +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. - */ - -#ifndef INCLUDED_QA_GR_BUFFER_H -#define INCLUDED_QA_GR_BUFFER_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_gr_buffer : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_gr_buffer); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST (t2); - CPPUNIT_TEST (t3); - CPPUNIT_TEST (t4); - CPPUNIT_TEST (t5); - CPPUNIT_TEST_SUITE_END (); - - - private: - - void t0 (); - void t1 (); - void t2 (); - void t3 (); - void t4 (); - void t5 (); -}; - - - -#endif /* INCLUDED_QA_GR_BUFFER_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.cc b/gnuradio-core/src/lib/runtime/qa_gr_io_signature.cc deleted file mode 100644 index c1737ffb8e..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.cc +++ /dev/null @@ -1,64 +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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <qa_gr_io_signature.h> -#include <gr_io_signature.h> - -void -qa_gr_io_signature::t0 () -{ - gr_make_io_signature (1, 1, sizeof (int)); -} - -void -qa_gr_io_signature::t1 () -{ - gr_make_io_signature (3, 1, sizeof (int)); // throws std::invalid_argument -} - -void -qa_gr_io_signature::t2 () -{ - gr_io_signature_sptr p = - gr_make_io_signature (3, gr_io_signature::IO_INFINITE, sizeof (int)); - - CPPUNIT_ASSERT_EQUAL (p->min_streams (), 3); - CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item (0), (int) sizeof (int)); -} - -void -qa_gr_io_signature::t3 () -{ - gr_io_signature_sptr p = - gr_make_io_signature3 (0, 5, 1, 2, 3); - - CPPUNIT_ASSERT_EQUAL (p->min_streams (), 0); - CPPUNIT_ASSERT_EQUAL (p->max_streams (), 5); - CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(0), 1); - CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(1), 2); - CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(2), 3); - CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(3), 3); - CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(4), 3); -} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.h b/gnuradio-core/src/lib/runtime/qa_gr_io_signature.h deleted file mode 100644 index 9cd6bb5247..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.h +++ /dev/null @@ -1,46 +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. - */ - -#ifndef INCLUDED_QA_GR_IO_SIGNATURE_H -#define INCLUDED_QA_GR_IO_SIGNATURE_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> -#include <stdexcept> - -class qa_gr_io_signature : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_gr_io_signature); - CPPUNIT_TEST (t0); - CPPUNIT_TEST_EXCEPTION (t1, std::invalid_argument); - CPPUNIT_TEST (t2); - CPPUNIT_TEST (t3); - CPPUNIT_TEST_SUITE_END (); - - private: - void t0 (); - void t1 (); - void t2 (); - void t3 (); -}; - -#endif /* INCLUDED_QA_GR_IO_SIGNATURE_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_logger.cc b/gnuradio-core/src/lib/runtime/qa_gr_logger.cc deleted file mode 100644 index a8e4a1d766..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_logger.cc +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2012 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 class gathers together all the test cases for the example - * directory into a single test suite. As you create new test cases, - * add them here. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <qa_gr_logger.h> -#include <gr_logger.h> - -void -qa_gr_logger::t1() -{ -#ifdef ENABLE_GR_LOG - // This doesn't really test anything, more just - // making sure nothing's gone horribly wrong. - - GR_LOG_GETLOGGER(LOG,"main"); - GR_ADD_CONSOLE_APPENDER("main","cout","%d{%H:%M:%S} : %m%n"); - GR_LOG_NOTICE(LOG,"test from c++ NOTICE"); - GR_LOG_DEBUG(LOG,"test from c++ DEBUG"); - GR_LOG_INFO(LOG,"test from c++ INFO"); - GR_LOG_WARN(LOG,"test from c++ WARN"); - GR_LOG_ERROR(LOG,"test from c++ ERROR"); - GR_LOG_FATAL(LOG,"test from c++ FATAL"); - CPPUNIT_ASSERT(true); -#endif -} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_logger.h b/gnuradio-core/src/lib/runtime/qa_gr_logger.h deleted file mode 100644 index b0d3711523..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_logger.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 Example 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 Example Public License for more details. - * - * You should have received a copy of the GNU Example 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_QA_GR_LOG_H -#define INCLUDED_QA_GR_LOG_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestSuite.h> - -//! collect all the tests for the example directory - -class qa_gr_logger : public CppUnit::TestCase { - public: - CPPUNIT_TEST_SUITE(qa_gr_logger); - CPPUNIT_TEST(t1); - CPPUNIT_TEST_SUITE_END(); - - private: - void t1(); - -}; - -#endif /* INCLUDED_QA_GR_LOG_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_vmcircbuf.cc b/gnuradio-core/src/lib/runtime/qa_gr_vmcircbuf.cc deleted file mode 100644 index e3b36d8829..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_vmcircbuf.cc +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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 <qa_gr_vmcircbuf.h> -#include <cppunit/TestAssert.h> -#include <gr_vmcircbuf.h> -#include <stdio.h> - -void -qa_gr_vmcircbuf::test_all () -{ - int verbose = 1; // summary - - bool ok = gr_vmcircbuf_sysconfig::test_all_factories (verbose); - - CPPUNIT_ASSERT_EQUAL (true, ok); -} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_vmcircbuf.h b/gnuradio-core/src/lib/runtime/qa_gr_vmcircbuf.h deleted file mode 100644 index 3576660d5a..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_gr_vmcircbuf.h +++ /dev/null @@ -1,39 +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. - */ -#ifndef _QA_GR_VMCIRCBUF_H_ -#define _QA_GR_VMCIRCBUF_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_gr_vmcircbuf : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_gr_vmcircbuf); - CPPUNIT_TEST (test_all); - CPPUNIT_TEST_SUITE_END (); - - private: - void test_all (); -}; - - -#endif /* _QA_GR_VMCIRCBUF_H_ */ diff --git a/gnuradio-core/src/lib/runtime/qa_runtime.cc b/gnuradio-core/src/lib/runtime/qa_runtime.cc deleted file mode 100644 index f02fbd7d66..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_runtime.cc +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2002,2007,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 class gathers together all the test cases for the gr - * directory into a single test suite. As you create new test cases, - * add them here. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <qa_runtime.h> -#include <qa_gr_vmcircbuf.h> -#include <qa_gr_io_signature.h> -#include <qa_gr_logger.h> -#include <qa_gr_buffer.h> -#include <qa_set_msg_handler.h> - -CppUnit::TestSuite * -qa_runtime::suite () -{ - CppUnit::TestSuite *s = new CppUnit::TestSuite ("runtime"); - - s->addTest (qa_gr_vmcircbuf::suite ()); - s->addTest (qa_gr_io_signature::suite ()); - s->addTest (qa_gr_block::suite ()); - s->addTest (qa_gr_flowgraph::suite ()); - s->addTest (qa_gr_logger::suite ()); - s->addTest (qa_gr_top_block::suite ()); - s->addTest (qa_gr_hier_block2::suite ()); - s->addTest (qa_gr_hier_block2_derived::suite ()); - s->addTest (qa_gr_buffer::suite ()); - s->addTest (qa_block_tags::suite ()); - s->addTest (qa_set_msg_handler::suite ()); - - return s; -} diff --git a/gnuradio-core/src/lib/runtime/qa_runtime.h b/gnuradio-core/src/lib/runtime/qa_runtime.h deleted file mode 100644 index da71cbd0f4..0000000000 --- a/gnuradio-core/src/lib/runtime/qa_runtime.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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 _QA_RUNTIME_H_ -#define _QA_RUNTIME_H_ - -#include <gruel/attributes.h> -#include <cppunit/TestSuite.h> - -//! collect all the tests for the runtime directory - -class __GR_ATTR_EXPORT qa_runtime { - public: - //! return suite of tests for all of runtime directory - static CppUnit::TestSuite *suite (); -}; - - -#endif /* _QA_RUNTIME_H_ */ diff --git a/gnuradio-core/src/lib/runtime/rpccallbackregister_base.h b/gnuradio-core/src/lib/runtime/rpccallbackregister_base.h deleted file mode 100644 index dbfda4ed47..0000000000 --- a/gnuradio-core/src/lib/runtime/rpccallbackregister_base.h +++ /dev/null @@ -1,105 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCCALLBACKREGISTER_BASE_H -#define RPCCALLBACKREGISTER_BASE_H - -#include <gruel/msg_accepter.h> -#include <gruel/msg_producer.h> - -typedef uint32_t DisplayType; - -// DisplayType Plotting types -const uint32_t DISPNULL = 0x0000; -const uint32_t DISPTIME = 0x0001; -const uint32_t DISPXY = 0x0002; -const uint32_t DISPPSD = 0x0004; -const uint32_t DISPSPEC = 0x0008; -const uint32_t DISPRAST = 0x0010; - -// DisplayType Options -const uint32_t DISPOPTCPLX = 0x0100; -const uint32_t DISPOPTLOG = 0x0200; -const uint32_t DISPOPTSTEM = 0x0400; -const uint32_t DISPOPTSTRIP = 0x0800; -const uint32_t DISPOPTSCATTER = 0x1000; - -enum priv_lvl_t { - RPC_PRIVLVL_ALL = 0, - RPC_PRIVLVL_MIN = 9, - RPC_PRIVLVL_NONE = 10 -}; - -enum KnobType { - KNOBBOOL, KNOBCHAR, KNOBINT, KNOBFLOAT, - KNOBDOUBLE, KNOBSTRING, KNOBLONG, KNOBVECBOOL, - KNOBVECCHAR, KNOBVECINT, KNOBVECFLOAT, KNOBVECDOUBLE, - KNOBVECSTRING, KNOBVECLONG -}; - -struct callbackregister_base -{ - struct callback_base_t - { - public: - callback_base_t(const priv_lvl_t priv_, const std::string& units_, - const DisplayType display_, const std::string& desc_, - const pmt::pmt_t min_, const pmt::pmt_t max_, const pmt::pmt_t def) - : priv(priv_), units(units_), description(desc_), - min(min_), max(max_), defaultvalue(def), display(display_) - { - } - - priv_lvl_t priv; - std::string units, description; - pmt::pmt_t min, max, defaultvalue; - DisplayType display; - }; - - template<typename T, typename Tsptr> - class callback_t : public callback_base_t - { - public: - callback_t(T* callback_, priv_lvl_t priv_, - const std::string& units_, const DisplayType display_, const:: std::string& desc_, - const pmt::pmt_t& min_, const pmt::pmt_t& max_, const pmt::pmt_t& def_) : - callback_base_t(priv_, units_, display_, desc_, min_, max_, def_), - callback(callback_) - { - } - - Tsptr callback; - }; - - typedef callback_t<gruel::msg_accepter, gruel::msg_accepter_sptr> configureCallback_t; - typedef callback_t<gruel::msg_producer, gruel::msg_producer_sptr> queryCallback_t; - - callbackregister_base() {;} - virtual ~callbackregister_base() {;} - - virtual void registerConfigureCallback(const std::string &id, const configureCallback_t callback) = 0; - virtual void unregisterConfigureCallback(const std::string &id) = 0; - virtual void registerQueryCallback(const std::string &id, const queryCallback_t callback) = 0; - virtual void unregisterQueryCallback(const std::string &id) = 0; -}; - -#endif /* RPCCALLBACKREGISTER_BASE_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcmanager.cc b/gnuradio-core/src/lib/runtime/rpcmanager.cc deleted file mode 100644 index 4d164b63f3..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcmanager.cc +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <rpcmanager.h> -#include <iostream> -#include <stdexcept> - -bool rpcmanager::booter_registered(false); -bool rpcmanager::aggregator_registered(false); -rpcserver_booter_base* rpcmanager::boot(0); -std::auto_ptr<rpcserver_booter_aggregator> rpcmanager::aggregator(0); - -rpcmanager::rpcmanager() {;} - -rpcmanager::~rpcmanager() -{ - if(boot) - delete boot; -} - -rpcserver_booter_base* -rpcmanager::get() -{ - if(aggregator_registered) { - return aggregator.get(); - } - else if(booter_registered) { - return boot; - } - assert(booter_registered || aggregator_registered); - return boot; -} - -void -rpcmanager::register_booter(rpcserver_booter_base* booter) -{ - if(make_aggregator && !aggregator_registered) { - aggregator.reset(new rpcserver_booter_aggregator()); - aggregator_registered = true; - } - - if(aggregator_registered) { - rpcmanager::rpcserver_booter_base_sptr bootreg(booter); - aggregator->agg()->registerServer(bootreg); - } - else if(!booter_registered) { - boot = booter; - booter_registered = true; - } - else { - throw std::runtime_error("rpcmanager: Aggregator not in use, and a rpc booter is already registered\n"); - } -} diff --git a/gnuradio-core/src/lib/runtime/rpcmanager.h b/gnuradio-core/src/lib/runtime/rpcmanager.h deleted file mode 100644 index 8cb176b2e5..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcmanager.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCMANAGER_H -#define RPCMANAGER_H - -#include <gr_core_api.h> -#include <rpcmanager_base.h> -#include <rpcserver_booter_aggregator.h> -#include <memory> -#include <iostream> - -class GR_CORE_API rpcmanager : public virtual rpcmanager_base -{ - public: - rpcmanager(); - ~rpcmanager(); - - static rpcserver_booter_base* get(); - - static void register_booter(rpcserver_booter_base* booter); - - template<typename T> class rpcserver_booter_register_helper - { - public: - rpcserver_booter_register_helper() { - rpcmanager::register_booter(new T()); - } - - //TODO: unregister - }; - - private: - static bool make_aggregator, booter_registered, aggregator_registered; - static void rpcserver_booter_base_sptr_dest( rpcserver_booter_base* b) {;} - static rpcserver_booter_base* boot; - static std::auto_ptr<rpcserver_booter_aggregator> aggregator; -}; - -#endif /* RPCMANAGER_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcmanager_base.h b/gnuradio-core/src/lib/runtime/rpcmanager_base.h deleted file mode 100644 index 60425c4a15..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcmanager_base.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCMANAGER_BASE_H -#define RPCMANAGER_BASE_H - -#include <boost/shared_ptr.hpp> - -class rpcserver_booter_base; -//class rpcserver_booter_aggregator; - -class rpcmanager_base -{ - public: - typedef boost::shared_ptr<rpcserver_booter_base> rpcserver_booter_base_sptr; - - rpcmanager_base() {;} - ~rpcmanager_base() {;} - - //static rpcserver_booter_base* get(); - - //static void register_booter(rpcserver_booter_base_sptr booter); - -private: -}; - -#endif /* RPCMANAGER_BASE_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcpmtconverters_ice.cc b/gnuradio-core/src/lib/runtime/rpcpmtconverters_ice.cc deleted file mode 100644 index 7c8b6041e9..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcpmtconverters_ice.cc +++ /dev/null @@ -1,123 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <rpcpmtconverters_ice.h> -#include <Ice/Ice.h> -#include <gnuradio.h> - -GNURadio::KnobPtr -rpcpmtconverter::from_pmt(const pmt::pmt_t& knob, const Ice::Current& c) -{ - if(pmt::is_real(knob)) { - return new GNURadio::KnobD(Ice::Double(pmt::to_double(knob))); - } - else if(pmt::is_symbol(knob)) { - std::string stuff = pmt::symbol_to_string(knob); - return new GNURadio::KnobS(stuff); - } - else if(pmt::is_integer(knob)) { - return new GNURadio::KnobI(pmt::to_long(knob)); - } - else if(pmt::is_bool(knob)) { - return new GNURadio::KnobB(pmt::to_bool(knob)); - } - else if(pmt::is_uint64(knob)) { - return new GNURadio::KnobL(pmt::to_uint64(knob)); - //const std::complex<float> *c32vector_elements(pmt_t v, size_t &len); //< len is in elements - } - else if(pmt::is_c32vector(knob)) { // c32 sent as interleaved floats - size_t size(pmt::length(knob)); - const float* start((const float*) pmt::c32vector_elements(knob,size)); - return new GNURadio::KnobVecF(std::vector<float>(start,start+size*2)); - } - else if (pmt::is_s32vector(knob)) { - size_t size(pmt::length(knob)); - const int* start((const int*) pmt::s32vector_elements(knob,size)); - return new GNURadio::KnobVecI(std::vector<int>(start,start+size)); - } - else if(pmt::is_f32vector(knob)) { - size_t size(pmt::length(knob)); - const float* start((const float*) pmt::f32vector_elements(knob,size)); - return new GNURadio::KnobVecF(std::vector<float>(start,start+size)); - } - else if (pmt::is_u8vector(knob)) { - size_t size(pmt::length(knob)); - const uint8_t* start((const uint8_t*) pmt::u8vector_elements(knob,size)); - return new GNURadio::KnobVecC(std::vector<Ice::Byte>(start,start+size)); - } - else { - std::cerr << "Error: Don't know how to handle Knob Type (from): " << std::endl; assert(0);} - //TODO: VECTORS!!! - return new GNURadio::Knob(); -} - -pmt::pmt_t -rpcpmtconverter::to_pmt(const GNURadio::KnobPtr& knob, const Ice::Current& c) -{ - std::string id(knob->ice_id(c).substr(12)); - if(id == "KnobD") { - GNURadio::KnobDPtr k(GNURadio::KnobDPtr::dynamicCast(knob)); - return pmt::mp(k->value); - } - else if(id == "KnobF") { - GNURadio::KnobFPtr k(GNURadio::KnobFPtr::dynamicCast(knob)); - return pmt::mp(k->value); - } - else if(id == "KnobI") { - GNURadio::KnobIPtr k(GNURadio::KnobIPtr::dynamicCast(knob)); - return pmt::mp(k->value); - } - else if(id == "KnobS") { - GNURadio::KnobSPtr k(GNURadio::KnobSPtr::dynamicCast(knob)); - return pmt::string_to_symbol(k->value); - } - else if(id == "KnobB") { - GNURadio::KnobBPtr k(GNURadio::KnobBPtr::dynamicCast(knob)); - return pmt::mp(k->value); - } - else if(id == "KnobC") { - GNURadio::KnobCPtr k(GNURadio::KnobCPtr::dynamicCast(knob)); - return pmt::mp(k->value); - } - else if(id == "KnobL") { - GNURadio::KnobLPtr k(GNURadio::KnobLPtr::dynamicCast(knob)); - return pmt::mp((long)k->value); - } - else if(id == "KnobVecC") { - GNURadio::KnobVecCPtr k(GNURadio::KnobVecCPtr::dynamicCast(knob)); - return pmt::init_u8vector(k->value.size(), &k->value[0]); - } - else if(id == "KnobVecI") { - GNURadio::KnobVecIPtr k(GNURadio::KnobVecIPtr::dynamicCast(knob)); - return pmt::init_s32vector(k->value.size(), &k->value[0]); - } - //else if(id == "KnobVecF") { - // GNURadio::KnobVecFPtr k(GNURadio::KnobVecFPtr::dynamicCast(knob)); - // return pmt::mp(k->value); - //TODO: FLOAT!!! - //TODO: VECTORS!!! - else { - std::cerr << "Error: Don't know how to handle Knob Type: " << id << std::endl; assert(0); - } - - return pmt::pmt_t(); -} diff --git a/gnuradio-core/src/lib/runtime/rpcpmtconverters_ice.h b/gnuradio-core/src/lib/runtime/rpcpmtconverters_ice.h deleted file mode 100644 index 4403b96a2a..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcpmtconverters_ice.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCPMTCONVERTERS_ICE_H -#define RPCPMTCONVERTERS_ICE_H - -#include <gruel/pmt.h> -#include <gnuradio.h> - -namespace rpcpmtconverter -{ - pmt::pmt_t to_pmt(const GNURadio::KnobPtr& knob, const Ice::Current& c); - GNURadio::KnobPtr from_pmt(const pmt::pmt_t& knob, const Ice::Current& c); -} - -#endif /* RPCPMTCONVERTERS_ICE_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcregisterhelpers.h b/gnuradio-core/src/lib/runtime/rpcregisterhelpers.h deleted file mode 100644 index 1be3769ac8..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcregisterhelpers.h +++ /dev/null @@ -1,659 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCREGISTERHELPERS_H -#define RPCREGISTERHELPERS_H - -#include <stdio.h> -#include <sstream> -#include <iostream> -#include <rpcserver_booter_base.h> -#include <rpcmanager.h> -#include <rpcserver_selector.h> -#include <rpcserver_base.h> -#include <gr_block_registry.h> - -// Base classes -template<typename T, typename Tto> class rpcextractor_base - : public virtual gruel::msg_accepter -{ -public: - rpcextractor_base(T* source, void (T::*func)(Tto)) : - _source(source), _func(func) {;} - ~rpcextractor_base() {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) { - throw std::runtime_error("rpcextractor_base: no post defined for this data type.\n"); - } - -protected: - T* _source; - void (T::*_func)(Tto); -}; - -template<typename T, typename Tto> -class rpcbasic_extractor : public virtual rpcextractor_base<T,Tto> -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(Tto)) : - rpcextractor_base<T,Tto>(source, func) - {;} -}; - -template<typename T, typename Tfrom> -class rpcinserter_base : public virtual gruel::msg_producer -{ -public: - rpcinserter_base(T* source, Tfrom (T::*func)()) : _source(source), _func(func) {;} - rpcinserter_base() {;} - - pmt::pmt_t retrieve() { assert(0); return pmt::pmt_t(); } - -protected: - T* _source; - Tfrom (T::*_func)(); -}; - -template<typename T, typename Tfrom> -class rpcbasic_inserter : - public virtual rpcinserter_base<T,Tfrom> -{ -public: - rpcbasic_inserter(T* source, Tfrom (T::*func)()const) - : rpcinserter_base<T,Tfrom>(source, func) - {;} - - rpcbasic_inserter(T* source, Tfrom (T::*func)()) - : rpcinserter_base<T,Tfrom>(source, func) - {;} - - pmt::pmt_t retrieve() - { - return pmt::mp((rpcinserter_base<T,Tfrom>:: - _source->*rpcinserter_base<T,Tfrom>::_func)()); - } -}; - -// Specialized Extractor Templates -template<typename T> -class rpcbasic_extractor<T,double> : public virtual rpcextractor_base<T,double> -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(double)) - : rpcextractor_base<T,double>(source, func) - {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) - { - (rpcextractor_base<T,double>::_source->*rpcextractor_base<T,double>::_func) - (pmt::to_double(msg)); - } -}; - -template<typename T> -class rpcbasic_extractor<T,float> : public virtual rpcextractor_base<T,float> -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(float)) - : rpcextractor_base<T,float>(source, func) - {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) - { - (rpcextractor_base<T,float>::_source->*rpcextractor_base<T,float>::_func) - (pmt::to_double(msg)); - } -}; - -template<typename T> -class rpcbasic_extractor<T,long> : public virtual rpcextractor_base<T,long> -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(long)) - : rpcextractor_base<T,long>(source, func) - {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) - { - (rpcextractor_base<T,long>::_source->*rpcextractor_base<T,long>::_func) - (pmt::to_long(msg)); - } -}; - -template<typename T> -class rpcbasic_extractor<T,int> : public virtual rpcextractor_base<T,int> -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(int)) - : rpcextractor_base<T,int>(source, func) - {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) - { - (rpcextractor_base<T,int>::_source->*rpcextractor_base<T,int>::_func) - (pmt::to_long(msg)); - } -}; - -template<typename T> -class rpcbasic_extractor<T,bool> : public virtual rpcextractor_base<T,bool> -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(bool)) - : rpcextractor_base<T,bool>(source, func) - {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) - { - (rpcextractor_base<T,bool>::_source->*rpcextractor_base<T,bool>::_func) - (pmt::to_bool(msg)); - } -}; - -template<typename T> -class rpcbasic_extractor<T,std::complex<double> > - : public virtual rpcextractor_base<T,std::complex<double> > -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(std::complex<double>)) - : rpcextractor_base<T,std::complex<double> >(source, func) - {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) - { - (rpcextractor_base<T,std::complex<double> >:: - _source->*rpcextractor_base<T,std::complex<double> >::_func)(pmt::to_complex(msg)); - } -}; - -template<typename T> -class rpcbasic_extractor<T,std::string> - : public virtual rpcextractor_base<T,std::string> -{ -public: - rpcbasic_extractor(T* source, void (T::*func)(std::string)) - : rpcextractor_base<T,std::string>(source, func) - {;} - - void post(pmt::pmt_t which_port, pmt::pmt_t msg) - { - (rpcextractor_base<T,std::string>:: - _source->*rpcextractor_base<T,std::string>::_func)(pmt::symbol_to_string(msg)); - } -}; - -template<typename T> -class rpcbasic_inserter<T,uint64_t> : public virtual rpcinserter_base<T,uint64_t> -{ -public: - rpcbasic_inserter(T* source, uint64_t (T::*func)() const) - : rpcinserter_base<T,uint64_t>(source, func) - {;} - - rpcbasic_inserter(T* source, uint64_t (T::*func)()) - : rpcinserter_base<T,uint64_t>(source, func) - {;} - - pmt::pmt_t retrieve() - { - return pmt::from_uint64((rpcinserter_base<T,uint64_t>:: - _source->*rpcinserter_base<T,uint64_t>::_func)()); - } -}; - -template<typename T> -class rpcbasic_inserter<T,std::vector< int > > - : public virtual rpcinserter_base<T,std::vector< int > > -{ -public: - rpcbasic_inserter(T* source, std::vector<int > (T::*func)() const) - : rpcinserter_base<T,std::vector<int > >(source, func) - {;} - - rpcbasic_inserter(T* source, std::vector<int > (T::*func)()) - : rpcinserter_base<T,std::vector<int > >(source, func) - {;} - - pmt::pmt_t retrieve() - { - std::vector< int > - vec((rpcinserter_base<T,std::vector<int > >:: - _source->*rpcinserter_base<T,std::vector< int > >::_func)()); - return pmt::init_s32vector(vec.size(), &vec[0]); - } -}; - -template<typename T> -class rpcbasic_inserter<T,std::vector< std::complex<float> > > - : public virtual rpcinserter_base<T,std::vector< std::complex<float> > > -{ -public: - rpcbasic_inserter(T* source, std::vector<std::complex<float> > (T::*func)() const) - : rpcinserter_base<T,std::vector<std::complex<float> > >(source, func) - {;} - - rpcbasic_inserter(T* source, std::vector<std::complex<float> > (T::*func)()) - : rpcinserter_base<T,std::vector<std::complex<float> > >(source, func) - {;} - - pmt::pmt_t retrieve() - { - std::vector< std::complex<float> > - vec((rpcinserter_base<T,std::vector<std::complex<float> > >:: - _source->*rpcinserter_base<T,std::vector< std::complex<float> > >::_func)()); - return pmt::init_c32vector(vec.size(), &vec[0]); - } -}; - -template<typename T> -class rpcbasic_inserter<T,std::vector< float> > - : public virtual rpcinserter_base<T,std::vector< float > > -{ -public: - rpcbasic_inserter(T* source, std::vector<float> (T::*func)() const) - : rpcinserter_base<T,std::vector<float > >(source, func) - {;} - - rpcbasic_inserter(T* source, std::vector<float> (T::*func)()) - : rpcinserter_base<T,std::vector<float> >(source, func) - {;} - - pmt::pmt_t retrieve() - { - std::vector< float > vec((rpcinserter_base<T,std::vector<float> >:: - _source->*rpcinserter_base<T,std::vector< float> >::_func)()); - return pmt::init_f32vector(vec.size(), &vec[0]); - } -}; - -template<typename T> -class rpcbasic_inserter<T,std::vector< uint8_t> > - : public virtual rpcinserter_base<T,std::vector< uint8_t > > { -public: - rpcbasic_inserter(T* source, std::vector<uint8_t> (T::*func)() const) - : rpcinserter_base<T,std::vector<uint8_t > >(source, func) - {;} - - rpcbasic_inserter(T* source, std::vector<uint8_t> (T::*func)()) - : rpcinserter_base<T,std::vector<uint8_t> >(source, func) - {;} - - pmt::pmt_t retrieve() - { - std::vector< uint8_t > vec((rpcinserter_base<T,std::vector<uint8_t> >:: - _source->*rpcinserter_base<T,std::vector< uint8_t> >::_func)()); - return pmt::init_u8vector(vec.size(), &vec[0]); - } -}; - -template <typename T> -struct rpc_register_base -{ - rpc_register_base() {count++;} -protected: static int count; -}; - -// Base class to inherit from and create universal shared pointers. -class rpcbasic_base -{ -public: - rpcbasic_base() {} - virtual ~rpcbasic_base() {}; -}; - -typedef boost::shared_ptr<rpcbasic_base> rpcbasic_sptr; - -template<typename T, typename Tto> -struct rpcbasic_register_set : public rpcbasic_base -{ - // Function used to add a 'set' RPC call using a gr_basic_block's alias. - rpcbasic_register_set(const std::string& block_alias, - const char* functionbase, - void (T::*function)(Tto), - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv_ = RPC_PRIVLVL_MIN, - DisplayType display_ = DISPNULL) - { - d_min = min; - d_max = max; - d_def = def; - d_units = units_; - d_desc = desc_; - d_minpriv = minpriv_; - d_display = display_; - d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get()); -#ifdef RPCSERVER_ENABLED - callbackregister_base::configureCallback_t - extractor(new rpcbasic_extractor<T,Tto>(d_object, function), - minpriv_, std::string(units_), - display_, std::string(desc_), min, max, def); - std::ostringstream oss(std::ostringstream::out); - oss << block_alias << "::" << functionbase; - d_id = oss.str(); - //std::cerr << "REGISTERING SET: " << d_id << " " << desc_ << std::endl; - rpcmanager::get()->i()->registerConfigureCallback(d_id, extractor); -#endif - } - - // Function used to add a 'set' RPC call using a name and the object - rpcbasic_register_set(const std::string& name, - const char* functionbase, - T* obj, - void (T::*function)(Tto), - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv_ = RPC_PRIVLVL_MIN, - DisplayType display_ = DISPNULL) - { - d_min = min; - d_max = max; - d_def = def; - d_units = units_; - d_desc = desc_; - d_minpriv = minpriv_; - d_display = display_; - d_object = obj; -#ifdef RPCSERVER_ENABLED - callbackregister_base::configureCallback_t - extractor(new rpcbasic_extractor<T,Tto>(d_object, function), - minpriv_, std::string(units_), - display_, std::string(desc_), min, max, def); - std::ostringstream oss(std::ostringstream::out); - oss << name << "::" << functionbase; - d_id = oss.str(); - //std::cerr << "REGISTERING SET: " << d_id << " " << desc_ << std::endl; - rpcmanager::get()->i()->registerConfigureCallback(d_id, extractor); -#endif - } - - ~rpcbasic_register_set() - { -#ifdef RPCSERVER_ENABLED - rpcmanager::get()->i()->unregisterConfigureCallback(d_id); -#endif - } - - - pmt::pmt_t min() const { return d_min; } - pmt::pmt_t max() const { return d_max; } - pmt::pmt_t def() const { return d_def; } - std::string units() const { return d_units; } - std::string description() const { return d_desc; } - priv_lvl_t privilege_level() const { return d_minpriv; } - DisplayType default_display() const { return d_display; } - - void set_min(pmt::pmt_t p) { d_min = p; } - void set_max(pmt::pmt_t p) { d_max = p; } - void set_def(pmt::pmt_t p) { d_def = p; } - void units(std::string u) { d_units = u; } - void description(std::string d) { d_desc = d; } - void privilege_level(priv_lvl_t p) { d_minpriv = p; } - void default_display(DisplayType d) { d_display = d; } - -private: - std::string d_id; - pmt::pmt_t d_min, d_max, d_def; - std::string d_units, d_desc; - priv_lvl_t d_minpriv; - DisplayType d_display; - T *d_object; -}; - - -template<typename T, typename Tfrom> -class rpcbasic_register_get : public rpcbasic_base -{ -public: - // Function used to add a 'set' RPC call using a gr_basic_block's alias. - // primary constructor to allow for T get() functions - rpcbasic_register_get(const std::string& block_alias, - const char* functionbase, - Tfrom (T::*function)(), - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv_ = RPC_PRIVLVL_MIN, - DisplayType display_ = DISPNULL) - { - d_min = min; - d_max = max; - d_def = def; - d_units = units_; - d_desc = desc_; - d_minpriv = minpriv_; - d_display = display_; - d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get()); -#ifdef RPCSERVER_ENABLED - callbackregister_base::queryCallback_t - inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function), - minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); - std::ostringstream oss(std::ostringstream::out); - oss << block_alias << "::" << functionbase; - d_id = oss.str(); - //std::cerr << "REGISTERING GET: " << d_id << " " << desc_ << std::endl; - rpcmanager::get()->i()->registerQueryCallback(d_id, inserter); -#endif - } - - - // alternate constructor to allow for T get() const functions - rpcbasic_register_get(const std::string& block_alias, - const char* functionbase, - Tfrom (T::*function)() const, - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv_ = RPC_PRIVLVL_MIN, - DisplayType display_ = DISPNULL) - { - d_min = min; - d_max = max; - d_def = def; - d_units = units_; - d_desc = desc_; - d_minpriv = minpriv_; - d_display = display_; - d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get()); -#ifdef RPCSERVER_ENABLED - callbackregister_base::queryCallback_t - inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function), - minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); - std::ostringstream oss(std::ostringstream::out); - oss << block_alias << "::" << functionbase; - d_id = oss.str(); - //std::cerr << "REGISTERING GET CONST: " << d_id << " " << desc_ << " " << display_ << std::endl; - rpcmanager::get()->i()->registerQueryCallback(d_id, inserter); -#endif - } - - // Function used to add a 'set' RPC call using a name and the object - // primary constructor to allow for T get() functions - rpcbasic_register_get(const std::string& name, - const char* functionbase, - T* obj, - Tfrom (T::*function)(), - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv_ = RPC_PRIVLVL_MIN, - DisplayType display_ = DISPNULL) - { - d_min = min; - d_max = max; - d_def = def; - d_units = units_; - d_desc = desc_; - d_minpriv = minpriv_; - d_display = display_; - d_object = obj; -#ifdef RPCSERVER_ENABLED - callbackregister_base::queryCallback_t - inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function), - minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); - std::ostringstream oss(std::ostringstream::out); - oss << name << "::" << functionbase; - d_id = oss.str(); - //std::cerr << "REGISTERING GET: " << d_id << " " << desc_ << std::endl; - rpcmanager::get()->i()->registerQueryCallback(d_id, inserter); -#endif - } - - - // alternate constructor to allow for T get() const functions - rpcbasic_register_get(const std::string& name, - const char* functionbase, - T* obj, - Tfrom (T::*function)() const, - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv_ = RPC_PRIVLVL_MIN, - DisplayType display_ = DISPNULL) - { - d_min = min; - d_max = max; - d_def = def; - d_units = units_; - d_desc = desc_; - d_minpriv = minpriv_; - d_display = display_; - d_object = obj; -#ifdef RPCSERVER_ENABLED - callbackregister_base::queryCallback_t - inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function), - minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); - std::ostringstream oss(std::ostringstream::out); - oss << name << "::" << functionbase; - d_id = oss.str(); - //std::cerr << "REGISTERING GET CONST: " << d_id << " " << desc_ << " " << display_ << std::endl; - rpcmanager::get()->i()->registerQueryCallback(d_id, inserter); -#endif - } - - ~rpcbasic_register_get() - { -#ifdef RPCSERVER_ENABLED - rpcmanager::get()->i()->unregisterQueryCallback(d_id); -#endif - } - - pmt::pmt_t min() const { return d_min; } - pmt::pmt_t max() const { return d_max; } - pmt::pmt_t def() const { return d_def; } - std::string units() const { return d_units; } - std::string description() const { return d_desc; } - priv_lvl_t privilege_level() const { return d_minpriv; } - DisplayType default_display() const { return d_display; } - - void set_min(pmt::pmt_t p) { d_min = p; } - void set_max(pmt::pmt_t p) { d_max = p; } - void set_def(pmt::pmt_t p) { d_def = p; } - void units(std::string u) { d_units = u; } - void description(std::string d) { d_desc = d; } - void privilege_level(priv_lvl_t p) { d_minpriv = p; } - void default_display(DisplayType d) { d_display = d; } - -private: - std::string d_id; - pmt::pmt_t d_min, d_max, d_def; - std::string d_units, d_desc; - priv_lvl_t d_minpriv; - DisplayType d_display; - T *d_object; -}; - -/* - * This class can wrap a pre-existing variable type for you - * it will define the getter and rpcregister call for you. - * - * It should be used for read-only getters. - * - */ -template<typename Tfrom> -class rpcbasic_register_variable : public rpcbasic_base -{ -protected: - rpcbasic_register_get< rpcbasic_register_variable<Tfrom>, Tfrom > d_rpc_reg; - Tfrom *d_variable; - Tfrom get() { return *d_variable; } -public: - // empty constructor which should never be called but needs to exist for ues in varous STL data structures - void setptr(Tfrom* _variable){ rpcbasic_register_variable<Tfrom>::d_variable = _variable; } - rpcbasic_register_variable() : - d_rpc_reg("FAIL", "FAIL", this, &rpcbasic_register_variable::get, - pmt::PMT_NIL, pmt::PMT_NIL, pmt::PMT_NIL, DISPNULL, - "FAIL", "FAIL", RPC_PRIVLVL_MIN), - d_variable(NULL) - { - throw std::runtime_error("ERROR: rpcbasic_register_variable called with no args. If this happens, someone has tried to use rpcbasic_register_variable incorrectly."); - }; - - rpcbasic_register_variable(const std::string& namebase, - const char* functionbase, - Tfrom *variable, - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv_ = RPC_PRIVLVL_MIN, - DisplayType display_=DISPNULL) : - d_rpc_reg(namebase, functionbase, this, &rpcbasic_register_variable::get, - min, max, def, units_, desc_, minpriv_, display_), - d_variable(variable) - { - //std::cerr << "REGISTERING VAR: " << " " << desc_ << std::endl; - } -}; - -template<typename Tfrom> class rpcbasic_register_variable_rw : public rpcbasic_register_variable<Tfrom> { - private: - rpcbasic_register_set< rpcbasic_register_variable_rw<Tfrom>, Tfrom > d_rpc_regset; - public: - // empty constructor which should never be called but needs to exist for ues in varous STL data structures - rpcbasic_register_variable_rw() : - d_rpc_regset("FAIL","FAIL",this,&rpcbasic_register_variable<Tfrom>::get,pmt::PMT_NIL,pmt::PMT_NIL,pmt::PMT_NIL,DISPNULL,"FAIL","FAIL",RPC_PRIVLVL_MIN) - { - throw std::runtime_error("ERROR: rpcbasic_register_variable_rw called with no args. if this happens someone used rpcbasic_register_variable_rw incorrectly.\n"); - }; - void set(Tfrom _variable){ *(rpcbasic_register_variable<Tfrom>::d_variable) = _variable; } - rpcbasic_register_variable_rw( - const std::string& namebase, - const char* functionbase, - Tfrom *variable, - const pmt::pmt_t &min, const pmt::pmt_t &max, const pmt::pmt_t &def, - const char* units_ = "", - const char* desc_ = "", - priv_lvl_t minpriv = RPC_PRIVLVL_MIN, - DisplayType display_=DISPNULL) : - rpcbasic_register_variable<Tfrom>(namebase,functionbase,variable,min,max,def,units_,desc_), - d_rpc_regset(namebase,functionbase,this,&rpcbasic_register_variable_rw::set,min,max,def,units_,desc_,minpriv,display_) - { - // no action - } -}; - - - - -#endif diff --git a/gnuradio-core/src/lib/runtime/rpcserver_aggregator.cc b/gnuradio-core/src/lib/runtime/rpcserver_aggregator.cc deleted file mode 100644 index d750d64905..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_aggregator.cc +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <rpcserver_aggregator.h> -#include <rpcserver_booter_base.h> -#include <iostream> -#include <sstream> -#include <stdexcept> - -rpcserver_aggregator::rpcserver_aggregator() - : d_type(std::string("aggregator")) -{;} - -rpcserver_aggregator::~rpcserver_aggregator() -{;} - -const std::string& -rpcserver_aggregator::type() -{ - return d_type; -} - -const std::vector<std::string>& -rpcserver_aggregator::registeredServers() -{ - return d_registeredServers; -} - -void -rpcserver_aggregator::registerConfigureCallback(const std::string &id, - const configureCallback_t callback) -{ - std::for_each(d_serverlist.begin(), d_serverlist.end(), - registerConfigureCallback_f<rpcmanager_base::rpcserver_booter_base_sptr, configureCallback_t>(id, callback)); -} - -void -rpcserver_aggregator::unregisterConfigureCallback(const std::string &id) -{ - std::for_each(d_serverlist.begin(), d_serverlist.end(), - unregisterConfigureCallback_f<rpcmanager_base::rpcserver_booter_base_sptr, configureCallback_t>(id)); -} - -void -rpcserver_aggregator::registerQueryCallback(const std::string &id, const queryCallback_t callback) -{ - std::for_each(d_serverlist.begin(), d_serverlist.end(), - registerQueryCallback_f<rpcmanager_base::rpcserver_booter_base_sptr, queryCallback_t>(id, callback)); -} - -void -rpcserver_aggregator::unregisterQueryCallback(const std::string &id) -{ - std::for_each(d_serverlist.begin(), d_serverlist.end(), - unregisterQueryCallback_f<rpcmanager_base::rpcserver_booter_base_sptr, queryCallback_t>(id)); -} - -void -rpcserver_aggregator::registerServer(rpcmanager_base::rpcserver_booter_base_sptr server) -{ - std::vector<std::string>::iterator it(std::find(d_registeredServers.begin(), - d_registeredServers.end(), - server->type())); - if(it != d_registeredServers.end()) { - d_serverlist.push_back(server); - d_registeredServers.push_back(server->type()); - } - else { - std::stringstream s; - s << "rpcserver_aggregator::registerServer: server of type " - << server->type() << " already registered" << std::endl; - throw std::runtime_error(s.str().c_str()); - } -} diff --git a/gnuradio-core/src/lib/runtime/rpcserver_aggregator.h b/gnuradio-core/src/lib/runtime/rpcserver_aggregator.h deleted file mode 100644 index 050d9bb1e5..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_aggregator.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCSERVER_AGGREGATOR_H -#define RPCSERVER_AGGREGATOR_H - -#include <vector> -#include <string> -#include <rpcserver_base.h> -#include <rpcmanager_base.h> - -class rpcserver_aggregator : public virtual rpcserver_base -{ -public: - rpcserver_aggregator(); - virtual ~rpcserver_aggregator(); - - void registerConfigureCallback(const std::string &id, const configureCallback_t callback); - void unregisterConfigureCallback(const std::string &id); - - void registerQueryCallback(const std::string &id, const queryCallback_t callback); - void unregisterQueryCallback(const std::string &id); - - void registerServer(rpcmanager_base::rpcserver_booter_base_sptr server); - - const std::string& type(); - - const std::vector<std::string>& registeredServers(); - -private: - template<class T, typename Tcallback> - struct registerConfigureCallback_f: public std::unary_function<T,void> - { - registerConfigureCallback_f(const std::string &_id, const Tcallback _callback) - : id(_id), callback(_callback) - {;} - - void operator()(T& x) { x->i()->registerConfigureCallback(id, callback); } - const std::string& id; const Tcallback& callback; - }; - - template<class T, typename Tcallback> - struct unregisterConfigureCallback_f: public std::unary_function<T,void> - { - unregisterConfigureCallback_f(const std::string &_id) - : id(_id) - {;} - - void operator()(T& x) { x->i()->unregisterConfigureCallback(id); } - const std::string& id; - }; - - template<class T, typename Tcallback> - struct registerQueryCallback_f: public std::unary_function<T,void> - { - registerQueryCallback_f(const std::string &_id, const Tcallback _callback) - : id(_id), callback(_callback) - {;} - - void operator()(T& x) { x->i()->registerQueryCallback(id, callback); } - const std::string& id; const Tcallback& callback; - }; - - template<class T, typename Tcallback> - struct unregisterQueryCallback_f: public std::unary_function<T,void> - { - unregisterQueryCallback_f(const std::string &_id) - : id(_id) - {;} - - void operator()(T& x) { x->i()->unregisterQueryCallback(id); } - const std::string& id; - }; - - const std::string d_type; - typedef std::vector<rpcmanager_base::rpcserver_booter_base_sptr> rpcServerMap_t; - std::vector<std::string> d_registeredServers; - rpcServerMap_t d_serverlist; -}; - -#endif /* RPCSERVER_AGGREGATOR_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcserver_base.h b/gnuradio-core/src/lib/runtime/rpcserver_base.h deleted file mode 100644 index bc985c8d53..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_base.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCSERVER_BASE_H -#define RPCSERVER_BASE_H - -#include <rpccallbackregister_base.h> - -class rpcserver_base : public virtual callbackregister_base -{ -public: - rpcserver_base() : cur_priv(RPC_PRIVLVL_ALL) {;} - virtual ~rpcserver_base() {;} - - virtual void registerConfigureCallback(const std::string &id, const configureCallback_t callback) = 0; - virtual void unregisterConfigureCallback(const std::string &id) = 0; - virtual void registerQueryCallback(const std::string &id, const queryCallback_t callback) = 0; - virtual void unregisterQueryCallback(const std::string &id) = 0; - virtual void setCurPrivLevel(const priv_lvl_t priv) { cur_priv = priv; } - - typedef boost::shared_ptr<rpcserver_base> rpcserver_base_sptr; -protected: - priv_lvl_t cur_priv; - -private: -}; - -#endif /* RPCSERVER_BASE_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcserver_booter_aggregator.cc b/gnuradio-core/src/lib/runtime/rpcserver_booter_aggregator.cc deleted file mode 100644 index c4c1b03c15..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_booter_aggregator.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <rpcserver_booter_aggregator.h> - -rpcserver_booter_aggregator::rpcserver_booter_aggregator() : - d_type(std::string("aggregator")), server(new rpcserver_aggregator()) -{;} - -rpcserver_booter_aggregator::~rpcserver_booter_aggregator() -{;} - -rpcserver_base* -rpcserver_booter_aggregator::i() -{ - return &(*server); -} - -const std::string& -rpcserver_booter_aggregator::type() -{ - return d_type; -} - -const std::vector<std::string> -rpcserver_booter_aggregator::endpoints() -{ - std::vector<std::string> ep; - ep.push_back(std::string("TODO")); - return ep; -} - -const std::vector<std::string>& -rpcserver_booter_aggregator::registeredServers() -{ - return server->registeredServers(); -} - -rpcserver_aggregator* -rpcserver_booter_aggregator::agg() -{ - return &(*server); -} diff --git a/gnuradio-core/src/lib/runtime/rpcserver_booter_aggregator.h b/gnuradio-core/src/lib/runtime/rpcserver_booter_aggregator.h deleted file mode 100644 index da190a0be1..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_booter_aggregator.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCSERVER_BOOTER_AGGREGATOR -#define RPCSERVER_BOOTER_AGGREGATOR - -#include <gr_core_api.h> -#include <rpcserver_booter_base.h> -#include <rpcserver_aggregator.h> -#include <boost/shared_ptr.hpp> -#include <string> - -class rpcserver_server; - -class GR_CORE_API rpcserver_booter_aggregator : - public virtual rpcserver_booter_base -{ - public: - rpcserver_booter_aggregator(); - ~rpcserver_booter_aggregator(); - - rpcserver_base* i(); - const std::string& type(); - const std::vector<std::string> endpoints(); - - const std::vector<std::string>& registeredServers(); - - protected: - friend class rpcmanager; - rpcserver_aggregator* agg(); - -private: - std::string d_type; - boost::shared_ptr<rpcserver_aggregator> server; -}; - -#endif /* RPCSERVER_BOOTER_AGGREGATOR */ diff --git a/gnuradio-core/src/lib/runtime/rpcserver_booter_base.h b/gnuradio-core/src/lib/runtime/rpcserver_booter_base.h deleted file mode 100644 index 682944dada..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_booter_base.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCSERVER_BOOTER_BASE -#define RPCSERVER_BOOTER_BASE - -#include <string> -#include <vector> - -class rpcserver_base; - -class rpcserver_booter_base -{ -public: - rpcserver_booter_base() {;} - virtual ~rpcserver_booter_base() {;} - - virtual rpcserver_base* i()=0; - virtual const std::vector<std::string> endpoints()=0; - virtual const std::string& type()=0; - -private: -}; - -#endif /* RPCSERVER_BOOTER_BASE */ diff --git a/gnuradio-core/src/lib/runtime/rpcserver_booter_ice.cc b/gnuradio-core/src/lib/runtime/rpcserver_booter_ice.cc deleted file mode 100644 index 7cc8cc8938..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_booter_ice.cc +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <rpcserver_ice.h> -#include <rpcserver_booter_ice.h> - -namespace { - static const char* const CONTROL_PORT_CLASS("ice"); - static const char* const CONTROL_PORT_NAME("ControlPort"); - static const char* const ENDPOINT_NAME("gnuradio"); -}; - -rpcserver_booter_ice::rpcserver_booter_ice() : - ice_server_template<rpcserver_base, rpcserver_ice, - rpcserver_booter_ice, GNURadio::ControlPortPtr> - (this, std::string(CONTROL_PORT_NAME), std::string(ENDPOINT_NAME)), - d_type(std::string(CONTROL_PORT_CLASS)) -{;} - -rpcserver_booter_ice::~rpcserver_booter_ice() -{;} - -rpcserver_base* -rpcserver_booter_ice::i() -{ - return ice_server_template<rpcserver_base, rpcserver_ice, - rpcserver_booter_ice, GNURadio::ControlPortPtr>::i(); -} - -const std::vector<std::string> -rpcserver_booter_ice::endpoints() -{ - return ice_server_template<rpcserver_base, rpcserver_ice, - rpcserver_booter_ice, GNURadio::ControlPortPtr>::endpoints(); -} diff --git a/gnuradio-core/src/lib/runtime/rpcserver_booter_ice.h b/gnuradio-core/src/lib/runtime/rpcserver_booter_ice.h deleted file mode 100644 index 69dfcc7602..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_booter_ice.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCSERVER_BOOTER_ICE_H -#define RPCSERVER_BOOTER_ICE_H - -#include <rpcserver_booter_base.h> -#include <ice_server_template.h> -#include <gnuradio.h> - -class rpcserver_base; -class rpcserver_ice; - -class rpcserver_booter_ice : public virtual rpcserver_booter_base, - public virtual ice_server_template<rpcserver_base, rpcserver_ice, - rpcserver_booter_ice, GNURadio::ControlPortPtr> -{ -public: - rpcserver_booter_ice(); - ~rpcserver_booter_ice(); - - rpcserver_base* i(); - const std::string & type() {return d_type;} - const std::vector<std::string> endpoints(); - -private: - std::string d_type; -}; - -#endif /* RPCSERVER_BOOTER_ICE_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcserver_ice.cc b/gnuradio-core/src/lib/runtime/rpcserver_ice.cc deleted file mode 100644 index 12229a0688..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_ice.cc +++ /dev/null @@ -1,165 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <rpcserver_ice.h> -#include <IceUtil/IceUtil.h> -#include <Ice/Ice.h> -#include <iostream> -#include <sstream> -#include <stdexcept> -#include <gruel/pmt.h> - -#define DEBUG 0 - -using namespace rpcpmtconverter; - -rpcserver_ice::rpcserver_ice() -{} - -rpcserver_ice::~rpcserver_ice() -{} - -void -rpcserver_ice::registerConfigureCallback(const std::string &id, - const configureCallback_t callback) -{ - { - ConfigureCallbackMap_t::const_iterator iter(d_setcallbackmap.find(id)); - if(iter != d_setcallbackmap.end()) { - std::stringstream s; - s << "rpcserver_ice:: rpcserver_ice ERROR registering set, already registered: " - << id << std::endl; - throw std::runtime_error(s.str().c_str()); - } - } - - if(DEBUG) - std::cout << "rpcserver_ice registering set: " << id << std::endl; - - d_setcallbackmap.insert(ConfigureCallbackMap_t::value_type(id, callback)); -} - -void -rpcserver_ice::unregisterConfigureCallback(const std::string &id) -{ - ConfigureCallbackMap_t::iterator iter(d_setcallbackmap.find(id)); - if(iter == d_setcallbackmap.end()) { - std::stringstream s; - s << "rpcserver_ice:: rpcserver_ice ERROR unregistering set, not registered: " - << id << std::endl; - throw std::runtime_error(s.str().c_str()); - } - - if(DEBUG) - std::cout << "rpcserver_ice unregistering set: " << id << std::endl; - - d_setcallbackmap.erase(iter); -} - -void -rpcserver_ice::registerQueryCallback(const std::string &id, - const queryCallback_t callback) -{ - { - QueryCallbackMap_t::const_iterator iter(d_getcallbackmap.find(id)); - if(iter != d_getcallbackmap.end()) { - std::stringstream s; - s << "rpcserver_ice:: rpcserver_ice ERROR registering get, already registered: " - << id << std::endl; - throw std::runtime_error(s.str().c_str()); - } - } - - if(DEBUG) - std::cout << "rpcserver_ice registering get: " << id << std::endl; - - d_getcallbackmap.insert(QueryCallbackMap_t::value_type(id, callback)); -} - -void -rpcserver_ice::unregisterQueryCallback(const std::string &id) -{ - QueryCallbackMap_t::iterator iter(d_getcallbackmap.find(id)); - if(iter == d_getcallbackmap.end()) { - std::stringstream s; - s << "rpcserver_ice:: rpcserver_ice ERROR unregistering get, registered: " - << id << std::endl; - throw std::runtime_error(s.str().c_str()); - } - - if(DEBUG) - std::cout << "rpcserver_ice unregistering get: " << id << std::endl; - - d_getcallbackmap.erase(iter); -} - -void -rpcserver_ice::set(const GNURadio::KnobMap& knobs, const Ice::Current& c) -{ - std::for_each(knobs.begin(), knobs.end(), - set_f<GNURadio::KnobMap::value_type,ConfigureCallbackMap_t> - (c, d_setcallbackmap, cur_priv)); -} - -GNURadio::KnobMap -rpcserver_ice::get(const GNURadio::KnobIDList& knobs, const Ice::Current& c) -{ - GNURadio::KnobMap outknobs; - - if(knobs.size() == 0) { - std::for_each(d_getcallbackmap.begin(), d_getcallbackmap.end(), - get_all_f<QueryCallbackMap_t::value_type, QueryCallbackMap_t, GNURadio::KnobMap> - (c, d_getcallbackmap, cur_priv, outknobs)); - } - else { - std::for_each(knobs.begin(), knobs.end(), - get_f<GNURadio::KnobIDList::value_type, QueryCallbackMap_t> - (c, d_getcallbackmap, cur_priv, outknobs)); - } - return outknobs; -} - -GNURadio::KnobPropMap -rpcserver_ice::properties(const GNURadio::KnobIDList& knobs, const Ice::Current& c) -{ - GNURadio::KnobPropMap outknobs; - - if(knobs.size() == 0) { - std::for_each(d_getcallbackmap.begin(), d_getcallbackmap.end(), - properties_all_f<QueryCallbackMap_t::value_type, - QueryCallbackMap_t,GNURadio::KnobPropMap>(c, d_getcallbackmap, cur_priv, outknobs)); - } - else { - std::for_each(knobs.begin(), knobs.end(), - properties_f<GNURadio::KnobIDList::value_type, - QueryCallbackMap_t, GNURadio::KnobPropMap>(c, d_getcallbackmap, cur_priv, outknobs)); - } - return outknobs; -} - -void -rpcserver_ice::shutdown(const Ice::Current& c) -{ - if(DEBUG) - std::cout << "Shutting down..." << std::endl; - c.adapter->getCommunicator()->shutdown(); -} diff --git a/gnuradio-core/src/lib/runtime/rpcserver_ice.h b/gnuradio-core/src/lib/runtime/rpcserver_ice.h deleted file mode 100644 index 66ed8d5156..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_ice.h +++ /dev/null @@ -1,221 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCSERVER_ICE_H -#define RPCSERVER_ICE_H - -#include <rpcserver_base.h> -#include <rpcpmtconverters_ice.h> -#include <string> -#include <map> -#include <gnuradio.h> -#include <Ice/Exception.h> - -class rpcserver_ice : public virtual rpcserver_base, public GNURadio::ControlPort -{ -public: - rpcserver_ice(); - virtual ~rpcserver_ice(); - - void registerConfigureCallback(const std::string &id, const configureCallback_t callback); - void unregisterConfigureCallback(const std::string &id); - - void registerQueryCallback(const std::string &id, const queryCallback_t callback); - void unregisterQueryCallback(const std::string &id); - - virtual void set(const GNURadio::KnobMap&, const Ice::Current&); - - GNURadio::KnobMap get(const GNURadio::KnobIDList&, const Ice::Current&); - - GNURadio::KnobPropMap properties(const GNURadio::KnobIDList&, const Ice::Current&); - - virtual void shutdown(const Ice::Current&); - -private: - typedef std::map<std::string, configureCallback_t> ConfigureCallbackMap_t; - ConfigureCallbackMap_t d_setcallbackmap; - - typedef std::map<std::string, queryCallback_t> QueryCallbackMap_t; - QueryCallbackMap_t d_getcallbackmap; - - template<typename T, typename TMap> struct set_f - : public std::unary_function<T,void> - { - set_f(const Ice::Current& _c, TMap& _setcallbackmap, const priv_lvl_t& _cur_priv) : - c(_c), d_setcallbackmap(_setcallbackmap), cur_priv(_cur_priv) - {;} - - void operator()(const T& p) - { - ConfigureCallbackMap_t::const_iterator iter(d_setcallbackmap.find(p.first)); - if(iter != d_setcallbackmap.end()) { - if(cur_priv <= iter->second.priv) { - (*iter->second.callback).post(pmt::PMT_NIL, rpcpmtconverter::to_pmt(p.second,c)); - } - else { - std::cout << "Key " << p.first << " requires PRIVLVL <= " - << iter->second.priv << " to set, currently at: " - << cur_priv << std::endl; - } - } - else { - throw IceUtil::NullHandleException(__FILE__, __LINE__); - } - } - - const Ice::Current& c; - TMap& d_setcallbackmap; - const priv_lvl_t& cur_priv; - }; - - template<typename T, typename TMap> - struct get_f : public std::unary_function<T,void> - { - get_f(const Ice::Current& _c, TMap& _getcallbackmap, - const priv_lvl_t& _cur_priv, GNURadio::KnobMap& _outknobs) : - c(_c), d_getcallbackmap(_getcallbackmap), cur_priv(_cur_priv), outknobs(_outknobs) - {} - - void operator()(const T& p) - { - QueryCallbackMap_t::const_iterator iter(d_getcallbackmap.find(p)); - if(iter != d_getcallbackmap.end()) { - if(cur_priv <= iter->second.priv) { - outknobs[p] = rpcpmtconverter::from_pmt((*iter->second.callback).retrieve(), c); - } - else { - std::cout << "Key " << iter->first << " requires PRIVLVL: <= " - << iter->second.priv << " to get, currently at: " - << cur_priv << std::endl; - } - } - else { - throw IceUtil::NullHandleException(__FILE__, __LINE__); - } - } - - const Ice::Current& c; - TMap& d_getcallbackmap; - const priv_lvl_t& cur_priv; - GNURadio::KnobMap& outknobs; - }; - - template<typename T, typename TMap, typename TKnobMap> - struct get_all_f : public std::unary_function<T,void> - { - get_all_f(const Ice::Current& _c, TMap& _getcallbackmap, - const priv_lvl_t& _cur_priv, TKnobMap& _outknobs) : - c(_c), d_getcallbackmap(_getcallbackmap), cur_priv(_cur_priv), outknobs(_outknobs) - {;} - - void operator()(const T& p) - { - if(cur_priv <= p.second.priv) { - outknobs[p.first] = rpcpmtconverter::from_pmt(p.second.callback->retrieve(), c); - } - else { - std::cout << "Key " << p.first << " requires PRIVLVL <= " - << p.second.priv << " to get, currently at: " - << cur_priv << std::endl; - } - } - - const Ice::Current& c; - TMap& d_getcallbackmap; - const priv_lvl_t& cur_priv; - TKnobMap& outknobs; - }; - - template<typename T, typename TMap, typename TKnobMap> - struct properties_all_f : public std::unary_function<T,void> - { - properties_all_f(const Ice::Current& _c, QueryCallbackMap_t& _getcallbackmap, - const priv_lvl_t& _cur_priv, GNURadio::KnobPropMap& _outknobs) : - c(_c), d_getcallbackmap(_getcallbackmap), cur_priv(_cur_priv), outknobs(_outknobs) - {;} - - void operator()(const T& p) - { - if(cur_priv <= p.second.priv) { - GNURadio::KnobProp prop;//(new GNURadio::KnobProp()); - prop.type = GNURadio::KNOBDOUBLE; - prop.units = p.second.units; - prop.description = p.second.description; - prop.min = rpcpmtconverter::from_pmt(p.second.min, c); - prop.max = rpcpmtconverter::from_pmt(p.second.max, c); - prop.display = static_cast<uint32_t>(p.second.display); - outknobs[p.first] = prop; - } - else { - std::cout << "Key " << p.first << " requires PRIVLVL <= " - << p.second.priv << " to get, currently at: " - << cur_priv << std::endl; - } - } - - const Ice::Current& c; - TMap& d_getcallbackmap; - const priv_lvl_t& cur_priv; - TKnobMap& outknobs; - }; - - template<class T, typename TMap, typename TKnobMap> - struct properties_f : public std::unary_function<T,void> - { - properties_f(const Ice::Current& _c, TMap& _getcallbackmap, - const priv_lvl_t& _cur_priv, TKnobMap& _outknobs) : - c(_c), d_getcallbackmap(_getcallbackmap), cur_priv(_cur_priv), outknobs(_outknobs) - {;} - - void operator()(const T& p) - { - typename TMap::const_iterator iter(d_getcallbackmap.find(p)); - if(iter != d_getcallbackmap.end()) { - if(cur_priv <= iter->second.priv) { - GNURadio::KnobProp prop; - prop.type = GNURadio::KNOBDOUBLE; - prop.units = iter->second.units; - prop.description = iter->second.description; - prop.min = rpcpmtconverter::from_pmt(iter->second.min, c); - prop.max = rpcpmtconverter::from_pmt(iter->second.max, c); - prop.display = static_cast<uint32_t>(iter->second.display); - //outknobs[iter->first] = prop; - outknobs[p] = prop; - } - else { - std::cout << "Key " << iter->first << " requires PRIVLVL: <= " << - iter->second.priv << " to get, currently at: " << cur_priv << std::endl; - } - } - else { - throw IceUtil::NullHandleException(__FILE__, __LINE__); - } - } - - const Ice::Current& c; - TMap& d_getcallbackmap; - const priv_lvl_t& cur_priv; - TKnobMap& outknobs; - }; -}; - -#endif /* RPCSERVER_ICE_H */ diff --git a/gnuradio-core/src/lib/runtime/rpcserver_selector.cc b/gnuradio-core/src/lib/runtime/rpcserver_selector.cc deleted file mode 100644 index 362d5f060a..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_selector.cc +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 <rpcserver_booter_aggregator.h> -#include <rpcmanager.h> -#include <rpcserver_selector.h> - -bool rpcmanager::make_aggregator(false); - -#ifdef RPCSERVER_ICE - #include <rpcserver_booter_ice.h> - rpcmanager::rpcserver_booter_register_helper<rpcserver_booter_ice> boot_ice; -#endif - -#ifdef RPCSERVER_ERLANG - #error TODO ERLANG -#endif - -#ifdef RPCSERVER_XMLRPC - #error TODO XMLRPC -#endif diff --git a/gnuradio-core/src/lib/runtime/rpcserver_selector.h b/gnuradio-core/src/lib/runtime/rpcserver_selector.h deleted file mode 100644 index fa63c9a2dc..0000000000 --- a/gnuradio-core/src/lib/runtime/rpcserver_selector.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2012 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 RPCSERVER_SELECTOR -#define RPCSERVER_SELECTOR - -#define RPCSERVER_ENABLED - -#define RPCSERVER_ICE -//#define RPCSERVER_ERLANG -//#define RPCSERVER_XMLRPC - -#endif diff --git a/gnuradio-core/src/lib/runtime/runtime.i b/gnuradio-core/src/lib/runtime/runtime.i deleted file mode 100644 index ac0092f917..0000000000 --- a/gnuradio-core/src/lib/runtime/runtime.i +++ /dev/null @@ -1,151 +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. - */ - -#define GR_CORE_API - -%{ -#include <gr_runtime_types.h> -#include <gr_io_signature.h> -#include <gr_buffer.h> -#include <gr_block.h> -#include <gr_block_detail.h> -#include <gr_hier_block2.h> -#include <gr_single_threaded_scheduler.h> -#include <gr_message.h> -#include <gr_msg_handler.h> -#include <gr_msg_queue.h> -#include <gr_dispatcher.h> -#include <gr_error_handler.h> -#include <gr_realtime.h> -#include <gr_sync_block.h> -#include <gr_sync_decimator.h> -#include <gr_sync_interpolator.h> -#include <gr_tagged_stream_block.h> -#include <gr_top_block.h> -#include <gr_logger.h> -%} - -%constant int sizeof_char = sizeof(char); -%constant int sizeof_short = sizeof(short); -%constant int sizeof_int = sizeof(int); -%constant int sizeof_float = sizeof(float); -%constant int sizeof_double = sizeof(double); -%constant int sizeof_gr_complex = sizeof(gr_complex); - -%include <gr_io_signature.i> -%include <gr_buffer.i> -%include <gr_basic_block.i> -%include <gr_block.i> -%include <gr_block_detail.i> -%include <gr_hier_block2.i> -%include <gr_swig_block_magic.i> -%include <gr_single_threaded_scheduler.i> -%include <gr_message.i> -%include <gr_msg_handler.i> -%include <gr_msg_queue.i> -%include <gr_dispatcher.i> -%include <gr_error_handler.i> -%include <gr_realtime.i> -%include <gr_sync_block.i> -%include <gr_sync_decimator.i> -%include <gr_sync_interpolator.i> -%include <gr_tagged_stream_block.i> -%include <gr_top_block.i> -%include <gr_logger.i> - -#ifdef GR_CTRLPORT - -typedef uint32_t DisplayType; - -// DisplayType Plotting types -const uint32_t DISPNULL = 0x0000; -const uint32_t DISPTIME = 0x0001; -const uint32_t DISPXY = 0x0002; -const uint32_t DISPPSD = 0x0004; -const uint32_t DISPSPEC = 0x0008; -const uint32_t DISPRAST = 0x0010; - -// DisplayType Options -const uint32_t DISPOPTCPLX = 0x0100; -const uint32_t DISPOPTLOG = 0x0200; -const uint32_t DISPOPTSTEM = 0x0400; -const uint32_t DISPOPTSTRIP = 0x0800; -const uint32_t DISPOPTSCATTER = 0x1000; - -enum priv_lvl_t { - RPC_PRIVLVL_ALL = 0, - RPC_PRIVLVL_MIN = 9, - RPC_PRIVLVL_NONE = 10 -}; - -enum KnobType { - KNOBBOOL, KNOBCHAR, KNOBINT, KNOBFLOAT, - KNOBDOUBLE, KNOBSTRING, KNOBLONG, KNOBVECBOOL, - KNOBVECCHAR, KNOBVECINT, KNOBVECFLOAT, KNOBVECDOUBLE, - KNOBVECSTRING, KNOBVECLONG -}; - -%template(StrVector) std::vector<std::string>; - -%{ -#include <rpcserver_booter_base.h> -#include <rpcserver_booter_aggregator.h> -#include <pycallback_object.h> -%} - -%include <rpcserver_booter_base.h> -%include <rpcserver_booter_aggregator.h> -%include <pycallback_object.h> - -// Declare this class here but without the nested templated class -// inside (replaces include of rpcmanager.h) -class GR_CORE_API rpcmanager : public virtual rpcmanager_base -{ - public: - rpcmanager(); - ~rpcmanager(); - - static rpcserver_booter_base* get(); - - static void register_booter(rpcserver_booter_base* booter); -}; - - -// Attach a new python callback method to Python function -%extend pycallback_object { - // Set a Python function object as a callback function - // Note : PyObject *pyfunc is remapped with a typempap - void activate(PyObject *pyfunc) - { - self->set_callback(pyfunc); - Py_INCREF(pyfunc); - } -} - -%template(RPC_get_string) pycallback_object<std::string>; -%template(RPC_get_int) pycallback_object<int>; -%template(RPC_get_float) pycallback_object<float>; -%template(RPC_get_double) pycallback_object<double>; -%template(RPC_get_vector_float) pycallback_object<std::vector<float> >; -%template(RPC_get_vector_gr_complex) pycallback_object<std::vector<gr_complex> >; - -#endif /* GR_CTRLPORT */ diff --git a/gnuradio-core/src/lib/runtime/test_shared_block_ptr.cc b/gnuradio-core/src/lib/runtime/test_shared_block_ptr.cc deleted file mode 100644 index 0a391c1354..0000000000 --- a/gnuradio-core/src/lib/runtime/test_shared_block_ptr.cc +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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. - */ - -#include <gr_shared_block_sptr.h> -#include <blocks/vector_source_i.h> - -gr_block_sptr -foo (gr::blocks::vector_source_i::sptr s) -{ - return gr_block_sptr (s); -} - -typedef gr_shared_block_sptr<gr::blocks::vector_source_i> gr_vector_source_i_ptrX; -//typedef boost::shared_ptr<gr::blocks::vector_source_i> gr_vector_source_i_ptrX; - -gr_vector_source_i_ptrX -bar (gr_vector_source_i *s) -{ - return gr_vector_source_i_ptrX (s); -} - -gr_block_sptr -baz_1 (gr_vector_source_i_ptrX s) -{ - return gr_block_sptr (s); -} - -#if 0 -gr_block_sptr -baz_2 (gr_vector_source_i_ptrX s) -{ - return s.block_sptr (); -} -#endif diff --git a/gnuradio-core/src/lib/swig/CMakeLists.txt b/gnuradio-core/src/lib/swig/CMakeLists.txt deleted file mode 100644 index f098597df0..0000000000 --- a/gnuradio-core/src/lib/swig/CMakeLists.txt +++ /dev/null @@ -1,105 +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. - -######################################################################## -include(GrPython) -include(GrSwig) - -set(GR_SWIG_INCLUDE_DIRS - ${CMAKE_CURRENT_BINARY_DIR} - ${GNURADIO_CORE_SWIG_INCLUDE_DIRS} - ${GRUEL_INCLUDE_DIRS} - ${LOG4CPP_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} -) -set(GR_SWIG_LIBRARIES - gnuradio-core - ${LOG4CPP_LIBRARIES} -) - -# Only use if log4cpp is installed -# Define ENABLE_GR_LOG for the .i file to ignore it. -if(ENABLE_GR_LOG) - SET(GR_SWIG_FLAGS "-DENABLE_GR_LOG") -endif(ENABLE_GR_LOG) - -if(ENABLE_GR_CTRLPORT) - list(APPEND GR_SWIG_FLAGS -DGR_CTRLPORT) - list(APPEND GR_SWIG_LIBRARIES ${ICE_LIBRARIES}) - list(APPEND GR_SWIG_INCLUDE_DIRS ${ICE_INCLUDE_DIR}) -endif(ENABLE_GR_CTRLPORT) - -link_directories(${Boost_LIBRARY_DIRS}) - -######################################################################## -# Build and install the swig targets -######################################################################## -# ---------------------------------------------------------------- -# We've split the previously monstrous gnuradio_corethon into 6 -# smaller pieces. This reduces compile time coupling and creates -# smaller pieces for the compiler to digest. prior to this change, on -# X86_64, g++'s resident set size was 650MB! -# ---------------------------------------------------------------- - -set(GR_SWIG_TARGET_DEPS gnuradio_core_generated_sources - general_generated filter_generated pmt_swig) - -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) - GR_SWIG_INSTALL( - TARGETS gnuradio_core_${what} - DESTINATION ${GR_PYTHON_DIR}/gnuradio/gr - COMPONENT "core_python" - ) - install( - FILES - gnuradio_core_${what}.i - ${CMAKE_CURRENT_BINARY_DIR}/${what}_swig_doc.i - DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig - COMPONENT "core_swig" - ) - list(APPEND core_swig_deps ${SWIG_MODULE_gnuradio_core_${what}_REAL_NAME}) -endforeach(what) - -add_custom_target(core_swig DEPENDS ${core_swig_deps}) - -######################################################################## -# Install various files -######################################################################## -install(FILES - gnuradio.i - gr_swig_block_magic.i - gr_shared_ptr.i - DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig - COMPONENT "core_swig" -) - -GR_PYTHON_INSTALL( - FILES gnuradio_core.py - DESTINATION ${GR_PYTHON_DIR}/gnuradio/gr - COMPONENT "core_python" -) - -install( - FILES ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio_swig_bug_workaround.h - DESTINATION ${GR_INCLUDE_DIR}/gnuradio - COMPONENT "core_swig" -) diff --git a/gnuradio-core/src/lib/swig/gen-swig-bug-fix b/gnuradio-core/src/lib/swig/gen-swig-bug-fix deleted file mode 100755 index 5e9f82e7d7..0000000000 --- a/gnuradio-core/src/lib/swig/gen-swig-bug-fix +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# - -import sys -import re - -def write_header (f): - f.write ('''/* -*- 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. - */ - -#ifndef INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H -#define INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H - -/* - * This include files works around a bug in SWIG 1.3.21 and 22 - * where it fails to emit these declarations when doing - * %import "gnuradio.i" - */ - -''') - -def write_trailer (f): - f.write (''' -#endif /* INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H */ -''') - -def doit (input, output): - re_RULES_BEGIN = re.compile ('RULES \(BEGIN\)') - re_RULES_END = re.compile ('RULES \(END\)') - re_RETURN = re.compile ('^\s*return') - re_NOT_ID = re.compile ('[^a-zA-Z0-9_]') - words = {} - - write_header (output) - for line in input: - if re_RULES_BEGIN.search (line): - break - - for line in input: - if re_RULES_END.search (line): - break - if not re_RETURN.match (line): - continue - line = re_NOT_ID.sub (' ', line) - line = re.sub (' +', ' ', line) - for w in line.split (' '): - words[w] = 1 - - for w in ('', 'return', 'void', 'x'): - del words[w] - - wl = words.keys() - wl.sort () - for w in wl: - output.write ('class ' + w + ';\n') - - write_trailer (output) - - -def main (): - if len (sys.argv) != 3: - sys.stderr.write ("usage: %s gnuradio_swig_python.cc gnuradio_swig_bug_workaround.h\n" - % (sys.argv[0],)) - sys.exit (1) - input_filename = sys.argv[1] - output_filename = sys.argv[2] - input = open (input_filename, "r") - output = open (output_filename, "w") - doit (input, output) - -if __name__ == '__main__': - main () - diff --git a/gnuradio-core/src/lib/swig/gnuradio.i b/gnuradio-core/src/lib/swig/gnuradio.i deleted file mode 100644 index 03b7817e22..0000000000 --- a/gnuradio-core/src/lib/swig/gnuradio.i +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,2004,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. - */ - -// Disable warning about base class types -#pragma SWIG nowarn=401 - -//////////////////////////////////////////////////////////////////////// -// gnuradio.i -// SWIG interface definition -//////////////////////////////////////////////////////////////////////// - -%include <gruel_common.i> - -//////////////////////////////////////////////////////////////////////// -// Headers - -%{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix -#include <gr_types.h> -#include <stddef.h> // size_t -#include <complex> -#include <string.h> -%} - -%feature("autodoc","1"); - -// local file -%include <gr_shared_ptr.i> -%include <gr_types.h> -%include <std_complex.i> -%include <std_vector.i> -%include <stl.i> -%include <std_except.i> -%include <std_string.i> - -typedef std::complex<float> gr_complex; -typedef std::complex<double> gr_complexd; -typedef unsigned long long uint64_t; -typedef long long int64_t; - - -// instantiate the required template specializations - -namespace std { - %template() vector<unsigned char>; - %template() vector<char>; - %template() vector<short>; - %template() vector<int>; - %template() vector<float>; - %template() vector<double>; - %template() vector<std::string>; - %template() vector<gr_tag_t>; - - %template() vector< std::complex<float> >; - %template() vector< std::vector< unsigned char > >; - %template() vector< std::vector< char > >; - %template() vector< std::vector< short > >; - %template() vector< std::vector< int > >; - %template() vector< std::vector< float > >; - %template() vector< std::vector< double > >; - %template() vector< std::vector< std::complex<float> > >; -}; - -//////////////////////////////////////////////////////////////////////// - -#ifndef SW_RUNTIME -// import runtime.i for all but sw_runtime, since it needs to %include -%import <runtime.i> -#endif - -//////////////////////////////////////////////////////////////////////// diff --git a/gnuradio-core/src/lib/swig/gnuradio_core.py b/gnuradio-core/src/lib/swig/gnuradio_core.py deleted file mode 100644 index 09d00fcdc1..0000000000 --- a/gnuradio-core/src/lib/swig/gnuradio_core.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# 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. -# - -# This file implements the old gnuradio_core namespace - -from gnuradio_core_runtime import * -from gnuradio_core_general import * diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_general.i b/gnuradio-core/src/lib/swig/gnuradio_core_general.i deleted file mode 100644 index 33f97815e8..0000000000 --- a/gnuradio-core/src/lib/swig/gnuradio_core_general.i +++ /dev/null @@ -1,54 +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 "general_swig_doc.i" - -#define GR_CORE_API - -#ifndef SWIGIMPORTED -%module(directors="1") gnuradio_core_general -#endif - - //%feature("autodoc", "1"); // generate python docstrings - -%include "gnuradio.i" // the common stuff - -%include "general.i" - - // Simple test case for complex input and output -%inline -%{ - std::complex<float> complexf_add_2j(std::complex<float> x) - { - return std::complex<float>(x.real(), x.imag() + 2); - } - - std::complex<double> complexd_add_2j(std::complex<double> x) - { - return std::complex<double>(x.real(), x.imag() + 2); - } - - std::complex<float> complexf_add_x_2j(float x, std::complex<float> y) - { - return std::complex<float>(x + y.real(), y.imag() + 2); - } - -%} diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_hier.i b/gnuradio-core/src/lib/swig/gnuradio_core_hier.i deleted file mode 100644 index 141d9b1635..0000000000 --- a/gnuradio-core/src/lib/swig/gnuradio_core_hier.i +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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 "hier_swig_doc.i" - -#ifndef SWIGIMPORTED -%module(directors="1") gnuradio_hier_hier -#endif - - //%feature("autodoc", "1"); // generate python docstrings - -%include "gnuradio.i" // the common stuff - -%include "hier.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i b/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i deleted file mode 100644 index fb311d226d..0000000000 --- a/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 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 GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -%include "runtime_swig_doc.i" - -#ifndef SWIGIMPORTED -%module(directors="1") gnuradio_core_runtime -#endif - - //%feature("autodoc", "1"); // generate python docstrings - -#define SW_RUNTIME -%include "gnuradio.i" // the common stuff - -%include "runtime.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_bug_workaround.h b/gnuradio-core/src/lib/swig/gnuradio_swig_bug_workaround.h deleted file mode 100644 index bbbabaf07b..0000000000 --- a/gnuradio-core/src/lib/swig/gnuradio_swig_bug_workaround.h +++ /dev/null @@ -1,46 +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. - */ - -#ifndef INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H -#define INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H - -/* - * This include files works around a bug in SWIG 1.3.21 and 22 - * where it fails to emit these declarations when doing - * %import "gnuradio.i" - */ - -class gr_base_error_handler; -class gr_basic_block; -class gr_block; -class gr_error_handler; -class gr_file_error_handler; -class gr_hier_block2; -class gr_msg_handler; -class gr_msg_queue; -class gr_sync_block; -class gr_sync_decimator; -class gr_sync_interpolator; -class gr_tagged_stream_block; -class gr_top_block; - -#endif /* INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H */ diff --git a/gnuradio-core/src/lib/swig/gr_shared_ptr.i b/gnuradio-core/src/lib/swig/gr_shared_ptr.i deleted file mode 100644 index 323d33ad73..0000000000 --- a/gnuradio-core/src/lib/swig/gr_shared_ptr.i +++ /dev/null @@ -1,43 +0,0 @@ -// -// shared_ptr -// -// An enhanced relative of scoped_ptr with reference counted copy semantics. -// The object pointed to is deleted when the last shared_ptr pointing to it -// is destroyed or reset. -// - -// -// This is highly hacked up version of boost::shared_ptr -// We just need enough to get SWIG to "do the right thing" and -// generate "Smart Pointer" code. -// - -namespace boost { - -template<class T> class shared_ptr -{ -public: - - shared_ptr() - { - } - - shared_ptr (T * p) - { - } - - - T * operator-> () // never throws - { - return px; - } - - -private: - - T * px; // contained pointer - int pn; - -}; // shared_ptr - -};
\ No newline at end of file diff --git a/gnuradio-core/src/lib/swig/gr_swig_block_magic.i b/gnuradio-core/src/lib/swig/gr_swig_block_magic.i deleted file mode 100644 index 6d1af6136d..0000000000 --- a/gnuradio-core/src/lib/swig/gr_swig_block_magic.i +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2010,2012 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. - */ - -%define GR_SWIG_BLOCK_MAGIC(PKG, BASE_NAME) -_GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, PKG ## _ ## BASE_NAME) -%enddef - -%define _GR_SWIG_BLOCK_MAGIC_HELPER_COMMON(PKG, BASE_NAME, FULL_NAME) -class FULL_NAME; -typedef boost::shared_ptr<FULL_NAME> FULL_NAME ## _sptr; -%template(FULL_NAME ## _sptr) boost::shared_ptr<FULL_NAME>; -%rename(BASE_NAME) PKG ## _make_ ## BASE_NAME; -%ignore FULL_NAME; -%enddef - -#ifdef SWIGPYTHON -%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, FULL_NAME) -_GR_SWIG_BLOCK_MAGIC_HELPER_COMMON(PKG, BASE_NAME, FULL_NAME) -%pythoncode %{ -FULL_NAME ## _sptr.__repr__ = lambda self: "<gr_block %s (%d)>" % (self.name(), self.unique_id ()) -%} -%enddef -#endif - -%define GR_SWIG_BLOCK_MAGIC2(PKG, BASE_NAME) -%template(BASE_NAME ## _sptr) boost::shared_ptr<gr:: ## PKG ## :: ## BASE_NAME>; -%pythoncode %{ -BASE_NAME ## _sptr.__repr__ = lambda self: "<gr_block %s (%d)>" % (self.name(), self.unique_id()) -BASE_NAME = BASE_NAME.make; -%} -%enddef - -%define GR_SWIG_BLOCK_MAGIC_FACTORY(PKG, BASE_NAME, FACTORY) -%template(FACTORY ## _sptr) boost::shared_ptr<gr:: ## PKG ## :: ## BASE_NAME>; -%pythoncode %{ -FACTORY ## _sptr.__repr__ = lambda self: "<gr_block %s (%d)>" % (self.name(), self.unique_id()) -FACTORY = BASE_NAME ## _make_ ## FACTORY; -%} -%enddef |