
WINMOR TNC Revision History

Revision	Date		Description/changes

1.5.9.0		May 23, 2016
		Public release

1.5.8.1		May 20, 2016
		Improve processing of Winmor registration keys.
	
1.5.8.0		Jan 26, 2015	Replacement of envelope shaping with dblRRCosWindow in WMModulate.

1.5.7.0		Apr 16, 2014	Release of 1.5.6.1 with IPWorks V9

1.5.6.1		Mar 12, 2014	Changed reference from IPWorks V8 to IPWorks V9.

1.5.6.0		Jan 16, 2014	Change to compile in .NET 4.x using the following changes in app.config
				 <startup useLegacyV2RuntimeActivationPolicy="true">
    				<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  				</startup>
				</configuration>
				was
				<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

1.5.5.0		Dec 18, 2013	Release of 1.5.4.4. without change

1.5.4.4		Dec 5, 2013	Add Try/Catch in WMLinkProtocol.ProcessFrameType to capture/log overflow error.
				Modify calculation of blocked by busy hold calculation in ProcessFrameType to avoid overflow. 

1.5.4.3		Dec 4, 2013	Made mod to Parsing MYC command. Now if not in disconnected state will log Exception but will not return "FAULT". 
				Will set to new MYC and force connection state to disconnected. 

1.5.4.2		Dec 3, 2013	Modify Interface.Load to remove MsgBox responses if started with a CommandLine and END program is failure to open control port. 
				Removed message box in WMFFT. Replace with Exception log.

1.5.4.1		Nov 26, 2013	Modify Fault responses that include "not from state"  to show Command for debugging.
	
1.5.4.0		Nov 14, 2013	Release of 1.5.3.2 without change.

1.5.3.2		Nov 11, 2013    Removed "Or state = ConnectionState.Disconnected" in WMGlobals.NewState for test. 

1.5.3.1		Nov 8, 2013	Add Error # logging in Exception logging in Interface.UpateWaterfall and Interface.UpdateSpectrum to allow later suppression of common 
				errors in log. 

1.5.3.0		Nov 5, 2013	Modify WMInterface.Load to handle placement on multiple screens. 

1.5.2.3		Oct 20, 2013	Add read only flag in WINMOR TNC.ini file "EnableWavFileSave=True"  to force writing a time tagged file to disk on each wave stream generation.
				This writes the actual int16 wave file not the stream that is played from the file. Note will generate a lot of disk data... use with caution.

1.5.2.2		Oct 11, 2013	Removed Sub WMModulate.FSXmtFilterNCar and all references. To see if this is what is causing the distorted 4FSK waveform. 

1.5.2.1		Sept 27, 2013	Addition of some additional logging in WMInterface.UpdateWaterfall to try and track random exceptions. 
				Should have no impact on operation.

1.5.2.0		Sept 19, 2013 	Release of 1.5.1.2 without change

1.5.1.2		Sept 11, 2013	Add increased error logging to WMPort.New
				Add additional exception logging to WMPort.objTCPControl_OnConnected
				Expanded Exception logging in WMInterface.StartCodec

1.5.1.1		Sept 10, 2013	Modify WMDecode.DecodeCall to handle -ssid of "G" thru "Z"  Verified by Phil. 

1.5.1.0		June 8, 2013 	Release of 1.5.0.18 without change

1.5.0.18	June 4, 2013	Eliminate setting blnAllIdsSent false in Globals.NewState (line 591)


1.5.0.17	June 3, 2013	Modify WMGlobals.IsValidRadioCallSign and WMEncode.FormatCallsToByte to be able to accept -ssid's of 0-15 and -A thru -Z.
				Trial modification of WMPort.SendCommand to use objTCPControl.DoEvents in WouldBlock recovery (was Application.DoEvents)
				Trial modification of WMPort.SendData to use objTCPData.DoEvents in WouldBlock recovery (was applicaiton.DoEvents)
				Modification of WouldBlock Exit in WMPort.SendData and SendCommand

1.5.0.16	May 31, 2013	Cleanup. Comment out extra debug logging in Decode4PSK8QAMData, Decode8PSK16QAMData, and Decode16PSK32QAMData
				Report Rcv frame being acquired as "xPSK/yQAM" and then show actual xPSK or yQAM once frame is decoded.
				Include "intT" tracer on exception logging for Decode4FSKData2, Decode4PSK8QAMData, Decode8PSK16QAMData, and Decode16PSK32QAMData 
				Re adjust dblAlpha value back to .10 for Decode4PSK8QAMData, Decode8PSK16QAMData, and Decode16PSK32QAMData  (was .05)

1.5.0.15	May 31, 2013	Modify calculation and Logging of Min and Max ratios to average ratios in Decode4PSK8QAMData, 
				Decode8PSK16QAMData, and Decode16PSK32QAMData
				Modify Decode4PSK8QAMData and Decode8PSK16QAMData to show Decoded status as PSK or QAM.

1.5.0.14	May 31, 2013	Add testing and exception logging for incorrect bytCarData lengths in Decode4FSKData2, Decode4PSK8QAMData,
				Decode8PSK16QAMData and Decode16PSK32QAMData to avoid decoding exceptions. 

1.5.0.13	May 30, 2013	Added Try/Catch in Decode16PSK32QAMData.  Added "intT" tracer and log in Decode4PSK8QAMData, Decode8PSK16QAMData, and Decode16PSK32QAMData 


1.5.0.12	May 30, 2013	Modify WMReedSploman8.RSDecode to exception log correct bytRcv size and return null array if size error.
				Modify WMDecode.CRCCheck8 and CRCCheck16 to return false if data array not large enough
				Add logging in critical areas of WMDecode.DecodeV16PSK32QAM to track down potential array size errors. 

