Rename to JS8Call

This commit is contained in:
Jordan Sherer 2018-10-04 13:52:52 -04:00
parent d5c22a0c91
commit 75bf51072a
41 changed files with 140 additions and 140 deletions

View File

@ -38,7 +38,7 @@ QString APRSISClient::loginFrame(QString callsign){
auto loginFrame = QString("user %1 pass %2 ver %3\n"); auto loginFrame = QString("user %1 pass %2 ver %3\n");
loginFrame = loginFrame.arg(callsign); loginFrame = loginFrame.arg(callsign);
loginFrame = loginFrame.arg(hashCallsign(callsign)); loginFrame = loginFrame.arg(hashCallsign(callsign));
loginFrame = loginFrame.arg("FT8Call"); loginFrame = loginFrame.arg("JS8Call");
return loginFrame; return loginFrame;
} }
@ -210,7 +210,7 @@ void APRSISClient::enqueueSpot(QString theircall, QString grid, QString comment)
if(m_localCall.isEmpty()) return; if(m_localCall.isEmpty()) return;
auto geo = APRSISClient::grid2aprs(grid); auto geo = APRSISClient::grid2aprs(grid);
auto spotFrame = QString("%1>APRS,%2,TCPIP*:=%3/%4nFT8CALL %5\n"); auto spotFrame = QString("%1>APRS,%2,TCPIP*:=%3/%4nJS8 %5\n");
spotFrame = spotFrame.arg(theircall); spotFrame = spotFrame.arg(theircall);
spotFrame = spotFrame.arg(stripSSID(m_localCall)); spotFrame = spotFrame.arg(stripSSID(m_localCall));
spotFrame = spotFrame.arg(geo.first); spotFrame = spotFrame.arg(geo.first);

View File

