mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	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:
		
							parent
							
								
									769e00ab88
								
							
						
					
					
						commit
						74bd3c1d0c
					
				
							
								
								
									
										47
									
								
								CMake/Modules/Findportaudio.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								CMake/Modules/Findportaudio.cmake
									
									
									
									
									
										Normal 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) | ||||
							
								
								
									
										57
									
								
								CMake/Modules/Findusb.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								CMake/Modules/Findusb.cmake
									
									
									
									
									
										Normal 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 | ||||
|   ) | ||||
| @ -949,7 +949,7 @@ if (Fortran_COMPILER_NAME MATCHES "gfortran.*") | ||||
|   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_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.*") | ||||
|   # ifort (untested) | ||||
|   set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -f77rtl ${General_FFLAGS}") | ||||
|  | ||||
| @ -19,6 +19,7 @@ Here is an overview list, details are filled out below: | ||||
|      * Hamlib rig control library | ||||
|      * Pkg Config Lite | ||||
|      * Boost C++ libraries | ||||
|      * portaudio library (used by map65) | ||||
| 
 | ||||
| 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 | ||||
| Hamlib from sources. | ||||
| 
 | ||||
|     pacman -S autoconf automake libtool make | ||||
|     pacman -S autoconf automake libtool make tar | ||||
| 
 | ||||
| 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 | ||||
| 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. | ||||
|  | ||||
| @ -1,3 +1,7 @@ | ||||
| find_package (portaudio REQUIRED) | ||||
| 
 | ||||
| find_package (usb REQUIRED) | ||||
| 
 | ||||