1.5.0.11	May 30, 2013	Replaced WMDecode.Decode4FSKData with Decode4FSKData2 which uses simplified data/parity collecion like QAM Modes
				Delete Decode4FSKData, MemARQ4FSKData and MemARQ4FSKParity 

1.5.0.10	May 29, 2013	Addition of WMDecode.DecodeV8PSK16QAMData and DecodeV16PSK32QAMData (Tested to confirm extended parity recovery)
				Comment out of all unused subs and functions. 

1.5.0.9		May 29, 2013	Correction of WMDecode.DecodeV4PSK8QAMdata to use local objRS8Xdecode

1.5.0.8		May 29, 2013	Cleanup of WMDecode.Viterbi4PSK8QAMDecode and logging
				Modification of LogSessionStats
				Change Sleep from 200 ms to 300 ms in WouldBlock of WMPort.SendCommand
				Change tmrWatchdog interval from 5000 ms to 10000 ms & remove restart in tmrWatchdog_Tick
				

1.5.0.7		May 28, 2013	Add Function WMDecode.DecodeV4PSK8QAMData to replace Decode4PSKData and MEMARQ functions.
				Added new collection cllDataParity
				Modified Viterbi8QAMDecode to Viterbi4PSK8QAMDecode to handle both QAM and PSK decoding with QAM flag. 

				
1.5.0.6		May 28, 2013    Put initial data modes back to 2Car4PSK (WINMOR 500) and 8Car4PSK (WINMOR 1600) negating data mode initialization in 1.5.0.5 

1.5.0.5		May 24, 2013	Remove forcing WMCB.Robust True in WMLinkProtocol.Initialize (negating change in 1.4.7.1)
				Change inital data modes to 2Car4FSK (WINMOR 500) or 8Car4FSK (WINMOR 1600) (was 2 car and 8 car 4PSK)

1.5.0.4		May 24, 2013	Added ClearSessionStatus in WMLinkProtocol to insure stat values are cleared so as not to contaminate Stat logging. 


1.5.0.3		May 24, 2013	Modify LogSessionStats to bypass if not bytes transferred and include bytes transferred and session bandwidth.
				Added session time (minutes) to SessionStatlog 
				Removed from Debug logging to reduce bulk:
					[AcquireSymbolFraming] intPtr: ....
					Acquired Symbol Framing, NCO Correction ...
					[AcquireFrameType4FSK] Insufficient data Retur ....
					[AcquireFrameType4FSK] Failed frame ....
					[AcquireSymbolFraming]  intPtr: " & intPtr.ToString & "  intJatPk: ...

1.5.0.2		May 23, 2013	Make modifications on how magnitude threshold is computed and used WMDecode.DecodeV4PSKData,DecodeV8PSKData, DecodeV16PSKData
				Change IRR Low pass dblAlpha from .35 to .05 (gives a Time constant now of ~.22sec )
				Change recompute of threshold (by carrier) on each sample using dblQAMratio
				Add sessiion statistic gathering and logging (if debug enabled) to capture avg scores, decode succes ratios, and total QAM corrected symbols. 

1.5.0.1		May 22, 2013	Restored initialization of intPSK16To8Backoff from 30 back to original 20 in WMLinkProtocol.initialize
				Added score debug logging for QAM modes to better asses score impact on decoding success.

1.5.0.0		May 20, 2013	Release of 1.4.7.14 with updated help and expansion of recycle time to 500 ms addition for 8 Carrier modes and 100 ms 
				addition for 2 Carrier modes to accomodate slower computers.(WMLinkProtocol.GetRecycleTime)
				 
1.4.7.14	May 18  2013	Trial like 1.4.7.13 except replace Root Sin with corrected (minor) Welsh window (Rcv and Transmit).

1.4.7.13	May 18  2013	Trial like 1.4.7.12 except replace Welsh window (Rcv and Transmit) with Root Sin Window.

1.4.7.12	May 18, 2013	Trial like 1.4.7.11 except Remove transmit filter and shape transmit symbol with Welsh window

1.4.7.11	May 18, 2013	Trial version just like 1.4.7.10 except with Rcv Symbol windowing with Welsh Window.

1.4.7.10	May 17, 2013	Modified MagParity processing in Viterbi8QAMDecode, Viterbi16QAMDecode and Viterbi32QAMDecode to simply 
				replace bytViterbiData if not debug logging to save processing of seach/log for corrected symbols  

1.4.7.9		May 17, 2013	Trial of extending recycle time on 8 carrier modes from 200 ms to 400 ms. (WMLinkProtocol.GetRecycleTime)

1.4.7.8		May 16, 2013    Tuned and verified parameters:  QAM Ratio = .5 (no change.  Appears optimum tested over range of .4 to .6)
				dblAlpha value in Magnitude low pass filter. Was .1  optimum found at ~.35 

1.4.7.7		May 16, 2013	Inclusion of 8QAM mode (should be backward compatible with 4PSK) which includes additional 
				data bit (3 total) used for RS Correction of Viterbi phase data. 

1.4.7.6		May 16 2013	Heavy logging of Viterbi16QAMDecode and MakeNCar16QAMData to track down 
				why RS magnitude correction not working correctly on 16QAM mode.
				Corrected indexing error in both Viterbi32QAMDecode and Viterbi16QAMDecode that
				was using incorrect index for dblMagThreshold in magnitude compare. 
				Remove excess debug logging above
				Add mechanism and logging to track Min and Max carrier to threshold in Viterbi16QAMDecode and Viterbi32QAMDecode

