mirror of https://github.com/wb2osz/direwolf.git
Merge pull request #227 from ra1nb0w/cmake-dev
move to cmake, ctest, cpack to build direwolf
This commit is contained in:
commit
4444d3be5f
|
@ -107,3 +107,7 @@ $RECYCLE.BIN/
|
||||||
*.lnk
|
*.lnk
|
||||||
/use_this_sdk
|
/use_this_sdk
|
||||||
*.dSYM
|
*.dSYM
|
||||||
|
|
||||||
|
# cmake
|
||||||
|
build/
|
||||||
|
tmp/
|
|
@ -0,0 +1,279 @@
|
||||||
|
cmake_minimum_required(VERSION 3.1.0)
|
||||||
|
|
||||||
|
project(direwolf)
|
||||||
|
|
||||||
|
# configure version
|
||||||
|
set(direwolf_VERSION_MAJOR "1")
|
||||||
|
set(direwolf_VERSION_MINOR "6")
|
||||||
|
set(direwolf_VERSION_PATCH "0")
|
||||||
|
set(direwolf_VERSION_SUFFIX "")
|
||||||
|
|
||||||
|
# options
|
||||||
|
option(FORCE_SSE "Compile with SSE instruction only" OFF)
|
||||||
|
option(FORCE_SSSE3 "Compile with SSSE3 instruction only" OFF)
|
||||||
|
option(FORCE_SSE41 "Compile with SSE4.1 instruction only" OFF)
|
||||||
|
option(OPTIONAL_TEST "Compile optional test (might be broken)" OFF)
|
||||||
|
# UNITTEST option must be after CMAKE_BUILT_TYPE
|
||||||
|
|
||||||
|
# where cmake find custom modules
|
||||||
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
|
||||||
|
|
||||||
|
# fix c standard used on the project
|
||||||
|
set(CMAKE_C_STANDARD 99)
|
||||||
|
|
||||||
|
# Set additional project information
|
||||||
|
set(COMPANY "wb2osz")
|
||||||
|
add_definitions("-DCOMPANY=\"${COMPANY}\"")
|
||||||
|
set(APPLICATION_NAME "Dire Wolf")
|
||||||
|
add_definitions("-DAPPLICATION_NAME=\"${APPLICATION_NAME}\"")
|
||||||
|
set(APPLICATION_MAINTAINER="John Langner, WB2OSZ")
|
||||||
|
set(COPYRIGHT "Copyright (c) 2019 John Langner, WB2OSZ. All rights reserved.")
|
||||||
|
add_definitions("-DCOPYRIGHT=\"${COPYRIGHT}\"")
|
||||||
|
set(IDENTIFIER "com.${COMPANY}.${APPLICATION_NAME}")
|
||||||
|
add_definitions("-DIDENTIFIER=\"${IDENTIFIER}\"")
|
||||||
|
# raspberry as only lxterminal not xterm
|
||||||
|
if(NOT (WIN32 OR CYGWIN))
|
||||||
|
find_program(BINARY_TERMINAL_BIN lxterminal)
|
||||||
|
if(BINARY_TERMINAL_BIN)
|
||||||
|
set(APPLICATION_DESKTOP_EXEC "${BINARY_TERMINAL_BIN} -e ${CMAKE_PROJECT_NAME}")
|
||||||
|
else()
|
||||||
|
set(APPLICATION_DESKTOP_EXEC "xterm -e ${CMAKE_PROJECT_NAME}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(Git)
|
||||||
|
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git/")
|
||||||
|
# we can also use `git describe --tags`
|
||||||
|
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
|
||||||
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT res)
|
||||||
|
string(REGEX REPLACE "^v([0-9]+)\.([0-9]+)\.([0-9]+)-" "" git_commit ${out})
|
||||||
|
set(direwolf_VERSION_SUFFIX "-${git_commit}")
|
||||||
|
set(direwolf_VERSION_COMMIT "${git_commit}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set variables
|
||||||
|
set(direwolf_VERSION "${direwolf_VERSION_MAJOR}.${direwolf_VERSION_MINOR}.${direwolf_VERSION_PATCH}${direwolf_VERSION_SUFFIX}")
|
||||||
|
message(STATUS "${APPLICATION_NAME} Version: ${direwolf_VERSION}")
|
||||||
|
add_definitions("-DIREWOLF_VERSION=\"${direwolf_VERSION}\"")
|
||||||
|
add_definitions("-DMAJOR_VERSION=${direwolf_VERSION_MAJOR}")
|
||||||
|
add_definitions("-DMINOR_VERSION=${direwolf_VERSION_MINOR}")
|
||||||
|
if(direwolf_VERSION_COMMIT)
|
||||||
|
add_definitions("-DEXTRA_VERSION=${direwolf_VERSION_COMMIT}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CUSTOM_SRC_DIR "${CMAKE_SOURCE_DIR}/src")
|
||||||
|
set(CUSTOM_EXTERNAL_DIR "${CMAKE_SOURCE_DIR}/external")
|
||||||
|
set(CUSTOM_MISC_DIR "${CUSTOM_EXTERNAL_DIR}/misc")
|
||||||
|
set(CUSTOM_REGEX_DIR "${CUSTOM_EXTERNAL_DIR}/regex")
|
||||||
|
set(CUSTOM_GEOTRANZ_DIR "${CUSTOM_EXTERNAL_DIR}/geotranz")
|
||||||
|
set(CUSTOM_DATA_DIR "${CMAKE_SOURCE_DIR}/data")
|
||||||
|
set(CUSTOM_SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/scripts")
|
||||||
|
set(CUSTOM_TELEMETRY_DIR "${CUSTOM_SCRIPTS_DIR}/telemetry-toolkit")
|
||||||
|
set(CUSTOM_CONF_DIR "${CMAKE_SOURCE_DIR}/conf")
|
||||||
|
set(CUSTOM_DOC_DIR "${CMAKE_SOURCE_DIR}/doc")
|
||||||
|
set(CUSTOM_MAN_DIR "${CMAKE_SOURCE_DIR}/man")
|
||||||
|
set(CUSTOM_TEST_DIR "${CMAKE_SOURCE_DIR}/test")
|
||||||
|
set(CUSTOM_TEST_SCRIPTS_DIR "${CUSTOM_TEST_DIR}/scripts")
|
||||||
|
set(CUSTOM_SHELL_SHABANG "#!/bin/sh -e")
|
||||||
|
|
||||||
|
# cpack variables
|
||||||
|
set(CPACK_GENERATOR "ZIP")
|
||||||
|
set(CPACK_STRIP_FILES true)
|
||||||
|
set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
|
||||||
|
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${direwolf_VERSION}_${CMAKE_SYSTEM_PROCESSOR}")
|
||||||
|
set(CPACK_PACKAGE_CONTACT "https://github.com/wb2osz/direwolf")
|
||||||
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Dire Wolf is a software soundcard AX.25 packet modem/TNC and APRS encoder/decoder")
|
||||||
|
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
|
||||||
|
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
|
||||||
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
|
||||||
|
set(CPACK_SOURCE_IGNORE_FILES "${PROJECT_BINARY_DIR};/.git/;.gitignore;menu.yml;.travis.yml;.appveyor.yml;default.nix;.envrc;TODOs.org;/.scripts/")
|
||||||
|
|
||||||
|
# if we don't set build_type
|
||||||
|
if(NOT DEFINED CMAKE_BUILD_TYPE OR "${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||||
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
||||||
|
endif()
|
||||||
|
message(STATUS "Build type set to: ${CMAKE_BUILD_TYPE}")
|
||||||
|
message("CMake system: ${CMAKE_SYSTEM_NAME}")
|
||||||
|
|
||||||
|
# Unittest should be on for dev builds and off for releases.
|
||||||
|
if(CMAKE_BUILD_TYPE MATCHES "Release")
|
||||||
|
option(UNITTEST "Build unittest binaries." OFF)
|
||||||
|
else()
|
||||||
|
option(UNITTEST "Build unittest binaries." ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set compiler
|
||||||
|
include(FindCompiler)
|
||||||
|
|
||||||
|
# find cpu flags (and set compiler)
|
||||||
|
include(FindCPUflags)
|
||||||
|
|
||||||
|
# auto include current directory
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
|
||||||
|
# set OS dependant variables
|
||||||
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
|
set(LINUX TRUE)
|
||||||
|
|
||||||
|
configure_file("${CMAKE_SOURCE_DIR}/cmake/cpack/${CMAKE_PROJECT_NAME}.desktop.in"
|
||||||
|
"${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.desktop" @ONLY)
|
||||||
|
|
||||||
|
elseif(APPLE)
|
||||||
|
if("${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "")
|
||||||
|
message(STATUS "Build for macOS target: local version")
|
||||||
|
else()
|
||||||
|
message(STATUS "Build for macOS target: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# prepend path to find_*()
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "/opt/local")
|
||||||
|
|
||||||
|
set(CMAKE_MACOSX_RPATH ON)
|
||||||
|
message(STATUS "RPATH support: ${CMAKE_MACOSX_RPATH}")
|
||||||
|
|
||||||
|
elseif (WIN32)
|
||||||
|
if(NOT VS2015 AND NOT VS2017)
|
||||||
|
message(FATAL_ERROR "You must use Microsoft Visual Studio 2015 or 2017 as compiler")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# compile with full multicore
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
||||||
|
|
||||||
|
set(CUSTOM_SHELL_BIN "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (C_CLANG OR C_GCC)
|
||||||
|
# _BSD_SOURCE is deprecated we need to use _DEFAULT_SOURCE
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wvla -ffast-math -ftree-vectorize -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE ${EXTRA_FLAGS}")
|
||||||
|
# for math.h
|
||||||
|
link_libraries("-lm")
|
||||||
|
elseif (C_MSVC)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W3 -MP ${EXTRA_FLAGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (C_CLANG)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ferror-limit=1")
|
||||||
|
elseif (C_GCC)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmax-errors=1")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set installation directories
|
||||||
|
if (WIN32 OR CYGWIN)
|
||||||
|
set(INSTALL_BIN_DIR ".")
|
||||||
|
set(INSTALL_DOC_DIR "doc")
|
||||||
|
set(INSTALL_CONF_DIR ".")
|
||||||
|
set(INSTALL_SCRIPTS_DIR "scripts")
|
||||||
|
set(INSTALL_MAN_DIR "man")
|
||||||
|
set(INSTALL_DATA_DIR "data")
|
||||||
|
else()
|
||||||
|
set(INSTALL_BIN_DIR "bin")
|
||||||
|
set(INSTALL_DOC_DIR "share/doc/${CMAKE_PROJECT_NAME}")
|
||||||
|
set(INSTALL_CONF_DIR "${INSTALL_DOC_DIR}/conf")
|
||||||
|
set(INSTALL_SCRIPTS_DIR "${INSTALL_DOC_DIR}/scripts")
|
||||||
|
set(INSTALL_MAN_DIR "share/man/man1")
|
||||||
|
set(INSTALL_DATA_DIR "share/${PROJECT_NAME}")
|
||||||
|
endif(WIN32 OR CYGWIN)
|
||||||
|
|
||||||
|
# requirements
|
||||||
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
|
find_package(GPSD)
|
||||||
|
if(GPSD_FOUND)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DENABLE_GPSD")
|
||||||
|
else()
|
||||||
|
set(GPSD_INCLUDE_DIRS "")
|
||||||
|
set(GPSD_LIBRARIES "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(hamlib)
|
||||||
|
if(HAMLIB_FOUND)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_HAMLIB")
|
||||||
|
else()
|
||||||
|
set(HAMLIB_INCLUDE_DIRS "")
|
||||||
|
set(HAMLIB_LIBRARIES "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(LINUX)
|
||||||
|
find_package(ALSA REQUIRED)
|
||||||
|
if(ALSA_FOUND)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_ALSA")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(udev)
|
||||||
|
if(UDEV_FOUND)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_CM108")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif (NOT WIN32 AND NOT CYGWIN)
|
||||||
|
find_package(Portaudio REQUIRED)
|
||||||
|
if(PORTAUDIO_FOUND)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_PORTAUDIO")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
else()
|
||||||
|
set(ALSA_INCLUDE_DIRS "")
|
||||||
|
set(ALSA_LIBRARIES "")
|
||||||
|
set(UDEV_INCLUDE_DIRS "")
|
||||||
|
set(UDEV_LIBRARIES "")
|
||||||
|
set(PORTAUDIO_INCLUDE_DIRS "")
|
||||||
|
set(PORTAUDIO_LIBRARIES "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# manage and fetch new data
|
||||||
|
add_subdirectory(data)
|
||||||
|
|
||||||
|
# external libraries
|
||||||
|
add_subdirectory(${CUSTOM_GEOTRANZ_DIR})
|
||||||
|
add_subdirectory(${CUSTOM_REGEX_DIR})
|
||||||
|
add_subdirectory(${CUSTOM_MISC_DIR})
|
||||||
|
|
||||||
|
# direwolf source code and utilities
|
||||||
|
add_subdirectory(src)
|
||||||
|
|
||||||
|
# ctest
|
||||||
|
if(UNITTEST)
|
||||||
|
message(STATUS "Build unit test binaries")
|
||||||
|
include(CTest)
|
||||||
|
enable_testing()
|
||||||
|
add_subdirectory(test)
|
||||||
|
endif(UNITTEST)
|
||||||
|
|
||||||
|
# manage scripts
|
||||||
|
add_subdirectory(scripts)
|
||||||
|
|
||||||
|
# manage config
|
||||||
|
add_subdirectory(conf)
|
||||||
|
|
||||||
|
# install basic docs
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/CHANGES.md DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/external/LICENSE DESTINATION ${INSTALL_DOC_DIR}/external)
|
||||||
|
add_subdirectory(doc)
|
||||||
|
add_subdirectory(man)
|
||||||
|
|
||||||
|
# install desktop link
|
||||||
|
if (LINUX)
|
||||||
|
install(FILES ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.desktop DESTINATION share/applications)
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/cmake/cpack/${CMAKE_PROJECT_NAME}_icon.png DESTINATION share/pixmaps)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
############ uninstall target ################
|
||||||
|
configure_file(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/include/uninstall.cmake.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake"
|
||||||
|
IMMEDIATE @ONLY)
|
||||||
|
|
||||||
|
add_custom_target(uninstall
|
||||||
|
COMMAND ${CMAKE_COMMAND} -P
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake)
|
||||||
|
|
||||||
|
############ packaging ################
|
||||||
|
add_subdirectory(cmake/cpack)
|
20
Makefile
20
Makefile
|
@ -1,20 +0,0 @@
|
||||||
# Select proper Makefile for operating system.
|
|
||||||
# The Windows version is built with the help of Cygwin.
|
|
||||||
|
|
||||||
# In my case, I see CYGWIN_NT-6.1-WOW so we don't check for
|
|
||||||
# equal to some value. Your mileage my vary.
|
|
||||||
|
|
||||||
win := $(shell uname | grep CYGWIN)
|
|
||||||
ifeq ($(win),)
|
|
||||||
win := $(shell uname | grep MINGW)
|
|
||||||
endif
|
|
||||||
|
|
||||||
dar := $(shell uname | grep Darwin)
|
|
||||||
|
|
||||||
ifneq ($(win),)
|
|
||||||
include Makefile.win
|
|
||||||
else ifeq ($(dar),Darwin)
|
|
||||||
include Makefile.macosx
|
|
||||||
else
|
|
||||||
include Makefile.linux
|
|
||||||
endif
|
|
856
Makefile.linux
856
Makefile.linux
|
@ -1,856 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for Linux/Unix version of Dire Wolf.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Expecting Linux, FreeBSD, or OpenBSD here.
|
|
||||||
# Would it be feasible to merge Mac OSX back in or has it diverged too much?
|
|
||||||
|
|
||||||
OS = $(shell uname)
|
|
||||||
|
|
||||||
# Default for Linux. BSD does things differently.
|
|
||||||
# See https://github.com/wb2osz/direwolf/pull/92 for FreeBSD considerations.
|
|
||||||
|
|
||||||
PREFIX ?= /usr
|
|
||||||
|
|
||||||
|
|
||||||
APPS := direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients atest log2gpx gen_packets ttcalc kissutil cm108
|
|
||||||
|
|
||||||
|
|
||||||
all : $(APPS) direwolf.desktop direwolf.conf
|
|
||||||
@echo " "
|
|
||||||
@echo "Next step - install with:"
|
|
||||||
@echo " "
|
|
||||||
@echo " sudo make install"
|
|
||||||
@echo " "
|
|
||||||
|
|
||||||
# Default to gcc if something else not specified, e.g. clang.
|
|
||||||
|
|
||||||
CC ?= gcc
|
|
||||||
|
|
||||||
|
|
||||||
# _XOPEN_SOURCE=600 and _DEFAULT_SOURCE=1 are needed for glibc >= 2.24.
|
|
||||||
# Explanation here: https://github.com/wb2osz/direwolf/issues/62
|
|
||||||
|
|
||||||
# There are a few source files where it had been necessary to define __USE_XOPEN2KXSI,
|
|
||||||
# __USE_XOPEN, or _POSIX_C_SOURCE. Doesn't seem to be needed after adding this.
|
|
||||||
|
|
||||||
# -D_BSD_SOURCE because Raspbian wheezy was missing declaration for strsep and definition of fd_set.
|
|
||||||
# That was not necessary (but did not hurt) for more recent Ubuntu and Raspbian Jessie.
|
|
||||||
|
|
||||||
# The first assignment to CFLAGS and LDFLAGS uses +=, rather than :=, so
|
|
||||||
# we will inherit options already set in build environment.
|
|
||||||
# Explanation - https://github.com/wb2osz/direwolf/pull/38
|
|
||||||
|
|
||||||
# For BSD, these are supplied externally.
|
|
||||||
# https://github.com/wb2osz/direwolf/pull/92
|
|
||||||
# Why don't we just set them differently here?
|
|
||||||
|
|
||||||
ifeq ($(OS),Linux)
|
|
||||||
CFLAGS += -O3 -pthread -Igeotranz -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE=1 -D_BSD_SOURCE -Wall
|
|
||||||
LDFLAGS += -lm -lpthread -lrt
|
|
||||||
else
|
|
||||||
CFLAGS ?= -O3 -pthread -Igeotranz -Wall
|
|
||||||
LDFLAGS ?= -lm -lpthread -lrt
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# If the compiler is generating code for the i386 target, we can
|
|
||||||
# get much better results by telling it we have at least a Pentium 3,
|
|
||||||
# which has the SSE instructions.
|
|
||||||
# For a more detailed description, see Dire-Wolf-Developer-Notes.pdf.
|
|
||||||
|
|
||||||
arch := $(shell echo | ${CC} -E -dM - | grep __i386__)
|
|
||||||
ifneq ($(arch),)
|
|
||||||
CFLAGS += -march=pentium3
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Add -ffast-math option if the compiler recognizes it.
|
|
||||||
# This makes a big difference with x86_64 but has little impact on 32 bit targets.
|
|
||||||
|
|
||||||
useffast := $(shell ${CC} --help -v 2>/dev/null | grep ffast-math)
|
|
||||||
ifneq ($(useffast),)
|
|
||||||
CFLAGS += -ffast-math
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Dire Wolf is known to work with ARM processors on the BeagleBone, CubieBoard2, CHIP, etc.
|
|
||||||
# The best compiler options will depend on the specific type of processor
|
|
||||||
# and the compiler target defaults. Use the NEON instructions if available.
|
|
||||||
#
|
|
||||||
|
|
||||||
ifeq ($(OS),Linux)
|
|
||||||
neon := $(shell cat /proc/cpuinfo | grep neon)
|
|
||||||
ifneq ($(neon),)
|
|
||||||
CFLAGS += -mfpu=neon
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
neon := $(shell machine | grep armv7)
|
|
||||||
ifneq ($(neon),)
|
|
||||||
CFLAGS += -mfloat-abi=hard -mfpu=neon
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Audio system: We normally want to use ALSA for Linux.
|
|
||||||
# I heard that OSS will also work with Linux but I never tried it.
|
|
||||||
# ALSA is not an option for FreeBSD or OpenBSD.
|
|
||||||
|
|
||||||
ifeq ($(OS),Linux)
|
|
||||||
alsa = 1
|
|
||||||
else
|
|
||||||
alsa =
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Make sure pthread.h is available.
|
|
||||||
# We use ${PREFIX}, rather than simply /usr, because BSD has it in some other place.
|
|
||||||
|
|
||||||
ifeq ($(wildcard ${PREFIX}/include/pthread.h),)
|
|
||||||
$(error /usr/include/pthread.h does not exist. Install it with "sudo apt-get install libc6-dev" or "sudo yum install glibc-headers" )
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Make sure we have required library for ALSA if that option is being used.
|
|
||||||
|
|
||||||
ifneq ($(alsa),)
|
|
||||||
CFLAGS += -DUSE_ALSA
|
|
||||||
LDFLAGS += -lasound
|
|
||||||
ifeq ($(wildcard /usr/include/alsa/asoundlib.h),)
|
|
||||||
$(error /usr/include/alsa/asoundlib.h does not exist. Install it with "sudo apt-get install libasound2-dev" or "sudo yum install alsa-lib-devel" )
|
|
||||||
endif
|
|
||||||
ifeq ($(OS),OpenBSD)
|
|
||||||
# Use sndio via PortAudio Library (you can install it by pkg_add portaudio-svn)
|
|
||||||
LDFLAGS += -lportaudio -L/usr/local/lib
|
|
||||||
CFLAGS += -DUSE_PORTAUDIO -I/usr/local/include
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Enable GPS if header file is present.
|
|
||||||
# Finding libgps.so* is more difficult because it
|
|
||||||
# is in different places on different operating systems.
|
|
||||||
|
|
||||||
enable_gpsd := $(wildcard ${PREFIX}/include/gps.h)
|
|
||||||
ifneq ($(enable_gpsd),)
|
|
||||||
CFLAGS += -DENABLE_GPSD
|
|
||||||
LDFLAGS += -lgps
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Enable hamlib support if header file is present.
|
|
||||||
|
|
||||||
enable_hamlib := $(wildcard /usr/include/hamlib/rig.h /usr/local/include/hamlib/rig.h)
|
|
||||||
ifneq ($(enable_hamlib),)
|
|
||||||
CFLAGS += -DUSE_HAMLIB
|
|
||||||
LDFLAGS += -lhamlib
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Should enabling of this feature be strongly encouraged or
|
|
||||||
# is it quite specialized and of interest to a small audience?
|
|
||||||
# If, for some reason, can't obtain the libudev-dev package, or
|
|
||||||
# don't want to install it, comment out the next 5 lines.
|
|
||||||
|
|
||||||
ifeq ($(OS),Linux)
|
|
||||||
ifeq ($(wildcard /usr/include/libudev.h),)
|
|
||||||
$(error /usr/include/libudev.h does not exist. Install it with "sudo apt-get install libudev-dev" or "sudo yum install libudev-devel" )
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Enable cm108 PTT support if libudev header file is present.
|
|
||||||
|
|
||||||
enable_cm108 := $(wildcard /usr/include/libudev.h)
|
|
||||||
ifneq ($(enable_cm108),)
|
|
||||||
CFLAGS += -DUSE_CM108
|
|
||||||
LDFLAGS += -ludev
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Name of current directory.
|
|
||||||
# Used to generate zip file name for distribution.
|
|
||||||
|
|
||||||
z := $(notdir ${CURDIR})
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# -------------------------------- Main application -----------------------------------------
|
|
||||||
|
|
||||||
ifeq ($(OS),OpenBSD)
|
|
||||||
AUDIO_O := audio_portaudio.o
|
|
||||||
else
|
|
||||||
AUDIO_O := audio.o
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
direwolf : direwolf.o config.o recv.o demod.o dsp.o demod_afsk.o demod_psk.o demod_9600.o hdlc_rec.o \
|
|
||||||
hdlc_rec2.o multi_modem.o rdq.o rrbb.o dlq.o \
|
|
||||||
fcs_calc.o ax25_pad.o ax25_pad2.o xid.o \
|
|
||||||
decode_aprs.o symbols.o server.o kiss.o kissserial.o kissnet.o kiss_frame.o hdlc_send.o fcs_calc.o \
|
|
||||||
gen_tone.o $(AUDIO_O) audio_stats.o digipeater.o cdigipeater.o pfilter.o dedupe.o tq.o xmit.o morse.o \
|
|
||||||
ptt.o beacon.o encode_aprs.o latlong.o encode_aprs.o latlong.o textcolor.o \
|
|
||||||
dtmf.o aprs_tt.o tt_user.o tt_text.o igate.o waypoint.o serial_port.o log.o telemetry.o \
|
|
||||||
dwgps.o dwgpsnmea.o dwgpsd.o dtime_now.o mheard.o ax25_link.o cm108.o \
|
|
||||||
misc.a geotranz.a
|
|
||||||
$(CC) -o $@ $^ $(LDFLAGS)
|
|
||||||
@echo " "
|
|
||||||
ifneq ($(enable_gpsd),)
|
|
||||||
@echo " > This includes support for gpsd."
|
|
||||||
else
|
|
||||||
@echo " > This does NOT include support for gpsd."
|
|
||||||
endif
|
|
||||||
ifneq ($(enable_hamlib),)
|
|
||||||
@echo " > This includes support for hamlib."
|
|
||||||
else
|
|
||||||
@echo " > This does NOT include support for hamlib."
|
|
||||||
endif
|
|
||||||
ifneq ($(enable_cm108),)
|
|
||||||
@echo " > This includes support for CM108/CM119 PTT."
|
|
||||||
else
|
|
||||||
@echo " > This does NOT include support for CM108/CM119 PTT."
|
|
||||||
endif
|
|
||||||
@echo " "
|
|
||||||
|
|
||||||
# Optimization for slow processors.
|
|
||||||
|
|
||||||
demod.o : fsk_fast_filter.h
|
|
||||||
|
|
||||||
demod_afsk.o : fsk_fast_filter.h
|
|
||||||
|
|
||||||
|
|
||||||
fsk_fast_filter.h : gen_fff
|
|
||||||
./gen_fff > fsk_fast_filter.h
|
|
||||||
|
|
||||||
gen_fff : demod_afsk.c dsp.c textcolor.c
|
|
||||||
echo " " > tune.h
|
|
||||||
$(CC) $(CFLAGS) -DGEN_FFF -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# The APRS AX.25 destination field is often used to identify the manufacturer/model.
|
|
||||||
# These are not hardcoded into Dire Wolf. Instead they are read from
|
|
||||||
# a file called tocalls.txt at application start up time.
|
|
||||||
#
|
|
||||||
# The original permanent symbols are built in but the "new" symbols,
|
|
||||||
# using overlays, are often updated. These are also read from files.
|
|
||||||
#
|
|
||||||
# You can obtain an updated copy by typing "make tocalls-symbols".
|
|
||||||
# This is not part of the normal build process. You have to do this explicitly.
|
|
||||||
#
|
|
||||||
# The locations below appear to be the most recent.
|
|
||||||
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
|
||||||
#
|
|
||||||
|
|
||||||
.PHONY: tocalls-symbols
|
|
||||||
tocalls-symbols :
|
|
||||||
cp tocalls.txt tocalls.txt~
|
|
||||||
wget http://www.aprs.org/aprs11/tocalls.txt -O tocalls.txt
|
|
||||||
-diff -Z tocalls.txt~ tocalls.txt
|
|
||||||
cp symbols-new.txt symbols-new.txt~
|
|
||||||
wget http://www.aprs.org/symbols/symbols-new.txt -O symbols-new.txt
|
|
||||||
-diff -Z symbols-new.txt~ symbols-new.txt
|
|
||||||
cp symbolsX.txt symbolsX.txt~
|
|
||||||
wget http://www.aprs.org/symbols/symbolsX.txt -O symbolsX.txt
|
|
||||||
-diff -Z symbolsX.txt~ symbolsX.txt
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------- Other utilities included ------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
# Separate application to decode raw data.
|
|
||||||
|
|
||||||
# First three use .c rather than .o because they depend on DECAMAIN definition.
|
|
||||||
|
|
||||||
decode_aprs : decode_aprs.c kiss_frame.c ax25_pad.c dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o symbols.o textcolor.o fcs_calc.o latlong.o log.o telemetry.o tt_text.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DDECAMAIN -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Convert between text and touch tone representation.
|
|
||||||
|
|
||||||
text2tt : tt_text.c misc.a
|
|
||||||
$(CC) $(CFLAGS) -DENC_MAIN -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
tt2text : tt_text.c misc.a
|
|
||||||
$(CC) $(CFLAGS) -DDEC_MAIN -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
# Convert between Latitude/Longitude and UTM coordinates.
|
|
||||||
|
|
||||||
ll2utm : ll2utm.c geotranz.a textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
utm2ll : utm2ll.c geotranz.a textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
# Convert from log file to GPX.
|
|
||||||
|
|
||||||
log2gpx : log2gpx.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
# Test application to generate sound.
|
|
||||||
|
|
||||||
gen_packets : gen_packets.c ax25_pad.c hdlc_send.c fcs_calc.c gen_tone.c morse.c dtmf.c textcolor.c dsp.c misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
# Unit test for AFSK demodulator
|
|
||||||
|
|
||||||
atest : atest.c demod.o demod_afsk.o demod_psk.o demod_9600.o \
|
|
||||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o rrbb.o \
|
|
||||||
fcs_calc.o ax25_pad.o decode_aprs.o dwgpsnmea.o \
|
|
||||||
dwgps.o dwgpsd.o serial_port.o telemetry.o dtime_now.o latlong.o symbols.o tt_text.o textcolor.o \
|
|
||||||
misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
# Multiple AGWPE network or serial port clients to test TNCs side by side.
|
|
||||||
|
|
||||||
aclients : aclients.c ax25_pad.c fcs_calc.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -g -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Talk to a KISS TNC.
|
|
||||||
# Note: kiss_frame.c has conditional compilation on KISSUTIL.
|
|
||||||
|
|
||||||
kissutil : kissutil.c kiss_frame.c ax25_pad.o fcs_calc.o textcolor.o serial_port.o dtime_now.o dwsock.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -g -DKISSUTIL -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
# List USB audio adapters than can use GPIO for PTT.
|
|
||||||
# I don't think this will work on BSD.
|
|
||||||
# Rather than omitting cm108, I think it would be simpler and less confusing to build
|
|
||||||
# the application and have it say something like "not supported on this platform."
|
|
||||||
# The difference in behavior can depend on the -DUSE_CM108 compile option.
|
|
||||||
|
|
||||||
cm108 : cm108.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -g -DCM108_MAIN -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
# Touch Tone to Speech sample application.
|
|
||||||
|
|
||||||
ttcalc : ttcalc.o ax25_pad.o fcs_calc.o textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -g -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------- Libraries --------------------------------------------
|
|
||||||
|
|
||||||
# UTM, USNG, MGRS conversions.
|
|
||||||
|
|
||||||
geotranz.a : error_string.o mgrs.o polarst.o tranmerc.o ups.o usng.o utm.o
|
|
||||||
ar -cr $@ $^
|
|
||||||
|
|
||||||
error_string.o : geotranz/error_string.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
mgrs.o : geotranz/mgrs.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
polarst.o : geotranz/polarst.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
tranmerc.o : geotranz/tranmerc.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
ups.o : geotranz/ups.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
usng.o : geotranz/usng.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
utm.o : geotranz/utm.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Provide our own copy of strlcpy and strlcat because they are not included with Linux.
|
|
||||||
# We don't need the others in that same directory.
|
|
||||||
# OpenBSD has the strl--- functions so misc.a can be empty.
|
|
||||||
# I don't want to eliminate use of misc.a because other functions might be added in the future.
|
|
||||||
|
|
||||||
ifeq ($(OS),OpenBSD)
|
|
||||||
misc.a :
|
|
||||||
ar -cr $@ $^
|
|
||||||
|
|
||||||
else
|
|
||||||
misc.a : strlcpy.o strlcat.o
|
|
||||||
ar -cr $@ $^
|
|
||||||
|
|
||||||
strlcpy.o : misc/strlcpy.c
|
|
||||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
|
||||||
|
|
||||||
strlcat.o : misc/strlcat.c
|
|
||||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------- Installation ----------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Generate apprpriate sample configuration file for this platform.
|
|
||||||
# Originally, there was one sample for all platforms. It got too cluttered
|
|
||||||
# and confusing saying, this is for windows, and this is for Linux, and this ...
|
|
||||||
# Trying to maintain 3 different versions in parallel is error prone.
|
|
||||||
# We now have a single generic version which can be used to generate
|
|
||||||
# the various platform specific versions.
|
|
||||||
|
|
||||||
# generic.conf should be checked into source control.
|
|
||||||
# direwolf.conf should NOT. It is generated when compiling on the target platform.
|
|
||||||
|
|
||||||
# TODO: Should have BSD variation with OSS device names. Anything else?
|
|
||||||
|
|
||||||
direwolf.conf : generic.conf
|
|
||||||
egrep '^C|^L' generic.conf | cut -c2-999 > direwolf.conf
|
|
||||||
|
|
||||||
|
|
||||||
# Where should we install it?
|
|
||||||
|
|
||||||
# Something built from source and installed locally would normally go in /usr/local/...
|
|
||||||
# If not specified on the make command line, this is our default.
|
|
||||||
|
|
||||||
DESTDIR ?= /usr/local
|
|
||||||
|
|
||||||
# However, if you are preparing a "binary" DEB or RPM package, the installation location
|
|
||||||
# would normally be /usr/... instead. In this case, use a command line like this:
|
|
||||||
#
|
|
||||||
# make DESTDIR=/usr install
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Command to "install" to system directories.
|
|
||||||
# Do we need to use "-m 999" instead of "--mode=999" for OpenBSD?
|
|
||||||
|
|
||||||
INSTALL ?= install
|
|
||||||
INSTALL_PROGRAM ?= ${INSTALL} -D --mode=755
|
|
||||||
INSTALL_SCRIPT ?= ${INSTALL} -D --mode=755
|
|
||||||
INSTALL_DATA ?= ${INSTALL} -D --mode=644
|
|
||||||
INSTALL_MAN ?= ${INSTALL_DATA}
|
|
||||||
|
|
||||||
|
|
||||||
# direwolf.desktop was previously handcrafted for the Raspberry Pi.
|
|
||||||
# It was hardcoded with lxterminal, /home/pi, and so on.
|
|
||||||
# In version 1.2, try to customize this to match other situations better.
|
|
||||||
|
|
||||||
# TODO: Test this better.
|
|
||||||
|
|
||||||
|
|
||||||
direwolf.desktop :
|
|
||||||
@echo "Generating customized direwolf.desktop ..."
|
|
||||||
@echo '[Desktop Entry]' > $@
|
|
||||||
@echo 'Type=Application' >> $@
|
|
||||||
ifneq ($(wildcard ${PREFIX}/bin/lxterminal),)
|
|
||||||
@echo "Exec=lxterminal -t \"Dire Wolf\" -e \"$(DESTDIR)/bin/direwolf\"" >> $@
|
|
||||||
else ifneq ($(wildcard ${PREFIX}/bin/lxterm),)
|
|
||||||
@echo "Exec=lxterm -hold -title \"Dire Wolf\" -bg white -e \"$(DESTDIR)/bin/direwolf\"" >> $@
|
|
||||||
else
|
|
||||||
@echo "Exec=xterm -hold -title \"Dire Wolf\" -bg white -e \"$(DESTDIR)/bin/direwolf\"" >> $@
|
|
||||||
endif
|
|
||||||
@echo 'Name=Dire Wolf' >> $@
|
|
||||||
@echo 'Comment=APRS Soundcard TNC' >> $@
|
|
||||||
@echo 'Icon=$(DESTDIR)/share/direwolf/pixmaps/dw-icon.png' >> $@
|
|
||||||
@echo "Path=$(HOME)" >> $@
|
|
||||||
@echo '#Terminal=true' >> $@
|
|
||||||
@echo 'Categories=HamRadio' >> $@
|
|
||||||
@echo 'Keywords=Ham Radio;APRS;Soundcard TNC;KISS;AGWPE;AX.25' >> $@
|
|
||||||
|
|
||||||
|
|
||||||
# Installation into $(DESTDIR), usually /usr/local/... or /usr/...
|
|
||||||
# Needs to be run as root or with sudo.
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install : $(APPS) direwolf.conf tocalls.txt symbols-new.txt symbolsX.txt dw-icon.png direwolf.desktop
|
|
||||||
#
|
|
||||||
# Applications, not installed with package manager, normally go in /usr/local/bin.
|
|
||||||
# /usr/bin is used instead when installing from .DEB or .RPM package.
|
|
||||||
#
|
|
||||||
$(INSTALL_PROGRAM) direwolf $(DESTDIR)/bin/direwolf
|
|
||||||
$(INSTALL_PROGRAM) decode_aprs $(DESTDIR)/bin/decode_aprs
|
|
||||||
$(INSTALL_PROGRAM) text2tt $(DESTDIR)/bin/text2tt
|
|
||||||
$(INSTALL_PROGRAM) tt2text $(DESTDIR)/bin/tt2text
|
|
||||||
$(INSTALL_PROGRAM) ll2utm $(DESTDIR)/bin/ll2utm
|
|
||||||
$(INSTALL_PROGRAM) utm2ll $(DESTDIR)/bin/utm2ll
|
|
||||||
$(INSTALL_PROGRAM) aclients $(DESTDIR)/bin/aclients
|
|
||||||
$(INSTALL_PROGRAM) log2gpx $(DESTDIR)/bin/log2gpx
|
|
||||||
$(INSTALL_PROGRAM) gen_packets $(DESTDIR)/bin/gen_packets
|
|
||||||
$(INSTALL_PROGRAM) atest $(DESTDIR)/bin/atest
|
|
||||||
$(INSTALL_PROGRAM) ttcalc $(DESTDIR)/bin/ttcalc
|
|
||||||
$(INSTALL_PROGRAM) kissutil $(DESTDIR)/bin/kissutil
|
|
||||||
$(INSTALL_PROGRAM) cm108 $(DESTDIR)/bin/cm108
|
|
||||||
$(INSTALL_PROGRAM) dwespeak.sh $(DESTDIR)/bin/dwspeak.sh
|
|
||||||
#
|
|
||||||
# Telemetry Toolkit executables. Other .conf and .txt files will go into doc directory.
|
|
||||||
#
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-balloon.pl $(DESTDIR)/bin/telem-balloon.pl
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-bits.pl $(DESTDIR)/bin/telem-bits.pl
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-data.pl $(DESTDIR)/bin/telem-data.pl
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-data91.pl $(DESTDIR)/bin/telem-data91.pl
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-eqns.pl $(DESTDIR)/bin/telem-eqns.pl
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-parm.pl $(DESTDIR)/bin/telem-parm.pl
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-seq.sh $(DESTDIR)/bin/telem-seq.sh
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-unit.pl $(DESTDIR)/bin/telem-unit.pl
|
|
||||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-volts.py $(DESTDIR)/bin/telem-volts.py
|
|
||||||
#
|
|
||||||
# Misc. data such as "tocall" to system mapping.
|
|
||||||
#
|
|
||||||
$(INSTALL_DATA) tocalls.txt $(DESTDIR)/share/direwolf/tocalls.txt
|
|
||||||
$(INSTALL_DATA) symbols-new.txt $(DESTDIR)/share/direwolf/symbols-new.txt
|
|
||||||
$(INSTALL_DATA) symbolsX.txt $(DESTDIR)/share/direwolf/symbolsX.txt
|
|
||||||
#
|
|
||||||
# For desktop icon.
|
|
||||||
#
|
|
||||||
$(INSTALL_DATA) dw-icon.png $(DESTDIR)/share/direwolf/pixmaps/dw-icon.png
|
|
||||||
$(INSTALL_DATA) direwolf.desktop $(DESTDIR)/share/applications/direwolf.desktop
|
|
||||||
#
|
|
||||||
# Documentation. Various plain text files and PDF.
|
|
||||||
#
|
|
||||||
$(INSTALL_DATA) CHANGES.md $(DESTDIR)/share/doc/direwolf/CHANGES.md
|
|
||||||
$(INSTALL_DATA) LICENSE-dire-wolf.txt $(DESTDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt
|
|
||||||
$(INSTALL_DATA) LICENSE-other.txt $(DESTDIR)/share/doc/direwolf/LICENSE-other.txt
|
|
||||||
#
|
|
||||||
# ./README.md is an overview for the project main page.
|
|
||||||
# Maybe we could stick it in some other place.
|
|
||||||
# doc/README.md contains an overview of the PDF file contents and is more useful here.
|
|
||||||
#
|
|
||||||
$(INSTALL_DATA) doc/README.md $(DESTDIR)/share/doc/direwolf/README.md
|
|
||||||
$(INSTALL_DATA) doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf $(DESTDIR)/share/doc/direwolf/2400-4800-PSK-for-APRS-Packet-Radio.pdf
|
|
||||||
$(INSTALL_DATA) doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf
|
|
||||||
$(INSTALL_DATA) doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf
|
|
||||||
$(INSTALL_DATA) doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf $(DESTDIR)/share/doc/direwolf/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf
|
|
||||||
$(INSTALL_DATA) doc/APRS-Telemetry-Toolkit.pdf $(DESTDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf
|
|
||||||
$(INSTALL_DATA) doc/APRStt-Implementation-Notes.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf
|
|
||||||
$(INSTALL_DATA) doc/APRStt-interface-for-SARTrack.pdf $(DESTDIR)/share/doc/direwolf/APRStt-interface-for-SARTrack.pdf
|
|
||||||
$(INSTALL_DATA) doc/APRStt-Listening-Example.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Listening-Example.pdf
|
|
||||||
$(INSTALL_DATA) doc/Bluetooth-KISS-TNC.pdf $(DESTDIR)/share/doc/direwolf/Bluetooth-KISS-TNC.pdf
|
|
||||||
$(INSTALL_DATA) doc/Going-beyond-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/Going-beyond-9600-baud.pdf
|
|
||||||
$(INSTALL_DATA) doc/Raspberry-Pi-APRS.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf
|
|
||||||
$(INSTALL_DATA) doc/Raspberry-Pi-APRS-Tracker.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf
|
|
||||||
$(INSTALL_DATA) doc/Raspberry-Pi-SDR-IGate.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-SDR-IGate.pdf
|
|
||||||
$(INSTALL_DATA) doc/Successful-APRS-IGate-Operation.pdf $(DESTDIR)/share/doc/direwolf/Successful-APRS-IGate-Operation.pdf
|
|
||||||
$(INSTALL_DATA) doc/User-Guide.pdf $(DESTDIR)/share/doc/direwolf/User-Guide.pdf
|
|
||||||
$(INSTALL_DATA) doc/WA8LMF-TNC-Test-CD-Results.pdf $(DESTDIR)/share/doc/direwolf/WA8LMF-TNC-Test-CD-Results.pdf
|
|
||||||
$(INSTALL_DATA) doc/Why-is-9600-only-twice-as-fast-as-1200.pdf $(DESTDIR)/share/doc/direwolf/Why-is-9600-only-twice-as-fast-as-1200.pdf
|
|
||||||
#
|
|
||||||
# Various sample config and other files go into examples under the doc directory.
|
|
||||||
# When building from source, these can be put in home directory with "make install-conf".
|
|
||||||
# When installed from .DEB or .RPM package, the user will need to copy these to
|
|
||||||
# the home directory or other desired location.
|
|
||||||
#
|
|
||||||
$(INSTALL_DATA) direwolf.conf $(DESTDIR)/share/doc/direwolf/examples/direwolf.conf
|
|
||||||
$(INSTALL_SCRIPT) dw-start.sh $(DESTDIR)/share/doc/direwolf/examples/dw-start.sh
|
|
||||||
$(INSTALL_DATA) sdr.conf $(DESTDIR)/share/doc/direwolf/examples/sdr.conf
|
|
||||||
$(INSTALL_DATA) telemetry-toolkit/telem-m0xer-3.txt $(DESTDIR)/share/doc/direwolf/examples/telem-m0xer-3.txt
|
|
||||||
$(INSTALL_DATA) telemetry-toolkit/telem-balloon.conf $(DESTDIR)/share/doc/direwolf/examples/telem-balloon.conf
|
|
||||||
$(INSTALL_DATA) telemetry-toolkit/telem-volts.conf $(DESTDIR)/share/doc/direwolf/examples/telem-volts.conf
|
|
||||||
#
|
|
||||||
# "man" pages
|
|
||||||
#
|
|
||||||
$(INSTALL_MAN) man1/aclients.1 $(DESTDIR)/share/man/man1/aclients.1
|
|
||||||
$(INSTALL_MAN) man1/atest.1 $(DESTDIR)/share/man/man1/atest.1
|
|
||||||
$(INSTALL_MAN) man1/decode_aprs.1 $(DESTDIR)/share/man/man1/decode_aprs.1
|
|
||||||
$(INSTALL_MAN) man1/direwolf.1 $(DESTDIR)/share/man/man1/direwolf.1
|
|
||||||
$(INSTALL_MAN) man1/gen_packets.1 $(DESTDIR)/share/man/man1/gen_packets.1
|
|
||||||
$(INSTALL_MAN) man1/kissutil.1 $(DESTDIR)/share/man/man1/kissutil.1
|
|
||||||
$(INSTALL_MAN) man1/ll2utm.1 $(DESTDIR)/share/man/man1/ll2utm.1
|
|
||||||
$(INSTALL_MAN) man1/log2gpx.1 $(DESTDIR)/share/man/man1/log2gpx.1
|
|
||||||
$(INSTALL_MAN) man1/text2tt.1 $(DESTDIR)/share/man/man1/text2tt.1
|
|
||||||
$(INSTALL_MAN) man1/tt2text.1 $(DESTDIR)/share/man/man1/tt2text.1
|
|
||||||
$(INSTALL_MAN) man1/utm2ll.1 $(DESTDIR)/share/man/man1/utm2ll.1
|
|
||||||
#
|
|
||||||
# Set group and mode of HID devices corresponding to C-Media USB Audio adapters.
|
|
||||||
# This will allow us to use the CM108/CM119 GPIO pins for PTT.
|
|
||||||
# I don't think this is applicable to BSD.
|
|
||||||
#
|
|
||||||
ifeq ($(OS),Linux)
|
|
||||||
$(INSTALL_DATA) 99-direwolf-cmedia.rules /etc/udev/rules.d/99-direwolf-cmedia.rules
|
|
||||||
endif
|
|
||||||
#
|
|
||||||
@echo " "
|
|
||||||
@echo "If this is your first install, not an upgrade, type this to put a copy"
|
|
||||||
@echo "of the sample configuration file (direwolf.conf) in your home directory:"
|
|
||||||
@echo " "
|
|
||||||
@echo " make install-conf"
|
|
||||||
@echo " "
|
|
||||||
|
|
||||||
|
|
||||||
# Put sample configuration & startup files in home directory.
|
|
||||||
# This step would be done as ordinary user.
|
|
||||||
# Some people like to put the direwolf config file in /etc/ax25.
|
|
||||||
# Note that all of these are also in $(DESTDIR)/share/doc/direwolf/examples/.
|
|
||||||
|
|
||||||
# The Raspberry Pi has ~/Desktop but Ubuntu does not.
|
|
||||||
|
|
||||||
# TODO: Handle Linux variations correctly.
|
|
||||||
|
|
||||||
# Version 1.4 - Add "-n" option to avoid clobbering existing, probably customized, config files.
|
|
||||||
|
|
||||||
# dw-start.sh is greatly improved in version 1.4.
|
|
||||||
# It was moved from isntall-rpi to install-conf because it is not just for the RPi.
|
|
||||||
|
|
||||||
.PHONY: install-conf
|
|
||||||
install-conf : direwolf.conf
|
|
||||||
cp -n direwolf.conf ~
|
|
||||||
cp -n sdr.conf ~
|
|
||||||
cp -n telemetry-toolkit/telem-m0xer-3.txt ~
|
|
||||||
cp -n telemetry-toolkit/telem-*.conf ~
|
|
||||||
chmod +x dw-start.sh
|
|
||||||
cp -n dw-start.sh ~
|
|
||||||
ifneq ($(wildcard $(HOME)/Desktop),)
|
|
||||||
@echo " "
|
|
||||||
@echo "This will add a desktop icon on some systems."
|
|
||||||
@echo "This is known to work on Raspberry Pi but might not be compatible with other desktops."
|
|
||||||
@echo " "
|
|
||||||
@echo " make install-rpi"
|
|
||||||
@echo " "
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: install-rpi
|
|
||||||
install-rpi :
|
|
||||||
ifeq ($(OS),Linux)
|
|
||||||
ln -f -s $(DESTDIR)/share/applications/direwolf.desktop ~/Desktop/direwolf.desktop
|
|
||||||
else
|
|
||||||
ln -f -s ${PREFIX}/share/applications/direwolf.desktop ~/Desktop/direwolf.desktop
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------- Automated Smoke Test --------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Combine some unit tests into a single regression sanity check.
|
|
||||||
|
|
||||||
|
|
||||||
check : dtest ttest tttexttest pftest tlmtest lltest enctest kisstest pad2test xidtest dtmftest check-modem1200 check-modem300 check-modem9600 check-modem19200 check-modem2400-a check-modem2400-b check-modem2400-g check-modem4800
|
|
||||||
|
|
||||||
# Can we encode and decode at popular data rates?
|
|
||||||
|
|
||||||
check-modem1200 : gen_packets atest
|
|
||||||
./gen_packets -n 100 -o /tmp/test12.wav
|
|
||||||
./atest -F0 -PE -L63 -G71 /tmp/test12.wav
|
|
||||||
./atest -F1 -PE -L70 -G75 /tmp/test12.wav
|
|
||||||
rm /tmp/test12.wav
|
|
||||||
|
|
||||||
check-modem300 : gen_packets atest
|
|
||||||
./gen_packets -B300 -n 100 -o /tmp/test3.wav
|
|
||||||
./atest -B300 -F0 -L68 -G69 /tmp/test3.wav
|
|
||||||
./atest -B300 -F1 -L73 -G75 /tmp/test3.wav
|
|
||||||
rm /tmp/test3.wav
|
|
||||||
|
|
||||||
check-modem9600 : gen_packets atest
|
|
||||||
./gen_packets -B9600 -n 100 -o /tmp/test96.wav
|
|
||||||
./atest -B9600 -F0 -L61 -G65 /tmp/test96.wav
|
|
||||||
./atest -B9600 -F1 -L62 -G66 /tmp/test96.wav
|
|
||||||
rm /tmp/test96.wav
|
|
||||||
|
|
||||||
check-modem19200 : gen_packets atest
|
|
||||||
./gen_packets -r 96000 -B19200 -n 100 -o /tmp/test19.wav
|
|
||||||
./atest -B19200 -F0 -L60 -G64 /tmp/test19.wav
|
|
||||||
./atest -B19200 -F1 -L64 -G68 /tmp/test19.wav
|
|
||||||
rm /tmp/test19.wav
|
|
||||||
|
|
||||||
check-modem2400-a : gen_packets atest
|
|
||||||
./gen_packets -B2400 -j -n 100 -o /tmp/test24-a.wav
|
|
||||||
./atest -B2400 -j -F0 -L76 -G80 /tmp/test24-a.wav
|
|
||||||
./atest -B2400 -j -F1 -L84 -G88 /tmp/test24-a.wav
|
|
||||||
rm /tmp/test24-a.wav
|
|
||||||
|
|
||||||
check-modem2400-b : gen_packets atest
|
|
||||||
./gen_packets -B2400 -J -n 100 -o /tmp/test24-b.wav
|
|
||||||
./atest -B2400 -J -F0 -L79 -G83 /tmp/test24-b.wav
|
|
||||||
./atest -B2400 -J -F1 -L87 -G91 /tmp/test24-b.wav
|
|
||||||
rm /tmp/test24-b.wav
|
|
||||||
|
|
||||||
check-modem2400-g : gen_packets atest
|
|
||||||
./gen_packets -B2400 -g -n 100 -o /tmp/test24-g.wav
|
|
||||||
./atest -B2400 -g -F0 -L99 -G100 /tmp/test24-g.wav
|
|
||||||
rm /tmp/test24-g.wav
|
|
||||||
|
|
||||||
check-modem4800 : gen_packets atest
|
|
||||||
./gen_packets -B4800 -n 100 -o /tmp/test48.wav
|
|
||||||
./atest -B4800 -F0 -L70 -G74 /tmp/test48.wav
|
|
||||||
./atest -B4800 -F1 -L79 -G84 /tmp/test48.wav
|
|
||||||
rm /tmp/test48.wav
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for inner digipeater algorithm
|
|
||||||
|
|
||||||
.PHONY : dtest
|
|
||||||
dtest : digipeater.c dedupe.c pfilter.c \
|
|
||||||
ax25_pad.o fcs_calc.o tq.o textcolor.o \
|
|
||||||
decode_aprs.o dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o latlong.o telemetry.o symbols.o tt_text.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DDIGITEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./dtest
|
|
||||||
rm dtest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for APRStt tone sequence parsing.
|
|
||||||
|
|
||||||
.PHONY : ttest
|
|
||||||
ttest : aprs_tt.c tt_text.c latlong.o textcolor.o misc.a geotranz.a misc.a
|
|
||||||
$(CC) $(CFLAGS) -DTT_MAIN -o $@ $^ $(LDFLAGS)
|
|
||||||
./ttest
|
|
||||||
rm ttest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for APRStt tone sequence / text conversions.
|
|
||||||
|
|
||||||
.PHONY: tttexttest
|
|
||||||
tttexttest : tt_text.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DTTT_TEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./tttexttest
|
|
||||||
rm tttexttest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for Packet Filtering.
|
|
||||||
|
|
||||||
.PHONY: pftest
|
|
||||||
pftest : pfilter.c ax25_pad.o textcolor.o fcs_calc.o decode_aprs.o dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o latlong.o symbols.o telemetry.o tt_text.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DPFTEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./pftest
|
|
||||||
rm pftest
|
|
||||||
|
|
||||||
# Unit test for telemetry decoding.
|
|
||||||
|
|
||||||
.PHONY: tlmtest
|
|
||||||
tlmtest : telemetry.c ax25_pad.o fcs_calc.o textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DTEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./tlmtest
|
|
||||||
rm tlmtest
|
|
||||||
|
|
||||||
# Unit test for location coordinate conversion.
|
|
||||||
|
|
||||||
.PHONY: lltest
|
|
||||||
lltest : latlong.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DLLTEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./lltest
|
|
||||||
rm lltest
|
|
||||||
|
|
||||||
# Unit test for encoding position & object report.
|
|
||||||
|
|
||||||
.PHONY: enctest
|
|
||||||
enctest : encode_aprs.c latlong.c textcolor.c misc.a
|
|
||||||
$(CC) $(CFLAGS) -DEN_MAIN -o $@ $^ $(LDFLAGS)
|
|
||||||
./enctest
|
|
||||||
rm enctest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for KISS encapsulation.
|
|
||||||
|
|
||||||
.PHONY: kisstest
|
|
||||||
kisstest : kiss_frame.c
|
|
||||||
$(CC) $(CFLAGS) -DKISSTEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./kisstest
|
|
||||||
rm kisstest
|
|
||||||
|
|
||||||
# Unit test for constructing frames besides UI.
|
|
||||||
|
|
||||||
.PHONY: pad2test
|
|
||||||
pad2test : ax25_pad2.c ax25_pad.c fcs_calc.o textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DPAD2TEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./pad2test
|
|
||||||
rm pad2test
|
|
||||||
|
|
||||||
|
|
||||||
# Unit Test for XID frame encode/decode.
|
|
||||||
|
|
||||||
.PHONY: xidtest
|
|
||||||
xidtest : xid.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DXIDTEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./xidtest
|
|
||||||
rm xidtest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit Test for DTMF encode/decode.
|
|
||||||
|
|
||||||
.PHONY: dtmftest
|
|
||||||
dtmftest : dtmf.c textcolor.o
|
|
||||||
$(CC) $(CFLAGS) -DDTMF_TEST -o $@ $^ $(LDFLAGS)
|
|
||||||
./dtmftest
|
|
||||||
rm dtmftest
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------- Manual tests and experiments ---------------------------
|
|
||||||
|
|
||||||
# These are not included in a normal build. Might be broken.
|
|
||||||
|
|
||||||
# Unit test for IGate
|
|
||||||
|
|
||||||
itest : igate.c textcolor.c ax25_pad.c fcs_calc.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DITEST -o $@ $^
|
|
||||||
./itest
|
|
||||||
|
|
||||||
# Unit test for UDP reception with AFSK demodulator.
|
|
||||||
# Temporary during development. Might not be useful anymore.
|
|
||||||
|
|
||||||
udptest : udp_test.c demod.o dsp.o demod_afsk.o demod_psk.o demod_9600.o hdlc_rec.o hdlc_rec2.o multi_modem.o rrbb.o \
|
|
||||||
fcs_calc.o ax25_pad.o decode_aprs.o symbols.o textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
||||||
./udptest
|
|
||||||
|
|
||||||
# For demodulator tweaking experiments.
|
|
||||||
# Dependencies of demod*.c, rather than .o, are intentional.
|
|
||||||
|
|
||||||
demod.o : tune.h
|
|
||||||
|
|
||||||
demod_afsk.o : tune.h
|
|
||||||
|
|
||||||
demod_9600.o : tune.h
|
|
||||||
|
|
||||||
demod_psk.o : tune.h
|
|
||||||
|
|
||||||
tune.h :
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
testagc : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.o hdlc_rec2.o multi_modem.o rrbb.o \
|
|
||||||
fcs_calc.o ax25_pad.o decode_aprs.o telemetry.o dtime_now.o latlong.o symbols.o tune.h textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o atest $^ $(LDFLAGS)
|
|
||||||
./atest 02_Track_2.wav | grep "packets decoded in" > atest.out
|
|
||||||
|
|
||||||
|
|
||||||
testagc96 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
|
||||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
|
||||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
|
||||||
dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o latlong.o \
|
|
||||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
|
||||||
misc.a
|
|
||||||
rm -f atest96
|
|
||||||
$(CC) $(CFLAGS) -o atest96 $^ $(LDFLAGS)
|
|
||||||
./atest96 -B 9600 ../walkabout9600c.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 noisy96.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 19990303_0225_9600_8bis_22kHz.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 19990303_0225_9600_16bit_22kHz.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 -P + z8-22k.wav| grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 test9600.wav | grep "packets decoded in" >atest.out
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean :
|
|
||||||
rm -f $(APPS) gen_fff tune.h fsk_fast_filter.h *.o *.a direwolf.desktop
|
|
||||||
|
|
||||||
|
|
||||||
depend : $(wildcard *.c)
|
|
||||||
makedepend -f $(lastword $(MAKEFILE_LIST)) -- $(CFLAGS) -- $^
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# The following is updated by "make depend"
|
|
||||||
#
|
|
||||||
# DO NOT DELETE
|
|
||||||
|
|
||||||
|
|
563
Makefile.macosx
563
Makefile.macosx
|
@ -1,563 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for Macintosh 10.6+ version of Dire Wolf.
|
|
||||||
#
|
|
||||||
|
|
||||||
# TODO: This is a modified version of Makefile.linux and it
|
|
||||||
# has fallen a little behind. For example, it is missing the check target.
|
|
||||||
# It would be more maintainable if we could use a single file for both.
|
|
||||||
# The differences are not that great.
|
|
||||||
# Maybe the most of the differences could go in to platform specific include
|
|
||||||
# files rather than cluttering it up with too many if blocks.
|
|
||||||
|
|
||||||
# Changes:
|
|
||||||
#
|
|
||||||
# 16 Dec 2015
|
|
||||||
# 1. Added condition check for gps/gpsd code. Commented out due to 32/64 bit
|
|
||||||
# library issues. Macports gpsd build problem.
|
|
||||||
# 2. SDK version checks are now performed by a bash script 'search_sdks.sh'.
|
|
||||||
# This should resolve the varied locations Apple stored the SDKs on the different
|
|
||||||
# Xcode/OS versions. Executing 'make' on the first pass asks the operator
|
|
||||||
# which SDK he/she wishes to use. Executing 'make clean' resets the SDK
|
|
||||||
# selection and operator intervention is once again required. Selected SDK
|
|
||||||
# information resides in a file named './use_this_sdk' in the current working
|
|
||||||
# directory.
|
|
||||||
# 3. Removed fsk_fast_filter.h from atest receipe, clang compiler was having
|
|
||||||
# a hissy fit. Not check with GCC.
|
|
||||||
|
|
||||||
# Where should we install it?
|
|
||||||
# Looks for libraries and includes, default is Homebrew
|
|
||||||
INSTALLDIR := /usr/local
|
|
||||||
|
|
||||||
# To use Macports, uncomment this line
|
|
||||||
#INSTALLDIR := /opt/local
|
|
||||||
|
|
||||||
APPS := direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients atest log2gpx gen_packets ttcalc kissutil
|
|
||||||
|
|
||||||
all : $(APPS) direwolf.conf
|
|
||||||
@echo " "
|
|
||||||
@echo "Next step install with: "
|
|
||||||
@echo " "
|
|
||||||
@echo " sudo make install"
|
|
||||||
@echo " "
|
|
||||||
@echo " "
|
|
||||||
|
|
||||||
SYS_LIBS :=
|
|
||||||
SYS_MIN :=
|
|
||||||
|
|
||||||
SYS_LIBS := $(shell ./search_sdks.sh)
|
|
||||||
EXTRA_CFLAGS :=
|
|
||||||
DARWIN_CC := $(shell which clang)
|
|
||||||
ifeq (${DARWIN_CC},)
|
|
||||||
DARWIN_CC := $(shell which gcc)
|
|
||||||
EXTRA_CFLAGS :=
|
|
||||||
else
|
|
||||||
EXTRA_CFLAGS := -fvectorize -fslp-vectorize -pthread
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Change as required in support of the available libraries
|
|
||||||
|
|
||||||
UNAME_M := $(shell uname -m)
|
|
||||||
ifeq (${UNAME_M},x86_64)
|
|
||||||
CC := $(DARWIN_CC) -m64 $(SYS_LIBS) $(SYS_MIN)
|
|
||||||
else
|
|
||||||
CC := $(DARWIN_CC) -m32 $(SYS_LIBS) $(SYS_MIN)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# _XOPEN_SOURCE=600 and _DEFAULT_SOURCE=1 are needed for glibc >= 2.24.
|
|
||||||
# Explanation here: https://github.com/wb2osz/direwolf/issues/62
|
|
||||||
|
|
||||||
CFLAGS := -Os -pthread -Igeotranz -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE=1 $(EXTRA_CFLAGS)
|
|
||||||
|
|
||||||
# That was fine for a recent Ubuntu and Raspbian Jessie.
|
|
||||||
# However, Raspbian wheezy was then missing declaration for strsep and definition of fd_set.
|
|
||||||
|
|
||||||
CFLAGS += -D_BSD_SOURCE
|
|
||||||
|
|
||||||
|
|
||||||
# $(info $$CC is [${CC}])
|
|
||||||
|
|
||||||
|
|
||||||
# If the compiler is generating code for a 32 bit target (-m32), we can
|
|
||||||
# get much better results by telling it we have at least a Pentium 3
|
|
||||||
# which hass the SSE instructions.
|
|
||||||
|
|
||||||
#CFLAGS += -march=core2 -msse4.1 -std=gnu99
|
|
||||||
#CFLAGS += -march=pentium3 -sse
|
|
||||||
CFLAGS += -march=native
|
|
||||||
|
|
||||||
|
|
||||||
# Add -ffastmath in only if compiler version recognizes it.
|
|
||||||
|
|
||||||
useffast := $(shell gcc --help -v 2>/dev/null | grep ffast-math)
|
|
||||||
ifneq ($(useffast),)
|
|
||||||
CFLAGS += -ffast-math
|
|
||||||
endif
|
|
||||||
|
|
||||||
#CFLAGS += -D_FORTIFY_SOURCE
|
|
||||||
|
|
||||||
# Use PortAudio Library
|
|
||||||
|
|
||||||
# Force static linking of portaudio if the static library is available.
|
|
||||||
PA_LIB_STATIC := $(shell find $(INSTALLDIR)/lib -maxdepth 1 -type f -name "libportaudio.a")
|
|
||||||
#$(info $$PA_LIB_STATIC is [${PA_LIB_STATIC}])
|
|
||||||
ifeq (${PA_LIB_STATIC},)
|
|
||||||
LDLIBS += -L$(INSTALLDIR)/lib -lportaudio
|
|
||||||
else
|
|
||||||
LDLIBS += $(INSTALLDIR)/lib/libportaudio.a
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Include libraries portaudio requires.
|
|
||||||
LDLIBS += -framework CoreAudio -framework AudioUnit -framework AudioToolbox
|
|
||||||
LDLIBS += -framework Foundation -framework CoreServices
|
|
||||||
|
|
||||||
CFLAGS += -DUSE_PORTAUDIO -I$(INSTALLDIR)/include
|
|
||||||
|
|
||||||
# Uncomment following lines to enable GPS interface & tracker function.
|
|
||||||
# Not available for MacOSX (as far as I know).
|
|
||||||
# Although MacPorts has gpsd, wonder if it's the same thing. Add the check
|
|
||||||
# just in case it works.
|
|
||||||
# Well never mind, issue with Macports with 64bit libs ;-( leave the check in
|
|
||||||
# until (if ever) Macports fixes the issue.
|
|
||||||
|
|
||||||
#GPS_HEADER := $(shell find $(INSTALLDIR)/include -maxdepth 1 -type f -name "gps.h")
|
|
||||||
#ifeq (${GPS_HEADER},)
|
|
||||||
#GPS_OBJS :=
|
|
||||||
#else
|
|
||||||
#CFLAGS += -DENABLE_GPSD
|
|
||||||
#LDLIBS += -L$(INSTALLDIR)/lib -lgps -lgpsd
|
|
||||||
#GPS_OBJS := dwgps.o dwgpsnmea.o dwgpsd.o
|
|
||||||
#endif
|
|
||||||
|
|
||||||
# Name of current directory.
|
|
||||||
# Used to generate zip file name for distribution.
|
|
||||||
|
|
||||||
z := $(notdir ${CURDIR})
|
|
||||||
|
|
||||||
|
|
||||||
# Main application.
|
|
||||||
|
|
||||||
direwolf : direwolf.o aprs_tt.o audio_portaudio.o audio_stats.o ax25_link.o ax25_pad.o ax25_pad2.o beacon.o \
|
|
||||||
config.o decode_aprs.o dedupe.o demod_9600.o demod_afsk.o demod_psk.o \
|
|
||||||
demod.o digipeater.o cdigipeater.o dlq.o dsp.o dtime_now.o dtmf.o dwgps.o \
|
|
||||||
encode_aprs.o encode_aprs.o fcs_calc.o fcs_calc.o gen_tone.o \
|
|
||||||
geotranz.a hdlc_rec.o hdlc_rec2.o hdlc_send.o igate.o kiss_frame.o \
|
|
||||||
kiss.o kissserial.o kissnet.o latlong.o latlong.o log.o morse.o multi_modem.o \
|
|
||||||
waypoint.o serial_port.o pfilter.o ptt.o rdq.o recv.o rrbb.o server.o \
|
|
||||||
symbols.o telemetry.o textcolor.o tq.o tt_text.o tt_user.o xid.o xmit.o \
|
|
||||||
dwgps.o dwgpsnmea.o mheard.o
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lpthread $(LDLIBS) -lm
|
|
||||||
|
|
||||||
|
|
||||||
# Optimization for slow processors.
|
|
||||||
|
|
||||||
demod.o : fsk_fast_filter.h
|
|
||||||
|
|
||||||
demod_afsk.o : fsk_fast_filter.h
|
|
||||||
|
|
||||||
|
|
||||||
fsk_fast_filter.h : gen_fff
|
|
||||||
./gen_fff > fsk_fast_filter.h
|
|
||||||
|
|
||||||
gen_fff : demod_afsk.c dsp.c textcolor.c
|
|
||||||
echo " " > tune.h
|
|
||||||
$(CC) $(CFLAGS) -DGEN_FFF -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# UTM, USNG, MGRS conversions.
|
|
||||||
|
|
||||||
geotranz.a : error_string.o mgrs.o polarst.o tranmerc.o ups.o usng.o utm.o
|
|
||||||
ar -cr $@ $^
|
|
||||||
|
|
||||||
error_string.o : geotranz/error_string.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
mgrs.o : geotranz/mgrs.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
polarst.o : geotranz/polarst.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
tranmerc.o : geotranz/tranmerc.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
ups.o : geotranz/ups.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
usng.o : geotranz/usng.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
utm.o : geotranz/utm.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Generate apprpriate sample configuration file for this platform.
|
|
||||||
|
|
||||||
direwolf.conf : generic.conf
|
|
||||||
egrep '^C|^M' generic.conf | cut -c2-999 > direwolf.conf
|
|
||||||
|
|
||||||
|
|
||||||
# Where should we install it?
|
|
||||||
# Macports typically installs in /opt/local so maybe you want to use that instead.
|
|
||||||
|
|
||||||
INSTALLDIR := /usr/local
|
|
||||||
#INSTALLDIR := /opt/local
|
|
||||||
|
|
||||||
# TODO: Test this better.
|
|
||||||
|
|
||||||
# Optional installation into INSTALLDIR.
|
|
||||||
# Needs to be run as root or with sudo.
|
|
||||||
|
|
||||||
# Command to "install" to system directories. "install" for Linux. "ginstall" for Mac.
|
|
||||||
|
|
||||||
INSTALL=ginstall
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install : $(APPS) direwolf.conf tocalls.txt symbols-new.txt symbolsX.txt dw-icon.png
|
|
||||||
#
|
|
||||||
# Applications.
|
|
||||||
#
|
|
||||||
$(INSTALL) direwolf $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) decode_aprs $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) text2tt $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) tt2text $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) ll2utm $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) utm2ll $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) aclients $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) log2gpx $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) gen_packets $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) atest $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) ttcalc $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) kissutil $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) dwespeak.sh $(INSTALLDIR)/bin
|
|
||||||
#
|
|
||||||
# Telemetry Toolkit executables. Other .conf and .txt files will go into doc directory.
|
|
||||||
#
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-balloon.pl $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-bits.pl $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-data.pl $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-data91.pl $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-eqns.pl $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-parm.pl $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-unit.pl $(INSTALLDIR)/bin
|
|
||||||
$(INSTALL) telemetry-toolkit/telem-volts.py $(INSTALLDIR)/bin
|
|
||||||
#
|
|
||||||
# Misc. data such as "tocall" to system mapping.
|
|
||||||
#
|
|
||||||
$(INSTALL) -D --mode=644 tocalls.txt $(INSTALLDIR)/share/direwolf/tocalls.txt
|
|
||||||
$(INSTALL) -D --mode=644 symbols-new.txt $(INSTALLDIR)/share/direwolf/symbols-new.txt
|
|
||||||
$(INSTALL) -D --mode=644 symbolsX.txt $(INSTALLDIR)/share/direwolf/symbolsX.txt
|
|
||||||
$(INSTALL) -D --mode=644 dw-icon.png $(INSTALLDIR)/share/direwolf/dw-icon.png
|
|
||||||
|
|
||||||
#
|
|
||||||
# Documentation. Various plain text files and PDF.
|
|
||||||
#
|
|
||||||
$(INSTALL) -D --mode=644 README.md $(INSTALLDIR)/share/doc/direwolf/README.md
|
|
||||||
$(INSTALL) -D --mode=644 CHANGES.md $(INSTALLDIR)/share/doc/direwolf/CHANGES.md
|
|
||||||
$(INSTALL) -D --mode=644 LICENSE-dire-wolf.txt $(INSTALLDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt
|
|
||||||
$(INSTALL) -D --mode=644 LICENSE-other.txt $(INSTALLDIR)/share/doc/direwolf/LICENSE-other.txt
|
|
||||||
#
|
|
||||||
# ./README.md is an overview for the project main page.
|
|
||||||
# doc/README.md contains an overview of the PDF file contents and is more useful here.
|
|
||||||
#
|
|
||||||
$(INSTALL) -D --mode=644 doc/README.md $(INSTALLDIR)/share/doc/direwolf/README.md
|
|
||||||
$(INSTALL) -D --mode=644 doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf $(INSTALLDIR)/share/doc/direwolf/2400-4800-PSK-for-APRS-Packet-Radio.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf $(INSTALLDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf $(INSTALLDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf $(INSTALLDIR)/share/doc/direwolf/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/APRS-Telemetry-Toolkit.pdf $(INSTALLDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/APRStt-Implementation-Notes.pdf $(INSTALLDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/APRStt-interface-for-SARTrack.pdf $(INSTALLDIR)/share/doc/direwolf/APRStt-interface-for-SARTrack.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/APRStt-Listening-Example.pdf $(INSTALLDIR)/share/doc/direwolf/APRStt-Listening-Example.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/Bluetooth-KISS-TNC.pdf $(INSTALLDIR)/share/doc/direwolf/Bluetooth-KISS-TNC.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/Going-beyond-9600-baud.pdf $(INSTALLDIR)/share/doc/direwolf/Going-beyond-9600-baud.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/Raspberry-Pi-APRS.pdf $(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/Raspberry-Pi-APRS-Tracker.pdf $(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/Raspberry-Pi-SDR-IGate.pdf $(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-SDR-IGate.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/Successful-APRS-IGate-Operation.pdf $(INSTALLDIR)/share/doc/direwolf/Successful-APRS-IGate-Operation.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/User-Guide.pdf $(INSTALLDIR)/share/doc/direwolf/User-Guide.pdf
|
|
||||||
$(INSTALL) -D --mode=644 doc/WA8LMF-TNC-Test-CD-Results.pdf $(INSTALLDIR)/share/doc/direwolf/WA8LMF-TNC-Test-CD-Results.pdf
|
|
||||||
#
|
|
||||||
# Sample config files also go into the doc directory.
|
|
||||||
# When building from source, these can be put in home directory with "make install-conf".
|
|
||||||
# When installed from .DEB or .RPM package, the user will need to copy these to
|
|
||||||
# the home directory or other desired location.
|
|
||||||
# Someone suggested that these could go into an "examples" subdirectory under doc.
|
|
||||||
#
|
|
||||||
$(INSTALL) -D --mode=644 direwolf.conf $(INSTALLDIR)/share/doc/direwolf/direwolf.conf
|
|
||||||
$(INSTALL) -D --mode=644 telemetry-toolkit/telem-m0xer-3.txt $(INSTALLDIR)/share/doc/direwolf/telem-m0xer-3.txt
|
|
||||||
$(INSTALL) -D --mode=644 telemetry-toolkit/telem-balloon.conf $(INSTALLDIR)/share/doc/direwolf/telem-balloon.conf
|
|
||||||
$(INSTALL) -D --mode=644 telemetry-toolkit/telem-volts.conf $(INSTALLDIR)/share/doc/direwolf/telem-volts.conf
|
|
||||||
#
|
|
||||||
# "man" pages
|
|
||||||
#
|
|
||||||
$(INSTALL) -D --mode=644 man1/aclients.1 $(INSTALLDIR)/man/man1/aclients.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/atest.1 $(INSTALLDIR)/man/man1/atest.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/decode_aprs.1 $(INSTALLDIR)/man/man1/decode_aprs.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/direwolf.1 $(INSTALLDIR)/man/man1/direwolf.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/gen_packets.1 $(INSTALLDIR)/man/man1/gen_packets.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/ll2utm.1 $(INSTALLDIR)/man/man1/ll2utm.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/log2gpx.1 $(INSTALLDIR)/man/man1/log2gpx.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/text2tt.1 $(INSTALLDIR)/man/man1/text2tt.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/tt2text.1 $(INSTALLDIR)/man/man1/tt2text.1
|
|
||||||
$(INSTALL) -D --mode=644 man1/utm2ll.1 $(INSTALLDIR)/man/man1/utm2ll.1
|
|
||||||
#
|
|
||||||
@echo " "
|
|
||||||
@echo "If this is your first install, not an upgrade, type this to put a copy"
|
|
||||||
@echo "of the sample configuration file (direwolf.conf) in your home directory:"
|
|
||||||
@echo " "
|
|
||||||
@echo " make install-conf"
|
|
||||||
@echo " "
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: Should we put the sample direwolf.conf file somewhere like
|
|
||||||
# /usr/share/doc/direwolf/examples and add that to the
|
|
||||||
# end of the search path list?
|
|
||||||
# That would make it easy to see user customizations compared to the
|
|
||||||
# latest sample.
|
|
||||||
|
|
||||||
# These would be done as ordinary user.
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: install-conf
|
|
||||||
install-conf : direwolf.conf
|
|
||||||
cp direwolf.conf ~
|
|
||||||
cp telemetry-toolkit/telem-m0xer-3.txt ~
|
|
||||||
cp telemetry-toolkit/telem-*.conf ~
|
|
||||||
|
|
||||||
|
|
||||||
# Separate application to decode raw data.
|
|
||||||
|
|
||||||
# First three use .c rather than .o because they depend on DECAMAIN definition.
|
|
||||||
|
|
||||||
decode_aprs : decode_aprs.c kiss_frame.c ax25_pad.c dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o symbols.o textcolor.o fcs_calc.o latlong.o log.o telemetry.o tt_text.o
|
|
||||||
$(CC) $(CFLAGS) -DDECAMAIN -o $@ $^ -lm
|
|
||||||
|
|
||||||
# Convert between text and touch tone representation.
|
|
||||||
|
|
||||||
text2tt : tt_text.c
|
|
||||||
$(CC) $(CFLAGS) -DENC_MAIN -o $@ $^
|
|
||||||
|
|
||||||
tt2text : tt_text.c
|
|
||||||
$(CC) $(CFLAGS) -DDEC_MAIN -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Convert between Latitude/Longitude and UTM coordinates.
|
|
||||||
|
|
||||||
ll2utm : ll2utm.c geotranz.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
|
||||||
|
|
||||||
utm2ll : utm2ll.c geotranz.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
|
||||||
|
|
||||||
|
|
||||||
# Convert from log file to GPX.
|
|
||||||
|
|
||||||
log2gpx : log2gpx.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
|
||||||
|
|
||||||
|
|
||||||
# Test application to generate sound.
|
|
||||||
|
|
||||||
gen_packets : gen_packets.c ax25_pad.c hdlc_send.c fcs_calc.c gen_tone.c morse.c dtmf.c textcolor.c dsp.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) -lm
|
|
||||||
|
|
||||||
demod.o : tune.h
|
|
||||||
|
|
||||||
demod_afsk.o : tune.h
|
|
||||||
|
|
||||||
demod_9600.o : tune.h
|
|
||||||
|
|
||||||
demod_psk.o : tune.h
|
|
||||||
|
|
||||||
tune.h :
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
testagc : atest.c demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \
|
|
||||||
fcs_calc.c ax25_pad.c decode_aprs.c telemetry.c dtime_now.o latlong.c symbols.c tune.h textcolor.c
|
|
||||||
$(CC) $(CFLAGS) -o atest $^ -lm
|
|
||||||
./atest 02_Track_2.wav | grep "packets decoded in" > atest.out
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for demodulators
|
|
||||||
|
|
||||||
atest : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \
|
|
||||||
fcs_calc.c ax25_pad.c decode_aprs.c dwgpsnmea.o dwgps.o serial_port.o telemetry.c dtime_now.o latlong.c symbols.c textcolor.c tt_text.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
|
||||||
#atest : atest.c fsk_fast_filter.h demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \
|
|
||||||
# fcs_calc.c ax25_pad.c decode_aprs.c dwgpsnmea.o dwgps.o serial_port.o telemetry.c latlong.c symbols.c textcolor.c tt_text.c
|
|
||||||
# $(CC) $(CFLAGS) -o $@ $^ -lm
|
|
||||||
|
|
||||||
# Unit test for inner digipeater algorithm
|
|
||||||
|
|
||||||
|
|
||||||
dtest : digipeater.c pfilter.o ax25_pad.o dedupe.o fcs_calc.o tq.o textcolor.o \
|
|
||||||
decode_aprs.o dwgpsnmea.o dwgps.o serial_port.o latlong.o telemetry.o symbols.o tt_text.o
|
|
||||||
$(CC) $(CFLAGS) -DTEST -o $@ $^
|
|
||||||
./dtest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for APRStt.
|
|
||||||
|
|
||||||
ttest : aprs_tt.c tt_text.c latlong.c geotranz.a
|
|
||||||
$(CC) $(CFLAGS) -DTT_MAIN -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for IGate
|
|
||||||
|
|
||||||
|
|
||||||
itest : igate.c textcolor.c ax25_pad.c fcs_calc.c
|
|
||||||
$(CC) $(CFLAGS) -DITEST -o $@ $^
|
|
||||||
./itest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for UDP reception with AFSK demodulator
|
|
||||||
|
|
||||||
udptest : udp_test.c demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.c multi_modem.c rrbb.c fcs_calc.c ax25_pad.c decode_aprs.c symbols.c textcolor.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
|
||||||
./udptest
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for telemetry decoding.
|
|
||||||
|
|
||||||
|
|
||||||
tlmtest : telemetry.c ax25_pad.c fcs_calc.c textcolor.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
|
||||||
./tlmtest
|
|
||||||
|
|
||||||
|
|
||||||
# Multiple AGWPE network or serial port clients to test TNCs side by side.
|
|
||||||
|
|
||||||
aclients : aclients.c ax25_pad.c fcs_calc.c textcolor.c
|
|
||||||
$(CC) $(CFLAGS) -g -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Talk to a KISS TNC.
|
|
||||||
# Note: kiss_frame.c has conditional compilation on KISSUTIL.
|
|
||||||
|
|
||||||
kissutil : kissutil.c kiss_frame.c ax25_pad.o fcs_calc.o textcolor.o serial_port.o dtime_now.o dwsock.o
|
|
||||||
$(CC) $(CFLAGS) -g -DKISSUTIL -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Touch Tone to Speech sample application.
|
|
||||||
|
|
||||||
ttcalc : ttcalc.o ax25_pad.o fcs_calc.o textcolor.o
|
|
||||||
$(CC) $(CFLAGS) -g -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
depend : $(wildcard *.c)
|
|
||||||
makedepend -f $(lastword $(MAKEFILE_LIST)) -- $(CFLAGS) -- $^
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean :
|
|
||||||
rm -f $(APPS) gen_fff \
|
|
||||||
fsk_fast_filter.h *.o *.a use_this_sdk
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: dist-mac
|
|
||||||
dist-mac: direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients log2gpx gen_packets \
|
|
||||||
tocalls.txt symbols-new.txt symbolsX.txt dw-icon.png
|
|
||||||
rm -f ../direwolf_dist_bin.zip
|
|
||||||
(cd .. ; zip direwolf_dist_bin.zip \
|
|
||||||
$(INSTALLDIR)/bin/direwolf \
|
|
||||||
$(INSTALLDIR)/bin/decode_aprs \
|
|
||||||
$(INSTALLDIR)/bin/text2tt \
|
|
||||||
$(INSTALLDIR)/bin/tt2text \
|
|
||||||
$(INSTALLDIR)/bin/ll2utm \
|
|
||||||
$(INSTALLDIR)/bin/utm2ll \
|
|
||||||
$(INSTALLDIR)/bin/aclients \
|
|
||||||
$(INSTALLDIR)/bin/log2gpx \
|
|
||||||
$(INSTALLDIR)/bin/gen_packets \
|
|
||||||
$(INSTALLDIR)/bin/atest \
|
|
||||||
$(INSTALLDIR)/bin/ttcalc \
|
|
||||||
$(INSTALLDIR)/bin/kissutil \
|
|
||||||
$(INSTALLDIR)/bin/dwespeak.sh \
|
|
||||||
$(INSTALLDIR)/share/direwolf/tocalls.txt \
|
|
||||||
$(INSTALLDIR)/share/direwolf/config/direwolf.conf \
|
|
||||||
$(INSTALLDIR)/share/direwolf/symbols-new.txt \
|
|
||||||
$(INSTALLDIR)/share/direwolf/symbolsX.txt \
|
|
||||||
$(INSTALLDIR)/share/direwolf/dw-icon.png \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/README.md \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/CHANGES.md \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/LICENSE-other.txt \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/User-Guide.pdf \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf \
|
|
||||||
$(INSTALLDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf \
|
|
||||||
$(INSTALLDIR)/man/man1/aclients.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/atest.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/decode_aprs.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/direwolf.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/gen_packets.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/kissutil.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/ll2utm.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/log2gpx.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/text2tt.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/tt2text.1 \
|
|
||||||
$(INSTALLDIR)/man/man1/utm2ll.1 \
|
|
||||||
)
|
|
||||||
|
|
||||||
# Package it up for distribution.
|
|
||||||
|
|
||||||
.PHONY: dist-src
|
|
||||||
dist-src : README.md CHANGES.md \
|
|
||||||
doc/User-Guide.pdf doc/Raspberry-Pi-APRS.pdf \
|
|
||||||
doc/Raspberry-Pi-APRS-Tracker.pdf doc/APRStt-Implementation-Notes.pdf \
|
|
||||||
dw-start.sh dwespeak.bat dwespeak.sh \
|
|
||||||
tocalls.txt symbols-new.txt symbolsX.txt direwolf.spec
|
|
||||||
rm -f fsk_fast_filter.h
|
|
||||||
echo " " > tune.h
|
|
||||||
rm -f ../$z-src.zip
|
|
||||||
(cd .. ; zip $z-src.zip \
|
|
||||||
$z/README.md \
|
|
||||||
$z/CHANGES.md \
|
|
||||||
$z/LICENSE* \
|
|
||||||
$z/doc/User-Guide.pdf \
|
|
||||||
$z/doc/Raspberry-Pi-APRS.pdf \
|
|
||||||
$z/doc/Raspberry-Pi-APRS-Tracker.pdf \
|
|
||||||
$z/doc/APRStt-Implementation-Notes.pdf \
|
|
||||||
$z/Makefile* \
|
|
||||||
$z/*.c $z/*.h \
|
|
||||||
$z/regex/* $z/misc/* $z/geotranz/* \
|
|
||||||
$z/man1/* \
|
|
||||||
$z/generic.conf \
|
|
||||||
$z/tocalls.txt $z/symbols-new.txt $z/symbolsX.txt \
|
|
||||||
$z/dw-icon.png $z/dw-icon.rc $z/dw-icon.ico \
|
|
||||||
$z/dw-start.sh $z/direwolf.spec \
|
|
||||||
$z/dwespeak.bat $z/dwespeak.sh \
|
|
||||||
$z/telemetry-toolkit/* )
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# The destination field is often used to identify the manufacturer/model.
|
|
||||||
# These are not hardcoded into Dire Wolf. Instead they are read from
|
|
||||||
# a file called tocalls.txt at application start up time.
|
|
||||||
#
|
|
||||||
# The original permanent symbols are built in but the "new" symbols,
|
|
||||||
# using overlays, are often updated. These are also read from files.
|
|
||||||
#
|
|
||||||
# You can obtain an updated copy by typing "make tocalls-symbols".
|
|
||||||
# This is not part of the normal build process. You have to do this explicitly.
|
|
||||||
#
|
|
||||||
# The locations below appear to be the most recent.
|
|
||||||
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
|
||||||
#
|
|
||||||
|
|
||||||
.PHONY: tocalls-symbols
|
|
||||||
tocalls-symbols :
|
|
||||||
cp tocalls.txt tocalls.txt~
|
|
||||||
wget http://www.aprs.org/aprs11/tocalls.txt -O tocalls.txt
|
|
||||||
-diff -Z tocalls.txt~ tocalls.txt
|
|
||||||
cp symbols-new.txt symbols-new.txt~
|
|
||||||
wget http://www.aprs.org/symbols/symbols-new.txt -O symbols-new.txt
|
|
||||||
-diff -Z symbols-new.txt~ symbols-new.txt
|
|
||||||
cp symbolsX.txt symbolsX.txt~
|
|
||||||
wget http://www.aprs.org/symbols/symbolsX.txt -O symbolsX.txt
|
|
||||||
-diff -Z symbolsX.txt~ symbolsX.txt
|
|
727
Makefile.win
727
Makefile.win
|
@ -1,727 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for native Windows version of Dire Wolf.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# This is built in the Cygwin environment with the MinGW compiler.
|
|
||||||
# MinGW is a special version of gcc that generates native Windows executables.
|
|
||||||
#
|
|
||||||
# A minimum of Windows XP is required due to some of the system
|
|
||||||
# features being used. XP requires a Pentium processor or later.
|
|
||||||
# The DSP filters can be sped up considerably with the SSE instructions.
|
|
||||||
# The SSE instructions were introduced in 1999 with the Pentium III series.
|
|
||||||
# SSE2 instructions, added in 2000, with the Pentium 4, don't seem to offer any advantage.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
all : direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients log2gpx gen_packets atest ttcalc kissutil
|
|
||||||
# tnctest tnctest-issue-132
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# October 2019, version 1.6: 64 bit target for Windows. It runs twice as fast!
|
|
||||||
# Originally I installed MinGW outside of Cygwin and added location to PATH in .bash_profile.
|
|
||||||
# Install these two Cygwin packages so the compiler is in /usr/bin
|
|
||||||
# and no special PATH is required.
|
|
||||||
# mingw64-x86_64-gcc-core (7.4.0-1)
|
|
||||||
# mingw64-x86_64-gcc-g++ (7.4.0-1)
|
|
||||||
|
|
||||||
CC ?= x86_64-w64-mingw32-gcc
|
|
||||||
CXX ?= x86_64-w64-mingw32-g++
|
|
||||||
AR ?= x86_64-w64-mingw32-ar
|
|
||||||
WINDRES ?= x86_64-w64-mingw32-windres
|
|
||||||
|
|
||||||
# MinGW requires "-mthreads" option for threadsafe operation.
|
|
||||||
|
|
||||||
CFLAGS := -Ofast -Iregex -Iutm -Igeotranz -mthreads -DUSE_REGEX_STATIC -Wall -Wlogical-op
|
|
||||||
|
|
||||||
# For a 32 bit target, install these Cygwin packages.
|
|
||||||
# mingw64-i686gcc-core (7.4.0-1)
|
|
||||||
# mingw64-i686gcc-g++ (7.4.0-1)
|
|
||||||
# i686 corresponds to Pentium II.
|
|
||||||
# We need to add Pentium III and SSE instructions to speed things up.
|
|
||||||
# Pentium 4 and SSE2 offers no advantage so no reason to bump up minimum CPU requirement.
|
|
||||||
# Code for the 64 bit target runs about twice as fast, so use that if possible.
|
|
||||||
|
|
||||||
#CC = i686-w64-mingw32-gcc
|
|
||||||
#CXX = i686-w64-mingw32-g++
|
|
||||||
#AR = i686-w64-mingw32-ar
|
|
||||||
#WINDRES = i686-w64-mingw32-windres
|
|
||||||
#CFLAGS += -march=pentium3 -msse
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS += -g
|
|
||||||
# TEMP EXPERIMENT - DO NOT RELEASE
|
|
||||||
#CFLAGS += -fsanitize=undefined
|
|
||||||
|
|
||||||
# For version 1.4, we upgrade from gcc 4.6.2 to 4.9.3.
|
|
||||||
|
|
||||||
# gcc 4.8 adds these. Try them just for fun.
|
|
||||||
# No, it needs libasan which is not on Windows.
|
|
||||||
#CFLAGS += -fsanitize=address -fno-omit-frame-pointer
|
|
||||||
|
|
||||||
# Helpful for the demodulators. Overkill for non-hot spots.
|
|
||||||
#CFLAGS += -Wdouble-promotion
|
|
||||||
|
|
||||||
# Don't have the patience for this right now.
|
|
||||||
#CFLAGS += -Wextra
|
|
||||||
|
|
||||||
# Continue working on these.
|
|
||||||
CFLAGS += -Wsign-compare
|
|
||||||
CFLAGS += -Wuninitialized
|
|
||||||
CFLAGS += -Wold-style-declaration
|
|
||||||
CFLAGS += -Wnull-dereference
|
|
||||||
CFLAGS += -fdelete-null-pointer-checks
|
|
||||||
#CFLAGS += -Wmissing-prototypes
|
|
||||||
#CFLAGS += -Wold-style-definition
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# -------------------------------------- Main application --------------------------------
|
|
||||||
|
|
||||||
# Not sure why this is here.
|
|
||||||
|
|
||||||
demod.o : fsk_demod_state.h
|
|
||||||
|
|
||||||
demod_9600.o : fsk_demod_state.h
|
|
||||||
|
|
||||||
demod_afsk.o : fsk_demod_state.h
|
|
||||||
|
|
||||||
demod_psk.o : fsk_demod_state.h
|
|
||||||
|
|
||||||
|
|
||||||
direwolf : direwolf.o config.o recv.o demod.o dsp.o demod_afsk.o demod_psk.o demod_9600.o hdlc_rec.o \
|
|
||||||
hdlc_rec2.o multi_modem.o rdq.o rrbb.o dlq.o \
|
|
||||||
fcs_calc.o ax25_pad.o ax25_pad2.o xid.o \
|
|
||||||
decode_aprs.o symbols.o server.o kiss.o kissserial.o kissnet.o kiss_frame.o hdlc_send.o fcs_calc.o \
|
|
||||||
gen_tone.o morse.o audio_win.o audio_stats.o digipeater.o cdigipeater.o pfilter.o dedupe.o tq.o xmit.o \
|
|
||||||
ptt.o beacon.o dwgps.o encode_aprs.o latlong.o textcolor.o \
|
|
||||||
dtmf.o aprs_tt.o tt_user.o tt_text.o igate.o waypoint.o serial_port.o log.o telemetry.o \
|
|
||||||
dwgps.o dwgpsnmea.o dtime_now.o mheard.o ax25_link.o cm108.c \
|
|
||||||
dw-icon.o regex.a misc.a geotranz.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
dw-icon.o : dw-icon.rc dw-icon.ico
|
|
||||||
$(WINDRES) dw-icon.rc -o $@
|
|
||||||
|
|
||||||
|
|
||||||
# Optimization for slow processors.
|
|
||||||
|
|
||||||
demod.o : fsk_fast_filter.h
|
|
||||||
|
|
||||||
demod_afsk.o : fsk_fast_filter.h
|
|
||||||
|
|
||||||
|
|
||||||
fsk_fast_filter.h : gen_fff
|
|
||||||
./gen_fff > fsk_fast_filter.h
|
|
||||||
|
|
||||||
gen_fff : demod_afsk.c dsp.c textcolor.c
|
|
||||||
echo " " > tune.h
|
|
||||||
$(CC) $(CFLAGS) -DGEN_FFF -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# The destination field is often used to identify the manufacturer/model.
|
|
||||||
# These are not hardcoded into Dire Wolf. Instead they are read from
|
|
||||||
# a file called tocalls.txt at application start up time.
|
|
||||||
#
|
|
||||||
# The original permanent symbols are built in but the "new" symbols,
|
|
||||||
# using overlays, are often updated. These are also read from files.
|
|
||||||
#
|
|
||||||
# You can obtain an updated copy by typing "make tocalls-symbols".
|
|
||||||
# This is not part of the normal build process. You have to do this explicitly.
|
|
||||||
#
|
|
||||||
# The locations below appear to be the most recent.
|
|
||||||
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
|
||||||
#
|
|
||||||
|
|
||||||
.PHONY: tocalls-symbols
|
|
||||||
tocalls-symbols :
|
|
||||||
cp tocalls.txt tocalls.txt~
|
|
||||||
wget http://www.aprs.org/aprs11/tocalls.txt -O tocalls.txt
|
|
||||||
-diff tocalls.txt~ tocalls.txt
|
|
||||||
cp symbols-new.txt symbols-new.txt~
|
|
||||||
wget http://www.aprs.org/symbols/symbols-new.txt -O symbols-new.txt
|
|
||||||
-diff symbols-new.txt~ symbols-new.txt
|
|
||||||
cp symbolsX.txt symbolsX.txt~
|
|
||||||
wget http://www.aprs.org/symbols/symbolsX.txt -O symbolsX.txt
|
|
||||||
-diff symbolsX.txt~ symbolsX.txt
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------- Other utilities included with distribution -------------------------
|
|
||||||
|
|
||||||
|
|
||||||
# Separate application to decode raw data.
|
|
||||||
|
|
||||||
# First three use .c rather than .o because they depend on DECAMAIN definition.
|
|
||||||
|
|
||||||
decode_aprs : decode_aprs.c kiss_frame.c ax25_pad.c dwgpsnmea.o dwgps.o serial_port.o symbols.o textcolor.o fcs_calc.o latlong.o log.o telemetry.o tt_text.o regex.a misc.a geotranz.a
|
|
||||||
$(CC) $(CFLAGS) -DDECAMAIN -o decode_aprs $^
|
|
||||||
|
|
||||||
|
|
||||||
# Convert between text and touch tone representation.
|
|
||||||
|
|
||||||
text2tt : tt_text.c misc.a
|
|
||||||
$(CC) $(CFLAGS) -DENC_MAIN -o $@ $^
|
|
||||||
|
|
||||||
tt2text : tt_text.c misc.a
|
|
||||||
$(CC) $(CFLAGS) -DDEC_MAIN -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Convert between Latitude/Longitude and UTM coordinates.
|
|
||||||
|
|
||||||
ll2utm : ll2utm.c textcolor.c geotranz.a misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
|
|
||||||
utm2ll : utm2ll.c textcolor.c geotranz.a misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Convert from log file to GPX.
|
|
||||||
|
|
||||||
log2gpx : log2gpx.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# Test application to generate sound.
|
|
||||||
|
|
||||||
gen_packets : gen_packets.o ax25_pad.o hdlc_send.o fcs_calc.o gen_tone.o morse.o dtmf.o textcolor.o dsp.o misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Connected mode sample applications for talking to network TNC with AGW protocol.
|
|
||||||
|
|
||||||
appserver : appserver.o agwlib.o dwsock.o textcolor.o dtime_now.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------- Libraries --------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# UTM, USNG, MGRS conversions.
|
|
||||||
|
|
||||||
geotranz.a : error_string.o mgrs.o polarst.o tranmerc.o ups.o usng.o utm.o
|
|
||||||
$(AR) -cr $@ $^
|
|
||||||
|
|
||||||
error_string.o : geotranz/error_string.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
mgrs.o : geotranz/mgrs.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
polarst.o : geotranz/polarst.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
tranmerc.o : geotranz/tranmerc.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
ups.o : geotranz/ups.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
usng.o : geotranz/usng.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
utm.o : geotranz/utm.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# When building for Linux, we use regular expression
|
|
||||||
# functions supplied by the gnu C library.
|
|
||||||
# For the native WIN32 version, we need to use our own copy.
|
|
||||||
# These were copied from http://gnuwin32.sourceforge.net/packages/regex.htm
|
|
||||||
# Consider upgrading from https://www.gnu.org/software/libc/sources.html
|
|
||||||
|
|
||||||
regex.a : regex.o
|
|
||||||
$(AR) -cr $@ $^
|
|
||||||
|
|
||||||
regex.o : regex/regex.c
|
|
||||||
$(CC) $(CFLAGS) -Dbool=int -Dtrue=1 -Dfalse=0 -c -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# There are several string functions found in Linux
|
|
||||||
# but not on Windows. Need to provide our own copy.
|
|
||||||
|
|
||||||
misc.a : strsep.o strtok_r.o strcasestr.o strlcpy.o strlcat.o
|
|
||||||
$(AR) -cr $@ $^
|
|
||||||
|
|
||||||
strsep.o : misc/strsep.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
strtok_r.o : misc/strtok_r.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
strcasestr.o : misc/strcasestr.c
|
|
||||||
$(CC) $(CFLAGS) -c -o $@ $^
|
|
||||||
|
|
||||||
strlcpy.o : misc/strlcpy.c
|
|
||||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
|
||||||
|
|
||||||
strlcat.o : misc/strlcat.c
|
|
||||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------- Automated Smoke Test --------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
# Combine some unit tests into a single regression sanity check.
|
|
||||||
|
|
||||||
check : dtest ttest tttexttest pftest tlmtest lltest enctest kisstest pad2test xidtest dtmftest check-modem1200 check-modem300 check-modem9600 check-modem19200 check-modem2400-a check-modem2400-b check-modem2400-g check-modem4800
|
|
||||||
|
|
||||||
# Can we encode and decode at popular data rates?
|
|
||||||
# Verify that single bit fixup increases the count.
|
|
||||||
|
|
||||||
check-modem1200 : gen_packets atest
|
|
||||||
gen_packets -n 100 -o test12.wav
|
|
||||||
atest -F0 -PE -L64 -G72 test12.wav
|
|
||||||
atest -F1 -PE -L70 -G75 test12.wav
|
|
||||||
rm test12.wav
|
|
||||||
|
|
||||||
check-modem300 : gen_packets atest
|
|
||||||
gen_packets -B300 -n 100 -o test3.wav
|
|
||||||
atest -B300 -F0 -L68 -G69 test3.wav
|
|
||||||
atest -B300 -F1 -L71 -G75 test3.wav
|
|
||||||
rm test3.wav
|
|
||||||
|
|
||||||
#FIXME: test full amplitude.
|
|
||||||
|
|
||||||
check-modem9600 : gen_packets atest
|
|
||||||
gen_packets -B9600 -a 170 -o test96.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B9600 -F0 -L4 -G4 test96.wav
|
|
||||||
sleep 1
|
|
||||||
rm test96.wav
|
|
||||||
sleep 1
|
|
||||||
gen_packets -B9600 -n 100 -o test96.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B9600 -F0 -L61 -G65 test96.wav
|
|
||||||
atest -B9600 -F1 -L62 -G66 test96.wav
|
|
||||||
sleep 1
|
|
||||||
rm test96.wav
|
|
||||||
|
|
||||||
check-modem19200 : gen_packets atest
|
|
||||||
gen_packets -r 96000 -B19200 -a 170 -o test19.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B19200 -F0 -L4 test19.wav
|
|
||||||
sleep 1
|
|
||||||
rm test19.wav
|
|
||||||
sleep 1
|
|
||||||
gen_packets -r 96000 -B19200 -n 100 -o test19.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B19200 -F0 -L60 -G64 test19.wav
|
|
||||||
atest -B19200 -F1 -L64 -G68 test19.wav
|
|
||||||
sleep 1
|
|
||||||
rm test19.wav
|
|
||||||
|
|
||||||
check-modem2400-a : gen_packets atest
|
|
||||||
gen_packets -B2400 -j -n 100 -o test24-a.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B2400 -j -F0 -L76 -G80 test24-a.wav
|
|
||||||
atest -B2400 -j -F1 -L84 -G88 test24-a.wav
|
|
||||||
sleep 1
|
|
||||||
rm test24-a.wav
|
|
||||||
|
|
||||||
check-modem2400-b : gen_packets atest
|
|
||||||
gen_packets -B2400 -J -n 100 -o test24-b.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B2400 -J -F0 -L79 -G83 test24-b.wav
|
|
||||||
atest -B2400 -J -F1 -L87 -G91 test24-b.wav
|
|
||||||
sleep 1
|
|
||||||
rm test24-b.wav
|
|
||||||
|
|
||||||
check-modem2400-g : gen_packets atest
|
|
||||||
gen_packets -B2400 -g -n 100 -o test24-g.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B2400 -g -F0 -L99 -G100 test24-g.wav
|
|
||||||
sleep 1
|
|
||||||
rm test24-g.wav
|
|
||||||
|
|
||||||
check-modem4800 : gen_packets atest
|
|
||||||
gen_packets -B4800 -n 100 -o test48.wav
|
|
||||||
sleep 1
|
|
||||||
atest -B4800 -F0 -L70 -G74 test48.wav
|
|
||||||
atest -B4800 -F1 -L79 -G84 test48.wav
|
|
||||||
sleep 1
|
|
||||||
rm test48.wav
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for demodulators
|
|
||||||
|
|
||||||
atest : atest.c fsk_fast_filter.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
|
||||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
|
||||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
|
||||||
dwgpsnmea.o dwgps.o serial_port.o latlong.c \
|
|
||||||
symbols.c tt_text.c textcolor.c telemetry.c dtime_now.o \
|
|
||||||
decode_aprs.o log.o \
|
|
||||||
misc.a regex.a
|
|
||||||
echo " " > tune.h
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
#./atest ..\\direwolf-0.2\\02_Track_2.wav
|
|
||||||
#atest -B 9600 z9.wav
|
|
||||||
#atest za100.wav
|
|
||||||
|
|
||||||
atest9 : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.c multi_modem.c \
|
|
||||||
rrbb.c fcs_calc.c ax25_pad.c decode_aprs.c latlong.c symbols.c textcolor.c telemetry.c dtime_now.o misc.a regex.a \
|
|
||||||
fsk_fast_filter.h
|
|
||||||
echo " " > tune.h
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
./atest9 -B 9600 ../walkabout9600.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest9 -B 9600 noise96.wav
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for inner digipeater algorithm
|
|
||||||
|
|
||||||
.PHONY: dtest
|
|
||||||
dtest : digipeater.c dedupe.c pfilter.c \
|
|
||||||
ax25_pad.o fcs_calc.o tq.o textcolor.o \
|
|
||||||
decode_aprs.o dwgpsnmea.o dwgps.o serial_port.o latlong.o telemetry.o symbols.o tt_text.o misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -DDIGITEST -o $@ $^
|
|
||||||
./dtest
|
|
||||||
rm dtest.exe
|
|
||||||
|
|
||||||
# Unit test for APRStt tone seqence parsing.
|
|
||||||
|
|
||||||
.PHONTY: ttest
|
|
||||||
ttest : aprs_tt.c tt_text.c latlong.o textcolor.o geotranz.a misc.a
|
|
||||||
$(CC) $(CFLAGS) -Igeotranz -DTT_MAIN -o $@ $^
|
|
||||||
./ttest
|
|
||||||
rm ttest.exe
|
|
||||||
|
|
||||||
# Unit test for APRStt tone sequence / text conversions.
|
|
||||||
|
|
||||||
.PHONY: tttexttest
|
|
||||||
tttexttest : tt_text.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DTTT_TEST -o $@ $^
|
|
||||||
./tttexttest
|
|
||||||
rm tttexttest.exe
|
|
||||||
|
|
||||||
# Unit test for Packet Filtering.
|
|
||||||
|
|
||||||
.PHONY: pftest
|
|
||||||
pftest : pfilter.c ax25_pad.o textcolor.o fcs_calc.o decode_aprs.o dwgpsnmea.o dwgps.o serial_port.o latlong.o symbols.o telemetry.o tt_text.o misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -DPFTEST -o $@ $^
|
|
||||||
./pftest
|
|
||||||
rm pftest.exe
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for telemetry decoding.
|
|
||||||
|
|
||||||
.PHONY: tlmtest
|
|
||||||
tlmtest : telemetry.c ax25_pad.o fcs_calc.o textcolor.o misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -DTEST -o $@ $^
|
|
||||||
./tlmtest
|
|
||||||
rm tlmtest.exe
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for location coordinate conversion.
|
|
||||||
|
|
||||||
.PHONY: lltest
|
|
||||||
lltest : latlong.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DLLTEST -o $@ $^
|
|
||||||
./lltest
|
|
||||||
rm lltest.exe
|
|
||||||
|
|
||||||
# Unit test for encoding position & object report.
|
|
||||||
|
|
||||||
.PHONY: enctest
|
|
||||||
enctest : encode_aprs.c latlong.c textcolor.c misc.a
|
|
||||||
$(CC) $(CFLAGS) -DEN_MAIN -o $@ $^
|
|
||||||
./enctest
|
|
||||||
rm enctest.exe
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for KISS encapsulation.
|
|
||||||
|
|
||||||
.PHONY: kisstest
|
|
||||||
kisstest : kiss_frame.c
|
|
||||||
$(CC) $(CFLAGS) -DKISSTEST -o $@ $^
|
|
||||||
./kisstest
|
|
||||||
rm kisstest.exe
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for constructing frames besides UI.
|
|
||||||
|
|
||||||
.PHONY: pad2test
|
|
||||||
pad2test : ax25_pad2.c ax25_pad.c fcs_calc.o textcolor.o regex.a misc.a
|
|
||||||
$(CC) $(CFLAGS) -DPAD2TEST -o $@ $^
|
|
||||||
./pad2test
|
|
||||||
rm pad2test.exe
|
|
||||||
|
|
||||||
# Unit Test for XID frame encode/decode.
|
|
||||||
|
|
||||||
.PHONY: xidtest
|
|
||||||
xidtest : xid.c textcolor.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -DXIDTEST -o $@ $^
|
|
||||||
./xidtest
|
|
||||||
rm xidtest.exe
|
|
||||||
|
|
||||||
# Unit Test for DTMF encode/decode.
|
|
||||||
|
|
||||||
.PHONY: dtmftest
|
|
||||||
dtmftest : dtmf.c textcolor.o
|
|
||||||
$(CC) $(CFLAGS) -DDTMF_TEST -o $@ $^
|
|
||||||
./dtmftest
|
|
||||||
rm dtmftest.exe
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------ Other manual testing & experimenting -------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
tnctest : tnctest.c textcolor.o dtime_now.o serial_port.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
tnctest-issue-132 : tnctest-issue-132.c textcolor.o dtime_now.o serial_port.o misc.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
# For tweaking the demodulator.
|
|
||||||
|
|
||||||
demod.o : tune.h
|
|
||||||
demod_9600.o : tune.h
|
|
||||||
demod_afsk.o : tune.h
|
|
||||||
demod_psk.o : tune.h
|
|
||||||
|
|
||||||
testagc : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.o fsk_demod_agc.h \
|
|
||||||
hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
|
||||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o latlong.o symbols.o textcolor.o telemetry.o \
|
|
||||||
dwgpsnmea.o dwgps.o serial_port.o tt_text.o dtime_now.o regex.a misc.a
|
|
||||||
rm -f atest.exe
|
|
||||||
$(CC) $(CFLAGS) -o atest $^
|
|
||||||
./atest -P H+ -F 0 ../01_Track_1.wav ../02_Track_2.wav | grep "packets decoded in" >atest.out
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
noisy3.wav : gen_packets
|
|
||||||
./gen_packets -B 300 -n 100 -o noisy3.wav
|
|
||||||
|
|
||||||
testagc3 : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.c multi_modem.c \
|
|
||||||
rrbb.c fcs_calc.c ax25_pad.c decode_aprs.c latlong.c symbols.c textcolor.c telemetry.c dtime_now.o regex.a misc.a \
|
|
||||||
tune.h
|
|
||||||
rm -f atest3.exe
|
|
||||||
$(CC) $(CFLAGS) -o atest3 $^
|
|
||||||
./atest3 -B 300 -P D -D 3 noisy3.wav | grep "packets decoded in" >atest.out
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
noisy96.wav : gen_packets
|
|
||||||
./gen_packets -B 9600 -n 100 -o noisy96.wav
|
|
||||||
|
|
||||||
testagc96 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
|
||||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
|
||||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
|
||||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
|
||||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
|
||||||
misc.a regex.a
|
|
||||||
rm -f atest96.exe
|
|
||||||
$(CC) $(CFLAGS) -o atest96 $^
|
|
||||||
./atest96 -B 9600 ../walkabout9600c.wav noisy96.wav zzz16.wav zzz16.wav zzz16.wav zzz8.wav zzz8.wav zzz8.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 ../walkabout9600c.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 zzz16.wav zzz8.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 noisy96.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 19990303_0225_9600_8bis_22kHz.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 19990303_0225_9600_16bit_22kHz.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 -P + z8-22k.wav| grep "packets decoded in" >atest.out
|
|
||||||
#./atest96 -B 9600 test9600.wav | grep "packets decoded in" >atest.out
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
testagc24 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
|
||||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
|
||||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
|
||||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
|
||||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
|
||||||
misc.a regex.a
|
|
||||||
rm -f atest24.exe
|
|
||||||
sleep 1
|
|
||||||
$(CC) $(CFLAGS) -o atest24mfj $^
|
|
||||||
./atest24 -B 2400 test2400.wav | grep "packets decoded in" >atest.out
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
testagc24mfj : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
|
||||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
|
||||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
|
||||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
|
||||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
|
||||||
misc.a regex.a
|
|
||||||
rm -f atest24mfj.exe
|
|
||||||
sleep 1
|
|
||||||
$(CC) $(CFLAGS) -o atest24mfj $^
|
|
||||||
./atest24mfj -F 1 -B 2400 ../ref-doc/MFJ-2400-PSK/2k4_short.wav
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
testagc48 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
|
||||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
|
||||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
|
||||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
|
||||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
|
||||||
misc.a regex.a
|
|
||||||
rm -f atest48.exe
|
|
||||||
sleep 1
|
|
||||||
$(CC) $(CFLAGS) -o atest48 $^
|
|
||||||
./atest48 -B 4800 test4800.wav | grep "packets decoded in" >atest.out
|
|
||||||
#./atest48 -B 4800 test4800.wav
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
# Unit test for IGate
|
|
||||||
|
|
||||||
itest : igate.c textcolor.c ax25_pad.c fcs_calc.c misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -DITEST -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Multiple AGWPE network or serial port clients to test TNCs side by side.
|
|
||||||
|
|
||||||
aclients : aclients.c ax25_pad.c fcs_calc.c textcolor.c misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
# Talk to a KISS TNC.
|
|
||||||
|
|
||||||
# Note: kiss_frame.c has conditional compilation on KISSUTIL.
|
|
||||||
|
|
||||||
kissutil : kissutil.c kiss_frame.c ax25_pad.o fcs_calc.o textcolor.o serial_port.o dwsock.o dtime_now.o misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -DKISSUTIL -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
mqtest : aprsmsg.c kiss_frame.c encode_aprs.o ax25_pad.o fcs_calc.o textcolor.o serial_port.o dwsock.o dtime_now.o latlong.o misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -DMQTEST -DKISSUTIL -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Touch Tone to Speech sample application.
|
|
||||||
|
|
||||||
ttcalc : ttcalc.o ax25_pad.o fcs_calc.o textcolor.o misc.a regex.a
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
# Send GPS location to KISS TNC each second.
|
|
||||||
|
|
||||||
walk96 : walk96.c dwgps.o dwgpsnmea.o kiss_frame.o \
|
|
||||||
latlong.o encode_aprs.o serial_port.o textcolor.o \
|
|
||||||
ax25_pad.o fcs_calc.o \
|
|
||||||
xmit.o hdlc_send.o gen_tone.o ptt.o tq.o \
|
|
||||||
hdlc_rec.o hdlc_rec2.o rrbb.o dsp.o audio_win.o \
|
|
||||||
multi_modem.o demod.o demod_afsk.o demod_psk.c demod_9600.o rdq.o \
|
|
||||||
server.o morse.o dtmf.o audio_stats.o dtime_now.o dlq.o \
|
|
||||||
regex.a misc.a
|
|
||||||
$(CC) $(CFLAGS) -DWALK96 -o $@ $^ -lwinmm -lws2_32
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: depend
|
|
||||||
depend : $(wildcard *.c)
|
|
||||||
makedepend -f $(lastword $(MAKEFILE_LIST)) -- $(CFLAGS) -- $^
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean :
|
|
||||||
rm -f *.o *.a *.exe fsk_fast_filter.h noisy96.wav
|
|
||||||
echo " " > tune.h
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------- Packaging for distribution ----------------------
|
|
||||||
|
|
||||||
# Name of zip file for distribution.
|
|
||||||
|
|
||||||
z := $(notdir ${CURDIR})
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: dist-win
|
|
||||||
dist-win : direwolf.exe decode_aprs.exe text2tt.exe tt2text.exe ll2utm.exe utm2ll.exe \
|
|
||||||
aclients.exe log2gpx.exe gen_packets.exe atest.exe ttcalc.exe kissutil.exe \
|
|
||||||
generic.conf dwespeak.bat \
|
|
||||||
README.md CHANGES.md \
|
|
||||||
doc/User-Guide.pdf \
|
|
||||||
doc/Raspberry-Pi-APRS.pdf \
|
|
||||||
doc/APRStt-Implementation-Notes.pdf
|
|
||||||
rm -f ../$z-win.zip
|
|
||||||
egrep '^C|^W' generic.conf | cut -c2-999 > direwolf.conf
|
|
||||||
unix2dos direwolf.conf
|
|
||||||
cp doc/README.md README-doc.md
|
|
||||||
zip --junk-paths ../$z-win.zip \
|
|
||||||
README.md \
|
|
||||||
CHANGES.md \
|
|
||||||
README-doc.md \
|
|
||||||
doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf \
|
|
||||||
doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf \
|
|
||||||
doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf \
|
|
||||||
doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf \
|
|
||||||
doc/APRS-Telemetry-Toolkit.pdf \
|
|
||||||
doc/APRStt-Implementation-Notes.pdf \
|
|
||||||
doc/APRStt-interface-for-SARTrack.pdf \
|
|
||||||
doc/APRStt-Listening-Example.pdf \
|
|
||||||
doc/Bluetooth-KISS-TNC.pdf \
|
|
||||||
doc/Going-beyond-9600-baud.pdf \
|
|
||||||
doc/Raspberry-Pi-APRS.pdf \
|
|
||||||
doc/Raspberry-Pi-APRS-Tracker.pdf \
|
|
||||||
doc/Raspberry-Pi-SDR-IGate.pdf \
|
|
||||||
doc/Successful-APRS-IGate-Operation.pdf \
|
|
||||||
doc/User-Guide.pdf \
|
|
||||||
doc/WA8LMF-TNC-Test-CD-Results.pdf \
|
|
||||||
doc/Why-is-9600-only-twice-as-fast-as-1200.pdf \
|
|
||||||
LICENSE* \
|
|
||||||
direwolf.conf \
|
|
||||||
direwolf.exe \
|
|
||||||
decode_aprs.exe \
|
|
||||||
tocalls.txt symbols-new.txt symbolsX.txt \
|
|
||||||
text2tt.exe tt2text.exe \
|
|
||||||
ll2utm.exe utm2ll.exe \
|
|
||||||
aclients.exe \
|
|
||||||
log2gpx.exe \
|
|
||||||
gen_packets.exe \
|
|
||||||
atest.exe \
|
|
||||||
ttcalc.exe \
|
|
||||||
kissutil.exe \
|
|
||||||
dwespeak.bat \
|
|
||||||
telemetry-toolkit/*
|
|
||||||
rm README-doc.md
|
|
||||||
|
|
||||||
|
|
||||||
# Reminders if pdf files are not up to date.
|
|
||||||
|
|
||||||
doc/User-Guide.pdf : doc/User-Guide.docx
|
|
||||||
echo "***** User-Guide.pdf is out of date *****"
|
|
||||||
|
|
||||||
doc/Raspberry-Pi-APRS.pdf : doc/Raspberry-Pi-APRS.docx
|
|
||||||
echo "***** Raspberry-Pi-APRS.pdf is out of date *****"
|
|
||||||
|
|
||||||
doc/Raspberry-Pi-APRS-Tracker.pdf : doc/Raspberry-Pi-APRS-Tracker.docx
|
|
||||||
echo "***** Raspberry-Pi-APRS-Tracker.pdf is out of date *****"
|
|
||||||
|
|
||||||
doc/APRStt-Implementation-Notes.pdf : doc/APRStt-Implementation-Notes.docx
|
|
||||||
echo "***** APRStt-Implementation-Notes.pdf is out of date *****"
|
|
||||||
|
|
||||||
doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf : doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.docx
|
|
||||||
echo "***** A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf is out of date *****"
|
|
||||||
|
|
||||||
doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf : doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.docx
|
|
||||||
echo "***** A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf is out of date *****"
|
|
||||||
|
|
||||||
doc/APRS-Telemetry-Toolkit.pdf : doc/APRS-Telemetry-Toolkit.docx
|
|
||||||
echo "***** APRS-Telemetry-Toolkit.pdf is out of date *****"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: backup
|
|
||||||
backup :
|
|
||||||
mkdir /cygdrive/e/backup-cygwin-home/`date +"%Y-%m-%d"`
|
|
||||||
cp -r . /cygdrive/e/backup-cygwin-home/`date +"%Y-%m-%d"`
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# The following is updated by "make depend"
|
|
||||||
#
|
|
||||||
# DO NOT DELETE
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
include(CPack)
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=@APPLICATION_NAME@
|
||||||
|
Comment=APRS Soundcard TNC
|
||||||
|
Exec=@APPLICATION_DESKTOP_EXEC@
|
||||||
|
Icon=@CMAKE_PROJECT_NAME@_icon.png
|
||||||
|
StartupNotify=true
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=HamRadio
|
||||||
|
Keywords=Ham Radio;APRS;Soundcard TNC;KISS;AGWPE;AX.25
|
|
@ -0,0 +1 @@
|
||||||
|
MAINICON ICON "direwolf_icon.ico"
|
Before Width: | Height: | Size: 361 KiB After Width: | Height: | Size: 361 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,16 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <arm_neon.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
uint32x4_t x={0};
|
||||||
|
x=veorq_u32(x,x);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
__m256d x = _mm256_setzero_pd();
|
||||||
|
x=_mm256_addsub_pd(x,x);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
__m256i x = _mm256_setzero_si256();
|
||||||
|
x=_mm256_add_epi64 (x,x);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
uint64_t x[8] = {0};
|
||||||
|
__m512i y = _mm512_loadu_si512((__m512i*)x);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <emmintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
__m128i x = _mm_setzero_si128();
|
||||||
|
x=_mm_add_epi64(x,x);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <emmintrin.h>
|
||||||
|
#include <pmmintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
__m128d x = _mm_setzero_pd();
|
||||||
|
x=_mm_addsub_pd(x,x);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <emmintrin.h>
|
||||||
|
#include <smmintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
__m128i x = _mm_setzero_si128();
|
||||||
|
__m128i a = _mm_setzero_si128();
|
||||||
|
__m128i b = _mm_setzero_si128();
|
||||||
|
x=_mm_blend_epi16(a,b,4);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <nmmintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
unsigned int x=32;
|
||||||
|
x=_mm_crc32_u8(x,4);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <emmintrin.h>
|
||||||
|
#include <tmmintrin.h>
|
||||||
|
|
||||||
|
void signalHandler(int signum) {
|
||||||
|
exit(signum); // SIGILL = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
signal(SIGILL, signalHandler);
|
||||||
|
__m128i x = _mm_setzero_si128();
|
||||||
|
x=_mm_alignr_epi8(x,x,2);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
|
||||||
|
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||||
|
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||||
|
foreach(file ${files})
|
||||||
|
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
|
||||||
|
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
exec_program(
|
||||||
|
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RETURN_VALUE rm_retval
|
||||||
|
)
|
||||||
|
if(NOT "${rm_retval}" STREQUAL 0)
|
||||||
|
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
|
||||||
|
endif(NOT "${rm_retval}" STREQUAL 0)
|
||||||
|
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
|
||||||
|
endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
endforeach(file)
|
|
@ -0,0 +1,307 @@
|
||||||
|
# Clang or AppleClang (see CMP0025)
|
||||||
|
if(NOT DEFINED C_CLANG AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
set(C_CLANG 1)
|
||||||
|
elseif(NOT DEFINED C_GCC AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
set(C_GCC 1)
|
||||||
|
elseif(NOT DEFINED C_MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
set(C_MSVC 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Detect current compilation architecture and create standard definitions
|
||||||
|
include(CheckSymbolExists)
|
||||||
|
function(detect_architecture symbol arch)
|
||||||
|
if (NOT DEFINED ARCHITECTURE)
|
||||||
|
set(CMAKE_REQUIRED_QUIET 1)
|
||||||
|
check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch})
|
||||||
|
unset(CMAKE_REQUIRED_QUIET)
|
||||||
|
|
||||||
|
# The output variable needs to be unique across invocations otherwise
|
||||||
|
# CMake's crazy scope rules will keep it defined
|
||||||
|
if (ARCHITECTURE_${arch})
|
||||||
|
set(ARCHITECTURE "${arch}" PARENT_SCOPE)
|
||||||
|
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE)
|
||||||
|
add_definitions(-DARCHITECTURE_${arch}=1)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if (NOT ENABLE_GENERIC)
|
||||||
|
if (C_MSVC)
|
||||||
|
detect_architecture("_M_AMD64" x86_64)
|
||||||
|
detect_architecture("_M_IX86" x86)
|
||||||
|
detect_architecture("_M_ARM" ARM)
|
||||||
|
detect_architecture("_M_ARM64" ARM64)
|
||||||
|
else()
|
||||||
|
detect_architecture("__x86_64__" x86_64)
|
||||||
|
detect_architecture("__i386__" x86)
|
||||||
|
detect_architecture("__arm__" ARM)
|
||||||
|
detect_architecture("__aarch64__" ARM64)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if (NOT DEFINED ARCHITECTURE)
|
||||||
|
set(ARCHITECTURE "GENERIC")
|
||||||
|
set(ARCHITECTURE_GENERIC 1)
|
||||||
|
add_definitions(-DARCHITECTURE_GENERIC=1)
|
||||||
|
endif()
|
||||||
|
message(STATUS "Target architecture: ${ARCHITECTURE}")
|
||||||
|
|
||||||
|
set(TEST_DIR ${PROJECT_SOURCE_DIR}/cmake/cpu_tests)
|
||||||
|
|
||||||
|
# flag that set the minimum cpu flag requirements
|
||||||
|
# used to create re-distribuitable binary
|
||||||
|
if (${ARCHITECTURE} MATCHES "x86_64|x86" AND (FORCE_SSE OR FORCE_SSSE3 OR FORCE_SSE41))
|
||||||
|
if (FORCE_SSE)
|
||||||
|
set(HAS_SSE ON CACHE BOOL "SSE SIMD enabled")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse" )
|
||||||
|
message(STATUS "Use SSE SIMD instructions")
|
||||||
|
add_definitions(-DUSE_SSE)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /arch:SSE" )
|
||||||
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
message(STATUS "Use MSVC SSSE3 SIMD instructions")
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_SSSE3)
|
||||||
|
endif()
|
||||||
|
elseif (FORCE_SSSE3)
|
||||||
|
set(HAS_SSSE3 ON CACHE BOOL "SSSE3 SIMD enabled")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3" )
|
||||||
|
message(STATUS "Use SSSE3 SIMD instructions")
|
||||||
|
add_definitions(-DUSE_SSSE3)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /arch:SSSE3" )
|
||||||
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSSE3" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
message(STATUS "Use MSVC SSSE3 SIMD instructions")
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_SSSE3)
|
||||||
|
endif()
|
||||||
|
elseif (FORCE_SSE41)
|
||||||
|
set(HAS_SSSE3 ON CACHE BOOL "SSSE3 SIMD enabled")
|
||||||
|
set(HAS_SSE4_1 ON CACHE BOOL "Architecture has SSE 4.1 SIMD enabled")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1" )
|
||||||
|
message(STATUS "Use SSE 4.1 SIMD instructions")
|
||||||
|
add_definitions(-DUSE_SSSE3)
|
||||||
|
add_definitions(-DUSE_SSE4_1)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
# seems that from MSVC 2015 comiler doesn't support those flags
|
||||||
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /arch:SSE4_1" )
|
||||||
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE4_1" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
message(STATUS "Use SSE 4.1 SIMD instructions")
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_SSSE3)
|
||||||
|
add_definitions(-DUSE_SSE4_1)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else ()
|
||||||
|
if (${ARCHITECTURE} MATCHES "x86_64|x86")
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_SSE2 COMPILE_SSE2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse2.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_SSE2 COMPILE_SSE2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse2.cxx" COMPILE_DEFINITIONS -msse2 -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_SSE2 AND RUN_SSE2 EQUAL 0)
|
||||||
|
set(HAS_SSE2 ON CACHE BOOL "Architecture has SSSE2 SIMD enabled")
|
||||||
|
message(STATUS "Use SSE2 SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2" )
|
||||||
|
add_definitions(-DUSE_SSE2)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /arch:SSE2" )
|
||||||
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE2" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE2" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE2" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_SSE2)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_SSE2 OFF CACHE BOOL "Architecture does not have SSSE2 SIMD enabled")
|
||||||
|
endif()
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_SSSE3 COMPILE_SSSE3 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_ssse3.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_SSSE3 COMPILE_SSSE3 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_ssse3.cxx" COMPILE_DEFINITIONS -mssse3 -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_SSSE3 AND RUN_SSSE3 EQUAL 0)
|
||||||
|
set(HAS_SSSE3 ON CACHE BOOL "Architecture has SSSE3 SIMD enabled")
|
||||||
|
message(STATUS "Use SSSE3 SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3" )
|
||||||
|
add_definitions(-DUSE_SSSE3)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
# seems not present on MSVC 2017
|
||||||
|
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSSE3" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_SSSE3)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_SSSE3 OFF CACHE BOOL "Architecture does not have SSSE3 SIMD enabled")
|
||||||
|
endif()
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_SSE4_1 COMPILE_SSE4_1 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse41.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_SSE4_1 COMPILE_SSE4_1 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse41.cxx" COMPILE_DEFINITIONS -msse4.1 -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_SSE4_1 AND RUN_SSE4_1 EQUAL 0)
|
||||||
|
set(HAS_SSE4_1 ON CACHE BOOL "Architecture has SSE 4.1 SIMD enabled")
|
||||||
|
message(STATUS "Use SSE 4.1 SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1" )
|
||||||
|
add_definitions(-DUSE_SSE4_1)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
# seems not present on MSVC 2017
|
||||||
|
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE4_1" )
|
||||||
|
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE4_1" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_SSE4_1)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_SSE4_1 OFF CACHE BOOL "Architecture does not have SSE 4.1 SIMD enabled")
|
||||||
|
endif()
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_SSE4_2 COMPILE_SSE4_2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse42.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_SSE4_2 COMPILE_SSE4_2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse42.cxx" COMPILE_DEFINITIONS -msse4.2 -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_SSE4_2 AND RUN_SSE4_2 EQUAL 0)
|
||||||
|
set(HAS_SSE4_2 ON CACHE BOOL "Architecture has SSE 4.2 SIMD enabled")
|
||||||
|
message(STATUS "Use SSE 4.2 SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2" )
|
||||||
|
add_definitions(-DUSE_SSE4_2)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
# seems not present on MSVC 2017
|
||||||
|
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE4_2" )
|
||||||
|
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE4_2" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_SSE4_2)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_SSE4_2 OFF CACHE BOOL "Architecture does not have SSE 4.2 SIMD enabled")
|
||||||
|
endif()
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_AVX COMPILE_AVX "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_AVX COMPILE_AVX "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx.cxx" COMPILE_DEFINITIONS -mavx -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_AVX AND RUN_AVX EQUAL 0)
|
||||||
|
set(HAS_AVX ON CACHE BOOL "Architecture has AVX SIMD enabled")
|
||||||
|
message(STATUS "Use AVX SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx" )
|
||||||
|
add_definitions(-DUSE_AVX)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /arch:AVX" )
|
||||||
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:AVX" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_AVX)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_AVX OFF CACHE BOOL "Architecture does not have AVX SIMD enabled")
|
||||||
|
endif()
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_AVX2 COMPILE_AVX2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx2.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_AVX2 COMPILE_AVX2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx2.cxx" COMPILE_DEFINITIONS -mavx2 -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_AVX2 AND RUN_AVX2 EQUAL 0)
|
||||||
|
set(HAS_AVX2 ON CACHE BOOL "Architecture has AVX2 SIMD enabled")
|
||||||
|
message(STATUS "Use AVX2 SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2" )
|
||||||
|
add_definitions(-DUSE_AVX2)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /arch:AVX2" )
|
||||||
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:AVX2" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX2" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX2" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_AVX2)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_AVX2 OFF CACHE BOOL "Architecture does not have AVX2 SIMD enabled")
|
||||||
|
endif()
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_AVX512 COMPILE_AVX512 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx512.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_AVX512 COMPILE_AVX512 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx512.cxx" COMPILE_DEFINITIONS -mavx512f -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_AVX512 AND RUN_AVX512 EQUAL 0)
|
||||||
|
set(HAS_AVX512 ON CACHE BOOL "Architecture has AVX512 SIMD enabled")
|
||||||
|
message(STATUS "Use AVX512 SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f" )
|
||||||
|
add_definitions(-DUSE_AVX512)
|
||||||
|
elseif(C_MSVC)
|
||||||
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /arch:AVX512" )
|
||||||
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:AVX512" )
|
||||||
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX512" )
|
||||||
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX512" )
|
||||||
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||||
|
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||||
|
add_definitions(-DUSE_AVX512)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_AVX512 OFF CACHE BOOL "Architecture does not have AVX512 SIMD enabled")
|
||||||
|
endif()
|
||||||
|
elseif(ARCHITECTURE_ARM)
|
||||||
|
if(C_MSVC)
|
||||||
|
try_run(RUN_NEON COMPILE_NEON "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_arm_neon.cxx" COMPILE_DEFINITIONS /O0)
|
||||||
|
else()
|
||||||
|
try_run(RUN_NEON COMPILE_NEON "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_arm_neon.cxx" COMPILE_DEFINITIONS -mfpu=neon -O0)
|
||||||
|
endif()
|
||||||
|
if(COMPILE_NEON AND RUN_NEON EQUAL 0)
|
||||||
|
set(HAS_NEON ON CACHE BOOL "Architecture has NEON SIMD enabled")
|
||||||
|
message(STATUS "Use NEON SIMD instructions")
|
||||||
|
if(C_GCC OR C_CLANG)
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon" )
|
||||||
|
add_definitions(-DUSE_NEON)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAS_NEON OFF CACHE BOOL "Architecture does not have NEON SIMD enabled")
|
||||||
|
endif()
|
||||||
|
elseif(ARCHITECTURE_ARM64)
|
||||||
|
# Advanced SIMD (aka NEON) is mandatory for AArch64
|
||||||
|
set(HAS_NEON ON CACHE BOOL "Architecture has NEON SIMD enabled")
|
||||||
|
message(STATUS "Use NEON SIMD instructions")
|
||||||
|
add_definitions(-DUSE_NEON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# clear binary test folder
|
||||||
|
FILE(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/tmp)
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Clang or AppleClang (see CMP0025)
|
||||||
|
if(NOT DEFINED C_CLANG AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
set(C_CLANG 1)
|
||||||
|
elseif(NOT DEFINED C_GCC AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
set(C_GCC 1)
|
||||||
|
elseif(NOT DEFINED C_MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
set(C_MSVC 1)
|
||||||
|
if(MSVC_VERSION GREATER 1910 AND MSVC_VERSION LESS 1919)
|
||||||
|
set(VS2017 ON)
|
||||||
|
elseif(MSVC_VERSION GREATER 1899 AND MSVC_VERSION LESS 1910)
|
||||||
|
set(VS2015 ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
|
@ -0,0 +1,88 @@
|
||||||
|
# - Try to find GPSD
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# GPSD_FOUND - system has GPSD
|
||||||
|
# GPSD_INCLUDE_DIRS - the GPSD include directory
|
||||||
|
# GPSD_LIBRARIES - Link these to use GPSD
|
||||||
|
# GPSD_DEFINITIONS - Compiler switches required for using GPSD
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
|
||||||
|
#
|
||||||
|
# Redistribution and use is allowed according to the terms of the New
|
||||||
|
# BSD license.
|
||||||
|
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||||
|
#
|
||||||
|
|
||||||
|
set(GPSD_ROOT_DIR
|
||||||
|
"${GPSD_ROOT_DIR}"
|
||||||
|
CACHE
|
||||||
|
PATH
|
||||||
|
"Directory to search for gpsd")
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(PC_GPSD libgps)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GPSD_LIBRARIES AND GPSD_INCLUDE_DIRS)
|
||||||
|
# in cache already
|
||||||
|
set(GPSD_FOUND TRUE)
|
||||||
|
else (GPSD_LIBRARIES AND GPSD_INCLUDE_DIRS)
|
||||||
|
find_path(GPSD_INCLUDE_DIRS
|
||||||
|
NAMES
|
||||||
|
gps.h
|
||||||
|
PATHS
|
||||||
|
/usr/include
|
||||||
|
/usr/local/include
|
||||||
|
/opt/local/include
|
||||||
|
/sw/include
|
||||||
|
/usr/include/gps
|
||||||
|
/usr/local/include/gps
|
||||||
|
/opt/local/include/gps
|
||||||
|
/sw/include/gps
|
||||||
|
HINTS
|
||||||
|
${PC_GPSD_INCLUDEDIR}
|
||||||
|
${GPSD_ROOT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
# debian uses version suffixes
|
||||||
|
# add suffix evey new release
|
||||||
|
find_library(GPSD_LIBRARIES
|
||||||
|
NAMES
|
||||||
|
gps
|
||||||
|
PATHS
|
||||||
|
/usr/lib64
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
HINTS
|
||||||
|
${PC_GPSD_LIBDIR}
|
||||||
|
${GPSD_ROOT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (GPSD_INCLUDE_DIRS AND GPSD_LIBRARIES)
|
||||||
|
set(GPSD_FOUND TRUE)
|
||||||
|
endif (GPSD_INCLUDE_DIRS AND GPSD_LIBRARIES)
|
||||||
|
|
||||||
|
if (GPSD_FOUND)
|
||||||
|
if (NOT GPSD_FIND_QUIETLY)
|
||||||
|
message(STATUS "Found GPSD: ${GPSD_LIBRARIES}")
|
||||||
|
endif (NOT GPSD_FIND_QUIETLY)
|
||||||
|
else (GPSD_FOUND)
|
||||||
|
if (GPSD_FIND_REQUIRED)
|
||||||
|
message(FATAL_ERROR "Could not find GPSD")
|
||||||
|
endif (GPSD_FIND_REQUIRED)
|
||||||
|
endif (GPSD_FOUND)
|
||||||
|
|
||||||
|
# show the GPSD_INCLUDE_DIRS and GPSD_LIBRARIES variables only in the advanced view
|
||||||
|
mark_as_advanced(GPSD_INCLUDE_DIRS GPSD_LIBRARIES)
|
||||||
|
|
||||||
|
endif (GPSD_LIBRARIES AND GPSD_INCLUDE_DIRS)
|
||||||
|
|
||||||
|
# maybe on CYGWIN gpsd works
|
||||||
|
if (WIN32)
|
||||||
|
set(GPSD_FOUND FALSE)
|
||||||
|
set(GPSD_LIBRARIES "")
|
||||||
|
set(GPSD_INCLUDE_DIRS "")
|
||||||
|
endif (WIN32)
|
|
@ -0,0 +1,64 @@
|
||||||
|
# - Try to find Portaudio
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# PORTAUDIO_FOUND - system has Portaudio
|
||||||
|
# PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory
|
||||||
|
# PORTAUDIO_LIBRARIES - Link these to use Portaudio
|
||||||
|
|
||||||
|
set(PORTAUDIO_ROOT_DIR
|
||||||
|
"${PORTAUDIO_ROOT_DIR}"
|
||||||
|
CACHE
|
||||||
|
PATH
|
||||||
|
"Directory to search for portaudio")
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(PC_PORTAUDIO portaudio-2.0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(PORTAUDIO_INCLUDE_DIRS
|
||||||
|
NAMES
|
||||||
|
portaudio.h
|
||||||
|
PATHS
|
||||||
|
/usr/local/include
|
||||||
|
/usr/include
|
||||||
|
/opt/local/include
|
||||||
|
HINTS
|
||||||
|
${PC_PORTAUDIO_INCLUDEDIR}
|
||||||
|
${PORTAUDIO_ROOT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(PORTAUDIO_LIBRARIES
|
||||||
|
NAMES
|
||||||
|
portaudio
|
||||||
|
PATHS
|
||||||
|
/usr/local/lib
|
||||||
|
/usr/lib
|
||||||
|
/usr/lib64
|
||||||
|
/opt/local/lib
|
||||||
|
HINTS
|
||||||
|
${PC_PORTAUDIO_LIBDIR}
|
||||||
|
${PORTAUDIO_ROOT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES)
|
||||||
|
|
||||||
|
# Found PORTAUDIO, but it may be version 18 which is not acceptable.
|
||||||
|
if(EXISTS ${PORTAUDIO_INCLUDE_DIRS}/portaudio.h)
|
||||||
|
include(CheckCXXSourceCompiles)
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES_SAVED ${CMAKE_REQUIRED_INCLUDES})
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES ${PORTAUDIO_INCLUDE_DIRS})
|
||||||
|
CHECK_CXX_SOURCE_COMPILES(
|
||||||
|
"#include <portaudio.h>\nPaDeviceIndex pa_find_device_by_name(const char *name); int main () {return 0;}"
|
||||||
|
PORTAUDIO2_FOUND)
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVED})
|
||||||
|
unset(CMAKE_REQUIRED_INCLUDES_SAVED)
|
||||||
|
if(PORTAUDIO2_FOUND)
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PORTAUDIO DEFAULT_MSG PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES)
|
||||||
|
else(PORTAUDIO2_FOUND)
|
||||||
|
message(STATUS
|
||||||
|
" portaudio.h not compatible (requires API 2.0)")
|
||||||
|
set(PORTAUDIO_FOUND FALSE)
|
||||||
|
endif(PORTAUDIO2_FOUND)
|
||||||
|
endif()
|
|
@ -0,0 +1,67 @@
|
||||||
|
# - Try to find Hamlib
|
||||||
|
#
|
||||||
|
# HAMLIB_FOUND - system has Hamlib
|
||||||
|
# HAMLIB_LIBRARIES - location of the library for hamlib
|
||||||
|
# HAMLIB_INCLUDE_DIRS - location of the include files for hamlib
|
||||||
|
#
|
||||||
|
# Requires these CMake modules:
|
||||||
|
# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
|
||||||
|
#
|
||||||
|
# Original Author:
|
||||||
|
# 2019 Davide Gerhard <rainbow@irh.it>
|
||||||
|
|
||||||
|
set(HAMLIB_ROOT_DIR
|
||||||
|
"${HAMLIB_ROOT_DIR}"
|
||||||
|
CACHE
|
||||||
|
PATH
|
||||||
|
"Directory to search for hamlib")
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(PC_HAMLIB hamlib)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(HAMLIB_INCLUDE_DIR
|
||||||
|
NAMES hamlib/rig.h
|
||||||
|
PATHS
|
||||||
|
/usr/include
|
||||||
|
/usr/local/include
|
||||||
|
/opt/local/include
|
||||||
|
HINTS
|
||||||
|
${PC_HAMLIB_INCLUDEDIR}
|
||||||
|
${HAMLIB_ROOT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(HAMLIB_LIBRARY
|
||||||
|
NAMES hamlib
|
||||||
|
PATHS
|
||||||
|
/usr/lib64/hamlib
|
||||||
|
/usr/lib/hamlib
|
||||||
|
/usr/lib64
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib64/hamlib
|
||||||
|
/usr/local/lib/hamlib
|
||||||
|
/usr/local/lib64
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/opt/local/lib/hamlib
|
||||||
|
HINTS
|
||||||
|
${PC_HAMLIB_LIBDIR}
|
||||||
|
${HAMLIB_ROOT_DIR}
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(HAMLIB
|
||||||
|
DEFAULT_MSG
|
||||||
|
HAMLIB_LIBRARY
|
||||||
|
HAMLIB_INCLUDE_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
if(HAMLIB_FOUND)
|
||||||
|
list(APPEND HAMLIB_LIBRARIES ${HAMLIB_LIBRARY})
|
||||||
|
list(APPEND HAMLIB_INCLUDE_DIRS ${HAMLIB_INCLUDE_DIR})
|
||||||
|
mark_as_advanced(HAMLIB_ROOT_DIR)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(HAMLIB_INCLUDE_DIR HAMLIB_LIBRARY)
|
|
@ -0,0 +1,76 @@
|
||||||
|
# - try to find the udev library
|
||||||
|
#
|
||||||
|
# Cache Variables: (probably not for direct use in your scripts)
|
||||||
|
# UDEV_INCLUDE_DIR
|
||||||
|
# UDEV_SOURCE_DIR
|
||||||
|
# UDEV_LIBRARY
|
||||||
|
#
|
||||||
|
# Non-cache variables you might use in your CMakeLists.txt:
|
||||||
|
# UDEV_FOUND
|
||||||
|
# UDEV_INCLUDE_DIRS
|
||||||
|
# UDEV_LIBRARIES
|
||||||
|
#
|
||||||
|
# Requires these CMake modules:
|
||||||
|
# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
|
||||||
|
#
|
||||||
|
# Original Author:
|
||||||
|
# 2014 Kevin M. Godby <kevin@godby.org>
|
||||||
|
#
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
set(UDEV_ROOT_DIR
|
||||||
|
"${UDEV_ROOT_DIR}"
|
||||||
|
CACHE
|
||||||
|
PATH
|
||||||
|
"Directory to search for udev")
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(PC_LIBUDEV libudev)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_library(UDEV_LIBRARY
|
||||||
|
NAMES
|
||||||
|
udev
|
||||||
|
PATHS
|
||||||
|
${PC_LIBUDEV_LIBRARY_DIRS}
|
||||||
|
${PC_LIBUDEV_LIBDIR}
|
||||||
|
HINTS
|
||||||
|
"${UDEV_ROOT_DIR}"
|
||||||
|
PATH_SUFFIXES
|
||||||
|
lib
|
||||||
|
)
|
||||||
|
|
||||||
|
get_filename_component(_libdir "${UDEV_LIBRARY}" PATH)
|
||||||
|
|
||||||
|
find_path(UDEV_INCLUDE_DIR
|
||||||
|
NAMES
|
||||||
|
libudev.h
|
||||||
|
PATHS
|
||||||
|
${PC_LIBUDEV_INCLUDE_DIRS}
|
||||||
|
${PC_LIBUDEV_INCLUDEDIR}
|
||||||
|
HINTS
|
||||||
|
"${_libdir}"
|
||||||
|
"${_libdir}/.."
|
||||||
|
"${UDEV_ROOT_DIR}"
|
||||||
|
PATH_SUFFIXES
|
||||||
|
include
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(UDEV
|
||||||
|
DEFAULT_MSG
|
||||||
|
UDEV_LIBRARY
|
||||||
|
UDEV_INCLUDE_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
if(UDEV_FOUND)
|
||||||
|
list(APPEND UDEV_LIBRARIES ${UDEV_LIBRARY})
|
||||||
|
list(APPEND UDEV_INCLUDE_DIRS ${UDEV_INCLUDE_DIR})
|
||||||
|
mark_as_advanced(UDEV_ROOT_DIR)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(UDEV_INCLUDE_DIR
|
||||||
|
UDEV_LIBRARY)
|
|
@ -0,0 +1,48 @@
|
||||||
|
# generate conf per platform
|
||||||
|
file(READ "${CUSTOM_CONF_DIR}/generic.conf" file_content)
|
||||||
|
|
||||||
|
if(LINUX)
|
||||||
|
string(REGEX REPLACE "\n%W%[^\n]*" "" file_content "${file_content}")
|
||||||
|
string(REGEX REPLACE "\n%M%[^\n]*" "" file_content "${file_content}")
|
||||||
|
string(REGEX REPLACE "\n%L%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||||
|
elseif(WIN32 OR CYGWIN)
|
||||||
|
string(REGEX REPLACE "\n%M%[^\n]*" "" file_content "${file_content}")
|
||||||
|
string(REGEX REPLACE "\n%L%[^\n]*" "" file_content "${file_content}")
|
||||||
|
string(REGEX REPLACE "\n%W%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||||
|
else() # macOS FreeBSD OpenBSD
|
||||||
|
string(REGEX REPLACE "\n%W%[^\n]*" "" file_content "${file_content}")
|
||||||
|
string(REGEX REPLACE "\n%L%[^\n]*" "" file_content "${file_content}")
|
||||||
|
string(REGEX REPLACE "\n%M%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# remove remark
|
||||||
|
string(REGEX REPLACE "\n%R%[^\n]*" "" file_content "${file_content}")
|
||||||
|
|
||||||
|
# clear common lines
|
||||||
|
string(REGEX REPLACE "\n%C%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||||
|
string(REGEX REPLACE "^%C%([^\n]*)" "\\1" file_content "${file_content}")
|
||||||
|
|
||||||
|
file(WRITE "${CMAKE_BINARY_DIR}/direwolf.conf" "${file_content}")
|
||||||
|
|
||||||
|
# install udev rules for CM108
|
||||||
|
if(LINUX)
|
||||||
|
install(FILES "${CUSTOM_CONF_DIR}/99-direwolf-cmedia.rules" DESTINATION /etc/udev/rules.d/)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
install(FILES "${CMAKE_BINARY_DIR}/direwolf.conf" DESTINATION ${INSTALL_CONF_DIR})
|
||||||
|
install(FILES "${CUSTOM_CONF_DIR}/sdr.conf" DESTINATION ${INSTALL_CONF_DIR})
|
||||||
|
|
||||||
|
# Put sample configuration & startup files in home directory.
|
||||||
|
# This step would be done as ordinary user.
|
||||||
|
# Some people like to put the direwolf config file in /etc/ax25.
|
||||||
|
# Note that all of these are also in $(DESTDIR)/share/doc/direwolf/examples/.
|
||||||
|
if(NOT (WIN32 OR CYGWIN))
|
||||||
|
add_custom_target(install-conf
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
-DCUSTOM_BINARY_DIR="${CMAKE_BINARY_DIR}"
|
||||||
|
-DCUSTOM_CONF_DIR="${CUSTOM_CONF_DIR}"
|
||||||
|
-DCUSTOM_SCRIPTS_DIR="${CUSTOM_SCRIPTS_DIR}"
|
||||||
|
-DCUSTOM_TELEMETRY_DIR="${CUSTOM_TELEMETRY_DIR}"
|
||||||
|
-P "${CMAKE_SOURCE_DIR}/conf/install_conf.cmake"
|
||||||
|
)
|
||||||
|
endif()
|
|
@ -0,0 +1,573 @@
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# Configuration file for Dire Wolf #
|
||||||
|
%C%# #
|
||||||
|
%L%# Linux version #
|
||||||
|
%W%# Windows version #
|
||||||
|
%M%# Macintosh version #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%R%
|
||||||
|
%R%
|
||||||
|
%R% The sample config file was getting pretty messy
|
||||||
|
%R% with the Windows and Linux differences.
|
||||||
|
%R% It would be a maintenance burden to keep most of
|
||||||
|
%R% two different versions in sync.
|
||||||
|
%R% This common source is now used to generate the
|
||||||
|
%R% two different variations while having only a single
|
||||||
|
%R% copy of the common parts.
|
||||||
|
%R%
|
||||||
|
%R% The first column contains one of the following:
|
||||||
|
%R%
|
||||||
|
%R% R remark which is discarded.
|
||||||
|
%R% C common to both versions.
|
||||||
|
%R% W Windows version only.
|
||||||
|
%R% L Linux version only.
|
||||||
|
%R% M Macintosh version and possibly others (portaudio used).
|
||||||
|
%R%
|
||||||
|
%C%#
|
||||||
|
%C%# Consult the User Guide for more details on configuration options.
|
||||||
|
%C%#
|
||||||
|
%C%#
|
||||||
|
%C%# These are the most likely settings you might change:
|
||||||
|
%C%#
|
||||||
|
%C%# (1) MYCALL - call sign and SSID for your station.
|
||||||
|
%C%#
|
||||||
|
%C%# Look for lines starting with MYCALL and
|
||||||
|
%C%# change NOCALL to your own.
|
||||||
|
%C%#
|
||||||
|
%C%# (2) PBEACON - enable position beaconing.
|
||||||
|
%C%#
|
||||||
|
%C%# Look for lines starting with PBEACON and
|
||||||
|
%C%# modify for your call, location, etc.
|
||||||
|
%C%#
|
||||||
|
%C%# (3) DIGIPEATER - configure digipeating rules.
|
||||||
|
%C%#
|
||||||
|
%C%# Look for lines starting with DIGIPEATER.
|
||||||
|
%C%# Most people will probably use the given example.
|
||||||
|
%C%# Just remove the "#" from the start of the line
|
||||||
|
%C%# to enable it.
|
||||||
|
%C%#
|
||||||
|
%C%# (4) IGSERVER, IGLOGIN - IGate server and login
|
||||||
|
%C%#
|
||||||
|
%C%# Configure an IGate client to relay messages between
|
||||||
|
%C%# radio and internet servers.
|
||||||
|
%C%#
|
||||||
|
%C%#
|
||||||
|
%C%# The default location is "direwolf.conf" in the current working directory.
|
||||||
|
%L%# On Linux, the user's home directory will also be searched.
|
||||||
|
%C%# An alternate configuration file location can be specified with the "-c" command line option.
|
||||||
|
%C%#
|
||||||
|
%C%# As you probably guessed by now, # indicates a comment line.
|
||||||
|
%C%#
|
||||||
|
%C%# Remove the # at the beginning of a line if you want to use a sample
|
||||||
|
%C%# configuration that is currently commented out.
|
||||||
|
%C%#
|
||||||
|
%C%# Commands are a keyword followed by parameters.
|
||||||
|
%C%#
|
||||||
|
%C%# Command key words are case insensitive. i.e. upper and lower case are equivalent.
|
||||||
|
%C%#
|
||||||
|
%C%# Command parameters are generally case sensitive. i.e. upper and lower case are different.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# FIRST AUDIO DEVICE PROPERTIES #
|
||||||
|
%C%# (Channel 0 + 1 if in stereo) #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Many people will simply use the default sound device.
|
||||||
|
%C%# Some might want to use an alternative device by chosing it here.
|
||||||
|
%C%#
|
||||||
|
%W%# When the Windows version starts up, it displays something like
|
||||||
|
%W%# this with the available sound devices and capabilities:
|
||||||
|
%W%#
|
||||||
|
%W%# Available audio input devices for receive (*=selected):
|
||||||
|
%W%# * 0: Microphone (C-Media USB Headpho (channel 2)
|
||||||
|
%W%# 1: Microphone (Bluetooth SCO Audio
|
||||||
|
%W%# 2: Microphone (Bluetooth AV Audio)
|
||||||
|
%W%# * 3: Microphone (Realtek High Defini (channels 0 & 1)
|
||||||
|
%W%# Available audio output devices for transmit (*=selected):
|
||||||
|
%W%# * 0: Speakers (C-Media USB Headphone (channel 2)
|
||||||
|
%W%# 1: Speakers (Bluetooth SCO Audio)
|
||||||
|
%W%# 2: Realtek Digital Output(Optical)
|
||||||
|
%W%# 3: Speakers (Bluetooth AV Audio)
|
||||||
|
%W%# * 4: Speakers (Realtek High Definiti (channels 0 & 1)
|
||||||
|
%W%# 5: Realtek Digital Output (Realtek
|
||||||
|
%W%#
|
||||||
|
%W%# Example: To use the microphone and speaker connections on the
|
||||||
|
%W%# system board, either of these forms can be used:
|
||||||
|
%W%
|
||||||
|
%W%#ADEVICE High
|
||||||
|
%W%#ADEVICE 3 4
|
||||||
|
%W%
|
||||||
|
%W%
|
||||||
|
%W%# Example: To use the USB Audio, use a command like this with
|
||||||
|
%W%# the input and output device numbers. (Remove the # comment character.)
|
||||||
|
%W%#ADEVICE USB
|
||||||
|
%W%
|
||||||
|
%W%# The position in the list can change when devices (e.g. USB) are added and removed.
|
||||||
|
%W%# You can also specify devices by using part of the name.
|
||||||
|
%W%# Here is an example of specifying the USB Audio device.
|
||||||
|
%W%# This is case-sensitive. Upper and lower case are not treated the same.
|
||||||
|
%W%
|
||||||
|
%W%#ADEVICE USB
|
||||||
|
%W%
|
||||||
|
%W%
|
||||||
|
%L%# Linux ALSA is complicated. See User Guide for discussion.
|
||||||
|
%L%# To use something other than the default, generally use plughw
|
||||||
|
%L%# and a card number reported by "arecord -l" command. Example:
|
||||||
|
%L%
|
||||||
|
%L%# ADEVICE plughw:1,0
|
||||||
|
%L%
|
||||||
|
%L%# Starting with version 1.0, you can also use "-" or "stdin" to
|
||||||
|
%L%# pipe stdout from some other application such as a software defined
|
||||||
|
%L%# radio. You can also specify "UDP:" and an optional port for input.
|
||||||
|
%L%# Something different must be specified for output.
|
||||||
|
%L%
|
||||||
|
%M%# Macintosh Operating System uses portaudio driver for audio
|
||||||
|
%M%# input/output. Default device selection not available. User/OP
|
||||||
|
%M%# must configure the sound input/output option. Note that
|
||||||
|
%M%# the device names can contain spaces. In this case, the names
|
||||||
|
%M%# must be enclosed by quotes.
|
||||||
|
%M%#
|
||||||
|
%M%# Examples:
|
||||||
|
%M%#
|
||||||
|
%M%# ADEVICE "USB Audio Codec:6" "USB Audio Codec:5"
|
||||||
|
%M%#
|
||||||
|
%M%#
|
||||||
|
%W%# ADEVICE - 0
|
||||||
|
%W%# ADEVICE UDP:7355 0
|
||||||
|
%L%# ADEVICE - plughw:1,0
|
||||||
|
%L%# ADEVICE UDP:7355 default
|
||||||
|
%M%# ADEVICE UDP:7355 default
|
||||||
|
%M%#
|
||||||
|
%L%
|
||||||
|
%L%
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Number of audio channels for this souncard: 1 or 2.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%ACHANNELS 1
|
||||||
|
%C%#ACHANNELS 2
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# SECOND AUDIO DEVICE PROPERTIES #
|
||||||
|
%C%# (Channel 2 + 3 if in stereo) #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%#ADEVICE1 ...
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# THIRD AUDIO DEVICE PROPERTIES #
|
||||||
|
%C%# (Channel 4 + 5 if in stereo) #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%#ADEVICE2 ...
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# CHANNEL 0 PROPERTIES #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%CHANNEL 0
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# The following MYCALL, MODEM, PTT, etc. configuration items
|
||||||
|
%C%# apply to the most recent CHANNEL.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Station identifier for this channel.
|
||||||
|
%C%# Multiple channels can have the same or different names.
|
||||||
|
%C%#
|
||||||
|
%C%# It can be up to 6 letters and digits with an optional ssid.
|
||||||
|
%C%# The APRS specification requires that it be upper case.
|
||||||
|
%C%#
|
||||||
|
%C%# Example (don't use this unless you are me): MYCALL WB2OSZ-5
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%MYCALL N0CALL
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Pick a suitable modem speed based on your situation.
|
||||||
|
%C%# 1200 Most common for VHF/UHF. Default if not specified.
|
||||||
|
%C%# 300 Low speed for HF SSB.
|
||||||
|
%C%# 9600 High speed - Can't use Microphone and Speaker connections.
|
||||||
|
%C%#
|
||||||
|
%C%# In the simplest form, just specify the speed.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%MODEM 1200
|
||||||
|
%C%#MODEM 300
|
||||||
|
%C%#MODEM 9600
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# These are the defaults should be fine for most cases. In special situations,
|
||||||
|
%C%# you might want to specify different AFSK tones or the baseband mode which does
|
||||||
|
%C%# not use AFSK.
|
||||||
|
%C%#
|
||||||
|
%C%#MODEM 1200 1200:2200
|
||||||
|
%C%#MODEM 300 1600:1800
|
||||||
|
%C%#MODEM 9600 0:0
|
||||||
|
%C%#
|
||||||
|
%C%#
|
||||||
|
%C%# On HF SSB, you might want to use multiple demodulators on slightly different
|
||||||
|
%C%# frequencies to compensate for stations off frequency. Here we have 7 different
|
||||||
|
%C%# demodulators at 30 Hz intervals. This takes a lot of CPU power so you will
|
||||||
|
%C%# probably need to reduce the audio sampling rate with the /n option.
|
||||||
|
%C%
|
||||||
|
%C%#MODEM 300 1600:1800 7@30 /4
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Uncomment line below to enable the DTMF decoder for this channel.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#DTMF
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# If not using a VOX circuit, the transmitter Push to Talk (PTT)
|
||||||
|
%C%# control is usually wired to a serial port with a suitable interface circuit.
|
||||||
|
%C%# DON'T connect it directly!
|
||||||
|
%C%#
|
||||||
|
%C%# For the PTT command, specify the device and either RTS or DTR.
|
||||||
|
%C%# RTS or DTR may be preceded by "-" to invert the signal.
|
||||||
|
%C%# Both can be used for interfaces that want them driven with opposite polarity.
|
||||||
|
%C%#
|
||||||
|
%L%# COM1 can be used instead of /dev/ttyS0, COM2 for /dev/ttyS1, and so on.
|
||||||
|
%L%#
|
||||||
|
%C%
|
||||||
|
%C%#PTT COM1 RTS
|
||||||
|
%C%#PTT COM1 RTS -DTR
|
||||||
|
%L%#PTT /dev/ttyUSB0 RTS
|
||||||
|
%C%
|
||||||
|
%L%#
|
||||||
|
%L%# On Linux, you can also use general purpose I/O pins if
|
||||||
|
%L%# your system is configured for user access to them.
|
||||||
|
%L%# This would apply mostly to microprocessor boards, not a regular PC.
|
||||||
|
%L%# See separate Raspberry Pi document for more details.
|
||||||
|
%L%# The number may be preceded by "-" to invert the signal.
|
||||||
|
%L%#
|
||||||
|
%L%
|
||||||
|
%L%#PTT GPIO 25
|
||||||
|
%L%
|
||||||
|
%C%# The Data Carrier Detect (DCD) signal can be sent to the same places
|
||||||
|
%C%# as the PTT signal. This could be used to light up an LED like a normal TNC.
|
||||||
|
%C%
|
||||||
|
%C%#DCD COM1 -DTR
|
||||||
|
%L%#DCD GPIO 24
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# CHANNEL 1 PROPERTIES #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%#CHANNEL 1
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Specify MYCALL, MODEM, PTT, etc. configuration items for
|
||||||
|
%C%# CHANNEL 1. Repeat for any other channels.
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# TEXT TO SPEECH COMMAND FILE #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%W%#SPEECH dwespeak.bat
|
||||||
|
%L%#SPEECH dwespeak.sh
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# VIRTUAL TNC SERVER PROPERTIES #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Dire Wolf acts as a virtual TNC and can communicate with
|
||||||
|
%C%# client applications by different protocols:
|
||||||
|
%C%#
|
||||||
|
%C%# - the "AGW TCPIP Socket Interface" - default port 8000
|
||||||
|
%C%# - KISS protocol over TCP socket - default port 8001
|
||||||
|
%W%# - KISS TNC via serial port
|
||||||
|
%L%# - KISS TNC via pseudo terminal (-p command line option)
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%AGWPORT 8000
|
||||||
|
%C%KISSPORT 8001
|
||||||
|
%C%
|
||||||
|
%W%#
|
||||||
|
%W%# Some applications are designed to operate with only a physical
|
||||||
|
%W%# TNC attached to a serial port. For these, we provide a virtual serial
|
||||||
|
%W%# port that appears to be connected to a TNC.
|
||||||
|
%W%#
|
||||||
|
%W%# Take a look at the User Guide for instructions to set up
|
||||||
|
%W%# two virtual serial ports named COM3 and COM4 connected by
|
||||||
|
%W%# a null modem.
|
||||||
|
%W%#
|
||||||
|
%W%# Using the configuration described, Dire Wolf will connect to
|
||||||
|
%W%# COM3 and the client application will use COM4.
|
||||||
|
%W%#
|
||||||
|
%W%# Uncomment following line to use this feature.
|
||||||
|
%W%
|
||||||
|
%W%#NULLMODEM COM3
|
||||||
|
%W%
|
||||||
|
%W%
|
||||||
|
%C%#
|
||||||
|
%C%# It is sometimes possible to recover frames with a bad FCS.
|
||||||
|
%C%# This applies to all channels.
|
||||||
|
%C%#
|
||||||
|
%C%# 0 [NONE] - Don't try to repair.
|
||||||
|
%C%# 1 [SINGLE] - Attempt to fix single bit error. (default)
|
||||||
|
%C%# 2 [DOUBLE] - Also attempt to fix two adjacent bits.
|
||||||
|
%C%# ... see User Guide for more values and in-depth discussion.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#FIX_BITS 0
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# BEACONING PROPERTIES #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Beaconing is configured with these two commands:
|
||||||
|
%C%#
|
||||||
|
%C%# PBEACON - for a position report (usually yourself)
|
||||||
|
%C%# OBEACON - for an object report (usually some other entity)
|
||||||
|
%C%#
|
||||||
|
%C%# Each has a series of keywords and values for options.
|
||||||
|
%C%# See User Guide for details.
|
||||||
|
%C%#
|
||||||
|
%C%# Example:
|
||||||
|
%C%#
|
||||||
|
%C%# This results in a broadcast once every 10 minutes.
|
||||||
|
%C%# Every half hour, it can travel via two digipeater hops.
|
||||||
|
%C%# The others are kept local.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#PBEACON delay=1 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA" via=WIDE1-1,WIDE2-1
|
||||||
|
%C%#PBEACON delay=11 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA"
|
||||||
|
%C%#PBEACON delay=21 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA"
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%# With UTM coordinates instead of latitude and longitude.
|
||||||
|
%C%
|
||||||
|
%C%#PBEACON delay=1 every=10 overlay=S symbol="digi" zone=19T easting=307477 northing=4720178
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# When the destination field is set to "SPEECH" the information part is
|
||||||
|
%C%# converted to speech rather than transmitted as a data frame.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#CBEACON dest="SPEECH" info="Club meeting tonight at 7 pm."
|
||||||
|
%C%
|
||||||
|
%C%# Similar for Morse code. If SSID is specified, it is multiplied
|
||||||
|
%C%# by 2 to get speed in words per minute (WPM).
|
||||||
|
%C%
|
||||||
|
%C%#CBEACON dest="MORSE-6" info="de MYCALL"
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Modify for your particular situation before removing
|
||||||
|
%C%# the # comment character from the beginning of appropriate lines above.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# DIGIPEATER PROPERTIES #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# For most common situations, use something like this by removing
|
||||||
|
%C%# the "#" from the beginning of the line below.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE
|
||||||
|
%C%
|
||||||
|
%C%# See User Guide for more explanation of what this means and how
|
||||||
|
%C%# it can be customized for your particular needs.
|
||||||
|
%C%
|
||||||
|
%C%# Filtering can be used to limit was is digipeated.
|
||||||
|
%C%# For example, only weather weather reports, received on channel 0,
|
||||||
|
%C%# will be retransmitted on channel 1.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#FILTER 0 1 t/wn
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# INTERNET GATEWAY #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%# First you need to specify the name of a Tier 2 server.
|
||||||
|
%C%# The current preferred way is to use one of these regional rotate addresses:
|
||||||
|
%C%
|
||||||
|
%C%# noam.aprs2.net - for North America
|
||||||
|
%C%# soam.aprs2.net - for South America
|
||||||
|
%C%# euro.aprs2.net - for Europe and Africa
|
||||||
|
%C%# asia.aprs2.net - for Asia
|
||||||
|
%C%# aunz.aprs2.net - for Oceania
|
||||||
|
%C%
|
||||||
|
%C%#IGSERVER noam.aprs2.net
|
||||||
|
%C%
|
||||||
|
%C%# You also need to specify your login name and passcode.
|
||||||
|
%C%# Contact the author if you can't figure out how to generate the passcode.
|
||||||
|
%C%
|
||||||
|
%C%#IGLOGIN WB2OSZ-5 123456
|
||||||
|
%C%
|
||||||
|
%C%# That's all you need for a receive only IGate which relays
|
||||||
|
%C%# messages from the local radio channel to the global servers.
|
||||||
|
%C%
|
||||||
|
%C%# Some might want to send an IGate client position directly to a server
|
||||||
|
%C%# without sending it over the air and relying on someone else to
|
||||||
|
%C%# forward it to an IGate server. This is done by using sendto=IG rather
|
||||||
|
%C%# than a radio channel number. Overlay R for receive only, T for two way.
|
||||||
|
%C%
|
||||||
|
%C%#PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=R lat=42^37.14N long=071^20.83W
|
||||||
|
%C%#PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=T lat=42^37.14N long=071^20.83W
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%# To relay messages from the Internet to radio, you need to add
|
||||||
|
%C%# one more option with the transmit channel number and a VIA path.
|
||||||
|
%C%
|
||||||
|
%C%#IGTXVIA 0 WIDE1-1
|
||||||
|
%C%
|
||||||
|
%C%# You might want to apply a filter for what packets will be obtained from the server.
|
||||||
|
%C%# Read about filters here: http://www.aprs-is.net/javaprsfilter.aspx
|
||||||
|
%C%# Example, positions and objects within 50 km of my location:
|
||||||
|
%C%
|
||||||
|
%C%#IGFILTER m/50
|
||||||
|
%C%
|
||||||
|
%C%# That is known as a server-side filter. It is processed by the IGate server.
|
||||||
|
%C%# You can also apply local filtering to limit what will be transmitted on the
|
||||||
|
%C%# RF side. For example, transmit only "messages" on channel 0 and weather
|
||||||
|
%C%# reports on channel 1.
|
||||||
|
%C%
|
||||||
|
%C%#FILTER IG 0 t/m
|
||||||
|
%C%#FILTER IG 1 t/wn
|
||||||
|
%C%
|
||||||
|
%C%# Finally, we don't want to flood the radio channel.
|
||||||
|
%C%# The IGate function will limit the number of packets transmitted
|
||||||
|
%C%# during 1 minute and 5 minute intervals. If a limit would
|
||||||
|
%C%# be exceeded, the packet is dropped and message is displayed in red.
|
||||||
|
%C%
|
||||||
|
%C%IGTXLIMIT 6 10
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%#############################################################
|
||||||
|
%C%# #
|
||||||
|
%C%# APRStt GATEWAY #
|
||||||
|
%C%# #
|
||||||
|
%C%#############################################################
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Dire Wolf can receive DTMF (commonly known as Touch Tone)
|
||||||
|
%C%# messages and convert them to packet objects.
|
||||||
|
%C%#
|
||||||
|
%C%# See separate "APRStt-Implementation-Notes" document for details.
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%#
|
||||||
|
%C%# Sample gateway configuration based on:
|
||||||
|
%C%#
|
||||||
|
%C%# http://www.aprs.org/aprstt/aprstt-coding24.txt
|
||||||
|
%C%# http://www.aprs.org/aprs-jamboree-2013.html
|
||||||
|
%C%#
|
||||||
|
%C%
|
||||||
|
%C%# Define specific points.
|
||||||
|
%C%
|
||||||
|
%C%TTPOINT B01 37^55.37N 81^7.86W
|
||||||
|
%C%TTPOINT B7495088 42.605237 -71.34456
|
||||||
|
%C%TTPOINT B934 42.605237 -71.34456
|
||||||
|
%C%
|
||||||
|
%C%TTPOINT B901 42.661279 -71.364452
|
||||||
|
%C%TTPOINT B902 42.660411 -71.364419
|
||||||
|
%C%TTPOINT B903 42.659046 -71.364452
|
||||||
|
%C%TTPOINT B904 42.657578 -71.364602
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%# For location at given bearing and distance from starting point.
|
||||||
|
%C%
|
||||||
|
%C%TTVECTOR B5bbbddd 37^55.37N 81^7.86W 0.01 mi
|
||||||
|
%C%
|
||||||
|
%C%# For location specified by x, y coordinates.
|
||||||
|
%C%
|
||||||
|
%C%TTGRID Byyyxxx 37^50.00N 81^00.00W 37^59.99N 81^09.99W
|
||||||
|
%C%
|
||||||
|
%C%# UTM location for Lowell-Dracut-Tyngsborough State Forest.
|
||||||
|
%C%
|
||||||
|
%C%TTUTM B6xxxyyy 19T 10 300000 4720000
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%# Location for the corral.
|
||||||
|
%C%
|
||||||
|
%C%TTCORRAL 37^55.50N 81^7.00W 0^0.02N
|
||||||
|
%C%
|
||||||
|
%C%# Compact messages - Fixed locations xx and object yyy where
|
||||||
|
%C%# Object numbers 100 - 199 = bicycle
|
||||||
|
%C%# Object numbers 200 - 299 = fire truck
|
||||||
|
%C%# Others = dog
|
||||||
|
%C%
|
||||||
|
%C%TTMACRO xx1yy B9xx*AB166*AA2B4C5B3B0A1yy
|
||||||
|
%C%TTMACRO xx2yy B9xx*AB170*AA3C4C7C3B0A2yy
|
||||||
|
%C%TTMACRO xxyyy B9xx*AB180*AA3A6C4A0Ayyy
|
||||||
|
%C%
|
||||||
|
%C%TTMACRO z Cz
|
||||||
|
%C%
|
||||||
|
%C%# Receive on channel 0, Transmit object reports on channel 1 with optional via path.
|
||||||
|
%C%# You probably want to put in a transmit delay on the APRStt channel so it
|
||||||
|
%C%# it doesn't start sending a response before the user releases PTT.
|
||||||
|
%C%# This is in 10 ms units so 100 means 1000 ms = 1 second.
|
||||||
|
%C%
|
||||||
|
%C%#TTOBJ 0 1 WIDE1-1
|
||||||
|
%C%#CHANNEL 0
|
||||||
|
%C%#DWAIT 100
|
||||||
|
%C%
|
||||||
|
%C%# Advertise gateway position with beacon.
|
||||||
|
%C%
|
||||||
|
%C%# OBEACON DELAY=0:15 EVERY=10:00 VIA=WIDE1-1 OBJNAME=WB2OSZ-tt SYMBOL=APRStt LAT=42^37.14N LONG=71^20.83W COMMENT="APRStt Gateway"
|
||||||
|
%C%
|
||||||
|
%C%
|
||||||
|
%C%# Sample speech responses.
|
||||||
|
%C%# Default is Morse code "R" for received OK and "?" for all errors.
|
||||||
|
%C%
|
||||||
|
%C%#TTERR OK SPEECH Message Received.
|
||||||
|
%C%#TTERR D_MSG SPEECH D not implemented.
|
||||||
|
%C%#TTERR INTERNAL SPEECH Internal error.
|
||||||
|
%C%#TTERR MACRO_NOMATCH SPEECH No definition for digit sequence.
|
||||||
|
%C%#TTERR BAD_CHECKSUM SPEECH Bad checksum on call.
|
||||||
|
%C%#TTERR INVALID_CALL SPEECH Invalid callsign.
|
||||||
|
%C%#TTERR INVALID_OBJNAME SPEECH Invalid object name.
|
||||||
|
%C%#TTERR INVALID_SYMBOL SPEECH Invalid symbol.
|
||||||
|
%C%#TTERR INVALID_LOC SPEECH Invalid location.
|
||||||
|
%C%#TTERR NO_CALL SPEECH No call or object name.
|
||||||
|
%C%#TTERR SATSQ SPEECH Satellite square must be 4 digits.
|
||||||
|
%C%#TTERR SUFFIX_NO_CALL SPEECH Send full call before using suffix.
|
||||||
|
%C%
|
|
@ -0,0 +1,23 @@
|
||||||
|
if(NOT EXISTS $ENV{HOME}/direwolf.conf)
|
||||||
|
configure_file("${CUSTOM_BINARY_DIR}/direwolf.conf" $ENV{HOME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS $ENV{HOME}/sdr.conf)
|
||||||
|
configure_file("${CUSTOM_CONF_DIR}/sdr.conf" $ENV{HOME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS $ENV{HOME}/dw-start.sh)
|
||||||
|
configure_file("${CUSTOM_SCRIPTS_DIR}/dw-start.sh" $ENV{HOME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS $ENV{HOME}/telem-m0xer-3.txt)
|
||||||
|
configure_file("${CUSTOM_TELEMETRY_DIR}/telem-m0xer-3.txt" $ENV{HOME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS $ENV{HOME}/telem-balloon.conf)
|
||||||
|
configure_file("${CUSTOM_TELEMETRY_DIR}/telem-balloon.conf" $ENV{HOME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS $ENV{HOME}/telem-volts.conf)
|
||||||
|
configure_file("${CUSTOM_TELEMETRY_DIR}/telem-volts.conf" $ENV{HOME})
|
||||||
|
endif()
|
|
@ -0,0 +1,94 @@
|
||||||
|
#
|
||||||
|
# The destination field is often used to identify the manufacturer/model.
|
||||||
|
# These are not hardcoded into Dire Wolf. Instead they are read from
|
||||||
|
# a file called tocalls.txt at application start up time.
|
||||||
|
#
|
||||||
|
# The original permanent symbols are built in but the "new" symbols,
|
||||||
|
# using overlays, are often updated. These are also read from files.
|
||||||
|
#
|
||||||
|
# You can obtain an updated copy by typing "make data-update".
|
||||||
|
# This is not part of the normal build process. You have to do this explicitly.
|
||||||
|
#
|
||||||
|
# The locations below appear to be the most recent.
|
||||||
|
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
||||||
|
#
|
||||||
|
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
set(TOCALLS_TXT "tocalls.txt")
|
||||||
|
set(TOCALLS_TXT_BKP "tocalls.txt.old")
|
||||||
|
set(TOCALLS_URL "http://www.aprs.org/aprs11/tocalls.txt")
|
||||||
|
set(SYMBOLS-NEW_TXT "symbols-new.txt")
|
||||||
|
set(SYMBOLS-NEW_TXT_BKP "symbols-new.txt.old")
|
||||||
|
set(SYMBOLS-NEW_URL "http://www.aprs.org/symbols/symbols-new.txt")
|
||||||
|
set(SYMBOLSX_TXT "symbolsX.txt")
|
||||||
|
set(SYMBOLSX_TXT_BKP "symbolsX.txt.old")
|
||||||
|
set(SYMBOLSX_URL "http://www.aprs.org/symbols/symbolsX.txt")
|
||||||
|
set(CUSTOM_BINARY_DATA_DIR "${CMAKE_BINARY_DIR}/data")
|
||||||
|
|
||||||
|
# we can also move to a separate cmake file and use file(download)
|
||||||
|
# see conf/install_conf.cmake as example
|
||||||
|
file(COPY "${CUSTOM_DATA_DIR}/${TOCALLS_TXT}" DESTINATION "${CUSTOM_BINARY_DATA_DIR}")
|
||||||
|
file(COPY "${CUSTOM_DATA_DIR}/${SYMBOLS-NEW_TXT}" DESTINATION "${CUSTOM_BINARY_DATA_DIR}")
|
||||||
|
file(COPY "${CUSTOM_DATA_DIR}/${SYMBOLSX_TXT}" DESTINATION "${CUSTOM_BINARY_DATA_DIR}")
|
||||||
|
|
||||||
|
add_custom_target(data_rename
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E rename "${CUSTOM_BINARY_DATA_DIR}/${TOCALLS_TXT}" "${CUSTOM_BINARY_DATA_DIR}/${TOCALLS_TXT_BKP}"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E rename "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLS-NEW_TXT}" "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLS-NEW_TXT_BKP}"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E rename "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLSX_TXT}" "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLSX_TXT_BKP}"
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(download_tocalls
|
||||||
|
DEPENDS data_rename
|
||||||
|
URL ${TOCALLS_URL}
|
||||||
|
PREFIX ""
|
||||||
|
DOWNLOAD_DIR "${CUSTOM_BINARY_DATA_DIR}"
|
||||||
|
DOWNLOAD_NAME "${TOCALLS_TXT}"
|
||||||
|
DOWNLOAD_NO_EXTRACT 0
|
||||||
|
EXCLUDE_FROM_ALL 1
|
||||||
|
UPDATE_COMMAND ""
|
||||||
|
PATCH_COMMAND ""
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND ""
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(download_symbols-new
|
||||||
|
DEPENDS data_rename
|
||||||
|
URL ${SYMBOLS-NEW_URL}
|
||||||
|
PREFIX ""
|
||||||
|
DOWNLOAD_DIR "${CUSTOM_BINARY_DATA_DIR}"
|
||||||
|
DOWNLOAD_NAME "${SYMBOLS-NEW_TXT}"
|
||||||
|
DOWNLOAD_NO_EXTRACT 0
|
||||||
|
EXCLUDE_FROM_ALL 1
|
||||||
|
UPDATE_COMMAND ""
|
||||||
|
PATCH_COMMAND ""
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND ""
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(download_symbolsx
|
||||||
|
DEPENDS data_rename
|
||||||
|
URL ${SYMBOLSX_URL}
|
||||||
|
PREFIX ""
|
||||||
|
DOWNLOAD_DIR "${CUSTOM_BINARY_DATA_DIR}"
|
||||||
|
DOWNLOAD_NAME "${SYMBOLSX_TXT}"
|
||||||
|
DOWNLOAD_NO_EXTRACT 0
|
||||||
|
EXCLUDE_FROM_ALL 1
|
||||||
|
UPDATE_COMMAND ""
|
||||||
|
PATCH_COMMAND ""
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND ""
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(update-data)
|
||||||
|
add_dependencies(update-data data_rename download_tocalls download_symbols-new download_symbolsx)
|
||||||
|
|
||||||
|
install(FILES "${CUSTOM_BINARY_DATA_DIR}/${TOCALLS_TXT}" DESTINATION ${INSTALL_DATA_DIR})
|
||||||
|
install(FILES "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLS-NEW_TXT}" DESTINATION ${INSTALL_DATA_DIR})
|
||||||
|
install(FILES "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLSX_TXT}" DESTINATION ${INSTALL_DATA_DIR})
|
|
@ -0,0 +1,5 @@
|
||||||
|
In order to start direwolf as a service the configuration file
|
||||||
|
/etc/direwolf.conf needs to exist. Otherwise attempting to start the service
|
||||||
|
returns an 'Assertion failed' error. An example configuration file which may be
|
||||||
|
used as a model can be found in
|
||||||
|
/usr/share/doc/direwolf/examples/direwolf.conf.gz
|
|
@ -0,0 +1 @@
|
||||||
|
../CHANGES.md
|
|
@ -0,0 +1 @@
|
||||||
|
10
|
|
@ -0,0 +1,30 @@
|
||||||
|
Source: direwolf
|
||||||
|
Maintainer: Debian Hamradio Maintainers <debian-hams@lists.debian.org>
|
||||||
|
Uploaders: Iain R. Learmonth <irl@debian.org>
|
||||||
|
Section: hamradio
|
||||||
|
Priority: optional
|
||||||
|
Build-Depends: debhelper (>= 9),
|
||||||
|
libasound2-dev,
|
||||||
|
libgps-dev,
|
||||||
|
libhamlib-dev,
|
||||||
|
dh-systemd
|
||||||
|
Standards-Version: 4.1.0
|
||||||
|
Vcs-Browser: https://anonscm.debian.org/cgit/pkg-hamradio/direwolf.git/
|
||||||
|
Vcs-Git: https://anonscm.debian.org/git/pkg-hamradio/direwolf.git
|
||||||
|
Homepage: https://github.com/wb2osz/direwolf
|
||||||
|
|
||||||
|
Package: direwolf
|
||||||
|
Architecture: alpha amd64 arm64 armel armhf i386 mipsel ppc64el sh4 x32
|
||||||
|
Depends: ${shlibs:Depends},
|
||||||
|
${misc:Depends},
|
||||||
|
adduser,
|
||||||
|
libhamlib2
|
||||||
|
Suggests: gpsd, libhamlib-utils
|
||||||
|
Breaks: direwolf-docs (<< 1.1-1)
|
||||||
|
Replaces: direwolf-docs (<< 1.1-1)
|
||||||
|
Description: Soundcard TNC for APRS
|
||||||
|
Dire Wolf is a software "soundcard" modem/TNC and APRS encoder/decoder. It can
|
||||||
|
be used stand-alone to receive APRS messages, as a digipeater, APRStt gateway,
|
||||||
|
or Internet Gateway (IGate). It can also be used as a virtual TNC for other
|
||||||
|
applications such as APRSIS32, UI-View32, Xastir, APRS-TW, YAAC, UISS, Linux
|
||||||
|
AX25, SARTrack, and many others.
|
|
@ -0,0 +1,176 @@
|
||||||
|
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Upstream-Name: direwolf
|
||||||
|
Files-Excluded: doc/*.pdf
|
||||||
|
Source: https://github.com/wb2osz/direwolf
|
||||||
|
Comment:
|
||||||
|
The files in misc/ are copied directly from the Cygwin source code. These are
|
||||||
|
listed here as dual licensed as they are both part of the Cygwin distribution
|
||||||
|
and originally part of BSD. See misc/README-dire-wolf.txt for more information.
|
||||||
|
.
|
||||||
|
Please see ftp-master's comments on this here:
|
||||||
|
https://lists.debian.org/debian-hams/2014/09/msg00063.html
|
||||||
|
https://lists.debian.org/debian-hams/2014/10/msg00003.html
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: (C) 2011-2014 John Langner WB2OSZ
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: geotranz/*
|
||||||
|
Copyright: National Geospatial-Intelligence Agency
|
||||||
|
License: Permissive-NGA
|
||||||
|
|
||||||
|
Files: regex/*
|
||||||
|
Copyright: (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||||
|
License: LGPL-2.1+
|
||||||
|
|
||||||
|
Files: misc/strcasestr.c
|
||||||
|
Copyright:
|
||||||
|
(C) 1990, 1993 The Regents of the University of California
|
||||||
|
(C) RedHat
|
||||||
|
License: BSD-4-clause or GPL-2+
|
||||||
|
|
||||||
|
Files: misc/strtok_r.c misc/strsep.c
|
||||||
|
Copyright:
|
||||||
|
(C) 1988 Regents of the University of California
|
||||||
|
(C) RedHat
|
||||||
|
License: BSD-3-clause or GPL-2+
|
||||||
|
|
||||||
|
Files: debian/*
|
||||||
|
Copyright: (C) 2014 Iain R. Learmonth <irl@fsfe.org>
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
License: BSD-3-clause
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
.
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
.
|
||||||
|
3. Neither the name of the University nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
.
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGE.
|
||||||
|
|
||||||
|
License: BSD-4-clause
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
.
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
.
|
||||||
|
3. All advertising materials mentioning features or use of this software
|
||||||
|
must display the following acknowledgement:
|
||||||
|
This product includes software developed by the University of
|
||||||
|
California, Berkeley and its contributors.
|
||||||
|
.
|
||||||
|
4. Neither the name of the University nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
.
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGE.
|
||||||
|
|
||||||
|
License: GPL-2+
|
||||||
|
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 2 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/>.
|
||||||
|
.
|
||||||
|
On Debian systems, a copy of the full license text is available in
|
||||||
|
/usr/share/common-licenses/GPL-2.
|
||||||
|
|
||||||
|
License: LGPL-2.1+
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
.
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
.
|
||||||
|
On Debian systems, a copy of the full license text is available in
|
||||||
|
/usr/share/common-licenses/LGPL-2.1.
|
||||||
|
|
||||||
|
License: Permissive-NGA
|
||||||
|
1. The GEOTRANS source code ("the software") is provided free of charge by the
|
||||||
|
National Geospatial-Intelligence Agency (NGA) of the United States Department
|
||||||
|
of Defense. Although NGA makes no copyright claim under Title 17 U.S.C., NGA
|
||||||
|
claims copyrights in the source code under other legal regimes. NGA hereby
|
||||||
|
grants to each user of the software a license to use and distribute the
|
||||||
|
software, and develop derivative works.
|
||||||
|
.
|
||||||
|
2. NGA requests that products developed using the software credit the source of
|
||||||
|
the software with the following statement, "The product was developed using
|
||||||
|
GEOTRANS, a product of the National Geospatial-Intelligence Agency (NGA) and
|
||||||
|
U.S. Army Engineering Research and Development Center." Do not use the name
|
||||||
|
GEOTRANS for any derived work.
|
||||||
|
.
|
||||||
|
3. Warranty Disclaimer: The software was developed to meet only the internal
|
||||||
|
requirements of the National Geospatial-Intelligence Agency (NGA). The software
|
||||||
|
is provided "as is," and no warranty, express or implied, including but not
|
||||||
|
limited to the implied warranties of merchantability and fitness for particular
|
||||||
|
purpose or arising by statute or otherwise in law or from a course of dealing
|
||||||
|
or usage in trade, is made by NGA as to the accuracy and functioning of the
|
||||||
|
software.
|
||||||
|
.
|
||||||
|
4. NGA and its personnel are not required to provide technical support or
|
||||||
|
general assistance with respect to public use of the software. Government
|
||||||
|
customers may contact NGA.
|
||||||
|
.
|
||||||
|
5. Neither NGA nor its personnel will be liable for any claims, losses, or
|
||||||
|
damages arising from or connected with the use of the software. The user agrees
|
||||||
|
to hold harmless the United States National Geospatial-Intelligence Agency
|
||||||
|
(NGA). The user's sole and exclusive remedy is to stop using the software.
|
||||||
|
.
|
||||||
|
6. Please be advised that pursuant to the United States Code, 10 U.S.C. 425,
|
||||||
|
the name of the National Geospatial-Intelligence Agency, the initials "NGA",
|
||||||
|
the seal of the National Geospatial-Intelligence Agency, or any colorable
|
||||||
|
imitation thereof shall not be used to imply approval, endorsement, or
|
||||||
|
authorization of a product without prior written permission from United States
|
||||||
|
Secretary of Defense. Do not create the impression that NGA, the Secretary of
|
||||||
|
Defense or the Director of National Intelligence has endorsed any product
|
||||||
|
derived from GEOTRANS.
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
. /usr/share/debconf/confmodule
|
||||||
|
|
||||||
|
add_group_if_missing() {
|
||||||
|
if ! getent group direwolf >/dev/null; then
|
||||||
|
addgroup --system --force-badname direwolf || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_user_if_missing() {
|
||||||
|
if ! id -u direwolf > /dev/null 2>&1; then
|
||||||
|
mkdir -m 02750 -p /var/lib/direwolf
|
||||||
|
adduser --system --home /var/lib/direwolf \
|
||||||
|
--disabled-password \
|
||||||
|
--force-badname direwolf \
|
||||||
|
--ingroup direwolf
|
||||||
|
adduser direwolf dialout
|
||||||
|
chown direwolf:direwolf /var/lib/direwolf
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_group_if_missing
|
||||||
|
add_user_if_missing
|
||||||
|
|
||||||
|
db_stop
|
||||||
|
|
||||||
|
#DEBHELPER#
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
purge)
|
||||||
|
rm -rf /var/lib/direwolf/
|
||||||
|
;;
|
||||||
|
remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "postrm called with unknown argument \`$1'" >&2
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
#DEBHELPER#
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@ --parallel
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
dh_auto_configure -- -DFORCE_SSE=1
|
|
@ -0,0 +1 @@
|
||||||
|
3.0 (quilt)
|
103
direwolf.spec
103
direwolf.spec
|
@ -1,103 +0,0 @@
|
||||||
#%global git_commit b2548ec58f44f4b651626757a166b9f4f18d8000
|
|
||||||
%global git_commit 37179479caf0bf36adf8c9bc0fde641884edaeac
|
|
||||||
%global git_date 20171216
|
|
||||||
|
|
||||||
%global git_short_commit %(echo %{git_commit} | cut -c -8)
|
|
||||||
%global git_suffix %{git_date}git%{git_short_commit}
|
|
||||||
|
|
||||||
Name: direwolf
|
|
||||||
Version: 1.5Beta
|
|
||||||
Release: 1.%{git_suffix}%{?dist}
|
|
||||||
Summary: Soundcard based AX.25 TNC
|
|
||||||
|
|
||||||
Group: Applications/Communications
|
|
||||||
License: GPLv2
|
|
||||||
URL: https://github.com/wb2osz/direwolf
|
|
||||||
#Source0: https://github.com/wb2osz/direwolf/archive/%{name}-%{version}.tar.gz
|
|
||||||
Source: %{name}-%{version}-%{git_suffix}.tgz
|
|
||||||
Packager: David Ranch (KI6ZHD) <dranch@trinnet.net>
|
|
||||||
Distribution: RedHat Linux
|
|
||||||
|
|
||||||
Patch0: direwolf-1.5-makefile.patch
|
|
||||||
|
|
||||||
BuildRequires: automake
|
|
||||||
BuildRequires: alsa-lib-devel
|
|
||||||
|
|
||||||
#If the gpsd and gpsd-devel packages are installed, Direwolf will add gps support
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%description
|
|
||||||
Dire Wolf is a software "soundcard" modem/TNC and APRS encoder/decoder. It can
|
|
||||||
be used stand-alone to receive APRS messages, as a digipeater, APRStt gateway,
|
|
||||||
or Internet Gateway (IGate). It can also be used as a virtual TNC for other
|
|
||||||
applications such as APRSIS32, UI-View32, Xastir, APRS-TW, YAAC, UISS,
|
|
||||||
Linux AX25, SARTrack, RMS Express, and many others.
|
|
||||||
|
|
||||||
%prep
|
|
||||||
|
|
||||||
%setup -q -n %{name}-%{version}
|
|
||||||
%patch0 -p0
|
|
||||||
|
|
||||||
%build
|
|
||||||
|
|
||||||
make -f Makefile.linux
|
|
||||||
#make -f Makefile.linux tocalls-symbols
|
|
||||||
make %{?_smp_mflags}
|
|
||||||
|
|
||||||
|
|
||||||
%install
|
|
||||||
make install INSTALLDIR=$RPM_BUILD_ROOT/usr
|
|
||||||
make install-conf INSTALLDIR=$RPM_BUILD_ROOT/usr
|
|
||||||
|
|
||||||
# Install icon
|
|
||||||
mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/direwolf/
|
|
||||||
cp dw-icon.png ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/direwolf/
|
|
||||||
mv symbols-new.txt ${RPM_BUILD_ROOT}%{_docdir}/%{name}/
|
|
||||||
mv symbolsX.txt ${RPM_BUILD_ROOT}%{_docdir}/%{name}/
|
|
||||||
mv tocalls.txt ${RPM_BUILD_ROOT}%{_docdir}/%{name}/
|
|
||||||
desktop-file-install \
|
|
||||||
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications direwolf.desktop
|
|
||||||
#temp bug
|
|
||||||
#non echo "fixing $RPM_BUILD_ROOT/%{_bindir}/bin"
|
|
||||||
#non rm -f $RPM_BUILD_ROOT/usr/bin
|
|
||||||
|
|
||||||
|
|
||||||
%files
|
|
||||||
%{_sysconfdir}/ax25/direwolf.conf
|
|
||||||
%{_sysconfdir}/ax25/sdr.conf
|
|
||||||
%{_sysconfdir}/ax25/telemetry-toolkit/telem-balloon.conf
|
|
||||||
%{_sysconfdir}/ax25/telemetry-toolkit/telem-m0xer-3.txt
|
|
||||||
%{_sysconfdir}/ax25/telemetry-toolkit/telem-volts.conf
|
|
||||||
%{_sysconfdir}/udev/rules.d/99-direwolf-cmedia.rules
|
|
||||||
%{_bindir}/*
|
|
||||||
%{_datadir}/pixmaps/direwolf/dw-icon.png
|
|
||||||
%{_datadir}/applications/%{name}.desktop
|
|
||||||
%{_datadir}/direwolf/*
|
|
||||||
%{_docdir}/*
|
|
||||||
%{_mandir}/man1/*
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
* Sat Dec 16 2017 David Ranch <dranch@trinnet.net> - 1.5-1
|
|
||||||
- New 1.5-Beta version from Git
|
|
||||||
* Sun Apr 2 2017 David Ranch <dranch@trinnet.net> - 1.4-1
|
|
||||||
- New 1.4-Beta1 version from Git
|
|
||||||
* Sun Mar 5 2017 David Ranch <dranch@trinnet.net> - 1.4-1
|
|
||||||
- New 1.4-H Alpha version from Git version
|
|
||||||
* Fri Aug 26 2016 David Ranch <dranch@trinnet.net> - 1.4-1
|
|
||||||
- New version
|
|
||||||
* Fri May 06 2016 David Ranch <dranch@trinnet.net> - 1.3-1
|
|
||||||
- New version
|
|
||||||
* Sat Sep 12 2015 David Ranch <dranch@trinnet.net> - 1.3F-1
|
|
||||||
- New version with new features
|
|
||||||
* Sun May 10 2015 David Ranch <dranch@trinnet.net> - 1.2E-1
|
|
||||||
- New version that supports a PASSALL function
|
|
||||||
- Updated the Makefile.linux patch
|
|
||||||
* Sat Mar 21 2015 David Ranch <dranch@trinnet.net> - 1.2C-1
|
|
||||||
- changed to support different make installation variable
|
|
||||||
* Sat Feb 14 2015 David Ranch <dranch@trinnet.net> - 1.2b-1
|
|
||||||
- new spec file
|
|
||||||
* Sat Dec 20 2014 David Ranch <dranch@trinnet.net> - 1.1b1-1
|
|
||||||
- new spec file
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/README.md" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/2400-4800-PSK-for-APRS-Packet-Radio.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/APRS-Telemetry-Toolkit.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/APRStt-Implementation-Notes.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/APRStt-interface-for-SARTrack.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/APRStt-Listening-Example.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/Bluetooth-KISS-TNC.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/Going-beyond-9600-baud.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/Raspberry-Pi-APRS.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/Raspberry-Pi-APRS-Tracker.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/Raspberry-Pi-SDR-IGate.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/Successful-APRS-IGate-Operation.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/User-Guide.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
||||||
|
install(FILES "${CUSTOM_DOC_DIR}/WA8LMF-TNC-Test-CD-Results.pdf" DESTINATION ${INSTALL_DOC_DIR})
|
|
@ -1 +0,0 @@
|
||||||
MAINICON ICON "dw-icon.ico"
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
# UTM, USNG, MGRS conversions
|
||||||
|
|
||||||
|
set(GEOTRANZ_LIBRARIES geotranz CACHE INTERNAL "geotranz")
|
||||||
|
|
||||||
|
list(APPEND geotranz_SOURCES
|
||||||
|
error_string.c
|
||||||
|
mgrs.c
|
||||||
|
polarst.c
|
||||||
|
tranmerc.c
|
||||||
|
ups.c
|
||||||
|
usng.c
|
||||||
|
utm.c
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(geotranz STATIC
|
||||||
|
${geotranz_SOURCES}
|
||||||
|
)
|
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
set(MISC_LIBRARIES misc CACHE INTERNAL "misc")
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${CMAKE_SOURCE_DIR}/src
|
||||||
|
)
|
||||||
|
|
||||||
|
if(LINUX)
|
||||||
|
list(APPEND misc_SOURCES
|
||||||
|
# Provide our own copy of strlcpy and strlcat
|
||||||
|
# because they are not included with Linux.
|
||||||
|
${CUSTOM_MISC_DIR}/strlcpy.c
|
||||||
|
${CUSTOM_MISC_DIR}/strlcat.c
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(misc STATIC
|
||||||
|
${misc_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
elseif(WIN32 OR CYGWIN) # windows
|
||||||
|
|
||||||
|
list(APPEND misc_SOURCES
|
||||||
|
# There are several string functions found in Linux
|
||||||
|
# but not on Windows. Need to provide our own copy.
|
||||||
|
${CUSTOM_MISC_DIR}/strsep.c
|
||||||
|
${CUSTOM_MISC_DIR}/strtok_r.c
|
||||||
|
${CUSTOM_MISC_DIR}/strcasestr.c
|
||||||
|
${CUSTOM_MISC_DIR}/strlcpy.c
|
||||||
|
${CUSTOM_MISC_DIR}/strlcat.c
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(misc STATIC
|
||||||
|
${misc_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# on macOS, OpenBSD and FreeBSD not misc is necessary
|
||||||
|
set(MISC_LIBRARIES "" CACHE INTERNAL "")
|
||||||
|
|
||||||
|
endif()
|
|
@ -0,0 +1,24 @@
|
||||||
|
set(REGEX_LIBRARIES "" CACHE INTERNAL "")
|
||||||
|
|
||||||
|
if(WIN32 OR CYGWIN) # windows
|
||||||
|
|
||||||
|
set(REGEX_LIBRARIES regex CACHE INTERNAL "regex")
|
||||||
|
|
||||||
|
list(APPEND regex_SOURCES
|
||||||
|
# When building for Linux, we use regular expression
|
||||||
|
# functions supplied by the gnu C library.
|
||||||
|
# For the native WIN32 version, we need to use our own copy.
|
||||||
|
# These were copied from http://gnuwin32.sourceforge.net/packages/regex.htm
|
||||||
|
# Consider upgrading from https://www.gnu.org/software/libc/sources.html
|
||||||
|
${CUSTOM_REGEX_DIR}/regex.c
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(regex STATIC
|
||||||
|
${regex_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(regex
|
||||||
|
PROPERTIES COMPILE_FLAGS "-Dbool=int -Dtrue=1 -Dfalse=0 -DUSE_REGEX_STATIC"
|
||||||
|
)
|
||||||
|
|
||||||
|
endif()
|
573
generic.conf
573
generic.conf
|
@ -1,573 +0,0 @@
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# Configuration file for Dire Wolf #
|
|
||||||
C# #
|
|
||||||
L# Linux version #
|
|
||||||
W# Windows version #
|
|
||||||
M# Macintosh version #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
R
|
|
||||||
R
|
|
||||||
R The sample config file was getting pretty messy
|
|
||||||
R with the Windows and Linux differences.
|
|
||||||
R It would be a maintenance burden to keep most of
|
|
||||||
R two different versions in sync.
|
|
||||||
R This common source is now used to generate the
|
|
||||||
R two different variations while having only a single
|
|
||||||
R copy of the common parts.
|
|
||||||
R
|
|
||||||
R The first column contains one of the following:
|
|
||||||
R
|
|
||||||
R R remark which is discarded.
|
|
||||||
R C common to both versions.
|
|
||||||
R W Windows version only.
|
|
||||||
R L Linux version only.
|
|
||||||
R M Macintosh version and possibly others (portaudio used).
|
|
||||||
R
|
|
||||||
C#
|
|
||||||
C# Consult the User Guide for more details on configuration options.
|
|
||||||
C#
|
|
||||||
C#
|
|
||||||
C# These are the most likely settings you might change:
|
|
||||||
C#
|
|
||||||
C# (1) MYCALL - call sign and SSID for your station.
|
|
||||||
C#
|
|
||||||
C# Look for lines starting with MYCALL and
|
|
||||||
C# change NOCALL to your own.
|
|
||||||
C#
|
|
||||||
C# (2) PBEACON - enable position beaconing.
|
|
||||||
C#
|
|
||||||
C# Look for lines starting with PBEACON and
|
|
||||||
C# modify for your call, location, etc.
|
|
||||||
C#
|
|
||||||
C# (3) DIGIPEATER - configure digipeating rules.
|
|
||||||
C#
|
|
||||||
C# Look for lines starting with DIGIPEATER.
|
|
||||||
C# Most people will probably use the given example.
|
|
||||||
C# Just remove the "#" from the start of the line
|
|
||||||
C# to enable it.
|
|
||||||
C#
|
|
||||||
C# (4) IGSERVER, IGLOGIN - IGate server and login
|
|
||||||
C#
|
|
||||||
C# Configure an IGate client to relay messages between
|
|
||||||
C# radio and internet servers.
|
|
||||||
C#
|
|
||||||
C#
|
|
||||||
C# The default location is "direwolf.conf" in the current working directory.
|
|
||||||
L# On Linux, the user's home directory will also be searched.
|
|
||||||
C# An alternate configuration file location can be specified with the "-c" command line option.
|
|
||||||
C#
|
|
||||||
C# As you probably guessed by now, # indicates a comment line.
|
|
||||||
C#
|
|
||||||
C# Remove the # at the beginning of a line if you want to use a sample
|
|
||||||
C# configuration that is currently commented out.
|
|
||||||
C#
|
|
||||||
C# Commands are a keyword followed by parameters.
|
|
||||||
C#
|
|
||||||
C# Command key words are case insensitive. i.e. upper and lower case are equivalent.
|
|
||||||
C#
|
|
||||||
C# Command parameters are generally case sensitive. i.e. upper and lower case are different.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# FIRST AUDIO DEVICE PROPERTIES #
|
|
||||||
C# (Channel 0 + 1 if in stereo) #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Many people will simply use the default sound device.
|
|
||||||
C# Some might want to use an alternative device by chosing it here.
|
|
||||||
C#
|
|
||||||
W# When the Windows version starts up, it displays something like
|
|
||||||
W# this with the available sound devices and capabilities:
|
|
||||||
W#
|
|
||||||
W# Available audio input devices for receive (*=selected):
|
|
||||||
W# * 0: Microphone (C-Media USB Headpho (channel 2)
|
|
||||||
W# 1: Microphone (Bluetooth SCO Audio
|
|
||||||
W# 2: Microphone (Bluetooth AV Audio)
|
|
||||||
W# * 3: Microphone (Realtek High Defini (channels 0 & 1)
|
|
||||||
W# Available audio output devices for transmit (*=selected):
|
|
||||||
W# * 0: Speakers (C-Media USB Headphone (channel 2)
|
|
||||||
W# 1: Speakers (Bluetooth SCO Audio)
|
|
||||||
W# 2: Realtek Digital Output(Optical)
|
|
||||||
W# 3: Speakers (Bluetooth AV Audio)
|
|
||||||
W# * 4: Speakers (Realtek High Definiti (channels 0 & 1)
|
|
||||||
W# 5: Realtek Digital Output (Realtek
|
|
||||||
W#
|
|
||||||
W# Example: To use the microphone and speaker connections on the
|
|
||||||
W# system board, either of these forms can be used:
|
|
||||||
W
|
|
||||||
W#ADEVICE High
|
|
||||||
W#ADEVICE 3 4
|
|
||||||
W
|
|
||||||
W
|
|
||||||
W# Example: To use the USB Audio, use a command like this with
|
|
||||||
W# the input and output device numbers. (Remove the # comment character.)
|
|
||||||
W#ADEVICE USB
|
|
||||||
W
|
|
||||||
W# The position in the list can change when devices (e.g. USB) are added and removed.
|
|
||||||
W# You can also specify devices by using part of the name.
|
|
||||||
W# Here is an example of specifying the USB Audio device.
|
|
||||||
W# This is case-sensitive. Upper and lower case are not treated the same.
|
|
||||||
W
|
|
||||||
W#ADEVICE USB
|
|
||||||
W
|
|
||||||
W
|
|
||||||
L# Linux ALSA is complicated. See User Guide for discussion.
|
|
||||||
L# To use something other than the default, generally use plughw
|
|
||||||
L# and a card number reported by "arecord -l" command. Example:
|
|
||||||
L
|
|
||||||
L# ADEVICE plughw:1,0
|
|
||||||
L
|
|
||||||
L# Starting with version 1.0, you can also use "-" or "stdin" to
|
|
||||||
L# pipe stdout from some other application such as a software defined
|
|
||||||
L# radio. You can also specify "UDP:" and an optional port for input.
|
|
||||||
L# Something different must be specified for output.
|
|
||||||
L
|
|
||||||
M# Macintosh Operating System uses portaudio driver for audio
|
|
||||||
M# input/output. Default device selection not available. User/OP
|
|
||||||
M# must configure the sound input/output option. Note that
|
|
||||||
M# the device names can contain spaces. In this case, the names
|
|
||||||
M# must be enclosed by quotes.
|
|
||||||
M#
|
|
||||||
M# Examples:
|
|
||||||
M#
|
|
||||||
M# ADEVICE "USB Audio Codec:6" "USB Audio Codec:5"
|
|
||||||
M#
|
|
||||||
M#
|
|
||||||
W# ADEVICE - 0
|
|
||||||
W# ADEVICE UDP:7355 0
|
|
||||||
L# ADEVICE - plughw:1,0
|
|
||||||
L# ADEVICE UDP:7355 default
|
|
||||||
M# ADEVICE UDP:7355 default
|
|
||||||
M#
|
|
||||||
L
|
|
||||||
L
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Number of audio channels for this souncard: 1 or 2.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
CACHANNELS 1
|
|
||||||
C#ACHANNELS 2
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# SECOND AUDIO DEVICE PROPERTIES #
|
|
||||||
C# (Channel 2 + 3 if in stereo) #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C#ADEVICE1 ...
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# THIRD AUDIO DEVICE PROPERTIES #
|
|
||||||
C# (Channel 4 + 5 if in stereo) #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C#ADEVICE2 ...
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# CHANNEL 0 PROPERTIES #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
CCHANNEL 0
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# The following MYCALL, MODEM, PTT, etc. configuration items
|
|
||||||
C# apply to the most recent CHANNEL.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Station identifier for this channel.
|
|
||||||
C# Multiple channels can have the same or different names.
|
|
||||||
C#
|
|
||||||
C# It can be up to 6 letters and digits with an optional ssid.
|
|
||||||
C# The APRS specification requires that it be upper case.
|
|
||||||
C#
|
|
||||||
C# Example (don't use this unless you are me): MYCALL WB2OSZ-5
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
CMYCALL N0CALL
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Pick a suitable modem speed based on your situation.
|
|
||||||
C# 1200 Most common for VHF/UHF. Default if not specified.
|
|
||||||
C# 300 Low speed for HF SSB.
|
|
||||||
C# 9600 High speed - Can't use Microphone and Speaker connections.
|
|
||||||
C#
|
|
||||||
C# In the simplest form, just specify the speed.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
CMODEM 1200
|
|
||||||
C#MODEM 300
|
|
||||||
C#MODEM 9600
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# These are the defaults should be fine for most cases. In special situations,
|
|
||||||
C# you might want to specify different AFSK tones or the baseband mode which does
|
|
||||||
C# not use AFSK.
|
|
||||||
C#
|
|
||||||
C#MODEM 1200 1200:2200
|
|
||||||
C#MODEM 300 1600:1800
|
|
||||||
C#MODEM 9600 0:0
|
|
||||||
C#
|
|
||||||
C#
|
|
||||||
C# On HF SSB, you might want to use multiple demodulators on slightly different
|
|
||||||
C# frequencies to compensate for stations off frequency. Here we have 7 different
|
|
||||||
C# demodulators at 30 Hz intervals. This takes a lot of CPU power so you will
|
|
||||||
C# probably need to reduce the audio sampling rate with the /n option.
|
|
||||||
C
|
|
||||||
C#MODEM 300 1600:1800 7@30 /4
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Uncomment line below to enable the DTMF decoder for this channel.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#DTMF
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# If not using a VOX circuit, the transmitter Push to Talk (PTT)
|
|
||||||
C# control is usually wired to a serial port with a suitable interface circuit.
|
|
||||||
C# DON'T connect it directly!
|
|
||||||
C#
|
|
||||||
C# For the PTT command, specify the device and either RTS or DTR.
|
|
||||||
C# RTS or DTR may be preceded by "-" to invert the signal.
|
|
||||||
C# Both can be used for interfaces that want them driven with opposite polarity.
|
|
||||||
C#
|
|
||||||
L# COM1 can be used instead of /dev/ttyS0, COM2 for /dev/ttyS1, and so on.
|
|
||||||
L#
|
|
||||||
C
|
|
||||||
C#PTT COM1 RTS
|
|
||||||
C#PTT COM1 RTS -DTR
|
|
||||||
L#PTT /dev/ttyUSB0 RTS
|
|
||||||
C
|
|
||||||
L#
|
|
||||||
L# On Linux, you can also use general purpose I/O pins if
|
|
||||||
L# your system is configured for user access to them.
|
|
||||||
L# This would apply mostly to microprocessor boards, not a regular PC.
|
|
||||||
L# See separate Raspberry Pi document for more details.
|
|
||||||
L# The number may be preceded by "-" to invert the signal.
|
|
||||||
L#
|
|
||||||
L
|
|
||||||
L#PTT GPIO 25
|
|
||||||
L
|
|
||||||
C# The Data Carrier Detect (DCD) signal can be sent to the same places
|
|
||||||
C# as the PTT signal. This could be used to light up an LED like a normal TNC.
|
|
||||||
C
|
|
||||||
C#DCD COM1 -DTR
|
|
||||||
L#DCD GPIO 24
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# CHANNEL 1 PROPERTIES #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C#CHANNEL 1
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Specify MYCALL, MODEM, PTT, etc. configuration items for
|
|
||||||
C# CHANNEL 1. Repeat for any other channels.
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# TEXT TO SPEECH COMMAND FILE #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
W#SPEECH dwespeak.bat
|
|
||||||
L#SPEECH dwespeak.sh
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# VIRTUAL TNC SERVER PROPERTIES #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Dire Wolf acts as a virtual TNC and can communicate with
|
|
||||||
C# client applications by different protocols:
|
|
||||||
C#
|
|
||||||
C# - the "AGW TCPIP Socket Interface" - default port 8000
|
|
||||||
C# - KISS protocol over TCP socket - default port 8001
|
|
||||||
W# - KISS TNC via serial port
|
|
||||||
L# - KISS TNC via pseudo terminal (-p command line option)
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
CAGWPORT 8000
|
|
||||||
CKISSPORT 8001
|
|
||||||
C
|
|
||||||
W#
|
|
||||||
W# Some applications are designed to operate with only a physical
|
|
||||||
W# TNC attached to a serial port. For these, we provide a virtual serial
|
|
||||||
W# port that appears to be connected to a TNC.
|
|
||||||
W#
|
|
||||||
W# Take a look at the User Guide for instructions to set up
|
|
||||||
W# two virtual serial ports named COM3 and COM4 connected by
|
|
||||||
W# a null modem.
|
|
||||||
W#
|
|
||||||
W# Using the configuration described, Dire Wolf will connect to
|
|
||||||
W# COM3 and the client application will use COM4.
|
|
||||||
W#
|
|
||||||
W# Uncomment following line to use this feature.
|
|
||||||
W
|
|
||||||
W#NULLMODEM COM3
|
|
||||||
W
|
|
||||||
W
|
|
||||||
C#
|
|
||||||
C# It is sometimes possible to recover frames with a bad FCS.
|
|
||||||
C# This applies to all channels.
|
|
||||||
C#
|
|
||||||
C# 0 [NONE] - Don't try to repair.
|
|
||||||
C# 1 [SINGLE] - Attempt to fix single bit error. (default)
|
|
||||||
C# 2 [DOUBLE] - Also attempt to fix two adjacent bits.
|
|
||||||
C# ... see User Guide for more values and in-depth discussion.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#FIX_BITS 0
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# BEACONING PROPERTIES #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Beaconing is configured with these two commands:
|
|
||||||
C#
|
|
||||||
C# PBEACON - for a position report (usually yourself)
|
|
||||||
C# OBEACON - for an object report (usually some other entity)
|
|
||||||
C#
|
|
||||||
C# Each has a series of keywords and values for options.
|
|
||||||
C# See User Guide for details.
|
|
||||||
C#
|
|
||||||
C# Example:
|
|
||||||
C#
|
|
||||||
C# This results in a broadcast once every 10 minutes.
|
|
||||||
C# Every half hour, it can travel via two digipeater hops.
|
|
||||||
C# The others are kept local.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#PBEACON delay=1 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA" via=WIDE1-1,WIDE2-1
|
|
||||||
C#PBEACON delay=11 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA"
|
|
||||||
C#PBEACON delay=21 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA"
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C# With UTM coordinates instead of latitude and longitude.
|
|
||||||
C
|
|
||||||
C#PBEACON delay=1 every=10 overlay=S symbol="digi" zone=19T easting=307477 northing=4720178
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# When the destination field is set to "SPEECH" the information part is
|
|
||||||
C# converted to speech rather than transmitted as a data frame.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#CBEACON dest="SPEECH" info="Club meeting tonight at 7 pm."
|
|
||||||
C
|
|
||||||
C# Similar for Morse code. If SSID is specified, it is multiplied
|
|
||||||
C# by 2 to get speed in words per minute (WPM).
|
|
||||||
C
|
|
||||||
C#CBEACON dest="MORSE-6" info="de MYCALL"
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Modify for your particular situation before removing
|
|
||||||
C# the # comment character from the beginning of appropriate lines above.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# DIGIPEATER PROPERTIES #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# For most common situations, use something like this by removing
|
|
||||||
C# the "#" from the beginning of the line below.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE
|
|
||||||
C
|
|
||||||
C# See User Guide for more explanation of what this means and how
|
|
||||||
C# it can be customized for your particular needs.
|
|
||||||
C
|
|
||||||
C# Filtering can be used to limit was is digipeated.
|
|
||||||
C# For example, only weather weather reports, received on channel 0,
|
|
||||||
C# will be retransmitted on channel 1.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#FILTER 0 1 t/wn
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# INTERNET GATEWAY #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C# First you need to specify the name of a Tier 2 server.
|
|
||||||
C# The current preferred way is to use one of these regional rotate addresses:
|
|
||||||
C
|
|
||||||
C# noam.aprs2.net - for North America
|
|
||||||
C# soam.aprs2.net - for South America
|
|
||||||
C# euro.aprs2.net - for Europe and Africa
|
|
||||||
C# asia.aprs2.net - for Asia
|
|
||||||
C# aunz.aprs2.net - for Oceania
|
|
||||||
C
|
|
||||||
C#IGSERVER noam.aprs2.net
|
|
||||||
C
|
|
||||||
C# You also need to specify your login name and passcode.
|
|
||||||
C# Contact the author if you can't figure out how to generate the passcode.
|
|
||||||
C
|
|
||||||
C#IGLOGIN WB2OSZ-5 123456
|
|
||||||
C
|
|
||||||
C# That's all you need for a receive only IGate which relays
|
|
||||||
C# messages from the local radio channel to the global servers.
|
|
||||||
C
|
|
||||||
C# Some might want to send an IGate client position directly to a server
|
|
||||||
C# without sending it over the air and relying on someone else to
|
|
||||||
C# forward it to an IGate server. This is done by using sendto=IG rather
|
|
||||||
C# than a radio channel number. Overlay R for receive only, T for two way.
|
|
||||||
C
|
|
||||||
C#PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=R lat=42^37.14N long=071^20.83W
|
|
||||||
C#PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=T lat=42^37.14N long=071^20.83W
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C# To relay messages from the Internet to radio, you need to add
|
|
||||||
C# one more option with the transmit channel number and a VIA path.
|
|
||||||
C
|
|
||||||
C#IGTXVIA 0 WIDE1-1
|
|
||||||
C
|
|
||||||
C# You might want to apply a filter for what packets will be obtained from the server.
|
|
||||||
C# Read about filters here: http://www.aprs-is.net/javaprsfilter.aspx
|
|
||||||
C# Example, positions and objects within 50 km of my location:
|
|
||||||
C
|
|
||||||
C#IGFILTER m/50
|
|
||||||
C
|
|
||||||
C# That is known as a server-side filter. It is processed by the IGate server.
|
|
||||||
C# You can also apply local filtering to limit what will be transmitted on the
|
|
||||||
C# RF side. For example, transmit only "messages" on channel 0 and weather
|
|
||||||
C# reports on channel 1.
|
|
||||||
C
|
|
||||||
C#FILTER IG 0 t/m
|
|
||||||
C#FILTER IG 1 t/wn
|
|
||||||
C
|
|
||||||
C# Finally, we don't want to flood the radio channel.
|
|
||||||
C# The IGate function will limit the number of packets transmitted
|
|
||||||
C# during 1 minute and 5 minute intervals. If a limit would
|
|
||||||
C# be exceeded, the packet is dropped and message is displayed in red.
|
|
||||||
C
|
|
||||||
CIGTXLIMIT 6 10
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C#############################################################
|
|
||||||
C# #
|
|
||||||
C# APRStt GATEWAY #
|
|
||||||
C# #
|
|
||||||
C#############################################################
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Dire Wolf can receive DTMF (commonly known as Touch Tone)
|
|
||||||
C# messages and convert them to packet objects.
|
|
||||||
C#
|
|
||||||
C# See separate "APRStt-Implementation-Notes" document for details.
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C#
|
|
||||||
C# Sample gateway configuration based on:
|
|
||||||
C#
|
|
||||||
C# http://www.aprs.org/aprstt/aprstt-coding24.txt
|
|
||||||
C# http://www.aprs.org/aprs-jamboree-2013.html
|
|
||||||
C#
|
|
||||||
C
|
|
||||||
C# Define specific points.
|
|
||||||
C
|
|
||||||
CTTPOINT B01 37^55.37N 81^7.86W
|
|
||||||
CTTPOINT B7495088 42.605237 -71.34456
|
|
||||||
CTTPOINT B934 42.605237 -71.34456
|
|
||||||
C
|
|
||||||
CTTPOINT B901 42.661279 -71.364452
|
|
||||||
CTTPOINT B902 42.660411 -71.364419
|
|
||||||
CTTPOINT B903 42.659046 -71.364452
|
|
||||||
CTTPOINT B904 42.657578 -71.364602
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C# For location at given bearing and distance from starting point.
|
|
||||||
C
|
|
||||||
CTTVECTOR B5bbbddd 37^55.37N 81^7.86W 0.01 mi
|
|
||||||
C
|
|
||||||
C# For location specified by x, y coordinates.
|
|
||||||
C
|
|
||||||
CTTGRID Byyyxxx 37^50.00N 81^00.00W 37^59.99N 81^09.99W
|
|
||||||
C
|
|
||||||
C# UTM location for Lowell-Dracut-Tyngsborough State Forest.
|
|
||||||
C
|
|
||||||
CTTUTM B6xxxyyy 19T 10 300000 4720000
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C# Location for the corral.
|
|
||||||
C
|
|
||||||
CTTCORRAL 37^55.50N 81^7.00W 0^0.02N
|
|
||||||
C
|
|
||||||
C# Compact messages - Fixed locations xx and object yyy where
|
|
||||||
C# Object numbers 100 - 199 = bicycle
|
|
||||||
C# Object numbers 200 - 299 = fire truck
|
|
||||||
C# Others = dog
|
|
||||||
C
|
|
||||||
CTTMACRO xx1yy B9xx*AB166*AA2B4C5B3B0A1yy
|
|
||||||
CTTMACRO xx2yy B9xx*AB170*AA3C4C7C3B0A2yy
|
|
||||||
CTTMACRO xxyyy B9xx*AB180*AA3A6C4A0Ayyy
|
|
||||||
C
|
|
||||||
CTTMACRO z Cz
|
|
||||||
C
|
|
||||||
C# Receive on channel 0, Transmit object reports on channel 1 with optional via path.
|
|
||||||
C# You probably want to put in a transmit delay on the APRStt channel so it
|
|
||||||
C# it doesn't start sending a response before the user releases PTT.
|
|
||||||
C# This is in 10 ms units so 100 means 1000 ms = 1 second.
|
|
||||||
C
|
|
||||||
C#TTOBJ 0 1 WIDE1-1
|
|
||||||
C#CHANNEL 0
|
|
||||||
C#DWAIT 100
|
|
||||||
C
|
|
||||||
C# Advertise gateway position with beacon.
|
|
||||||
C
|
|
||||||
C# OBEACON DELAY=0:15 EVERY=10:00 VIA=WIDE1-1 OBJNAME=WB2OSZ-tt SYMBOL=APRStt LAT=42^37.14N LONG=71^20.83W COMMENT="APRStt Gateway"
|
|
||||||
C
|
|
||||||
C
|
|
||||||
C# Sample speech responses.
|
|
||||||
C# Default is Morse code "R" for received OK and "?" for all errors.
|
|
||||||
C
|
|
||||||
C#TTERR OK SPEECH Message Received.
|
|
||||||
C#TTERR D_MSG SPEECH D not implemented.
|
|
||||||
C#TTERR INTERNAL SPEECH Internal error.
|
|
||||||
C#TTERR MACRO_NOMATCH SPEECH No definition for digit sequence.
|
|
||||||
C#TTERR BAD_CHECKSUM SPEECH Bad checksum on call.
|
|
||||||
C#TTERR INVALID_CALL SPEECH Invalid callsign.
|
|
||||||
C#TTERR INVALID_OBJNAME SPEECH Invalid object name.
|
|
||||||
C#TTERR INVALID_SYMBOL SPEECH Invalid symbol.
|
|
||||||
C#TTERR INVALID_LOC SPEECH Invalid location.
|
|
||||||
C#TTERR NO_CALL SPEECH No call or object name.
|
|
||||||
C#TTERR SATSQ SPEECH Satellite square must be 4 digits.
|
|
||||||
C#TTERR SUFFIX_NO_CALL SPEECH Send full call before using suffix.
|
|
||||||
C
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
if(NOT (WIN32 OR CYGWIN))
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/aclients.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/atest.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/decode_aprs.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/direwolf.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/gen_packets.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/kissutil.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/ll2utm.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/log2gpx.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/text2tt.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/tt2text.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
install(FILES "${CUSTOM_MAN_DIR}/utm2ll.1" DESTINATION ${INSTALL_MAN_DIR})
|
||||||
|
endif(NOT (WIN32 OR CYGWIN))
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue