Changes to integrate into WSJT-X build system

A  separate install  of the  portaudio  library is  now required,  see
"doc/building on MS Windows.txt" for a suitable recipe.

The map65  code base  is still  MS Windows specific  in some  areas so
don't expect successful builds on Linux or macOS yet.
This commit is contained in:
Bill Somerville 2021-04-10 12:25:28 +01:00
parent 769e00ab88
commit 74bd3c1d0c
No known key found for this signature in database
GPG Key ID: D864B06D1E81618F
24 changed files with 305 additions and 1750 deletions

View File

@ -0,0 +1,47 @@
# - Try to find portaudio
#
# Once done, this will define:
#
# portaudio_FOUND - system has portaudio
# portaudio_INCLUDE_DIRS - the portaudio include directories
# portaudio_LIBRARIES - link these to use portaudio
# portaudio_LIBRARY_DIRS - required shared/dynamic libraries are here
#
# If portaudio_STATIC is TRUE then static linking will be assumed
#
include (LibFindMacros)
set (portaudio_LIBRARY_DIRS)
# pkg-config?
find_path (__portaudio_pc_path NAMES portaudio-2.0.pc
PATH_SUFFIXES lib/pkgconfig lib64/pkgconfig
)
if (__portaudio_pc_path)
set (__pc_path $ENV{PKG_CONFIG_PATH})
list (APPEND __pc_path "${__portaudio_pc_path}")
set (ENV{PKG_CONFIG_PATH} "${__pc_path}")
unset (__pc_path CACHE)
endif ()
unset (__portaudio_pc_path CACHE)
# Use pkg-config to get hints about paths, libs and, flags
unset (__pkg_config_checked_hamlib CACHE)
libfind_pkg_check_modules (PORTAUDIO portaudio-2.0)
if (portaudio_STATIC)
set (portaudio_PROCESS_INCLUDES PORTAUDIO_STATIC_INCLUDE_DIRS)
set (portaudio_PROCESS_LIBS PORTAUDIO_STATIC_LDFLAGS)
set (portaudio_LIBRARY_DIRS ${PORTAUDIO_STATIC_LIBRARY_DIRS})
else ()
set (portaudio_PROCESS_INCLUDES PORTAUDIO_INCLUDE_DIRS)
set (portaudio_PROCESS_LIBS PORTAUDIO_LDFLAGS)
set (portaudio_LIBRARY_DIRS ${PORTAUDIO_LIBRARY_DIRS})
endif ()
libfind_process (portaudio)
# Handle the QUIETLY and REQUIRED arguments and set PORTAUDIO_FOUND to
# TRUE if all listed variables are TRUE
include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (portaudio DEFAULT_MSG portaudio_INCLUDE_DIRS portaudio_LIBRARIES portaudio_LIBRARY_DIRS)

View File

@ -0,0 +1,57 @@
# Findusb
# =======
#
# Find the usb library
#
# This will define the following variables::
#
# usb_FOUND - True if the system has the usb library
# usb_VERSION - The verion of the usb library which was found
#
# and the following imported targets::
#
# usb::usb - The libusb library
find_package (PkgConfig)
pkg_check_modules (PC_usb QUIET usb)
find_path (usb_INCLUDE_DIR
NAMES libusb.h
PATHS ${PC_usb_INCLUDE_DIRS}
PATH_SUFFIXES libusb-1.0
)
find_library (usb_LIBRARY
NAMES libusb-1.0
PATHS $PC_usb_LIBRARY_DIRS}
)
set (usb_VERSION ${PC_usb_VERSION})
include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (usb
FOUND_VAR usb_FOUND
REQUIRED_VARS
usb_LIBRARY
usb_INCLUDE_DIR
VERSION_VAR usb_VERSION
)
if (usb_FOUND)
set (usb_LIBRARIES ${usb_LIBRARY})
set (usb_INCLUDE_DIRS ${usb_INCLUDE_DIR})
set (usb_DEFINITIONS ${PC_usb_CFLAGS_OTHER})
endif ()
if (usb_FOUND AND NOT TARGET usb::usb)
add_library (usb::usb UNKNOWN IMPORTED)
set_target_properties (usb::usb PROPERTIES
IMPORTED_LOCATION "${usb_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${PC_usb_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${usb_INCLUDE_DIR}"
)
endif ()
mark_as_advanced (
usb_INCLUDE_DIR
usb_LIBRARY
)

View File

@ -949,7 +949,7 @@ if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
endif (CMAKE_OSX_SYSROOT) endif (CMAKE_OSX_SYSROOT)
set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fbounds-check -funroll-all-loops -fno-f2c ${General_FFLAGS}") set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fbounds-check -funroll-all-loops -fno-f2c ${General_FFLAGS}")
set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fbounds-check -fno-f2c ${General_FFLAGS}") set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fbounds-check -fno-f2c -ffpe-trap=denormal,invalid,zero,overflow ${General_FFLAGS}")
elseif (Fortran_COMPILER_NAME MATCHES "ifort.*") elseif (Fortran_COMPILER_NAME MATCHES "ifort.*")
# ifort (untested) # ifort (untested)
set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -f77rtl ${General_FFLAGS}") set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -f77rtl ${General_FFLAGS}")

View File

@ -19,6 +19,7 @@ Here is an overview list, details are filled out below:
* Hamlib rig control library * Hamlib rig control library
* Pkg Config Lite * Pkg Config Lite
* Boost C++ libraries * Boost C++ libraries
* portaudio library (used by map65)
Qt Framework Qt Framework
------------ ------------
@ -80,7 +81,7 @@ installed and updated you will need to install some packages, these
are needed to provide the necessary *nix tools and utilities to build are needed to provide the necessary *nix tools and utilities to build
Hamlib from sources. Hamlib from sources.
pacman -S autoconf automake libtool make pacman -S autoconf automake libtool make tar
Hamlib Hamlib
------ ------
@ -169,3 +170,52 @@ from https://sourceforge.net/projects/pkgconfiglite/files/0.28-1/ and
unzip it into a convenient location, as with other ancillary tools and unzip it into a convenient location, as with other ancillary tools and
libraries I put these under C:\Tools\. libraries I put these under C:\Tools\.
portaudio
---------
This library is only available as sources so must be built. It uses
autotools and building using MinGW tools from an Msys shell is
recommended. Ensure your Msys shell environment (PATH) is correctly
set up for the MinGW tool chain you wish to build with, i.e. the MinGW
tools bundled with the Qt installation for 32-, or 64-bit as required.
Download the latest stable version sources tarball from
http://files.portaudio.com/download.html , at the time of writing that
was the pa_stable_v190700_20210406.tgz file. Unzip and unpack the
tarball in a suitable location like ~/src :
cd ~/src
tar xf ~/Downloads/pa_stable_v190700_20210406.tgz
out-of-source-tree builds are recommended, create a build directory in
a suitable location like ~/build and change working directory to it:
mkdir -p ~/build/portaudio/mingw64
cd !$
Configure and build and install the library in a suitable place (I use
~/local as a root directory for installed packages.
~/src/portaudio/configure --prefix=$(HOME)/local/portaudio/mingw64 --with-winapi=wmme,directx,wdmks CFLAGS=-DNDEBUG
make && make install
Repeat for the 32-bit architecture if required, using a suitable Msys
environment for the required tool chain, different build directory,
and install location.
Update your CMake tool chain files to include the install directory,
or directories, above. I have something like this in the 64-bit tool
chain files:
# ...
set (PORTAUDIODIR C:/Users/bill/local/portaudio/mingw64)
# ...
set (CMAKE_PREFIX_PATH ... ${PORTAUDIODIR} ...)
#...
and similarly with the 32-bit tool chain file specifying the mingw32
portaudio installation root directory.
Note that on Windows portaudio will only build static libraries using
the standard configuration, this is fine and therefore there is no
need to add any new run-time paths to your execution environment.

View File

@ -1,3 +1,7 @@
find_package (portaudio REQUIRED)
find_package (usb REQUIRED)
set (map65_CXXSRCS set (map65_CXXSRCS
about.cpp about.cpp
astro.cpp astro.cpp
@ -46,7 +50,8 @@ add_subdirectory (libm65)
qt5_wrap_ui (map65_GENUISRCS ${map65_UISRCS}) qt5_wrap_ui (map65_GENUISRCS ${map65_UISRCS})
add_executable (map65 ${map65_CXXSRCS} ${map65_CSRCS} ${map65_GENUISRCS} map65.rc) add_executable (map65 ${map65_CXXSRCS} ${map65_CSRCS} ${map65_GENUISRCS} map65.rc)
target_link_libraries (map65 m65impl ${FFTW3_LIBRARIES} Qt5::Widgets) target_include_directories (map65 PRIVATE ${PORTAUDIO_INCLUDE_DIRS})
target_link_libraries (map65 m65impl ${FFTW3_LIBRARIES} Qt5::Widgets Qt5::Network ${PORTAUDIO_STATIC_LDFLAGS} usb::usb)
install ( install (
TARGETS map65 TARGETS map65

View File

@ -27,7 +27,7 @@ void DevSetup::initDlg()
int minSpeed[MAXDEVICES]; int minSpeed[MAXDEVICES];
int maxSpeed[MAXDEVICES]; int maxSpeed[MAXDEVICES];
char hostAPI_DeviceName[MAXDEVICES][50]; char hostAPI_DeviceName[MAXDEVICES][50];
char s[60]; char s[256];
int numDevices=Pa_GetDeviceCount(); int numDevices=Pa_GetDeviceCount();
getDev(&numDevices,hostAPI_DeviceName,minChan,maxChan,minSpeed,maxSpeed); getDev(&numDevices,hostAPI_DeviceName,minChan,maxChan,minSpeed,maxSpeed);
k=0; k=0;
@ -45,7 +45,7 @@ void DevSetup::initDlg()
const PaDeviceInfo *pdi; const PaDeviceInfo *pdi;
int nchout; int nchout;
char *p,*p1; char *p,*p1;
char p2[50]; char p2[256];
char pa_device_name[128]; char pa_device_name[128];
char pa_device_hostapi[128]; char pa_device_hostapi[128];

View File

@ -1,64 +0,0 @@
INTEGER FFTW_R2HC
PARAMETER (FFTW_R2HC=0)
INTEGER FFTW_HC2R
PARAMETER (FFTW_HC2R=1)
INTEGER FFTW_DHT
PARAMETER (FFTW_DHT=2)
INTEGER FFTW_REDFT00
PARAMETER (FFTW_REDFT00=3)
INTEGER FFTW_REDFT01
PARAMETER (FFTW_REDFT01=4)
INTEGER FFTW_REDFT10
PARAMETER (FFTW_REDFT10=5)
INTEGER FFTW_REDFT11
PARAMETER (FFTW_REDFT11=6)
INTEGER FFTW_RODFT00
PARAMETER (FFTW_RODFT00=7)
INTEGER FFTW_RODFT01
PARAMETER (FFTW_RODFT01=8)
INTEGER FFTW_RODFT10
PARAMETER (FFTW_RODFT10=9)
INTEGER FFTW_RODFT11
PARAMETER (FFTW_RODFT11=10)
INTEGER FFTW_FORWARD
PARAMETER (FFTW_FORWARD=-1)
INTEGER FFTW_BACKWARD
PARAMETER (FFTW_BACKWARD=+1)
INTEGER FFTW_MEASURE
PARAMETER (FFTW_MEASURE=0)
INTEGER FFTW_DESTROY_INPUT
PARAMETER (FFTW_DESTROY_INPUT=1)
INTEGER FFTW_UNALIGNED
PARAMETER (FFTW_UNALIGNED=2)
INTEGER FFTW_CONSERVE_MEMORY
PARAMETER (FFTW_CONSERVE_MEMORY=4)
INTEGER FFTW_EXHAUSTIVE
PARAMETER (FFTW_EXHAUSTIVE=8)
INTEGER FFTW_PRESERVE_INPUT
PARAMETER (FFTW_PRESERVE_INPUT=16)
INTEGER FFTW_PATIENT
PARAMETER (FFTW_PATIENT=32)
INTEGER FFTW_ESTIMATE
PARAMETER (FFTW_ESTIMATE=64)
INTEGER FFTW_ESTIMATE_PATIENT
PARAMETER (FFTW_ESTIMATE_PATIENT=128)
INTEGER FFTW_BELIEVE_PCOST
PARAMETER (FFTW_BELIEVE_PCOST=256)
INTEGER FFTW_DFT_R2HC_ICKY
PARAMETER (FFTW_DFT_R2HC_ICKY=512)
INTEGER FFTW_NONTHREADED_ICKY
PARAMETER (FFTW_NONTHREADED_ICKY=1024)
INTEGER FFTW_NO_BUFFERING
PARAMETER (FFTW_NO_BUFFERING=2048)
INTEGER FFTW_NO_INDIRECT_OP
PARAMETER (FFTW_NO_INDIRECT_OP=4096)
INTEGER FFTW_ALLOW_LARGE_GENERIC
PARAMETER (FFTW_ALLOW_LARGE_GENERIC=8192)
INTEGER FFTW_NO_RANK_SPLITS
PARAMETER (FFTW_NO_RANK_SPLITS=16384)
INTEGER FFTW_NO_VRANK_SPLITS
PARAMETER (FFTW_NO_VRANK_SPLITS=32768)
INTEGER FFTW_NO_VRECURSE
PARAMETER (FFTW_NO_VRECURSE=65536)
INTEGER FFTW_NO_SIMD
PARAMETER (FFTW_NO_SIMD=131072)

Binary file not shown.

View File

@ -32,6 +32,7 @@ set (libm65_FSRCS
ftninit.f90 ftninit.f90
ftnquit.f90 ftnquit.f90
q65b.f90 q65b.f90
gen65.f90
gen_q65_wave.f90 gen_q65_wave.f90
genqra64a.f90 genqra64a.f90
geocentric.f90 geocentric.f90

Binary file not shown.

Binary file not shown.

View File

@ -7,10 +7,22 @@
#include "mainwindow.h" #include "mainwindow.h"
static QtMessageHandler default_message_handler;
void my_message_handler (QtMsgType type, QMessageLogContext const& context, QString const& msg)
{
// Handle the messages!
// Call the default handler.
(*default_message_handler) (type, context, msg);
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QApplication a(argc, argv); default_message_handler = qInstallMessageHandler (my_message_handler);
QApplication a {argc, argv};
MainWindow w; MainWindow w;
w.show(); w.show ();
return a.exec(); return a.exec ();
} }

View File

@ -10,7 +10,7 @@
#include "bandmap.h" #include "bandmap.h"
#include "txtune.h" #include "txtune.h"
#include "sleep.h" #include "sleep.h"
#include "portaudio.h" #include <portaudio.h>
#define NFFT 32768 #define NFFT 32768
@ -1308,11 +1308,11 @@ void MainWindow::decode() //decode()
QString hcall=(ui->dxCallEntry->text()+" ").mid(0,12); QString hcall=(ui->dxCallEntry->text()+" ").mid(0,12);
QString hgrid=(ui->dxGridEntry->text()+" ").mid(0,6); QString hgrid=(ui->dxGridEntry->text()+" ").mid(0,6);
strncpy(datcom_.mycall, mcall.toLatin1(), 12); memcpy(datcom_.mycall, mcall.toLatin1(), 12);
strncpy(datcom_.mygrid, mgrid.toLatin1(), 6); memcpy(datcom_.mygrid, mgrid.toLatin1(), 6);
strncpy(datcom_.hiscall, hcall.toLatin1(), 12); memcpy(datcom_.hiscall, hcall.toLatin1(), 12);
strncpy(datcom_.hisgrid, hgrid.toLatin1(), 6); memcpy(datcom_.hisgrid, hgrid.toLatin1(), 6);
strncpy(datcom_.datetime, m_dateTime.toLatin1(), 20); memcpy(datcom_.datetime, m_dateTime.toLatin1(), 20);
//newdat=1 ==> this is new data, must do the big FFT //newdat=1 ==> this is new data, must do the big FFT
//nagain=1 ==> decode only at fQSO +/- Tol //nagain=1 ==> decode only at fQSO +/- Tol
@ -1661,14 +1661,14 @@ void MainWindow::ba2msg(QByteArray ba, char message[]) //ba2msg()
bool eom; bool eom;
eom=false; eom=false;
for(int i=0;i<22; i++) { for(int i=0;i<22; i++) {
if((int)ba[i] == 0) eom=true; if (i >= ba.size () || !ba[i]) eom=true;
if(eom) { if(eom) {
message[i]=32; message[i] = ' ';
} else { } else {
message[i]=ba[i]; message[i]=ba[i];
} }
} }
message[22]=0; message[22] = '\0';
} }
void MainWindow::on_txFirstCheckBox_stateChanged(int nstate) //TxFirst void MainWindow::on_txFirstCheckBox_stateChanged(int nstate) //TxFirst

View File

@ -32,9 +32,7 @@ void MeterWidget::setValue(int value)
void MeterWidget::paintEvent( QPaintEvent * ) void MeterWidget::paintEvent( QPaintEvent * )
{ {
int pos; int pos;
QPainter p; QPainter p {this};
p.begin(this);
// Sanitize // Sanitize
m_signal = m_signal < 0 ? 0 : m_signal; m_signal = m_signal < 0 ? 0 : m_signal;

View File

@ -14,7 +14,7 @@ void paInputDevice(int id, char* hostAPI_DeviceName, int* minChan,
int pa_device_min_bytes; int pa_device_min_bytes;
int pa_device_max_channels; int pa_device_max_channels;
int pa_device_min_channels; int pa_device_min_channels;
char p2[50]; char p2[256];
char *p,*p1; char *p,*p1;
static int iret, valid_dev_cnt; static int iret, valid_dev_cnt;

View File

@ -1,5 +1,6 @@
#include <portaudio.h> #include <portaudio.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#define MAX_LATENCY 20 #define MAX_LATENCY 20

Binary file not shown.

View File

@ -285,7 +285,6 @@ void CPlotter::DrawOverlay() //DrawOverlay()
QRect rect0; QRect rect0;
QPainter painter0(&m_ScalePixmap); QPainter painter0(&m_ScalePixmap);
painter0.begin (this);
//create Font to use for scales //create Font to use for scales
QFont Font("Arial"); QFont Font("Arial");
@ -365,7 +364,6 @@ void CPlotter::DrawOverlay() //DrawOverlay()
// Now make the zoomed scale, using m_ZoomScalePixmap and painter3 // Now make the zoomed scale, using m_ZoomScalePixmap and painter3
QRect rect1; QRect rect1;
QPainter painter3(&m_ZoomScalePixmap); QPainter painter3(&m_ZoomScalePixmap);
painter3.begin (this);
painter3.setFont(Font); painter3.setFont(Font);
painter3.setPen(Qt::black); painter3.setPen(Qt::black);

File diff suppressed because it is too large Load Diff

View File

@ -22,8 +22,7 @@
#include <windows.h> #include <windows.h>
#endif #endif
#include <usb.h> #include <libusb.h>
//#include "/users/joe/linrad/3.37/usb.h"
#include <QDebug> #include <QDebug>
#define USB_SUCCESS 0 #define USB_SUCCESS 0
@ -48,21 +47,15 @@ int increment_freq;
int retval = -1; int retval = -1;
int display_freq = -1; int display_freq = -1;
int delay; int delay;
usb_dev_handle *global_si570usb_handle = NULL; static libusb_device_handle * global_si570usb_handle;
// ********sleep functions***************
//use this function under LINUX
/*
void si570_sleep(int us) void si570_sleep(int us)
{ {
usleep(us); #if defined (Q_OS_WIN)
} ::Sleep (us / 1000);
*/ #else
::usleep (us);
//use this function under WINDOWS #endif
void si570_sleep(int us)
{
Sleep(us/1000);
} }
double round(double x) double round(double x)
@ -78,11 +71,9 @@ double current_time(void) //for delay measurements
return 0.000001*t.tv_usec+t.tv_sec; return 0.000001*t.tv_usec+t.tv_sec;
} }
int usbGetStringAscii(usb_dev_handle *dev, int my_index, unsigned char Si570usbOpenDevice(libusb_device_handle **device, char *usbSerialID);
int langid, char *buf, int buflen);
unsigned char Si570usbOpenDevice(usb_dev_handle **device, char *usbSerialID);
void setLongWord( int value, char * bytes); void setLongWord( int value, char * bytes);
int setFreqByValue(usb_dev_handle * handle, double frequency); int setFreqByValue(libusb_device_handle * handle, double frequency);
void sweepa_freq(void); void sweepa_freq(void);
void sweepm_freq(void); void sweepm_freq(void);
@ -105,110 +96,104 @@ int set570(double freq_MHz)
return 0; return 0;
} }
int usbGetStringAscii(usb_dev_handle *dev, int my_index, unsigned char Si570usbOpenDevice (libusb_device_handle * * udh, char * usbSerialID)
int langid, char *buf, int buflen)
{ {
char buffer[256]; // if (*udh) return USB_SUCCESS; // only scan USB devices 1st time
int rval, i;
if((rval = usb_control_msg(dev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR,
(USB_DT_STRING << 8) + my_index, langid, buffer,
sizeof(buffer), 1000)) < 0) return rval;
if(buffer[1] != USB_DT_STRING) return 0;
if((unsigned char)buffer[0] < rval) rval = (unsigned char)buffer[0];
rval /= 2;
// lossy conversion to ISO Latin1
for(i=1;i<rval;i++) {
if(i > buflen) break; // destination buffer overflow
buf[i-1] = buffer[2 * i];
if(buffer[2 * i + 1] != 0) buf[i-1] = '?'; // outside of ISO Latin1 range
}
buf[i-1] = 0;
return i-1;
}
unsigned char Si570usbOpenDevice(usb_dev_handle **device, char *usbSerialID)
{
struct usb_bus *bus;
struct usb_device *dev;
usb_dev_handle *handle = NULL;
unsigned char errorCode = USB_ERROR_NOTFOUND;
char string[256];
int len;
int vendor = USBDEV_SHARED_VENDOR; int vendor = USBDEV_SHARED_VENDOR;
char *vendorName = (char *)VENDOR_NAME; char *vendorName = (char *)VENDOR_NAME;
int product = USBDEV_SHARED_PRODUCT; int product = USBDEV_SHARED_PRODUCT;
char *productName = (char *)PRODUCT_NAME; char *productName = (char *)PRODUCT_NAME;
char serialNumberString[20];
static int didUsbInit = 0;
if(!didUsbInit) { libusb_device_handle * handle = nullptr;
didUsbInit = 1; unsigned char errorCode = USB_ERROR_NOTFOUND;
usb_init(); char buffer[256];
int rc;
if ((rc = libusb_init (nullptr)) < 0) // init default context (safe to repeat)
{
printf ("usb initialization error message %s\n", libusb_error_name (rc));
return errorCode = USB_ERROR_ACCESS;
} }
usb_find_busses();
usb_find_devices(); libusb_device * * device_list;
for(bus=usb_get_busses(); bus; bus=bus->next) { int device_count = libusb_get_device_list (nullptr, &device_list);
for(dev=bus->devices; dev; dev=dev->next) { if (device_count < 0)
if(dev->descriptor.idVendor == vendor && {
dev->descriptor.idProduct == product) { puts ("no usb devices");
handle = usb_open(dev); // open the device in order to query strings errorCode = USB_ERROR_NOTFOUND;
if(!handle) { }
else
{
for (int i = 0; i < device_count; ++i)
{
libusb_device * device = device_list[i];
libusb_device_descriptor descriptor;
if ((rc = libusb_get_device_descriptor (device, &descriptor)) < 0)
{
printf ("usb get devive descriptor error message %s\n", libusb_error_name (rc));
errorCode = USB_ERROR_ACCESS; errorCode = USB_ERROR_ACCESS;
printf("si570.c: Warning: cannot open Si570-USB device:\n");
printf("usb error message: %s\n",usb_strerror());
continue; continue;
} }
if(vendorName == NULL && productName == NULL) { //name does not matter if (vendor == descriptor.idVendor && product == descriptor.idProduct)
break; {
// now we must open the device to query strings
if ((rc = libusb_open (device, &handle)) < 0)
{
printf ("usb open device descriptor error message %s\n", libusb_error_name (rc));
errorCode = USB_ERROR_ACCESS;
continue;
} }
// now check whether the names match if (!vendorName && !productName)
len = usbGetStringAscii(handle, dev->descriptor.iManufacturer, 0x0409, string, sizeof(string)); {
if(len < 0) { break; // good to go
}
if (libusb_get_string_descriptor_ascii (handle, descriptor.iManufacturer
, reinterpret_cast<unsigned char *> (buffer), sizeof buffer) < 0)
{
printf ("usb get vendor name error message %s\n", libusb_error_name (rc));
errorCode = USB_ERROR_IO; errorCode = USB_ERROR_IO;
printf("si570.c: Warning: cannot query manufacturer for Si570-USB device:\n"); }
printf("usb error message: %s\n",usb_strerror()); else
} else { {
errorCode = USB_ERROR_NOTFOUND; if (!vendorName || !strcmp (buffer, vendorName))
//fprintf(stderr, "seen device from vendor ->%s<-\n", string); {
if(strcmp(string, vendorName) == 0){ if (libusb_get_string_descriptor_ascii (handle, descriptor.iProduct
len = usbGetStringAscii(handle, dev->descriptor.iProduct, , reinterpret_cast<unsigned char *> (buffer), sizeof buffer) < 0)
0x0409, string, sizeof(string)); {
if(len < 0) { printf ("usb get product name error message %s\n", libusb_error_name (rc));
errorCode = USB_ERROR_IO; errorCode = USB_ERROR_IO;
printf("si570.c: Warning: cannot query product for Si570-USB device: \n"); }
printf("usb error message: %s\n",usb_strerror()); else
} else { {
errorCode = USB_ERROR_NOTFOUND; if (!productName || !strcmp (buffer, productName))
// fprintf(stderr, "seen product ->%s<-\n", string); {
if(strcmp(string, productName) == 0) { if (libusb_get_string_descriptor_ascii (handle, descriptor.iSerialNumber
len = usbGetStringAscii(handle, dev->descriptor.iSerialNumber, , reinterpret_cast<unsigned char *> (buffer), sizeof buffer) < 0)
0x0409, serialNumberString, sizeof(serialNumberString)); {
if (len < 0) { printf ("usb get serial number error message %s\n", libusb_error_name (rc));
errorCode = USB_ERROR_IO; errorCode = USB_ERROR_IO;
printf("si570.c: Warning: cannot query serial number for Si570-USB device: \n"); }
printf("usb error message: %s\n",usb_strerror()); else
} else { {
errorCode = USB_ERROR_NOTFOUND; if (!usbSerialID || !strcmp (buffer, usbSerialID))
if ((usbSerialID == NULL) || {
(strcmp(serialNumberString, usbSerialID) == 0)) { break; // good to go
// printf("\nOpen Si570 USB device: OK\n");
// printf("usbSerialID : %s\n",serialNumberString);
break;
} }
} }
} }
} }
} }
} }
usb_close(handle); libusb_close (handle);
handle = NULL; handle = nullptr;
} }
} }
if(handle) break; libusb_free_device_list (device_list, 1);
} }
if(handle != NULL) { if (handle)
{
errorCode = USB_SUCCESS; errorCode = USB_SUCCESS;
*device = handle; *udh = handle;
} }
return errorCode; return errorCode;
} }
@ -221,7 +206,7 @@ void setLongWord( int value, char * bytes)
bytes[3] = ((value & 0xff000000) >> 24) & 0xff; bytes[3] = ((value & 0xff000000) >> 24) & 0xff;
} }
int setFreqByValue(usb_dev_handle * handle, double frequency) int setFreqByValue(libusb_device_handle * handle, double frequency)
{ {
// Windows Doc from PE0FKO: // Windows Doc from PE0FKO:
// //
@ -236,7 +221,7 @@ int setFreqByValue(usb_dev_handle * handle, double frequency)
// Default: None // Default: None
// //
// Parameters: // Parameters:
// requesttype: USB_ENDPOINT_OUT // requesttype: LIBUSB_ENDPOINT_OUT
// request: 0x32 // request: 0x32
// value: 0 // value: 0
// index: 0 // index: 0
@ -264,12 +249,12 @@ int setFreqByValue(usb_dev_handle * handle, double frequency)
err_cnt =0; err_cnt =0;
set_again:; set_again:;
setLongWord(round(frequency * 2097152.0), buffer); // 2097152=2^21 setLongWord(round(frequency * 2097152.0), buffer); // 2097152=2^21
retval=usb_control_msg( retval = libusb_control_transfer (
handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, handle, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
request, request,
value, value,
my_index, my_index,
buffer, reinterpret_cast<unsigned char *> (buffer),
sizeof(buffer), sizeof(buffer),
5000); 5000);
if (retval != 4) { if (retval != 4) {
@ -279,7 +264,7 @@ int setFreqByValue(usb_dev_handle * handle, double frequency)
goto set_again; goto set_again;
} else { } else {
printf("Error when setting frequency, returncode=%i\n",retval); printf("Error when setting frequency, returncode=%i\n",retval);
printf("usb error message: %s\n", usb_strerror()); printf("usb error message: %s\n", libusb_error_name (retval));
} }
} }
return retval; return retval;

View File

@ -29,7 +29,7 @@ SignalMeter::~SignalMeter()
void SignalMeter::paintEvent( QPaintEvent * ) void SignalMeter::paintEvent( QPaintEvent * )
{ {
QPainter p; QPainter p;
p.begin(this);
p.drawLine(22, 10, 22, 130); p.drawLine(22, 10, 22, 130);
for ( int i = 0; i <= 60; i += 10 ) { for ( int i = 0; i <= 60; i += 10 ) {

View File

@ -331,9 +331,7 @@ void SoundInThread::inputUDP()
} }
// Set this socket's total buffer space for received UDP packets // Set this socket's total buffer space for received UDP packets
int v=141600; udpSocket->setSocketOption (QUdpSocket::ReceiveBufferSizeSocketOption, 141600);
::setsockopt(udpSocket->socketDescriptor(), SOL_SOCKET, SO_RCVBUF,
(char *)&v, sizeof(v));
bool qe = quitExecution; bool qe = quitExecution;
struct linradBuffer { struct linradBuffer {

View File

@ -1,409 +0,0 @@
#ifndef __USB_H__
#define __USB_H__
#include <stdlib.h>
#include <windows.h>
/*
* 'interface' is defined somewhere in the Windows header files. This macro
* is deleted here to avoid conflicts and compile errors.
*/
#ifdef interface
#undef interface
#endif
/*
* PATH_MAX from limits.h can't be used on Windows if the dll and
* import libraries are build/used by different compilers
*/
#define LIBUSB_PATH_MAX 512
/*
* USB spec information
*
* This is all stuff grabbed from various USB specs and is pretty much
* not subject to change
*/
/*
* Device and/or Interface Class codes
*/
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
#define USB_CLASS_AUDIO 1
#define USB_CLASS_COMM 2
#define USB_CLASS_HID 3
#define USB_CLASS_PRINTER 7
#define USB_CLASS_MASS_STORAGE 8
#define USB_CLASS_HUB 9
#define USB_CLASS_DATA 10
#define USB_CLASS_VENDOR_SPEC 0xff
/*
* Descriptor types
*/
#define USB_DT_DEVICE 0x01
#define USB_DT_CONFIG 0x02
#define USB_DT_STRING 0x03
#define USB_DT_INTERFACE 0x04
#define USB_DT_ENDPOINT 0x05
#define USB_DT_HID 0x21
#define USB_DT_REPORT 0x22
#define USB_DT_PHYSICAL 0x23
#define USB_DT_HUB 0x29
/*
* Descriptor sizes per descriptor type
*/
#define USB_DT_DEVICE_SIZE 18
#define USB_DT_CONFIG_SIZE 9
#define USB_DT_INTERFACE_SIZE 9
#define USB_DT_ENDPOINT_SIZE 7
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
#define USB_DT_HUB_NONVAR_SIZE 7
/* ensure byte-packed structures */
#include <pshpack1.h>
/* All standard descriptors have these 2 fields in common */
struct usb_descriptor_header
{
unsigned char bLength;
unsigned char bDescriptorType;
};
/* String descriptor */
struct usb_string_descriptor
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short wData[1];
};
/* HID descriptor */
struct usb_hid_descriptor
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short bcdHID;
unsigned char bCountryCode;
unsigned char bNumDescriptors;
};
/* Endpoint descriptor */
#define USB_MAXENDPOINTS 32
struct usb_endpoint_descriptor
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bEndpointAddress;
unsigned char bmAttributes;
unsigned short wMaxPacketSize;
unsigned char bInterval;
unsigned char bRefresh;
unsigned char bSynchAddress;
unsigned char *extra; /* Extra descriptors */
int extralen;
};
#define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */
#define USB_ENDPOINT_DIR_MASK 0x80
#define USB_ENDPOINT_TYPE_MASK 0x03 /* in bmAttributes */
#define USB_ENDPOINT_TYPE_CONTROL 0
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1
#define USB_ENDPOINT_TYPE_BULK 2
#define USB_ENDPOINT_TYPE_INTERRUPT 3
/* Interface descriptor */
#define USB_MAXINTERFACES 32
struct usb_interface_descriptor
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bInterfaceNumber;
unsigned char bAlternateSetting;
unsigned char bNumEndpoints;
unsigned char bInterfaceClass;
unsigned char bInterfaceSubClass;
unsigned char bInterfaceProtocol;
unsigned char iInterface;
struct usb_endpoint_descriptor *endpoint;
unsigned char *extra; /* Extra descriptors */
int extralen;
};
#define USB_MAXALTSETTING 128 /* Hard limit */
struct usb_interface
{
struct usb_interface_descriptor *altsetting;
int num_altsetting;
};
/* Configuration descriptor information.. */
#define USB_MAXCONFIG 8
struct usb_config_descriptor
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short wTotalLength;
unsigned char bNumInterfaces;
unsigned char bConfigurationValue;
unsigned char iConfiguration;
unsigned char bmAttributes;
unsigned char MaxPower;
struct usb_interface *interface;
unsigned char *extra; /* Extra descriptors */
int extralen;
};
/* Device descriptor */
struct usb_device_descriptor
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short bcdUSB;
unsigned char bDeviceClass;
unsigned char bDeviceSubClass;
unsigned char bDeviceProtocol;
unsigned char bMaxPacketSize0;
unsigned short idVendor;
unsigned short idProduct;
unsigned short bcdDevice;
unsigned char iManufacturer;
unsigned char iProduct;
unsigned char iSerialNumber;
unsigned char bNumConfigurations;
};
struct usb_ctrl_setup
{
unsigned char bRequestType;
unsigned char bRequest;
unsigned short wValue;
unsigned short wIndex;
unsigned short wLength;
};
/*
* Standard requests
*/
#define USB_REQ_GET_STATUS 0x00
#define USB_REQ_CLEAR_FEATURE 0x01
/* 0x02 is reserved */
#define USB_REQ_SET_FEATURE 0x03
/* 0x04 is reserved */
#define USB_REQ_SET_ADDRESS 0x05
#define USB_REQ_GET_DESCRIPTOR 0x06
#define USB_REQ_SET_DESCRIPTOR 0x07
#define USB_REQ_GET_CONFIGURATION 0x08
#define USB_REQ_SET_CONFIGURATION 0x09
#define USB_REQ_GET_INTERFACE 0x0A
#define USB_REQ_SET_INTERFACE 0x0B
#define USB_REQ_SYNCH_FRAME 0x0C
#define USB_TYPE_STANDARD (0x00 << 5)
#define USB_TYPE_CLASS (0x01 << 5)
#define USB_TYPE_VENDOR (0x02 << 5)
#define USB_TYPE_RESERVED (0x03 << 5)
#define USB_RECIP_DEVICE 0x00
#define USB_RECIP_INTERFACE 0x01
#define USB_RECIP_ENDPOINT 0x02
#define USB_RECIP_OTHER 0x03
/*
* Various libusb API related stuff
*/
#define USB_ENDPOINT_IN 0x80
#define USB_ENDPOINT_OUT 0x00
/* Error codes */
#define USB_ERROR_BEGIN 500000
/*
* This is supposed to look weird. This file is generated from autoconf
* and I didn't want to make this too complicated.
*/
#define USB_LE16_TO_CPU(x)
/* Data types */
/* struct usb_device; */
/* struct usb_bus; */
struct usb_device
{
struct usb_device *next, *prev;
char filename[LIBUSB_PATH_MAX];
struct usb_bus *bus;
struct usb_device_descriptor descriptor;
struct usb_config_descriptor *config;
void *dev; /* Darwin support */
unsigned char devnum;
unsigned char num_children;
struct usb_device **children;
};
struct usb_bus
{
struct usb_bus *next, *prev;
char dirname[LIBUSB_PATH_MAX];
struct usb_device *devices;
unsigned long location;
struct usb_device *root_dev;
};
/* Version information, Windows specific */
struct usb_version
{
struct
{
int major;
int minor;
int micro;
int nano;
} dll;
struct
{
int major;
int minor;
int micro;
int nano;
} driver;
};
struct usb_dev_handle;
typedef struct usb_dev_handle usb_dev_handle;
/* Variables */
#ifndef __USB_C__
#define usb_busses usb_get_busses()
#endif
#include <poppack.h>
#ifdef __cplusplus
extern "C"
{
#endif
/* Function prototypes */
/* usb.c */
usb_dev_handle *usb_open(struct usb_device *dev);
int usb_close(usb_dev_handle *dev);
int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf,
size_t buflen);
int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf,
size_t buflen);
/* descriptors.c */
int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep,
unsigned char type, unsigned char index,
void *buf, int size);
int usb_get_descriptor(usb_dev_handle *udev, unsigned char type,
unsigned char index, void *buf, int size);
/* <arch>.c */
int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,
int timeout);
int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,
int timeout);
int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size,
int timeout);
int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size,
int timeout);
int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,
int value, int index, char *bytes, int size,
int timeout);
int usb_set_configuration(usb_dev_handle *dev, int configuration);
int usb_claim_interface(usb_dev_handle *dev, int interface);
int usb_release_interface(usb_dev_handle *dev, int interface);
int usb_set_altinterface(usb_dev_handle *dev, int alternate);
int usb_resetep(usb_dev_handle *dev, unsigned int ep);
int usb_clear_halt(usb_dev_handle *dev, unsigned int ep);
int usb_reset(usb_dev_handle *dev);
char *usb_strerror(void);
void usb_init(void);
void usb_set_debug(int level);
int usb_find_busses(void);
int usb_find_devices(void);
struct usb_device *usb_device(usb_dev_handle *dev);
struct usb_bus *usb_get_busses(void);
/* Windows specific functions */
#define LIBUSB_HAS_INSTALL_SERVICE_NP 1
int usb_install_service_np(void);
void CALLBACK usb_install_service_np_rundll(HWND wnd, HINSTANCE instance,
LPSTR cmd_line, int cmd_show);
#define LIBUSB_HAS_UNINSTALL_SERVICE_NP 1
int usb_uninstall_service_np(void);
void CALLBACK usb_uninstall_service_np_rundll(HWND wnd, HINSTANCE instance,
LPSTR cmd_line, int cmd_show);
#define LIBUSB_HAS_INSTALL_DRIVER_NP 1
int usb_install_driver_np(const char *inf_file);
void CALLBACK usb_install_driver_np_rundll(HWND wnd, HINSTANCE instance,
LPSTR cmd_line, int cmd_show);
#define LIBUSB_HAS_TOUCH_INF_FILE_NP 1
int usb_touch_inf_file_np(const char *inf_file);
void CALLBACK usb_touch_inf_file_np_rundll(HWND wnd, HINSTANCE instance,
LPSTR cmd_line, int cmd_show);
#define LIBUSB_HAS_INSTALL_NEEDS_RESTART_NP 1
int usb_install_needs_restart_np(void);
const struct usb_version *usb_get_version(void);
int usb_isochronous_setup_async(usb_dev_handle *dev, void **context,
unsigned char ep, int pktsize);
int usb_bulk_setup_async(usb_dev_handle *dev, void **context,
unsigned char ep);
int usb_interrupt_setup_async(usb_dev_handle *dev, void **context,
unsigned char ep);
int usb_submit_async(void *context, char *bytes, int size);
int usb_reap_async(void *context, int timeout);
int usb_reap_async_nocancel(void *context, int timeout);
int usb_cancel_async(void *context);
int usb_free_async(void **context);
#ifdef __cplusplus
}
#endif
#endif /* __USB_H__ */

View File

@ -1,5 +1,4 @@
#include "widegraph.h" #include "widegraph.h"
#include <math.h>
#include "ui_widegraph.h" #include "ui_widegraph.h"
#define NFFT 32768 #define NFFT 32768
@ -381,9 +380,9 @@ void WideGraph::tx570()
void WideGraph::updateFreqLabel() void WideGraph::updateFreqLabel()
{ {
double rxFreq = floor (ui->widePlot->rxFreq () * 1e3) * 1e3; auto rxFreq = QString {"%1"}.arg (ui->widePlot->rxFreq (), 10, 'f', 6).insert (7, '.');
double txFreq = floor (ui->widePlot->txFreq() * 1e3) * 1e3; auto txFreq = QString {"%1"}.arg (ui->widePlot->txFreq (), 10, 'f', 6).insert (7, '.');
ui->labFreq->setText (QString {"Rx: %1\n%2"}.arg (rxFreq, 7, 'f', 3).arg (txFreq, 7, 'f', 3)); ui->labFreq->setText (QString {"Rx: %1\nTx: %2"}.arg (rxFreq, txFreq));
} }
void WideGraph::enableSetRxHardware(bool b) void WideGraph::enableSetRxHardware(bool b)