1.4.7.5		May 15, 2013	Correct 180 degree Phase value for Mag in ModNCar32QAMTCMIFFT
				Add experimental function WMModulate.ModNCar16QAMTCMIFFT for 16QAM Parity
				Add experimental function WMEncode.MakeNCar16QAMData for 16QAM Parity
				Add experimental function WMDecode.Viterbi16QAMDecode for 16QAM Parity
				Modify function WMDecode.Decode8PSKData to accomodate 16QAM or 8PSK
				set dblQAMRatio = .5 (was .6)
				Change dblAlpha factor in DecodeV16PSKData and DecodeV8PSKData from .2 to .1 (more filtering. time constant now  ~110ms)

1.4.7.4		May 14, 2013	Modify score calculation in WMInterface.UpdatePhaseConstellation to ignore radius errors for QAM

1.4.7.3		May 13, 2013	Inclusion of 32QAM mode (should be backward compatible with 16PSK) which includes additional 
				data bit (5 total) used for RS Correction of Viterbi phase data. 
				Increase of initial intPSK16to8Backoff from 20 to 30 to encourage more agressive shift from 
				8PSK to 32QAM.
				Additional test logging to evaluate 32QAM effectivness.
				initial 32QAM amplitude ratio is .6 (inner symbols have .6 magnitude of outer symbols or -4.4 dB power). 

1.4.7.2		May 8, 2013	Add filter for transmitted signal WMModulate.FSXmtFilterNCar to restrict bandwidth (1600 Hz or 500Hz @ -30 db)
				Remove tranmist symbol windowing
				Remove Receive symbol windowing. 
				Add WMCB.Robust initialization during Initialize upon connection start. 

1.4.7.0		Mar 21, 2013	Release of 1.4.6.1 without change. 

1.4.6.1		Mar 19, 2013	Addition of Globals.blnForceClose  Set force close if Retry count exceeded for Send Command or Send Data. tmrPoll tests blnForceClose.

1.4.6.0		Mar 2, 2013	Release of 1.4.5.7 without change.

1.4.5.7		Feb 27, 2013    blnCWIdSent renamed to blnAllIdsSent. This is now set when the CWID is sent and CWID is enabled
				or when the ID Frame is sent and CWID is not enabled. Avoids a complex state/race issue. 
				The sending of the "dash" when no CWID is no longer done. 

1.4.5.6		Feb 27, 2013	Modified WMInterface.tmrPoll Tick to require blnCWIDSent to move to Connection State Disconnected. 
				To eliminate problem with PTT timeout when CWID not enabled. 

1.4.5.5		Feb 27, 2013	Modified tmrCallback ID to send single "dash" if CW ID not enabled to avoid state problem. 

1.4.5.4 	Feb 20, 2013	Added debug log info to WMDecode.DecodeConReq4FSK to show target and CRC failure with score.

1.4.5.3		Feb 17, 2013	Added objInterface.AbortSoundStream in WMLinkProtocol.tmrCallback, ProcessNewCapturedData

1.4.5.2		Feb 17, 2013	Changed initial inactivity timeout on connect request from 60 to 120 sec.

1.4.5.1		Nov 15, 2012	Change multiple references to WMModulate and WMDemodulate to single global ones. (memory leak?)

1.4.5.0		Oct 18, 2012	Release of 1.4.4.1 without change

1.4.4.1		Oct 16, 2012	Change mod index in tmrPoll to 3 (was 2) to allow control updates every 96 ms (was 64 ms) 
				Change lower limit on intRoundTripLatency to 800 (was 1000) ms. 
				Added 200 ms pad for 8 carrier modes in GetRecycleTime to accomodate slower CPUs on Receive.
				Increasing Level of 8 car 4FSK by 1 dB to match PSK modes (now 2 dB boost) 

1.4.4.0		Oct 13, 2012	Release of 1.4.3.1. without change

1.4.3.1		Oct 12, 2012	Make mods in WMPort for handling "would block", TCPdelay,  and multiple connections
				Change frmReg.ShowDialog to new thread to show dialog and not block StartCodec in Sub StartCodec.

1.4.3.0		Oct 5, 2012	Release of 1.4.2.6 without change

1.4.2.6		Oct 4, 2012	Change Round trip calculation in WMLinkProtocol.MeasureRoundTrip to have minimum of 1000 ms
				Still log actual measurement to debug log. 

1.4.2.5		Oct 1, 2012	Minor change in Interface.UpdateWaterfall to update correct bandwidth indicator (green lines)

1.4.2.4		Sept 25, 2012   Moved check for registration of call sign from WMInterface Load event to StartCodec. This to permit host program to operate easily 
				with multiple call sign registrations.

1.4.2.3		Sept 18, 2012	Modify resetting of inactivity timeout from 30 to 60 seconds in WMLinkProtocol.ProcessControl upon state IRS or IRSModeShift

1.4.2.2		Sept 2, 2012	Modify KeyPTT to include variable dttApplyPTT and check for timeout to insure PTT off if any problem. Add logic and logging to tmrPoll for this.


1.4.2.1		June 9, 2012	Increase Inactivity timeout upon a connect Request from 30 to 60 sec to minimize pre mature shutdown.

1.4.2.0		June 5, 2012	Recompile of 1.4.1.1 for release (verified compatible with 1.4.1.0) 