@ -9,8 +9,8 @@ set (CPACK_PACKAGE_CONTACT "@PROJECT_CONTACT@")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "@PROJECT_SUMMARY_DESCRIPTION@") set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "@PROJECT_SUMMARY_DESCRIPTION@")
set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/COPYING") set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/COPYING")
set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
set (CPACK_PACKAGE_EXECUTABLES ft8call "@PROJECT_NAME@") set (CPACK_PACKAGE_EXECUTABLES js8call "@PROJECT_NAME@")
set (CPACK_CREATE_DESKTOP_LINKS ft8call) set (CPACK_CREATE_DESKTOP_LINKS js8call)
set (CPACK_STRIP_FILES TRUE) set (CPACK_STRIP_FILES TRUE)
# #
@ -24,7 +24,7 @@ if (CPACK_GENERATOR MATCHES "NSIS")
set (CPACK_SET_DESTDIR FALSE) set (CPACK_SET_DESTDIR FALSE)
set (CPACK_STRIP_FILES FALSE) # breaks Qt packaging on Windows set (CPACK_STRIP_FILES FALSE) # breaks Qt packaging on Windows
# set (CPACK_NSIS_INSTALL_ROOT "C:\\FT8Call") # set (CPACK_NSIS_INSTALL_ROOT "C:\\JS8Call")
if(CMAKE_CL_64) if(CMAKE_CL_64)
set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
@ -38,8 +38,8 @@ if (CPACK_GENERATOR MATCHES "NSIS")
# set the install/unistall icon used for the installer itself # set the install/unistall icon used for the installer itself
# There is a bug in NSI that does not handle full unix paths properly. # There is a bug in NSI that does not handle full unix paths properly.
set (CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\ft8call.ico") set (CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\js8call.ico")
set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\ft8call.ico") set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\js8call.ico")
# set the package header icon for MUI # set the package header icon for MUI
set (CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\installer_logo.bmp") set (CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\installer_logo.bmp")
# tell cpack to create links to the doc files # tell cpack to create links to the doc files
@ -47,13 +47,13 @@ if (CPACK_GENERATOR MATCHES "NSIS")
"@PROJECT_HOMEPAGE@" "@PROJECT_NAME@ Web Site" "@PROJECT_HOMEPAGE@" "@PROJECT_NAME@ Web Site"
) )
# Use the icon from wsjtx for add-remove programs # Use the icon from wsjtx for add-remove programs
set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\ft8call.exe") set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\js8call.exe")
set (CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") set (CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
set (CPACK_NSIS_HELP_LINK "@PROJECT_HOMEPAGE@") set (CPACK_NSIS_HELP_LINK "@PROJECT_HOMEPAGE@")
set (CPACK_NSIS_URL_INFO_ABOUT "@PROJECT_HOMEPAGE@") set (CPACK_NSIS_URL_INFO_ABOUT "@PROJECT_HOMEPAGE@")
set (CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}") set (CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}")
set (CPACK_NSIS_MUI_FINISHPAGE_RUN "ft8call.exe") set (CPACK_NSIS_MUI_FINISHPAGE_RUN "js8call.exe")
set (CPACK_NSIS_MODIFY_PATH ON) set (CPACK_NSIS_MODIFY_PATH ON)
endif () endif ()
@ -66,11 +66,11 @@ endif ()
if ("${CPACK_GENERATOR}" STREQUAL "DragNDrop") if ("${CPACK_GENERATOR}" STREQUAL "DragNDrop")
set (CPACK_DMG_VOLUME_NAME "@PROJECT_NAME@") set (CPACK_DMG_VOLUME_NAME "@PROJECT_NAME@")
set (CPACK_DMG_BACKGROUND_IMAGE "@PROJECT_SOURCE_DIR@/icons/Darwin/DragNDrop Background.png") set (CPACK_DMG_BACKGROUND_IMAGE "@PROJECT_SOURCE_DIR@/icons/Darwin/DragNDrop Background.png")
set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/ft8call_DMG.DS_Store") set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/js8call_DMG.DS_Store")
set (CPACK_BUNDLE_NAME "@WSJTX_BUNDLE_NAME@") set (CPACK_BUNDLE_NAME "@WSJTX_BUNDLE_NAME@")
set (CPACK_PACKAGE_ICON "@PROJECT_BINARY_DIR@/ft8call.icns") set (CPACK_PACKAGE_ICON "@PROJECT_BINARY_DIR@/js8call.icns")
set (CPACK_BUNDLE_ICON "@PROJECT_BINARY_DIR@/ft8call.icns") set (CPACK_BUNDLE_ICON "@PROJECT_BINARY_DIR@/js8call.icns")
set (CPACK_BUNDLE_STARTUP_COMMAND "@PROJECT_SOURCE_DIR@/Mac-ft8call-startup.sh") set (CPACK_BUNDLE_STARTUP_COMMAND "@PROJECT_SOURCE_DIR@/Mac-js8call-startup.sh")
set (CPACK_PACKAGING_INSTALL_PREFIX "/") set (CPACK_PACKAGING_INSTALL_PREFIX "/")
endif () endif ()
@ -78,9 +78,9 @@ if ("${CPACK_GENERATOR}" STREQUAL "WIX")
# Reset CPACK_PACKAGE_VERSION to deal with WiX restriction. # Reset CPACK_PACKAGE_VERSION to deal with WiX restriction.
# But the file names still use the full CMake_VERSION value: # But the file names still use the full CMake_VERSION value:
set (CPACK_PACKAGE_FILE_NAME set (CPACK_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_NAME}-@ft8call_VERSION@-${CPACK_SYSTEM_NAME}") "${CPACK_PACKAGE_NAME}-@js8call_VERSION@-${CPACK_SYSTEM_NAME}")
set (CPACK_SOURCE_PACKAGE_FILE_NAME set (CPACK_SOURCE_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_NAME}-@ft8call_VERSION@-Source") "${CPACK_PACKAGE_NAME}-@js8call_VERSION@-Source")
if (NOT CPACK_WIX_SIZEOF_VOID_P) if (NOT CPACK_WIX_SIZEOF_VOID_P)
set (CPACK_WIX_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@") set (CPACK_WIX_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")

View File

@ -22,7 +22,7 @@ Change this to the newest SDK available that you can install on your system (10.
Do not override this if you intend to build an official deployable installer.") Do not override this if you intend to build an official deployable installer.")
endif (APPLE) endif (APPLE)
project (ft8call C CXX Fortran) project (js8call C CXX Fortran)
# #
# CMake policies # CMake policies
@ -45,11 +45,11 @@ message (STATUS "Building ${CMAKE_PROJECT_NAME}-${wsjtx_VERSION}")
# #
# project information # project information
# #
set (PROJECT_NAME "FT8Call") set (PROJECT_NAME "JS8Call")
set (PROJECT_VENDOR "Jordan Sherer, KN4CRD") set (PROJECT_VENDOR "Jordan Sherer, KN4CRD")
set (PROJECT_CONTACT "Jordan Sherer <kn4crd@gmail.com>") set (PROJECT_CONTACT "Jordan Sherer <kn4crd@gmail.com>")
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2018 by Joe Taylor, K1JT, (C) 2018 by Jordan Sherer, KN4CRD") set (PROJECT_COPYRIGHT "Copyright (C) 2001-2018 by Joe Taylor, K1JT, (C) 2018 by Jordan Sherer, KN4CRD")
set (PROJECT_HOMEPAGE https://groups.io/g/ft8call) set (PROJECT_HOMEPAGE https://groups.io/g/js8call)
set (PROJECT_SUMMARY_DESCRIPTION "${PROJECT_NAME} - Digital Modes for Weak Signal Communicaitons in Amateur Radio.") set (PROJECT_SUMMARY_DESCRIPTION "${PROJECT_NAME} - Digital Modes for Weak Signal Communicaitons in Amateur Radio.")
set (PROJECT_DESCRIPTION "${PROJECT_SUMMARY_DESCRIPTION} set (PROJECT_DESCRIPTION "${PROJECT_SUMMARY_DESCRIPTION}
${PROJECT_NAME} is a computer program designed to facilitate amateur ${PROJECT_NAME} is a computer program designed to facilitate amateur
@ -628,7 +628,7 @@ set (all_C_and_CXXSRCS
set (TOP_LEVEL_RESOURCES set (TOP_LEVEL_RESOURCES
cty.dat cty.dat
icons/Darwin/FT8Call.iconset/icon_128x128.png icons/Darwin/JS8Call.iconset/icon_128x128.png
contrib/gpl-v3-logo.svg contrib/gpl-v3-logo.svg
artwork/splash.png artwork/splash.png
) )
@ -1110,7 +1110,7 @@ else (${OPENMP_FOUND} OR APPLE)
endif (${OPENMP_FOUND} OR APPLE) endif (${OPENMP_FOUND} OR APPLE)
# build the main application # build the main application
add_executable (ft8call MACOSX_BUNDLE add_executable (js8call MACOSX_BUNDLE
${wsjtx_CXXSRCS} ${wsjtx_CXXSRCS}
${wsjtx_GENUISRCS} ${wsjtx_GENUISRCS}
wsjtx.rc wsjtx.rc
@ -1119,10 +1119,10 @@ add_executable (ft8call MACOSX_BUNDLE
) )
if (WSJT_CREATE_WINMAIN) if (WSJT_CREATE_WINMAIN)
set_target_properties (ft8call PROPERTIES WIN32_EXECUTABLE ON) set_target_properties (js8call PROPERTIES WIN32_EXECUTABLE ON)
endif (WSJT_CREATE_WINMAIN) endif (WSJT_CREATE_WINMAIN)
set_target_properties (ft8call PROPERTIES set_target_properties (js8call PROPERTIES
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Darwin/Info.plist.in" MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Darwin/Info.plist.in"
MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}" MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}"
MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}" MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}"
@ -1135,36 +1135,36 @@ set_target_properties (ft8call PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER "org.k1jt.wsjtx" MACOSX_BUNDLE_GUI_IDENTIFIER "org.k1jt.wsjtx"
) )
target_include_directories (ft8call PRIVATE ${FFTW3_INCLUDE_DIRS}) target_include_directories (js8call PRIVATE ${FFTW3_INCLUDE_DIRS})
if (APPLE) if (APPLE)
target_link_libraries (ft8call wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES}) target_link_libraries (js8call wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
else () else ()
target_link_libraries (ft8call wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES}) target_link_libraries (js8call wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
if (OpenMP_C_FLAGS) if (OpenMP_C_FLAGS)
set_target_properties (ft8call PROPERTIES set_target_properties (js8call PROPERTIES
COMPILE_FLAGS "${OpenMP_C_FLAGS}" COMPILE_FLAGS "${OpenMP_C_FLAGS}"
LINK_FLAGS "${OpenMP_C_FLAGS}" LINK_FLAGS "${OpenMP_C_FLAGS}"
) )
endif () endif ()
set_target_properties (ft8call PROPERTIES set_target_properties (js8call PROPERTIES
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp
) )
if (WIN32) if (WIN32)
set_target_properties (ft8call PROPERTIES set_target_properties (js8call PROPERTIES
LINK_FLAGS -Wl,--stack,16777216 LINK_FLAGS -Wl,--stack,16777216
) )
endif () endif ()
endif () endif ()
qt5_use_modules (ft8call SerialPort) # not sure why the interface link library syntax above doesn't work qt5_use_modules (js8call SerialPort) # not sure why the interface link library syntax above doesn't work
# if (UNIX) # if (UNIX)
# if (NOT WSJT_SKIP_MANPAGES) # if (NOT WSJT_SKIP_MANPAGES)
# add_subdirectory (manpages) # add_subdirectory (manpages)
# add_dependencies (ft8call manpages) # add_dependencies (js8call manpages)
# endif (NOT WSJT_SKIP_MANPAGES) # endif (NOT WSJT_SKIP_MANPAGES)
# if (NOT APPLE) # if (NOT APPLE)
# add_subdirectory (debian) # add_subdirectory (debian)
# add_dependencies (ft8call debian) # add_dependencies (js8call debian)
# endif (NOT APPLE) # endif (NOT APPLE)
# endif (UNIX) # endif (UNIX)
@ -1172,7 +1172,7 @@ qt5_use_modules (ft8call SerialPort) # not sure why the interface link library s
# #
# installation # installation
# #
install (TARGETS ft8call install (TARGETS js8call
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
BUNDLE DESTINATION . COMPONENT runtime BUNDLE DESTINATION . COMPONENT runtime
) )
@ -1259,23 +1259,23 @@ configure_file (
if (NOT WIN32 AND NOT APPLE) if (NOT WIN32 AND NOT APPLE)
# install a desktop file so ft8call appears in the application start # install a desktop file so js8call appears in the application start
# menu with an icon # menu with an icon
install ( install (
FILES ft8call.desktop FILES js8call.desktop
DESTINATION /usr/share/applications DESTINATION /usr/share/applications
#COMPONENT runtime #COMPONENT runtime
) )
install ( install (
FILES icons/Unix/ft8call_icon.png FILES icons/Unix/js8call_icon.png
DESTINATION /usr/share/pixmaps DESTINATION /usr/share/pixmaps
#COMPONENT runtime #COMPONENT runtime
) )
execute_process(COMMAND ln -s /opt/ft8call/bin/ft8call lft8call) execute_process(COMMAND ln -s /opt/js8call/bin/js8call ljs8call)
install(FILES install(FILES
${CMAKE_BINARY_DIR}/lft8call DESTINATION /usr/bin/ RENAME ft8call ${CMAKE_BINARY_DIR}/ljs8call DESTINATION /usr/bin/ RENAME js8call
#COMPONENT runtime #COMPONENT runtime
) )
endif (NOT WIN32 AND NOT APPLE) endif (NOT WIN32 AND NOT APPLE)

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
WSJTX_BUNDLE="`echo "$0" | sed -e 's/\/Contents\/MacOS\/.*//'`" WSJTX_BUNDLE="`echo "$0" | sed -e 's/\/Contents\/MacOS\/.*//'`"
WSJTX_RESOURCES="$WSJTX_BUNDLE/Contents/Resources" WSJTX_RESOURCES="$WSJTX_BUNDLE/Contents/Resources"
WSJTX_TEMP="/tmp/ft8call/$UID" WSJTX_TEMP="/tmp/js8call/$UID"
echo "running $0" echo "running $0"
echo "WSJTX_BUNDLE: $WSJTX_BUNDLE" echo "WSJTX_BUNDLE: $WSJTX_BUNDLE"
@ -13,4 +13,4 @@ export "DYLD_LIBRARY_PATH=$WSJTX_RESOURCES/lib"
export "PATH=$WSJTX_RESOURCES/bin:$PATH" export "PATH=$WSJTX_RESOURCES/bin:$PATH"
#export #export
exec "$WSJTX_RESOURCES/bin/ft8call" exec "$WSJTX_RESOURCES/bin/js8call"

View File

@ -1,6 +1,6 @@
Notes on FT8Call Installation for Mac OS X Notes on JS8Call Installation for Mac OS X
(replace all instances of WSJT-X with FT8Call) (replace all instances of WSJT-X with JS8Call)
Notes on WSJT-X Installation for Mac OS X Notes on WSJT-X Installation for Mac OS X
----------------------------------------- -----------------------------------------

16
README
View File

@ -1,19 +1,19 @@
# FT8Call # JS8Call
FT8 has taken over the airwaves as the digital communication mode for making QSOs over HF/VHF/UHF. The mode has been widely popular as the latest offering in K1JTs WSJT-X application. FT8 is based on the same foundation as JT65, JT9, and WSPR modes for weak signal communication, but transmits faster with only slightly reduced sensitivity. FT8 has taken over the airwaves as the digital communication mode for making QSOs over HF/VHF/UHF. The mode has been widely popular as the latest offering in K1JTs WSJT-X application. FT8 is based on the same foundation as JT65, JT9, and WSPR modes for weak signal communication, but transmits faster with only slightly reduced sensitivity.
While FT8 is an incredibly robust weak signal mode, it is designed heavily to take advantage of short band openings on HF/VHF/UHF and only offers a minimal QSO framework. However, many operators are using these weak signal qualities to make successful QSOs on the HF bands where other modes fail. While FT8 is an incredibly robust weak signal mode, it is designed heavily to take advantage of short band openings on HF/VHF/UHF and only offers a minimal QSO framework. However, many operators are using these weak signal qualities to make successful QSOs on the HF bands where other modes fail.
FT8Call is an experiment to test the feasibility of a digital mode with the robustness of FT8, combined with a messaging and network protocol layer for weak signal communication on HF, using keyboard-to-keyboard style interface. FT8Call is heavily inspired by WSJT-X, Fldigi, and FSQCall and would not exist without the hard work and dedication of the many developers in the amateur radio community. JS8Call is an experiment to test the feasibility of a digital mode with the robustness of FT8, combined with a messaging and network protocol layer for weak signal communication on HF, using keyboard-to-keyboard style interface. JS8Call is heavily inspired by WSJT-X, Fldigi, and FSQCall and would not exist without the hard work and dedication of the many developers in the amateur radio community.
* Read more on the original design inspiration here: https://github.com/jsherer/ft8call * Read more on the original design inspiration here: https://github.com/jsherer/js8call
* For release announcements and discussion, join the FT8Call mailing list here: https://groups.io/g/ft8call * For release announcements and discussion, join the JS8Call mailing list here: https://groups.io/g/js8call
# Notice # Notice
FT8Call is a derivative of the WSJT-X application, restructured and redesigned for message passing using FT8 modulation. It is not supported by nor endorsed by the WSJT-X development group. While the WSJT-X group maintains copyright over the original work and code, FT8Call is a derivative work licensed under and in accordance with the terms of the GPLv3 license. The source code modifications are public and can be found in this repository: https://bitbucket.org/widefido/wsjtx/ JS8Call is a derivative of the WSJT-X application, restructured and redesigned for message passing using FT8 modulation. It is not supported by nor endorsed by the WSJT-X development group. While the WSJT-X group maintains copyright over the original work and code, JS8Call is a derivative work licensed under and in accordance with the terms of the GPLv3 license. The source code modifications are public and can be found in this repository: https://bitbucket.org/widefido/wsjtx/
# History # History
@ -22,11 +22,11 @@ FT8Call is a derivative of the WSJT-X application, restructured and redesigned f
* August 31, 2017 - Jordan, KN4CRD, did a little development and modified WSJT-X to support long-form QSOs using the existing FT8 protocol: https://sourceforge.net/p/wsjt/mailman/message/36020051/ He sent a video example to the WSJT-X group: https://widefido.wistia.com/medias/7bb1uq62ga * August 31, 2017 - Jordan, KN4CRD, did a little development and modified WSJT-X to support long-form QSOs using the existing FT8 protocol: https://sourceforge.net/p/wsjt/mailman/message/36020051/ He sent a video example to the WSJT-X group: https://widefido.wistia.com/medias/7bb1uq62ga
* January 8, 2018 - Jordan, KN4CRD, started working on the design of a long-form QSO application built on top of FT8 with a redesigned interface. * January 8, 2018 - Jordan, KN4CRD, started working on the design of a long-form QSO application built on top of FT8 with a redesigned interface.
* February 9, 2018 - Jordan, KN4CRD, submitted question to the WSJT-X group to see if there was any interest in pursuing the idea: https://sourceforge.net/p/wsjt/mailman/message/36221549/ * February 9, 2018 - Jordan, KN4CRD, submitted question to the WSJT-X group to see if there was any interest in pursuing the idea: https://sourceforge.net/p/wsjt/mailman/message/36221549/
* February 10, 2018 - Jordan KN4CRD, Julian OH8STN, John N0JDS, and the Portable Digital QRP group did an experiment using FSQ. The idea of FT8Call, combining FT8, long-form QSOs, and FSQCall like features was born. * February 10, 2018 - Jordan KN4CRD, Julian OH8STN, John N0JDS, and the Portable Digital QRP group did an experiment using FSQ. The idea of JS8Call, combining FT8, long-form QSOs, and FSQCall like features was born.
* February 11, 2018 - Jordan, KN4CRD, inquired about the idea of integrating long-form messages into WSJT-X: https://sourceforge.net/p/wsjt/mailman/message/36223372/ * February 11, 2018 - Jordan, KN4CRD, inquired about the idea of integrating long-form messages into WSJT-X: https://sourceforge.net/p/wsjt/mailman/message/36223372/
* February 12, 2018 - Joe Taylor, K1JT, wrote back: https://sourceforge.net/p/wsjt/mailman/message/36224507/ saying that “Please don't let my comment discourage you from proceeding as you wish, toward something new.” * February 12, 2018 - Joe Taylor, K1JT, wrote back: https://sourceforge.net/p/wsjt/mailman/message/36224507/ saying that “Please don't let my comment discourage you from proceeding as you wish, toward something new.”
* March 4, 2018 - Jordan, KN4CRD, published a design document for FT8Call: https://github.com/jsherer/ft8call * March 4, 2018 - Jordan, KN4CRD, published a design document for JS8Call: https://github.com/jsherer/js8call
* July 6, 2018 - Version 0.0.1 of FT8Call released to the development group * July 6, 2018 - Version 0.0.1 of JS8Call released to the development group
* July 15, 2018 - Version 0.1 released - a dozen testers * July 15, 2018 - Version 0.1 released - a dozen testers
* July 21, 2018 - Version 0.2 released - 75 testers * July 21, 2018 - Version 0.2 released - 75 testers
* July 27, 2018 - Version 0.3 released - 150 testers * July 27, 2018 - Version 0.3 released - 150 testers

View File

@ -13,25 +13,25 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
{ {
ui->setupUi(this); ui->setupUi(this);
ui->labelTxt->setText ("<h2>" + QString {"FT8Call v" ui->labelTxt->setText ("<h2>" + QString {"JS8Call v"
+ QCoreApplication::applicationVersion () + QCoreApplication::applicationVersion ()
+ " " + revision ()}.simplified () + "</h2><br />" + " " + revision ()}.simplified () + "</h2><br />"
"FT8Call is a derivative of the WSJT-X application, " "JS8Call is a derivative of the WSJT-X application, "
"restructured and redesigned for message passing. <br/>" "restructured and redesigned for message passing. <br/>"
"It is not supported by nor endorsed by the WSJT-X " "It is not supported by nor endorsed by the WSJT-X "
"development group. <br/>FT8Call is " "development group. <br/>JS8Call is "
"licensed under and in accordance with the terms " "licensed under and in accordance with the terms "
"of the <a href=\"https://www.gnu.org/licenses/gpl-3.0.txt\">GPLv3 license</a>.<br/>" "of the <a href=\"https://www.gnu.org/licenses/gpl-3.0.txt\">GPLv3 license</a>.<br/>"
"The source code modifications are public and can be found in <a href=\"https://bitbucket.org/widefido/wsjtx/\">this repository</a>.<br/><br/>" "The source code modifications are public and can be found in <a href=\"https://bitbucket.org/widefido/wsjtx/\">this repository</a>.<br/><br/>"
"FT8Call is heavily inspired by WSJT-X, Fldigi, " "JS8Call is heavily inspired by WSJT-X, Fldigi, "
"and FSQCall <br/>and would not exist without the hard work and " "and FSQCall <br/>and would not exist without the hard work and "
"dedication of the many <br/>developers in the amateur radio " "dedication of the many <br/>developers in the amateur radio "
"community.<br /><br />" "community.<br /><br />"
"FT8Call stands on the shoulder of giants...the takeoff angle " "JS8Call stands on the shoulder of giants...the takeoff angle "
"is better up there.<br /><br />" "is better up there.<br /><br />"
"A special thanks goes out to the FT8Call development team:<br/><br/><strong>" "A special thanks goes out to the JS8Call development team:<br/><br/><strong>"
"KC9QNE, " "KC9QNE, "
"KI6SSI, " "KI6SSI, "
"K0OG, " "K0OG, "
@ -42,7 +42,7 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
"VA3OSO, " "VA3OSO, "
"VK1MIC, " "VK1MIC, "
"W0FW,</strong><br/><br/>and the many other amateur radio operators who have given " "W0FW,</strong><br/><br/>and the many other amateur radio operators who have given "
"FT8Call a chance."); "JS8Call a chance.");
} }
CAboutDlg::~CAboutDlg() CAboutDlg::~CAboutDlg()

View File

@ -14,7 +14,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>About FT8Call</string> <string>About JS8Call</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>

View File

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

@ -25,9 +25,9 @@ convert '/tmp/image-%d.png[0-1]' -background transparent \
\( -clone 1 -resize 128 -compress none \) \ \( -clone 1 -resize 128 -compress none \) \
\( -clone 1 -resize 256 -compress Zip \) \ \( -clone 1 -resize 256 -compress Zip \) \
-delete 1 -delete 0 \ -delete 1 -delete 0 \
-alpha remove ../icons/windows-icons/ft8call.ico -alpha remove ../icons/windows-icons/js8call.ico
rm /tmp/image-0.png /tmp/image-1.png rm /tmp/image-0.png /tmp/image-1.png
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/ft8call.ico identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/js8call.ico
# #
#inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \ #inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \
# convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp # convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
@ -37,18 +37,18 @@ identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/instal
# #
# Mac # Mac
# #
mkdir -p ../icons/Darwin/FT8Call.iconset mkdir -p ../icons/Darwin/JS8Call.iconset
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_16x16@2x.png -w 32 -h 32 icon_128.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_16x16@2x.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_32x32.png -w 32 -h 32 icon_128.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_32x32.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_32x32@2x.png -w 64 -h 64 icon_128.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_32x32@2x.png -w 64 -h 64 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_128x128.png -w 128 -h 128 icon_1024.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_128x128.png -w 128 -h 128 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_128x128@2x.png -w 256 -h 256 icon_1024.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_128x128@2x.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_256x256.png -w 256 -h 256 icon_1024.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_256x256.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_256x256@2x.png -w 512 -h 512 icon_1024.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_256x256@2x.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_512x512.png -w 512 -h 512 icon_1024.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_512x512.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_512x512@2x.png -w 1024 -h 1024 icon_1024.svg inkscape -z -e ../icons/Darwin/JS8Call.iconset/icon_512x512@2x.png -w 1024 -h 1024 icon_1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/FT8Call.iconset/* identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/JS8Call.iconset/*
# generic globe iconset for utilities # generic globe iconset for utilities
mkdir -p ../icons/Darwin/wsjt.iconset mkdir -p ../icons/Darwin/wsjt.iconset
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg
@ -69,5 +69,5 @@ identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' "../icons/Darwin/DragNDrop Ba
# #
# KDE & Gnome # KDE & Gnome
# #
inkscape -z -e ../icons/Unix/ft8call_icon.png -w 128 -h 128 icon_1024.svg inkscape -z -e ../icons/Unix/js8call_icon.png -w 128 -h 128 icon_1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Unix/ft8call_icon.png identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Unix/js8call_icon.png

View File

@ -61,9 +61,9 @@ DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString
tryUnpack(); tryUnpack();
} }
DecodedText::DecodedText (QString const& ft8callmessage): DecodedText::DecodedText (QString const& js8callmessage):
frameType_(Varicode::FrameUnknown), frameType_(Varicode::FrameUnknown),
message_(ft8callmessage), message_(js8callmessage),
isBeacon_(false), isBeacon_(false),
isAlt_(false) isAlt_(false)
{ {

View File

@ -31,7 +31,7 @@ class DecodedText
{ {
public: public:
explicit DecodedText (QString const& message, bool, QString const& my_grid); explicit DecodedText (QString const& message, bool, QString const& my_grid);
explicit DecodedText (QString const& ft8callmessage); explicit DecodedText (QString const& js8callmessage);
bool tryUnpack(); bool tryUnpack();
bool tryUnpackBeacon(); bool tryUnpackBeacon();

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 571 B

After

Width:  |  Height:  |  Size: 571 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 282 KiB

After

Width:  |  Height:  |  Size: 282 KiB

View File

@ -1,9 +1,9 @@
[Desktop Entry] [Desktop Entry]
Version=1.0 Version=1.0
Name=ft8call Name=js8call
Comment=Amateur Radio Weak Signal Operating Comment=Amateur Radio Weak Signal Operating
Exec=ft8call Exec=js8call
Icon=ft8call_icon Icon=js8call_icon
Terminal=false Terminal=false
X-MultipleArgs=false X-MultipleArgs=false
Type=Application Type=Application

View File

@ -1,5 +1,5 @@
/** /**
* This file is part of FT8Call. * This file is part of JS8Call.
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
/** /**
* This file is part of FT8Call. * This file is part of JS8Call.
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -147930,7 +147930,7 @@ const Tuple JSC::list[524288] = {
{"LOSCALZO", 8, 413484}, {"LOSCALZO", 8, 413484},
{"KDTRAVEL", 8, 413489}, {"KDTRAVEL", 8, 413489},
{"HAIRCLUP", 8, 413502}, {"HAIRCLUP", 8, 413502},
{"FT8CALL", 7, 69}, {"JS8CALL", 7, 69},
{"JS8CALL", 7, 71}, {"JS8CALL", 7, 71},
{"JSQCALL", 7, 73}, {"JSQCALL", 7, 73},
{"ALLCALL", 7, 81}, {"ALLCALL", 7, 81},

View File

@ -1,5 +1,5 @@
/** /**
* This file is part of FT8Call. * This file is part of JS8Call.
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -90,7 +90,7 @@ const Tuple JSC::map[524288] = {
{"~", 1, 66}, {"~", 1, 66},
{"\\", 1, 67}, {"\\", 1, 67},
{"FT8", 3, 68}, {"FT8", 3, 68},
{"FT8CALL", 7, 69}, {"JS8CALL", 7, 69},
{"JS8", 3, 70}, {"JS8", 3, 70},
{"JS8CALL", 7, 71}, {"JS8CALL", 7, 71},
{"JSQSO", 5, 72}, {"JSQSO", 5, 72},

View File

@ -6,7 +6,7 @@
namespace namespace
{ {
auto logFileName = "ft8call_log.adi"; auto logFileName = "js8call_log.adi";
auto countryFileName = "cty.dat"; auto countryFileName = "cty.dat";
} }

View File

@ -112,10 +112,10 @@ void LogQSO::accept()
m_comments=comments; m_comments=comments;
QString strDialFreq(QString::number(m_dialFreq / 1.e6,'f',6)); QString strDialFreq(QString::number(m_dialFreq / 1.e6,'f',6));
operator_call = ui->loggedOperator->text(); operator_call = ui->loggedOperator->text();
//Log this QSO to ADIF file "ft8call_log.adi" //Log this QSO to ADIF file "js8call_log.adi"
QString filename = "ft8call_log.adi"; // TODO allow user to set QString filename = "js8call_log.adi"; // TODO allow user to set
ADIF adifile; ADIF adifile;
auto adifilePath = QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("ft8call_log.adi"); auto adifilePath = QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("js8call_log.adi");
adifile.init(adifilePath); adifile.init(adifilePath);
QByteArray ADIF {adifile.QSOToADIF (hisCall, hisGrid, mode, rptSent, rptRcvd, m_dateTimeOn, m_dateTimeOff, band QByteArray ADIF {adifile.QSOToADIF (hisCall, hisGrid, mode, rptSent, rptRcvd, m_dateTimeOn, m_dateTimeOff, band
@ -137,8 +137,8 @@ void LogQSO::accept()
} }
} }
//Log this QSO to file "ft8call.log" //Log this QSO to file "js8call.log"
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("ft8call.log")}; static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("js8call.log")};
if(!f.open(QIODevice::Text | QIODevice::Append)) { if(!f.open(QIODevice::Text | QIODevice::Append)) {
MessageBox::warning_message (this, tr ("Log file error"), MessageBox::warning_message (this, tr ("Log file error"),
tr ("Cannot open \"%1\" for append").arg (f.fileName ()), tr ("Cannot open \"%1\" for append").arg (f.fileName ()),

View File

@ -108,7 +108,7 @@ int main(int argc, char *argv[])
// Override programs executable basename as application name. // Override programs executable basename as application name.
//a.setApplicationName ("WSJT-X"); //a.setApplicationName ("WSJT-X");
a.setApplicationName("FT8Call"); a.setApplicationName("JS8Call");
a.setApplicationVersion (version ()); a.setApplicationVersion (version ());
#if QT_VERSION >= 0x050200 #if QT_VERSION >= 0x050200

View File

@ -173,7 +173,7 @@ namespace
{ {
Radio::Frequency constexpr default_frequency {14078000}; Radio::Frequency constexpr default_frequency {14078000};
QRegExp message_alphabet {"[^\\x00-\\x1F]*"}; // base alphabet supported by FT8CALL QRegExp message_alphabet {"[^\\x00-\\x1F]*"}; // base alphabet supported by JS8CALL
// grid exact match excluding RR73 // grid exact match excluding RR73
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
@ -1422,7 +1422,7 @@ QDate eol(2018, 10, 29);
void MainWindow::expiry_warning_message() void MainWindow::expiry_warning_message()
{ {
if(QDateTime::currentDateTimeUtc().date() > eol){ if(QDateTime::currentDateTimeUtc().date() > eol){
MessageBox::critical_message (this, QString("This pre-release development build of FT8Call has expired. Please upgrade to the latest version.")); MessageBox::critical_message (this, QString("This pre-release development build of JS8Call has expired. Please upgrade to the latest version."));
close(); close();
return; return;
} }
@ -1436,7 +1436,7 @@ void MainWindow::not_GA_warning_message ()
QString("This version of %1 is a pre-release development\n" QString("This version of %1 is a pre-release development\n"
"build and will expire after %2 (UTC), upon which you\n" "build and will expire after %2 (UTC), upon which you\n"
"will need to upgrade to the latest version. \n\n" "will need to upgrade to the latest version. \n\n"
"Use of development versions of FT8Call are at your own risk \n" "Use of development versions of JS8Call are at your own risk \n"
"and carry a responsiblity to report any problems to:\n" "and carry a responsiblity to report any problems to:\n"
"Jordan Sherer (KN4CRD) kn4crd@gmail.com\n\n").arg(QApplication::applicationName()).arg(eol.toString())); "Jordan Sherer (KN4CRD) kn4crd@gmail.com\n\n").arg(QApplication::applicationName()).arg(eol.toString()));
@ -2996,7 +2996,7 @@ void MainWindow::on_actionCopyright_Notice_triggered()
"K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, " "K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, "
"IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; " "IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; "
"Philip Karn, KA9Q; and other members of the WSJT Development Group.\n\n" "Philip Karn, KA9Q; and other members of the WSJT Development Group.\n\n"
"Further, the source code of FT8Call contains material Copyright (C) " "Further, the source code of JS8Call contains material Copyright (C) "
"2018 by Jordan Sherer, KN4CRD.\""); "2018 by Jordan Sherer, KN4CRD.\"");
MessageBox::warning_message(this, message); MessageBox::warning_message(this, message);
} }
@ -3614,15 +3614,15 @@ void MainWindow::readFromStdout() //readFromStdout
DecodedText decodedtext {QString::fromUtf8 (t.constData ()).remove (QRegularExpression {"\r|\n"}), "FT8" == m_mode && DecodedText decodedtext {QString::fromUtf8 (t.constData ()).remove (QRegularExpression {"\r|\n"}), "FT8" == m_mode &&
ui->cbVHFcontest->isChecked(), m_config.my_grid ()}; ui->cbVHFcontest->isChecked(), m_config.my_grid ()};
// only display frames that are FT8Call frames (should decrease false decodes by at least 12%) // only display frames that are JS8Call frames (should decrease false decodes by at least 12%)
int bits = decodedtext.bits(); int bits = decodedtext.bits();
bool bValidFrame = ( bool bValidFrame = (
decodedtext.snr() > -24 && decodedtext.snr() > -24 &&
(bits == Varicode::FT8Call || (bits == Varicode::JS8Call ||
((bits & Varicode::FT8CallFirst) == Varicode::FT8CallFirst) || ((bits & Varicode::JS8CallFirst) == Varicode::JS8CallFirst) ||
((bits & Varicode::FT8CallLast) == Varicode::FT8CallLast) || ((bits & Varicode::JS8CallLast) == Varicode::JS8CallLast) ||
((bits & Varicode::FT8CallReserved) == 0 /*Varicode::FT8CallReserved*/)) // This is unused...so is invalid at this time... ((bits & Varicode::JS8CallReserved) == 0 /*Varicode::JS8CallReserved*/)) // This is unused...so is invalid at this time...
); );
qDebug() << "valid" << bValidFrame << "decoded text" << decodedtext.message(); qDebug() << "valid" << bValidFrame << "decoded text" << decodedtext.message();
@ -3661,7 +3661,7 @@ void MainWindow::readFromStdout() //readFromStdout
d.isBuffered = false; d.isBuffered = false;
// if we have any "first" frame, and a buffer is already established, clear it... // if we have any "first" frame, and a buffer is already established, clear it...
if(((d.bits & Varicode::FT8CallFirst) == Varicode::FT8CallFirst) && m_messageBuffer.contains(d.freq/10*10)){ if(((d.bits & Varicode::JS8CallFirst) == Varicode::JS8CallFirst) && m_messageBuffer.contains(d.freq/10*10)){
qDebug() << "first message encountered, clearing existing buffer" << (d.freq/10*10); qDebug() << "first message encountered, clearing existing buffer" << (d.freq/10*10);
m_messageBuffer.remove(d.freq/10*10); m_messageBuffer.remove(d.freq/10*10);
} }
@ -3735,7 +3735,7 @@ void MainWindow::readFromStdout() //readFromStdout
d.extra = parts.length() > 2 ? parts.mid(3).join(" ") : ""; d.extra = parts.length() > 2 ? parts.mid(3).join(" ") : "";
// if the command is a buffered command and its not the last frame OR we have from or to in a separate message (compound call) // if the command is a buffered command and its not the last frame OR we have from or to in a separate message (compound call)
if((Varicode::isCommandBuffered(d.cmd) && (d.bits & Varicode::FT8CallLast) != Varicode::FT8CallLast) || d.from == "<....>" || d.to == "<....>"){ if((Varicode::isCommandBuffered(d.cmd) && (d.bits & Varicode::JS8CallLast) != Varicode::JS8CallLast) || d.from == "<....>" || d.to == "<....>"){
qDebug() << "buffering cmd" << d.cmd << d.from << d.to; qDebug() << "buffering cmd" << d.cmd << d.from << d.to;
m_messageBuffer[d.freq/10*10].cmd = d; m_messageBuffer[d.freq/10*10].cmd = d;
m_messageBuffer[d.freq/10*10].msgs.clear(); m_messageBuffer[d.freq/10*10].msgs.clear();
@ -6162,7 +6162,7 @@ QStringList MainWindow::buildMessageFrames(const QString &text){
bool MainWindow::prepareNextMessageFrame() bool MainWindow::prepareNextMessageFrame()
{ {
m_i3bit = Varicode::FT8Call; m_i3bit = Varicode::JS8Call;
QString frame = popMessageFrame(); QString frame = popMessageFrame();
if(frame.isEmpty()){ if(frame.isEmpty()){
@ -6175,10 +6175,10 @@ bool MainWindow::prepareNextMessageFrame()
int sent = count - m_txFrameQueue.count(); int sent = count - m_txFrameQueue.count();
if(sent == 1){ if(sent == 1){
m_i3bit |= Varicode::FT8CallFirst; m_i3bit |= Varicode::JS8CallFirst;
} }
if(count == sent){ if(count == sent){
m_i3bit |= Varicode::FT8CallLast; m_i3bit |= Varicode::JS8CallLast;
} }
ui->startTxButton->setText(QString("Sending (%1/%2)").arg(sent).arg(count)); ui->startTxButton->setText(QString("Sending (%1/%2)").arg(sent).arg(count));
@ -6312,7 +6312,7 @@ void MainWindow::prepareBeacon(){
QString mycall = m_config.my_callsign(); QString mycall = m_config.my_callsign();
QString mygrid = m_config.my_grid().left(4); QString mygrid = m_config.my_grid().left(4);
// FT8Call Style // JS8Call Style
if(m_txBeaconQueue.isEmpty()){ if(m_txBeaconQueue.isEmpty()){
lines.append(QString("%1: BEACON %2").arg(mycall).arg(mygrid)); lines.append(QString("%1: BEACON %2").arg(mycall).arg(mygrid));
} else { } else {
@ -6814,12 +6814,12 @@ void MainWindow::on_actionErase_FoxQSO_txt_triggered()
} }
} }
void MainWindow::on_actionErase_ft8call_log_adi_triggered() void MainWindow::on_actionErase_js8call_log_adi_triggered()
{ {
int ret = MessageBox::query_message (this, tr ("Confirm Erase"), int ret = MessageBox::query_message (this, tr ("Confirm Erase"),
tr ("Are you sure you want to erase file ft8call_log.adi?")); tr ("Are you sure you want to erase file js8call_log.adi?"));
if(ret==MessageBox::Yes) { if(ret==MessageBox::Yes) {
QFile f {m_config.writeable_data_dir ().absoluteFilePath ("ft8call_log.adi")}; QFile f {m_config.writeable_data_dir ().absoluteFilePath ("js8call_log.adi")};
f.remove(); f.remove();
} }
} }
@ -7683,7 +7683,7 @@ void MainWindow::on_tableWidgetRXAll_cellDoubleClicked(int row, int col){
} }
activityText.append(d.text); activityText.append(d.text);
isLast = (d.bits & Varicode::FT8CallLast) == Varicode::FT8CallLast; isLast = (d.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast;
if(isLast){ if(isLast){
// can also use \u0004 \u2666 \u2404 // can also use \u0004 \u2666 \u2404
activityText.append(" \u2301 "); activityText.append(" \u2301 ");
@ -8364,7 +8364,7 @@ bool MainWindow::shortList(QString callsign)
void MainWindow::pskSetLocal () void MainWindow::pskSetLocal ()
{ {
psk_Reporter->setLocalStation(m_config.my_callsign (), m_config.my_grid (), psk_Reporter->setLocalStation(m_config.my_callsign (), m_config.my_grid (),
m_config.my_station(), QString {"FT8Call v" + version() }.simplified ()); m_config.my_station(), QString {"JS8Call v" + version() }.simplified ());
} }
void MainWindow::aprsSetLocal () void MainWindow::aprsSetLocal ()
@ -8990,8 +8990,8 @@ void MainWindow::processRxActivity() {
markOffsetRecent(d.freq); markOffsetRecent(d.freq);
#endif #endif
bool isFirst = (d.bits & Varicode::FT8CallFirst) == Varicode::FT8CallFirst; bool isFirst = (d.bits & Varicode::JS8CallFirst) == Varicode::JS8CallFirst;
bool isLast = (d.bits & Varicode::FT8CallLast) == Varicode::FT8CallLast; bool isLast = (d.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast;
// if we're the last message, let's display our EOT character // if we're the last message, let's display our EOT character
if (isLast) { if (isLast) {
@ -9035,10 +9035,10 @@ void MainWindow::processCompoundActivity() {
// if we don't have an initialized command, skip... // if we don't have an initialized command, skip...
int bits = buffer.cmd.bits; int bits = buffer.cmd.bits;
bool validBits = ( bool validBits = (
bits == Varicode::FT8Call || bits == Varicode::JS8Call ||
((bits & Varicode::FT8CallFirst) == Varicode::FT8CallFirst) || ((bits & Varicode::JS8CallFirst) == Varicode::JS8CallFirst) ||
((bits & Varicode::FT8CallLast) == Varicode::FT8CallLast) || ((bits & Varicode::JS8CallLast) == Varicode::JS8CallLast) ||
((bits & Varicode::FT8CallReserved) == Varicode::FT8CallReserved) ((bits & Varicode::JS8CallReserved) == Varicode::JS8CallReserved)
); );
if (!validBits) { if (!validBits) {
qDebug() << "-> buffer.cmd bits is invalid...skip"; qDebug() << "-> buffer.cmd bits is invalid...skip";
@ -9064,7 +9064,7 @@ void MainWindow::processCompoundActivity() {
buffer.cmd.isCompound = true; buffer.cmd.isCompound = true;
buffer.cmd.utcTimestamp = qMin(buffer.cmd.utcTimestamp, d.utcTimestamp); buffer.cmd.utcTimestamp = qMin(buffer.cmd.utcTimestamp, d.utcTimestamp);
if ((d.bits & Varicode::FT8CallLast) == Varicode::FT8CallLast) { if ((d.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast) {
buffer.cmd.bits = d.bits; buffer.cmd.bits = d.bits;
} }
} }
@ -9075,12 +9075,12 @@ void MainWindow::processCompoundActivity() {
buffer.cmd.isCompound = true; buffer.cmd.isCompound = true;
buffer.cmd.utcTimestamp = qMin(buffer.cmd.utcTimestamp, d.utcTimestamp); buffer.cmd.utcTimestamp = qMin(buffer.cmd.utcTimestamp, d.utcTimestamp);
if ((d.bits & Varicode::FT8CallLast) == Varicode::FT8CallLast) { if ((d.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast) {
buffer.cmd.bits = d.bits; buffer.cmd.bits = d.bits;
} }
} }
if ((buffer.cmd.bits & Varicode::FT8CallLast) != Varicode::FT8CallLast) { if ((buffer.cmd.bits & Varicode::JS8CallLast) != Varicode::JS8CallLast) {
qDebug() << "-> still not last message...skip"; qDebug() << "-> still not last message...skip";
continue; continue;
} }
@ -9133,7 +9133,7 @@ void MainWindow::processBufferedActivity() {
continue; continue;
} }
if ((buffer.msgs.last().bits & Varicode::FT8CallLast) != Varicode::FT8CallLast) { if ((buffer.msgs.last().bits & Varicode::JS8CallLast) != Varicode::JS8CallLast) {
continue; continue;
} }
@ -9167,7 +9167,7 @@ void MainWindow::processBufferedActivity() {
if (valid) { if (valid) {
buffer.cmd.bits |= Varicode::FT8CallLast; buffer.cmd.bits |= Varicode::JS8CallLast;
buffer.cmd.text = message; buffer.cmd.text = message;
buffer.cmd.isBuffered = true; buffer.cmd.isBuffered = true;
m_rxCommandQueue.append(buffer.cmd); m_rxCommandQueue.append(buffer.cmd);
@ -9263,7 +9263,7 @@ void MainWindow::processCommandActivity() {
if(!d.text.isEmpty()){ if(!d.text.isEmpty()){
ad.text += d.text; ad.text += d.text;
} }
bool isLast = (ad.bits & Varicode::FT8CallLast) == Varicode::FT8CallLast; bool isLast = (ad.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast;
if (isLast) { if (isLast) {
// can also use \u0004 \u2666 \u2404 // can also use \u0004 \u2666 \u2404
ad.text += QString(" \u2301 "); ad.text += QString(" \u2301 ");
@ -9879,7 +9879,7 @@ void MainWindow::displayBandActivity() {
if (item.isLowConfidence) { if (item.isLowConfidence) {
item.text = QString("[%1]").arg(item.text); item.text = QString("[%1]").arg(item.text);
} }
if ((item.bits & Varicode::FT8CallLast) == Varicode::FT8CallLast) { if ((item.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast) {
// can also use \u0004 \u2666 \u2404 // can also use \u0004 \u2666 \u2404
item.text = QString("%1 \u2301 ").arg(item.text); item.text = QString("%1 \u2301 ").arg(item.text);
} }

View File

@ -250,7 +250,7 @@ private slots:
void bumpFqso(int n); void bumpFqso(int n);
void on_actionErase_ALL_TXT_triggered(); void on_actionErase_ALL_TXT_triggered();
void on_actionErase_FoxQSO_txt_triggered(); void on_actionErase_FoxQSO_txt_triggered();
void on_actionErase_ft8call_log_adi_triggered(); void on_actionErase_js8call_log_adi_triggered();
void startTx(); void startTx();
void startTx2(); void startTx2();
void startP1(); void startP1();

View File

@ -17,7 +17,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>FT8Call</string> <string>JS8Call</string>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
@ -4733,7 +4733,7 @@ list. The list can be maintained in Settings (F2).</string>
<addaction name="actionOpen_log_directory"/> <addaction name="actionOpen_log_directory"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionErase_ALL_TXT"/> <addaction name="actionErase_ALL_TXT"/>
<addaction name="actionErase_ft8call_log_adi"/> <addaction name="actionErase_js8call_log_adi"/>
</widget> </widget>
<addaction name="menuFile"/> <addaction name="menuFile"/>
<addaction name="menuConfig"/> <addaction name="menuConfig"/>
@ -4771,7 +4771,7 @@ list. The list can be maintained in Settings (F2).</string>
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text"> <property name="text">
<string>About FT8Call</string> <string>About JS8Call</string>
</property> </property>
</action> </action>
<action name="actionWide_Waterfall"> <action name="actionWide_Waterfall">
@ -4949,9 +4949,9 @@ list. The list can be maintained in Settings (F2).</string>
<string>Erase ALL.TXT</string> <string>Erase ALL.TXT</string>
</property> </property>
</action> </action>
<action name="actionErase_ft8call_log_adi"> <action name="actionErase_js8call_log_adi">
<property name="text"> <property name="text">
<string>Erase ft8call_log.adi</string> <string>Erase js8call_log.adi</string>
</property> </property>
</action> </action>
<action name="actionConvert_JT9_x_to_RTTY"> <action name="actionConvert_JT9_x_to_RTTY">

View File

@ -1,3 +1,3 @@
echo make echo make
echo cp wsjtx ft8call echo cp wsjtx js8call
echo linuxdeployqt ./ft8call -appimage -bundle-non-qt-libs -no-strip -no-translations echo linuxdeployqt ./js8call -appimage -bundle-non-qt-libs -no-strip -no-translations

View File

@ -33,6 +33,6 @@ QString version (bool include_patch)
QString program_title (QString const& revision) QString program_title (QString const& revision)
{ {
QString id {"FT8Call de KN4CRD (v%1) a derivative of WSJT-X by K1JT"}; QString id {"JSQCall de KN4CRD (v%1)"};
return id.arg(QCoreApplication::applicationVersion ()); return id.arg(QCoreApplication::applicationVersion ());
} }

View File

@ -1,5 +1,5 @@
/** /**
* This file is part of FT8Call. * This file is part of JS8Call.
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View File

@ -17,10 +17,10 @@ class Varicode
public: public:
// frame type transmitted via itype and decoded by the ft8 decoded // frame type transmitted via itype and decoded by the ft8 decoded
enum TransmissionType { enum TransmissionType {
FT8Call = 0, // [000] <- any other frame of the message JS8Call = 0, // [000] <- any other frame of the message
FT8CallFirst = 1, // [001] <- the first frame of a message JS8CallFirst = 1, // [001] <- the first frame of a message
FT8CallLast = 2, // [010] <- the last frame of a message JS8CallLast = 2, // [010] <- the last frame of a message
FT8CallReserved = 4, // [100] <- a reserved flag for future use... JS8CallReserved = 4, // [100] <- a reserved flag for future use...
}; };
enum FrameType { enum FrameType {

View File

@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "icons/windows-icons/ft8call.ico" IDI_ICON1 ICON DISCARDABLE "icons/windows-icons/js8call.ico"