6.0.23.34

This commit is contained in:
John Wiseman 2022-12-31 10:44:53 +00:00
parent ebc845ec8c
commit 90bdcbe130
15 changed files with 136 additions and 378 deletions

View File

@ -4950,7 +4950,7 @@ BOOL DecodeLocationString(UCHAR * Payload, struct STATIONRECORD * Station)
if (SymChar == '_') // WX if (SymChar == '_') // WX
{ {
if (strlen(Payload) > 50) if (strlen(Payload) > 30)
strcpy(Station->LastWXPacket, Payload); strcpy(Station->LastWXPacket, Payload);
} }
@ -5060,6 +5060,10 @@ int DecodeAPRSPayload(char * Payload, struct STATIONRECORD * Station)
Station->Object = NULL; Station->Object = NULL;
if (strcmp(Station->Callsign, "LA1ZDA-2") == 0)
{
int i = 1;
}
switch(*Payload) switch(*Payload)
{ {
case '`': case '`':
@ -8627,7 +8631,7 @@ int GetAPRSPageInfo(char * Buffer, double N, double S, double W, double E, int a
int KM = DefaultDistKM; int KM = DefaultDistKM;
char * ptr1; char * ptr1;
while (ptr && aprs) while (ptr && aprs && Len < 240000)
{ {
if (ptr->Lat != 0.0 && ptr->Lon != 0.0) if (ptr->Lat != 0.0 && ptr->Lon != 0.0)
{ {

View File

@ -1652,6 +1652,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
} }
STREAM->Connecting = TRUE; STREAM->Connecting = TRUE;
STREAM->ConnectTime = time(NULL);
return 0; return 0;
} }

View File

@ -1130,7 +1130,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Attempt to fix Tracker/WinRPR reconnect code (30) // Attempt to fix Tracker/WinRPR reconnect code (30)
// Changes to FreeDATA - Don't use deamon and add txlevel and send text commands (31) // Changes to FreeDATA - Don't use deamon and add txlevel and send text commands (31)
// Fix interactive commands in tracker driver (33) // Fix interactive commands in tracker driver (33)
// Fix SESSIONTIMELIMIT processing
#define CKernel #define CKernel

View File

@ -1026,9 +1026,13 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
closesocket(TNC->TCPDataSock); closesocket(TNC->TCPDataSock);
} }
if (TNC->WeStartedTNC) printf("FreeData Closing %d\n", TNC->WeStartedTNC);
KillTNC(TNC);
if (TNC->WeStartedTNC)
{
printf("Calling KillTNC\n");
KillTNC(TNC);
}
return 0; return 0;
@ -1377,6 +1381,7 @@ VOID * FreeDataExtInit(EXTPORTDATA * PortEntry)
u_long param = 1; u_long param = 1;
int line; int line;
int i; int i;
int n = 0;
srand(time(NULL)); srand(time(NULL));
@ -1542,6 +1547,16 @@ VOID * FreeDataExtInit(EXTPORTDATA * PortEntry)
List[Listptr] = 0; List[Listptr] = 0;
} }
// Build SSID List for Linux
TNC->FreeDataInfo->SSIDS[n] = _strdup(TNC->FreeDataInfo->SSIDList);
while (TNC->FreeDataInfo->SSIDS[n])
{
TNC->FreeDataInfo->SSIDS[n+1] = strlop(TNC->FreeDataInfo->SSIDS[n], ' ');
n++;
}
TNC->WebWindowProc = WebProc; TNC->WebWindowProc = WebProc;
TNC->WebWinX = 520; TNC->WebWinX = 520;
TNC->WebWinY = 500; TNC->WebWinY = 500;
@ -3196,12 +3211,12 @@ void ProcessTNCJSON(struct TNCINFO * TNC, char * Msg, int Len)
} }
} }
else if (memcmp(ptr, "disconnecting", 12) == 0) else if (memcmp(ptr, "close", 12) == 0)
{ {
if (TNC->FreeDataInfo->arqstate != 4) if (TNC->FreeDataInfo->arqstate != 4)
{ {
TNC->FreeDataInfo->arqstate = 4; TNC->FreeDataInfo->arqstate = 4;
Debugprintf("%d arq_session_state %s", TNC->Port, "disconnecting"); Debugprintf("%d arq_session_state %s", TNC->Port, "Closed");
} }
} }
else if (memcmp(ptr, "failed", 5) == 0) else if (memcmp(ptr, "failed", 5) == 0)
@ -3927,6 +3942,11 @@ TNCNotRunning:
CountRestarts(TNC); CountRestarts(TNC);
Sleep(TNC->AutoStartDelay); Sleep(TNC->AutoStartDelay);
#ifdef LINBPQ
Sleep(5000);
#endif
} }
TNCRunning: TNCRunning:
@ -4015,14 +4035,6 @@ TNCRunning:
sprintf(Msg, "Connected to FreeData TNC Port %d\r\n", TNC->Port); sprintf(Msg, "Connected to FreeData TNC Port %d\r\n", TNC->Port);
WritetoConsole(Msg); WritetoConsole(Msg);
#ifndef LINBPQ
// FreeSemaphore(&Semaphore);
Sleep(1000); // Give VARA time to update Window title
// EnumWindows(EnumVARAWindowsProc, (LPARAM)TNC);
// GetSemaphore(&Semaphore, 52);
#endif
while (TNC->TNCCONNECTED) while (TNC->TNCCONNECTED)
{ {
FD_ZERO(&readfs); FD_ZERO(&readfs);
@ -4103,6 +4115,8 @@ closeThread:
} }
sprintf(Msg, "FreeData Thread Terminated Port %d\r\n", TNC->Port); sprintf(Msg, "FreeData Thread Terminated Port %d\r\n", TNC->Port);
TNC->lasttime = time(NULL); // Prevent immediate restart
WritetoConsole(Msg); WritetoConsole(Msg);
} }
@ -4214,312 +4228,6 @@ void buildParamString(struct TNCINFO * TNC, char * line)
} }
#ifndef WIN32
#include <alsa/asoundlib.h>
char ** WriteDevices = NULL;
int WriteDeviceCount = 0;
char ** ReadDevices = NULL;
int ReadDeviceCount = 0;
int GetOutputDeviceCollection()
{
// Get all the suitable devices and put in a list for GetNext to return
snd_ctl_t *handle= NULL;
snd_pcm_t *pcm= NULL;
snd_ctl_card_info_t *info;
snd_pcm_info_t *pcminfo;
snd_pcm_hw_params_t *pars;
snd_pcm_format_mask_t *fmask;
char NameString[256];
Debugprintf("Playback Devices\n");
// free old struct if called again
// while (WriteDeviceCount)
// {
// WriteDeviceCount--;
// free(WriteDevices[WriteDeviceCount]);
// }
// if (WriteDevices)
// free(WriteDevices);
WriteDevices = NULL;
WriteDeviceCount = 0;
// Add virtual device ARDOP so ALSA plugins can be used if needed
WriteDevices = realloc(WriteDevices,(WriteDeviceCount + 1) * sizeof(WriteDevices));
// Get Device List from ALSA
snd_ctl_card_info_alloca(&info);
snd_pcm_info_alloca(&pcminfo);
snd_pcm_hw_params_alloca(&pars);
snd_pcm_format_mask_alloca(&fmask);
char hwdev[80];
unsigned min, max, ratemin, ratemax;
int card, err, dev, nsubd;
snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
card = -1;
if (snd_card_next(&card) < 0)
{
Debugprintf("No Devices");
return 0;
}
while (card >= 0)
{
sprintf(hwdev, "hw:%d", card);
err = snd_ctl_open(&handle, hwdev, 0);
err = snd_ctl_card_info(handle, info);
Debugprintf("Card %d, ID `%s', name `%s'", card, snd_ctl_card_info_get_id(info),
snd_ctl_card_info_get_name(info));
dev = -1;
if(snd_ctl_pcm_next_device(handle, &dev) < 0)
{
// Card has no devices
snd_ctl_close(handle);
WriteDevices = realloc(WriteDevices,(WriteDeviceCount + 1) * sizeof(WriteDevices));
WriteDevices[WriteDeviceCount++] = strupr(strdup("DummyDevice"));
goto nextcard;
}
while (dev >= 0)
{
snd_pcm_info_set_device(pcminfo, dev);
snd_pcm_info_set_subdevice(pcminfo, 0);
snd_pcm_info_set_stream(pcminfo, stream);
err = snd_ctl_pcm_info(handle, pcminfo);
if (err == -ENOENT)
goto nextdevice;
nsubd = snd_pcm_info_get_subdevices_count(pcminfo);
Debugprintf(" Device hw:%d,%d ID `%s', name `%s', %d subdevices (%d available)",
card, dev, snd_pcm_info_get_id(pcminfo), snd_pcm_info_get_name(pcminfo),
nsubd, snd_pcm_info_get_subdevices_avail(pcminfo));
sprintf(hwdev, "hw:%d,%d", card, dev);
err = snd_pcm_open(&pcm, hwdev, stream, SND_PCM_NONBLOCK);
if (err)
{
Debugprintf("Error %d opening output device", err);
goto nextdevice;
}
// Get parameters for this device
err = snd_pcm_hw_params_any(pcm, pars);
snd_pcm_hw_params_get_channels_min(pars, &min);
snd_pcm_hw_params_get_channels_max(pars, &max);
snd_pcm_hw_params_get_rate_min(pars, &ratemin, NULL);
snd_pcm_hw_params_get_rate_max(pars, &ratemax, NULL);
if( min == max )
if( min == 1 )
Debugprintf(" 1 channel, sampling rate %u..%u Hz", ratemin, ratemax);
else
Debugprintf(" %d channels, sampling rate %u..%u Hz", min, ratemin, ratemax);
else
Debugprintf(" %u..%u channels, sampling rate %u..%u Hz", min, max, ratemin, ratemax);
// Add device to list
sprintf(NameString, "hw:%d,%d %s(%s)", card, dev,
snd_pcm_info_get_name(pcminfo), snd_ctl_card_info_get_name(info));
WriteDevices = realloc(WriteDevices,(WriteDeviceCount + 1) * sizeof(WriteDevices));
WriteDevices[WriteDeviceCount++] = strupr(strdup(NameString));
snd_pcm_close(pcm);
pcm= NULL;
nextdevice:
if (snd_ctl_pcm_next_device(handle, &dev) < 0)
break;
}
snd_ctl_close(handle);
nextcard:
Debugprintf("");
if (snd_card_next(&card) < 0) // No more cards
break;
}
return WriteDeviceCount;
}
int GetNextOutputDevice(char * dest, int max, int n)
{
if (n >= WriteDeviceCount)
return 0;
strcpy(dest, WriteDevices[n]);
return strlen(dest);
}
int GetInputDeviceCollection()
{
// Get all the suitable devices and put in a list for GetNext to return
snd_ctl_t *handle= NULL;
snd_pcm_t *pcm= NULL;
snd_ctl_card_info_t *info;
snd_pcm_info_t *pcminfo;
snd_pcm_hw_params_t *pars;
snd_pcm_format_mask_t *fmask;
char NameString[256];
Debugprintf("Capture Devices\n");
ReadDevices = NULL;
ReadDeviceCount = 0;
ReadDevices = realloc(ReadDevices,(ReadDeviceCount + 1) * sizeof(ReadDevices));
// Get Device List from ALSA
snd_ctl_card_info_alloca(&info);
snd_pcm_info_alloca(&pcminfo);
snd_pcm_hw_params_alloca(&pars);
snd_pcm_format_mask_alloca(&fmask);
char hwdev[80];
unsigned min, max, ratemin, ratemax;
int card, err, dev, nsubd;
snd_pcm_stream_t stream = SND_PCM_STREAM_CAPTURE;
card = -1;
if(snd_card_next(&card) < 0)
{
Debugprintf("No Devices");
return 0;
}
while(card >= 0)
{
sprintf(hwdev, "hw:%d", card);
err = snd_ctl_open(&handle, hwdev, 0);
err = snd_ctl_card_info(handle, info);
// Debugprintf("Card %d, ID `%s', name `%s'", card, snd_ctl_card_info_get_id(info),
// snd_ctl_card_info_get_name(info));
dev = -1;
if (snd_ctl_pcm_next_device(handle, &dev) < 0) // No Devicdes
{
snd_ctl_close(handle);
ReadDevices = realloc(ReadDevices,(ReadDeviceCount + 1) * sizeof(ReadDevices));
ReadDevices[ReadDeviceCount++] = strupr(strdup("DummyDevice"));
Debugprintf("%d %s", ReadDeviceCount, "DummyDevice");
goto nextcard;
}
while(dev >= 0)
{
snd_pcm_info_set_device(pcminfo, dev);
snd_pcm_info_set_subdevice(pcminfo, 0);
snd_pcm_info_set_stream(pcminfo, stream);
err= snd_ctl_pcm_info(handle, pcminfo);
if (err == -ENOENT)
goto nextdevice;
nsubd= snd_pcm_info_get_subdevices_count(pcminfo);
// Debugprintf(" Device hw:%d,%d ID `%s', name `%s', %d subdevices (%d available)",
// card, dev, snd_pcm_info_get_id(pcminfo), snd_pcm_info_get_name(pcminfo),
// nsubd, snd_pcm_info_get_subdevices_avail(pcminfo));
sprintf(hwdev, "hw:%d,%d", card, dev);
/*
err = snd_pcm_open(&pcm, hwdev, stream, SND_PCM_NONBLOCK);
if (err)
{
Debugprintf("Error %d opening input device", err);
goto nextdevice;
}
err = snd_pcm_hw_params_any(pcm, pars);
snd_pcm_hw_params_get_channels_min(pars, &min);
snd_pcm_hw_params_get_channels_max(pars, &max);
snd_pcm_hw_params_get_rate_min(pars, &ratemin, NULL);
snd_pcm_hw_params_get_rate_max(pars, &ratemax, NULL);
if( min == max )
if( min == 1 )
Debugprintf(" 1 channel, sampling rate %u..%u Hz", ratemin, ratemax);
else
Debugprintf(" %d channels, sampling rate %u..%u Hz", min, ratemin, ratemax);
else
Debugprintf(" %u..%u channels, sampling rate %u..%u Hz", min, max, ratemin, ratemax);
*/
sprintf(NameString, "hw:%d,%d %s(%s)", card, dev,
snd_pcm_info_get_name(pcminfo), snd_ctl_card_info_get_name(info));
Debugprintf("%d %s", ReadDeviceCount, NameString);
ReadDevices = realloc(ReadDevices,(ReadDeviceCount + 1) * sizeof(ReadDevices));
ReadDevices[ReadDeviceCount++] = strupr(strdup(NameString));
nextdevice:
if (snd_ctl_pcm_next_device(handle, &dev) < 0)
break;
}
snd_ctl_close(handle);
nextcard:
Debugprintf("");
if (snd_card_next(&card) < 0 )
break;
}
return ReadDeviceCount;
}
int GetNextInputDevice(char * dest, int max, int n)
{
if (n >= ReadDeviceCount)
return 0;
strcpy(dest, ReadDevices[n]);
return strlen(dest);
}
#endif
// We need a local restart tnc as we need to add params and start a python progrm on Linux // We need a local restart tnc as we need to add params and start a python progrm on Linux
BOOL KillOldTNC(char * Path); BOOL KillOldTNC(char * Path);
@ -4584,47 +4292,10 @@ static BOOL RestartTNC(struct TNCINFO * TNC)
char txLevelVal[16]; char txLevelVal[16];
char RigPort[16]; char RigPort[16];
int n = 0; int n = 0;
int i = 0;
pid_t child_pid; pid_t child_pid;
struct FreeDataINFO * FDI = TNC->FreeDataInfo; struct FreeDataINFO * FDI = TNC->FreeDataInfo;
int capindex = -1, playindex = -1;
int i;
if (ReadDeviceCount == 0)
{
GetOutputDeviceCollection();
GetInputDeviceCollection();
}
//
for (i = 0; i < ReadDeviceCount; i++)
{
printf("%s %s\n", &ReadDevices[i][0], TNC->FreeDataInfo->Capture);
if (strstr(&ReadDevices[i][0], TNC->FreeDataInfo->Capture))
{
capindex = i;
break;
}
}
for (i = 0; i < WriteDeviceCount; i++)
{
printf("%s %s\n", &WriteDevices[i][0], TNC->FreeDataInfo->Playback);
if (strstr(&WriteDevices[i][0], TNC->FreeDataInfo->Playback))
{
playindex = i;
break;
}
}
capindex=playindex=3;
printf("%d %d \n", capindex, playindex);
signal(SIGCHLD, SIG_IGN); // Silently (and portably) reap children. signal(SIGCHLD, SIG_IGN); // Silently (and portably) reap children.
@ -4633,14 +4304,17 @@ static BOOL RestartTNC(struct TNCINFO * TNC)
arg_list[n++] = "--mycall"; arg_list[n++] = "--mycall";
arg_list[n++] = FDI->ourCall; arg_list[n++] = FDI->ourCall;
arg_list[n++] = "--ssid"; arg_list[n++] = "--ssid";
arg_list[n++] = FDI->SSIDList;
while(TNC->FreeDataInfo->SSIDS[i])
arg_list[n++] = TNC->FreeDataInfo->SSIDS[i++];
arg_list[n++] = "--mygrid"; arg_list[n++] = "--mygrid";
arg_list[n++] = LOC; arg_list[n++] = LOC;
arg_list[n++] = "--rx"; arg_list[n++] = "--rx";
sprintf(rxVal, "%d", capindex); sprintf(rxVal, "%s", TNC->FreeDataInfo->Capture);
arg_list[n++] = rxVal; arg_list[n++] = rxVal;
arg_list[n++] = "--tx"; arg_list[n++] = "--tx";
sprintf(txVal, "%d", playindex); sprintf(txVal, "%s", TNC->FreeDataInfo->Playback);
arg_list[n++] = txVal; arg_list[n++] = txVal;
arg_list[n++] = "--port"; arg_list[n++] = "--port";
sprintf(portVal, "%d", TNC->TCPPort); sprintf(portVal, "%d", TNC->TCPPort);
@ -4699,8 +4373,9 @@ static BOOL RestartTNC(struct TNCINFO * TNC)
printf ("Failed to start TNC\n"); printf ("Failed to start TNC\n");
exit(0); // Kill the new process exit(0); // Kill the new process
} }
printf("Started TNC\n");
sleep(5000); TNC->PID = child_pid;
printf("Started TNC, Process ID = %d\n", TNC->PID);
return TRUE; return TRUE;
} }

View File

@ -1840,7 +1840,7 @@ int standardParams(struct TNCINFO * TNC, char * buf)
if (_memicmp(buf, "WL2KREPORT", 10) == 0) if (_memicmp(buf, "WL2KREPORT", 10) == 0)
TNC->WL2K = DecodeWL2KReportLine(buf); TNC->WL2K = DecodeWL2KReportLine(buf);
else if (_memicmp(buf, "SESSIONTIMELIMIT", 16) == 0) else if (_memicmp(buf, "SESSIONTIMELIMIT", 16) == 0)
TNC->SessionTimeLimit = TNC->DefaultSessionTimeLimit = atoi(&buf[16]) * 60; TNC->SessionTimeLimit = TNC->DefaultSessionTimeLimit = atoi(&buf[17]) * 60;
else if (_memicmp(buf, "BUSYHOLD", 8) == 0) // Hold Time for Busy Detect else if (_memicmp(buf, "BUSYHOLD", 8) == 0) // Hold Time for Busy Detect
TNC->BusyHold = atoi(&buf[8]); TNC->BusyHold = atoi(&buf[8]);
else if (_memicmp(buf, "BUSYWAIT", 8) == 0) // Wait time before failing connect if busy else if (_memicmp(buf, "BUSYWAIT", 8) == 0) // Wait time before failing connect if busy

View File

@ -2612,7 +2612,8 @@ doHeader:
} }
ReplyLen = GetAPRSPageInfo(_REPLYBUFFER, N, S, W, E, aprs, ais, adsb); ReplyLen = GetAPRSPageInfo(_REPLYBUFFER, N, S, W, E, aprs, ais, adsb);
ReplyLen += GetAISPageInfo(&_REPLYBUFFER[ReplyLen], ais, adsb); if (ReplyLen < 240000)
ReplyLen += GetAISPageInfo(&_REPLYBUFFER[ReplyLen], ais, adsb);
if (allowDeflate) if (allowDeflate)
Compressed = Compressit(_REPLYBUFFER, ReplyLen, &ReplyLen); Compressed = Compressit(_REPLYBUFFER, ReplyLen, &ReplyLen);

View File

@ -1299,7 +1299,6 @@ int main(int argc, char * argv[])
if (needAIS) if (needAIS)
SaveAIS(); SaveAIS();
// Close Ports // Close Ports
PORTVEC=(PEXTPORTDATA)PORTTABLE; PORTVEC=(PEXTPORTDATA)PORTTABLE;

View File

@ -1419,6 +1419,7 @@ VOID SCSPoll(int Port)
TNC->Streams[0].CmdSet = TNC->ConnectCmd; TNC->Streams[0].CmdSet = TNC->ConnectCmd;
TNC->Streams[0].Connecting = TRUE; TNC->Streams[0].Connecting = TRUE;
TNC->Streams[0].ConnectTime = time(NULL);
sprintf(TNC->WEB_TNCSTATE, "%s Connecting to %s", TNC->Streams[0].MyCall, TNC->Streams[0].RemoteCall); sprintf(TNC->WEB_TNCSTATE, "%s Connecting to %s", TNC->Streams[0].MyCall, TNC->Streams[0].RemoteCall);
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE); SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);