1.4.1.1		June 1, 2012	Changed Root Raised Cosine Windows to Welch windows in both WMModulate and WMDemodulate.  Testing showed some marginal improvment
				Changed scaling factors for PSK Modulation for approx 1.5 dB additional on both 2 Car and 8 Car PSK modes
				Cleared Test flag to enable file saving 

1.4.1.0		May 18, 2012	Display options to show spectrum and disable Spectrum/Waterfall (to avoid any problems with graphic drivers)

1.4.0.0		Sept 4, 2011 	Release of 1.3.3.11 (no changes to rev 1.3.3.11)

1.3.3.11	Sept 3, 2011	Remove Transparency Key info to set same as old version 1.1.8.0

1.3.3.10	Aug 27, 2011	Trace info added to UpdateWaterfall and DisplayConstellation


1.3.3.9		Aug 26, 2011	Combine DisplayWaterfall with UpdateWaterfall. No need to use synchronous queue with new dual rectangle method of graphic update.
				Eliminate synclocks in UpdateWaterfall, UpdatePhaseConstellation and UpdateFrequencyConstellation
				Slow down Rcv Level updates by factor of 5 (reduces CPU loading and makes easier to read)

1.3.3.8		Aug 25, 2011	Modify DisplayWaterfall and DisplayConstellation to use dual rectangle method but combine into one bitmap using
				new graComposit and then sending resulting bmpNewbmp for display. Based on measurement should substantially reduce CPU loading 

1.3.3.7		Aug 21, 2011	Modify DisplayWaterfall and clean up.
				Modify UpdateFrequencyConstellation to include Try/Catch and exception logging. 
				Make similar fix to UpdateConstellation and DisplayConstellation. as for Spectrum  
				Fix Busy Detector display to initialize after disconnect.
				Added variable blnClosing to insure no graphic updates during close.
			

1.3.3.6		Aug 21, 2011	Add on-line suggestion as to how to fix GDI error. Using second bmp bmpNewSpectrum.
				Eliminate drawing rectangles to scroll...just implement in copy of bmpSpectrum to bmpNewSpectrum


1.3.3.5		Aug 21, 2011	Change in 1.3.3.4 reversed. 
				Synclock (objWaterfallLock) added before UpdateWaterfall in ProcessCapturedData
				Synclock (objWaterfallLock) added before DisplayWaterfall in tmrPoll.Tick
				Exception log in Try/Catch enabled in DisplayWaterfall
				Exception log in Try/Catch enabled in UpdateWaterfall

1.3.3.4		Aut 21  2011	Special test version with all Protocol process suspended (no call to objWMProtocol.ProcessNewCapturedData) in ProcessCapturedData

1.3.3.3		Aug 20, 2011	In tmrPoll.Tick remove check for cllPlaybackDevices = nothing.
				In tmrPoll.Tick remove objPlayback.Dispose() 
				In tmrPoll.Tick remove prgACKPercentage.Refresh() under lblConnectedCall
				In tmrPoll.Tick add prgACKPercentage.Refresh() under prgACKPercentage

1.3.3.2		Aug 19, 2011	Modify WMInterface.UpdateWaterfall to closely match same function in version 1.1.8.0
				Modify WMInterface.DisplyWaterfall to closely match same function in version 1.1.8.0
				Add test of blnDisplayingWaterfall in tmrPoll.Tick to keep DisplayWaterfall from being re entrant.

1.3.3.1		Aug 18, 2011	Modify calculation of T>RLatency to use value of only one collection.
				Add 1536 null samples (128 ms) to all transmitted signals to accomodate Flex SDR trimming off Transmit symbols 
				Modify "BW" command to accept a parameter of 0 as well as 500 and 1600 (0 disables a connection)
				Add array AuxBW(9) in Globals to hold Bandwidth for each Aux Call sign
				Add command "AUXBW" to accept bandwidth value(0,500,1600) for each Aux Call sign
				Modify DecodeConReq4FSK to check for Bandwidth values > 0 before accepting Connect
				Modify UpdateWaterfall to set BW lines to max of WMCB.Bandwidth or any Aux Callsign BW

1.3.3.0		Aug 9, 2011	Remove excess logging.
				Fix problem with display of ACK percentage.
				Release of 1.3.2.5 

1.3.2.5		Aug 5, 2011	Change minimum WMCB.ResponseDelay to 300 ms (was 100)
				New Sub WMProtocol.DelayResponse now delays any response ResponseDelay - Vox Extension in ms
				This will handle T>R latency up to 300 ms and normal VOX leader will have no affect on frame cycle time
				Minor cleanup in MakeLeader4FSK
				General cleanout of all old and and unused code.
								


1.3.2.4		Aug 4, 2011	Modify ratio calc in SearchForLeaderTone4 to raise ration to the power of (squelch/10) to 
				reduce the ratio effect for lower squelch values.
				Increase maximum decode distance from 2.0 to 2.5 in AcquireFrameType4FSK (appears to work better on marginal decodes)
				Rework BusyDetect and ProcessFrameType to better handle busy block.
				Reduce calls to busy detector to every 50 ms
				Modified T>R latency reporting to use green background if < 250 ms, red if > 250 ms.

