Skip to content

Commit

Permalink
restructured project for building with CMake
Browse files Browse the repository at this point in the history
  • Loading branch information
unforgiven512 committed Jan 9, 2025
1 parent 7e6db35 commit 5b38fdd
Show file tree
Hide file tree
Showing 44 changed files with 51,694 additions and 48,281 deletions.
29 changes: 29 additions & 0 deletions ARDOP_OFDM.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
ARDOPOFDM is an experimental extension to ARDOP2. The higher speed PSK and QAM modes of ARDOP2 are replaced with OFDM modes. There are two bandwidths, 500 and 2500 and 4 modes within each bandwidth (2PSK, 4PSK 8PSK and 16PSK or 16QAM). The code uses a modulation rate and carrier spacing of 55.555 Hz. The 500 mode uses 9 carriers and the 2500 mode 43 carriers. There isn't a 200 wide version.

The code runs on Windows, Linux and my Teensy TNC.

ARDOPOFDM has one new configuration parameter, ENABLEOFDM, with a default of TRUE. Apart from the new data frames it has two new CONREQ frames, OCONREQ500 and OCONREQ2500 and a new ACK, OFDMACK. If ENABLEOFDM is set it will send and accept the OCONREQ frames and the OFDM data frames. For compatibility with ARDOP2 stations if it receives a normal CONREQ frame it will disable the use of the OFDM data frames. If ENABLEOFDM is set to FALSE it will use normal CONREQ frames and reject OCONREQ, so it can connect to ARDOP2 stations. ARDOPOFDM acks each carrier separately, so only carriers that have failed to decode are repeated. If all carriers are ok a normal DataACK or DataACKHQ frame is sent, if not a slightly longer OFDMACK is sent which indicates which carriers need to be repeated.

I haven't been able to evaluate it under a wide range of radio conditions, but initial testing looks promising. Under ideal conditions it is a bit over twice as fast as normal ARDOP (about 80% of the speed of VARA). Data frame length is a little under 5 seconds. Under ideal conditions performance in 2500 mode is

16OFDM 80 bytes/carrier, 3440 bytes per frame, approx 4600 BPS Net
8OFDM 60 bytes/carrier, 2580 bytes per frame, approx 3440 BPS Net
4OFDM 40 bytes/carrier, 1720 bytes per frame, approx 2300 BPS Net
2OFDM 19 bytes/carrier, 817 bytes per frame, approx 1100 BPS Net

For Comparison 16QAM.2500.100 (10 Carriers)

120 bytes/carrier, 1200 bytes per frame, approx 2225 BPS Net

As mentioned earlier this a experimental and modulation details and frame formats are likely to change as testing proceeds. It is really only suitable for people who a used to testing software.

Software can be downloaded from

http://www.cantab.net/users/john.wiseman/Downloads/Beta/ARDOPOFDM.exe
http://www.cantab.net/users/john.wiseman/Downloads/Beta/ardopofdm
http://www.cantab.net/users/john.wiseman/Downloads/Beta/piardopofdm
http://www.cantab.net/users/john.wiseman/Downloads/Beta/TeensyProjects.zip


The software has only been tested with BPQ32/LinBPQ and Winlink Express in PTC Emulation mode. You need to install the latest Beta BPQ32 or linbpq to use it. It may work with RMS Express in normal mode and Trimode, but this hasn't been tested and may result in slow running or data corruption due to changes in flow control thresholds.

165 changes: 165 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@


########################################################################
# Project setup
########################################################################

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(ardop2ofdm C)

INCLUDE(GNUInstallDirs)

# CMP0075 Include file check macros honor CMAKE_REQUIRED_LIBRARIES
IF (POLICY CMP0075)
CMAKE_POLICY(SET CMP0075 NEW)
ENDIF ()

# select the "Release" build type by default to get optimization flags
IF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release")
MESSAGE(STATUS "Build type not specified: defaulting to Release.")
ENDIF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")

LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)