View File

@ -271,15 +271,76 @@ void RegisterAPPLCalls(struct TNCINFO * TNC, BOOL Unregister)
} }
BOOL UZ7HOStopPort(struct PORTCONTROL * PORT)
{
// Disable Port - close TCP Sockets or Serial Port
struct TNCINFO * TNC = PORT->TNC;
TNC->CONNECTED = FALSE;
TNC->Alerted = FALSE;
if (TNC->PTTMode)
Rig_PTT(TNC, FALSE); // Make sure PTT is down
if (TNC->Streams[0].Attached)
TNC->Streams[0].ReportDISC = TRUE;
if (TNC->TCPSock)
{
shutdown(TNC->TCPSock, SD_BOTH);
Sleep(100);
closesocket(TNC->TCPSock);
}
if (TNC->TCPDataSock)
{
shutdown(TNC->TCPDataSock, SD_BOTH);
Sleep(100);
closesocket(TNC->TCPDataSock);
}
TNC->TCPSock = 0;
TNC->TCPDataSock = 0;
KillTNC(TNC);
sprintf(PORT->TNC->WEB_COMMSSTATE, "%s", "Port Stopped");
MySetWindowText(PORT->TNC->xIDC_COMMSSTATE, PORT->TNC->WEB_COMMSSTATE);
return TRUE;
}
int ConnecttoUZ7HO(int port);
BOOL UZ7HOStartPort(struct PORTCONTROL * PORT)
{
// Restart Port - Open Sockets or Serial Port
struct TNCINFO * TNC = PORT->TNC;
ConnecttoUZ7HO(TNC->Port);
TNC->lasttime = time(NULL);;
sprintf(PORT->TNC->WEB_COMMSSTATE, "%s", "Port Restarted");
MySetWindowText(PORT->TNC->xIDC_COMMSSTATE, PORT->TNC->WEB_COMMSSTATE);
return TRUE;
}
VOID UZ7HOSuspendPort(struct TNCINFO * TNC) VOID UZ7HOSuspendPort(struct TNCINFO * TNC)
{ {
TNC->PortRecord->PORTCONTROL.PortStopped = TRUE; TNC->PortRecord->PORTCONTROL.PortSuspended = TRUE;
RegisterAPPLCalls(TNC, TRUE); RegisterAPPLCalls(TNC, TRUE);
} }
VOID UZ7HOReleasePort(struct TNCINFO * TNC) VOID UZ7HOReleasePort(struct TNCINFO * TNC)
{ {
TNC->PortRecord->PORTCONTROL.PortStopped = FALSE; TNC->PortRecord->PORTCONTROL.PortSuspended = FALSE;
RegisterAPPLCalls(TNC, FALSE); RegisterAPPLCalls(TNC, FALSE);
} }
@ -359,7 +420,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
{ {
AGW->LastParamTime = ltime; AGW->LastParamTime = ltime;
if (TNC->PortRecord->PORTCONTROL.PortStopped == FALSE) if (TNC->PortRecord->PORTCONTROL.PortSuspended == FALSE)
RegisterAPPLCalls(TNC, FALSE); RegisterAPPLCalls(TNC, FALSE);
} }
} }
@ -618,7 +679,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
SOCKET Sock; SOCKET Sock;
buffptr = Q_REM(&TNC->PortRecord->UI_Q); buffptr = Q_REM(&TNC->PortRecord->UI_Q);
if (TNC->PortRecord->PORTCONTROL.PortStopped == TRUE) // Interlock Disabled Port if (TNC->PortRecord->PORTCONTROL.PortSuspended == TRUE) // Interlock Disabled Port
{ {
ReleaseBuffer((UINT *)buffptr); ReleaseBuffer((UINT *)buffptr);
return (0); return (0);
@ -653,7 +714,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
case 2: // send case 2: // send
if (TNC->PortRecord->PORTCONTROL.PortStopped == TRUE) // Interlock Disabled Port if (TNC->PortRecord->PORTCONTROL.PortSuspended == TRUE) // Interlock Disabled Port
return 0; return 0;
if (!TNCInfo[MasterPort[port]]->CONNECTED) return 0; // Don't try if not connected to TNC if (!TNCInfo[MasterPort[port]]->CONNECTED) return 0; // Don't try if not connected to TNC
@ -1179,6 +1240,8 @@ void * UZ7HOExtInit(EXTPORTDATA * PortEntry)
TNC->SuspendPortProc = UZ7HOSuspendPort; TNC->SuspendPortProc = UZ7HOSuspendPort;
TNC->ReleasePortProc = UZ7HOReleasePort; TNC->ReleasePortProc = UZ7HOReleasePort;
PortEntry->PORTCONTROL.PORTSTARTCODE = UZ7HOStartPort;
PortEntry->PORTCONTROL.PORTSTOPCODE = UZ7HOStopPort;
PortEntry->PORTCONTROL.PROTOCOL = 10; PortEntry->PORTCONTROL.PROTOCOL = 10;
PortEntry->PORTCONTROL.UICAPABLE = 1; PortEntry->PORTCONTROL.UICAPABLE = 1;
@ -1598,6 +1661,9 @@ BOOL CALLBACK uz_enum_windows_callback(HWND handle, LPARAM lParam)
int ConnecttoUZ7HO(int port) int ConnecttoUZ7HO(int port)
{ {
if (TNCInfo[port]->CONNECTING || TNCInfo[port]->PortRecord->PORTCONTROL.PortStopped)
return 0;
_beginthread(ConnecttoUZ7HOThread, 0, (void *)(size_t)port); _beginthread(ConnecttoUZ7HOThread, 0, (void *)(size_t)port);
return 0; return 0;
} }

3
VARA.c
View File

@ -378,6 +378,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
VARASendCommand(TNC, TNC->ConnectCmd, TRUE); VARASendCommand(TNC, TNC->ConnectCmd, TRUE);
TNC->Streams[0].Connecting = TRUE; TNC->Streams[0].Connecting = TRUE;
TNC->Streams[0].ConnectTime = time(NULL);
memset(TNC->Streams[0].RemoteCall, 0, 10); memset(TNC->Streams[0].RemoteCall, 0, 10);
memcpy(TNC->Streams[0].RemoteCall, &TNC->ConnectCmd[8], strlen(TNC->ConnectCmd)-10); memcpy(TNC->Streams[0].RemoteCall, &TNC->ConnectCmd[8], strlen(TNC->ConnectCmd)-10);
@ -401,6 +402,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
PMSGWITHLEN buffptr = GetBuff(); PMSGWITHLEN buffptr = GetBuff();
TNC->Streams[0].Connecting = FALSE; TNC->Streams[0].Connecting = FALSE;
TNC->Streams[0].ConnectTime = time(NULL);
if (buffptr == 0) return (0); // No buffers, so ignore if (buffptr == 0) return (0); // No buffers, so ignore
@ -1577,6 +1579,7 @@ Lost:
TNC->CONNECTED = FALSE; TNC->CONNECTED = FALSE;
TNC->Alerted = FALSE; TNC->Alerted = FALSE;
TNC->ConnectPending = FALSE;
if (TNC->PTTMode) if (TNC->PTTMode)
Rig_PTT(TNC, FALSE); // Make sure PTT is down Rig_PTT(TNC, FALSE); // Make sure PTT is down

View File

@ -10,14 +10,14 @@
#endif #endif
#define KVers 6,0,23,33 #define KVers 6,0,23,34
#define KVerstring "6.0.23.33\0" #define KVerstring "6.0.23.34\0"
#ifdef CKernel #ifdef CKernel
#define Vers KVers #define Vers KVers
#define Verstring KVerstring #define Verstring KVerstring
#define Datestring "November 2022" #define Datestring "December 2022"
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring #define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
#define VerCopyright "Copyright © 2001-2022 John Wiseman G8BPQ\0" #define VerCopyright "Copyright © 2001-2022 John Wiseman G8BPQ\0"
#define VerDesc "BPQ32 Switch\0" #define VerDesc "BPQ32 Switch\0"

View File

@ -2832,6 +2832,7 @@ INT_PTR CALLBACK ConfigDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM
#ifdef LINBPQ #ifdef LINBPQ
#include <signal.h> #include <signal.h>
#include <sys/types.h>
#endif #endif

View File

@ -555,6 +555,7 @@ typedef struct PORTCONTROL
BOOL (FAR * PORTSTOPCODE)(); // Temporarily Stop Port BOOL (FAR * PORTSTOPCODE)(); // Temporarily Stop Port
BOOL (FAR * PORTSTARTCODE)(); // Restart Port BOOL (FAR * PORTSTARTCODE)(); // Restart Port
BOOL PortStopped; // STOPPORT command used BOOL PortStopped; // STOPPORT command used
BOOL PortSuspended; // Suspended by interlock
char PORTDESCRIPTION[31];// TEXT DESCRIPTION OF FREQ/SPEED ETC (31 so null terminated) char PORTDESCRIPTION[31];// TEXT DESCRIPTION OF FREQ/SPEED ETC (31 so null terminated)

View File

@ -398,6 +398,7 @@ struct FreeDataINFO
int TXLevel; int TXLevel;
int Explorer; // Enable reporting to Freedata Explorer int Explorer; // Enable reporting to Freedata Explorer
char SSIDList[256]; char SSIDList[256];
char * SSIDS[16];
}; };

9
upnp.c
View File

@ -33,12 +33,17 @@ POSSIBILITY OF SUCH DAMAGE.
#define MINIUPNP_STATICLIB #define MINIUPNP_STATICLIB
#include <stdio.h>
#ifdef _WIN32
#include "upnpcommands.h" #include "upnpcommands.h"
#include "miniupnpc.h" #include "miniupnpc.h"
#include "upnperrors.h" #include "upnperrors.h"
#include <stdio.h>
#ifdef _WIN32
#include <winsock2.h> #include <winsock2.h>
#else
#include <miniupnpc/upnpcommands.h>
#include <miniupnpc/miniupnpc.h>
#include <miniupnpc/upnperrors.h>
#include <stdio.h>
#endif #endif
int AddMap(char * controlURL, char * eport, char * iport, char * proto); int AddMap(char * controlURL, char * eport, char * iport, char * proto);