1.3.2.3		Aug 3, 2011	Add TNC version number to Me.text 
				Modify debug logging to aid in tracking decoding process.
				changed fixed threshold for ThreshDetect2 to WMCB.Squelch ^ 2
				Tested but abandoned 500 Hz BPF on mixed I and Q. (no measureable improvement on 500 Hz mode)
				Fixed error in latency calculation not using Absolute value of sampels in average.
				Modify KeyPTT and PlaySoundStream to minimize latency variations.
				Add uppler limit on sleep of 2100 ms before playing sound files.
				Cleand up KeyPTT and setting blnPTT to make consistent.
				In Interface reduce notify size to 8192 (was 16284) to minimize receive latency (now avg of 43 ms).
				Change intNUMBERRECORDNOTIFICATIONS to 64 to maintain 5.4 second total sound card buffer
				Modify Update waterfall to use both I and Q samples but only update every other notify to keep same speed.
				Reduce intConReqCycle from 4200 to intConReqFrame + 1500 (about 3000) 
				Make pad on cycle calculations consistant at 300 ms. (was 200 in a couple of places)
				Reduce intTquiet from 1500 ms to 1000 ms
				

1.3.2.2		Aug 2, 2011	Modify SearchForLeaderTone4 to do just correlation (no envelope)
				Modify ThreshDetect2 to use just current and past Cor values and fixed threshold.
				Modify AcquireSymbolFraming to first filter I and Q at 1125 Hz using FSF then compute envelope 
				from filtered I and Q and then filter envelope with FSF at 93.75Hz.
				

1.3.2.1		July 31, 2011	Add Automatic T>R Latency measurement, logging and display.

1.3.2.0		May 15, 2011	Release of 1.3.1.10 (no changes to prior rev) 

1.3.1.10	May 13, 2011	Fixed problem with AutoShiftNoACKs if in 4FSK data modes.

1.3.1.9		May 13, 2011	Added mechanism and routine AutoShiftNoACKs to shift to more robust data mode
				if >5 data repeats without seeing an ACK from the IRS.


1.3.1.8		May 5, 2011	Add changes to WINMORInterface.FormClosed to insure TNC TOP and LEFT ini parameters are 
				always within the working rectangle (keeps TNC Form visible).
				Change inactivity timeout in WMLinkProtocol to 120 seconds (was 90 seconds).
				Make intTSF always inactivity timeout/4 (30 seconds) no increases.
				Return calc of AvgACKPercentage to use Alpha/2 in tmrCallback.elapsed (was Alpha/1.5)

1.3.1.7		April 30, 2011	Modify logic in Transision from SendID to Disconnect states.
				Add more descriptive tracing in SendID transition to document logic path taken
				Modify WMProtocol.UpdateRobustFlag to save/restore shift parameters along with data mode


1.3.1.6		April 29, 2011	Temporarily remove auto robust shift (need to verify rest of algorithm first)
				Eliminate enmLastModeSent variable now just enmCurrentDataMode
				Modify restore of enmCurrentDataMode when leaving Robust mode.
				Add addtional debug logging to trace Mode shifting and Robust shifting.

1.3.1.5		April 27, 2011	Modify auto shift mechanism to include new saved variable to save/restore current data mode when moving to/from Robust.
				Shift to PSK4_2Car to <= 68 bytes (was 136) in CreateOBDataFrame
				Change auto shift in CreateOBDataFrame to require ISS mode and to reinitialize backoffs and Shift Up/Dn Pct.

1.3.1.3		Mar 18, 2011	Modify CreateOBDataFrame Auto shift mechanism to restrict auto shifting to limited cases and to re establish average
				ack percentage upon each shift.

1.3.1.2		Mar 16, 2011	Add Current call sign and connected call sign to WINMOR TNC Text when connected.
				Additional changed in CreateOBDataFrame to use 2 carrier modes when possible after shitch to ISS.

1.3.1.1		Mar 14, 2011	Make minor change in CreateOBDataFrame to use 2 carrier mode when possible in 8 car modes.

1.3.1.0		Mar 10, 2011	Release of 1.3.0.12 (no changes)

1.3.0.12	Mar 10, 2011	Set busy block constants. Tquiet = 1500 ms, Tnbl = 600 ms

1.3.0.10	Mar 8, 2011	Modified Busy block logic.

1.3.0.8		Mar 6, 2011	Modified Protocol.SendIDFrame to use stcConnectedCall.strTargetCallsign if not empty to
				accomodate proper ID of Aux call signs. 

1.3.0.7		Mar 6, 2011	Modified CaptureDevices property to test for cllCapture devices and re initialize if nothing.

1.3.0.6		Mar 1, 2011	Added Synclock and use of blnFormClosing flag to avoid Graphic errors including form close.

1.3.0.4		Mar 1, 2011	Removed command processing for LOG  (no longer used).

1.3.0.3		Feb 28, 2011	Added additional logging to track down waterfall issue.

1.3.0.0		Feb 28, 2011	Update revision level for release. No functional changes to 1.2.0.6

1.2.0.6		Feb 26, 2011	Modify "transparency key" on all visible forms to Deep purple to clear up transparancy issues on some installations.
				Update Help.

1.2.0.4		Jan 29, 2011    Modifiy logic on FEC send to createOB data frame before testing for bytOB.length

1.2.0.2		Jan 15, 2011	Modified Upshift mechanism in GearShiftAlgorithm.  Slow decrease with each try (was .5,now .666)
				Limit max Shift up threshold to 92% (was allowed to approach 100%)

1.2.0.1		Jan 13, 2011    Add state conditions to WMInterface.Disconnect to not call AsyncDisconnectRequest if 
				in Disconnected, Disconnecting or Offline states.

1.2.0.0		Jan 11, 2011	Modify GearShift Algorithm: intTSF initialized at 30 sec then retries each 15 sec.
				Eliminate CaptureState undefined
				Insure forcing of capture state to SearchForLeader upon ACK transmission failure
				Increase debug logging


1.1.8.0		July 9, 2010	Release of 1.1.7.2