IF (NOT LIB_INSTALL_DIR)
SET(LIB_INSTALL_DIR lib)
ENDIF ()

# Set the version information here
#
# 2.0.3.40-BPQ-OFDM
#SET(VERSION_INFO_MAJOR_VERSION 0) # increment major on api compatibility changes
#SET(VERSION_INFO_MINOR_VERSION 1) # increment minor on feature-level changes
#SET(VERSION_INFO_PATCH_VERSION git) # increment patch for bug fixes and docs
#INCLUDE(Version) # setup version info


# Set our own version info here...
# "2.0.3.40-BPQ-OFDM"

SET(VER_MAJOR 2)
SET(VER_MINOR 0)
SET(VER_PATCH 3)
SET(VER_SUBPATCH 40)
SET(VER_SUFFIX "BPQ-OFDM")

SET(VER_STRING "${VER_MAJOR}.${VER_MINOR}.${VER_PATCH}.${VER_SUBPATCH}-${VER_SUFFIX}")

SET(ARDOP_TCP_PORT 8515)
SET(ARDOP_CAT_TTY_DEVICE /dev/ttyUSB0)


########################################################################
# Compiler specific setup
########################################################################

IF (CMAKE_COMPILER_IS_GNUCC AND NOT WIN32)
ADD_DEFINITIONS(-Wall)
ADD_DEFINITIONS(-Wextra)
ADD_DEFINITIONS(-Wno-unused-parameter)
ADD_DEFINITIONS(-Wno-unused)
ADD_DEFINITIONS(-Wsign-compare)
ADD_DEFINITIONS(-Wdeclaration-after-statement)
# http://gcc.gnu.org/wiki/Visibility
ADD_DEFINITIONS(-fvisibility=hidden)
ENDIF ()

ADD_COMPILE_DEFINITIONS(VERSION_FROM_BUILD_SYSTEM)



########################################################################
# Find build dependencies
########################################################################

FIND_PACKAGE(PkgConfig)
FIND_PACKAGE(Threads)
FIND_PACKAGE(ALSA REQUIRED)


IF (NOT THREADS_FOUND)
MESSAGE(FATAL_ERROR "pthreads required to compile ardop1ofdm")
ENDIF ()


########################################################################
# Setup the include and linker paths
########################################################################

INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/include
${THREADS_PTHREADS_INCLUDE_DIR}
${ALSA_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
)

#link_directories(
# ...
#)

# Set component parameters
#set(INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)


########################################################################
# Create uninstall target
########################################################################

CONFIGURE_FILE(
${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
@ONLY
)

ADD_CUSTOM_TARGET(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)


########################################################################
# Add subdirectories
########################################################################

ADD_SUBDIRECTORY(include)
ADD_SUBDIRECTORY(src)


########################################################################
# Create other files
########################################################################

CONFIGURE_FILE(
${CMAKE_SOURCE_DIR}/include/Version.h.in
${CMAKE_CURRENT_BINARY_DIR}/Version.h
@ONLY
)

CONFIGURE_FILE(
${CMAKE_SOURCE_DIR}/cmake/ardop.service.in
${CMAKE_CURRENT_BINARY_DIR}/ardop.service
@ONLY
)

CONFIGURE_FILE(
${CMAKE_SOURCE_DIR}/cmake/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
@ONLY
)


#SET(prefix ${CMAKE_INSTALL_PREFIX})
#SET(exec_prefix \${prefix})
#SET(libdir \${exec_prefix}/${LIB_INSTALL_DIR})
#SET(includedir \${prefix}/include)





########################################################################
# Print Summary
########################################################################

#MESSAGE(STATUS "Building for version: ${VERSION} / ${LIBVER}")
MESSAGE(STATUS "Building version: ${VER_STRING}")
MESSAGE(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# ardop2ofdm #

ARDOP 2 modem with OFDM extensions.
Loading

0 comments on commit 5b38fdd

Please sign in to comment.