Compare commits
74 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bab0177d13 | |||
| 86965650ae | |||
| ef5fd6c595 | |||
| 6b5a8c1ddc | |||
| 4d1befbc05 | |||
| 24f72aaf08 | |||
| e620d48c81 | |||
| 4f069d6518 | |||
| 3d8a172acc | |||
| a2491b5474 | |||
| 5f7e102e3d | |||
| 6cd3b5bd10 | |||
| 4d12149cfb | |||
| 7e3107282a | |||
| 51f7d6b284 | |||
| 45fd47b6ec | |||
| 844424404d | |||
| 228d1b1bcc | |||
| 4a3f387d6d | |||
| 0b095e0ff7 | |||
| 8ca5dcedde | |||
| d8f45138a2 | |||
| e2a59771ed | |||
| 002df040ff | |||
| 0f659b4d50 | |||
| ae1286a727 | |||
| 7a2cbdb8d8 | |||
| d63adab8f1 | |||
| 99f1a4564f | |||
| c3e8688859 | |||
| 4f034c9722 | |||
| 763d55d9f2 | |||
| a17bd7bf3a | |||
| f66f1eea8a | |||
| 14d8dfcb5d | |||
| eea1ffa3bc | |||
| 30be96a165 | |||
| 9393abbf65 | |||
| 39861c37af | |||
| 8bffcf7faf | |||
| 358bb5ccaa | |||
| fee31310e5 | |||
| c80340df6e | |||
| 5c7879feaf | |||
| 4555253ab9 | |||
| 3ccf528a96 | |||
| b8b91a0c88 | |||
| f956d36ce4 | |||
| 3143469287 | |||
| 4cddc2b740 | |||
| d730126586 | |||
| b83d008fc8 | |||
| 5827b77c19 | |||
| e07d85547d | |||
| 333999630d | |||
| 1624842801 | |||
| 872b2dd0af | |||
| df0d480c59 | |||
| fc429e7f17 | |||
| d1667da2d4 | |||
| 7b119ba59e | |||
| 144cbbf796 | |||
| 429647eff1 | |||
| 1dcdcce729 | |||
| 528536e3f2 | |||
| 9cf628359b | |||
| c6502ae022 | |||
| d96ffc6ec8 | |||
| 22f761d7d0 | |||
| 65ec683d8e | |||
| 5bed2d13e6 | |||
| 1ef58db9c6 | |||
| 6f5faecabd | |||
| c1d50c7ff2 |
+104
@@ -0,0 +1,104 @@
|
|||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: LLVM
|
||||||
|
AccessModifierOffset: -4
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlinesLeft: true
|
||||||
|
AlignOperands: true
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: false
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: true
|
||||||
|
BinPackArguments: false
|
||||||
|
BinPackParameters: false
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BraceWrapping:
|
||||||
|
AfterClass: true
|
||||||
|
AfterControlStatement: false
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: true
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
IndentBraces: false
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 90
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: false
|
||||||
|
DerivePointerAlignment: false
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^"(gnuradio)/'
|
||||||
|
Priority: 1
|
||||||
|
- Regex: '^<(gnuradio)/'
|
||||||
|
Priority: 2
|
||||||
|
- Regex: '^<(boost)/'
|
||||||
|
Priority: 98
|
||||||
|
- Regex: '^<[a-z]*>$'
|
||||||
|
Priority: 99
|
||||||
|
- Regex: '^".*"$'
|
||||||
|
Priority: 0
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 10
|
||||||
|
|
||||||
|
IncludeIsMainRegex: '(Test)?$'
|
||||||
|
IndentCaseLabels: false
|
||||||
|
IndentWidth: 4
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 2
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 19
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 60
|
||||||
|
PointerAlignment: Left
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
Standard: Cpp11
|
||||||
|
TabWidth: 8
|
||||||
|
UseTab: Never
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
[Makefile]
|
|
||||||
indent_style = tab
|
|
||||||
|
|
||||||
[**.{cc,h,xml}]
|
|
||||||
indent_style = tab
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
+55
-82
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright 2013 Free Software Foundation, Inc.
|
# This file is a part of gr-ieee802-11
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -17,96 +17,86 @@
|
|||||||
########################################################################
|
########################################################################
|
||||||
# Project setup
|
# Project setup
|
||||||
########################################################################
|
########################################################################
|
||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 3.8)
|
||||||
project(gr-ieee802-11 CXX C)
|
project(gr-ieee802-11 CXX C)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
#select the release build type by default to get optimization flags
|
# Install to PyBOMBS target prefix if defined
|
||||||
|
if(DEFINED ENV{PYBOMBS_PREFIX})
|
||||||
|
set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
|
||||||
|
message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Select the release build type by default to get optimization flags
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE "Release")
|
set(CMAKE_BUILD_TYPE "Release")
|
||||||
message(STATUS "Build type not specified: defaulting to release.")
|
message(STATUS "Build type not specified: defaulting to release.")
|
||||||
endif(NOT CMAKE_BUILD_TYPE)
|
endif(NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
|
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
|
||||||
|
|
||||||
|
# Make sure our local CMake Modules path comes first
|
||||||
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
|
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
|
||||||
|
|
||||||
|
# Set the version information here
|
||||||
|
set(VERSION_MAJOR 1)
|
||||||
|
set(VERSION_API 1)
|
||||||
|
set(VERSION_ABI 0)
|
||||||
|
set(VERSION_PATCH git)
|
||||||
|
|
||||||
|
cmake_policy(SET CMP0011 NEW)
|
||||||
|
|
||||||
|
# Enable generation of compile_commands.json for code completion engines
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Compiler specific setup
|
# Compiler specific setup
|
||||||
########################################################################
|
########################################################################
|
||||||
if(NOT WIN32)
|
if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
|
||||||
|
CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
AND NOT WIN32)
|
||||||
#http://gcc.gnu.org/wiki/Visibility
|
#http://gcc.gnu.org/wiki/Visibility
|
||||||
add_definitions(-fvisibility=hidden)
|
add_definitions(-fvisibility=hidden)
|
||||||
add_definitions(-std=c++0x)
|
|
||||||
add_definitions(-msse2)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
########################################################################
|
IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
# Find boost
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
########################################################################
|
ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
if(UNIX AND EXISTS "/usr/lib64")
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
|
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
endif(UNIX AND EXISTS "/usr/lib64")
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
set(Boost_ADDITIONAL_VERSIONS
|
ELSE()
|
||||||
"1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
|
message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
|
||||||
"1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
|
ENDIF()
|
||||||
"1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
|
|
||||||
"1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
|
|
||||||
"1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
|
|
||||||
"1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
|
|
||||||
"1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
|
|
||||||
)
|
|
||||||
find_package(Boost "1.35" COMPONENTS filesystem system)
|
|
||||||
|
|
||||||
if(NOT Boost_FOUND)
|
IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
message(FATAL_ERROR "Boost required to compile ieee802-11")
|
SET(CMAKE_C_STANDARD 11)
|
||||||
endif()
|
ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
|
SET(CMAKE_C_STANDARD 11)
|
||||||
|
ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
SET(CMAKE_C_STANDARD 11)
|
||||||
|
ELSE()
|
||||||
|
message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Install directories
|
# Install directories
|
||||||
########################################################################
|
########################################################################
|
||||||
|
find_package(Gnuradio "3.8" REQUIRED COMPONENTS filter fft digital analog blocks)
|
||||||
|
include(GrVersion)
|
||||||
|
|
||||||
include(GrPlatform) #define LIB_SUFFIX
|
include(GrPlatform) #define LIB_SUFFIX
|
||||||
set(GR_RUNTIME_DIR bin)
|
|
||||||
set(GR_LIBRARY_DIR lib${LIB_SUFFIX})
|
if(NOT CMAKE_MODULES_DIR)
|
||||||
set(GR_INCLUDE_DIR include/ieee802-11)
|
set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
|
||||||
set(GR_DATA_DIR share)
|
endif(NOT CMAKE_MODULES_DIR)
|
||||||
|
|
||||||
|
set(GR_INCLUDE_DIR include/ieee802_11)
|
||||||
|
set(GR_CMAKE_DIR ${CMAKE_MODULES_DIR}/ieee802_11)
|
||||||
set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
|
set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
|
||||||
set(GR_DOC_DIR ${GR_DATA_DIR}/doc)
|
|
||||||
set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
|
set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
|
||||||
set(GR_CONF_DIR etc)
|
|
||||||
set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
|
set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
|
||||||
set(GR_LIBEXEC_DIR libexec)
|
|
||||||
set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
|
set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
|
||||||
set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Find gnuradio build dependencies
|
|
||||||
########################################################################
|
|
||||||
set(GR_REQUIRED_COMPONENTS RUNTIME FILTER FFT PMT DIGITAL)
|
|
||||||
|
|
||||||
find_package(Gnuradio)
|
|
||||||
if(NOT GNURADIO_RUNTIME_FOUND)
|
|
||||||
message(FATAL_ERROR "GNU Radio required to compile gr-ieee802-11")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(CppUnit)
|
|
||||||
if(NOT CPPUNIT_FOUND)
|
|
||||||
message(FATAL_ERROR "CppUnit required to compile gr-ieee802-11")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(Log4cpp)
|
|
||||||
if (LOG4CPP_FOUND)
|
|
||||||
message(STATUS "Found LOG4CPP: ${LOG4CPP_LIBRARIES}")
|
|
||||||
add_definitions("-DGR_IEEE80211_LOG4CPP")
|
|
||||||
else ()
|
|
||||||
message(STATUS "LOG4CPP not found (not required).")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
find_package(SWIG)
|
|
||||||
if(NOT SWIG_FOUND)
|
|
||||||
message(FATAL_ERROR "SWIG required to compile gr-ieee802-11")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(Doxygen)
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# On Apple only, set install name and use rpath correctly, if not already set
|
# On Apple only, set install name and use rpath correctly, if not already set
|
||||||
########################################################################
|
########################################################################
|
||||||
@@ -117,7 +107,7 @@ if(APPLE)
|
|||||||
PATH "Library Install Name Destination Directory" FORCE)
|
PATH "Library Install Name Destination Directory" FORCE)
|
||||||
endif(NOT CMAKE_INSTALL_NAME_DIR)
|
endif(NOT CMAKE_INSTALL_NAME_DIR)
|
||||||
if(NOT CMAKE_INSTALL_RPATH)
|
if(NOT CMAKE_INSTALL_RPATH)
|
||||||
set(cmakE_INSTALL_RPATH
|
set(CMAKE_INSTALL_RPATH
|
||||||
${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
|
${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
|
||||||
PATH "Library Install RPath" FORCE)
|
PATH "Library Install RPath" FORCE)
|
||||||
endif(NOT CMAKE_INSTALL_RPATH)
|
endif(NOT CMAKE_INSTALL_RPATH)
|
||||||
@@ -127,24 +117,6 @@ if(APPLE)
|
|||||||
endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
|
endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
|
||||||
endif(APPLE)
|
endif(APPLE)
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Setup the include and linker paths
|
|
||||||
########################################################################
|
|
||||||
include_directories(
|
|
||||||
${CMAKE_SOURCE_DIR}/include
|
|
||||||
${CMAKE_SOURCE_DIR}/lib
|
|
||||||
${CMAKE_BINARY_DIR}/include
|
|
||||||
${Boost_INCLUDE_DIRS}
|
|
||||||
${CPPUNIT_INCLUDE_DIRS}
|
|
||||||
${GNURADIO_RUNTIME_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
link_directories(
|
|
||||||
${Boost_LIBRARY_DIRS}
|
|
||||||
${CPPUNIT_LIBRARY_DIRS}
|
|
||||||
${GNURADIO_RUNTIME_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Create uninstall target
|
# Create uninstall target
|
||||||
########################################################################
|
########################################################################
|
||||||
@@ -157,10 +129,11 @@ add_custom_target(uninstall
|
|||||||
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
|
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Add subdirectories
|
# Add subdirectories
|
||||||
########################################################################
|
########################################################################
|
||||||
add_subdirectory(include/ieee802-11)
|
add_subdirectory(include/ieee802_11)
|
||||||
add_subdirectory(lib)
|
add_subdirectory(lib)
|
||||||
add_subdirectory(swig)
|
add_subdirectory(swig)
|
||||||
add_subdirectory(python)
|
add_subdirectory(python)
|
||||||
|
|||||||
+7
-8
@@ -1,17 +1,16 @@
|
|||||||
title: gr-ieee802-11
|
title: gr-ieee802-11
|
||||||
author:
|
brief: IEEE 802.11 a/g/p Transceiver
|
||||||
- Bastian Bloessl <bloessl@ccs-labs.org>
|
|
||||||
copyright_owner:
|
|
||||||
- Bastian Bloessl
|
|
||||||
dependencies:
|
|
||||||
- gnuradio (>= 3.7.4)
|
|
||||||
repo: https://github.com/bastibl/gr-ieee802-11.git
|
|
||||||
tags:
|
tags:
|
||||||
- IEEE 802.11
|
- IEEE 802.11
|
||||||
- WiFi
|
- WiFi
|
||||||
- OFDM
|
- OFDM
|
||||||
|
author:
|
||||||
|
- Bastian Bloessl <bloessl@ccs-labs.org>
|
||||||
|
copyright_owner:
|
||||||
|
- Bastian Bloessl
|
||||||
|
repo: https://github.com/bastibl/gr-ieee802-11.git
|
||||||
website: http://www.ccs-labs.org/projects/wime/
|
website: http://www.ccs-labs.org/projects/wime/
|
||||||
brief: IEEE 802.11 a/g/p Transceiver
|
|
||||||
icon: http://www.ccs-labs.org/projects/wime/wime.png
|
icon: http://www.ccs-labs.org/projects/wime/wime.png
|
||||||
|
gr_supported_version: v3.7, v3.8, v3.9
|
||||||
---
|
---
|
||||||
This an IEEE 802.11 a/g/p transceiver for GNU Radio v3.7. Over the air, I tested it with the Ettus USRP N210 with XCVR2450 and CBX daughterboards. For interoperability tests I use mainly an Atheros (ath5k) WiFi card. The code can also be used for packet error rate simulations.
|
This an IEEE 802.11 a/g/p transceiver for GNU Radio v3.7. Over the air, I tested it with the Ettus USRP N210 with XCVR2450 and CBX daughterboards. For interoperability tests I use mainly an Atheros (ath5k) WiFi card. The code can also be used for packet error rate simulations.
|
||||||
|
|||||||
@@ -5,14 +5,23 @@ with Ettus N210s and B210s. Interoperability was tested with many off-the-shelf
|
|||||||
WiFi cards and IEEE 802.11p prototypes. The code can also be used in
|
WiFi cards and IEEE 802.11p prototypes. The code can also be used in
|
||||||
simulations.
|
simulations.
|
||||||
|
|
||||||
|
# Table of Contents
|
||||||
|
1. [Development](#development)
|
||||||
|
|
||||||
|
1. [Installation](#installation)
|
||||||
|
|
||||||
|
1. [Usage](#usage)
|
||||||
|
|
||||||
|
1. [Troubleshooting](#troubleshooting)
|
||||||
|
|
||||||
|
1. [Further information](#further-information)
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
Like GNU Radio, this module uses *master* and *maint* branches for development.
|
Like GNU Radio, this module uses *maint* branches for development.
|
||||||
These branches are supposed to be used with the corresponding GNU Radio
|
These branches are supposed to be used with the corresponding GNU Radio
|
||||||
branches. This means: the *maint-3.7* branch is compatible with GNU Radio 3.7,
|
branches. This means: the *maint-3.7* branch is compatible with GNU Radio 3.7,
|
||||||
*maint-3.8* is compatible with GNU Radio 3.8, and *master* is compatible with
|
*maint-3.8* is compatible with GNU Radio 3.8, etc.
|
||||||
GNU Radio master, which tracks the development towards GNU Radio 3.9.
|
|
||||||
|
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
@@ -37,7 +46,7 @@ needed. For example the Wireshark connector. You can find these blocks at
|
|||||||
[https://github.com/bastibl/gr-foo](https://github.com/bastibl/gr-foo). They are
|
[https://github.com/bastibl/gr-foo](https://github.com/bastibl/gr-foo). They are
|
||||||
installed with the typical command sequence:
|
installed with the typical command sequence:
|
||||||
|
|
||||||
git clone https://github.com/bastibl/gr-foo.git
|
git clone https://github.com/bastibl/gr-foo
|
||||||
cd gr-foo
|
cd gr-foo
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
@@ -51,7 +60,7 @@ installed with the typical command sequence:
|
|||||||
|
|
||||||
To actually install the blocks do
|
To actually install the blocks do
|
||||||
|
|
||||||
git clone git://github.com/bastibl/gr-ieee802-11.git
|
git clone https://github.com/bastibl/gr-ieee802-11
|
||||||
cd gr-ieee802-11
|
cd gr-ieee802-11
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
@@ -145,7 +154,7 @@ The loopback flow graph should give you an idea of how simulations can be
|
|||||||
conducted. To ease use, most blocks have debugging and logging capabilities that
|
conducted. To ease use, most blocks have debugging and logging capabilities that
|
||||||
can generate traces of the simulation. You can read about the logging feature
|
can generate traces of the simulation. You can read about the logging feature
|
||||||
and how to use it on the [GNU Radio
|
and how to use it on the [GNU Radio
|
||||||
Wiki](http://gnuradio.org/doc/doxygen/page_logger.html).
|
Wiki](https://wiki.gnuradio.org/index.php/Logging).
|
||||||
|
|
||||||
|
|
||||||
## Unidirectional communication
|
## Unidirectional communication
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
# the new option.
|
# the new option.
|
||||||
# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
|
# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
|
||||||
# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
|
# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
|
||||||
# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
|
# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Copyright 2010 Alexander Neundorf <neundorf@kde.org>
|
# Copyright 2010 Alexander Neundorf <neundorf@kde.org>
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
|
|
||||||
# Modified to use pkg config and use standard var names
|
|
||||||
|
|
||||||
#
|
|
||||||
# Find the CppUnit includes and library
|
|
||||||
#
|
|
||||||
# This module defines
|
|
||||||
# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
|
|
||||||
# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
|
|
||||||
# CPPUNIT_FOUND, If false, do not try to use CppUnit.
|
|
||||||
|
|
||||||
INCLUDE(FindPkgConfig)
|
|
||||||
PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
|
|
||||||
|
|
||||||
FIND_PATH(CPPUNIT_INCLUDE_DIRS
|
|
||||||
NAMES cppunit/TestCase.h
|
|
||||||
HINTS ${PC_CPPUNIT_INCLUDE_DIR}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/include
|
|
||||||
PATHS
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(CPPUNIT_LIBRARIES
|
|
||||||
NAMES cppunit
|
|
||||||
HINTS ${PC_CPPUNIT_LIBDIR}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib64
|
|
||||||
PATHS
|
|
||||||
${CPPUNIT_INCLUDE_DIRS}/../lib
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
)
|
|
||||||
|
|
||||||
LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
|
|
||||||
|
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
|
|
||||||
MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
INCLUDE(FindPkgConfig)
|
|
||||||
PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
|
|
||||||
|
|
||||||
if(PC_GNURADIO_RUNTIME_FOUND)
|
|
||||||
# look for include files
|
|
||||||
FIND_PATH(
|
|
||||||
GNURADIO_RUNTIME_INCLUDE_DIRS
|
|
||||||
NAMES gnuradio/top_block.h
|
|
||||||
HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
|
|
||||||
${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/include
|
|
||||||
PATHS /usr/local/include
|
|
||||||
/usr/include
|
|
||||||
)
|
|
||||||
|
|
||||||
# look for libs
|
|
||||||
FIND_LIBRARY(
|
|
||||||
GNURADIO_RUNTIME_LIBRARIES
|
|
||||||
NAMES gnuradio-runtime
|
|
||||||
HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
|
|
||||||
${PC_GNURADIO_RUNTIME_LIBDIR}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib/
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib64/
|
|
||||||
PATHS /usr/local/lib
|
|
||||||
/usr/local/lib64
|
|
||||||
/usr/lib
|
|
||||||
/usr/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
|
|
||||||
endif(PC_GNURADIO_RUNTIME_FOUND)
|
|
||||||
|
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
|
||||||
# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
|
|
||||||
MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
# - Find Log4cpp
|
|
||||||
# Find the native LOG4CPP includes and library
|
|
||||||
#
|
|
||||||
# LOG4CPP_INCLUDE_DIR - where to find LOG4CPP.h, etc.
|
|
||||||
# LOG4CPP_LIBRARIES - List of libraries when using LOG4CPP.
|
|
||||||
# LOG4CPP_FOUND - True if LOG4CPP found.
|
|
||||||
|
|
||||||
|
|
||||||
if (LOG4CPP_INCLUDE_DIR)
|
|
||||||
# Already in cache, be silent
|
|
||||||
set(LOG4CPP_FIND_QUIETLY TRUE)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
find_path(LOG4CPP_INCLUDE_DIR log4cpp/Category.hh
|
|
||||||
/opt/local/include
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
)
|
|
||||||
|
|
||||||
set(LOG4CPP_NAMES log4cpp)
|
|
||||||
find_library(LOG4CPP_LIBRARY
|
|
||||||
NAMES ${LOG4CPP_NAMES}
|
|
||||||
PATHS /usr/lib /usr/local/lib /opt/local/lib
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if (LOG4CPP_INCLUDE_DIR AND LOG4CPP_LIBRARY)
|
|
||||||
set(LOG4CPP_FOUND TRUE)
|
|
||||||
set(LOG4CPP_LIBRARIES ${LOG4CPP_LIBRARY} CACHE INTERNAL "" FORCE)
|
|
||||||
set(LOG4CPP_INCLUDE_DIRS ${LOG4CPP_INCLUDE_DIR} CACHE INTERNAL "" FORCE)
|
|
||||||
else ()
|
|
||||||
set(LOG4CPP_FOUND FALSE CACHE INTERNAL "" FORCE)
|
|
||||||
set(LOG4CPP_LIBRARY "" CACHE INTERNAL "" FORCE)
|
|
||||||
set(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
|
|
||||||
set(LOG4CPP_INCLUDE_DIR "" CACHE INTERNAL "" FORCE)
|
|
||||||
set(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (LOG4CPP_FOUND)
|
|
||||||
if (NOT LOG4CPP_FIND_QUIETLY)
|
|
||||||
message(STATUS "Found LOG4CPP: ${LOG4CPP_LIBRARIES}")
|
|
||||||
endif ()
|
|
||||||
else ()
|
|
||||||
if (LOG4CPP_FIND_REQUIRED)
|
|
||||||
message(STATUS "Looked for LOG4CPP libraries named ${LOG4CPPS_NAMES}.")
|
|
||||||
message(FATAL_ERROR "Could NOT find LOG4CPP library")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
mark_as_advanced(
|
|
||||||
LOG4CPP_LIBRARIES
|
|
||||||
LOG4CPP_INCLUDE_DIRS
|
|
||||||
)
|
|
||||||
@@ -1,114 +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.
|
|
||||||
|
|
||||||
if(DEFINED __INCLUDED_GR_COMPONENT_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_COMPONENT_CMAKE TRUE)
|
|
||||||
|
|
||||||
set(_gr_enabled_components "" CACHE INTERNAL "" FORCE)
|
|
||||||
set(_gr_disabled_components "" CACHE INTERNAL "" FORCE)
|
|
||||||
|
|
||||||
if(NOT DEFINED ENABLE_DEFAULT)
|
|
||||||
set(ENABLE_DEFAULT ON)
|
|
||||||
message(STATUS "")
|
|
||||||
message(STATUS "The build system will automatically enable all components.")
|
|
||||||
message(STATUS "Use -DENABLE_DEFAULT=OFF to disable components by default.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Register a component into the system
|
|
||||||
# - name: canonical component name
|
|
||||||
# - var: variable for enabled status
|
|
||||||
# - argn: list of dependencies
|
|
||||||
########################################################################
|
|
||||||
function(GR_REGISTER_COMPONENT name var)
|
|
||||||
include(CMakeDependentOption)
|
|
||||||
message(STATUS "")
|
|
||||||
message(STATUS "Configuring ${name} support...")
|
|
||||||
foreach(dep ${ARGN})
|
|
||||||
message(STATUS " Dependency ${dep} = ${${dep}}")
|
|
||||||
endforeach(dep)
|
|
||||||
|
|
||||||
#if the user set the var to force on, we note this
|
|
||||||
if("${${var}}" STREQUAL "ON")
|
|
||||||
set(var_force TRUE)
|
|
||||||
else()
|
|
||||||
set(var_force FALSE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#rewrite the dependency list so that deps that are also components use the cached version
|
|
||||||
unset(comp_deps)
|
|
||||||
foreach(dep ${ARGN})
|
|
||||||
list(FIND _gr_enabled_components ${dep} dep_enb_index)
|
|
||||||
list(FIND _gr_disabled_components ${dep} dep_dis_index)
|
|
||||||
if (${dep_enb_index} EQUAL -1 AND ${dep_dis_index} EQUAL -1)
|
|
||||||
list(APPEND comp_deps ${dep})
|
|
||||||
else()
|
|
||||||
list(APPEND comp_deps ${dep}_cached) #is a component, use cached version
|
|
||||||
endif()
|
|
||||||
endforeach(dep)
|
|
||||||
|
|
||||||
#setup the dependent option for this component
|
|
||||||
CMAKE_DEPENDENT_OPTION(${var} "enable ${name} support" ${ENABLE_DEFAULT} "${comp_deps}" OFF)
|
|
||||||
set(${var} "${${var}}" PARENT_SCOPE)
|
|
||||||
set(${var}_cached "${${var}}" CACHE INTERNAL "" FORCE)
|
|
||||||
|
|
||||||
#force was specified, but the dependencies were not met
|
|
||||||
if(NOT ${var} AND var_force)
|
|
||||||
message(FATAL_ERROR "user force-enabled ${name} but configuration checked failed")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#append the component into one of the lists
|
|
||||||
if(${var})
|
|
||||||
message(STATUS " Enabling ${name} support.")
|
|
||||||
list(APPEND _gr_enabled_components ${name})
|
|
||||||
else(${var})
|
|
||||||
message(STATUS " Disabling ${name} support.")
|
|
||||||
list(APPEND _gr_disabled_components ${name})
|
|
||||||
endif(${var})
|
|
||||||
message(STATUS " Override with -D${var}=ON/OFF")
|
|
||||||
|
|
||||||
#make components lists into global variables
|
|
||||||
set(_gr_enabled_components ${_gr_enabled_components} CACHE INTERNAL "" FORCE)
|
|
||||||
set(_gr_disabled_components ${_gr_disabled_components} CACHE INTERNAL "" FORCE)
|
|
||||||
endfunction(GR_REGISTER_COMPONENT)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Print the registered component summary
|
|
||||||
########################################################################
|
|
||||||
function(GR_PRINT_COMPONENT_SUMMARY)
|
|
||||||
message(STATUS "")
|
|
||||||
message(STATUS "######################################################")
|
|
||||||
message(STATUS "# gr-fosphor enabled components ")
|
|
||||||
message(STATUS "######################################################")
|
|
||||||
foreach(comp ${_gr_enabled_components})
|
|
||||||
message(STATUS " * ${comp}")
|
|
||||||
endforeach(comp)
|
|
||||||
|
|
||||||
message(STATUS "")
|
|
||||||
message(STATUS "######################################################")
|
|
||||||
message(STATUS "# gr-fosphor disabled components ")
|
|
||||||
message(STATUS "######################################################")
|
|
||||||
foreach(comp ${_gr_disabled_components})
|
|
||||||
message(STATUS " * ${comp}")
|
|
||||||
endforeach(comp)
|
|
||||||
|
|
||||||
message(STATUS "")
|
|
||||||
endfunction(GR_PRINT_COMPONENT_SUMMARY)
|
|
||||||
@@ -1,525 +0,0 @@
|
|||||||
# Copyright 2010-2011,2014 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(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Set global variable macro.
|
|
||||||
# Used for subdirectories to export settings.
|
|
||||||
# Example: include and library paths.
|
|
||||||
########################################################################
|
|
||||||
function(GR_SET_GLOBAL var)
|
|
||||||
set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
|
|
||||||
endfunction(GR_SET_GLOBAL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Set the pre-processor definition if the condition is true.
|
|
||||||
# - def the pre-processor definition to set and condition name
|
|
||||||
########################################################################
|
|
||||||
function(GR_ADD_COND_DEF def)
|
|
||||||
if(${def})
|
|
||||||
add_definitions(-D${def})
|
|
||||||
endif(${def})
|
|
||||||
endfunction(GR_ADD_COND_DEF)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Check for a header and conditionally set a compile define.
|
|
||||||
# - hdr the relative path to the header file
|
|
||||||
# - def the pre-processor definition to set
|
|
||||||
########################################################################
|
|
||||||
function(GR_CHECK_HDR_N_DEF hdr def)
|
|
||||||
include(CheckIncludeFileCXX)
|
|
||||||
CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
|
|
||||||
GR_ADD_COND_DEF(${def})
|
|
||||||
endfunction(GR_CHECK_HDR_N_DEF)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Include subdirectory macro.
|
|
||||||
# Sets the CMake directory variables,
|
|
||||||
# includes the subdirectory CMakeLists.txt,
|
|
||||||
# resets the CMake directory variables.
|
|
||||||
#
|
|
||||||
# This macro includes subdirectories rather than adding them
|
|
||||||
# so that the subdirectory can affect variables in the level above.
|
|
||||||
# This provides a work-around for the lack of convenience libraries.
|
|
||||||
# This way a subdirectory can append to the list of library sources.
|
|
||||||
########################################################################
|
|
||||||
macro(GR_INCLUDE_SUBDIRECTORY subdir)
|
|
||||||
#insert the current directories on the front of the list
|
|
||||||
list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
#set the current directories to the names of the subdirs
|
|
||||||
set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
|
|
||||||
set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
|
|
||||||
|
|
||||||
#include the subdirectory CMakeLists to run it
|
|
||||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
|
|
||||||
|
|
||||||
#reset the value of the current directories
|
|
||||||
list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
|
|
||||||
list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
|
|
||||||
|
|
||||||
#pop the subdir names of the front of the list
|
|
||||||
list(REMOVE_AT _cmake_source_dirs 0)
|
|
||||||
list(REMOVE_AT _cmake_binary_dirs 0)
|
|
||||||
endmacro(GR_INCLUDE_SUBDIRECTORY)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Check if a compiler flag works and conditionally set a compile define.
|
|
||||||
# - flag the compiler flag to check for
|
|
||||||
# - have the variable to set with result
|
|
||||||
########################################################################
|
|
||||||
macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
CHECK_CXX_COMPILER_FLAG(${flag} ${have})
|
|
||||||
if(${have})
|
|
||||||
if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
|
|
||||||
STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
|
|
||||||
if(${flag_dup} EQUAL -1)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
|
|
||||||
endif(${flag_dup} EQUAL -1)
|
|
||||||
endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
|
|
||||||
endif(${have})
|
|
||||||
endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Generates the .la libtool file
|
|
||||||
# This appears to generate libtool files that cannot be used by auto*.
|
|
||||||
# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
|
|
||||||
# Notice: there is not COMPONENT option, these will not get distributed.
|
|
||||||
########################################################################
|
|
||||||
function(GR_LIBTOOL)
|
|
||||||
if(NOT DEFINED GENERATE_LIBTOOL)
|
|
||||||
set(GENERATE_LIBTOOL OFF) #disabled by default
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(GENERATE_LIBTOOL)
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
|
|
||||||
|
|
||||||
find_program(LIBTOOL libtool)
|
|
||||||
if(LIBTOOL)
|
|
||||||
include(CMakeMacroLibtoolFile)
|
|
||||||
CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
|
|
||||||
endif(LIBTOOL)
|
|
||||||
endif(GENERATE_LIBTOOL)
|
|
||||||
|
|
||||||
endfunction(GR_LIBTOOL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Do standard things to the library target
|
|
||||||
# - set target properties
|
|
||||||
# - make install rules
|
|
||||||
# Also handle gnuradio custom naming conventions w/ extras mode.
|
|
||||||
########################################################################
|
|
||||||
function(GR_LIBRARY_FOO target)
|
|
||||||
#parse the arguments for component names
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
|
|
||||||
|
|
||||||
#set additional target properties
|
|
||||||
set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
|
|
||||||
|
|
||||||
#install the generated files like so...
|
|
||||||
install(TARGETS ${target}
|
|
||||||
LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
|
|
||||||
ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT} # .lib file
|
|
||||||
RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
|
|
||||||
)
|
|
||||||
|
|
||||||
#extras mode enabled automatically on linux
|
|
||||||
if(NOT DEFINED LIBRARY_EXTRAS)
|
|
||||||
set(LIBRARY_EXTRAS ${LINUX})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#special extras mode to enable alternative naming conventions
|
|
||||||
if(LIBRARY_EXTRAS)
|
|
||||||
|
|
||||||
#create .la file before changing props
|
|
||||||
GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
|
|
||||||
|
|
||||||
#give the library a special name with ultra-zero soversion
|
|
||||||
set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
|
|
||||||
set(target_name lib${target}-${LIBVER}.so.0.0.0)
|
|
||||||
|
|
||||||
#custom command to generate symlinks
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${target}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
|
|
||||||
)
|
|
||||||
|
|
||||||
#and install the extra symlinks
|
|
||||||
install(
|
|
||||||
FILES
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
|
|
||||||
DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
endif(LIBRARY_EXTRAS)
|
|
||||||
endfunction(GR_LIBRARY_FOO)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Create a dummy custom command that depends on other targets.
|
|
||||||
# Usage:
|
|
||||||
# GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
|
|
||||||
# ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
|
|
||||||
#
|
|
||||||
# Custom command cant depend on targets, but can depend on executables,
|
|
||||||
# and executables can depend on targets. So this is the process:
|
|
||||||
########################################################################
|
|
||||||
function(GR_GEN_TARGET_DEPS name var)
|
|
||||||
file(
|
|
||||||
WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
|
|
||||||
"int main(void){return 0;}\n"
|
|
||||||
)
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
|
|
||||||
)
|
|
||||||
add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
|
|
||||||
if(ARGN)
|
|
||||||
add_dependencies(${name} ${ARGN})
|
|
||||||
endif(ARGN)
|
|
||||||
|
|
||||||
if(CMAKE_CROSSCOMPILING)
|
|
||||||
set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
|
|
||||||
else()
|
|
||||||
set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction(GR_GEN_TARGET_DEPS)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Control use of gr_logger
|
|
||||||
# Usage:
|
|
||||||
# GR_LOGGING()
|
|
||||||
#
|
|
||||||
# Will set ENABLE_GR_LOG to 1 by default.
|
|
||||||
# Can manually set with -DENABLE_GR_LOG=0|1
|
|
||||||
########################################################################
|
|
||||||
function(GR_LOGGING)
|
|
||||||
find_package(Log4cpp)
|
|
||||||
|
|
||||||
OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
|
|
||||||
if(ENABLE_GR_LOG)
|
|
||||||
# If gr_logger is enabled, make it usable
|
|
||||||
add_definitions( -DENABLE_GR_LOG )
|
|
||||||
|
|
||||||
# also test LOG4CPP; if we have it, use this version of the logger
|
|
||||||
# otherwise, default to the stdout/stderr model.
|
|
||||||
if(LOG4CPP_FOUND)
|
|
||||||
SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
|
|
||||||
add_definitions( -DHAVE_LOG4CPP )
|
|
||||||
else(not LOG4CPP_FOUND)
|
|
||||||
SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
|
|
||||||
SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
|
|
||||||
SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
|
|
||||||
SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
|
|
||||||
endif(LOG4CPP_FOUND)
|
|
||||||
|
|
||||||
SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
|
|
||||||
|
|
||||||
else(ENABLE_GR_LOG)
|
|
||||||
SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
|
|
||||||
SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
|
|
||||||
SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
|
|
||||||
SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
|
|
||||||
endif(ENABLE_GR_LOG)
|
|
||||||
|
|
||||||
message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
|
|
||||||
message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
|
|
||||||
message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
|
|
||||||
|
|
||||||
endfunction(GR_LOGGING)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Run GRCC to compile .grc files into .py files.
|
|
||||||
#
|
|
||||||
# Usage: GRCC(filename, directory)
|
|
||||||
# - filenames: List of file name of .grc file
|
|
||||||
# - directory: directory of built .py file - usually in
|
|
||||||
# ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
# - Sets PYFILES: output converted GRC file names to Python files.
|
|
||||||
########################################################################
|
|
||||||
function(GRCC)
|
|
||||||
# Extract directory from list of args, remove it for the list of filenames.
|
|
||||||
list(GET ARGV -1 directory)
|
|
||||||
list(REMOVE_AT ARGV -1)
|
|
||||||
set(filenames ${ARGV})
|
|
||||||
file(MAKE_DIRECTORY ${directory})
|
|
||||||
|
|
||||||
SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
|
|
||||||
|
|
||||||
# GRCC uses some stuff in grc and gnuradio-runtime, so we force
|
|
||||||
# the known paths here
|
|
||||||
list(APPEND PYTHONPATHS
|
|
||||||
${CMAKE_SOURCE_DIR}
|
|
||||||
${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
|
|
||||||
${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
|
|
||||||
${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
|
|
||||||
)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
#SWIG generates the python library files into a subdirectory.
|
|
||||||
#Therefore, we must append this subdirectory into PYTHONPATH.
|
|
||||||
#Only do this for the python directories matching the following:
|
|
||||||
foreach(pydir ${PYTHONPATHS})
|
|
||||||
get_filename_component(name ${pydir} NAME)
|
|
||||||
if(name MATCHES "^(swig|lib|src)$")
|
|
||||||
list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
|
|
||||||
endif()
|
|
||||||
endforeach(pydir)
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
|
|
||||||
|
|
||||||
if(UNIX)
|
|
||||||
list(APPEND pypath "$PYTHONPATH")
|
|
||||||
string(REPLACE ";" ":" pypath "${pypath}")
|
|
||||||
set(ENV{PYTHONPATH} ${pypath})
|
|
||||||
endif(UNIX)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
list(APPEND pypath "%PYTHONPATH%")
|
|
||||||
string(REPLACE ";" "\\;" pypath "${pypath}")
|
|
||||||
#list(APPEND environs "PYTHONPATH=${pypath}")
|
|
||||||
set(ENV{PYTHONPATH} ${pypath})
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
foreach(f ${filenames})
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
|
|
||||||
)
|
|
||||||
string(REPLACE ".grc" ".py" pyfile "${f}")
|
|
||||||
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
|
|
||||||
list(APPEND pyfiles ${pyfile})
|
|
||||||
endforeach(f)
|
|
||||||
|
|
||||||
set(PYFILES ${pyfiles} PARENT_SCOPE)
|
|
||||||
endfunction(GRCC)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
|
|
||||||
# should be defined
|
|
||||||
########################################################################
|
|
||||||
macro(GR_CHECK_LINUX_SCHED_AVAIL)
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES -lpthread)
|
|
||||||
CHECK_CXX_SOURCE_COMPILES("
|
|
||||||
#include <pthread.h>
|
|
||||||
int main(){
|
|
||||||
pthread_t pthread;
|
|
||||||
pthread_setschedparam(pthread, 0, 0);
|
|
||||||
return 0;
|
|
||||||
} " HAVE_PTHREAD_SETSCHEDPARAM
|
|
||||||
)
|
|
||||||
GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
|
|
||||||
|
|
||||||
CHECK_CXX_SOURCE_COMPILES("
|
|
||||||
#include <sched.h>
|
|
||||||
int main(){
|
|
||||||
pid_t pid;
|
|
||||||
sched_setscheduler(pid, 0, 0);
|
|
||||||
return 0;
|
|
||||||
} " HAVE_SCHED_SETSCHEDULER
|
|
||||||
)
|
|
||||||
GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
|
|
||||||
endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Macros to generate source and header files from template
|
|
||||||
########################################################################
|
|
||||||
macro(GR_EXPAND_X_H component root)
|
|
||||||
|
|
||||||
include(GrPython)
|
|
||||||
|
|
||||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
"#!${PYTHON_EXECUTABLE}
|
|
||||||
|
|
||||||
import sys, os, re
|
|
||||||
sys.path.append('${GR_RUNTIME_PYTHONPATH}')
|
|
||||||
os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
|
|
||||||
os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
import build_utils
|
|
||||||
root, inp = sys.argv[1:3]
|
|
||||||
for sig in sys.argv[3:]:
|
|
||||||
name = re.sub ('X+', sig, root)
|
|
||||||
d = build_utils.standard_dict2(name, sig, '${component}')
|
|
||||||
build_utils.expand_template(d, inp)
|
|
||||||
")
|
|
||||||
|
|
||||||
#make a list of all the generated headers
|
|
||||||
unset(expanded_files_h)
|
|
||||||
foreach(sig ${ARGN})
|
|
||||||
string(REGEX REPLACE "X+" ${sig} name ${root})
|
|
||||||
list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
|
|
||||||
endforeach(sig)
|
|
||||||
unset(name)
|
|
||||||
|
|
||||||
#create a command to generate the headers
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_h}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}.h.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#install rules for the generated headers
|
|
||||||
list(APPEND generated_includes ${expanded_files_h})
|
|
||||||
|
|
||||||
endmacro(GR_EXPAND_X_H)
|
|
||||||
|
|
||||||
macro(GR_EXPAND_X_CC_H component root)
|
|
||||||
|
|
||||||
include(GrPython)
|
|
||||||
|
|
||||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
"#!${PYTHON_EXECUTABLE}
|
|
||||||
|
|
||||||
import sys, os, re
|
|
||||||
sys.path.append('${GR_RUNTIME_PYTHONPATH}')
|
|
||||||
os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
|
|
||||||
os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
import build_utils
|
|
||||||
root, inp = sys.argv[1:3]
|
|
||||||
for sig in sys.argv[3:]:
|
|
||||||
name = re.sub ('X+', sig, root)
|
|
||||||
d = build_utils.standard_impl_dict2(name, sig, '${component}')
|
|
||||||
build_utils.expand_template(d, inp)
|
|
||||||
")
|
|
||||||
|
|
||||||
#make a list of all the generated files
|
|
||||||
unset(expanded_files_cc)
|
|
||||||
unset(expanded_files_h)
|
|
||||||
foreach(sig ${ARGN})
|
|
||||||
string(REGEX REPLACE "X+" ${sig} name ${root})
|
|
||||||
list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
|
|
||||||
list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
|
|
||||||
endforeach(sig)
|
|
||||||
unset(name)
|
|
||||||
|
|
||||||
#create a command to generate the source files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_cc}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}.cc.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#create a command to generate the header files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_h}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}.h.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#make source files depends on headers to force generation
|
|
||||||
set_source_files_properties(${expanded_files_cc}
|
|
||||||
PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
|
|
||||||
)
|
|
||||||
|
|
||||||
#install rules for the generated files
|
|
||||||
list(APPEND generated_sources ${expanded_files_cc})
|
|
||||||
list(APPEND generated_headers ${expanded_files_h})
|
|
||||||
|
|
||||||
endmacro(GR_EXPAND_X_CC_H)
|
|
||||||
|
|
||||||
macro(GR_EXPAND_X_CC_H_IMPL component root)
|
|
||||||
|
|
||||||
include(GrPython)
|
|
||||||
|
|
||||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
"#!${PYTHON_EXECUTABLE}
|
|
||||||
|
|
||||||
import sys, os, re
|
|
||||||
sys.path.append('${GR_RUNTIME_PYTHONPATH}')
|
|
||||||
os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
|
|
||||||
os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
import build_utils
|
|
||||||
root, inp = sys.argv[1:3]
|
|
||||||
for sig in sys.argv[3:]:
|
|
||||||
name = re.sub ('X+', sig, root)
|
|
||||||
d = build_utils.standard_dict(name, sig, '${component}')
|
|
||||||
build_utils.expand_template(d, inp, '_impl')
|
|
||||||
")
|
|
||||||
|
|
||||||
#make a list of all the generated files
|
|
||||||
unset(expanded_files_cc_impl)
|
|
||||||
unset(expanded_files_h_impl)
|
|
||||||
unset(expanded_files_h)
|
|
||||||
foreach(sig ${ARGN})
|
|
||||||
string(REGEX REPLACE "X+" ${sig} name ${root})
|
|
||||||
list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
|
|
||||||
list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
|
|
||||||
list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
|
|
||||||
endforeach(sig)
|
|
||||||
unset(name)
|
|
||||||
|
|
||||||
#create a command to generate the _impl.cc files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_cc_impl}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}_impl.cc.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#create a command to generate the _impl.h files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_h_impl}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}_impl.h.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#make _impl.cc source files depend on _impl.h to force generation
|
|
||||||
set_source_files_properties(${expanded_files_cc_impl}
|
|
||||||
PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
|
|
||||||
)
|
|
||||||
|
|
||||||
#make _impl.h source files depend on headers to force generation
|
|
||||||
set_source_files_properties(${expanded_files_h_impl}
|
|
||||||
PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
|
|
||||||
)
|
|
||||||
|
|
||||||
#install rules for the generated files
|
|
||||||
list(APPEND generated_sources ${expanded_files_cc_impl})
|
|
||||||
list(APPEND generated_headers ${expanded_files_h_impl})
|
|
||||||
|
|
||||||
endmacro(GR_EXPAND_X_CC_H_IMPL)
|
|
||||||
@@ -1,54 +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.
|
|
||||||
|
|
||||||
if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Setup additional defines for OS types
|
|
||||||
########################################################################
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
||||||
set(LINUX TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
|
|
||||||
set(DEBIAN TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
|
|
||||||
set(REDHAT TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
|
|
||||||
set(SLACKWARE TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# when the library suffix should be 64 (applies to redhat linux family)
|
|
||||||
########################################################################
|
|
||||||
if (REDHAT OR SLACKWARE)
|
|
||||||
set(LIB64_CONVENTION TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
|
|
||||||
set(LIB_SUFFIX 64)
|
|
||||||
endif()
|
|
||||||
set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
|
|
||||||
@@ -1,241 +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.
|
|
||||||
|
|
||||||
if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Setup the python interpreter:
|
|
||||||
# This allows the user to specify a specific interpreter,
|
|
||||||
# or finds the interpreter via the built-in cmake module.
|
|
||||||
########################################################################
|
|
||||||
#this allows the user to override PYTHON_EXECUTABLE
|
|
||||||
if(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
set(PYTHONINTERP_FOUND TRUE)
|
|
||||||
|
|
||||||
#otherwise if not set, try to automatically find it
|
|
||||||
else(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
#use the built-in find script
|
|
||||||
find_package(PythonInterp 2)
|
|
||||||
|
|
||||||
#and if that fails use the find program routine
|
|
||||||
if(NOT PYTHONINTERP_FOUND)
|
|
||||||
find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
|
|
||||||
if(PYTHON_EXECUTABLE)
|
|
||||||
set(PYTHONINTERP_FOUND TRUE)
|
|
||||||
endif(PYTHON_EXECUTABLE)
|
|
||||||
endif(NOT PYTHONINTERP_FOUND)
|
|
||||||
|
|
||||||
endif(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
if (CMAKE_CROSSCOMPILING)
|
|
||||||
set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
|
|
||||||
else (CMAKE_CROSSCOMPILING)
|
|
||||||
set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
|
|
||||||
endif(CMAKE_CROSSCOMPILING)
|
|
||||||
|
|
||||||
#make the path to the executable appear in the cmake gui
|
|
||||||
set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
|
|
||||||
set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
|
|
||||||
|
|
||||||
#make sure we can use -B with python (introduced in 2.6)
|
|
||||||
if(PYTHON_EXECUTABLE)
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -B -c ""
|
|
||||||
OUTPUT_QUIET ERROR_QUIET
|
|
||||||
RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
|
|
||||||
)
|
|
||||||
if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
|
|
||||||
set(PYTHON_DASH_B "-B")
|
|
||||||
endif()
|
|
||||||
endif(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Check for the existence of a python module:
|
|
||||||
# - desc a string description of the check
|
|
||||||
# - mod the name of the module to import
|
|
||||||
# - cmd an additional command to run
|
|
||||||
# - have the result variable to set
|
|
||||||
########################################################################
|
|
||||||
macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
|
|
||||||
message(STATUS "")
|
|
||||||
message(STATUS "Python checking for ${desc}")
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -c "
|
|
||||||
#########################################
|
|
||||||
try:
|
|
||||||
import ${mod}
|
|
||||||
assert ${cmd}
|
|
||||||
except ImportError, AssertionError: exit(-1)
|
|
||||||
except: pass
|
|
||||||
#########################################"
|
|
||||||
RESULT_VARIABLE ${have}
|
|
||||||
)
|
|
||||||
if(${have} EQUAL 0)
|
|
||||||
message(STATUS "Python checking for ${desc} - found")
|
|
||||||
set(${have} TRUE)
|
|
||||||
else(${have} EQUAL 0)
|
|
||||||
message(STATUS "Python checking for ${desc} - not found")
|
|
||||||
set(${have} FALSE)
|
|
||||||
endif(${have} EQUAL 0)
|
|
||||||
endmacro(GR_PYTHON_CHECK_MODULE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Sets the python installation directory GR_PYTHON_DIR
|
|
||||||
########################################################################
|
|
||||||
if(NOT DEFINED GR_PYTHON_DIR)
|
|
||||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
|
|
||||||
from distutils import sysconfig
|
|
||||||
print sysconfig.get_python_lib(plat_specific=True, prefix='')
|
|
||||||
" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Create an always-built target with a unique name
|
|
||||||
# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
|
|
||||||
########################################################################
|
|
||||||
function(GR_UNIQUE_TARGET desc)
|
|
||||||
file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
|
|
||||||
unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
|
|
||||||
print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
|
|
||||||
OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
add_custom_target(${_target} ALL DEPENDS ${ARGN})
|
|
||||||
endfunction(GR_UNIQUE_TARGET)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install python sources (also builds and installs byte-compiled python)
|
|
||||||
########################################################################
|
|
||||||
function(GR_PYTHON_INSTALL)
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
|
|
||||||
|
|
||||||
####################################################################
|
|
||||||
if(GR_PYTHON_INSTALL_FILES)
|
|
||||||
####################################################################
|
|
||||||
install(${ARGN}) #installs regular python files
|
|
||||||
|
|
||||||
#create a list of all generated files
|
|
||||||
unset(pysrcfiles)
|
|
||||||
unset(pycfiles)
|
|
||||||
unset(pyofiles)
|
|
||||||
foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
|
|
||||||
get_filename_component(pyfile ${pyfile} ABSOLUTE)
|
|
||||||
list(APPEND pysrcfiles ${pyfile})
|
|
||||||
|
|
||||||
#determine if this file is in the source or binary directory
|
|
||||||
file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
|
|
||||||
string(LENGTH "${source_rel_path}" source_rel_path_len)
|
|
||||||
file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
|
|
||||||
string(LENGTH "${binary_rel_path}" binary_rel_path_len)
|
|
||||||
|
|
||||||
#and set the generated path appropriately
|
|
||||||
if(${source_rel_path_len} GREATER ${binary_rel_path_len})
|
|
||||||
set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
|
|
||||||
else()
|
|
||||||
set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
|
|
||||||
endif()
|
|
||||||
list(APPEND pycfiles ${pygenfile}c)
|
|
||||||
list(APPEND pyofiles ${pygenfile}o)
|
|
||||||
|
|
||||||
#ensure generation path exists
|
|
||||||
get_filename_component(pygen_path ${pygenfile} PATH)
|
|
||||||
file(MAKE_DIRECTORY ${pygen_path})
|
|
||||||
|
|
||||||
endforeach(pyfile)
|
|
||||||
|
|
||||||
#the command to generate the pyc files
|
|
||||||
add_custom_command(
|
|
||||||
DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
|
|
||||||
)
|
|
||||||
|
|
||||||
#the command to generate the pyo files
|
|
||||||
add_custom_command(
|
|
||||||
DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
|
|
||||||
)
|
|
||||||
|
|
||||||
#create install rule and add generated files to target list
|
|
||||||
set(python_install_gen_targets ${pycfiles} ${pyofiles})
|
|
||||||
install(FILES ${python_install_gen_targets}
|
|
||||||
DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
####################################################################
|
|
||||||
elseif(GR_PYTHON_INSTALL_PROGRAMS)
|
|
||||||
####################################################################
|
|
||||||
file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
|
|
||||||
|
|
||||||
if (CMAKE_CROSSCOMPILING)
|
|
||||||
set(pyexe_native "/usr/bin/env python")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
|
|
||||||
get_filename_component(pyfile_name ${pyfile} NAME)
|
|
||||||
get_filename_component(pyfile ${pyfile} ABSOLUTE)
|
|
||||||
string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
|
|
||||||
list(APPEND python_install_gen_targets ${pyexefile})
|
|
||||||
|
|
||||||
get_filename_component(pyexefile_path ${pyexefile} PATH)
|
|
||||||
file(MAKE_DIRECTORY ${pyexefile_path})
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${pyexefile} DEPENDS ${pyfile}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
|
||||||
"import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
|
|
||||||
COMMENT "Shebangin ${pyfile_name}"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
|
|
||||||
#on windows, python files need an extension to execute
|
|
||||||
get_filename_component(pyfile_ext ${pyfile} EXT)
|
|
||||||
if(WIN32 AND NOT pyfile_ext)
|
|
||||||
set(pyfile_name "${pyfile_name}.py")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
|
|
||||||
DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
endforeach(pyfile)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
|
|
||||||
|
|
||||||
endfunction(GR_PYTHON_INSTALL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Write the python helper script that generates byte code files
|
|
||||||
########################################################################
|
|
||||||
file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
|
|
||||||
import sys, py_compile
|
|
||||||
files = sys.argv[1:]
|
|
||||||
srcs, gens = files[:len(files)/2], files[len(files)/2:]
|
|
||||||
for src, gen in zip(srcs, gens):
|
|
||||||
py_compile.compile(file=src, cfile=gen, doraise=True)
|
|
||||||
")
|
|
||||||
@@ -1,251 +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.
|
|
||||||
|
|
||||||
if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_SWIG_CMAKE TRUE)
|
|
||||||
|
|
||||||
include(GrPython)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Builds a swig documentation file to be generated into python docstrings
|
|
||||||
# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
|
|
||||||
#
|
|
||||||
# Set the following variable to specify extra dependent targets:
|
|
||||||
# - GR_SWIG_DOCS_SOURCE_DEPS
|
|
||||||
# - GR_SWIG_DOCS_TARGET_DEPS
|
|
||||||
########################################################################
|
|
||||||
function(GR_SWIG_MAKE_DOCS output_file)
|
|
||||||
if(ENABLE_DOXYGEN)
|
|
||||||
|
|
||||||
#setup the input files variable list, quote formated
|
|
||||||
set(input_files)
|
|
||||||
unset(INPUT_PATHS)
|
|
||||||
foreach(input_path ${ARGN})
|
|
||||||
if(IS_DIRECTORY ${input_path}) #when input path is a directory
|
|
||||||
file(GLOB input_path_h_files ${input_path}/*.h)
|
|
||||||
else() #otherwise its just a file, no glob
|
|
||||||
set(input_path_h_files ${input_path})
|
|
||||||
endif()
|
|
||||||
list(APPEND input_files ${input_path_h_files})
|
|
||||||
set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
|
|
||||||
endforeach(input_path)
|
|
||||||
|
|
||||||
#determine the output directory
|
|
||||||
get_filename_component(name ${output_file} NAME_WE)
|
|
||||||
get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
|
|
||||||
set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
|
|
||||||
make_directory(${OUTPUT_DIRECTORY})
|
|
||||||
|
|
||||||
#generate the Doxyfile used by doxygen
|
|
||||||
configure_file(
|
|
||||||
${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
|
|
||||||
${OUTPUT_DIRECTORY}/Doxyfile
|
|
||||||
@ONLY)
|
|
||||||
|
|
||||||
#Create a dummy custom command that depends on other targets
|
|
||||||
include(GrMiscUtils)
|
|
||||||
GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
|
|
||||||
|
|
||||||
#call doxygen on the Doxyfile + input headers
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
|
|
||||||
DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
|
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
|
|
||||||
COMMENT "Generating doxygen xml for ${name} docs"
|
|
||||||
)
|
|
||||||
|
|
||||||
#call the swig_doc script on the xml files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${output_file}
|
|
||||||
DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
|
|
||||||
${OUTPUT_DIRECTORY}/xml
|
|
||||||
${output_file}
|
|
||||||
COMMENT "Generating python docstrings for ${name}"
|
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
|
|
||||||
)
|
|
||||||
|
|
||||||
else(ENABLE_DOXYGEN)
|
|
||||||
file(WRITE ${output_file} "\n") #no doxygen -> empty file
|
|
||||||
endif(ENABLE_DOXYGEN)
|
|
||||||
endfunction(GR_SWIG_MAKE_DOCS)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Build a swig target for the common gnuradio use case. Usage:
|
|
||||||
# GR_SWIG_MAKE(target ifile ifile ifile...)
|
|
||||||
#
|
|
||||||
# Set the following variables before calling:
|
|
||||||
# - GR_SWIG_FLAGS
|
|
||||||
# - GR_SWIG_INCLUDE_DIRS
|
|
||||||
# - GR_SWIG_LIBRARIES
|
|
||||||
# - GR_SWIG_SOURCE_DEPS
|
|
||||||
# - GR_SWIG_TARGET_DEPS
|
|
||||||
# - GR_SWIG_DOC_FILE
|
|
||||||
# - GR_SWIG_DOC_DIRS
|
|
||||||
########################################################################
|
|
||||||
macro(GR_SWIG_MAKE name)
|
|
||||||
set(ifiles ${ARGN})
|
|
||||||
|
|
||||||
# Shimming this in here to take care of a SWIG bug with handling
|
|
||||||
# vector<size_t> and vector<unsigned int> (on 32-bit machines) and
|
|
||||||
# vector<long unsigned int> (on 64-bit machines). Use this to test
|
|
||||||
# the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
|
|
||||||
# or not if it's 64-bit. The logic in gr_type.i handles the rest.
|
|
||||||
INCLUDE(CheckTypeSize)
|
|
||||||
CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
|
|
||||||
CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
|
|
||||||
if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
|
|
||||||
list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
|
|
||||||
endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
|
|
||||||
|
|
||||||
#do swig doc generation if specified
|
|
||||||
if(GR_SWIG_DOC_FILE)
|
|
||||||
set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
|
|
||||||
list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
|
|
||||||
GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
|
|
||||||
add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
|
|
||||||
list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#append additional include directories
|
|
||||||
find_package(PythonLibs 2)
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
#prepend local swig directories
|
|
||||||
list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
#determine include dependencies for swig file
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE}
|
|
||||||
${CMAKE_BINARY_DIR}/get_swig_deps.py
|
|
||||||
"${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
#Create a dummy custom command that depends on other targets
|
|
||||||
include(GrMiscUtils)
|
|
||||||
GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
|
|
||||||
set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${tag_file}
|
|
||||||
DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
|
|
||||||
)
|
|
||||||
|
|
||||||
#append the specified include directories
|
|
||||||
include_directories(${GR_SWIG_INCLUDE_DIRS})
|
|
||||||
list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
|
|
||||||
|
|
||||||
#setup the swig flags with flags and include directories
|
|
||||||
set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
|
|
||||||
foreach(dir ${GR_SWIG_INCLUDE_DIRS})
|
|
||||||
list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
|
|
||||||
endforeach(dir)
|
|
||||||
|
|
||||||
#set the C++ property on the swig .i file so it builds
|
|
||||||
set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
|
|
||||||
|
|
||||||
#setup the actual swig library target to be built
|
|
||||||
include(UseSWIG)
|
|
||||||
SWIG_ADD_MODULE(${name} python ${ifiles})
|
|
||||||
SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES})
|
|
||||||
if(${name} STREQUAL "runtime_swig")
|
|
||||||
SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
|
|
||||||
endif(${name} STREQUAL "runtime_swig")
|
|
||||||
|
|
||||||
endmacro(GR_SWIG_MAKE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install swig targets generated by GR_SWIG_MAKE. Usage:
|
|
||||||
# GR_SWIG_INSTALL(
|
|
||||||
# TARGETS target target target...
|
|
||||||
# [DESTINATION destination]
|
|
||||||
# [COMPONENT component]
|
|
||||||
# )
|
|
||||||
########################################################################
|
|
||||||
macro(GR_SWIG_INSTALL)
|
|
||||||
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
|
|
||||||
|
|
||||||
foreach(name ${GR_SWIG_INSTALL_TARGETS})
|
|
||||||
install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
|
|
||||||
DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
include(GrPython)
|
|
||||||
GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
|
|
||||||
DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
GR_LIBTOOL(
|
|
||||||
TARGET ${SWIG_MODULE_${name}_REAL_NAME}
|
|
||||||
DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
|
|
||||||
)
|
|
||||||
|
|
||||||
endforeach(name)
|
|
||||||
|
|
||||||
endmacro(GR_SWIG_INSTALL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Generate a python file that can determine swig dependencies.
|
|
||||||
# Used by the make macro above to determine extra dependencies.
|
|
||||||
# When you build C++, CMake figures out the header dependencies.
|
|
||||||
# This code essentially performs that logic for swig includes.
|
|
||||||
########################################################################
|
|
||||||
file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
|
|
||||||
|
|
||||||
import os, sys, re
|
|
||||||
|
|
||||||
i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
|
|
||||||
h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
|
|
||||||
include_dirs = sys.argv[2].split(';')
|
|
||||||
|
|
||||||
def get_swig_incs(file_path):
|
|
||||||
if file_path.endswith('.i'): matcher = i_include_matcher
|
|
||||||
else: matcher = h_include_matcher
|
|
||||||
file_contents = open(file_path, 'r').read()
|
|
||||||
return matcher.findall(file_contents, re.MULTILINE)
|
|
||||||
|
|
||||||
def get_swig_deps(file_path, level):
|
|
||||||
deps = [file_path]
|
|
||||||
if level == 0: return deps
|
|
||||||
for keyword, inc_file in get_swig_incs(file_path):
|
|
||||||
for inc_dir in include_dirs:
|
|
||||||
inc_path = os.path.join(inc_dir, inc_file)
|
|
||||||
if not os.path.exists(inc_path): continue
|
|
||||||
deps.extend(get_swig_deps(inc_path, level-1))
|
|
||||||
break #found, we dont search in lower prio inc dirs
|
|
||||||
return deps
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
ifiles = sys.argv[1].split(';')
|
|
||||||
deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
|
|
||||||
#sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
|
|
||||||
print(';'.join(set(deps)))
|
|
||||||
")
|
|
||||||
@@ -1,143 +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.
|
|
||||||
|
|
||||||
if(DEFINED __INCLUDED_GR_TEST_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_TEST_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Add a unit test and setup the environment for a unit test.
|
|
||||||
# Takes the same arguments as the ADD_TEST function.
|
|
||||||
#
|
|
||||||
# Before calling set the following variables:
|
|
||||||
# GR_TEST_TARGET_DEPS - built targets for the library path
|
|
||||||
# GR_TEST_LIBRARY_DIRS - directories for the library path
|
|
||||||
# GR_TEST_PYTHON_DIRS - directories for the python path
|
|
||||||
# GR_TEST_ENVIRONS - other environment key/value pairs
|
|
||||||
########################################################################
|
|
||||||
function(GR_ADD_TEST test_name)
|
|
||||||
|
|
||||||
#Ensure that the build exe also appears in the PATH.
|
|
||||||
list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
|
|
||||||
|
|
||||||
#In the land of windows, all libraries must be in the PATH.
|
|
||||||
#Since the dependent libraries are not yet installed,
|
|
||||||
#we must manually set them in the PATH to run tests.
|
|
||||||
#The following appends the path of a target dependency.
|
|
||||||
foreach(target ${GR_TEST_TARGET_DEPS})
|
|
||||||
get_target_property(location ${target} LOCATION)
|
|
||||||
if(location)
|
|
||||||
get_filename_component(path ${location} PATH)
|
|
||||||
string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
|
|
||||||
list(APPEND GR_TEST_LIBRARY_DIRS ${path})
|
|
||||||
endif(location)
|
|
||||||
endforeach(target)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
#SWIG generates the python library files into a subdirectory.
|
|
||||||
#Therefore, we must append this subdirectory into PYTHONPATH.
|
|
||||||
#Only do this for the python directories matching the following:
|
|
||||||
foreach(pydir ${GR_TEST_PYTHON_DIRS})
|
|
||||||
get_filename_component(name ${pydir} NAME)
|
|
||||||
if(name MATCHES "^(swig|lib|src)$")
|
|
||||||
list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
|
|
||||||
endif()
|
|
||||||
endforeach(pydir)
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
|
|
||||||
file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
|
|
||||||
file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
|
|
||||||
|
|
||||||
set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
|
|
||||||
list(APPEND environs ${GR_TEST_ENVIRONS})
|
|
||||||
|
|
||||||
#http://www.cmake.org/pipermail/cmake/2009-May/029464.html
|
|
||||||
#Replaced this add test + set environs code with the shell script generation.
|
|
||||||
#Its nicer to be able to manually run the shell script to diagnose problems.
|
|
||||||
#ADD_TEST(${ARGV})
|
|
||||||
#SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
|
|
||||||
|
|
||||||
if(UNIX)
|
|
||||||
set(LD_PATH_VAR "LD_LIBRARY_PATH")
|
|
||||||
if(APPLE)
|
|
||||||
set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
|
|
||||||
list(APPEND libpath "$${LD_PATH_VAR}")
|
|
||||||
list(APPEND pypath "$PYTHONPATH")
|
|
||||||
|
|
||||||
#replace list separator with the path separator
|
|
||||||
string(REPLACE ";" ":" libpath "${libpath}")
|
|
||||||
string(REPLACE ";" ":" pypath "${pypath}")
|
|
||||||
list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
|
|
||||||
|
|
||||||
#generate a bat file that sets the environment and runs the test
|
|
||||||
if (CMAKE_CROSSCOMPILING)
|
|
||||||
set(SHELL "/bin/sh")
|
|
||||||
else(CMAKE_CROSSCOMPILING)
|
|
||||||
find_program(SHELL sh)
|
|
||||||
endif(CMAKE_CROSSCOMPILING)
|
|
||||||
set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
|
|
||||||
file(WRITE ${sh_file} "#!${SHELL}\n")
|
|
||||||
#each line sets an environment variable
|
|
||||||
foreach(environ ${environs})
|
|
||||||
file(APPEND ${sh_file} "export ${environ}\n")
|
|
||||||
endforeach(environ)
|
|
||||||
#load the command to run with its arguments
|
|
||||||
foreach(arg ${ARGN})
|
|
||||||
file(APPEND ${sh_file} "${arg} ")
|
|
||||||
endforeach(arg)
|
|
||||||
file(APPEND ${sh_file} "\n")
|
|
||||||
|
|
||||||
#make the shell file executable
|
|
||||||
execute_process(COMMAND chmod +x ${sh_file})
|
|
||||||
|
|
||||||
add_test(${test_name} ${SHELL} ${sh_file})
|
|
||||||
|
|
||||||
endif(UNIX)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
list(APPEND libpath ${DLL_PATHS} "%PATH%")
|
|
||||||
list(APPEND pypath "%PYTHONPATH%")
|
|
||||||
|
|
||||||
#replace list separator with the path separator (escaped)
|
|
||||||
string(REPLACE ";" "\\;" libpath "${libpath}")
|
|
||||||
string(REPLACE ";" "\\;" pypath "${pypath}")
|
|
||||||
list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
|
|
||||||
|
|
||||||
#generate a bat file that sets the environment and runs the test
|
|
||||||
set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
|
|
||||||
file(WRITE ${bat_file} "@echo off\n")
|
|
||||||
#each line sets an environment variable
|
|
||||||
foreach(environ ${environs})
|
|
||||||
file(APPEND ${bat_file} "SET ${environ}\n")
|
|
||||||
endforeach(environ)
|
|
||||||
#load the command to run with its arguments
|
|
||||||
foreach(arg ${ARGN})
|
|
||||||
file(APPEND ${bat_file} "${arg} ")
|
|
||||||
endforeach(arg)
|
|
||||||
file(APPEND ${bat_file} "\n")
|
|
||||||
|
|
||||||
add_test(${test_name} ${bat_file})
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
endfunction(GR_ADD_TEST)
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
# Copyright 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.
|
|
||||||
|
|
||||||
if(DEFINED __INCLUDED_GR_VERSION_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_VERSION_CMAKE TRUE)
|
|
||||||
|
|
||||||
#eventually, replace version.sh and fill in the variables below
|
|
||||||
set(MAJOR_VERSION ${VERSION_INFO_MAJOR_VERSION})
|
|
||||||
set(API_COMPAT ${VERSION_INFO_API_COMPAT})
|
|
||||||
set(MINOR_VERSION ${VERSION_INFO_MINOR_VERSION})
|
|
||||||
set(MAINT_VERSION ${VERSION_INFO_MAINT_VERSION})
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Extract the version string from git describe.
|
|
||||||
########################################################################
|
|
||||||
find_package(Git)
|
|
||||||
|
|
||||||
if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git)
|
|
||||||
message(STATUS "Extracting version information from git describe...")
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${GIT_EXECUTABLE} describe --always --abbrev=8 --long
|
|
||||||
OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
set(GIT_DESCRIBE "v${MAJOR_VERSION}.${API_COMPAT}.x-xxx-xunknown")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Use the logic below to set the version constants
|
|
||||||
########################################################################
|
|
||||||
if("${MINOR_VERSION}" STREQUAL "git")
|
|
||||||
# VERSION: 3.3git-xxx-gxxxxxxxx
|
|
||||||
# DOCVER: 3.3git
|
|
||||||
# LIBVER: 3.3git
|
|
||||||
set(VERSION "${GIT_DESCRIBE}")
|
|
||||||
set(DOCVER "${MAJOR_VERSION}.${API_COMPAT}${MINOR_VERSION}")
|
|
||||||
set(LIBVER "${MAJOR_VERSION}.${API_COMPAT}${MINOR_VERSION}")
|
|
||||||
set(RC_MINOR_VERSION "0")
|
|
||||||
set(RC_MAINT_VERSION "0")
|
|
||||||
elseif("${MAINT_VERSION}" STREQUAL "git")
|
|
||||||
# VERSION: 3.3.1git-xxx-gxxxxxxxx
|
|
||||||
# DOCVER: 3.3.1git
|
|
||||||
# LIBVER: 3.3.1git
|
|
||||||
set(VERSION "${GIT_DESCRIBE}")
|
|
||||||
set(DOCVER "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}${MAINT_VERSION}")
|
|
||||||
set(LIBVER "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}${MAINT_VERSION}")
|
|
||||||
math(EXPR RC_MINOR_VERSION "${MINOR_VERSION} - 1")
|
|
||||||
set(RC_MAINT_VERSION "0")
|
|
||||||
else()
|
|
||||||
# This is a numbered release.
|
|
||||||
# VERSION: 3.3.1{.x}
|
|
||||||
# DOCVER: 3.3.1{.x}
|
|
||||||
# LIBVER: 3.3.1{.x}
|
|
||||||
if("${MAINT_VERSION}" STREQUAL "0")
|
|
||||||
set(VERSION "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}")
|
|
||||||
else()
|
|
||||||
set(VERSION "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}.${MAINT_VERSION}")
|
|
||||||
endif()
|
|
||||||
set(DOCVER "${VERSION}")
|
|
||||||
set(LIBVER "${VERSION}")
|
|
||||||
set(RC_MINOR_VERSION ${MINOR_VERSION})
|
|
||||||
set(RC_MAINT_VERSION ${MAINT_VERSION})
|
|
||||||
endif()
|
|
||||||
@@ -1,304 +0,0 @@
|
|||||||
# - SWIG module for CMake
|
|
||||||
# Defines the following macros:
|
|
||||||
# SWIG_ADD_MODULE(name language [ files ])
|
|
||||||
# - Define swig module with given name and specified language
|
|
||||||
# SWIG_LINK_LIBRARIES(name [ libraries ])
|
|
||||||
# - Link libraries to swig module
|
|
||||||
# All other macros are for internal use only.
|
|
||||||
# To get the actual name of the swig module,
|
|
||||||
# use: ${SWIG_MODULE_${name}_REAL_NAME}.
|
|
||||||
# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
|
|
||||||
# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
|
|
||||||
# special flags to all swig calls.
|
|
||||||
# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
|
|
||||||
# where to write all the swig generated module (swig -outdir option)
|
|
||||||
# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
|
|
||||||
# to specify extra dependencies for the generated modules.
|
|
||||||
# If the source file generated by swig need some special flag you can use
|
|
||||||
# set_source_files_properties( ${swig_generated_file_fullname}
|
|
||||||
# PROPERTIES COMPILE_FLAGS "-bla")
|
|
||||||
|
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2004-2009 Kitware, Inc.
|
|
||||||
# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
|
|
||||||
set(SWIG_CXX_EXTENSION "cxx")
|
|
||||||
set(SWIG_EXTRA_LIBRARIES "")
|
|
||||||
|
|
||||||
set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
|
|
||||||
|
|
||||||
#
|
|
||||||
# For given swig module initialize variables associated with it
|
|
||||||
#
|
|
||||||
macro(SWIG_MODULE_INITIALIZE name language)
|
|
||||||
string(TOUPPER "${language}" swig_uppercase_language)
|
|
||||||
string(TOLOWER "${language}" swig_lowercase_language)
|
|
||||||
set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
|
|
||||||
set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
|
|
||||||
|
|
||||||
set(SWIG_MODULE_${name}_REAL_NAME "${name}")
|
|
||||||
if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
|
|
||||||
message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
|
|
||||||
elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
|
|
||||||
# when swig is used without the -interface it will produce in the module.py
|
|
||||||
# a 'import _modulename' statement, which implies having a corresponding
|
|
||||||
# _modulename.so (*NIX), _modulename.pyd (Win32).
|
|
||||||
set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
|
|
||||||
elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
|
|
||||||
set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
#
|
|
||||||
# For a given language, input file, and output file, determine extra files that
|
|
||||||
# will be generated. This is internal swig macro.
|
|
||||||
#
|
|
||||||
|
|
||||||
macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
|
|
||||||
set(${outfiles} "")
|
|
||||||
get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
|
|
||||||
${infile} SWIG_MODULE_NAME)
|
|
||||||
if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
|
|
||||||
get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
|
|
||||||
endif()
|
|
||||||
foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
|
|
||||||
set(${outfiles} ${${outfiles}}
|
|
||||||
"${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
#
|
|
||||||
# Take swig (*.i) file and add proper custom commands for it
|
|
||||||
#
|
|
||||||
macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
|
|
||||||
set(swig_full_infile ${infile})
|
|
||||||
get_filename_component(swig_source_file_path "${infile}" PATH)
|
|
||||||
get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
|
|
||||||
get_source_file_property(swig_source_file_generated ${infile} GENERATED)
|
|
||||||
get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
|
|
||||||
get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
|
|
||||||
if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
|
|
||||||
set(swig_source_file_flags "")
|
|
||||||
endif()
|
|
||||||
set(swig_source_file_fullname "${infile}")
|
|
||||||
if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
|
|
||||||
string(REGEX REPLACE
|
|
||||||
"^${CMAKE_CURRENT_SOURCE_DIR}" ""
|
|
||||||
swig_source_file_relative_path
|
|
||||||
"${swig_source_file_path}")
|
|
||||||
else()
|
|
||||||
if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
|
|
||||||
string(REGEX REPLACE
|
|
||||||
"^${CMAKE_CURRENT_BINARY_DIR}" ""
|
|
||||||
swig_source_file_relative_path
|
|
||||||
"${swig_source_file_path}")
|
|
||||||
set(swig_source_file_generated 1)
|
|
||||||
else()
|
|
||||||
set(swig_source_file_relative_path "${swig_source_file_path}")
|
|
||||||
if(swig_source_file_generated)
|
|
||||||
set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
|
|
||||||
else()
|
|
||||||
set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(swig_generated_file_fullname
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}")
|
|
||||||
if(swig_source_file_relative_path)
|
|
||||||
set(swig_generated_file_fullname
|
|
||||||
"${swig_generated_file_fullname}/${swig_source_file_relative_path}")
|
|
||||||
endif()
|
|
||||||
# If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
|
|
||||||
if(CMAKE_SWIG_OUTDIR)
|
|
||||||
set(swig_outdir ${CMAKE_SWIG_OUTDIR})
|
|
||||||
else()
|
|
||||||
set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
endif()
|
|
||||||
SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
|
|
||||||
swig_extra_generated_files
|
|
||||||
"${swig_outdir}"
|
|
||||||
"${infile}")
|
|
||||||
set(swig_generated_file_fullname
|
|
||||||
"${swig_generated_file_fullname}/${swig_source_file_name_we}")
|
|
||||||
# add the language into the name of the file (i.e. TCL_wrap)
|
|
||||||
# this allows for the same .i file to be wrapped into different languages
|
|
||||||
set(swig_generated_file_fullname
|
|
||||||
"${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
|
|
||||||
|
|
||||||
if(swig_source_file_cplusplus)
|
|
||||||
set(swig_generated_file_fullname
|
|
||||||
"${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
|
|
||||||
else()
|
|
||||||
set(swig_generated_file_fullname
|
|
||||||
"${swig_generated_file_fullname}.c")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Shut up some warnings from poor SWIG code generation that we
|
|
||||||
# can do nothing about, when this flag is available
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
|
|
||||||
if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
|
|
||||||
set_source_files_properties(${swig_generated_file_fullname}
|
|
||||||
PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
|
|
||||||
endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
|
|
||||||
|
|
||||||
get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
|
|
||||||
set(swig_include_dirs)
|
|
||||||
foreach(it ${cmake_include_directories})
|
|
||||||
set(swig_include_dirs ${swig_include_dirs} "-I${it}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(swig_special_flags)
|
|
||||||
# default is c, so add c++ flag if it is c++
|
|
||||||
if(swig_source_file_cplusplus)
|
|
||||||
set(swig_special_flags ${swig_special_flags} "-c++")
|
|
||||||
endif()
|
|
||||||
set(swig_extra_flags)
|
|
||||||
if(SWIG_MODULE_${name}_EXTRA_FLAGS)
|
|
||||||
set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# hack to work around CMake bug in add_custom_command with multiple OUTPUT files
|
|
||||||
|
|
||||||
file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
|
|
||||||
unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
|
|
||||||
print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
|
|
||||||
OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
file(
|
|
||||||
WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
|
|
||||||
"int main(void){return 0;}\n"
|
|
||||||
)
|
|
||||||
|
|
||||||
# create dummy dependencies
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
|
|
||||||
DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
|
|
||||||
COMMENT ""
|
|
||||||
)
|
|
||||||
|
|
||||||
# create the dummy target
|
|
||||||
add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
|
|
||||||
|
|
||||||
# add a custom command to the dummy target
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${_target}
|
|
||||||
# Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
|
|
||||||
COMMAND "${SWIG_EXECUTABLE}"
|
|
||||||
ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
|
|
||||||
${swig_source_file_flags}
|
|
||||||
${CMAKE_SWIG_FLAGS}
|
|
||||||
-outdir ${swig_outdir}
|
|
||||||
${swig_special_flags}
|
|
||||||
${swig_extra_flags}
|
|
||||||
${swig_include_dirs}
|
|
||||||
-o "${swig_generated_file_fullname}"
|
|
||||||
"${swig_source_file_fullname}"
|
|
||||||
COMMENT "Swig source"
|
|
||||||
)
|
|
||||||
|
|
||||||
#add dummy independent dependencies from the _target to each file
|
|
||||||
#that will be generated by the SWIG command above
|
|
||||||
|
|
||||||
set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
|
|
||||||
|
|
||||||
foreach(swig_gen_file ${${outfiles}})
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${swig_gen_file}
|
|
||||||
COMMAND ""
|
|
||||||
DEPENDS ${_target}
|
|
||||||
COMMENT ""
|
|
||||||
)
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set_source_files_properties(
|
|
||||||
${outfiles} PROPERTIES GENERATED 1
|
|
||||||
)
|
|
||||||
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
#
|
|
||||||
# Create Swig module
|
|
||||||
#
|
|
||||||
macro(SWIG_ADD_MODULE name language)
|
|
||||||
SWIG_MODULE_INITIALIZE(${name} ${language})
|
|
||||||
set(swig_dot_i_sources)
|
|
||||||
set(swig_other_sources)
|
|
||||||
foreach(it ${ARGN})
|
|
||||||
if(${it} MATCHES ".*\\.i$")
|
|
||||||
set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
|
|
||||||
else()
|
|
||||||
set(swig_other_sources ${swig_other_sources} "${it}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(swig_generated_sources)
|
|
||||||
foreach(it ${swig_dot_i_sources})
|
|
||||||
SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
|
|
||||||
set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
|
|
||||||
endforeach()
|
|
||||||
get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
|
|
||||||
set_directory_properties(PROPERTIES
|
|
||||||
ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
|
|
||||||
add_library(${SWIG_MODULE_${name}_REAL_NAME}
|
|
||||||
MODULE
|
|
||||||
${swig_generated_sources}
|
|
||||||
${swig_other_sources})
|
|
||||||
string(TOLOWER "${language}" swig_lowercase_language)
|
|
||||||
if ("${swig_lowercase_language}" STREQUAL "java")
|
|
||||||
if (APPLE)
|
|
||||||
# In java you want:
|
|
||||||
# System.loadLibrary("LIBRARY");
|
|
||||||
# then JNI will look for a library whose name is platform dependent, namely
|
|
||||||
# MacOS : libLIBRARY.jnilib
|
|
||||||
# Windows: LIBRARY.dll
|
|
||||||
# Linux : libLIBRARY.so
|
|
||||||
set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
if ("${swig_lowercase_language}" STREQUAL "python")
|
|
||||||
# this is only needed for the python case where a _modulename.so is generated
|
|
||||||
set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
|
|
||||||
# Python extension modules on Windows must have the extension ".pyd"
|
|
||||||
# instead of ".dll" as of Python 2.5. Older python versions do support
|
|
||||||
# this suffix.
|
|
||||||
# http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
|
|
||||||
# <quote>
|
|
||||||
# Windows: .dll is no longer supported as a filename extension for extension modules.
|
|
||||||
# .pyd is now the only filename extension that will be searched for.
|
|
||||||
# </quote>
|
|
||||||
if(WIN32 AND NOT CYGWIN)
|
|
||||||
set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
|
|
||||||
endif()
|
|
||||||
endif ()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
#
|
|
||||||
# Like TARGET_LINK_LIBRARIES but for swig modules
|
|
||||||
#
|
|
||||||
macro(SWIG_LINK_LIBRARIES name)
|
|
||||||
if(SWIG_MODULE_${name}_REAL_NAME)
|
|
||||||
target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
|
|
||||||
else()
|
|
||||||
message(SEND_ERROR "Cannot find Swig library \"${name}\".")
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
INCLUDE(FindPkgConfig)
|
||||||
|
PKG_CHECK_MODULES(PC_IEEE802_11 ieee802_11)
|
||||||
|
|
||||||
|
FIND_PATH(
|
||||||
|
IEEE802_11_INCLUDE_DIRS
|
||||||
|
NAMES ieee802-11/api.h
|
||||||
|
HINTS $ENV{IEEE802_11_DIR}/include
|
||||||
|
${PC_IEEE802_11_INCLUDEDIR}
|
||||||
|
PATHS ${CMAKE_INSTALL_PREFIX}/include
|
||||||
|
/usr/local/include
|
||||||
|
/usr/include
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(
|
||||||
|
IEEE802_11_LIBRARIES
|
||||||
|
NAMES gnuradio-ieee802_11
|
||||||
|
HINTS $ENV{IEEE802_11_DIR}/lib
|
||||||
|
${PC_IEEE802_11_LIBDIR}
|
||||||
|
PATHS ${CMAKE_INSTALL_PREFIX}/lib
|
||||||
|
${CMAKE_INSTALL_PREFIX}/lib64
|
||||||
|
/usr/local/lib
|
||||||
|
/usr/local/lib64
|
||||||
|
/usr/lib
|
||||||
|
/usr/lib64
|
||||||
|
)
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/ieee802_11Target.cmake")
|
||||||
|
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(IEEE802_11 DEFAULT_MSG IEEE802_11_LIBRARIES IEEE802_11_INCLUDE_DIRS)
|
||||||
|
MARK_AS_ADVANCED(IEEE802_11_LIBRARIES IEEE802_11_INCLUDE_DIRS)
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
#
|
# Copyright 2018 Free Software Foundation, Inc.
|
||||||
# Copyright 2004 Free Software Foundation, Inc.
|
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file is part of GNU Radio
|
||||||
#
|
#
|
||||||
@@ -17,36 +16,11 @@
|
|||||||
# along with GNU Radio; see the file COPYING. If not, write to
|
# along with GNU Radio; see the file COPYING. If not, write to
|
||||||
# the Free Software Foundation, Inc., 51 Franklin Street,
|
# the Free Software Foundation, Inc., 51 Franklin Street,
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
#
|
|
||||||
|
|
||||||
def i_code (code3):
|
include(CMakeFindDependencyMacro)
|
||||||
return code3[0]
|
|
||||||
|
|
||||||
def o_code (code3):
|
set(target_deps "@TARGET_DEPENDENCIES@")
|
||||||
if len (code3) >= 2:
|
foreach(dep IN LISTS target_deps)
|
||||||
return code3[1]
|
find_dependency(${dep})
|
||||||
else:
|
endforeach()
|
||||||
return code3[0]
|
include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
|
||||||
|
|
||||||
def tap_code (code3):
|
|
||||||
if len (code3) >= 3:
|
|
||||||
return code3[2]
|
|
||||||
else:
|
|
||||||
return code3[0]
|
|
||||||
|
|
||||||
def i_type (code3):
|
|
||||||
return char_to_type[i_code (code3)]
|
|
||||||
|
|
||||||
def o_type (code3):
|
|
||||||
return char_to_type[o_code (code3)]
|
|
||||||
|
|
||||||
def tap_type (code3):
|
|
||||||
return char_to_type[tap_code (code3)]
|
|
||||||
|
|
||||||
|
|
||||||
char_to_type = {}
|
|
||||||
char_to_type['s'] = 'short'
|
|
||||||
char_to_type['i'] = 'int'
|
|
||||||
char_to_type['f'] = 'float'
|
|
||||||
char_to_type['c'] = 'gr_complex'
|
|
||||||
char_to_type['b'] = 'unsigned char'
|
|
||||||
@@ -1,52 +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.
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Create the doxygen configuration file
|
|
||||||
########################################################################
|
|
||||||
file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir)
|
|
||||||
file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir)
|
|
||||||
file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} abs_top_srcdir)
|
|
||||||
file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} abs_top_builddir)
|
|
||||||
|
|
||||||
set(HAVE_DOT ${DOXYGEN_DOT_FOUND})
|
|
||||||
set(enable_html_docs YES)
|
|
||||||
set(enable_latex_docs NO)
|
|
||||||
set(enable_xml_docs YES)
|
|
||||||
|
|
||||||
configure_file(
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
|
||||||
@ONLY)
|
|
||||||
|
|
||||||
set(BUILT_DIRS ${CMAKE_CURRENT_BINARY_DIR}/xml ${CMAKE_CURRENT_BINARY_DIR}/html)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Make and install doxygen docs
|
|
||||||
########################################################################
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${BUILT_DIRS}
|
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
COMMENT "Generating documentation with doxygen"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(doxygen_target ALL DEPENDS ${BUILT_DIRS})
|
|
||||||
|
|
||||||
install(DIRECTORY ${BUILT_DIRS} DESTINATION ${GR_PKG_DOC_DIR})
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,3 +0,0 @@
|
|||||||
/Makefile
|
|
||||||
/Makefile.in
|
|
||||||
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright 2007,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.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(top_srcdir)/Makefile.common
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
|
||||||
example/aadvark.cc \
|
|
||||||
example/aadvark.h \
|
|
||||||
example/Doxyfile \
|
|
||||||
example/xml/aadvark_8cc.xml \
|
|
||||||
example/xml/aadvark_8h.xml \
|
|
||||||
example/xml/classAadvark.xml \
|
|
||||||
example/xml/combine.xslt \
|
|
||||||
example/xml/compound.xsd \
|
|
||||||
example/xml/index.xml \
|
|
||||||
example/xml/index.xsd
|
|
||||||
|
|
||||||
if PYTHON
|
|
||||||
utilspythondir = $(grpythondir)/doxyxml
|
|
||||||
|
|
||||||
TESTS = \
|
|
||||||
run_tests
|
|
||||||
|
|
||||||
nobase_utilspython_PYTHON = \
|
|
||||||
__init__.py \
|
|
||||||
base.py \
|
|
||||||
doxyindex.py \
|
|
||||||
text.py \
|
|
||||||
generated/__init__.py \
|
|
||||||
generated/index.py \
|
|
||||||
generated/indexsuper.py \
|
|
||||||
generated/compound.py \
|
|
||||||
generated/compoundsuper.py
|
|
||||||
endif
|
|
||||||
@@ -1,82 +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.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
Python interface to contents of doxygen xml documentation.
|
|
||||||
|
|
||||||
Example use:
|
|
||||||
See the contents of the example folder for the C++ and
|
|
||||||
doxygen-generated xml used in this example.
|
|
||||||
|
|
||||||
>>> # Parse the doxygen docs.
|
|
||||||
>>> import os
|
|
||||||
>>> this_dir = os.path.dirname(globals()['__file__'])
|
|
||||||
>>> xml_path = this_dir + "/example/xml/"
|
|
||||||
>>> di = DoxyIndex(xml_path)
|
|
||||||
|
|
||||||
Get a list of all top-level objects.
|
|
||||||
|
|
||||||
>>> print([mem.name() for mem in di.members()])
|
|
||||||
[u'Aadvark', u'aadvarky_enough', u'main']
|
|
||||||
|
|
||||||
Get all functions.
|
|
||||||
|
|
||||||
>>> print([mem.name() for mem in di.in_category(DoxyFunction)])
|
|
||||||
[u'aadvarky_enough', u'main']
|
|
||||||
|
|
||||||
Check if an object is present.
|
|
||||||
|
|
||||||
>>> di.has_member(u'Aadvark')
|
|
||||||
True
|
|
||||||
>>> di.has_member(u'Fish')
|
|
||||||
False
|
|
||||||
|
|
||||||
Get an item by name and check its properties.
|
|
||||||
|
|
||||||
>>> aad = di.get_member(u'Aadvark')
|
|
||||||
>>> print(aad.brief_description)
|
|
||||||
Models the mammal Aadvark.
|
|
||||||
>>> print(aad.detailed_description)
|
|
||||||
Sadly the model is incomplete and cannot capture all aspects of an aadvark yet.
|
|
||||||
<BLANKLINE>
|
|
||||||
This line is uninformative and is only to test line breaks in the comments.
|
|
||||||
>>> [mem.name() for mem in aad.members()]
|
|
||||||
[u'aadvarkness', u'print', u'Aadvark', u'get_aadvarkness']
|
|
||||||
>>> aad.get_member(u'print').brief_description
|
|
||||||
u'Outputs the vital aadvark statistics.'
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
|
|
||||||
|
|
||||||
def _test():
|
|
||||||
import os
|
|
||||||
this_dir = os.path.dirname(globals()['__file__'])
|
|
||||||
xml_path = this_dir + "/example/xml/"
|
|
||||||
di = DoxyIndex(xml_path)
|
|
||||||
# Get the Aadvark class
|
|
||||||
aad = di.get_member('Aadvark')
|
|
||||||
aad.brief_description
|
|
||||||
import doctest
|
|
||||||
return doctest.testmod()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
_test()
|
|
||||||
|
|
||||||
@@ -1,219 +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.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
A base class is created.
|
|
||||||
|
|
||||||
Classes based upon this are used to make more user-friendly interfaces
|
|
||||||
to the doxygen xml docs than the generated classes provide.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import pdb
|
|
||||||
|
|
||||||
from xml.parsers.expat import ExpatError
|
|
||||||
|
|
||||||
from generated import compound
|
|
||||||
|
|
||||||
|
|
||||||
class Base(object):
|
|
||||||
|
|
||||||
class Duplicate(StandardError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class NoSuchMember(StandardError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class ParsingError(StandardError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def __init__(self, parse_data, top=None):
|
|
||||||
self._parsed = False
|
|
||||||
self._error = False
|
|
||||||
self._parse_data = parse_data
|
|
||||||
self._members = []
|
|
||||||
self._dict_members = {}
|
|
||||||
self._in_category = {}
|
|
||||||
self._data = {}
|
|
||||||
if top is not None:
|
|
||||||
self._xml_path = top._xml_path
|
|
||||||
# Set up holder of references
|
|
||||||
else:
|
|
||||||
top = self
|
|
||||||
self._refs = {}
|
|
||||||
self._xml_path = parse_data
|
|
||||||
self.top = top
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_refid(cls, refid, top=None):
|
|
||||||
""" Instantiate class from a refid rather than parsing object. """
|
|
||||||
# First check to see if its already been instantiated.
|
|
||||||
if top is not None and refid in top._refs:
|
|
||||||
return top._refs[refid]
|
|
||||||
# Otherwise create a new instance and set refid.
|
|
||||||
inst = cls(None, top=top)
|
|
||||||
inst.refid = refid
|
|
||||||
inst.add_ref(inst)
|
|
||||||
return inst
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_parse_data(cls, parse_data, top=None):
|
|
||||||
refid = getattr(parse_data, 'refid', None)
|
|
||||||
if refid is not None and top is not None and refid in top._refs:
|
|
||||||
return top._refs[refid]
|
|
||||||
inst = cls(parse_data, top=top)
|
|
||||||
if refid is not None:
|
|
||||||
inst.refid = refid
|
|
||||||
inst.add_ref(inst)
|
|
||||||
return inst
|
|
||||||
|
|
||||||
def add_ref(self, obj):
|
|
||||||
if hasattr(obj, 'refid'):
|
|
||||||
self.top._refs[obj.refid] = obj
|
|
||||||
|
|
||||||
mem_classes = []
|
|
||||||
|
|
||||||
def get_cls(self, mem):
|
|
||||||
for cls in self.mem_classes:
|
|
||||||
if cls.can_parse(mem):
|
|
||||||
return cls
|
|
||||||
raise StandardError(("Did not find a class for object '%s'." \
|
|
||||||
% (mem.get_name())))
|
|
||||||
|
|
||||||
def convert_mem(self, mem):
|
|
||||||
try:
|
|
||||||
cls = self.get_cls(mem)
|
|
||||||
converted = cls.from_parse_data(mem, self.top)
|
|
||||||
if converted is None:
|
|
||||||
raise StandardError('No class matched this object.')
|
|
||||||
self.add_ref(converted)
|
|
||||||
return converted
|
|
||||||
except StandardError, e:
|
|
||||||
print e
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def includes(cls, inst):
|
|
||||||
return isinstance(inst, cls)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def can_parse(cls, obj):
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _parse(self):
|
|
||||||
self._parsed = True
|
|
||||||
|
|
||||||
def _get_dict_members(self, cat=None):
|
|
||||||
"""
|
|
||||||
For given category a dictionary is returned mapping member names to
|
|
||||||
members of that category. For names that are duplicated the name is
|
|
||||||
mapped to None.
|
|
||||||
"""
|
|
||||||
self.confirm_no_error()
|
|
||||||
if cat not in self._dict_members:
|
|
||||||
new_dict = {}
|
|
||||||
for mem in self.in_category(cat):
|
|
||||||
if mem.name() not in new_dict:
|
|
||||||
new_dict[mem.name()] = mem
|
|
||||||
else:
|
|
||||||
new_dict[mem.name()] = self.Duplicate
|
|
||||||
self._dict_members[cat] = new_dict
|
|
||||||
return self._dict_members[cat]
|
|
||||||
|
|
||||||
def in_category(self, cat):
|
|
||||||
self.confirm_no_error()
|
|
||||||
if cat is None:
|
|
||||||
return self._members
|
|
||||||
if cat not in self._in_category:
|
|
||||||
self._in_category[cat] = [mem for mem in self._members
|
|
||||||
if cat.includes(mem)]
|
|
||||||
return self._in_category[cat]
|
|
||||||
|
|
||||||
def get_member(self, name, cat=None):
|
|
||||||
self.confirm_no_error()
|
|
||||||
# Check if it's in a namespace or class.
|
|
||||||
bits = name.split('::')
|
|
||||||
first = bits[0]
|
|
||||||
rest = '::'.join(bits[1:])
|
|
||||||
member = self._get_dict_members(cat).get(first, self.NoSuchMember)
|
|
||||||
# Raise any errors that are returned.
|
|
||||||
if member in set([self.NoSuchMember, self.Duplicate]):
|
|
||||||
raise member()
|
|
||||||
if rest:
|
|
||||||
return member.get_member(rest, cat=cat)
|
|
||||||
return member
|
|
||||||
|
|
||||||
def has_member(self, name, cat=None):
|
|
||||||
try:
|
|
||||||
mem = self.get_member(name, cat=cat)
|
|
||||||
return True
|
|
||||||
except self.NoSuchMember:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def data(self):
|
|
||||||
self.confirm_no_error()
|
|
||||||
return self._data
|
|
||||||
|
|
||||||
def members(self):
|
|
||||||
self.confirm_no_error()
|
|
||||||
return self._members
|
|
||||||
|
|
||||||
def process_memberdefs(self):
|
|
||||||
mdtss = []
|
|
||||||
for sec in self._retrieved_data.compounddef.sectiondef:
|
|
||||||
mdtss += sec.memberdef
|
|
||||||
# At the moment we lose all information associated with sections.
|
|
||||||
# Sometimes a memberdef is in several sectiondef.
|
|
||||||
# We make sure we don't get duplicates here.
|
|
||||||
uniques = set([])
|
|
||||||
for mem in mdtss:
|
|
||||||
converted = self.convert_mem(mem)
|
|
||||||
pair = (mem.name, mem.__class__)
|
|
||||||
if pair not in uniques:
|
|
||||||
uniques.add(pair)
|
|
||||||
self._members.append(converted)
|
|
||||||
|
|
||||||
def retrieve_data(self):
|
|
||||||
filename = os.path.join(self._xml_path, self.refid + '.xml')
|
|
||||||
try:
|
|
||||||
self._retrieved_data = compound.parse(filename)
|
|
||||||
except ExpatError:
|
|
||||||
print('Error in xml in file %s' % filename)
|
|
||||||
self._error = True
|
|
||||||
self._retrieved_data = None
|
|
||||||
|
|
||||||
def check_parsed(self):
|
|
||||||
if not self._parsed:
|
|
||||||
self._parse()
|
|
||||||
|
|
||||||
def confirm_no_error(self):
|
|
||||||
self.check_parsed()
|
|
||||||
if self._error:
|
|
||||||
raise self.ParsingError()
|
|
||||||
|
|
||||||
def error(self):
|
|
||||||
self.check_parsed()
|
|
||||||
return self._error
|
|
||||||
|
|
||||||
def name(self):
|
|
||||||
# first see if we can do it without processing.
|
|
||||||
if self._parse_data is not None:
|
|
||||||
return self._parse_data.name
|
|
||||||
self.check_parsed()
|
|
||||||
return self._retrieved_data.compounddef.name
|
|
||||||
@@ -1,237 +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.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
Classes providing more user-friendly interfaces to the doxygen xml
|
|
||||||
docs than the generated classes provide.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
from generated import index
|
|
||||||
from base import Base
|
|
||||||
from text import description
|
|
||||||
|
|
||||||
class DoxyIndex(Base):
|
|
||||||
"""
|
|
||||||
Parses a doxygen xml directory.
|
|
||||||
"""
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
def _parse(self):
|
|
||||||
if self._parsed:
|
|
||||||
return
|
|
||||||
super(DoxyIndex, self)._parse()
|
|
||||||
self._root = index.parse(os.path.join(self._xml_path, 'index.xml'))
|
|
||||||
for mem in self._root.compound:
|
|
||||||
converted = self.convert_mem(mem)
|
|
||||||
# For files we want the contents to be accessible directly
|
|
||||||
# from the parent rather than having to go through the file
|
|
||||||
# object.
|
|
||||||
if self.get_cls(mem) == DoxyFile:
|
|
||||||
if mem.name.endswith('.h'):
|
|
||||||
self._members += converted.members()
|
|
||||||
self._members.append(converted)
|
|
||||||
else:
|
|
||||||
self._members.append(converted)
|
|
||||||
|
|
||||||
|
|
||||||
def generate_swig_doc_i(self):
|
|
||||||
"""
|
|
||||||
%feature("docstring") gr_make_align_on_samplenumbers_ss::align_state "
|
|
||||||
Wraps the C++: gr_align_on_samplenumbers_ss::align_state";
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyCompMem(Base):
|
|
||||||
|
|
||||||
|
|
||||||
kind = None
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super(DoxyCompMem, self).__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def can_parse(cls, obj):
|
|
||||||
return obj.kind == cls.kind
|
|
||||||
|
|
||||||
def set_descriptions(self, parse_data):
|
|
||||||
bd = description(getattr(parse_data, 'briefdescription', None))
|
|
||||||
dd = description(getattr(parse_data, 'detaileddescription', None))
|
|
||||||
self._data['brief_description'] = bd
|
|
||||||
self._data['detailed_description'] = dd
|
|
||||||
|
|
||||||
class DoxyCompound(DoxyCompMem):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class DoxyMember(DoxyCompMem):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyFunction(DoxyMember):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
kind = 'function'
|
|
||||||
|
|
||||||
def _parse(self):
|
|
||||||
if self._parsed:
|
|
||||||
return
|
|
||||||
super(DoxyFunction, self)._parse()
|
|
||||||
self.set_descriptions(self._parse_data)
|
|
||||||
self._data['params'] = []
|
|
||||||
prms = self._parse_data.param
|
|
||||||
for prm in prms:
|
|
||||||
self._data['params'].append(DoxyParam(prm))
|
|
||||||
|
|
||||||
brief_description = property(lambda self: self.data()['brief_description'])
|
|
||||||
detailed_description = property(lambda self: self.data()['detailed_description'])
|
|
||||||
params = property(lambda self: self.data()['params'])
|
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyFunction)
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyParam(DoxyMember):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
def _parse(self):
|
|
||||||
if self._parsed:
|
|
||||||
return
|
|
||||||
super(DoxyParam, self)._parse()
|
|
||||||
self.set_descriptions(self._parse_data)
|
|
||||||
self._data['declname'] = self._parse_data.declname
|
|
||||||
|
|
||||||
brief_description = property(lambda self: self.data()['brief_description'])
|
|
||||||
detailed_description = property(lambda self: self.data()['detailed_description'])
|
|
||||||
declname = property(lambda self: self.data()['declname'])
|
|
||||||
|
|
||||||
class DoxyClass(DoxyCompound):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
kind = 'class'
|
|
||||||
|
|
||||||
def _parse(self):
|
|
||||||
if self._parsed:
|
|
||||||
return
|
|
||||||
super(DoxyClass, self)._parse()
|
|
||||||
self.retrieve_data()
|
|
||||||
if self._error:
|
|
||||||
return
|
|
||||||
self.set_descriptions(self._retrieved_data.compounddef)
|
|
||||||
# Sectiondef.kind tells about whether private or public.
|
|
||||||
# We just ignore this for now.
|
|
||||||
self.process_memberdefs()
|
|
||||||
|
|
||||||
brief_description = property(lambda self: self.data()['brief_description'])
|
|
||||||
detailed_description = property(lambda self: self.data()['detailed_description'])
|
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyClass)
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyFile(DoxyCompound):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
kind = 'file'
|
|
||||||
|
|
||||||
def _parse(self):
|
|
||||||
if self._parsed:
|
|
||||||
return
|
|
||||||
super(DoxyFile, self)._parse()
|
|
||||||
self.retrieve_data()
|
|
||||||
self.set_descriptions(self._retrieved_data.compounddef)
|
|
||||||
if self._error:
|
|
||||||
return
|
|
||||||
self.process_memberdefs()
|
|
||||||
|
|
||||||
brief_description = property(lambda self: self.data()['brief_description'])
|
|
||||||
detailed_description = property(lambda self: self.data()['detailed_description'])
|
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyFile)
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyNamespace(DoxyCompound):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
kind = 'namespace'
|
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyNamespace)
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyGroup(DoxyCompound):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
kind = 'group'
|
|
||||||
|
|
||||||
def _parse(self):
|
|
||||||
if self._parsed:
|
|
||||||
return
|
|
||||||
super(DoxyGroup, self)._parse()
|
|
||||||
self.retrieve_data()
|
|
||||||
if self._error:
|
|
||||||
return
|
|
||||||
cdef = self._retrieved_data.compounddef
|
|
||||||
self._data['title'] = description(cdef.title)
|
|
||||||
# Process inner groups
|
|
||||||
grps = cdef.innergroup
|
|
||||||
for grp in grps:
|
|
||||||
converted = DoxyGroup.from_refid(grp.refid, top=self.top)
|
|
||||||
self._members.append(converted)
|
|
||||||
# Process inner classes
|
|
||||||
klasses = cdef.innerclass
|
|
||||||
for kls in klasses:
|
|
||||||
converted = DoxyClass.from_refid(kls.refid, top=self.top)
|
|
||||||
self._members.append(converted)
|
|
||||||
# Process normal members
|
|
||||||
self.process_memberdefs()
|
|
||||||
|
|
||||||
title = property(lambda self: self.data()['title'])
|
|
||||||
|
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyGroup)
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyFriend(DoxyMember):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
kind = 'friend'
|
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyFriend)
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyOther(Base):
|
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
|
||||||
|
|
||||||
kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page'])
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def can_parse(cls, obj):
|
|
||||||
return obj.kind in cls.kinds
|
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyOther)
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,50 +0,0 @@
|
|||||||
/* -*- c++ -*- */
|
|
||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
#include <iostream>
|
|
||||||
#include "aadvark.h"
|
|
||||||
|
|
||||||
void Aadvark::print() {
|
|
||||||
std::cout << "aadvark is " << aadvarkness << "/10 aadvarky" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
Aadvark::Aadvark(int aaness): aadvarkness(aaness) {}
|
|
||||||
|
|
||||||
bool aadvarky_enough(Aadvark aad) {
|
|
||||||
if (aad.get_aadvarkness() > 6)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Aadvark::get_aadvarkness() {
|
|
||||||
return aadvarkness;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
Aadvark arold = Aadvark(6);
|
|
||||||
arold.print();
|
|
||||||
if (aadvarky_enough(arold))
|
|
||||||
std::cout << "He is aadvarky enough" << std::endl;
|
|
||||||
else
|
|
||||||
std::cout << "He is not aadvarky enough" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
/* -*- c++ -*- */
|
|
||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Models the mammal Aadvark.
|
|
||||||
*
|
|
||||||
* Sadly the model is incomplete and cannot capture all aspects of an aadvark yet.
|
|
||||||
*
|
|
||||||
* This line is uninformative and is only to test line breaks in the comments.
|
|
||||||
*/
|
|
||||||
class Aadvark {
|
|
||||||
public:
|
|
||||||
//! \brief Outputs the vital aadvark statistics.
|
|
||||||
void print();
|
|
||||||
//! \param aaness The aadvarkness of an aadvark is a measure of how aadvarky it is.
|
|
||||||
Aadvark(int aaness);
|
|
||||||
int get_aadvarkness();
|
|
||||||
private:
|
|
||||||
int aadvarkness;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool aadvarky_enough(Aadvark aad);
|
|
||||||
|
|
||||||
int main();
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.6.3">
|
|
||||||
<compounddef id="aadvark_8cc" kind="file">
|
|
||||||
<compoundname>aadvark.cc</compoundname>
|
|
||||||
<includes local="no">iostream</includes>
|
|
||||||
<includes refid="aadvark_8cc" local="yes">aadvark.h</includes>
|
|
||||||
<includedby refid="aadvark_8cc" local="yes">aadvark.cc</includedby>
|
|
||||||
<incdepgraph>
|
|
||||||
<node id="0">
|
|
||||||
<label>aadvark.cc</label>
|
|
||||||
<link refid="aadvark.cc"/>
|
|
||||||
<childnode refid="1" relation="include">
|
|
||||||
</childnode>
|
|
||||||
</node>
|
|
||||||
<node id="1">
|
|
||||||
<label>iostream</label>
|
|
||||||
</node>
|
|
||||||
</incdepgraph>
|
|
||||||
<sectiondef kind="func">
|
|
||||||
<memberdef kind="function" id="aadvark_8cc_1acb52858524210ec6dddc3e16d1e52946" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>bool</type>
|
|
||||||
<definition>bool aadvarky_enough</definition>
|
|
||||||
<argsstring>(Aadvark aad)</argsstring>
|
|
||||||
<name>aadvarky_enough</name>
|
|
||||||
<param>
|
|
||||||
<type><ref refid="classAadvark" kindref="compound">Aadvark</ref></type>
|
|
||||||
<declname>aad</declname>
|
|
||||||
</param>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" line="10" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="10" bodyend="15"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="aadvark_8cc_1ae66f6b31b5ad750f1fe042a706a4e3d4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int main</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>main</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" line="21" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="21" bodyend="28"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<programlisting>
|
|
||||||
<codeline lineno="1"><highlight class="preprocessor">#include<sp/><iostream></highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="2"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"aadvark.h"</highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="3"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="4"><highlight class="normal"></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kindref="member" tooltip="Outputs the vital aadvark statistics.">Aadvark::print</ref>()<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="5"><highlight class="normal"><sp/><sp/>std::cout<sp/><<<sp/></highlight><highlight class="stringliteral">"aadvark<sp/>is<sp/>"</highlight><highlight class="normal"><sp/><<<sp/>aadvarkness<sp/><<<sp/></highlight><highlight class="stringliteral">"/10<sp/>aadvarky"</highlight><highlight class="normal"><sp/><<<sp/>std::endl;</highlight></codeline>
|
|
||||||
<codeline lineno="6"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="7"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="8"><highlight class="normal"><ref refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" kindref="member">Aadvark::Aadvark</ref>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>aaness):<sp/>aadvarkness(aaness)<sp/>{}</highlight></codeline>
|
|
||||||
<codeline lineno="9"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="10"><highlight class="normal"></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>aadvarky_enough(<ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>aad)<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="11"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(aad.get_aadvarkness()<sp/>><sp/>6)</highlight></codeline>
|
|
||||||
<codeline lineno="12"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
|
|
||||||
<codeline lineno="13"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="14"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
|
|
||||||
<codeline lineno="15"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="16"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="17"><highlight class="normal"></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>Aadvark::get_aadvarkness()<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="18"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>aadvarkness;</highlight></codeline>
|
|
||||||
<codeline lineno="19"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="20"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="21"><highlight class="normal"></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>main()<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="22"><highlight class="normal"><sp/><sp/><ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>arold<sp/>=<sp/><ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref>(6);</highlight></codeline>
|
|
||||||
<codeline lineno="23"><highlight class="normal"><sp/><sp/>arold.<ref refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kindref="member" tooltip="Outputs the vital aadvark statistics.">print</ref>();</highlight></codeline>
|
|
||||||
<codeline lineno="24"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(aadvarky_enough(arold))</highlight></codeline>
|
|
||||||
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/>std::cout<sp/><<<sp/></highlight><highlight class="stringliteral">"He<sp/>is<sp/>aadvarky<sp/>enough"</highlight><highlight class="normal"><sp/><<<sp/>std::endl;</highlight></codeline>
|
|
||||||
<codeline lineno="26"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/>std::cout<sp/><<<sp/></highlight><highlight class="stringliteral">"He<sp/>is<sp/>not<sp/>aadvarky<sp/>enough"</highlight><highlight class="normal"><sp/><<<sp/>std::endl;</highlight></codeline>
|
|
||||||
<codeline lineno="28"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="29"><highlight class="normal"></highlight></codeline>
|
|
||||||
</programlisting>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc"/>
|
|
||||||
</compounddef>
|
|
||||||
</doxygen>
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.6.3">
|
|
||||||
<compounddef id="aadvark_8h" kind="file">
|
|
||||||
<compoundname>aadvark.h</compoundname>
|
|
||||||
<includes local="no">iostream</includes>
|
|
||||||
<incdepgraph>
|
|
||||||
<node id="3">
|
|
||||||
<label>aadvark.h</label>
|
|
||||||
<link refid="aadvark.h"/>
|
|
||||||
<childnode refid="4" relation="include">
|
|
||||||
</childnode>
|
|
||||||
</node>
|
|
||||||
<node id="4">
|
|
||||||
<label>iostream</label>
|
|
||||||
</node>
|
|
||||||
</incdepgraph>
|
|
||||||
<innerclass refid="classAadvark" prot="public">Aadvark</innerclass>
|
|
||||||
<sectiondef kind="func">
|
|
||||||
<memberdef kind="function" id="aadvark_8h_1acb52858524210ec6dddc3e16d1e52946" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>bool</type>
|
|
||||||
<definition>bool aadvarky_enough</definition>
|
|
||||||
<argsstring>(Aadvark aad)</argsstring>
|
|
||||||
<name>aadvarky_enough</name>
|
|
||||||
<param>
|
|
||||||
<type><ref refid="classAadvark" kindref="compound">Aadvark</ref></type>
|
|
||||||
<declname>aad</declname>
|
|
||||||
</param>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="21" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="10" bodyend="15"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="aadvark_8h_1ae66f6b31b5ad750f1fe042a706a4e3d4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int main</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>main</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="23" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="21" bodyend="28"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<programlisting>
|
|
||||||
<codeline lineno="1"><highlight class="preprocessor">#include<sp/><iostream></highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="2"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="10" refid="classAadvark" refkind="compound"><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="11"><highlight class="normal"></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
|
|
||||||
<codeline lineno="13"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kindref="member" tooltip="Outputs the vital aadvark statistics.">print</ref>();</highlight></codeline>
|
|
||||||
<codeline lineno="15"><highlight class="normal"><sp/><sp/><ref refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" kindref="member">Aadvark</ref>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>aaness);</highlight></codeline>
|
|
||||||
<codeline lineno="16"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>get_aadvarkness();</highlight></codeline>
|
|
||||||
<codeline lineno="17"><highlight class="normal"></highlight><highlight class="keyword">private</highlight><highlight class="normal">:</highlight></codeline>
|
|
||||||
<codeline lineno="18"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>aadvarkness;</highlight></codeline>
|
|
||||||
<codeline lineno="19"><highlight class="normal">};</highlight></codeline>
|
|
||||||
<codeline lineno="20"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="21"><highlight class="normal"></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>aadvarky_enough(<ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>aad);</highlight></codeline>
|
|
||||||
<codeline lineno="22"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="23"><highlight class="normal"></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>main();</highlight></codeline>
|
|
||||||
</programlisting>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h"/>
|
|
||||||
</compounddef>
|
|
||||||
</doxygen>
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.6.3">
|
|
||||||
<compounddef id="classAadvark" kind="class" prot="public">
|
|
||||||
<compoundname>Aadvark</compoundname>
|
|
||||||
<includes refid="aadvark_8h" local="no">aadvark.h</includes>
|
|
||||||
<sectiondef kind="private-attrib">
|
|
||||||
<memberdef kind="variable" id="classAadvark_1ab79eb58d7bb9d5ddfa5d6f783836cab9" prot="private" static="no" mutable="no">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int Aadvark::aadvarkness</definition>
|
|
||||||
<argsstring></argsstring>
|
|
||||||
<name>aadvarkness</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="18" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" bodystart="18" bodyend="-1"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<sectiondef kind="public-func">
|
|
||||||
<memberdef kind="function" id="classAadvark_1abd061aa5f998002e72080a34f512a059" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>void</type>
|
|
||||||
<definition>void Aadvark::print</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>print</name>
|
|
||||||
<briefdescription>
|
|
||||||
<para>Outputs the vital aadvark statistics. </para> </briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="13" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="4" bodyend="6"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="classAadvark_1adf1a4b97a641411a74a04ab312484462" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type></type>
|
|
||||||
<definition>Aadvark::Aadvark</definition>
|
|
||||||
<argsstring>(int aaness)</argsstring>
|
|
||||||
<name>Aadvark</name>
|
|
||||||
<param>
|
|
||||||
<type>int</type>
|
|
||||||
<declname>aaness</declname>
|
|
||||||
</param>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
<para><parameterlist kind="param"><parameteritem>
|
|
||||||
<parameternamelist>
|
|
||||||
<parametername>aaness</parametername>
|
|
||||||
</parameternamelist>
|
|
||||||
<parameterdescription>
|
|
||||||
<para>The aadvarkness of an aadvark is a measure of how aadvarky it is. </para></parameterdescription>
|
|
||||||
</parameteritem>
|
|
||||||
</parameterlist>
|
|
||||||
</para> </detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="15" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="8" bodyend="8"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="classAadvark_1affd2ada0a85807efcbe26615a848f53e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int Aadvark::get_aadvarkness</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>get_aadvarkness</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="16" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="17" bodyend="19"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<briefdescription>
|
|
||||||
<para>Models the mammal <ref refid="classAadvark" kindref="compound">Aadvark</ref>. </para> </briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
<para>Sadly the model is incomplete and cannot capture all aspects of an aadvark yet.</para><para>This line is uninformative and is only to test line breaks in the comments. </para> </detaileddescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="10" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" bodystart="10" bodyend="19"/>
|
|
||||||
<listofallmembers>
|
|
||||||
<member refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" prot="public" virt="non-virtual"><scope>Aadvark</scope><name>Aadvark</name></member>
|
|
||||||
<member refid="classAadvark_1ab79eb58d7bb9d5ddfa5d6f783836cab9" prot="private" virt="non-virtual"><scope>Aadvark</scope><name>aadvarkness</name></member>
|
|
||||||
<member refid="classAadvark_1affd2ada0a85807efcbe26615a848f53e" prot="public" virt="non-virtual"><scope>Aadvark</scope><name>get_aadvarkness</name></member>
|
|
||||||
<member refid="classAadvark_1abd061aa5f998002e72080a34f512a059" prot="public" virt="non-virtual"><scope>Aadvark</scope><name>print</name></member>
|
|
||||||
</listofallmembers>
|
|
||||||
</compounddef>
|
|
||||||
</doxygen>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<!-- XSLT script to combine the generated output into a single file.
|
|
||||||
If you have xsltproc you could use:
|
|
||||||
xsltproc combine.xslt index.xml >all.xml
|
|
||||||
-->
|
|
||||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
|
||||||
<xsl:output method="xml" version="1.0" indent="yes" standalone="yes" />
|
|
||||||
<xsl:template match="/">
|
|
||||||
<doxygen version="{doxygenindex/@version}">
|
|
||||||
<!-- Load all doxgen generated xml files -->
|
|
||||||
<xsl:for-each select="doxygenindex/compound">
|
|
||||||
<xsl:copy-of select="document( concat( @refid, '.xml' ) )/doxygen/*" />
|
|
||||||
</xsl:for-each>
|
|
||||||
</doxygen>
|
|
||||||
</xsl:template>
|
|
||||||
</xsl:stylesheet>
|
|
||||||
@@ -1,814 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8' ?>
|
|
||||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
|
||||||
<xsd:element name="doxygen" type="DoxygenType"/>
|
|
||||||
|
|
||||||
<!-- Complex types -->
|
|
||||||
|
|
||||||
<xsd:complexType name="DoxygenType">
|
|
||||||
<xsd:sequence maxOccurs="unbounded">
|
|
||||||
<xsd:element name="compounddef" type="compounddefType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="version" type="DoxVersionNumber" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="compounddefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="compoundname" type="xsd:string"/>
|
|
||||||
<xsd:element name="title" type="xsd:string" minOccurs="0" />
|
|
||||||
<xsd:element name="basecompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="derivedcompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="includes" type="incType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="includedby" type="incType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="incdepgraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="invincdepgraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="innerdir" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innerfile" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innerclass" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innernamespace" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innerpage" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innergroup" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
|
|
||||||
<xsd:element name="sectiondef" type="sectiondefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="inheritancegraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="collaborationgraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="programlisting" type="listingType" minOccurs="0" />
|
|
||||||
<xsd:element name="location" type="locationType" minOccurs="0" />
|
|
||||||
<xsd:element name="listofallmembers" type="listofallmembersType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
<xsd:attribute name="kind" type="DoxCompoundKind" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="listofallmembersType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="member" type="memberRefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="memberRefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="scope" />
|
|
||||||
<xsd:element name="name" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
<xsd:attribute name="virt" type="DoxVirtualKind" />
|
|
||||||
<xsd:attribute name="ambiguityscope" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="compoundRefType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" use="optional" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
<xsd:attribute name="virt" type="DoxVirtualKind" />
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="reimplementType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="incType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="local" type="DoxBool" />
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="refType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="refTextType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="kindref" type="DoxRefKind" />
|
|
||||||
<xsd:attribute name="external" type="xsd:string" use="optional"/>
|
|
||||||
<xsd:attribute name="tooltip" type="xsd:string" use="optional"/>
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="sectiondefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="header" type="xsd:string" minOccurs="0" />
|
|
||||||
<xsd:element name="description" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxSectionKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="memberdefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
|
|
||||||
<xsd:element name="type" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="definition" minOccurs="0" />
|
|
||||||
<xsd:element name="argsstring" minOccurs="0" />
|
|
||||||
<xsd:element name="name" />
|
|
||||||
<xsd:element name="read" minOccurs="0" />
|
|
||||||
<xsd:element name="write" minOccurs="0" />
|
|
||||||
<xsd:element name="bitfield" minOccurs="0" />
|
|
||||||
<xsd:element name="reimplements" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="reimplementedby" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="enumvalue" type="enumvalueType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="location" type="locationType" />
|
|
||||||
<xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxMemberKind" />
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
<xsd:attribute name="static" type="DoxBool" />
|
|
||||||
<xsd:attribute name="const" type="DoxBool" />
|
|
||||||
<xsd:attribute name="explicit" type="DoxBool" />
|
|
||||||
<xsd:attribute name="inline" type="DoxBool" />
|
|
||||||
<xsd:attribute name="virt" type="DoxVirtualKind" />
|
|
||||||
<xsd:attribute name="volatile" type="DoxBool" />
|
|
||||||
<xsd:attribute name="mutable" type="DoxBool" />
|
|
||||||
<!-- Qt property -->
|
|
||||||
<xsd:attribute name="readable" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="writable" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI variable -->
|
|
||||||
<xsd:attribute name="initonly" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI and C# property -->
|
|
||||||
<xsd:attribute name="settable" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="gettable" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI function -->
|
|
||||||
<xsd:attribute name="final" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="sealed" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="new" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI event -->
|
|
||||||
<xsd:attribute name="add" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="remove" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="raise" type="DoxBool" use="optional"/>
|
|
||||||
<!-- Objective-C 2.0 protocol method -->
|
|
||||||
<xsd:attribute name="optional" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="required" type="DoxBool" use="optional"/>
|
|
||||||
<!-- Objective-C 2.0 property accessor -->
|
|
||||||
<xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="descriptionType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" minOccurs="0"/>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="enumvalueType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="name" />
|
|
||||||
<xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="templateparamlistType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="paramType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="type" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="declname" minOccurs="0" />
|
|
||||||
<xsd:element name="defname" minOccurs="0" />
|
|
||||||
<xsd:element name="array" minOccurs="0" />
|
|
||||||
<xsd:element name="defval" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="linkedTextType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="graphType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="node" type="nodeType" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="nodeType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="label" />
|
|
||||||
<xsd:element name="link" type="linkType" minOccurs="0" />
|
|
||||||
<xsd:element name="childnode" type="childnodeType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="childnodeType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="edgelabel" minOccurs="0" maxOccurs="unbounded"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="relation" type="DoxGraphRelation" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="linkType">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="external" type="xsd:string" use="optional"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="listingType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="codelineType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="highlight" type="highlightType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="lineno" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="refkind" type="DoxRefKind" />
|
|
||||||
<xsd:attribute name="external" type="DoxBool" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="highlightType" mixed="true">
|
|
||||||
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xsd:element name="sp" />
|
|
||||||
<xsd:element name="ref" type="refTextType" />
|
|
||||||
</xsd:choice>
|
|
||||||
<xsd:attribute name="class" type="DoxHighlightClass" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="referenceType" mixed="true">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="compoundref" type="xsd:string" use="optional" />
|
|
||||||
<xsd:attribute name="startline" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="endline" type="xsd:integer" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="locationType">
|
|
||||||
<xsd:attribute name="file" type="xsd:string" />
|
|
||||||
<xsd:attribute name="line" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="bodyfile" type="xsd:string" />
|
|
||||||
<xsd:attribute name="bodystart" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="bodyend" type="xsd:integer" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect1Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS1Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect2Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS2Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect3Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS3Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect4Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS4Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS1Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS2Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS3Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS4Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:group name="docTitleCmdGroup">
|
|
||||||
<xsd:choice>
|
|
||||||
<xsd:element name="ulink" type="docURLLink" />
|
|
||||||
<xsd:element name="bold" type="docMarkupType" />
|
|
||||||
<xsd:element name="emphasis" type="docMarkupType" />
|
|
||||||
<xsd:element name="computeroutput" type="docMarkupType" />
|
|
||||||
<xsd:element name="subscript" type="docMarkupType" />
|
|
||||||
<xsd:element name="superscript" type="docMarkupType" />
|
|
||||||
<xsd:element name="center" type="docMarkupType" />
|
|
||||||
<xsd:element name="small" type="docMarkupType" />
|
|
||||||
<xsd:element name="htmlonly" type="xsd:string" />
|
|
||||||
<xsd:element name="latexonly" type="xsd:string" />
|
|
||||||
<xsd:element name="dot" type="xsd:string" />
|
|
||||||
<xsd:element name="anchor" type="docAnchorType" />
|
|
||||||
<xsd:element name="formula" type="docFormulaType" />
|
|
||||||
<xsd:element name="ref" type="docRefTextType" />
|
|
||||||
<xsd:element name="copy" type="docEmptyType" />
|
|
||||||
<xsd:element name="trademark" type="docEmptyType" />
|
|
||||||
<xsd:element name="registered" type="docEmptyType" />
|
|
||||||
<xsd:element name="lsquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="rsquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="ldquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="rdquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="ndash" type="docEmptyType" />
|
|
||||||
<xsd:element name="mdash" type="docEmptyType" />
|
|
||||||
<xsd:element name="umlaut" type="docCharType" />
|
|
||||||
<xsd:element name="acute" type="docCharType" />
|
|
||||||
<xsd:element name="grave" type="docCharType" />
|
|
||||||
<xsd:element name="circ" type="docCharType" />
|
|
||||||
<xsd:element name="slash" type="docCharType" />
|
|
||||||
<xsd:element name="tilde" type="docCharType" />
|
|
||||||
<xsd:element name="cedil" type="docCharType" />
|
|
||||||
<xsd:element name="ring" type="docCharType" />
|
|
||||||
<xsd:element name="szlig" type="docEmptyType" />
|
|
||||||
<xsd:element name="nonbreakablespace" type="docEmptyType" />
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:group>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTitleType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:group name="docCmdGroup">
|
|
||||||
<xsd:choice>
|
|
||||||
<xsd:group ref="docTitleCmdGroup"/>
|
|
||||||
<xsd:element name="linebreak" type="docEmptyType" />
|
|
||||||
<xsd:element name="hruler" type="docEmptyType" />
|
|
||||||
<xsd:element name="preformatted" type="docMarkupType" />
|
|
||||||
<xsd:element name="programlisting" type="listingType" />
|
|
||||||
<xsd:element name="verbatim" type="xsd:string" />
|
|
||||||
<xsd:element name="indexentry" type="docIndexEntryType" />
|
|
||||||
<xsd:element name="orderedlist" type="docListType" />
|
|
||||||
<xsd:element name="itemizedlist" type="docListType" />
|
|
||||||
<xsd:element name="simplesect" type="docSimpleSectType" />
|
|
||||||
<xsd:element name="title" type="docTitleType" />
|
|
||||||
<xsd:element name="variablelist" type="docVariableListType" />
|
|
||||||
<xsd:element name="table" type="docTableType" />
|
|
||||||
<xsd:element name="heading" type="docHeadingType" />
|
|
||||||
<xsd:element name="image" type="docImageType" />
|
|
||||||
<xsd:element name="dotfile" type="docDotFileType" />
|
|
||||||
<xsd:element name="toclist" type="docTocListType" />
|
|
||||||
<xsd:element name="language" type="docLanguageType" />
|
|
||||||
<xsd:element name="parameterlist" type="docParamListType" />
|
|
||||||
<xsd:element name="xrefsect" type="docXRefSectType" />
|
|
||||||
<xsd:element name="copydoc" type="docCopyType" />
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:group>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParaType" mixed="true">
|
|
||||||
<xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docMarkupType" mixed="true">
|
|
||||||
<xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docURLLink" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="url" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docAnchorType" mixed="true">
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docFormulaType" mixed="true">
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docIndexEntryType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="primaryie" type="xsd:string" />
|
|
||||||
<xsd:element name="secondaryie" type="xsd:string" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docListItemType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSimpleSectType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="docTitleType" minOccurs="0" />
|
|
||||||
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="1" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="simplesectsep" type="docEmptyType" minOccurs="0"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxSimpleSectKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docVarListEntryType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="term" type="docTitleType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:group name="docVariableListGroup">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="varlistentry" type="docVarListEntryType" />
|
|
||||||
<xsd:element name="listitem" type="docListItemType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:group>
|
|
||||||
|
|
||||||
<xsd:complexType name="docVariableListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:group ref="docVariableListGroup" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docRefTextType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="kindref" type="DoxRefKind" />
|
|
||||||
<xsd:attribute name="external" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTableType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="caption" type="docCaptionType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="rows" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="cols" type="xsd:integer" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docRowType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docEntryType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="thead" type="DoxBool" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docCaptionType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docHeadingType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 -->
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docImageType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="type" type="DoxImageKind" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
<xsd:attribute name="width" type="xsd:string" />
|
|
||||||
<xsd:attribute name="height" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docDotFileType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTocItemType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTocListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docLanguageType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="langid" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxParamListKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamListItem">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="parameterdescription" type="descriptionType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamNameList">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamName" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="direction" type="DoxParamDir" use="optional" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docXRefSectType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="xrefdescription" type="descriptionType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docCopyType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="link" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docCharType">
|
|
||||||
<xsd:attribute name="char" type="DoxCharRange"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docEmptyType"/>
|
|
||||||
|
|
||||||
<!-- Simple types -->
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxBool">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="yes" />
|
|
||||||
<xsd:enumeration value="no" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxGraphRelation">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="include" />
|
|
||||||
<xsd:enumeration value="usage" />
|
|
||||||
<xsd:enumeration value="template-instance" />
|
|
||||||
<xsd:enumeration value="public-inheritance" />
|
|
||||||
<xsd:enumeration value="protected-inheritance" />
|
|
||||||
<xsd:enumeration value="private-inheritance" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxRefKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="compound" />
|
|
||||||
<xsd:enumeration value="member" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxMemberKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="define" />
|
|
||||||
<xsd:enumeration value="property" />
|
|
||||||
<xsd:enumeration value="event" />
|
|
||||||
<xsd:enumeration value="variable" />
|
|
||||||
<xsd:enumeration value="typedef" />
|
|
||||||
<xsd:enumeration value="enum" />
|
|
||||||
<xsd:enumeration value="function" />
|
|
||||||
<xsd:enumeration value="signal" />
|
|
||||||
<xsd:enumeration value="prototype" />
|
|
||||||
<xsd:enumeration value="friend" />
|
|
||||||
<xsd:enumeration value="dcop" />
|
|
||||||
<xsd:enumeration value="slot" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxProtectionKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="public" />
|
|
||||||
<xsd:enumeration value="protected" />
|
|
||||||
<xsd:enumeration value="private" />
|
|
||||||
<xsd:enumeration value="package" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxVirtualKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="non-virtual" />
|
|
||||||
<xsd:enumeration value="virtual" />
|
|
||||||
<xsd:enumeration value="pure-virtual" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxCompoundKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="class" />
|
|
||||||
<xsd:enumeration value="struct" />
|
|
||||||
<xsd:enumeration value="union" />
|
|
||||||
<xsd:enumeration value="interface" />
|
|
||||||
<xsd:enumeration value="protocol" />
|
|
||||||
<xsd:enumeration value="category" />
|
|
||||||
<xsd:enumeration value="exception" />
|
|
||||||
<xsd:enumeration value="file" />
|
|
||||||
<xsd:enumeration value="namespace" />
|
|
||||||
<xsd:enumeration value="group" />
|
|
||||||
<xsd:enumeration value="page" />
|
|
||||||
<xsd:enumeration value="example" />
|
|
||||||
<xsd:enumeration value="dir" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxSectionKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="user-defined" />
|
|
||||||
<xsd:enumeration value="public-type" />
|
|
||||||
<xsd:enumeration value="public-func" />
|
|
||||||
<xsd:enumeration value="public-attrib" />
|
|
||||||
<xsd:enumeration value="public-slot" />
|
|
||||||
<xsd:enumeration value="signal" />
|
|
||||||
<xsd:enumeration value="dcop-func" />
|
|
||||||
<xsd:enumeration value="property" />
|
|
||||||
<xsd:enumeration value="event" />
|
|
||||||
<xsd:enumeration value="public-static-func" />
|
|
||||||
<xsd:enumeration value="public-static-attrib" />
|
|
||||||
<xsd:enumeration value="protected-type" />
|
|
||||||
<xsd:enumeration value="protected-func" />
|
|
||||||
<xsd:enumeration value="protected-attrib" />
|
|
||||||
<xsd:enumeration value="protected-slot" />
|
|
||||||
<xsd:enumeration value="protected-static-func" />
|
|
||||||
<xsd:enumeration value="protected-static-attrib" />
|
|
||||||
<xsd:enumeration value="package-type" />
|
|
||||||
<xsd:enumeration value="package-func" />
|
|
||||||
<xsd:enumeration value="package-attrib" />
|
|
||||||
<xsd:enumeration value="package-static-func" />
|
|
||||||
<xsd:enumeration value="package-static-attrib" />
|
|
||||||
<xsd:enumeration value="private-type" />
|
|
||||||
<xsd:enumeration value="private-func" />
|
|
||||||
<xsd:enumeration value="private-attrib" />
|
|
||||||
<xsd:enumeration value="private-slot" />
|
|
||||||
<xsd:enumeration value="private-static-func" />
|
|
||||||
<xsd:enumeration value="private-static-attrib" />
|
|
||||||
<xsd:enumeration value="friend" />
|
|
||||||
<xsd:enumeration value="related" />
|
|
||||||
<xsd:enumeration value="define" />
|
|
||||||
<xsd:enumeration value="prototype" />
|
|
||||||
<xsd:enumeration value="typedef" />
|
|
||||||
<xsd:enumeration value="enum" />
|
|
||||||
<xsd:enumeration value="func" />
|
|
||||||
<xsd:enumeration value="var" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxHighlightClass">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="comment" />
|
|
||||||
<xsd:enumeration value="normal" />
|
|
||||||
<xsd:enumeration value="preprocessor" />
|
|
||||||
<xsd:enumeration value="keyword" />
|
|
||||||
<xsd:enumeration value="keywordtype" />
|
|
||||||
<xsd:enumeration value="keywordflow" />
|
|
||||||
<xsd:enumeration value="stringliteral" />
|
|
||||||
<xsd:enumeration value="charliteral" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxSimpleSectKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="see" />
|
|
||||||
<xsd:enumeration value="return" />
|
|
||||||
<xsd:enumeration value="author" />
|
|
||||||
<xsd:enumeration value="authors" />
|
|
||||||
<xsd:enumeration value="version" />
|
|
||||||
<xsd:enumeration value="since" />
|
|
||||||
<xsd:enumeration value="date" />
|
|
||||||
<xsd:enumeration value="note" />
|
|
||||||
<xsd:enumeration value="warning" />
|
|
||||||
<xsd:enumeration value="pre" />
|
|
||||||
<xsd:enumeration value="post" />
|
|
||||||
<xsd:enumeration value="invariant" />
|
|
||||||
<xsd:enumeration value="remark" />
|
|
||||||
<xsd:enumeration value="attention" />
|
|
||||||
<xsd:enumeration value="par" />
|
|
||||||
<xsd:enumeration value="rcs" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxVersionNumber">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:pattern value="\d+\.\d+.*" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxImageKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="html" />
|
|
||||||
<xsd:enumeration value="latex" />
|
|
||||||
<xsd:enumeration value="rtf" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxParamListKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="param" />
|
|
||||||
<xsd:enumeration value="retval" />
|
|
||||||
<xsd:enumeration value="exception" />
|
|
||||||
<xsd:enumeration value="templateparam" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxCharRange">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:pattern value="[aeiouncAEIOUNC]" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxParamDir">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="in"/>
|
|
||||||
<xsd:enumeration value="out"/>
|
|
||||||
<xsd:enumeration value="inout"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxAccessor">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="retain"/>
|
|
||||||
<xsd:enumeration value="copy"/>
|
|
||||||
<xsd:enumeration value="assign"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
</xsd:schema>
|
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygenindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="index.xsd" version="1.6.3">
|
|
||||||
<compound refid="classAadvark" kind="class"><name>Aadvark</name>
|
|
||||||
<member refid="classAadvark_1ab79eb58d7bb9d5ddfa5d6f783836cab9" kind="variable"><name>aadvarkness</name></member>
|
|
||||||
<member refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kind="function"><name>print</name></member>
|
|
||||||
<member refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" kind="function"><name>Aadvark</name></member>
|
|
||||||
<member refid="classAadvark_1affd2ada0a85807efcbe26615a848f53e" kind="function"><name>get_aadvarkness</name></member>
|
|
||||||
</compound>
|
|
||||||
<compound refid="aadvark_8cc" kind="file"><name>aadvark.cc</name>
|
|
||||||
<member refid="aadvark_8cc_1acb52858524210ec6dddc3e16d1e52946" kind="function"><name>aadvarky_enough</name></member>
|
|
||||||
<member refid="aadvark_8cc_1ae66f6b31b5ad750f1fe042a706a4e3d4" kind="function"><name>main</name></member>
|
|
||||||
</compound>
|
|
||||||
<compound refid="aadvark_8h" kind="file"><name>aadvark.h</name>
|
|
||||||
<member refid="aadvark_8h_1acb52858524210ec6dddc3e16d1e52946" kind="function"><name>aadvarky_enough</name></member>
|
|
||||||
<member refid="aadvark_8h_1ae66f6b31b5ad750f1fe042a706a4e3d4" kind="function"><name>main</name></member>
|
|
||||||
</compound>
|
|
||||||
</doxygenindex>
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8' ?>
|
|
||||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
|
||||||
<xsd:element name="doxygenindex" type="DoxygenType"/>
|
|
||||||
|
|
||||||
<xsd:complexType name="DoxygenType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="compound" type="CompoundType" minOccurs="0" maxOccurs="unbounded"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="version" type="xsd:string" use="required"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="CompoundType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="name" type="xsd:string"/>
|
|
||||||
<xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" use="required"/>
|
|
||||||
<xsd:attribute name="kind" type="CompoundKind" use="required"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="MemberType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="name" type="xsd:string"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" use="required"/>
|
|
||||||
<xsd:attribute name="kind" type="MemberKind" use="required"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="CompoundKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="class"/>
|
|
||||||
<xsd:enumeration value="struct"/>
|
|
||||||
<xsd:enumeration value="union"/>
|
|
||||||
<xsd:enumeration value="interface"/>
|
|
||||||
<xsd:enumeration value="protocol"/>
|
|
||||||
<xsd:enumeration value="category"/>
|
|
||||||
<xsd:enumeration value="exception"/>
|
|
||||||
<xsd:enumeration value="file"/>
|
|
||||||
<xsd:enumeration value="namespace"/>
|
|
||||||
<xsd:enumeration value="group"/>
|
|
||||||
<xsd:enumeration value="page"/>
|
|
||||||
<xsd:enumeration value="example"/>
|
|
||||||
<xsd:enumeration value="dir"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="MemberKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="define"/>
|
|
||||||
<xsd:enumeration value="property"/>
|
|
||||||
<xsd:enumeration value="event"/>
|
|
||||||
<xsd:enumeration value="variable"/>
|
|
||||||
<xsd:enumeration value="typedef"/>
|
|
||||||
<xsd:enumeration value="enum"/>
|
|
||||||
<xsd:enumeration value="enumvalue"/>
|
|
||||||
<xsd:enumeration value="function"/>
|
|
||||||
<xsd:enumeration value="signal"/>
|
|
||||||
<xsd:enumeration value="prototype"/>
|
|
||||||
<xsd:enumeration value="friend"/>
|
|
||||||
<xsd:enumeration value="dcop"/>
|
|
||||||
<xsd:enumeration value="slot"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
</xsd:schema>
|
|
||||||
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
"""
|
|
||||||
Contains generated files produced by generateDS.py.
|
|
||||||
|
|
||||||
These do the real work of parsing the doxygen xml files but the
|
|
||||||
resultant classes are not very friendly to navigate so the rest of the
|
|
||||||
doxyxml module processes them further.
|
|
||||||
"""
|
|
||||||
@@ -1,503 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
Generated Mon Feb 9 19:08:05 2009 by generateDS.py.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from string import lower as str_lower
|
|
||||||
from xml.dom import minidom
|
|
||||||
from xml.dom import Node
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
import compoundsuper as supermod
|
|
||||||
from compoundsuper import MixedContainer
|
|
||||||
|
|
||||||
|
|
||||||
class DoxygenTypeSub(supermod.DoxygenType):
|
|
||||||
def __init__(self, version=None, compounddef=None):
|
|
||||||
supermod.DoxygenType.__init__(self, version, compounddef)
|
|
||||||
|
|
||||||
def find(self, details):
|
|
||||||
|
|
||||||
return self.compounddef.find(details)
|
|
||||||
|
|
||||||
supermod.DoxygenType.subclass = DoxygenTypeSub
|
|
||||||
# end class DoxygenTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class compounddefTypeSub(supermod.compounddefType):
|
|
||||||
def __init__(self, kind=None, prot=None, id=None, compoundname='', title='', basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None):
|
|
||||||
supermod.compounddefType.__init__(self, kind, prot, id, compoundname, title, basecompoundref, derivedcompoundref, includes, includedby, incdepgraph, invincdepgraph, innerdir, innerfile, innerclass, innernamespace, innerpage, innergroup, templateparamlist, sectiondef, briefdescription, detaileddescription, inheritancegraph, collaborationgraph, programlisting, location, listofallmembers)
|
|
||||||
|
|
||||||
def find(self, details):
|
|
||||||
|
|
||||||
if self.id == details.refid:
|
|
||||||
return self
|
|
||||||
|
|
||||||
for sectiondef in self.sectiondef:
|
|
||||||
result = sectiondef.find(details)
|
|
||||||
if result:
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
supermod.compounddefType.subclass = compounddefTypeSub
|
|
||||||
# end class compounddefTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class listofallmembersTypeSub(supermod.listofallmembersType):
|
|
||||||
def __init__(self, member=None):
|
|
||||||
supermod.listofallmembersType.__init__(self, member)
|
|
||||||
supermod.listofallmembersType.subclass = listofallmembersTypeSub
|
|
||||||
# end class listofallmembersTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class memberRefTypeSub(supermod.memberRefType):
|
|
||||||
def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope='', name=''):
|
|
||||||
supermod.memberRefType.__init__(self, virt, prot, refid, ambiguityscope, scope, name)
|
|
||||||
supermod.memberRefType.subclass = memberRefTypeSub
|
|
||||||
# end class memberRefTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class compoundRefTypeSub(supermod.compoundRefType):
|
|
||||||
def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.compoundRefType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.compoundRefType.subclass = compoundRefTypeSub
|
|
||||||
# end class compoundRefTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class reimplementTypeSub(supermod.reimplementType):
|
|
||||||
def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.reimplementType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.reimplementType.subclass = reimplementTypeSub
|
|
||||||
# end class reimplementTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class incTypeSub(supermod.incType):
|
|
||||||
def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.incType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.incType.subclass = incTypeSub
|
|
||||||
# end class incTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class refTypeSub(supermod.refType):
|
|
||||||
def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.refType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.refType.subclass = refTypeSub
|
|
||||||
# end class refTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class refTextTypeSub(supermod.refTextType):
|
|
||||||
def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.refTextType.__init__(self, mixedclass_, content_)
|
|
||||||
|
|
||||||
supermod.refTextType.subclass = refTextTypeSub
|
|
||||||
# end class refTextTypeSub
|
|
||||||
|
|
||||||
class sectiondefTypeSub(supermod.sectiondefType):
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, kind=None, header='', description=None, memberdef=None):
|
|
||||||
supermod.sectiondefType.__init__(self, kind, header, description, memberdef)
|
|
||||||
|
|
||||||
def find(self, details):
|
|
||||||
|
|
||||||
for memberdef in self.memberdef:
|
|
||||||
if memberdef.id == details.refid:
|
|
||||||
return memberdef
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
supermod.sectiondefType.subclass = sectiondefTypeSub
|
|
||||||
# end class sectiondefTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class memberdefTypeSub(supermod.memberdefType):
|
|
||||||
def __init__(self, initonly=None, kind=None, volatile=None, const=None, raise_=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition='', argsstring='', name='', read='', write='', bitfield='', reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None):
|
|
||||||
supermod.memberdefType.__init__(self, initonly, kind, volatile, const, raise_, virt, readable, prot, explicit, new, final, writable, add, static, remove, sealed, mutable, gettable, inline, settable, id, templateparamlist, type_, definition, argsstring, name, read, write, bitfield, reimplements, reimplementedby, param, enumvalue, initializer, exceptions, briefdescription, detaileddescription, inbodydescription, location, references, referencedby)
|
|
||||||
supermod.memberdefType.subclass = memberdefTypeSub
|
|
||||||
# end class memberdefTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class descriptionTypeSub(supermod.descriptionType):
|
|
||||||
def __init__(self, title='', para=None, sect1=None, internal=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.descriptionType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.descriptionType.subclass = descriptionTypeSub
|
|
||||||
# end class descriptionTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class enumvalueTypeSub(supermod.enumvalueType):
|
|
||||||
def __init__(self, prot=None, id=None, name='', initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.enumvalueType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.enumvalueType.subclass = enumvalueTypeSub
|
|
||||||
# end class enumvalueTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class templateparamlistTypeSub(supermod.templateparamlistType):
|
|
||||||
def __init__(self, param=None):
|
|
||||||
supermod.templateparamlistType.__init__(self, param)
|
|
||||||
supermod.templateparamlistType.subclass = templateparamlistTypeSub
|
|
||||||
# end class templateparamlistTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class paramTypeSub(supermod.paramType):
|
|
||||||
def __init__(self, type_=None, declname='', defname='', array='', defval=None, briefdescription=None):
|
|
||||||
supermod.paramType.__init__(self, type_, declname, defname, array, defval, briefdescription)
|
|
||||||
supermod.paramType.subclass = paramTypeSub
|
|
||||||
# end class paramTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class linkedTextTypeSub(supermod.linkedTextType):
|
|
||||||
def __init__(self, ref=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.linkedTextType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.linkedTextType.subclass = linkedTextTypeSub
|
|
||||||
# end class linkedTextTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class graphTypeSub(supermod.graphType):
|
|
||||||
def __init__(self, node=None):
|
|
||||||
supermod.graphType.__init__(self, node)
|
|
||||||
supermod.graphType.subclass = graphTypeSub
|
|
||||||
# end class graphTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class nodeTypeSub(supermod.nodeType):
|
|
||||||
def __init__(self, id=None, label='', link=None, childnode=None):
|
|
||||||
supermod.nodeType.__init__(self, id, label, link, childnode)
|
|
||||||
supermod.nodeType.subclass = nodeTypeSub
|
|
||||||
# end class nodeTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class childnodeTypeSub(supermod.childnodeType):
|
|
||||||
def __init__(self, relation=None, refid=None, edgelabel=None):
|
|
||||||
supermod.childnodeType.__init__(self, relation, refid, edgelabel)
|
|
||||||
supermod.childnodeType.subclass = childnodeTypeSub
|
|
||||||
# end class childnodeTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class linkTypeSub(supermod.linkType):
|
|
||||||
def __init__(self, refid=None, external=None, valueOf_=''):
|
|
||||||
supermod.linkType.__init__(self, refid, external)
|
|
||||||
supermod.linkType.subclass = linkTypeSub
|
|
||||||
# end class linkTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class listingTypeSub(supermod.listingType):
|
|
||||||
def __init__(self, codeline=None):
|
|
||||||
supermod.listingType.__init__(self, codeline)
|
|
||||||
supermod.listingType.subclass = listingTypeSub
|
|
||||||
# end class listingTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class codelineTypeSub(supermod.codelineType):
|
|
||||||
def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None):
|
|
||||||
supermod.codelineType.__init__(self, external, lineno, refkind, refid, highlight)
|
|
||||||
supermod.codelineType.subclass = codelineTypeSub
|
|
||||||
# end class codelineTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class highlightTypeSub(supermod.highlightType):
|
|
||||||
def __init__(self, class_=None, sp=None, ref=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.highlightType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.highlightType.subclass = highlightTypeSub
|
|
||||||
# end class highlightTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class referenceTypeSub(supermod.referenceType):
|
|
||||||
def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.referenceType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.referenceType.subclass = referenceTypeSub
|
|
||||||
# end class referenceTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class locationTypeSub(supermod.locationType):
|
|
||||||
def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''):
|
|
||||||
supermod.locationType.__init__(self, bodystart, line, bodyend, bodyfile, file)
|
|
||||||
supermod.locationType.subclass = locationTypeSub
|
|
||||||
# end class locationTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docSect1TypeSub(supermod.docSect1Type):
|
|
||||||
def __init__(self, id=None, title='', para=None, sect2=None, internal=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docSect1Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docSect1Type.subclass = docSect1TypeSub
|
|
||||||
# end class docSect1TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docSect2TypeSub(supermod.docSect2Type):
|
|
||||||
def __init__(self, id=None, title='', para=None, sect3=None, internal=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docSect2Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docSect2Type.subclass = docSect2TypeSub
|
|
||||||
# end class docSect2TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docSect3TypeSub(supermod.docSect3Type):
|
|
||||||
def __init__(self, id=None, title='', para=None, sect4=None, internal=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docSect3Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docSect3Type.subclass = docSect3TypeSub
|
|
||||||
# end class docSect3TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docSect4TypeSub(supermod.docSect4Type):
|
|
||||||
def __init__(self, id=None, title='', para=None, internal=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docSect4Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docSect4Type.subclass = docSect4TypeSub
|
|
||||||
# end class docSect4TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docInternalTypeSub(supermod.docInternalType):
|
|
||||||
def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docInternalType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docInternalType.subclass = docInternalTypeSub
|
|
||||||
# end class docInternalTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docInternalS1TypeSub(supermod.docInternalS1Type):
|
|
||||||
def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docInternalS1Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docInternalS1Type.subclass = docInternalS1TypeSub
|
|
||||||
# end class docInternalS1TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docInternalS2TypeSub(supermod.docInternalS2Type):
|
|
||||||
def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docInternalS2Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docInternalS2Type.subclass = docInternalS2TypeSub
|
|
||||||
# end class docInternalS2TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docInternalS3TypeSub(supermod.docInternalS3Type):
|
|
||||||
def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docInternalS3Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docInternalS3Type.subclass = docInternalS3TypeSub
|
|
||||||
# end class docInternalS3TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docInternalS4TypeSub(supermod.docInternalS4Type):
|
|
||||||
def __init__(self, para=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docInternalS4Type.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docInternalS4Type.subclass = docInternalS4TypeSub
|
|
||||||
# end class docInternalS4TypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docURLLinkSub(supermod.docURLLink):
|
|
||||||
def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docURLLink.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docURLLink.subclass = docURLLinkSub
|
|
||||||
# end class docURLLinkSub
|
|
||||||
|
|
||||||
|
|
||||||
class docAnchorTypeSub(supermod.docAnchorType):
|
|
||||||
def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docAnchorType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docAnchorType.subclass = docAnchorTypeSub
|
|
||||||
# end class docAnchorTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docFormulaTypeSub(supermod.docFormulaType):
|
|
||||||
def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docFormulaType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docFormulaType.subclass = docFormulaTypeSub
|
|
||||||
# end class docFormulaTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docIndexEntryTypeSub(supermod.docIndexEntryType):
|
|
||||||
def __init__(self, primaryie='', secondaryie=''):
|
|
||||||
supermod.docIndexEntryType.__init__(self, primaryie, secondaryie)
|
|
||||||
supermod.docIndexEntryType.subclass = docIndexEntryTypeSub
|
|
||||||
# end class docIndexEntryTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docListTypeSub(supermod.docListType):
|
|
||||||
def __init__(self, listitem=None):
|
|
||||||
supermod.docListType.__init__(self, listitem)
|
|
||||||
supermod.docListType.subclass = docListTypeSub
|
|
||||||
# end class docListTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docListItemTypeSub(supermod.docListItemType):
|
|
||||||
def __init__(self, para=None):
|
|
||||||
supermod.docListItemType.__init__(self, para)
|
|
||||||
supermod.docListItemType.subclass = docListItemTypeSub
|
|
||||||
# end class docListItemTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docSimpleSectTypeSub(supermod.docSimpleSectType):
|
|
||||||
def __init__(self, kind=None, title=None, para=None):
|
|
||||||
supermod.docSimpleSectType.__init__(self, kind, title, para)
|
|
||||||
supermod.docSimpleSectType.subclass = docSimpleSectTypeSub
|
|
||||||
# end class docSimpleSectTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docVarListEntryTypeSub(supermod.docVarListEntryType):
|
|
||||||
def __init__(self, term=None):
|
|
||||||
supermod.docVarListEntryType.__init__(self, term)
|
|
||||||
supermod.docVarListEntryType.subclass = docVarListEntryTypeSub
|
|
||||||
# end class docVarListEntryTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docRefTextTypeSub(supermod.docRefTextType):
|
|
||||||
def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docRefTextType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docRefTextType.subclass = docRefTextTypeSub
|
|
||||||
# end class docRefTextTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docTableTypeSub(supermod.docTableType):
|
|
||||||
def __init__(self, rows=None, cols=None, row=None, caption=None):
|
|
||||||
supermod.docTableType.__init__(self, rows, cols, row, caption)
|
|
||||||
supermod.docTableType.subclass = docTableTypeSub
|
|
||||||
# end class docTableTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docRowTypeSub(supermod.docRowType):
|
|
||||||
def __init__(self, entry=None):
|
|
||||||
supermod.docRowType.__init__(self, entry)
|
|
||||||
supermod.docRowType.subclass = docRowTypeSub
|
|
||||||
# end class docRowTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docEntryTypeSub(supermod.docEntryType):
|
|
||||||
def __init__(self, thead=None, para=None):
|
|
||||||
supermod.docEntryType.__init__(self, thead, para)
|
|
||||||
supermod.docEntryType.subclass = docEntryTypeSub
|
|
||||||
# end class docEntryTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docHeadingTypeSub(supermod.docHeadingType):
|
|
||||||
def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docHeadingType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docHeadingType.subclass = docHeadingTypeSub
|
|
||||||
# end class docHeadingTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docImageTypeSub(supermod.docImageType):
|
|
||||||
def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docImageType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docImageType.subclass = docImageTypeSub
|
|
||||||
# end class docImageTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docDotFileTypeSub(supermod.docDotFileType):
|
|
||||||
def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docDotFileType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docDotFileType.subclass = docDotFileTypeSub
|
|
||||||
# end class docDotFileTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docTocItemTypeSub(supermod.docTocItemType):
|
|
||||||
def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None):
|
|
||||||
supermod.docTocItemType.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docTocItemType.subclass = docTocItemTypeSub
|
|
||||||
# end class docTocItemTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docTocListTypeSub(supermod.docTocListType):
|
|
||||||
def __init__(self, tocitem=None):
|
|
||||||
supermod.docTocListType.__init__(self, tocitem)
|
|
||||||
supermod.docTocListType.subclass = docTocListTypeSub
|
|
||||||
# end class docTocListTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docLanguageTypeSub(supermod.docLanguageType):
|
|
||||||
def __init__(self, langid=None, para=None):
|
|
||||||
supermod.docLanguageType.__init__(self, langid, para)
|
|
||||||
supermod.docLanguageType.subclass = docLanguageTypeSub
|
|
||||||
# end class docLanguageTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docParamListTypeSub(supermod.docParamListType):
|
|
||||||
def __init__(self, kind=None, parameteritem=None):
|
|
||||||
supermod.docParamListType.__init__(self, kind, parameteritem)
|
|
||||||
supermod.docParamListType.subclass = docParamListTypeSub
|
|
||||||
# end class docParamListTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docParamListItemSub(supermod.docParamListItem):
|
|
||||||
def __init__(self, parameternamelist=None, parameterdescription=None):
|
|
||||||
supermod.docParamListItem.__init__(self, parameternamelist, parameterdescription)
|
|
||||||
supermod.docParamListItem.subclass = docParamListItemSub
|
|
||||||
# end class docParamListItemSub
|
|
||||||
|
|
||||||
|
|
||||||
class docParamNameListSub(supermod.docParamNameList):
|
|
||||||
def __init__(self, parametername=None):
|
|
||||||
supermod.docParamNameList.__init__(self, parametername)
|
|
||||||
supermod.docParamNameList.subclass = docParamNameListSub
|
|
||||||
# end class docParamNameListSub
|
|
||||||
|
|
||||||
|
|
||||||
class docParamNameSub(supermod.docParamName):
|
|
||||||
def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None):
|
|
||||||
supermod.docParamName.__init__(self, mixedclass_, content_)
|
|
||||||
supermod.docParamName.subclass = docParamNameSub
|
|
||||||
# end class docParamNameSub
|
|
||||||
|
|
||||||
|
|
||||||
class docXRefSectTypeSub(supermod.docXRefSectType):
|
|
||||||
def __init__(self, id=None, xreftitle=None, xrefdescription=None):
|
|
||||||
supermod.docXRefSectType.__init__(self, id, xreftitle, xrefdescription)
|
|
||||||
supermod.docXRefSectType.subclass = docXRefSectTypeSub
|
|
||||||
# end class docXRefSectTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docCopyTypeSub(supermod.docCopyType):
|
|
||||||
def __init__(self, link=None, para=None, sect1=None, internal=None):
|
|
||||||
supermod.docCopyType.__init__(self, link, para, sect1, internal)
|
|
||||||
supermod.docCopyType.subclass = docCopyTypeSub
|
|
||||||
# end class docCopyTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class docCharTypeSub(supermod.docCharType):
|
|
||||||
def __init__(self, char=None, valueOf_=''):
|
|
||||||
supermod.docCharType.__init__(self, char)
|
|
||||||
supermod.docCharType.subclass = docCharTypeSub
|
|
||||||
# end class docCharTypeSub
|
|
||||||
|
|
||||||
class docParaTypeSub(supermod.docParaType):
|
|
||||||
def __init__(self, char=None, valueOf_=''):
|
|
||||||
supermod.docParaType.__init__(self, char)
|
|
||||||
|
|
||||||
self.parameterlist = []
|
|
||||||
self.simplesects = []
|
|
||||||
self.content = []
|
|
||||||
|
|
||||||
def buildChildren(self, child_, nodeName_):
|
|
||||||
supermod.docParaType.buildChildren(self, child_, nodeName_)
|
|
||||||
|
|
||||||
if child_.nodeType == Node.TEXT_NODE:
|
|
||||||
obj_ = self.mixedclass_(MixedContainer.CategoryText,
|
|
||||||
MixedContainer.TypeNone, '', child_.nodeValue)
|
|
||||||
self.content.append(obj_)
|
|
||||||
elif child_.nodeType == Node.ELEMENT_NODE and \
|
|
||||||
nodeName_ == "ref":
|
|
||||||
obj_ = supermod.docRefTextType.factory()
|
|
||||||
obj_.build(child_)
|
|
||||||
self.content.append(obj_)
|
|
||||||
elif child_.nodeType == Node.ELEMENT_NODE and \
|
|
||||||
nodeName_ == 'parameterlist':
|
|
||||||
obj_ = supermod.docParamListType.factory()
|
|
||||||
obj_.build(child_)
|
|
||||||
self.parameterlist.append(obj_)
|
|
||||||
elif child_.nodeType == Node.ELEMENT_NODE and \
|
|
||||||
nodeName_ == 'simplesect':
|
|
||||||
obj_ = supermod.docSimpleSectType.factory()
|
|
||||||
obj_.build(child_)
|
|
||||||
self.simplesects.append(obj_)
|
|
||||||
|
|
||||||
|
|
||||||
supermod.docParaType.subclass = docParaTypeSub
|
|
||||||
# end class docParaTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def parse(inFilename):
|
|
||||||
doc = minidom.parse(inFilename)
|
|
||||||
rootNode = doc.documentElement
|
|
||||||
rootObj = supermod.DoxygenType.factory()
|
|
||||||
rootObj.build(rootNode)
|
|
||||||
return rootObj
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,77 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
Generated Mon Feb 9 19:08:05 2009 by generateDS.py.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from xml.dom import minidom
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import compound
|
|
||||||
|
|
||||||
import indexsuper as supermod
|
|
||||||
|
|
||||||
class DoxygenTypeSub(supermod.DoxygenType):
|
|
||||||
def __init__(self, version=None, compound=None):
|
|
||||||
supermod.DoxygenType.__init__(self, version, compound)
|
|
||||||
|
|
||||||
def find_compounds_and_members(self, details):
|
|
||||||
"""
|
|
||||||
Returns a list of all compounds and their members which match details
|
|
||||||
"""
|
|
||||||
|
|
||||||
results = []
|
|
||||||
for compound in self.compound:
|
|
||||||
members = compound.find_members(details)
|
|
||||||
if members:
|
|
||||||
results.append([compound, members])
|
|
||||||
else:
|
|
||||||
if details.match(compound):
|
|
||||||
results.append([compound, []])
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
supermod.DoxygenType.subclass = DoxygenTypeSub
|
|
||||||
# end class DoxygenTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class CompoundTypeSub(supermod.CompoundType):
|
|
||||||
def __init__(self, kind=None, refid=None, name='', member=None):
|
|
||||||
supermod.CompoundType.__init__(self, kind, refid, name, member)
|
|
||||||
|
|
||||||
def find_members(self, details):
|
|
||||||
"""
|
|
||||||
Returns a list of all members which match details
|
|
||||||
"""
|
|
||||||
|
|
||||||
results = []
|
|
||||||
|
|
||||||
for member in self.member:
|
|
||||||
if details.match(member):
|
|
||||||
results.append(member)
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
supermod.CompoundType.subclass = CompoundTypeSub
|
|
||||||
# end class CompoundTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
class MemberTypeSub(supermod.MemberType):
|
|
||||||
|
|
||||||
def __init__(self, kind=None, refid=None, name=''):
|
|
||||||
supermod.MemberType.__init__(self, kind, refid, name)
|
|
||||||
|
|
||||||
supermod.MemberType.subclass = MemberTypeSub
|
|
||||||
# end class MemberTypeSub
|
|
||||||
|
|
||||||
|
|
||||||
def parse(inFilename):
|
|
||||||
|
|
||||||
doc = minidom.parse(inFilename)
|
|
||||||
rootNode = doc.documentElement
|
|
||||||
rootObj = supermod.DoxygenType.factory()
|
|
||||||
rootObj.build(rootNode)
|
|
||||||
|
|
||||||
return rootObj
|
|
||||||
|
|
||||||
@@ -1,523 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
#
|
|
||||||
# Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
|
|
||||||
#
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import getopt
|
|
||||||
from string import lower as str_lower
|
|
||||||
from xml.dom import minidom
|
|
||||||
from xml.dom import Node
|
|
||||||
|
|
||||||
#
|
|
||||||
# User methods
|
|
||||||
#
|
|
||||||
# Calls to the methods in these classes are generated by generateDS.py.
|
|
||||||
# You can replace these methods by re-implementing the following class
|
|
||||||
# in a module named generatedssuper.py.
|
|
||||||
|
|
||||||
try:
|
|
||||||
from generatedssuper import GeneratedsSuper
|
|
||||||
except ImportError, exp:
|
|
||||||
|
|
||||||
class GeneratedsSuper:
|
|
||||||
def format_string(self, input_data, input_name=''):
|
|
||||||
return input_data
|
|
||||||
def format_integer(self, input_data, input_name=''):
|
|
||||||
return '%d' % input_data
|
|
||||||
def format_float(self, input_data, input_name=''):
|
|
||||||
return '%f' % input_data
|
|
||||||
def format_double(self, input_data, input_name=''):
|
|
||||||
return '%e' % input_data
|
|
||||||
def format_boolean(self, input_data, input_name=''):
|
|
||||||
return '%s' % input_data
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# If you have installed IPython you can uncomment and use the following.
|
|
||||||
# IPython is available from http://ipython.scipy.org/.
|
|
||||||
#
|
|
||||||
|
|
||||||
## from IPython.Shell import IPShellEmbed
|
|
||||||
## args = ''
|
|
||||||
## ipshell = IPShellEmbed(args,
|
|
||||||
## banner = 'Dropping into IPython',
|
|
||||||
## exit_msg = 'Leaving Interpreter, back to program.')
|
|
||||||
|
|
||||||
# Then use the following line where and when you want to drop into the
|
|
||||||
# IPython shell:
|
|
||||||
# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')
|
|
||||||
|
|
||||||
#
|
|
||||||
# Globals
|
|
||||||
#
|
|
||||||
|
|
||||||
ExternalEncoding = 'ascii'
|
|
||||||
|
|
||||||
#
|
|
||||||
# Support/utility functions.
|
|
||||||
#
|
|
||||||
|
|
||||||
def showIndent(outfile, level):
|
|
||||||
for idx in range(level):
|
|
||||||
outfile.write(' ')
|
|
||||||
|
|
||||||
def quote_xml(inStr):
|
|
||||||
s1 = (isinstance(inStr, basestring) and inStr or
|
|
||||||
'%s' % inStr)
|
|
||||||
s1 = s1.replace('&', '&')
|
|
||||||
s1 = s1.replace('<', '<')
|
|
||||||
s1 = s1.replace('>', '>')
|
|
||||||
return s1
|
|
||||||
|
|
||||||
def quote_attrib(inStr):
|
|
||||||
s1 = (isinstance(inStr, basestring) and inStr or
|
|
||||||
'%s' % inStr)
|
|
||||||
s1 = s1.replace('&', '&')
|
|
||||||
s1 = s1.replace('<', '<')
|
|
||||||
s1 = s1.replace('>', '>')
|
|
||||||
if '"' in s1:
|
|
||||||
if "'" in s1:
|
|
||||||
s1 = '"%s"' % s1.replace('"', """)
|
|
||||||
else:
|
|
||||||
s1 = "'%s'" % s1
|
|
||||||
else:
|
|
||||||
s1 = '"%s"' % s1
|
|
||||||
return s1
|
|
||||||
|
|
||||||
def quote_python(inStr):
|
|
||||||
s1 = inStr
|
|
||||||
if s1.find("'") == -1:
|
|
||||||
if s1.find('\n') == -1:
|
|
||||||
return "'%s'" % s1
|
|
||||||
else:
|
|
||||||
return "'''%s'''" % s1
|
|
||||||
else:
|
|
||||||
if s1.find('"') != -1:
|
|
||||||
s1 = s1.replace('"', '\\"')
|
|
||||||
if s1.find('\n') == -1:
|
|
||||||
return '"%s"' % s1
|
|
||||||
else:
|
|
||||||
return '"""%s"""' % s1
|
|
||||||
|
|
||||||
|
|
||||||
class MixedContainer:
|
|
||||||
# Constants for category:
|
|
||||||
CategoryNone = 0
|
|
||||||
CategoryText = 1
|
|
||||||
CategorySimple = 2
|
|
||||||
CategoryComplex = 3
|
|
||||||
# Constants for content_type:
|
|
||||||
TypeNone = 0
|
|
||||||
TypeText = 1
|
|
||||||
TypeString = 2
|
|
||||||
TypeInteger = 3
|
|
||||||
TypeFloat = 4
|
|
||||||
TypeDecimal = 5
|
|
||||||
TypeDouble = 6
|
|
||||||
TypeBoolean = 7
|
|
||||||
def __init__(self, category, content_type, name, value):
|
|
||||||
self.category = category
|
|
||||||
self.content_type = content_type
|
|
||||||
self.name = name
|
|
||||||
self.value = value
|
|
||||||
def getCategory(self):
|
|
||||||
return self.category
|
|
||||||
def getContenttype(self, content_type):
|
|
||||||
return self.content_type
|
|
||||||
def getValue(self):
|
|
||||||
return self.value
|
|
||||||
def getName(self):
|
|
||||||
return self.name
|
|
||||||
def export(self, outfile, level, name, namespace):
|
|
||||||
if self.category == MixedContainer.CategoryText:
|
|
||||||
outfile.write(self.value)
|
|
||||||
elif self.category == MixedContainer.CategorySimple:
|
|
||||||
self.exportSimple(outfile, level, name)
|
|
||||||
else: # category == MixedContainer.CategoryComplex
|
|
||||||
self.value.export(outfile, level, namespace,name)
|
|
||||||
def exportSimple(self, outfile, level, name):
|
|
||||||
if self.content_type == MixedContainer.TypeString:
|
|
||||||
outfile.write('<%s>%s</%s>' % (self.name, self.value, self.name))
|
|
||||||
elif self.content_type == MixedContainer.TypeInteger or \
|
|
||||||
self.content_type == MixedContainer.TypeBoolean:
|
|
||||||
outfile.write('<%s>%d</%s>' % (self.name, self.value, self.name))
|
|
||||||
elif self.content_type == MixedContainer.TypeFloat or \
|
|
||||||
self.content_type == MixedContainer.TypeDecimal:
|
|
||||||
outfile.write('<%s>%f</%s>' % (self.name, self.value, self.name))
|
|
||||||
elif self.content_type == MixedContainer.TypeDouble:
|
|
||||||
outfile.write('<%s>%g</%s>' % (self.name, self.value, self.name))
|
|
||||||
def exportLiteral(self, outfile, level, name):
|
|
||||||
if self.category == MixedContainer.CategoryText:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \
|
|
||||||
(self.category, self.content_type, self.name, self.value))
|
|
||||||
elif self.category == MixedContainer.CategorySimple:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \
|
|
||||||
(self.category, self.content_type, self.name, self.value))
|
|
||||||
else: # category == MixedContainer.CategoryComplex
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('MixedContainer(%d, %d, "%s",\n' % \
|
|
||||||
(self.category, self.content_type, self.name,))
|
|
||||||
self.value.exportLiteral(outfile, level + 1)
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write(')\n')
|
|
||||||
|
|
||||||
|
|
||||||
class _MemberSpec(object):
|
|
||||||
def __init__(self, name='', data_type='', container=0):
|
|
||||||
self.name = name
|
|
||||||
self.data_type = data_type
|
|
||||||
self.container = container
|
|
||||||
def set_name(self, name): self.name = name
|
|
||||||
def get_name(self): return self.name
|
|
||||||
def set_data_type(self, data_type): self.data_type = data_type
|
|
||||||
def get_data_type(self): return self.data_type
|
|
||||||
def set_container(self, container): self.container = container
|
|
||||||
def get_container(self): return self.container
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Data representation classes.
|
|
||||||
#
|
|
||||||
|
|
||||||
class DoxygenType(GeneratedsSuper):
|
|
||||||
subclass = None
|
|
||||||
superclass = None
|
|
||||||
def __init__(self, version=None, compound=None):
|
|
||||||
self.version = version
|
|
||||||
if compound is None:
|
|
||||||
self.compound = []
|
|
||||||
else:
|
|
||||||
self.compound = compound
|
|
||||||
def factory(*args_, **kwargs_):
|
|
||||||
if DoxygenType.subclass:
|
|
||||||
return DoxygenType.subclass(*args_, **kwargs_)
|
|
||||||
else:
|
|
||||||
return DoxygenType(*args_, **kwargs_)
|
|
||||||
factory = staticmethod(factory)
|
|
||||||
def get_compound(self): return self.compound
|
|
||||||
def set_compound(self, compound): self.compound = compound
|
|
||||||
def add_compound(self, value): self.compound.append(value)
|
|
||||||
def insert_compound(self, index, value): self.compound[index] = value
|
|
||||||
def get_version(self): return self.version
|
|
||||||
def set_version(self, version): self.version = version
|
|
||||||
def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''):
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, ))
|
|
||||||
self.exportAttributes(outfile, level, namespace_, name_='DoxygenType')
|
|
||||||
if self.hasContent_():
|
|
||||||
outfile.write('>\n')
|
|
||||||
self.exportChildren(outfile, level + 1, namespace_, name_)
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('</%s%s>\n' % (namespace_, name_))
|
|
||||||
else:
|
|
||||||
outfile.write(' />\n')
|
|
||||||
def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'):
|
|
||||||
outfile.write(' version=%s' % (self.format_string(quote_attrib(self.version).encode(ExternalEncoding), input_name='version'), ))
|
|
||||||
def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'):
|
|
||||||
for compound_ in self.compound:
|
|
||||||
compound_.export(outfile, level, namespace_, name_='compound')
|
|
||||||
def hasContent_(self):
|
|
||||||
if (
|
|
||||||
self.compound is not None
|
|
||||||
):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
def exportLiteral(self, outfile, level, name_='DoxygenType'):
|
|
||||||
level += 1
|
|
||||||
self.exportLiteralAttributes(outfile, level, name_)
|
|
||||||
if self.hasContent_():
|
|
||||||
self.exportLiteralChildren(outfile, level, name_)
|
|
||||||
def exportLiteralAttributes(self, outfile, level, name_):
|
|
||||||
if self.version is not None:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('version = %s,\n' % (self.version,))
|
|
||||||
def exportLiteralChildren(self, outfile, level, name_):
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('compound=[\n')
|
|
||||||
level += 1
|
|
||||||
for compound in self.compound:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('model_.compound(\n')
|
|
||||||
compound.exportLiteral(outfile, level, name_='compound')
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('),\n')
|
|
||||||
level -= 1
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('],\n')
|
|
||||||
def build(self, node_):
|
|
||||||
attrs = node_.attributes
|
|
||||||
self.buildAttributes(attrs)
|
|
||||||
for child_ in node_.childNodes:
|
|
||||||
nodeName_ = child_.nodeName.split(':')[-1]
|
|
||||||
self.buildChildren(child_, nodeName_)
|
|
||||||
def buildAttributes(self, attrs):
|
|
||||||
if attrs.get('version'):
|
|
||||||
self.version = attrs.get('version').value
|
|
||||||
def buildChildren(self, child_, nodeName_):
|
|
||||||
if child_.nodeType == Node.ELEMENT_NODE and \
|
|
||||||
nodeName_ == 'compound':
|
|
||||||
obj_ = CompoundType.factory()
|
|
||||||
obj_.build(child_)
|
|
||||||
self.compound.append(obj_)
|
|
||||||
# end class DoxygenType
|
|
||||||
|
|
||||||
|
|
||||||
class CompoundType(GeneratedsSuper):
|
|
||||||
subclass = None
|
|
||||||
superclass = None
|
|
||||||
def __init__(self, kind=None, refid=None, name=None, member=None):
|
|
||||||
self.kind = kind
|
|
||||||
self.refid = refid
|
|
||||||
self.name = name
|
|
||||||
if member is None:
|
|
||||||
self.member = []
|
|
||||||
else:
|
|
||||||
self.member = member
|
|
||||||
def factory(*args_, **kwargs_):
|
|
||||||
if CompoundType.subclass:
|
|
||||||
return CompoundType.subclass(*args_, **kwargs_)
|
|
||||||
else:
|
|
||||||
return CompoundType(*args_, **kwargs_)
|
|
||||||
factory = staticmethod(factory)
|
|
||||||
def get_name(self): return self.name
|
|
||||||
def set_name(self, name): self.name = name
|
|
||||||
def get_member(self): return self.member
|
|
||||||
def set_member(self, member): self.member = member
|
|
||||||
def add_member(self, value): self.member.append(value)
|
|
||||||
def insert_member(self, index, value): self.member[index] = value
|
|
||||||
def get_kind(self): return self.kind
|
|
||||||
def set_kind(self, kind): self.kind = kind
|
|
||||||
def get_refid(self): return self.refid
|
|
||||||
def set_refid(self, refid): self.refid = refid
|
|
||||||
def export(self, outfile, level, namespace_='', name_='CompoundType', namespacedef_=''):
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, ))
|
|
||||||
self.exportAttributes(outfile, level, namespace_, name_='CompoundType')
|
|
||||||
if self.hasContent_():
|
|
||||||
outfile.write('>\n')
|
|
||||||
self.exportChildren(outfile, level + 1, namespace_, name_)
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('</%s%s>\n' % (namespace_, name_))
|
|
||||||
else:
|
|
||||||
outfile.write(' />\n')
|
|
||||||
def exportAttributes(self, outfile, level, namespace_='', name_='CompoundType'):
|
|
||||||
outfile.write(' kind=%s' % (quote_attrib(self.kind), ))
|
|
||||||
outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), ))
|
|
||||||
def exportChildren(self, outfile, level, namespace_='', name_='CompoundType'):
|
|
||||||
if self.name is not None:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('<%sname>%s</%sname>\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_))
|
|
||||||
for member_ in self.member:
|
|
||||||
member_.export(outfile, level, namespace_, name_='member')
|
|
||||||
def hasContent_(self):
|
|
||||||
if (
|
|
||||||
self.name is not None or
|
|
||||||
self.member is not None
|
|
||||||
):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
def exportLiteral(self, outfile, level, name_='CompoundType'):
|
|
||||||
level += 1
|
|
||||||
self.exportLiteralAttributes(outfile, level, name_)
|
|
||||||
if self.hasContent_():
|
|
||||||
self.exportLiteralChildren(outfile, level, name_)
|
|
||||||
def exportLiteralAttributes(self, outfile, level, name_):
|
|
||||||
if self.kind is not None:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('kind = "%s",\n' % (self.kind,))
|
|
||||||
if self.refid is not None:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('refid = %s,\n' % (self.refid,))
|
|
||||||
def exportLiteralChildren(self, outfile, level, name_):
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding))
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('member=[\n')
|
|
||||||
level += 1
|
|
||||||
for member in self.member:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('model_.member(\n')
|
|
||||||
member.exportLiteral(outfile, level, name_='member')
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('),\n')
|
|
||||||
level -= 1
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('],\n')
|
|
||||||
def build(self, node_):
|
|
||||||
attrs = node_.attributes
|
|
||||||
self.buildAttributes(attrs)
|
|
||||||
for child_ in node_.childNodes:
|
|
||||||
nodeName_ = child_.nodeName.split(':')[-1]
|
|
||||||
self.buildChildren(child_, nodeName_)
|
|
||||||
def buildAttributes(self, attrs):
|
|
||||||
if attrs.get('kind'):
|
|
||||||
self.kind = attrs.get('kind').value
|
|
||||||
if attrs.get('refid'):
|
|
||||||
self.refid = attrs.get('refid').value
|
|
||||||
def buildChildren(self, child_, nodeName_):
|
|
||||||
if child_.nodeType == Node.ELEMENT_NODE and \
|
|
||||||
nodeName_ == 'name':
|
|
||||||
name_ = ''
|
|
||||||
for text__content_ in child_.childNodes:
|
|
||||||
name_ += text__content_.nodeValue
|
|
||||||
self.name = name_
|
|
||||||
elif child_.nodeType == Node.ELEMENT_NODE and \
|
|
||||||
nodeName_ == 'member':
|
|
||||||
obj_ = MemberType.factory()
|
|
||||||
obj_.build(child_)
|
|
||||||
self.member.append(obj_)
|
|
||||||
# end class CompoundType
|
|
||||||
|
|
||||||
|
|
||||||
class MemberType(GeneratedsSuper):
|
|
||||||
subclass = None
|
|
||||||
superclass = None
|
|
||||||
def __init__(self, kind=None, refid=None, name=None):
|
|
||||||
self.kind = kind
|
|
||||||
self.refid = refid
|
|
||||||
self.name = name
|
|
||||||
def factory(*args_, **kwargs_):
|
|
||||||
if MemberType.subclass:
|
|
||||||
return MemberType.subclass(*args_, **kwargs_)
|
|
||||||
else:
|
|
||||||
return MemberType(*args_, **kwargs_)
|
|
||||||
factory = staticmethod(factory)
|
|
||||||
def get_name(self): return self.name
|
|
||||||
def set_name(self, name): self.name = name
|
|
||||||
def get_kind(self): return self.kind
|
|
||||||
def set_kind(self, kind): self.kind = kind
|
|
||||||
def get_refid(self): return self.refid
|
|
||||||
def set_refid(self, refid): self.refid = refid
|
|
||||||
def export(self, outfile, level, namespace_='', name_='MemberType', namespacedef_=''):
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, ))
|
|
||||||
self.exportAttributes(outfile, level, namespace_, name_='MemberType')
|
|
||||||
if self.hasContent_():
|
|
||||||
outfile.write('>\n')
|
|
||||||
self.exportChildren(outfile, level + 1, namespace_, name_)
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('</%s%s>\n' % (namespace_, name_))
|
|
||||||
else:
|
|
||||||
outfile.write(' />\n')
|
|
||||||
def exportAttributes(self, outfile, level, namespace_='', name_='MemberType'):
|
|
||||||
outfile.write(' kind=%s' % (quote_attrib(self.kind), ))
|
|
||||||
outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), ))
|
|
||||||
def exportChildren(self, outfile, level, namespace_='', name_='MemberType'):
|
|
||||||
if self.name is not None:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('<%sname>%s</%sname>\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_))
|
|
||||||
def hasContent_(self):
|
|
||||||
if (
|
|
||||||
self.name is not None
|
|
||||||
):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
def exportLiteral(self, outfile, level, name_='MemberType'):
|
|
||||||
level += 1
|
|
||||||
self.exportLiteralAttributes(outfile, level, name_)
|
|
||||||
if self.hasContent_():
|
|
||||||
self.exportLiteralChildren(outfile, level, name_)
|
|
||||||
def exportLiteralAttributes(self, outfile, level, name_):
|
|
||||||
if self.kind is not None:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('kind = "%s",\n' % (self.kind,))
|
|
||||||
if self.refid is not None:
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('refid = %s,\n' % (self.refid,))
|
|
||||||
def exportLiteralChildren(self, outfile, level, name_):
|
|
||||||
showIndent(outfile, level)
|
|
||||||
outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding))
|
|
||||||
def build(self, node_):
|
|
||||||
attrs = node_.attributes
|
|
||||||
self.buildAttributes(attrs)
|
|
||||||
for child_ in node_.childNodes:
|
|
||||||
nodeName_ = child_.nodeName.split(':')[-1]
|
|
||||||
self.buildChildren(child_, nodeName_)
|
|
||||||
def buildAttributes(self, attrs):
|
|
||||||
if attrs.get('kind'):
|
|
||||||
self.kind = attrs.get('kind').value
|
|
||||||
if attrs.get('refid'):
|
|
||||||
self.refid = attrs.get('refid').value
|
|
||||||
def buildChildren(self, child_, nodeName_):
|
|
||||||
if child_.nodeType == Node.ELEMENT_NODE and \
|
|
||||||
nodeName_ == 'name':
|
|
||||||
name_ = ''
|
|
||||||
for text__content_ in child_.childNodes:
|
|
||||||
name_ += text__content_.nodeValue
|
|
||||||
self.name = name_
|
|
||||||
# end class MemberType
|
|
||||||
|
|
||||||
|
|
||||||
USAGE_TEXT = """
|
|
||||||
Usage: python <Parser>.py [ -s ] <in_xml_file>
|
|
||||||
Options:
|
|
||||||
-s Use the SAX parser, not the minidom parser.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def usage():
|
|
||||||
print USAGE_TEXT
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
def parse(inFileName):
|
|
||||||
doc = minidom.parse(inFileName)
|
|
||||||
rootNode = doc.documentElement
|
|
||||||
rootObj = DoxygenType.factory()
|
|
||||||
rootObj.build(rootNode)
|
|
||||||
# Enable Python to collect the space used by the DOM.
|
|
||||||
doc = None
|
|
||||||
sys.stdout.write('<?xml version="1.0" ?>\n')
|
|
||||||
rootObj.export(sys.stdout, 0, name_="doxygenindex",
|
|
||||||
namespacedef_='')
|
|
||||||
return rootObj
|
|
||||||
|
|
||||||
|
|
||||||
def parseString(inString):
|
|
||||||
doc = minidom.parseString(inString)
|
|
||||||
rootNode = doc.documentElement
|
|
||||||
rootObj = DoxygenType.factory()
|
|
||||||
rootObj.build(rootNode)
|
|
||||||
# Enable Python to collect the space used by the DOM.
|
|
||||||
doc = None
|
|
||||||
sys.stdout.write('<?xml version="1.0" ?>\n')
|
|
||||||
rootObj.export(sys.stdout, 0, name_="doxygenindex",
|
|
||||||
namespacedef_='')
|
|
||||||
return rootObj
|
|
||||||
|
|
||||||
|
|
||||||
def parseLiteral(inFileName):
|
|
||||||
doc = minidom.parse(inFileName)
|
|
||||||
rootNode = doc.documentElement
|
|
||||||
rootObj = DoxygenType.factory()
|
|
||||||
rootObj.build(rootNode)
|
|
||||||
# Enable Python to collect the space used by the DOM.
|
|
||||||
doc = None
|
|
||||||
sys.stdout.write('from index import *\n\n')
|
|
||||||
sys.stdout.write('rootObj = doxygenindex(\n')
|
|
||||||
rootObj.exportLiteral(sys.stdout, 0, name_="doxygenindex")
|
|
||||||
sys.stdout.write(')\n')
|
|
||||||
return rootObj
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
args = sys.argv[1:]
|
|
||||||
if len(args) == 1:
|
|
||||||
parse(args[0])
|
|
||||||
else:
|
|
||||||
usage()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
#import pdb
|
|
||||||
#pdb.run('main()')
|
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# 1st parameter is absolute path to component source directory
|
|
||||||
# 2nd parameter is absolute path to component build directory
|
|
||||||
# 3rd parameter is path to Python QA directory
|
|
||||||
|
|
||||||
# Note: calling master run_tests.sh in gnuradio core is not strictly
|
|
||||||
# correct, as it will result in a partially bogus PYTHONPATH, but it
|
|
||||||
# does make the correct paths in the second half so all is well.
|
|
||||||
|
|
||||||
@PYTHON@ @srcdir@/__init__.py
|
|
||||||
|
|
||||||
# @top_builddir@/run_tests.sh \
|
|
||||||
# @abs_top_srcdir@/gnuradio-core \
|
|
||||||
# @abs_top_builddir@/gnuradio-core \
|
|
||||||
# @srcdir@
|
|
||||||
@@ -1,56 +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.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
Utilities for extracting text from generated classes.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def is_string(txt):
|
|
||||||
if isinstance(txt, str):
|
|
||||||
return True
|
|
||||||
try:
|
|
||||||
if isinstance(txt, unicode):
|
|
||||||
return True
|
|
||||||
except NameError:
|
|
||||||
pass
|
|
||||||
return False
|
|
||||||
|
|
||||||
def description(obj):
|
|
||||||
if obj is None:
|
|
||||||
return None
|
|
||||||
return description_bit(obj).strip()
|
|
||||||
|
|
||||||
def description_bit(obj):
|
|
||||||
if hasattr(obj, 'content'):
|
|
||||||
contents = [description_bit(item) for item in obj.content]
|
|
||||||
result = ''.join(contents)
|
|
||||||
elif hasattr(obj, 'content_'):
|
|
||||||
contents = [description_bit(item) for item in obj.content_]
|
|
||||||
result = ''.join(contents)
|
|
||||||
elif hasattr(obj, 'value'):
|
|
||||||
result = description_bit(obj.value)
|
|
||||||
elif is_string(obj):
|
|
||||||
return obj
|
|
||||||
else:
|
|
||||||
raise StandardError('Expecting a string or something with content, content_ or value attribute')
|
|
||||||
# If this bit is a paragraph then add one some line breaks.
|
|
||||||
if hasattr(obj, 'name') and obj.name == 'para':
|
|
||||||
result += "\n\n"
|
|
||||||
return result
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
/*!
|
|
||||||
* \defgroup block GNU Radio HOWTO C++ Signal Processing Blocks
|
|
||||||
* \brief All C++ blocks that can be used from the HOWTO GNU Radio
|
|
||||||
* module are listed here or in the subcategories below.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
/*! \mainpage
|
|
||||||
|
|
||||||
Welcome to the GNU Radio HOWTO Block
|
|
||||||
|
|
||||||
This is the intro page for the Doxygen manual generated for the HOWTO
|
|
||||||
block (docs/doxygen/other/main_page.dox). Edit it to add more detailed
|
|
||||||
documentation about the new GNU Radio modules contained in this
|
|
||||||
project.
|
|
||||||
|
|
||||||
*/
|
|
||||||
@@ -1,255 +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.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
Creates the swig_doc.i SWIG interface file.
|
|
||||||
Execute using: python swig_doc.py xml_path outputfilename
|
|
||||||
|
|
||||||
The file instructs SWIG to transfer the doxygen comments into the
|
|
||||||
python docstrings.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
try:
|
|
||||||
from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
|
|
||||||
except ImportError:
|
|
||||||
from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
|
|
||||||
|
|
||||||
|
|
||||||
def py_name(name):
|
|
||||||
bits = name.split('_')
|
|
||||||
return '_'.join(bits[1:])
|
|
||||||
|
|
||||||
def make_name(name):
|
|
||||||
bits = name.split('_')
|
|
||||||
return bits[0] + '_make_' + '_'.join(bits[1:])
|
|
||||||
|
|
||||||
|
|
||||||
class Block(object):
|
|
||||||
"""
|
|
||||||
Checks if doxyxml produced objects correspond to a gnuradio block.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def includes(cls, item):
|
|
||||||
if not isinstance(item, DoxyClass):
|
|
||||||
return False
|
|
||||||
# Check for a parsing error.
|
|
||||||
if item.error():
|
|
||||||
return False
|
|
||||||
return item.has_member(make_name(item.name()), DoxyFriend)
|
|
||||||
|
|
||||||
|
|
||||||
def utoascii(text):
|
|
||||||
"""
|
|
||||||
Convert unicode text into ascii and escape quotes.
|
|
||||||
"""
|
|
||||||
if text is None:
|
|
||||||
return ''
|
|
||||||
out = text.encode('ascii', 'replace')
|
|
||||||
out = out.replace('"', '\\"')
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
def combine_descriptions(obj):
|
|
||||||
"""
|
|
||||||
Combines the brief and detailed descriptions of an object together.
|
|
||||||
"""
|
|
||||||
description = []
|
|
||||||
bd = obj.brief_description.strip()
|
|
||||||
dd = obj.detailed_description.strip()
|
|
||||||
if bd:
|
|
||||||
description.append(bd)
|
|
||||||
if dd:
|
|
||||||
description.append(dd)
|
|
||||||
return utoascii('\n\n'.join(description)).strip()
|
|
||||||
|
|
||||||
|
|
||||||
entry_templ = '%feature("docstring") {name} "{docstring}"'
|
|
||||||
def make_entry(obj, name=None, templ="{description}", description=None):
|
|
||||||
"""
|
|
||||||
Create a docstring entry for a swig interface file.
|
|
||||||
|
|
||||||
obj - a doxyxml object from which documentation will be extracted.
|
|
||||||
name - the name of the C object (defaults to obj.name())
|
|
||||||
templ - an optional template for the docstring containing only one
|
|
||||||
variable named 'description'.
|
|
||||||
description - if this optional variable is set then it's value is
|
|
||||||
used as the description instead of extracting it from obj.
|
|
||||||
"""
|
|
||||||
if name is None:
|
|
||||||
name=obj.name()
|
|
||||||
if "operator " in name:
|
|
||||||
return ''
|
|
||||||
if description is None:
|
|
||||||
description = combine_descriptions(obj)
|
|
||||||
docstring = templ.format(description=description)
|
|
||||||
if not docstring:
|
|
||||||
return ''
|
|
||||||
return entry_templ.format(
|
|
||||||
name=name,
|
|
||||||
docstring=docstring,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def make_func_entry(func, name=None, description=None, params=None):
|
|
||||||
"""
|
|
||||||
Create a function docstring entry for a swig interface file.
|
|
||||||
|
|
||||||
func - a doxyxml object from which documentation will be extracted.
|
|
||||||
name - the name of the C object (defaults to func.name())
|
|
||||||
description - if this optional variable is set then it's value is
|
|
||||||
used as the description instead of extracting it from func.
|
|
||||||
params - a parameter list that overrides using func.params.
|
|
||||||
"""
|
|
||||||
if params is None:
|
|
||||||
params = func.params
|
|
||||||
params = [prm.declname for prm in params]
|
|
||||||
if params:
|
|
||||||
sig = "Params: (%s)" % ", ".join(params)
|
|
||||||
else:
|
|
||||||
sig = "Params: (NONE)"
|
|
||||||
templ = "{description}\n\n" + sig
|
|
||||||
return make_entry(func, name=name, templ=utoascii(templ),
|
|
||||||
description=description)
|
|
||||||
|
|
||||||
|
|
||||||
def make_class_entry(klass, description=None):
|
|
||||||
"""
|
|
||||||
Create a class docstring for a swig interface file.
|
|
||||||
"""
|
|
||||||
output = []
|
|
||||||
output.append(make_entry(klass, description=description))
|
|
||||||
for func in klass.in_category(DoxyFunction):
|
|
||||||
name = klass.name() + '::' + func.name()
|
|
||||||
output.append(make_func_entry(func, name=name))
|
|
||||||
return "\n\n".join(output)
|
|
||||||
|
|
||||||
|
|
||||||
def make_block_entry(di, block):
|
|
||||||
"""
|
|
||||||
Create class and function docstrings of a gnuradio block for a
|
|
||||||
swig interface file.
|
|
||||||
"""
|
|
||||||
descriptions = []
|
|
||||||
# Get the documentation associated with the class.
|
|
||||||
class_desc = combine_descriptions(block)
|
|
||||||
if class_desc:
|
|
||||||
descriptions.append(class_desc)
|
|
||||||
# Get the documentation associated with the make function
|
|
||||||
make_func = di.get_member(make_name(block.name()), DoxyFunction)
|
|
||||||
make_func_desc = combine_descriptions(make_func)
|
|
||||||
if make_func_desc:
|
|
||||||
descriptions.append(make_func_desc)
|
|
||||||
# Get the documentation associated with the file
|
|
||||||
try:
|
|
||||||
block_file = di.get_member(block.name() + ".h", DoxyFile)
|
|
||||||
file_desc = combine_descriptions(block_file)
|
|
||||||
if file_desc:
|
|
||||||
descriptions.append(file_desc)
|
|
||||||
except base.Base.NoSuchMember:
|
|
||||||
# Don't worry if we can't find a matching file.
|
|
||||||
pass
|
|
||||||
# And join them all together to make a super duper description.
|
|
||||||
super_description = "\n\n".join(descriptions)
|
|
||||||
# Associate the combined description with the class and
|
|
||||||
# the make function.
|
|
||||||
output = []
|
|
||||||
output.append(make_class_entry(block, description=super_description))
|
|
||||||
creator = block.get_member(block.name(), DoxyFunction)
|
|
||||||
output.append(make_func_entry(make_func, description=super_description,
|
|
||||||
params=creator.params))
|
|
||||||
return "\n\n".join(output)
|
|
||||||
|
|
||||||
|
|
||||||
def make_swig_interface_file(di, swigdocfilename, custom_output=None):
|
|
||||||
|
|
||||||
output = ["""
|
|
||||||
/*
|
|
||||||
* This file was automatically generated using swig_doc.py.
|
|
||||||
*
|
|
||||||
* Any changes to it will be lost next time it is regenerated.
|
|
||||||
*/
|
|
||||||
"""]
|
|
||||||
|
|
||||||
if custom_output is not None:
|
|
||||||
output.append(custom_output)
|
|
||||||
|
|
||||||
# Create docstrings for the blocks.
|
|
||||||
blocks = di.in_category(Block)
|
|
||||||
make_funcs = set([])
|
|
||||||
for block in blocks:
|
|
||||||
try:
|
|
||||||
make_func = di.get_member(make_name(block.name()), DoxyFunction)
|
|
||||||
make_funcs.add(make_func.name())
|
|
||||||
output.append(make_block_entry(di, block))
|
|
||||||
except block.ParsingError:
|
|
||||||
print('Parsing error for block %s' % block.name())
|
|
||||||
|
|
||||||
# Create docstrings for functions
|
|
||||||
# Don't include the make functions since they have already been dealt with.
|
|
||||||
funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs]
|
|
||||||
for f in funcs:
|
|
||||||
try:
|
|
||||||
output.append(make_func_entry(f))
|
|
||||||
except f.ParsingError:
|
|
||||||
print('Parsing error for function %s' % f.name())
|
|
||||||
|
|
||||||
# Create docstrings for classes
|
|
||||||
block_names = [block.name() for block in blocks]
|
|
||||||
klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names]
|
|
||||||
for k in klasses:
|
|
||||||
try:
|
|
||||||
output.append(make_class_entry(k))
|
|
||||||
except k.ParsingError:
|
|
||||||
print('Parsing error for class %s' % k.name())
|
|
||||||
|
|
||||||
# Docstrings are not created for anything that is not a function or a class.
|
|
||||||
# If this excludes anything important please add it here.
|
|
||||||
|
|
||||||
output = "\n\n".join(output)
|
|
||||||
|
|
||||||
swig_doc = file(swigdocfilename, 'w')
|
|
||||||
swig_doc.write(output)
|
|
||||||
swig_doc.close()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
# Parse command line options and set up doxyxml.
|
|
||||||
err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
|
|
||||||
if len(sys.argv) != 3:
|
|
||||||
raise StandardError(err_msg)
|
|
||||||
xml_path = sys.argv[1]
|
|
||||||
swigdocfilename = sys.argv[2]
|
|
||||||
di = DoxyIndex(xml_path)
|
|
||||||
|
|
||||||
# gnuradio.gr.msq_queue.insert_tail and delete_head create errors unless docstrings are defined!
|
|
||||||
# This is presumably a bug in SWIG.
|
|
||||||
#msg_q = di.get_member(u'gr_msg_queue', DoxyClass)
|
|
||||||
#insert_tail = msg_q.get_member(u'insert_tail', DoxyFunction)
|
|
||||||
#delete_head = msg_q.get_member(u'delete_head', DoxyFunction)
|
|
||||||
output = []
|
|
||||||
#output.append(make_func_entry(insert_tail, name='gr_py_msg_queue__insert_tail'))
|
|
||||||
#output.append(make_func_entry(delete_head, name='gr_py_msg_queue__delete_head'))
|
|
||||||
custom_output = "\n\n".join(output)
|
|
||||||
|
|
||||||
# Generate the docstrings interface file.
|
|
||||||
make_swig_interface_file(di, swigdocfilename, custom_output=custom_output)
|
|
||||||
+687
-1855
File diff suppressed because it is too large
Load Diff
+771
-2003
File diff suppressed because it is too large
Load Diff
+1070
-3751
File diff suppressed because it is too large
Load Diff
+1128
-3810
File diff suppressed because it is too large
Load Diff
+945
-1948
File diff suppressed because it is too large
Load Diff
+31
-2
@@ -1,3 +1,32 @@
|
|||||||
file(GLOB xml_files "*.xml")
|
# Copyright 2011 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file was generated by gr_modtool, a tool from the GNU Radio framework
|
||||||
|
# This file is a part of gr-ieee802_11
|
||||||
|
#
|
||||||
|
# GNU Radio is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# GNU Radio is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with GNU Radio; see the file COPYING. If not, write to
|
||||||
|
# the Free Software Foundation, Inc., 51 Franklin Street,
|
||||||
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES ${xml_files} DESTINATION share/gnuradio/grc/blocks )
|
install(FILES
|
||||||
|
ieee802_11_chunks_to_symbols.block.yml
|
||||||
|
ieee802_11_decode_mac.block.yml
|
||||||
|
ieee802_11_ether_encap.block.yml
|
||||||
|
ieee802_11_extract_csi.block.yml
|
||||||
|
ieee802_11_frame_equalizer.block.yml
|
||||||
|
ieee802_11_mac.block.yml
|
||||||
|
ieee802_11_mapper.block.yml
|
||||||
|
ieee802_11_parse_mac.block.yml
|
||||||
|
ieee802_11_sync_long.block.yml
|
||||||
|
ieee802_11_sync_short.block.yml DESTINATION share/gnuradio/grc/blocks
|
||||||
|
)
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_chunks_to_symbols_xx
|
||||||
|
label: Chunks to Symbols
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: byte
|
||||||
|
multiplicity: '1'
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: '1'
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.chunks_to_symbols()
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Chunks to Symbols</name>
|
|
||||||
<key>ieee802_11_chunks_to_symbols_xx</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.chunks_to_symbols()</make>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>byte</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_decode_mac
|
||||||
|
label: WiFi Decode MAC
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: log
|
||||||
|
label: Log
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
- id: debug
|
||||||
|
label: Debug
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: byte
|
||||||
|
vlen: 48
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.decode_mac(${log}, ${debug})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>WiFi Decode MAC</name>
|
|
||||||
<key>ieee802_11_decode_mac</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.decode_mac($log, $debug)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Log</name>
|
|
||||||
<key>log</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Debug</name>
|
|
||||||
<key>debug</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>byte</type>
|
|
||||||
<vlen>48</vlen>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
</block>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_ether_encap
|
||||||
|
label: Ethernet Encapsulation
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: debug
|
||||||
|
label: Debug
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: from tap
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: from wifi
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: to tap
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: to wifi
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.ether_encap(${debug})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>Ethernet Encapsulation</name>
|
|
||||||
<key>ieee802_11_ether_encap</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.ether_encap($debug)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Debug</name>
|
|
||||||
<key>debug</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>from tap</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>from wifi</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>to tap</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>to wifi</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
id: ieee802_11_extract_csi
|
||||||
|
label: WiFi Extract CSI
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.extract_csi()
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- label: pdu in
|
||||||
|
domain: message
|
||||||
|
optional: false
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- label: csi out
|
||||||
|
domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 52
|
||||||
|
optional: false
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_frame_equalizer
|
||||||
|
label: WiFi Frame Equalizer
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: algo
|
||||||
|
label: Algorithm
|
||||||
|
dtype: int
|
||||||
|
default: ieee802_11.LS
|
||||||
|
options: [ieee802_11.LS, ieee802_11.LMS, ieee802_11.COMB, ieee802_11.STA]
|
||||||
|
option_labels: [LS, LMS, Comb, STA]
|
||||||
|
- id: freq
|
||||||
|
label: Frequency
|
||||||
|
dtype: real
|
||||||
|
default: 5.89e9
|
||||||
|
- id: bw
|
||||||
|
label: Bandwidth
|
||||||
|
dtype: real
|
||||||
|
default: 10e6
|
||||||
|
- id: log
|
||||||
|
label: Log
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
- id: debug
|
||||||
|
label: Debug
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 64
|
||||||
|
multiplicity: '1'
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: byte
|
||||||
|
vlen: 48
|
||||||
|
multiplicity: '1'
|
||||||
|
- domain: message
|
||||||
|
id: symbols
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.frame_equalizer(${algo}, ${freq}, ${bw}, ${log}, ${debug})
|
||||||
|
callbacks:
|
||||||
|
- set_algorithm(${algo})
|
||||||
|
- set_frequency(${freq})
|
||||||
|
- set_bandwidth(${bw})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>WiFi Frame Equalizer</name>
|
|
||||||
<key>ieee802_11_frame_equalizer</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.frame_equalizer($algo, $freq, $bw, $log, $debug)</make>
|
|
||||||
<callback>set_algorithm($algo)</callback>
|
|
||||||
<callback>set_frequency($freq)</callback>
|
|
||||||
<callback>set_bandwidth($bw)</callback>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Algorithm</name>
|
|
||||||
<key>algo</key>
|
|
||||||
<value>ieee802_11.LS</value>
|
|
||||||
<type>int</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>LS</name>
|
|
||||||
<key>ieee802_11.LS</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>LMS</name>
|
|
||||||
<key>ieee802_11.LMS</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Comb</name>
|
|
||||||
<key>ieee802_11.COMB</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>STA</name>
|
|
||||||
<key>ieee802_11.STA</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Frequency</name>
|
|
||||||
<key>freq</key>
|
|
||||||
<value>5.89e9</value>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Bandwidth</name>
|
|
||||||
<key>bw</key>
|
|
||||||
<value>10e6</value>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Log</name>
|
|
||||||
<key>log</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Debug</name>
|
|
||||||
<key>debug</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<vlen>64</vlen>
|
|
||||||
<nports>1</nports>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>byte</type>
|
|
||||||
<vlen>48</vlen>
|
|
||||||
<nports>1</nports>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>symbols</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
</block>
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_mac
|
||||||
|
label: WiFi MAC
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: src_mac
|
||||||
|
label: SRC MAC
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0x23, 0x23, 0x23, 0x23, 0x23, 0x23]'
|
||||||
|
- id: dst_mac
|
||||||
|
label: DST MAC
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0x42, 0x42, 0x42, 0x42, 0x42, 0x42]'
|
||||||
|
- id: bss_mac
|
||||||
|
label: BSS MAC
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0xff, 0xff, 0xff, 0xff, 0xff, 0xff]'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: app in
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: phy in
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: app out
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: phy out
|
||||||
|
optional: true
|
||||||
|
asserts:
|
||||||
|
- ${ len(src_mac) == 6 }
|
||||||
|
- ${ len(dst_mac) == 6 }
|
||||||
|
- ${ len(bss_mac) == 6 }
|
||||||
|
- ${ all([x >= 0 and 255 >= x for x in src_mac]) }
|
||||||
|
- ${ all([x >= 0 and 255 >= x for x in dst_mac]) }
|
||||||
|
- ${ all([x >= 0 and 255 >= x for x in bss_mac]) }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.mac(${src_mac}, ${dst_mac}, ${bss_mac})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>WiFi MAC</name>
|
|
||||||
<key>ieee802_11_mac</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.mac($src_mac, $dst_mac, $bss_mac)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>SRC MAC</name>
|
|
||||||
<key>src_mac</key>
|
|
||||||
<value>[0x23, 0x23, 0x23, 0x23, 0x23, 0x23]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>DST MAC</name>
|
|
||||||
<key>dst_mac</key>
|
|
||||||
<value>[0x42, 0x42, 0x42, 0x42, 0x42, 0x42]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>BSS MAC</name>
|
|
||||||
<key>bss_mac</key>
|
|
||||||
<value>[0xff, 0xff, 0xff, 0xff, 0xff, 0xff]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<check>len($src_mac) == 6</check>
|
|
||||||
<check>len($dst_mac) == 6</check>
|
|
||||||
<check>len($bss_mac) == 6</check>
|
|
||||||
<check>all([x >= 0 and 255 >= x for x in $src_mac])</check>
|
|
||||||
<check>all([x >= 0 and 255 >= x for x in $dst_mac])</check>
|
|
||||||
<check>all([x >= 0 and 255 >= x for x in $bss_mac])</check>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>app in</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>phy in</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>app out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>phy out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_mapper
|
||||||
|
label: WiFi Mapper
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: encoding
|
||||||
|
label: Encoding
|
||||||
|
dtype: int
|
||||||
|
default: ieee802_11.BPSK_1_2
|
||||||
|
options: [ieee802_11.BPSK_1_2, ieee802_11.BPSK_3_4, ieee802_11.QPSK_1_2, ieee802_11.QPSK_3_4,
|
||||||
|
ieee802_11.16QAM_1_2, ieee802_11.16QAM_3_4, ieee802_11.64QAM_2_3, ieee802_11.64QAM_3_4]
|
||||||
|
option_labels: [BPSK 1/2, BPSK 3/4, QPSK 1/2, QPSK 3/4, 16QAM 1/2, 16QAM 3/4,
|
||||||
|
64QAM 2/3, 64QAM 3/4]
|
||||||
|
- id: debug
|
||||||
|
label: Debug
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: byte
|
||||||
|
multiplicity: '1'
|
||||||
|
asserts:
|
||||||
|
- ${ encoding in range(8) }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.mapper(${encoding}, ${debug})
|
||||||
|
callbacks:
|
||||||
|
- set_encoding(${encoding})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>WiFi Mapper</name>
|
|
||||||
<key>ieee802_11_mapper</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.mapper($encoding, $debug)</make>
|
|
||||||
<callback>set_encoding($encoding)</callback>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Encoding</name>
|
|
||||||
<key>encoding</key>
|
|
||||||
<value>ieee802_11.BPSK_1_2</value>
|
|
||||||
<type>int</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>BPSK 1/2</name>
|
|
||||||
<key>ieee802_11.BPSK_1_2</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>BPSK 3/4</name>
|
|
||||||
<key>ieee802_11.BPSK_3_4</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>QPSK 1/2</name>
|
|
||||||
<key>ieee802_11.QPSK_1_2</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>QPSK 3/4</name>
|
|
||||||
<key>ieee802_11.QPSK_3_4</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>16QAM 1/2</name>
|
|
||||||
<key>ieee802_11.16QAM_1_2</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>16QAM 3/4</name>
|
|
||||||
<key>ieee802_11.16QAM_3_4</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>64QAM 2/3</name>
|
|
||||||
<key>ieee802_11.64QAM_2_3</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>64QAM 3/4</name>
|
|
||||||
<key>ieee802_11.64QAM_3_4</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Debug</name>
|
|
||||||
<key>debug</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<check>$encoding in range(8)</check>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>byte</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
</block>
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Moving Average</name>
|
|
||||||
<key>ieee802_11_moving_average_xx</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.moving_average_$(type.fcn)($length)</make>
|
|
||||||
<callback>set_length($length)</callback>
|
|
||||||
<param>
|
|
||||||
<name>Type</name>
|
|
||||||
<key>type</key>
|
|
||||||
<type>enum</type>
|
|
||||||
<option>
|
|
||||||
<name>Complex</name>
|
|
||||||
<key>complex</key>
|
|
||||||
<opt>fcn:cc</opt>
|
|
||||||
<opt>scale:complex</opt>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Float</name>
|
|
||||||
<key>float</key>
|
|
||||||
<opt>fcn:ff</opt>
|
|
||||||
<opt>scale:real</opt>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Length</name>
|
|
||||||
<key>length</key>
|
|
||||||
<value>48</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>$type</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>$type</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_parse_mac
|
||||||
|
label: WiFi Parse MAC
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: log
|
||||||
|
label: Log
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
- id: debug
|
||||||
|
label: Debug
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.parse_mac(${log}, ${debug})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>WiFi Parse MAC</name>
|
|
||||||
<key>ieee802_11_parse_mac</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.parse_mac($log, $debug)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Log</name>
|
|
||||||
<key>log</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Debug</name>
|
|
||||||
<key>debug</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>fer</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
</block>
|
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_sync_long
|
||||||
|
label: WiFi Sync Long
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: log
|
||||||
|
label: Log
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
- id: debug
|
||||||
|
label: Debug
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
- id: sync_length
|
||||||
|
label: Sync Length
|
||||||
|
dtype: int
|
||||||
|
default: '240'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: '1'
|
||||||
|
- label: in delayed
|
||||||
|
domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: '1'
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: '1'
|
||||||
|
asserts:
|
||||||
|
- ${ sync_length > 0 }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.sync_long(${sync_length}, ${log}, ${debug})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>WiFi Sync Long</name>
|
|
||||||
<key>ieee802_11_sync_long</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.sync_long($sync_length, $log, $debug)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Log</name>
|
|
||||||
<key>log</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Debug</name>
|
|
||||||
<key>debug</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Sync Length</name>
|
|
||||||
<key>sync_length</key>
|
|
||||||
<value>240</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<check>$sync_length > 0</check>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in delayed</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
</block>
|
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: ieee802_11_sync_short
|
||||||
|
label: WiFi Sync Short
|
||||||
|
category: '[IEEE802.11]'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: log
|
||||||
|
label: Log
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
- id: debug
|
||||||
|
label: Debug
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['True', 'False']
|
||||||
|
option_labels: [Enable, Disable]
|
||||||
|
- id: threshold
|
||||||
|
label: Threshold
|
||||||
|
dtype: real
|
||||||
|
default: '0.8'
|
||||||
|
- id: min_plateau
|
||||||
|
label: Min Plateau
|
||||||
|
dtype: int
|
||||||
|
default: '2'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: '1'
|
||||||
|
- label: abs
|
||||||
|
domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: '1'
|
||||||
|
- label: cor
|
||||||
|
domain: stream
|
||||||
|
dtype: float
|
||||||
|
multiplicity: '1'
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: '1'
|
||||||
|
asserts:
|
||||||
|
- ${ threshold > 0 }
|
||||||
|
- ${ min_plateau > 0 }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import ieee802_11
|
||||||
|
make: ieee802_11.sync_short(${threshold}, ${min_plateau}, ${log}, ${debug})
|
||||||
|
|
||||||
|
file_format: 1
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<block>
|
|
||||||
<name>WiFi Sync Short</name>
|
|
||||||
<key>ieee802_11_sync_short</key>
|
|
||||||
<category>[IEEE802.11]</category>
|
|
||||||
<import>import ieee802_11</import>
|
|
||||||
<make>ieee802_11.sync_short($threshold, $min_plateau, $log, $debug)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Log</name>
|
|
||||||
<key>log</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Debug</name>
|
|
||||||
<key>debug</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
|
|
||||||
<option>
|
|
||||||
<name>Enable</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Disable</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Threshold</name>
|
|
||||||
<key>threshold</key>
|
|
||||||
<value>0.8</value>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Min Plateau</name>
|
|
||||||
<key>min_plateau</key>
|
|
||||||
<value>2</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<check>$threshold > 0</check>
|
|
||||||
<check>$min_plateau > 0</check>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>abs</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>cor</name>
|
|
||||||
<type>float</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>1</nports>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
</block>
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2013, 2016 Bastian Bloessl <bloessl@ccs-labs.org>
|
|
||||||
#
|
|
||||||
# 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 of the License, 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
include(GrPython)
|
|
||||||
|
|
||||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
|
|
||||||
#!${PYTHON_EXECUTABLE}
|
|
||||||
|
|
||||||
import sys, os, re
|
|
||||||
sys.path.append('${GR_RUNTIME_PYTHONPATH}')
|
|
||||||
os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
|
|
||||||
os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}/../../python')
|
|
||||||
import build_utils
|
|
||||||
root, inp = sys.argv[1:3]
|
|
||||||
for sig in sys.argv[3:]:
|
|
||||||
name = re.sub ('X+', sig, root)
|
|
||||||
d = build_utils.standard_dict(name, sig, 'ieee802_11')
|
|
||||||
build_utils.expand_template(d, inp)
|
|
||||||
|
|
||||||
")
|
|
||||||
|
|
||||||
macro(expand_h root)
|
|
||||||
#make a list of all the generated files
|
|
||||||
unset(expanded_files_h)
|
|
||||||
foreach(sig ${ARGN})
|
|
||||||
string(REGEX REPLACE "X+" ${sig} name ${root})
|
|
||||||
list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
|
|
||||||
endforeach(sig)
|
|
||||||
|
|
||||||
#create a command to generate the files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_h}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}.h.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#install rules for the generated h files
|
|
||||||
list(APPEND generated_includes ${expanded_files_h})
|
|
||||||
endmacro(expand_h)
|
|
||||||
|
|
||||||
expand_h(moving_average_XX ff cc)
|
|
||||||
|
|
||||||
add_custom_target(ieee802_11_generated_includes DEPENDS
|
|
||||||
${generated_includes}
|
|
||||||
)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install public header files
|
|
||||||
########################################################################
|
|
||||||
|
|
||||||
list(APPEND include_sources
|
|
||||||
${generated_includes}
|
|
||||||
api.h
|
|
||||||
chunks_to_symbols.h
|
|
||||||
constellations.h
|
|
||||||
decode_mac.h
|
|
||||||
ether_encap.h
|
|
||||||
frame_equalizer.h
|
|
||||||
mac.h
|
|
||||||
mapper.h
|
|
||||||
parse_mac.h
|
|
||||||
signal_field.h
|
|
||||||
sync_long.h
|
|
||||||
sync_short.h
|
|
||||||
)
|
|
||||||
|
|
||||||
install(
|
|
||||||
FILES ${include_sources}
|
|
||||||
DESTINATION ${GR_INCLUDE_DIR}/gnuradio/ieee802_11
|
|
||||||
COMPONENT "ieee802_11_devel"
|
|
||||||
)
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2013, 2016 Bastian Bloessl <bloessl@ccs-labs.org>
|
||||||
|
#
|
||||||
|
# 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 of the License, 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Install public header files
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
list(APPEND include_sources
|
||||||
|
api.h
|
||||||
|
chunks_to_symbols.h
|
||||||
|
constellations.h
|
||||||
|
decode_mac.h
|
||||||
|
ether_encap.h
|
||||||
|
extract_csi.h
|
||||||
|
frame_equalizer.h
|
||||||
|
mac.h
|
||||||
|
mapper.h
|
||||||
|
parse_mac.h
|
||||||
|
signal_field.h
|
||||||
|
sync_long.h
|
||||||
|
sync_short.h
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
FILES ${include_sources}
|
||||||
|
DESTINATION ${GR_INCLUDE_DIR}
|
||||||
|
COMPONENT "ieee802_11_devel"
|
||||||
|
)
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_H
|
#ifndef INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_H
|
||||||
#define INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_H
|
#define INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/tagged_stream_block.h>
|
#include <gnuradio/tagged_stream_block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_CONSTELLATIONS_H
|
#ifndef INCLUDED_IEEE802_11_CONSTELLATIONS_H
|
||||||
#define INCLUDED_IEEE802_11_CONSTELLATIONS_H
|
#define INCLUDED_IEEE802_11_CONSTELLATIONS_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/digital/constellation.h>
|
#include <gnuradio/digital/constellation.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -68,4 +68,3 @@ protected:
|
|||||||
} // namespace gr
|
} // namespace gr
|
||||||
|
|
||||||
#endif /* INCLUDED_IEEE802_11_CONSTELLATIONS_H */
|
#endif /* INCLUDED_IEEE802_11_CONSTELLATIONS_H */
|
||||||
|
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_DECODE_MAC_H
|
#ifndef INCLUDED_IEEE802_11_DECODE_MAC_H
|
||||||
#define INCLUDED_IEEE802_11_DECODE_MAC_H
|
#define INCLUDED_IEEE802_11_DECODE_MAC_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -26,15 +26,11 @@ namespace ieee802_11 {
|
|||||||
class IEEE802_11_API decode_mac : virtual public block
|
class IEEE802_11_API decode_mac : virtual public block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<decode_mac> sptr;
|
typedef boost::shared_ptr<decode_mac> sptr;
|
||||||
static sptr make(bool log = false, bool debug = false);
|
static sptr make(bool log = false, bool debug = false);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ieee802_11
|
} // namespace ieee802_11
|
||||||
} // namespace gr
|
} // namespace gr
|
||||||
|
|
||||||
#endif /* INCLUDED_IEEE802_11_DECODE_MAC_H */
|
#endif /* INCLUDED_IEEE802_11_DECODE_MAC_H */
|
||||||
|
|
||||||
|
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_ETHER_ENCAP_H
|
#ifndef INCLUDED_IEEE802_11_ETHER_ENCAP_H
|
||||||
#define INCLUDED_IEEE802_11_ETHER_ENCAP_H
|
#define INCLUDED_IEEE802_11_ETHER_ENCAP_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -26,10 +26,8 @@ namespace ieee802_11 {
|
|||||||
class IEEE802_11_API ether_encap : virtual public block
|
class IEEE802_11_API ether_encap : virtual public block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<ether_encap> sptr;
|
typedef boost::shared_ptr<ether_encap> sptr;
|
||||||
static sptr make(bool debug);
|
static sptr make(bool debug);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ieee802_11
|
} // namespace ieee802_11
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/* -*- c++ -*- */
|
||||||
|
/*
|
||||||
|
* Copyright 2021 Anton Ottosson.
|
||||||
|
*
|
||||||
|
* This 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 software 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 software; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 51 Franklin Street,
|
||||||
|
* Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INCLUDED_IEEE802_11_EXTRACT_CSI_H
|
||||||
|
#define INCLUDED_IEEE802_11_EXTRACT_CSI_H
|
||||||
|
|
||||||
|
#include <gnuradio/sync_block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
|
namespace gr {
|
||||||
|
namespace ieee802_11 {
|
||||||
|
|
||||||
|
class IEEE802_11_API extract_csi : virtual public gr::sync_block
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef boost::shared_ptr<extract_csi> sptr;
|
||||||
|
static sptr make();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ieee802_11
|
||||||
|
} // namespace gr
|
||||||
|
|
||||||
|
#endif /* INCLUDED_IEEE802_11_EXTRACT_CSI_H */
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_FRAME_EQUALIZER_H
|
#ifndef INCLUDED_IEEE802_11_FRAME_EQUALIZER_H
|
||||||
#define INCLUDED_IEEE802_11_FRAME_EQUALIZER_H
|
#define INCLUDED_IEEE802_11_FRAME_EQUALIZER_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
enum Equalizer {
|
enum Equalizer {
|
||||||
LS = 0,
|
LS = 0,
|
||||||
@@ -38,8 +38,7 @@ class IEEE802_11_API frame_equalizer : virtual public gr::block
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
typedef boost::shared_ptr<frame_equalizer> sptr;
|
typedef boost::shared_ptr<frame_equalizer> sptr;
|
||||||
static sptr make(Equalizer algo, double freq, double bw,
|
static sptr make(Equalizer algo, double freq, double bw, bool log, bool debug);
|
||||||
bool log, bool debug);
|
|
||||||
virtual void set_algorithm(Equalizer algo) = 0;
|
virtual void set_algorithm(Equalizer algo) = 0;
|
||||||
virtual void set_bandwidth(double bw) = 0;
|
virtual void set_bandwidth(double bw) = 0;
|
||||||
virtual void set_frequency(double freq) = 0;
|
virtual void set_frequency(double freq) = 0;
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_MAC_H
|
#ifndef INCLUDED_IEEE802_11_MAC_H
|
||||||
#define INCLUDED_IEEE802_11_MAC_H
|
#define INCLUDED_IEEE802_11_MAC_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -26,7 +26,6 @@ namespace ieee802_11 {
|
|||||||
class IEEE802_11_API mac : virtual public block
|
class IEEE802_11_API mac : virtual public block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<mac> sptr;
|
typedef boost::shared_ptr<mac> sptr;
|
||||||
static sptr make(std::vector<uint8_t> src_mac,
|
static sptr make(std::vector<uint8_t> src_mac,
|
||||||
std::vector<uint8_t> dst_mac,
|
std::vector<uint8_t> dst_mac,
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_MAPPER_H
|
#ifndef INCLUDED_IEEE802_11_MAPPER_H
|
||||||
#define INCLUDED_IEEE802_11_MAPPER_H
|
#define INCLUDED_IEEE802_11_MAPPER_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
enum Encoding {
|
enum Encoding {
|
||||||
BPSK_1_2 = 0,
|
BPSK_1_2 = 0,
|
||||||
@@ -37,7 +37,6 @@ namespace ieee802_11 {
|
|||||||
class IEEE802_11_API mapper : virtual public block
|
class IEEE802_11_API mapper : virtual public block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<mapper> sptr;
|
typedef boost::shared_ptr<mapper> sptr;
|
||||||
static sptr make(Encoding mcs, bool debug = false);
|
static sptr make(Encoding mcs, bool debug = false);
|
||||||
virtual void set_encoding(Encoding mcs) = 0;
|
virtual void set_encoding(Encoding mcs) = 0;
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_PARSE_MAC_H
|
#ifndef INCLUDED_IEEE802_11_PARSE_MAC_H
|
||||||
#define INCLUDED_IEEE802_11_PARSE_MAC_H
|
#define INCLUDED_IEEE802_11_PARSE_MAC_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -26,10 +26,8 @@ namespace ieee802_11 {
|
|||||||
class IEEE802_11_API parse_mac : virtual public block
|
class IEEE802_11_API parse_mac : virtual public block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<parse_mac> sptr;
|
typedef boost::shared_ptr<parse_mac> sptr;
|
||||||
static sptr make(bool log = false, bool debug = false);
|
static sptr make(bool log = false, bool debug = false);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ieee802_11
|
} // namespace ieee802_11
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_SIGNAL_FIELD_H
|
#ifndef INCLUDED_IEEE802_11_SIGNAL_FIELD_H
|
||||||
#define INCLUDED_IEEE802_11_SIGNAL_FIELD_H
|
#define INCLUDED_IEEE802_11_SIGNAL_FIELD_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/digital/packet_header_default.h>
|
#include <gnuradio/digital/packet_header_default.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -38,4 +38,3 @@ protected:
|
|||||||
} // namespace gr
|
} // namespace gr
|
||||||
|
|
||||||
#endif /* INCLUDED_IEEE802_11_SIGNAL_FIELD_H */
|
#endif /* INCLUDED_IEEE802_11_SIGNAL_FIELD_H */
|
||||||
|
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_SYNC_LONG_H
|
#ifndef INCLUDED_IEEE802_11_SYNC_LONG_H
|
||||||
#define INCLUDED_IEEE802_11_SYNC_LONG_H
|
#define INCLUDED_IEEE802_11_SYNC_LONG_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -26,11 +26,8 @@ namespace ieee802_11 {
|
|||||||
class IEEE802_11_API sync_long : virtual public block
|
class IEEE802_11_API sync_long : virtual public block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<sync_long> sptr;
|
typedef boost::shared_ptr<sync_long> sptr;
|
||||||
static sptr make(unsigned int sync_length,
|
static sptr make(unsigned int sync_length, bool log = false, bool debug = false);
|
||||||
bool log = false, bool debug = false);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ieee802_11
|
} // namespace ieee802_11
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_SYNC_SHORT_H
|
#ifndef INCLUDED_IEEE802_11_SYNC_SHORT_H
|
||||||
#define INCLUDED_IEEE802_11_SYNC_SHORT_H
|
#define INCLUDED_IEEE802_11_SYNC_SHORT_H
|
||||||
|
|
||||||
#include <ieee802-11/api.h>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
|
#include <ieee802_11/api.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -26,10 +26,11 @@ namespace ieee802_11 {
|
|||||||
class IEEE802_11_API sync_short : virtual public block
|
class IEEE802_11_API sync_short : virtual public block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<sync_short> sptr;
|
typedef boost::shared_ptr<sync_short> sptr;
|
||||||
static sptr make(double threshold, unsigned int min_plateau, bool log = false, bool debug = false);
|
static sptr make(double threshold,
|
||||||
|
unsigned int min_plateau,
|
||||||
|
bool log = false,
|
||||||
|
bool debug = false);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ieee802_11
|
} // namespace ieee802_11
|
||||||
+59
-82
@@ -19,81 +19,17 @@
|
|||||||
# Setup library
|
# Setup library
|
||||||
########################################################################
|
########################################################################
|
||||||
include(GrPlatform) #define LIB_SUFFIX
|
include(GrPlatform) #define LIB_SUFFIX
|
||||||
|
check_include_file("xmmintrin.h" SSE2_SUPPORTED)
|
||||||
|
|
||||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
|
if(SSE2_SUPPORTED)
|
||||||
#!${PYTHON_EXECUTABLE}
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
|
||||||
|
add_definitions(-DIEEE80211_MSSE2)
|
||||||
import sys, os, re
|
endif(SSE2_SUPPORTED)
|
||||||
sys.path.append('${GR_RUNTIME_PYTHONPATH}')
|
|
||||||
os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
|
|
||||||
os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}/../python')
|
|
||||||
import build_utils
|
|
||||||
root, inp = sys.argv[1:3]
|
|
||||||
for sig in sys.argv[3:]:
|
|
||||||
name = re.sub ('X+', sig, root)
|
|
||||||
d = build_utils.standard_dict(name, sig, 'ieee802_11')
|
|
||||||
build_utils.expand_template(d, inp, '_impl')
|
|
||||||
")
|
|
||||||
|
|
||||||
|
|
||||||
macro(expand_cc_h_impl root)
|
|
||||||
#make a list of all the generated files
|
|
||||||
unset(expanded_files_cc_impl)
|
|
||||||
unset(expanded_files_h_impl)
|
|
||||||
foreach(sig ${ARGN})
|
|
||||||
string(REGEX REPLACE "X+" ${sig} name ${root})
|
|
||||||
list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
|
|
||||||
list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
|
|
||||||
list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/${name}.h)
|
|
||||||
endforeach(sig)
|
|
||||||
|
|
||||||
#create a command to generate the _impl.cc files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_cc_impl}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}_impl.cc.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#create a command to generate the _impl.h files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${expanded_files_h_impl}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
|
|
||||||
${root} ${root}_impl.h.t ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
#make _impl.cc source files depend on headers to force generation
|
|
||||||
set_source_files_properties(${expanded_files_cc_impl}
|
|
||||||
PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
|
|
||||||
)
|
|
||||||
|
|
||||||
#make _impl.h source files depend on headers to force generation
|
|
||||||
set_source_files_properties(${expanded_files_h_impl}
|
|
||||||
PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
|
|
||||||
)
|
|
||||||
|
|
||||||
#install rules for the generated cc files
|
|
||||||
list(APPEND generated_sources ${expanded_files_cc_impl})
|
|
||||||
endmacro(expand_cc_h_impl)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Invoke macro to generate various sources
|
|
||||||
########################################################################
|
|
||||||
expand_cc_h_impl(moving_average_XX cc ff)
|
|
||||||
add_custom_target(ieee802_11_generated_sources DEPENDS ${generated_sources})
|
|
||||||
add_dependencies(ieee802_11_generated_sources ieee802_11_generated_includes)
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Setup library
|
# Setup library
|
||||||
########################################################################
|
########################################################################
|
||||||
list(APPEND gr_ieee802_11_sources
|
list(APPEND ieee802_11_sources
|
||||||
${generated_sources}
|
|
||||||
chunks_to_symbols_impl.cc
|
chunks_to_symbols_impl.cc
|
||||||
constellations_impl.cc
|
constellations_impl.cc
|
||||||
decode_mac.cc
|
decode_mac.cc
|
||||||
@@ -103,6 +39,7 @@ list(APPEND gr_ieee802_11_sources
|
|||||||
equalizer/lms.cc
|
equalizer/lms.cc
|
||||||
equalizer/sta.cc
|
equalizer/sta.cc
|
||||||
ether_encap_impl.cc
|
ether_encap_impl.cc
|
||||||
|
extract_csi_impl.cc
|
||||||
frame_equalizer_impl.cc
|
frame_equalizer_impl.cc
|
||||||
mac.cc
|
mac.cc
|
||||||
mapper.cc
|
mapper.cc
|
||||||
@@ -111,25 +48,65 @@ list(APPEND gr_ieee802_11_sources
|
|||||||
sync_long.cc
|
sync_long.cc
|
||||||
sync_short.cc
|
sync_short.cc
|
||||||
utils.cc
|
utils.cc
|
||||||
viterbi_decoder.cc
|
viterbi_decoder/base.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND gr_ieee802_11_libs
|
# use SSE2 optimized viterbi implementation if SSE2 is enabled
|
||||||
${Boost_LIBRARIES}
|
if(SSE2_SUPPORTED)
|
||||||
${GNURADIO_ALL_LIBRARIES}
|
list(APPEND ieee802_11_sources
|
||||||
${LOG4CPP_LIBRARIES}
|
viterbi_decoder/viterbi_decoder_x86.cc
|
||||||
)
|
)
|
||||||
|
else()
|
||||||
|
list(APPEND ieee802_11_sources
|
||||||
|
viterbi_decoder/viterbi_decoder_generic.cc
|
||||||
|
)
|
||||||
|
endif(SSE2_SUPPORTED)
|
||||||
|
|
||||||
add_library(gnuradio-ieee802_11 SHARED ${gr_ieee802_11_sources})
|
set(ieee802_11_sources "${ieee802_11_sources}" PARENT_SCOPE)
|
||||||
add_dependencies(gnuradio-ieee802_11 ieee802_11_generated_sources)
|
if(NOT ieee802_11_sources)
|
||||||
target_link_libraries(gnuradio-ieee802_11 ${gr_ieee802_11_libs})
|
MESSAGE(STATUS "No C++ sources... skipping lib/")
|
||||||
|
return()
|
||||||
|
endif(NOT ieee802_11_sources)
|
||||||
|
|
||||||
|
add_library(gnuradio-ieee802_11 SHARED ${ieee802_11_sources})
|
||||||
|
target_link_libraries(gnuradio-ieee802_11
|
||||||
|
gnuradio::gnuradio-runtime
|
||||||
|
gnuradio::gnuradio-filter
|
||||||
|
gnuradio::gnuradio-blocks
|
||||||
|
gnuradio::gnuradio-analog
|
||||||
|
gnuradio::gnuradio-fft
|
||||||
|
gnuradio::gnuradio-digital)
|
||||||
|
target_include_directories(gnuradio-ieee802_11
|
||||||
|
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
|
||||||
|
PUBLIC $<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
set_target_properties(gnuradio-ieee802_11 PROPERTIES DEFINE_SYMBOL "gnuradio_ieee802_11_EXPORTS")
|
set_target_properties(gnuradio-ieee802_11 PROPERTIES DEFINE_SYMBOL "gnuradio_ieee802_11_EXPORTS")
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set_target_properties(gnuradio-ieee802_11 PROPERTIES
|
||||||
|
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
endif(APPLE)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Install built library files
|
# Install built library files
|
||||||
########################################################################
|
########################################################################
|
||||||
install(TARGETS gnuradio-ieee802_11
|
include(GrMiscUtils)
|
||||||
LIBRARY DESTINATION lib${LIB_SUFFIX} # .so/.dylib file
|
GR_LIBRARY_FOO(gnuradio-ieee802_11)
|
||||||
ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file
|
|
||||||
RUNTIME DESTINATION bin # .dll file
|
########################################################################
|
||||||
|
# Print summary
|
||||||
|
########################################################################
|
||||||
|
message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||||
|
message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Build and register unit test
|
||||||
|
########################################################################
|
||||||
|
include(GrTest)
|
||||||
|
|
||||||
|
# If your unit tests require special include paths, add them here
|
||||||
|
#include_directories()
|
||||||
|
# List all files that contain Boost.UTF unit tests here
|
||||||
|
list(APPEND test_ieee802_11_sources
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -22,16 +22,17 @@
|
|||||||
|
|
||||||
using namespace gr::ieee802_11;
|
using namespace gr::ieee802_11;
|
||||||
|
|
||||||
chunks_to_symbols::sptr
|
chunks_to_symbols::sptr chunks_to_symbols::make()
|
||||||
chunks_to_symbols::make()
|
|
||||||
{
|
{
|
||||||
return gnuradio::get_initial_sptr(new chunks_to_symbols_impl());
|
return gnuradio::get_initial_sptr(new chunks_to_symbols_impl());
|
||||||
}
|
}
|
||||||
|
|
||||||
chunks_to_symbols_impl::chunks_to_symbols_impl() :
|
chunks_to_symbols_impl::chunks_to_symbols_impl()
|
||||||
tagged_stream_block("chunks_to_symbols",
|
: tagged_stream_block("chunks_to_symbols",
|
||||||
io_signature::make(1, 1, sizeof(char)),
|
io_signature::make(1, 1, sizeof(char)),
|
||||||
io_signature::make(1, 1, sizeof(gr_complex)), "packet_len") {
|
io_signature::make(1, 1, sizeof(gr_complex)),
|
||||||
|
"packet_len")
|
||||||
|
{
|
||||||
|
|
||||||
d_bpsk = constellation_bpsk::make();
|
d_bpsk = constellation_bpsk::make();
|
||||||
d_qpsk = constellation_qpsk::make();
|
d_qpsk = constellation_qpsk::make();
|
||||||
@@ -44,19 +45,18 @@ chunks_to_symbols_impl::chunks_to_symbols_impl() :
|
|||||||
chunks_to_symbols_impl::~chunks_to_symbols_impl() {}
|
chunks_to_symbols_impl::~chunks_to_symbols_impl() {}
|
||||||
|
|
||||||
|
|
||||||
int
|
int chunks_to_symbols_impl::work(int noutput_items,
|
||||||
chunks_to_symbols_impl::work(int noutput_items,
|
|
||||||
gr_vector_int& ninput_items,
|
gr_vector_int& ninput_items,
|
||||||
gr_vector_const_void_star& input_items,
|
gr_vector_const_void_star& input_items,
|
||||||
gr_vector_void_star &output_items) {
|
gr_vector_void_star& output_items)
|
||||||
|
{
|
||||||
|
|
||||||
const unsigned char* in = (unsigned char*)input_items[0];
|
const unsigned char* in = (unsigned char*)input_items[0];
|
||||||
gr_complex* out = (gr_complex*)output_items[0];
|
gr_complex* out = (gr_complex*)output_items[0];
|
||||||
|
|
||||||
std::vector<tag_t> tags;
|
std::vector<tag_t> tags;
|
||||||
get_tags_in_range(tags, 0, nitems_read(0),
|
get_tags_in_range(
|
||||||
nitems_read(0) + ninput_items[0],
|
tags, 0, nitems_read(0), nitems_read(0) + ninput_items[0], pmt::mp("encoding"));
|
||||||
pmt::mp("encoding"));
|
|
||||||
if (tags.size() != 1) {
|
if (tags.size() != 1) {
|
||||||
throw std::runtime_error("no encoding in input stream");
|
throw std::runtime_error("no encoding in input stream");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_IMPL_H
|
#ifndef INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_IMPL_H
|
||||||
#define INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_IMPL_H
|
#define INCLUDED_IEEE802_11_CHUNKS_TO_SYMBOLS_IMPL_H
|
||||||
|
|
||||||
#include <ieee802-11/chunks_to_symbols.h>
|
#include <ieee802_11/chunks_to_symbols.h>
|
||||||
#include <ieee802-11/constellations.h>
|
#include <ieee802_11/constellations.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
|
|||||||
+25
-27
@@ -18,14 +18,15 @@
|
|||||||
|
|
||||||
using namespace gr::ieee802_11;
|
using namespace gr::ieee802_11;
|
||||||
|
|
||||||
constellation_bpsk::sptr
|
constellation_bpsk::sptr constellation_bpsk::make()
|
||||||
constellation_bpsk::make() {
|
{
|
||||||
return constellation_bpsk::sptr(new constellation_bpsk_impl());
|
return constellation_bpsk::sptr(new constellation_bpsk_impl());
|
||||||
}
|
}
|
||||||
|
|
||||||
constellation_bpsk::constellation_bpsk() {}
|
constellation_bpsk::constellation_bpsk() {}
|
||||||
|
|
||||||
constellation_bpsk_impl::constellation_bpsk_impl() {
|
constellation_bpsk_impl::constellation_bpsk_impl()
|
||||||
|
{
|
||||||
d_constellation.resize(2);
|
d_constellation.resize(2);
|
||||||
d_constellation[0] = gr_complex(-1, 0);
|
d_constellation[0] = gr_complex(-1, 0);
|
||||||
d_constellation[1] = gr_complex(1, 0);
|
d_constellation[1] = gr_complex(1, 0);
|
||||||
@@ -34,25 +35,25 @@ constellation_bpsk_impl::constellation_bpsk_impl() {
|
|||||||
calc_arity();
|
calc_arity();
|
||||||
}
|
}
|
||||||
|
|
||||||
constellation_bpsk_impl::~constellation_bpsk_impl() {
|
constellation_bpsk_impl::~constellation_bpsk_impl() {}
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int
|
unsigned int constellation_bpsk_impl::decision_maker(const gr_complex* sample)
|
||||||
constellation_bpsk_impl::decision_maker(const gr_complex *sample) {
|
{
|
||||||
return (real(*sample) > 0);
|
return (real(*sample) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
|
||||||
constellation_qpsk::sptr
|
constellation_qpsk::sptr constellation_qpsk::make()
|
||||||
constellation_qpsk::make() {
|
{
|
||||||
return constellation_qpsk::sptr(new constellation_qpsk_impl());
|
return constellation_qpsk::sptr(new constellation_qpsk_impl());
|
||||||
}
|
}
|
||||||
|
|
||||||
constellation_qpsk::constellation_qpsk() {}
|
constellation_qpsk::constellation_qpsk() {}
|
||||||
|
|
||||||
constellation_qpsk_impl::constellation_qpsk_impl() {
|
constellation_qpsk_impl::constellation_qpsk_impl()
|
||||||
|
{
|
||||||
const float level = sqrt(float(0.5));
|
const float level = sqrt(float(0.5));
|
||||||
d_constellation.resize(4);
|
d_constellation.resize(4);
|
||||||
// Gray-coded
|
// Gray-coded
|
||||||
@@ -66,19 +67,18 @@ constellation_qpsk_impl::constellation_qpsk_impl() {
|
|||||||
calc_arity();
|
calc_arity();
|
||||||
}
|
}
|
||||||
|
|
||||||
constellation_qpsk_impl::~constellation_qpsk_impl() {
|
constellation_qpsk_impl::~constellation_qpsk_impl() {}
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int
|
unsigned int constellation_qpsk_impl::decision_maker(const gr_complex* sample)
|
||||||
constellation_qpsk_impl::decision_maker(const gr_complex *sample) {
|
{
|
||||||
return 2 * (imag(*sample) > 0) + (real(*sample) > 0);
|
return 2 * (imag(*sample) > 0) + (real(*sample) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
|
||||||
constellation_16qam::sptr
|
constellation_16qam::sptr constellation_16qam::make()
|
||||||
constellation_16qam::make() {
|
{
|
||||||
return constellation_16qam::sptr(new constellation_16qam_impl());
|
return constellation_16qam::sptr(new constellation_16qam_impl());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,11 +111,9 @@ constellation_16qam_impl::constellation_16qam_impl()
|
|||||||
calc_arity();
|
calc_arity();
|
||||||
}
|
}
|
||||||
|
|
||||||
constellation_16qam_impl::~constellation_16qam_impl() {
|
constellation_16qam_impl::~constellation_16qam_impl() {}
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int
|
unsigned int constellation_16qam_impl::decision_maker(const gr_complex* sample)
|
||||||
constellation_16qam_impl::decision_maker(const gr_complex *sample)
|
|
||||||
{
|
{
|
||||||
unsigned int ret = 0;
|
unsigned int ret = 0;
|
||||||
const float level = sqrt(float(0.1));
|
const float level = sqrt(float(0.1));
|
||||||
@@ -133,14 +131,15 @@ constellation_16qam_impl::decision_maker(const gr_complex *sample)
|
|||||||
|
|
||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
|
||||||
constellation_64qam::sptr
|
constellation_64qam::sptr constellation_64qam::make()
|
||||||
constellation_64qam::make() {
|
{
|
||||||
return constellation_64qam::sptr(new constellation_64qam_impl());
|
return constellation_64qam::sptr(new constellation_64qam_impl());
|
||||||
}
|
}
|
||||||
|
|
||||||
constellation_64qam::constellation_64qam() {}
|
constellation_64qam::constellation_64qam() {}
|
||||||
|
|
||||||
constellation_64qam_impl::constellation_64qam_impl() {
|
constellation_64qam_impl::constellation_64qam_impl()
|
||||||
|
{
|
||||||
const float level = sqrt(float(1 / 42.0));
|
const float level = sqrt(float(1 / 42.0));
|
||||||
d_constellation.resize(64);
|
d_constellation.resize(64);
|
||||||
|
|
||||||
@@ -214,11 +213,10 @@ constellation_64qam_impl::constellation_64qam_impl() {
|
|||||||
calc_arity();
|
calc_arity();
|
||||||
}
|
}
|
||||||
|
|
||||||
constellation_64qam_impl::~constellation_64qam_impl() {
|
constellation_64qam_impl::~constellation_64qam_impl() {}
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int
|
unsigned int constellation_64qam_impl::decision_maker(const gr_complex* sample)
|
||||||
constellation_64qam_impl::decision_maker(const gr_complex *sample) {
|
{
|
||||||
unsigned int ret = 0;
|
unsigned int ret = 0;
|
||||||
const float level = sqrt(float(1 / 42.0));
|
const float level = sqrt(float(1 / 42.0));
|
||||||
float re = sample->real();
|
float re = sample->real();
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_CONSTELLATIONS_IMPL_H
|
#ifndef INCLUDED_IEEE802_11_CONSTELLATIONS_IMPL_H
|
||||||
#define INCLUDED_IEEE802_11_CONSTELLATIONS_IMPL_H
|
#define INCLUDED_IEEE802_11_CONSTELLATIONS_IMPL_H
|
||||||
|
|
||||||
#include <ieee802-11/constellations.h>
|
#include <ieee802_11/constellations.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
@@ -42,7 +42,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class constellation_16qam_impl : public constellation_16qam
|
class constellation_16qam_impl : public constellation_16qam
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -53,8 +52,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class constellation_64qam_impl : public constellation_64qam
|
class constellation_64qam_impl : public constellation_64qam
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
+57
-49
@@ -14,40 +14,40 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include <ieee802-11/decode_mac.h>
|
#include <ieee802_11/decode_mac.h>
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "viterbi_decoder.h"
|
#include "viterbi_decoder/viterbi_decoder.h"
|
||||||
|
|
||||||
#include <boost/crc.hpp>
|
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <boost/crc.hpp>
|
||||||
|
|
||||||
using namespace gr::ieee802_11;
|
using namespace gr::ieee802_11;
|
||||||
|
|
||||||
#define LINKTYPE_IEEE802_11 105 /* http://www.tcpdump.org/linktypes.html */
|
#define LINKTYPE_IEEE802_11 105 /* http://www.tcpdump.org/linktypes.html */
|
||||||
|
|
||||||
class decode_mac_impl : public decode_mac {
|
class decode_mac_impl : public decode_mac
|
||||||
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
decode_mac_impl(bool log, bool debug) :
|
decode_mac_impl(bool log, bool debug)
|
||||||
block("decode_mac",
|
: block("decode_mac",
|
||||||
gr::io_signature::make(1, 1, 48),
|
gr::io_signature::make(1, 1, 48),
|
||||||
gr::io_signature::make(0, 0, 0)),
|
gr::io_signature::make(0, 0, 0)),
|
||||||
d_log(log),
|
d_log(log),
|
||||||
d_debug(debug),
|
d_debug(debug),
|
||||||
d_snr(0),
|
|
||||||
d_nom_freq(0.0),
|
|
||||||
d_freq_offset(0.0),
|
|
||||||
d_ofdm(BPSK_1_2),
|
d_ofdm(BPSK_1_2),
|
||||||
d_frame(d_ofdm, 0),
|
d_frame(d_ofdm, 0),
|
||||||
d_frame_complete(true) {
|
d_frame_complete(true)
|
||||||
|
{
|
||||||
message_port_register_out(pmt::mp("out"));
|
message_port_register_out(pmt::mp("out"));
|
||||||
}
|
}
|
||||||
|
|
||||||
int general_work (int noutput_items, gr_vector_int& ninput_items,
|
int general_work(int noutput_items,
|
||||||
|
gr_vector_int& ninput_items,
|
||||||
gr_vector_const_void_star& input_items,
|
gr_vector_const_void_star& input_items,
|
||||||
gr_vector_void_star& output_items) {
|
gr_vector_void_star& output_items)
|
||||||
|
{
|
||||||
|
|
||||||
const uint8_t* in = (const uint8_t*)input_items[0];
|
const uint8_t* in = (const uint8_t*)input_items[0];
|
||||||
|
|
||||||
@@ -60,22 +60,27 @@ int general_work (int noutput_items, gr_vector_int& ninput_items,
|
|||||||
|
|
||||||
while (i < ninput_items[0]) {
|
while (i < ninput_items[0]) {
|
||||||
|
|
||||||
get_tags_in_range(tags, 0, nread + i, nread + i + 1,
|
get_tags_in_range(tags, 0, nread + i, nread + i + 1);
|
||||||
pmt::string_to_symbol("wifi_start"));
|
|
||||||
|
|
||||||
if (tags.size()) {
|
if (tags.size()) {
|
||||||
if (d_frame_complete == false) {
|
if (d_frame_complete == false) {
|
||||||
dout << "Warning: starting to receive new frame before old frame was complete" << std::endl;
|
dout << "Warning: starting to receive new frame before old frame was "
|
||||||
dout << "Already copied " << copied << " out of " << d_frame.n_sym << " symbols of last frame" << std::endl;
|
"complete"
|
||||||
|
<< std::endl;
|
||||||
|
dout << "Already copied " << copied << " out of " << d_frame.n_sym
|
||||||
|
<< " symbols of last frame" << std::endl;
|
||||||
}
|
}
|
||||||
d_frame_complete = false;
|
d_frame_complete = false;
|
||||||
|
|
||||||
pmt::pmt_t dict = tags[0].value;
|
// Enter tags into metadata dictionary
|
||||||
int len_data = pmt::to_uint64(pmt::dict_ref(dict, pmt::mp("frame_bytes"), pmt::from_uint64(MAX_PSDU_SIZE+1)));
|
d_meta = pmt::make_dict();
|
||||||
int encoding = pmt::to_uint64(pmt::dict_ref(dict, pmt::mp("encoding"), pmt::from_uint64(0)));
|
for (auto tag : tags)
|
||||||
d_snr = pmt::to_double(pmt::dict_ref(dict, pmt::mp("snr"), pmt::from_double(0)));
|
d_meta = pmt::dict_add(d_meta, tag.key, tag.value);
|
||||||
d_nom_freq = pmt::to_double(pmt::dict_ref(dict, pmt::mp("freq"), pmt::from_double(0)));
|
|
||||||
d_freq_offset = pmt::to_double(pmt::dict_ref(dict, pmt::mp("freq_offset"), pmt::from_double(0)));
|
int len_data = pmt::to_uint64(pmt::dict_ref(
|
||||||
|
d_meta, pmt::mp("frame bytes"), pmt::from_uint64(MAX_PSDU_SIZE + 1)));
|
||||||
|
int encoding = pmt::to_uint64(
|
||||||
|
pmt::dict_ref(d_meta, pmt::mp("encoding"), pmt::from_uint64(0)));
|
||||||
|
|
||||||
ofdm_param ofdm = ofdm_param((Encoding)encoding);
|
ofdm_param ofdm = ofdm_param((Encoding)encoding);
|
||||||
frame_param frame = frame_param(ofdm, len_data);
|
frame_param frame = frame_param(ofdm, len_data);
|
||||||
@@ -85,16 +90,17 @@ int general_work (int noutput_items, gr_vector_int& ninput_items,
|
|||||||
d_ofdm = ofdm;
|
d_ofdm = ofdm;
|
||||||
d_frame = frame;
|
d_frame = frame;
|
||||||
copied = 0;
|
copied = 0;
|
||||||
dout << "Decode MAC: frame start -- len " << len_data
|
dout << "Decode MAC: frame start -- len " << len_data << " symbols "
|
||||||
<< " symbols " << frame.n_sym << " encoding "
|
<< frame.n_sym << " encoding " << encoding << std::endl;
|
||||||
<< encoding << std::endl;
|
|
||||||
} else {
|
} else {
|
||||||
dout << "Dropping frame which is too large (symbols or bits)" << std::endl;
|
dout << "Dropping frame which is too large (symbols or bits)"
|
||||||
|
<< std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (copied < d_frame.n_sym) {
|
if (copied < d_frame.n_sym) {
|
||||||
dout << "copy one symbol, copied " << copied << " out of " << d_frame.n_sym << std::endl;
|
dout << "copy one symbol, copied " << copied << " out of "
|
||||||
|
<< d_frame.n_sym << std::endl;
|
||||||
std::memcpy(d_rx_symbols + (copied * 48), in, 48);
|
std::memcpy(d_rx_symbols + (copied * 48), in, 48);
|
||||||
copied++;
|
copied++;
|
||||||
|
|
||||||
@@ -117,7 +123,8 @@ int general_work (int noutput_items, gr_vector_int& ninput_items,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void decode() {
|
void decode()
|
||||||
|
{
|
||||||
|
|
||||||
for (int i = 0; i < d_frame.n_sym * 48; i++) {
|
for (int i = 0; i < d_frame.n_sym * 48; i++) {
|
||||||
for (int k = 0; k < d_ofdm.n_bpsc; k++) {
|
for (int k = 0; k < d_ofdm.n_bpsc; k++) {
|
||||||
@@ -138,22 +145,19 @@ void decode() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog(boost::format("encoding: %1% - length: %2% - symbols: %3%")
|
mylog(boost::format("encoding: %1% - length: %2% - symbols: %3%") %
|
||||||
% d_ofdm.encoding % d_frame.psdu_size % d_frame.n_sym);
|
d_ofdm.encoding % d_frame.psdu_size % d_frame.n_sym);
|
||||||
|
|
||||||
// create PDU
|
// create PDU
|
||||||
pmt::pmt_t blob = pmt::make_blob(out_bytes + 2, d_frame.psdu_size - 4);
|
pmt::pmt_t blob = pmt::make_blob(out_bytes + 2, d_frame.psdu_size - 4);
|
||||||
pmt::pmt_t enc = pmt::from_uint64(d_ofdm.encoding);
|
d_meta =
|
||||||
pmt::pmt_t dict = pmt::make_dict();
|
pmt::dict_add(d_meta, pmt::mp("dlt"), pmt::from_long(LINKTYPE_IEEE802_11));
|
||||||
dict = pmt::dict_add(dict, pmt::mp("encoding"), enc);
|
|
||||||
dict = pmt::dict_add(dict, pmt::mp("snr"), pmt::from_double(d_snr));
|
message_port_pub(pmt::mp("out"), pmt::cons(d_meta, blob));
|
||||||
dict = pmt::dict_add(dict, pmt::mp("nomfreq"), pmt::from_double(d_nom_freq));
|
|
||||||
dict = pmt::dict_add(dict, pmt::mp("freqofs"), pmt::from_double(d_freq_offset));
|
|
||||||
dict = pmt::dict_add(dict, pmt::mp("dlt"), pmt::from_long(LINKTYPE_IEEE802_11));
|
|
||||||
message_port_pub(pmt::mp("out"), pmt::cons(dict, blob));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void deinterleave() {
|
void deinterleave()
|
||||||
|
{
|
||||||
|
|
||||||
int n_cbps = d_ofdm.n_cbps;
|
int n_cbps = d_ofdm.n_cbps;
|
||||||
int first[n_cbps];
|
int first[n_cbps];
|
||||||
@@ -171,13 +175,15 @@ void deinterleave() {
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
for (int i = 0; i < d_frame.n_sym; i++) {
|
for (int i = 0; i < d_frame.n_sym; i++) {
|
||||||
for (int k = 0; k < n_cbps; k++) {
|
for (int k = 0; k < n_cbps; k++) {
|
||||||
d_deinterleaved_bits[i * n_cbps + second[first[k]]] = d_rx_bits[i * n_cbps + k];
|
d_deinterleaved_bits[i * n_cbps + second[first[k]]] =
|
||||||
|
d_rx_bits[i * n_cbps + k];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void descramble (uint8_t *decoded_bits) {
|
void descramble(uint8_t* decoded_bits)
|
||||||
|
{
|
||||||
|
|
||||||
int state = 0;
|
int state = 0;
|
||||||
std::memset(out_bytes, 0, d_frame.psdu_size + 2);
|
std::memset(out_bytes, 0, d_frame.psdu_size + 2);
|
||||||
@@ -200,12 +206,14 @@ void descramble (uint8_t *decoded_bits) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_output() {
|
void print_output()
|
||||||
|
{
|
||||||
|
|
||||||
dout << std::endl;
|
dout << std::endl;
|
||||||
dout << "psdu size" << d_frame.psdu_size << std::endl;
|
dout << "psdu size" << d_frame.psdu_size << std::endl;
|
||||||
for (int i = 2; i < d_frame.psdu_size + 2; i++) {
|
for (int i = 2; i < d_frame.psdu_size + 2; i++) {
|
||||||
dout << std::setfill('0') << std::setw(2) << std::hex << ((unsigned int)out_bytes[i] & 0xFF) << std::dec << " ";
|
dout << std::setfill('0') << std::setw(2) << std::hex
|
||||||
|
<< ((unsigned int)out_bytes[i] & 0xFF) << std::dec << " ";
|
||||||
if (i % 16 == 15) {
|
if (i % 16 == 15) {
|
||||||
dout << std::endl;
|
dout << std::endl;
|
||||||
}
|
}
|
||||||
@@ -225,11 +233,11 @@ private:
|
|||||||
bool d_debug;
|
bool d_debug;
|
||||||
bool d_log;
|
bool d_log;
|
||||||
|
|
||||||
|
pmt::pmt_t d_meta;
|
||||||
|
|
||||||
frame_param d_frame;
|
frame_param d_frame;
|
||||||
ofdm_param d_ofdm;
|
ofdm_param d_ofdm;
|
||||||
double d_snr; // dB
|
|
||||||
double d_nom_freq; // nominal frequency, Hz
|
|
||||||
double d_freq_offset; // frequency offset, Hz
|
|
||||||
viterbi_decoder d_decoder;
|
viterbi_decoder d_decoder;
|
||||||
|
|
||||||
uint8_t d_rx_symbols[48 * MAX_SYM];
|
uint8_t d_rx_symbols[48 * MAX_SYM];
|
||||||
@@ -241,7 +249,7 @@ private:
|
|||||||
bool d_frame_complete;
|
bool d_frame_complete;
|
||||||
};
|
};
|
||||||
|
|
||||||
decode_mac::sptr
|
decode_mac::sptr decode_mac::make(bool log, bool debug)
|
||||||
decode_mac::make(bool log, bool debug) {
|
{
|
||||||
return gnuradio::get_initial_sptr(new decode_mac_impl(log, debug));
|
return gnuradio::get_initial_sptr(new decode_mac_impl(log, debug));
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-17
@@ -21,22 +21,30 @@
|
|||||||
|
|
||||||
using namespace gr::ieee802_11::equalizer;
|
using namespace gr::ieee802_11::equalizer;
|
||||||
|
|
||||||
const gr_complex base::LONG[] = {
|
const gr_complex base::LONG[] = { 0, 0, 0, 0, 0, 0, 1, 1, -1, -1, 1, 1, -1,
|
||||||
0, 0, 0, 0, 0, 0, 1, 1, -1, -1,
|
1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1,
|
||||||
1, 1, -1, 1, -1, 1, 1, 1, 1, 1,
|
1, -1, 1, 1, 1, 1, 0, 1, -1, -1, 1, 1, -1,
|
||||||
1, -1, -1, 1, 1, -1, 1, -1, 1, 1,
|
1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1,
|
||||||
1, 1, 0, 1, -1, -1, 1, 1, -1, 1,
|
-1, 1, -1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
|
||||||
-1, 1, -1, -1, -1, -1, -1, 1, 1, -1,
|
|
||||||
-1, 1, -1, 1, -1, 1, 1, 1, 1, 0,
|
|
||||||
0, 0, 0, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
const gr_complex base::POLARITY[127] = {
|
const gr_complex base::POLARITY[127] = {
|
||||||
1, 1, 1, 1,-1,-1,-1, 1,-1,-1,-1,-1, 1, 1,-1, 1,
|
1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1,
|
||||||
-1,-1, 1, 1,-1, 1, 1,-1, 1, 1, 1, 1, 1, 1,-1, 1,
|
1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1,
|
||||||
1, 1,-1, 1, 1,-1,-1, 1, 1, 1,-1, 1,-1,-1,-1, 1,
|
-1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1,
|
||||||
-1, 1,-1,-1, 1,-1,-1, 1, 1, 1, 1, 1,-1,-1, 1, 1,
|
1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1,
|
||||||
-1,-1, 1,-1, 1,-1, 1, 1,-1,-1,-1, 1, 1,-1,-1,-1,
|
1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1,
|
||||||
-1, 1,-1,-1, 1,-1, 1, 1, 1, 1,-1, 1,-1, 1,-1, 1,
|
1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1
|
||||||
-1,-1,-1,-1,-1, 1,-1, 1, 1,-1, 1,-1, 1, 1, 1,-1,
|
};
|
||||||
-1, 1,-1,-1,-1, 1, 1, 1,-1,-1,-1,-1,-1,-1,-1 };
|
|
||||||
|
std::vector<gr_complex> base::get_csi()
|
||||||
|
{
|
||||||
|
std::vector<gr_complex> csi;
|
||||||
|
csi.reserve(52);
|
||||||
|
for (int i = 0; i < 64; i++) {
|
||||||
|
if ((i == 32) || (i < 6) || (i > 58)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
csi.push_back(d_H[i]);
|
||||||
|
}
|
||||||
|
return csi;
|
||||||
|
}
|
||||||
|
|||||||
+13
-4
@@ -18,26 +18,35 @@
|
|||||||
#ifndef INCLUDED_IEEE802_11_EQUALIZER_BASE_H
|
#ifndef INCLUDED_IEEE802_11_EQUALIZER_BASE_H
|
||||||
#define INCLUDED_IEEE802_11_EQUALIZER_BASE_H
|
#define INCLUDED_IEEE802_11_EQUALIZER_BASE_H
|
||||||
|
|
||||||
#include <gnuradio/gr_complex.h>
|
|
||||||
#include <gnuradio/digital/constellation.h>
|
#include <gnuradio/digital/constellation.h>
|
||||||
|
#include <gnuradio/gr_complex.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
namespace equalizer {
|
namespace equalizer {
|
||||||
|
|
||||||
class base {
|
class base
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~base(){};
|
virtual ~base(){};
|
||||||
virtual void equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, boost::shared_ptr<gr::digital::constellation> mod) = 0;
|
virtual void equalize(gr_complex* in,
|
||||||
|
int n,
|
||||||
|
gr_complex* symbols,
|
||||||
|
uint8_t* bits,
|
||||||
|
boost::shared_ptr<gr::digital::constellation> mod) = 0;
|
||||||
virtual double get_snr() = 0;
|
virtual double get_snr() = 0;
|
||||||
|
|
||||||
static const gr_complex POLARITY[127];
|
static const gr_complex POLARITY[127];
|
||||||
|
|
||||||
|
std::vector<gr_complex> get_csi();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static const gr_complex LONG[64];
|
static const gr_complex LONG[64];
|
||||||
|
|
||||||
|
gr_complex d_H[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace channel_estimation */
|
} // namespace equalizer
|
||||||
} /* namespace ieee802_11 */
|
} /* namespace ieee802_11 */
|
||||||
} /* namespace gr */
|
} /* namespace gr */
|
||||||
|
|
||||||
|
|||||||
+17
-10
@@ -19,7 +19,12 @@
|
|||||||
|
|
||||||
using namespace gr::ieee802_11::equalizer;
|
using namespace gr::ieee802_11::equalizer;
|
||||||
|
|
||||||
void comb::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, boost::shared_ptr<gr::digital::constellation> mod) {
|
void comb::equalize(gr_complex* in,
|
||||||
|
int n,
|
||||||
|
gr_complex* symbols,
|
||||||
|
uint8_t* bits,
|
||||||
|
boost::shared_ptr<gr::digital::constellation> mod)
|
||||||
|
{
|
||||||
|
|
||||||
gr_complex pilot[4];
|
gr_complex pilot[4];
|
||||||
|
|
||||||
@@ -43,13 +48,17 @@ void comb::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, b
|
|||||||
if (i <= 11) {
|
if (i <= 11) {
|
||||||
H = gr_complex((11 - i) / 11.0, 0) * avg + gr_complex(i / 11.0, 0) * pilot[0];
|
H = gr_complex((11 - i) / 11.0, 0) * avg + gr_complex(i / 11.0, 0) * pilot[0];
|
||||||
} else if (i <= 25) {
|
} else if (i <= 25) {
|
||||||
H = gr_complex((25-i) / 14.0, 0) * pilot[0] + gr_complex((i-11) / 14.0, 0) * pilot[1];
|
H = gr_complex((25 - i) / 14.0, 0) * pilot[0] +
|
||||||
|
gr_complex((i - 11) / 14.0, 0) * pilot[1];
|
||||||
} else if (i <= 39) {
|
} else if (i <= 39) {
|
||||||
H = gr_complex((39-i) / 14.0, 0) * pilot[1] + gr_complex((i-25) / 14.0, 0) * pilot[2];
|
H = gr_complex((39 - i) / 14.0, 0) * pilot[1] +
|
||||||
|
gr_complex((i - 25) / 14.0, 0) * pilot[2];
|
||||||
} else if (i <= 53) {
|
} else if (i <= 53) {
|
||||||
H = gr_complex((53-i) / 14.0, 0) * pilot[2] + gr_complex((i-39) / 14.0, 0) * pilot[3];
|
H = gr_complex((53 - i) / 14.0, 0) * pilot[2] +
|
||||||
|
gr_complex((i - 39) / 14.0, 0) * pilot[3];
|
||||||
} else {
|
} else {
|
||||||
H = gr_complex((64-i) / 11.0, 0) * pilot[3] + gr_complex((i-53) / 11.0, 0) * avg;
|
H = gr_complex((64 - i) / 11.0, 0) * pilot[3] +
|
||||||
|
gr_complex((i - 53) / 11.0, 0) * avg;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
@@ -61,7 +70,8 @@ void comb::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, b
|
|||||||
|
|
||||||
int c = 0;
|
int c = 0;
|
||||||
for (int i = 0; i < 64; i++) {
|
for (int i = 0; i < 64; i++) {
|
||||||
if( (i == 11) || (i == 25) || (i == 32) || (i == 39) || (i == 53) || (i < 6) || ( i > 58)) {
|
if ((i == 11) || (i == 25) || (i == 32) || (i == 39) || (i == 53) || (i < 6) ||
|
||||||
|
(i > 58)) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
symbols[c] = in[i] / d_H[i];
|
symbols[c] = in[i] / d_H[i];
|
||||||
@@ -71,7 +81,4 @@ void comb::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
double comb::get_snr() { return 42; }
|
||||||
comb::get_snr() {
|
|
||||||
return 42;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -24,21 +24,22 @@ namespace gr {
|
|||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
namespace equalizer {
|
namespace equalizer {
|
||||||
|
|
||||||
class comb: public base {
|
class comb : public base
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
virtual void equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, boost::shared_ptr<gr::digital::constellation> mod);
|
virtual void equalize(gr_complex* in,
|
||||||
|
int n,
|
||||||
|
gr_complex* symbols,
|
||||||
|
uint8_t* bits,
|
||||||
|
boost::shared_ptr<gr::digital::constellation> mod);
|
||||||
double get_snr();
|
double get_snr();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
gr_complex d_H[64];
|
|
||||||
|
|
||||||
|
|
||||||
const double alpha = 0.2;
|
const double alpha = 0.2;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace channel_estimation */
|
} // namespace equalizer
|
||||||
} /* namespace ieee802_11 */
|
} /* namespace ieee802_11 */
|
||||||
} /* namespace gr */
|
} /* namespace gr */
|
||||||
|
|
||||||
#endif /* INCLUDED_IEEE802_11_EQUALIZER_COMB_H */
|
#endif /* INCLUDED_IEEE802_11_EQUALIZER_COMB_H */
|
||||||
|
|
||||||
|
|||||||
+11
-7
@@ -21,7 +21,12 @@
|
|||||||
|
|
||||||
using namespace gr::ieee802_11::equalizer;
|
using namespace gr::ieee802_11::equalizer;
|
||||||
|
|
||||||
void lms::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, boost::shared_ptr<gr::digital::constellation> mod) {
|
void lms::equalize(gr_complex* in,
|
||||||
|
int n,
|
||||||
|
gr_complex* symbols,
|
||||||
|
uint8_t* bits,
|
||||||
|
boost::shared_ptr<gr::digital::constellation> mod)
|
||||||
|
{
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
std::memcpy(d_H, in, 64 * sizeof(gr_complex));
|
std::memcpy(d_H, in, 64 * sizeof(gr_complex));
|
||||||
@@ -44,21 +49,20 @@ void lms::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, bo
|
|||||||
} else {
|
} else {
|
||||||
int c = 0;
|
int c = 0;
|
||||||
for (int i = 0; i < 64; i++) {
|
for (int i = 0; i < 64; i++) {
|
||||||
if( (i == 11) || (i == 25) || (i == 32) || (i == 39) || (i == 53) || (i < 6) || ( i > 58)) {
|
if ((i == 11) || (i == 25) || (i == 32) || (i == 39) || (i == 53) ||
|
||||||
|
(i < 6) || (i > 58)) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
symbols[c] = in[i] / d_H[i];
|
symbols[c] = in[i] / d_H[i];
|
||||||
bits[c] = mod->decision_maker(&symbols[c]);
|
bits[c] = mod->decision_maker(&symbols[c]);
|
||||||
gr_complex point;
|
gr_complex point;
|
||||||
mod->map_to_points(bits[c], &point);
|
mod->map_to_points(bits[c], &point);
|
||||||
d_H[i] = gr_complex(1-alpha,0) * d_H[i] + gr_complex(alpha,0) * in[i] / point;
|
d_H[i] = gr_complex(1 - alpha, 0) * d_H[i] +
|
||||||
|
gr_complex(alpha, 0) * in[i] / point;
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
double lms::get_snr() { return d_snr; }
|
||||||
lms::get_snr() {
|
|
||||||
return d_snr;
|
|
||||||
}
|
|
||||||
|
|||||||
+9
-5
@@ -25,19 +25,23 @@ namespace gr {
|
|||||||
namespace ieee802_11 {
|
namespace ieee802_11 {
|
||||||
namespace equalizer {
|
namespace equalizer {
|
||||||
|
|
||||||
class lms: public base {
|
class lms : public base
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
virtual void equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, boost::shared_ptr<gr::digital::constellation> mod);
|
virtual void equalize(gr_complex* in,
|
||||||
|
int n,
|
||||||
|
gr_complex* symbols,
|
||||||
|
uint8_t* bits,
|
||||||
|
boost::shared_ptr<gr::digital::constellation> mod);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double get_snr();
|
double get_snr();
|
||||||
|
|
||||||
|
|
||||||
gr_complex d_H[64];
|
|
||||||
double d_snr;
|
double d_snr;
|
||||||
const double alpha = 0.5;
|
const double alpha = 0.5;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace channel_estimation */
|
} // namespace equalizer
|
||||||
} /* namespace ieee802_11 */
|
} /* namespace ieee802_11 */
|
||||||
} /* namespace gr */
|
} /* namespace gr */
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user