1.1.7.2		July 8, 2010	Modified Busy Block to send "BLOCKED by Busy channel" in stead of FAULT. Documentaion updated.
				Added wait of up to 5 seconds for Non busy channel for ID upon frequency change. If channel not clear after 5 sec will create busy channel fault and log.
				Moved sound card buffer overrun log from exception to Debug. Always seems to recover correctly from this rare sound card hiccup.

1.1.7.1		July 4		Added tmrCallback.Stop() to all request for restarting the call back timer. This was likely the cause of unexplained short repeat cycles (e.g. Break) observed.

1.1.7.0		July 2		Release of 1.1.6.3 With Updated Help and documentation

1.1.6.3		July 2		Added Option in basic setup menu to enable/disable application/TNC traffic logging.

1.1.6.2		July 1		Modified ExtractEnvelope2 to require dblEnvPkMinusMin2Pk to be > .1 for framing
				Modified SearchForLeaderTone3 to require intPk2MinCount > 2
				Modified SearchForLeaderTone3 to start for peak search after 384 samples (was 512)

1.1.6.1		June 30		Added 5 Second watchdog time to Log exception and send FAULT if loss of tmrPoll for > 5 sec.
				Modified SearchForLeaderTone3 to use fixed threshold of .1 in place of WMCB.Squelch/20
				Modified threshold in WMLinkProtocol.ThreshDetect to used fixed value of .5 in place of WMCB.Squelch/10
				Moved and Modified Squelch control to only affect busy detector
				Modified CreateOBDataFrame to always use 4FSK (long or short) when WMCB.Robust True						Modified WMDemodulate.ExtractEnvelope2 to search for last peak vs max peak
				

1.1.6.0		June 24 	Release of 1.1.5.3

1.1.5.3		June 22		Trial elimination of synchlock in PlaySoundStream and in tmrPoll of Interface
				Inclusion of exit in SearchForLeaderTone3 if pk count or PkToMin value too low to reduce 
				FFT loading of when low probability of detect.

1.1.5.3 	June 21		Trial change to increase notify size from 8192 to 16384 and reduce #of notifications from 64 to 32.
				Modify Interface.UpdateWaterfall to eliminate toggle since now is called half as often due to larger notify size.

1.1.5.2		June 20		Trial change in Protocol.ProcessNewCapturedData to change loop bailout to 40 (was 20) and reduce logging.	
				Modified Interface.WaitThread from 500 ms wait to -1 (infinite wait)  Buffer size is approx 5 seconds. 

1.1.5.1				Fixed Protocol.Send4FSKCodedControl to update strLastWave.
				Fixed logic in PlaySoundStream that could cause race condition with early shutoff via PTT.
				Fixed logic and PlaySoundStream to return capture state to SearchForLeader upon failure to start playing wavestream.
				Trial Fix of WMProtocol.DecodeFrames (line 361/362) to avoid processing if in DISCONNECTING state.

1.1.5.0 	June 16, 2010	Release of 1.1.4.1

1.1.4.1				Modify to update squelch value in the ini file if value changed AND nudSquelch is enabled.
				Update Help

1.1.4.0		June 14,2010	Release of 1.1.3.1

1.1.3.1				Modified Squelch control to be disabled on loss of focus and require clicking "Squelch" label to enable. This prevents accidental change especially with mouse wheel.

1.1.3.0		June 13. 2010   Production release of 1.1.2.1

1.1.2.1		June 12, 2010	Change reset of intInactivityTimeout from 15 sec to 30 sec.  Added additional logging to track source of entry to disconnecting state. 
				Modification of ProcessNewCapturedData to avoid hangup
				Incorporation of Squelch control and setting
				Allow forcing Host address and Port number in command line startup
				Imported part of V4 TNC to use Goertzel TD and FSF to improve accuracy of leader detector and coarse symbol framing. Created new function ExtractEnvelope2 and modified SearchForLeaderTone3 to use these.
				Help and documentation updated.

1.1.2.0		May 12, 2010	Release of 1.1.1.5

1.1.1.5				Modified logging to show IntACK = -1 if frame ID decode failed.

1.1.1.4				Added while wait loop (300 ms max) in PlaySoundStream to wait for startup of objPlayback. Log if failure.
				Modified logging to use strLastWav in PlaySoundStream


1.1.1.3				Added synchlock in WMInterface.tmrPoll to insure synchronization with PlaySoundStream

1.1.1.2				changed Try/Catch logging in WMLinkProtocol.ProcessNewCapturedData to include stack trace to hunt down overflow problem.
				Modified AddToIBPacktsInProcess2 to delay distance error logging from 5*#carriers to 10*#ofCarriers 
				Modified criteria for shift to 4FSK if RObust = true to 4PSK score < 40 (was < 25) in WMLinkProtocol.CreateOBDataFrame
1.1.1.1				Put PTT Keying inside PlaySoundStream
				Remove all calls to PTT except for PlaySoundStream and timeouts.

1.1.1.0		May 8, 2010	Release of 1.1.0.6 

1.1.0.6				Added Connection State IRSModeShift to WMLinkProtocol.ProcessControl for Case Idle to eliminate hang if Answer to ISS Mode shift request results in an IDLE from ISS.
				Update of Help and Help index

1.1.0.5				Fixed failure to update capture state on WMLinkProtocol.SendNCar8PSKTCM.

1.1.0.4				Modify tmrPoll interval back to 32 ms with slow segment every 64 ms.

1.1.0.3				Modify exception logging if aborting playing sound wave or stuck PTT in WMInterface.tmrPoll
				Modify Sound card restart trip limit from 10 to 12 seconds. 
				Modify placement of dttLastSoundCardCapture=Now in WMInterface.ProcessCapturedData
				Remove nested Try/Catch in WMInterface.ProcessCapturedData

