mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-09-04 14:17:52 -04:00
Get rid of the shared memory segment.
This commit is contained in:
parent
d8093cf4dc
commit
f83a5c6cbe
@ -14,7 +14,7 @@ set (q65w_CXXSRCS
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set (q65w_CXXSRCS ${q65w_CXXSRCS} killbyname.cpp)
|
set (q65w_CXXSRCS ${q65w_CXXSRCS})
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
set (q65w_UISRCS
|
set (q65w_UISRCS
|
||||||
|
@ -7,7 +7,7 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
|
|||||||
ui(new Ui::CAboutDlg)
|
ui(new Ui::CAboutDlg)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->labelTxt->setText("<html><h2>" + QString {"MAP65 v"
|
ui->labelTxt->setText("<html><h2>" + QString {"Q65W v"
|
||||||
+ QCoreApplication::applicationVersion ()
|
+ QCoreApplication::applicationVersion ()
|
||||||
+ " " + revision ()}.simplified () + "</h2><br />"
|
+ " " + revision ()}.simplified () + "</h2><br />"
|
||||||
"Q65W is a wideband receiver for the Q65 protocol, <br />"
|
"Q65W is a wideband receiver for the Q65 protocol, <br />"
|
||||||
|
@ -1,282 +0,0 @@
|
|||||||
#include <windows.h>
|
|
||||||
#include <tlhelp32.h>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
int killbyname(const char *szToTerminate)
|
|
||||||
// Created: 6/23/2000 (Ravi Kochhar)
|
|
||||||
// Last modified: 3/10/2002 (RK)
|
|
||||||
// Please report any problems or bugs to kochhar@physiology.wisc.edu
|
|
||||||
// The latest version of this routine can be found at:
|
|
||||||
// http://www.neurophys.wisc.edu/ravi/software/killproc/
|
|
||||||
// Terminate the process "szToTerminate" if it is currently running
|
|
||||||
// This works for Win/95/98/ME and also Win/NT/2000/XP
|
|
||||||
// The process name is case-insensitive, i.e. "notepad.exe" and "NOTEPAD.EXE"
|
|
||||||
// will both work (for szToTerminate)
|
|
||||||
// Return codes are as follows:
|
|
||||||
// 0 = Process was successfully terminated
|
|
||||||
// 602 = Unable to terminate process for some other reason
|
|
||||||
// 603 = Process was not currently running
|
|
||||||
// 604 = No permission to terminate process
|
|
||||||
// 605 = Unable to load PSAPI.DLL
|
|
||||||
// 606 = Unable to identify system type
|
|
||||||
// 607 = Unsupported OS
|
|
||||||
// 632 = Invalid process name
|
|
||||||
// 700 = Unable to get procedure address from PSAPI.DLL
|
|
||||||
// 701 = Unable to get process list, EnumProcesses failed
|
|
||||||
// 702 = Unable to load KERNEL32.DLL
|
|
||||||
// 703 = Unable to get procedure address from KERNEL32.DLL
|
|
||||||
// 704 = CreateToolhelp32Snapshot failed
|
|
||||||
|
|
||||||
{
|
|
||||||
BOOL bResult,bResultm;
|
|
||||||
DWORD aiPID[1000],iCb=1000,iNumProc; //,iV2000=0;
|
|
||||||
DWORD iCbneeded,i,iFound=0;
|
|
||||||
char szName[MAX_PATH],szToTermUpper[MAX_PATH];
|
|
||||||
HANDLE hProc,hSnapShot,hSnapShotm;
|
|
||||||
OSVERSIONINFO osvi;
|
|
||||||
HINSTANCE hInstLib;
|
|
||||||
int iLenP,indx;
|
|
||||||
HMODULE hMod;
|
|
||||||
PROCESSENTRY32 procentry;
|
|
||||||
MODULEENTRY32 modentry;
|
|
||||||
|
|
||||||
// Transfer Process name into "szToTermUpper" and convert to upper case
|
|
||||||
iLenP=strlen(szToTerminate);
|
|
||||||
if(iLenP<1 || iLenP>MAX_PATH) return 632;
|
|
||||||
for(indx=0;indx<iLenP;indx++)
|
|
||||||
szToTermUpper[indx]=toupper(szToTerminate[indx]);
|
|
||||||
szToTermUpper[iLenP]=0;
|
|
||||||
|
|
||||||
// PSAPI Function Pointers.
|
|
||||||
BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * );
|
|
||||||
BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *,
|
|
||||||
DWORD, LPDWORD );
|
|
||||||
DWORD (WINAPI *lpfGetModuleBaseName)( HANDLE, HMODULE,
|
|
||||||
LPTSTR, DWORD );
|
|
||||||
|
|
||||||
// ToolHelp Function Pointers.
|
|
||||||
HANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD) ;
|
|
||||||
BOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32) ;
|
|
||||||
BOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32) ;
|
|
||||||
BOOL (WINAPI *lpfModule32First)(HANDLE,LPMODULEENTRY32) ;
|
|
||||||
BOOL (WINAPI *lpfModule32Next)(HANDLE,LPMODULEENTRY32) ;
|
|
||||||
|
|
||||||
// First check what version of Windows we're in
|
|
||||||
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
||||||
bResult=GetVersionEx(&osvi);
|
|
||||||
if(!bResult) return 606; // Unable to identify system version
|
|
||||||
|
|
||||||
// At Present we only support Win/NT/2000/XP or Win/9x/ME
|
|
||||||
// Seems to work OK in Win7
|
|
||||||
if((osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) &&
|
|
||||||
(osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)) return 607;
|
|
||||||
|
|
||||||
if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
|
|
||||||
{
|
|
||||||
// Win/NT or 2000 or XP
|
|
||||||
|
|
||||||
// Load library and get the procedures explicitly. We do
|
|
||||||
// this so that we don't have to worry about modules using
|
|
||||||
// this code failing to load under Windows 9x, because
|
|
||||||
// it can't resolve references to the PSAPI.DLL.
|
|
||||||
hInstLib = LoadLibraryA("PSAPI.DLL");
|
|
||||||
if(hInstLib == NULL) return 605;
|
|
||||||
|
|
||||||
// Get procedure addresses.
|
|
||||||
lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))(void (*)())
|
|
||||||
GetProcAddress( hInstLib, "EnumProcesses" ) ;
|
|
||||||
lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,
|
|
||||||
DWORD, LPDWORD))(void (*)()) GetProcAddress( hInstLib, "EnumProcessModules" ) ;
|
|
||||||
lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE, LPTSTR,
|
|
||||||
DWORD )) (void (*)())GetProcAddress( hInstLib, "GetModuleBaseNameA" ) ;
|
|
||||||
|
|
||||||
if(lpfEnumProcesses == NULL || lpfEnumProcessModules == NULL ||
|
|
||||||
lpfGetModuleBaseName == NULL) {
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
bResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded);
|
|
||||||
if(!bResult) {
|
|
||||||
// Unable to get process list, EnumProcesses failed
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 701;
|
|
||||||
}
|
|
||||||
|
|
||||||
// How many processes are there?
|
|
||||||
iNumProc=iCbneeded/sizeof(DWORD);
|
|
||||||
|
|
||||||
// Get and match the name of each process
|
|
||||||
for(i=0;i<iNumProc;i++) {
|
|
||||||
// Get the (module) name for this process
|
|
||||||
strcpy(szName,"Unknown");
|
|
||||||
// First, get a handle to the process
|
|
||||||
hProc=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,
|
|
||||||
aiPID[i]);
|
|
||||||
// Now, get the process name
|
|
||||||
if(hProc) {
|
|
||||||
if(lpfEnumProcessModules(hProc,&hMod,sizeof(hMod),&iCbneeded) ) {
|
|
||||||
lpfGetModuleBaseName(hProc,hMod,szName,MAX_PATH);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CloseHandle(hProc);
|
|
||||||
// We will match regardless of lower or upper case
|
|
||||||
if(strcmp(_strupr(szName),szToTermUpper)==0) {
|
|
||||||
// Process found, now terminate it
|
|
||||||
iFound=1;
|
|
||||||
// First open for termination
|
|
||||||
hProc=OpenProcess(PROCESS_TERMINATE,FALSE,aiPID[i]);
|
|
||||||
if(hProc) {
|
|
||||||
if(TerminateProcess(hProc,0)) {
|
|
||||||
// process terminated
|
|
||||||
CloseHandle(hProc);
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
// Unable to terminate process
|
|
||||||
CloseHandle(hProc);
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 602;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Unable to open process for termination
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 604;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
|
|
||||||
{
|
|
||||||
// Win/95 or 98 or ME
|
|
||||||
|
|
||||||
hInstLib = LoadLibraryA("Kernel32.DLL");
|
|
||||||
if( hInstLib == NULL )
|
|
||||||
return 702;
|
|
||||||
|
|
||||||
// Get procedure addresses.
|
|
||||||
// We are linking to these functions of Kernel32
|
|
||||||
// explicitly, because otherwise a module using
|
|
||||||
// this code would fail to load under Windows NT,
|
|
||||||
// which does not have the Toolhelp32
|
|
||||||
// functions in the Kernel 32.
|
|
||||||
lpfCreateToolhelp32Snapshot=
|
|
||||||
(HANDLE(WINAPI *)(DWORD,DWORD))(void (*)())
|
|
||||||
GetProcAddress( hInstLib,
|
|
||||||
"CreateToolhelp32Snapshot" ) ;
|
|
||||||
lpfProcess32First=
|
|
||||||
(BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))(void (*)())
|
|
||||||
GetProcAddress( hInstLib, "Process32First" ) ;
|
|
||||||
lpfProcess32Next=
|
|
||||||
(BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))(void (*)())
|
|
||||||
GetProcAddress( hInstLib, "Process32Next" ) ;
|
|
||||||
lpfModule32First=
|
|
||||||
(BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))(void (*)())
|
|
||||||
GetProcAddress( hInstLib, "Module32First" ) ;
|
|
||||||
lpfModule32Next=
|
|
||||||
(BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))(void (*)())
|
|
||||||
GetProcAddress( hInstLib, "Module32Next" ) ;
|
|
||||||
if( lpfProcess32Next == NULL ||
|
|
||||||
lpfProcess32First == NULL ||
|
|
||||||
lpfModule32Next == NULL ||
|
|
||||||
lpfModule32First == NULL ||
|
|
||||||
lpfCreateToolhelp32Snapshot == NULL )
|
|
||||||
{
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 703;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The Process32.. and Module32.. routines return names in all uppercase
|
|
||||||
|
|
||||||
// Get a handle to a Toolhelp snapshot of all the systems processes.
|
|
||||||
|
|
||||||
hSnapShot = lpfCreateToolhelp32Snapshot(
|
|
||||||
TH32CS_SNAPPROCESS, 0 ) ;
|
|
||||||
if( hSnapShot == INVALID_HANDLE_VALUE )
|
|
||||||
{
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 704;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the first process' information.
|
|
||||||
procentry.dwSize = sizeof(PROCESSENTRY32);
|
|
||||||
bResult=lpfProcess32First(hSnapShot,&procentry);
|
|
||||||
|
|
||||||
// While there are processes, keep looping and checking.
|
|
||||||
while(bResult)
|
|
||||||
{
|
|
||||||
// Get a handle to a Toolhelp snapshot of this process.
|
|
||||||
hSnapShotm = lpfCreateToolhelp32Snapshot(
|
|
||||||
TH32CS_SNAPMODULE, procentry.th32ProcessID) ;
|
|
||||||
if( hSnapShotm == INVALID_HANDLE_VALUE )
|
|
||||||
{
|
|
||||||
CloseHandle(hSnapShot);
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 704;
|
|
||||||
}
|
|
||||||
// Get the module list for this process
|
|
||||||
modentry.dwSize=sizeof(MODULEENTRY32);
|
|
||||||
bResultm=lpfModule32First(hSnapShotm,&modentry);
|
|
||||||
|
|
||||||
// While there are modules, keep looping and checking
|
|
||||||
while(bResultm)
|
|
||||||
{
|
|
||||||
if(strcmp(modentry.szModule,szToTermUpper)==0)
|
|
||||||
{
|
|
||||||
// Process found, now terminate it
|
|
||||||
iFound=1;
|
|
||||||
// First open for termination
|
|
||||||
hProc=OpenProcess(PROCESS_TERMINATE,FALSE,procentry.th32ProcessID);
|
|
||||||
if(hProc)
|
|
||||||
{
|
|
||||||
if(TerminateProcess(hProc,0))
|
|
||||||
{
|
|
||||||
// process terminated
|
|
||||||
CloseHandle(hSnapShotm);
|
|
||||||
CloseHandle(hSnapShot);
|
|
||||||
CloseHandle(hProc);
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Unable to terminate process
|
|
||||||
CloseHandle(hSnapShotm);
|
|
||||||
CloseHandle(hSnapShot);
|
|
||||||
CloseHandle(hProc);
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 602;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Unable to open process for termination
|
|
||||||
CloseHandle(hSnapShotm);
|
|
||||||
CloseHandle(hSnapShot);
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 604;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // Look for next modules for this process
|
|
||||||
modentry.dwSize=sizeof(MODULEENTRY32);
|
|
||||||
bResultm=lpfModule32Next(hSnapShotm,&modentry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Keep looking
|
|
||||||
CloseHandle(hSnapShotm);
|
|
||||||
procentry.dwSize = sizeof(PROCESSENTRY32);
|
|
||||||
bResult = lpfProcess32Next(hSnapShot,&procentry);
|
|
||||||
}
|
|
||||||
CloseHandle(hSnapShot);
|
|
||||||
}
|
|
||||||
if(iFound==0)
|
|
||||||
{
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 603;
|
|
||||||
}
|
|
||||||
FreeLibrary(hInstLib);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -23,7 +23,7 @@ int iqAmp;
|
|||||||
int iqPhase;
|
int iqPhase;
|
||||||
qint16 id[2*60*96000];
|
qint16 id[2*60*96000];
|
||||||
|
|
||||||
QSharedMemory mem_m65("mem_m65");
|
//QSharedMemory mem_m65("mem_m65");
|
||||||
|
|
||||||
extern const int RxDataFrequency = 96000;
|
extern const int RxDataFrequency = 96000;
|
||||||
|
|
||||||
@ -110,28 +110,6 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
xSignalMeter = new SignalMeter(ui->xMeterFrame);
|
xSignalMeter = new SignalMeter(ui->xMeterFrame);
|
||||||
xSignalMeter->resize(50, 160);
|
xSignalMeter->resize(50, 160);
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
while(true) {
|
|
||||||
int iret=killbyname("m65.exe");
|
|
||||||
if(iret == 603) break;
|
|
||||||
if(iret != 0) msgBox("KillByName return code: " + QString::number(iret));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(!mem_m65.attach()) {
|
|
||||||
if (!mem_m65.create(sizeof(datcom_))) {
|
|
||||||
msgBox("Unable to create shared memory segment.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
char *to = (char*)mem_m65.data();
|
|
||||||
int size=sizeof(datcom_);
|
|
||||||
if(datcom_.newdat==0) {
|
|
||||||
int noffset = 4*4*5760000 + 4*4*322*32768 + 4*4*32768;
|
|
||||||
to += noffset;
|
|
||||||
size -= noffset;
|
|
||||||
}
|
|
||||||
memset(to,0,size); //Zero all decoding params in shared memory
|
|
||||||
|
|
||||||
fftwf_import_wisdom_from_filename (QDir {m_appDir}.absoluteFilePath ("map65_wisdom.dat").toLocal8Bit ());
|
fftwf_import_wisdom_from_filename (QDir {m_appDir}.absoluteFilePath ("map65_wisdom.dat").toLocal8Bit ());
|
||||||
|
|
||||||
readSettings(); //Restore user's setup params
|
readSettings(); //Restore user's setup params
|
||||||
@ -980,17 +958,9 @@ void MainWindow::decode() //decode()
|
|||||||
datcom_.junk1=1234; //Cecck for these values in m65
|
datcom_.junk1=1234; //Cecck for these values in m65
|
||||||
datcom_.junk2=5678;
|
datcom_.junk2=5678;
|
||||||
|
|
||||||
// char *to = (char*)mem_m65.data();
|
|
||||||
char *to = (char*) datcom2_.d4;
|
char *to = (char*) datcom2_.d4;
|
||||||
char *from = (char*) datcom_.d4;
|
char *from = (char*) datcom_.d4;
|
||||||
int size=sizeof(datcom_);
|
memcpy(to, from, sizeof(datcom_));
|
||||||
if(datcom_.newdat==0) {
|
|
||||||
int noffset = 4*4*5760000 + 4*4*322*32768 + 4*4*32768;
|
|
||||||
to += noffset;
|
|
||||||
from += noffset;
|
|
||||||
size -= noffset;
|
|
||||||
}
|
|
||||||
memcpy(to, from, qMin(mem_m65.size(), size-4));
|
|
||||||
datcom_.nagain=0;
|
datcom_.nagain=0;
|
||||||
datcom_.ndiskdat=0;
|
datcom_.ndiskdat=0;
|
||||||
m_map65RxLog=0;
|
m_map65RxLog=0;
|
||||||
|
@ -35,10 +35,6 @@ SOURCES += main.cpp mainwindow.cpp plotter.cpp about.cpp \
|
|||||||
astro.cpp displaytext.cpp getdev.cpp \
|
astro.cpp displaytext.cpp getdev.cpp \
|
||||||
meterwidget.cpp signalmeter.cpp
|
meterwidget.cpp signalmeter.cpp
|
||||||
|
|
||||||
win32 {
|
|
||||||
SOURCES += killbyname.cpp set570.cpp
|
|
||||||
}
|
|
||||||
|
|
||||||
HEADERS += mainwindow.h plotter.h soundin.h \
|
HEADERS += mainwindow.h plotter.h soundin.h \
|
||||||
about.h devsetup.h widegraph.h getfile.h \
|
about.h devsetup.h widegraph.h getfile.h \
|
||||||
commons.h sleep.h astro.h displaytext.h \
|
commons.h sleep.h astro.h displaytext.h \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user