| set (map65_CXXSRCS | ||||
|   about.cpp | ||||
|   astro.cpp | ||||
| @ -46,7 +50,8 @@ add_subdirectory (libm65) | ||||
| qt5_wrap_ui (map65_GENUISRCS ${map65_UISRCS}) | ||||
| 
 | ||||
| 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 ( | ||||
|   TARGETS map65 | ||||
|  | ||||
| @ -27,7 +27,7 @@ void DevSetup::initDlg() | ||||
|   int minSpeed[MAXDEVICES]; | ||||
|   int maxSpeed[MAXDEVICES]; | ||||
|   char hostAPI_DeviceName[MAXDEVICES][50]; | ||||
|   char s[60]; | ||||
|   char s[256]; | ||||
|   int numDevices=Pa_GetDeviceCount(); | ||||
|   getDev(&numDevices,hostAPI_DeviceName,minChan,maxChan,minSpeed,maxSpeed); | ||||
|   k=0; | ||||
| @ -45,7 +45,7 @@ void DevSetup::initDlg() | ||||
|   const PaDeviceInfo *pdi; | ||||
|   int nchout; | ||||
|   char *p,*p1; | ||||
|   char p2[50]; | ||||
|   char p2[256]; | ||||
|   char pa_device_name[128]; | ||||
|   char pa_device_hostapi[128]; | ||||
| 
 | ||||
|  | ||||
| @ -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.
										
									
								
							| @ -32,6 +32,7 @@ set (libm65_FSRCS | ||||
|   ftninit.f90 | ||||
|   ftnquit.f90 | ||||
|   q65b.f90 | ||||
|   gen65.f90 | ||||
|   gen_q65_wave.f90 | ||||
|   genqra64a.f90 | ||||
|   geocentric.f90 | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								map65/libusb.a
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								map65/libusb.a
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -7,10 +7,22 @@ | ||||
| 
 | ||||
| #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[]) | ||||
| { | ||||
|     QApplication a(argc, argv); | ||||
|     MainWindow w; | ||||
|     w.show(); | ||||
|     return a.exec(); | ||||
|   default_message_handler = qInstallMessageHandler (my_message_handler); | ||||
| 
 | ||||
|   QApplication a {argc, argv}; | ||||
|   MainWindow w; | ||||
|   w.show (); | ||||
|   return a.exec (); | ||||
| } | ||||
|  | ||||
| @ -10,7 +10,7 @@ | ||||
| #include "bandmap.h" | ||||
| #include "txtune.h" | ||||
| #include "sleep.h" | ||||
| #include "portaudio.h" | ||||
| #include <portaudio.h> | ||||
| 
 | ||||
| #define NFFT 32768 | ||||
| 
 | ||||
| @ -1308,11 +1308,11 @@ void MainWindow::decode()                                       //decode() | ||||
|   QString hcall=(ui->dxCallEntry->text()+"            ").mid(0,12); | ||||
|   QString hgrid=(ui->dxGridEntry->text()+"      ").mid(0,6); | ||||
| 
 | ||||
|   strncpy(datcom_.mycall, mcall.toLatin1(), 12); | ||||
|   strncpy(datcom_.mygrid, mgrid.toLatin1(), 6); | ||||
|   strncpy(datcom_.hiscall, hcall.toLatin1(), 12); | ||||
|   strncpy(datcom_.hisgrid, hgrid.toLatin1(), 6); | ||||
|   strncpy(datcom_.datetime, m_dateTime.toLatin1(), 20); | ||||
|   memcpy(datcom_.mycall, mcall.toLatin1(), 12); | ||||
|   memcpy(datcom_.mygrid, mgrid.toLatin1(), 6); | ||||
|   memcpy(datcom_.hiscall, hcall.toLatin1(), 12); | ||||
|   memcpy(datcom_.hisgrid, hgrid.toLatin1(), 6); | ||||
|   memcpy(datcom_.datetime, m_dateTime.toLatin1(), 20); | ||||
| 
 | ||||
|   //newdat=1  ==> this is new data, must do the big FFT
 | ||||
|   //nagain=1  ==> decode only at fQSO +/- Tol
 | ||||
| @ -1661,14 +1661,14 @@ void MainWindow::ba2msg(QByteArray ba, char message[])             //ba2msg() | ||||
|   bool eom; | ||||
|   eom=false; | ||||
|   for(int i=0;i<22; i++) { | ||||
|     if((int)ba[i] == 0) eom=true; | ||||
|     if (i >= ba.size () || !ba[i]) eom=true; | ||||
|     if(eom) { | ||||
|       message[i]=32; | ||||
|       message[i] = ' '; | ||||
|     } else { | ||||
|       message[i]=ba[i]; | ||||
|     } | ||||
|   } | ||||
|   message[22]=0; | ||||
|   message[22] = '\0'; | ||||
| } | ||||
| 
 | ||||
| void MainWindow::on_txFirstCheckBox_stateChanged(int nstate)        //TxFirst
 | ||||
|  | ||||
| @ -32,9 +32,7 @@ void MeterWidget::setValue(int value) | ||||
| void MeterWidget::paintEvent( QPaintEvent * ) | ||||
| { | ||||
|     int pos; | ||||
|     QPainter p; | ||||
| 
 | ||||
|     p.begin(this); | ||||
|     QPainter p {this}; | ||||
| 
 | ||||
|     // Sanitize
 | ||||
|     m_signal = m_signal < 0 ? 0 : m_signal; | ||||
|  | ||||
| @ -14,7 +14,7 @@ void paInputDevice(int id, char* hostAPI_DeviceName, int* minChan, | ||||
|   int pa_device_min_bytes; | ||||
|   int pa_device_max_channels; | ||||
|   int pa_device_min_channels; | ||||
|   char p2[50]; | ||||
|   char p2[256]; | ||||
|   char *p,*p1; | ||||
|   static int iret, valid_dev_cnt; | ||||
| 
 | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| #include <portaudio.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| #define MAX_LATENCY 20 | ||||
| 
 | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| @ -285,7 +285,6 @@ void CPlotter::DrawOverlay()                                 //DrawOverlay() | ||||
| 
 | ||||
|   QRect rect0; | ||||
|   QPainter painter0(&m_ScalePixmap); | ||||
|   painter0.begin (this); | ||||
| 
 | ||||
|   //create Font to use for scales
 | ||||
|   QFont Font("Arial"); | ||||
| @ -365,7 +364,6 @@ void CPlotter::DrawOverlay()                                 //DrawOverlay() | ||||
|   // Now make the zoomed scale, using m_ZoomScalePixmap and painter3
 | ||||
|   QRect rect1; | ||||
|   QPainter painter3(&m_ZoomScalePixmap); | ||||
|   painter3.begin (this); | ||||
|   painter3.setFont(Font); | ||||
|   painter3.setPen(Qt::black); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										1123
									
								
								map65/portaudio.h
									
									
									
									
									
								
							
							
						
						
									
										1123
									
								
								map65/portaudio.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										229
									
								
								map65/set570.cpp
									
									
									
									
									
								
							
							
						
						
									
										229
									
								
								map65/set570.cpp
									
									
									
									
									
								
							| @ -22,8 +22,7 @@ | ||||
| #include <windows.h> | ||||
| #endif | ||||
| 
 | ||||
| #include <usb.h> | ||||
| //#include "/users/joe/linrad/3.37/usb.h"
 | ||||
| #include <libusb.h> | ||||
| #include <QDebug> | ||||
| 
 | ||||
| #define USB_SUCCESS	            0 | ||||
| @ -48,21 +47,15 @@ int  increment_freq; | ||||
| int  retval = -1; | ||||
| int  display_freq = -1; | ||||
| 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) | ||||
| { | ||||
| usleep(us); | ||||
| } | ||||
| */ | ||||
| 
 | ||||
| //use this function under WINDOWS
 | ||||
| void si570_sleep(int us) | ||||
| { | ||||
|   Sleep(us/1000); | ||||
| #if defined (Q_OS_WIN) | ||||
|   ::Sleep (us / 1000); | ||||
| #else | ||||
|   ::usleep (us); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| double round(double x) | ||||
| @ -78,11 +71,9 @@ double current_time(void) //for delay measurements | ||||
|   return 0.000001*t.tv_usec+t.tv_sec; | ||||
| } | ||||
| 
 | ||||
| int  usbGetStringAscii(usb_dev_handle *dev, int my_index, | ||||
|                int langid, char *buf, int buflen); | ||||
| unsigned char Si570usbOpenDevice(usb_dev_handle **device, char *usbSerialID); | ||||
| unsigned char Si570usbOpenDevice(libusb_device_handle **device, char *usbSerialID); | ||||
| 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 sweepm_freq(void); | ||||
| 
 | ||||
| @ -105,111 +96,105 @@ int set570(double freq_MHz) | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| int  usbGetStringAscii(usb_dev_handle *dev, int my_index, | ||||
|                        int langid, char *buf, int buflen) | ||||
| unsigned char Si570usbOpenDevice (libusb_device_handle * * udh, char * usbSerialID) | ||||
| { | ||||
|   char    buffer[256]; | ||||
|   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; | ||||
| } | ||||
|   // if (*udh) return USB_SUCCESS; // only scan USB devices 1st time
 | ||||
| 
 | ||||
| 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; | ||||
|   char *vendorName   = (char *)VENDOR_NAME; | ||||
|   int  product       = USBDEV_SHARED_PRODUCT; | ||||
|   char *productName  = (char *)PRODUCT_NAME; | ||||
|   char serialNumberString[20]; | ||||
|   static int  didUsbInit = 0; | ||||
| 
 | ||||
|   if(!didUsbInit) { | ||||
|     didUsbInit = 1; | ||||
|     usb_init(); | ||||
|   } | ||||
|   usb_find_busses(); | ||||
|   usb_find_devices(); | ||||
|   for(bus=usb_get_busses(); bus; bus=bus->next) { | ||||
|     for(dev=bus->devices; dev; dev=dev->next) { | ||||
|       if(dev->descriptor.idVendor == vendor && | ||||
|      dev->descriptor.idProduct == product) { | ||||
|         handle = usb_open(dev); // open the device in order to query strings
 | ||||
|         if(!handle) { | ||||
|           errorCode = USB_ERROR_ACCESS; | ||||
|           printf("si570.c: Warning: cannot open Si570-USB device:\n"); | ||||
|           printf("usb error message: %s\n",usb_strerror()); | ||||
|           continue; | ||||
|   libusb_device_handle * handle = nullptr; | ||||
|   unsigned char errorCode = USB_ERROR_NOTFOUND; | ||||
|   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; | ||||
|     } | ||||
|         if(vendorName == NULL && productName == NULL) {  //name does not matter
 | ||||
|           break; | ||||
| 
 | ||||
|   libusb_device * * device_list; | ||||
|   int device_count = libusb_get_device_list (nullptr, &device_list); | ||||
|   if (device_count < 0) | ||||
|     { | ||||
|       puts ("no usb devices"); | ||||
|       errorCode = USB_ERROR_NOTFOUND; | ||||
|     } | ||||
|         // now check whether the names match
 | ||||
|         len = usbGetStringAscii(handle, dev->descriptor.iManufacturer, 0x0409, string, sizeof(string)); | ||||
|         if(len < 0) { | ||||
|           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 { | ||||
|           errorCode = USB_ERROR_NOTFOUND; | ||||
|            //fprintf(stderr, "seen device from vendor ->%s<-\n", string);
 | ||||
|           if(strcmp(string, vendorName) == 0){ | ||||
|             len = usbGetStringAscii(handle, dev->descriptor.iProduct, | ||||
|                     0x0409, string, sizeof(string)); | ||||
|             if(len < 0) { | ||||
|               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 { | ||||
|               errorCode = USB_ERROR_NOTFOUND; | ||||
|               // fprintf(stderr, "seen product ->%s<-\n", string);
 | ||||
|               if(strcmp(string, productName) == 0) { | ||||
|         len = usbGetStringAscii(handle, dev->descriptor.iSerialNumber, | ||||
|              0x0409, serialNumberString, sizeof(serialNumberString)); | ||||
|         if (len < 0) { | ||||
|           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 { | ||||
|           errorCode = USB_ERROR_NOTFOUND; | ||||
|           if ((usbSerialID == NULL) || | ||||
|               (strcmp(serialNumberString, usbSerialID) == 0)) { | ||||
| //                    printf("\nOpen Si570 USB device: OK\n");
 | ||||
| //                    printf("usbSerialID          : %s\n",serialNumberString);
 | ||||
|             break; | ||||
|           } | ||||
|   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; | ||||
|               continue; | ||||
|             } | ||||
|           if (vendor == descriptor.idVendor && product == descriptor.idProduct) | ||||
|             { | ||||
|               // 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; | ||||
|                 } | ||||
|               if (!vendorName && !productName) | ||||
|                 { | ||||
|                   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; | ||||
|                 } | ||||
|               else | ||||
|                 { | ||||
|                   if (!vendorName || !strcmp (buffer, vendorName)) | ||||
|                     { | ||||
|                       if (libusb_get_string_descriptor_ascii (handle, descriptor.iProduct | ||||
|                                                               , reinterpret_cast<unsigned char *> (buffer), sizeof buffer) < 0) | ||||
|                         { | ||||
|                           printf ("usb get product name error message %s\n", libusb_error_name (rc)); | ||||
|                           errorCode = USB_ERROR_IO; | ||||
|                         } | ||||
|                       else | ||||
|                         { | ||||
|                           if (!productName || !strcmp (buffer, productName)) | ||||
|                             { | ||||
|                               if (libusb_get_string_descriptor_ascii (handle, descriptor.iSerialNumber | ||||
|                                                                       , reinterpret_cast<unsigned char *> (buffer), sizeof buffer) < 0) | ||||
|                                 { | ||||
|                                   printf ("usb get serial number error message %s\n", libusb_error_name (rc)); | ||||
|                                   errorCode = USB_ERROR_IO; | ||||
|                                 } | ||||
|                               else | ||||
|                                 { | ||||
|                                   if (!usbSerialID || !strcmp (buffer, usbSerialID)) | ||||
|                                     { | ||||
|                                       break; // good to go
 | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|               libusb_close (handle); | ||||
|               handle = nullptr; | ||||
|             } | ||||
|         } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       libusb_free_device_list (device_list, 1); | ||||
|     } | ||||
|         usb_close(handle); | ||||
|         handle = NULL; | ||||
|       } | ||||
|   if (handle) | ||||
|     { | ||||
|       errorCode = USB_SUCCESS; | ||||
|       *udh = handle; | ||||
|     } | ||||
|     if(handle) break; | ||||
|   } | ||||
|   if(handle != NULL) { | ||||
|     errorCode = USB_SUCCESS; | ||||
|     *device = handle; | ||||
|   } | ||||
|   return errorCode; | ||||
| } | ||||
| 
 | ||||
| @ -221,7 +206,7 @@ void setLongWord( int value, char * bytes) | ||||
|   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:
 | ||||
| //
 | ||||
| @ -236,7 +221,7 @@ int setFreqByValue(usb_dev_handle * handle, double frequency) | ||||
| // Default:    None
 | ||||
| //
 | ||||
| // Parameters:
 | ||||
| //     requesttype:    USB_ENDPOINT_OUT
 | ||||
| //     requesttype:    LIBUSB_ENDPOINT_OUT
 | ||||
| //     request:         0x32
 | ||||
| //     value:           0
 | ||||
| //     index:           0
 | ||||
| @ -264,14 +249,14 @@ int setFreqByValue(usb_dev_handle * handle, double frequency) | ||||
|   err_cnt =0; | ||||
|  set_again:; | ||||
|   setLongWord(round(frequency * 2097152.0), buffer);  //   2097152=2^21
 | ||||
|   retval=usb_control_msg( | ||||
|          handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, | ||||
|          request, | ||||
|          value, | ||||
|          my_index, | ||||
|          buffer, | ||||
|          sizeof(buffer), | ||||
|          5000); | ||||
|   retval = libusb_control_transfer ( | ||||
|                                     handle, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT, | ||||
|                                     request, | ||||
|                                     value, | ||||
|                                     my_index, | ||||
|                                     reinterpret_cast<unsigned char *> (buffer), | ||||
|                                     sizeof(buffer), | ||||
|                                     5000); | ||||
|   if (retval != 4) { | ||||
|     err_cnt ++; | ||||
|     if(err_cnt < MAX_USB_ERR_CNT) { | ||||
| @ -279,7 +264,7 @@ int setFreqByValue(usb_dev_handle * handle, double frequency) | ||||
|       goto set_again; | ||||
|     } else { | ||||
|       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; | ||||
|  | ||||
| @ -29,7 +29,7 @@ SignalMeter::~SignalMeter() | ||||
| void SignalMeter::paintEvent( QPaintEvent * ) | ||||
| { | ||||
|     QPainter p; | ||||
|     p.begin(this); | ||||
| 
 | ||||
|     p.drawLine(22, 10, 22, 130); | ||||
| 
 | ||||
|     for ( int i = 0; i <= 60; i += 10 ) { | ||||
|  | ||||
| @ -331,9 +331,7 @@ void SoundInThread::inputUDP() | ||||
|   } | ||||
| 
 | ||||
|   // Set this socket's total buffer space for received UDP packets
 | ||||
|   int v=141600; | ||||
|   ::setsockopt(udpSocket->socketDescriptor(), SOL_SOCKET, SO_RCVBUF, | ||||
|                (char *)&v, sizeof(v)); | ||||
|   udpSocket->setSocketOption (QUdpSocket::ReceiveBufferSizeSocketOption, 141600); | ||||
| 
 | ||||
|   bool qe = quitExecution; | ||||
|   struct linradBuffer { | ||||
|  | ||||
							
								
								
									
										409
									
								
								map65/usb.h
									
									
									
									
									
								
							
							
						
						
									
										409
									
								
								map65/usb.h
									
									
									
									
									
								
							| @ -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__ */ | ||||
| 
 | ||||
| @ -1,5 +1,4 @@ | ||||
| #include "widegraph.h" | ||||
| #include <math.h> | ||||
| #include "ui_widegraph.h" | ||||
| 
 | ||||
| #define NFFT 32768 | ||||
| @ -381,9 +380,9 @@ void WideGraph::tx570() | ||||
| 
 | ||||
| void WideGraph::updateFreqLabel() | ||||
| { | ||||
|   double rxFreq = floor (ui->widePlot->rxFreq () * 1e3) * 1e3; | ||||
|   double txFreq = floor (ui->widePlot->txFreq() * 1e3) * 1e3; | ||||
|   ui->labFreq->setText (QString {"Rx:  %1\n%2"}.arg (rxFreq, 7, 'f', 3).arg (txFreq, 7, 'f', 3)); | ||||
|   auto rxFreq = QString {"%1"}.arg (ui->widePlot->rxFreq (), 10, 'f', 6).insert (7, '.'); | ||||
|   auto txFreq = QString {"%1"}.arg (ui->widePlot->txFreq (), 10, 'f', 6).insert (7, '.'); | ||||
|   ui->labFreq->setText (QString {"Rx:  %1\nTx:  %2"}.arg (rxFreq, txFreq)); | ||||
| } | ||||
| 
 | ||||
| void WideGraph::enableSetRxHardware(bool b) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user