1.1.0.2				Move set of RecState = Transmitting to in front of every call to PlaySoundStream
				Put logic in WMInterface.ProcessCaptureData to not update water fall in Transmit mode.
				Add synclock objPlaySoundStreamLock in WMInterface.PlaySoundStream

1.1.0.1				Removed condition of Not PTT in test for restart in this statement of tmrPoll.Tick
				"If Now.Subtract(dttLastSoundCardCapture).TotalMilliseconds > 10000 And blnEnableCaptureRestart Then"

1.1.0.0		April 22, 2010	Release of 1.0.9.2 

1.0.9.2		April 20, 2010	Set RestartRecovery to reset dttLastReply to avoid a timeout after sound card restart.
				Changed sound card timeout trigger back to 10 sec (was 5) to see if it reduces the number of restarts.
 				Changed WMInterface.ProcessCapturedData to reset dttLastSoundCardCapture whenever bytCaptureData.length > 0 

1.0.9.1				Change RestartCaptureDevice to insure playback buffer is not playing and NOT reset WINMOR connection state.
				(need to verify this will recover a session)
				Modify WMInterface.tmrPoll to 20ms(was 32) with sub tick every 100ms (was 64). Move some functions to 100 ms poll. 
				Reduce timeout trigger for RestartCaptureDevice from 15 to 5 seconds.
				Try new Search for leader algorithm using WMDemodulate.SearchForLeaderTone3 which uses the Goertzel algorithm for non integer bin tone detection (more sensitivity and accuracy). Tests indicate Goertzel algorithm works and is more accurate using non integer frequency bins.
				Increase margin in GetRecycleTime to 300 ms (was 200 ms).
				Fixed non updates of dttLastGoodDecode in WMLinkProtocol (triggers use of Goertzel algorithm) 
				

1.0.9		April 17, 2010	Replace synchronous queue Play wave stream mechanism with call to (now Public) PlayWaveStream() in WMInterface. Eliminates tmrPoll ambiguity and latency. 
				Remove EarlyPTT function and call (no longer needed with above).
				Include automatic 40 ms Dwell in KeyPTT when going from Keyed to unkeyed.
				Added clear of blnIDSent to Initialize (caused extra data repeat on startup).
				Fix WMLinkProtocol.SendCWID to not show "-ssid" on transmit label.
				Use Global Call sign filters to check valid call sign for registration.

1.0.8.0		April 15, 2010	Release of version 1.0.7.2

1.0.7.2				Add additional down shift mechnanism in WMLinkProtocol.GearShiftAlgorithm based on time since last positive ACK response.  Should force downshift it > 45 sec since last dttReply (positive ACK).
				Add provision in WMLinkProtocol.CreateOBDataFrame to shift to 2Car4FSK mode if Robust = true, and > 30 seconds since last positive ACK.
				Make small tweak in BusyDetect to dblAvgBaselineFast = .5*(dblAvgBaseline + dblAvgBaselineFast) [was = dblAvgBaseline] to minimize BusyWide sensitivity to static crashes.
				Fix comparison in RestartCaptureDevice that did not force upper case.
				Make changes to accomodate large type fonts.

1.0.7.1				Changed measurement of turn around latency to occur only on initial response to data frame.
				Changed GetCycle length to use intMeasuredTurnAroundLatency
				Base intIDCycle calculation on intMeasuredTurnAroundLatency and recalc in MeasureLatency
				Initial intMeasuredTurnAroundLatency set to 1500 ms (a safe value)...normally measured latency will be 700-1200ms.
				Added mechanism for EarlyPTT upon initial connect request to insure proper PTT keying. Only affects initial answer ACK.


1.0.7.0		Mar 28, 2010	Add TCP Address parameter to basic setup and ini file. Defaults to "127.0.0.1"
				Updated documentation.

1.0.6.0		Mar 26, 2010	Change local host setting on WINMOR TNC TCP port to "127.0.0.1" to insure it is using local loop back and not default internet connection.
				Update help with firewall info.

1.0.5.0		Mar 25, 2010	Release (no changes from 1.0.4.1) 

1.0.4.1		Mar 24, 2010	Modified intTquiet to be set for 500 ms after decode of Connect request and then reset back to 2000 ms in Busy Detect. Should allow shortening Con Req cycle. 
				Increase exception error logging for port issues.

1.0.4.0		Mar 22, 2010	Addition of automatic Basic Setup menu popup if port conflict/failure detected on startup. Test of updated port and opption to loop back or end program if port conflict remains.
				Change Tquiet from 1800 ms to 1500 ms. 

1.0.3.0		Mar 16, 2010	Release of 1.0.3.0 no changes from 1.0.2.4

1.0.2.4		Mar 15, 2010	Fixed a problem in WMDecode.DecodeConReq4FSK that was not showing a monitored Con req to another call sign if sum check was OK.

1.0.2.3		Mar 15, 2010	Modify resetting of dttLastReply on a connect request only if it matches the session ID (keeps other connect requests from holding up timeout) 

1.0.2.2		Mar 15, 2010	Reduce Quiet time limit for non busy from 2000 ms to 1800 ms.
				Modify registration reminder to accept call sign in addition to registration key.

1.0.2.0		Mar 12, 2010	Tweaks in SearchForLeader2, and SoftExHammDecde2.  Move Threshold in leader detect from 2.5 to 2.0.
				Add Command MAXCONREQ <limit>  to adjust retry count limit 3-15  default = 5 (about 20 seconds)

1.0.1.0		Mar 4, 2010	Release for distribution ...no changes from 1.0.0.3

1.0.0.3		Mar 3, 2010	Added check for Nothing in AuxCalls() in WMDecode.DecodeConReq4FSK
				Changed intInactivityTimeout upon receipt of initial connect request from 20 to 30 sec. 
				Changed intConnectReqTimeout from 15 to 20 seconds.
				Added SetCaptureState(SearchForLeader) in WMLinkProtocol.ProcessID. This triggered a sound card restart if DecodeID4FSK failed.	
				Added asynchronous response "OFFSET" upon new tuning offset.
				Changed  intConReqCycle to 1195 + 256 + (22 * (intLeaderLength + intVoxExtension)) + 500 ms
				Remove Exception logging for DisplayConstellation and DisplayWaterfall errors.
				Modification of busy detector parameters. Minimum quiet before declearing clear = 2000, max pre ConReq Clear 500 ms, Connect request repeat cycle, 4200 ms, connect request frame length 1547 ms 
				Added support for SUFFIX command and Suffix CW ID.

1.0.0.2		Feb 28, 2010	Added command MYAUX to allow setting up to 10 auxillary call signs
				Added asynchronous response TARGET to identify connect target
				Modified registration pop up to only show on startup if not registered.

1.0.0.1		Feb 26, 2010	Increased timeout for sound card restart from 7 to 15 seconds.
				Adding test for Busy Lock on FEC send modes.
				Added test for Busy Lock on SendID command
				
1.0.0.0		Feb 26, 2010	Initial production release. Include 10 second sound card reset holdoff for CWID and send ID commands

0.4.1.11	Feb 25, 2010	Fixed error in 	WMDemodulate.AcquireFrameType4FSK that was causing premature abort (return -2) in some cases with sessions using VOX.
				Added ability to select sound card default in Basic Setup 
				Added Command and response listing in debug log to help application developers.
				Updated Help and documentation.
				Modifed FEC modes to no automatically send ID frame at beginning and end of FEC transmission to facilitate keyboard modes.

0.4.1.8		Feb 9, 2010	Made command BW return the value of stcConnectedCall.SessionBW which will be 0 if not connected and either 500 or 1600 if connected.

0.4.1.7		Feb 5, 2010	Fixed startup minimized functionality.

0.4.1.6		Feb 4, 2010	Added condition in WMLinkProtocol.ProcessData to skip decoding of frame types 8-11 (8 carrier) modes if not in 1600 bandwidth mode.
				Conditioned ACK of ID frame to only ACK if ID is to the station connected to.	

0.4.1.5		2/1/2010	Fixed checks for Amateur, MARS and UK Cadet call signs that were in RegistrationHelper to use global functions. verified with correct check of "CIW111".

0.4.1.4		1/27/2010	Added ini and COMMAND LEADEREXT allowing leader extension up to 24 symbols (256 ms). Not yet fully tested.
				Replaced INIFile with new version not using API to work around Vista problem.

0.4.1.3		1/25/2010	Removed NewState(Offline) in ProcessCapturedData now only command to go to state Offline is in StopCodec

0.4.1.2		1/24/2010	Added NewState(Disconnected) to WMInterface.RestartCaptureDevice upon successful restart.
				Added Transmit lable update during two tone test.

0.4.1.1		1/22/2010	Debugged FEC mode both 500 and 1600 Hz. Default is FEC receive = disabled.

0.4.1.0 	1/21/2010	Extended Trip time for dttLastSoundCardCapture from 3 to 7 seconds in WMInterface.tmrPoll
				Extended retry hold off from 20 to 30 seconds in WMInterface.tmrPoll
				In RestartCaptureDevice clear capture state and KeyPTT added.
				ProcessCapturedData: Move Reset of dttLastSoundCardCapture to Decimation code.
				Updated WMLinkProtocol.Process Control for case &HFF to not include state disconnecting.
				Extend intActivityTimeout from 15 to 20 seconds in WMLinkProtocol.DecodeFrames

0.4.0.8		1/12/2010	Fixed bug in tmrCallBack.Elapsed where tmrCallBack interval was not set to FSKCtrlCycle when in ISSModeShift.
				Increased window time on busy block to 1000 ms (was 500).


0.4.0.7		1/12/2010	Modified function RestoreOBQueueFromLastPSN to log and clear collections if intLastSequencedPSN = intLastPSKRestored to correct rare error in packet accounting.
				Modified SENDID command to condition on DISCONNECTED state and put in test Menu item to SENDID.

0.4.0.5		1/10/2010	Added condition to WMInterface.Codec property to include condition last sound card capture.

0.4.0.4		1/6/2010	Increased size of notification buffer to 64 notifications (about 5.4 seconds)
				Modified timeout and join time limits in StopCodec and RestartCodec functions
				Incorporated suggestions from Peter in WaitThread
				Additional additional Try/Catch and logging in ProcessCapturedData

0.4.0.0		1/3/2010	Added test for Average FSK Score of > 50 to allow 4PSK mode during proposal
				Modified GearShiftAlgorithm to use intPSK4To4FSKBackoff in shifting up to PSK modes.
				Modified PSK scoring algorithm to incorporate RMS calcualtion of both magnitude and phase
				Added 42 ms "back Porch" extension to PTT to accomodate sound path latency in FLEX radios.
				Initial coding (not fully tested) for 2 Car and 8 Car Viterbi 4FSK FEC broadcast modes.
				Changed Log names to WM TNC Debug and WM TNC Exception 