DScope M1 ChangeLog (ChangeLog.txt dated 20260424) Date 20260424 ProductVersion 1.50.15.2739 ProductCode (x86) {A200EE8E-D3DD-4921-B929-0EFB5C354841} ProductCode (x64) {B71C430B-297E-4DC0-BB31-DA0EFBCD76CD} Version 1.50i - For General Release IMPORTANT - This release Invalidates early 1.0 (and prior)LSS licences. Please contact Spectral Measurement for an up to date licence. - [Bz1316] Rebrand PrismSound to SpectralMeasurement Started replacing "Prism Sound" text, links, icons, and bitmaps to Spectral Measurement ones. Still lots to do. - [Bz1319] 8 degrees phase error There was frequently a +/-8 degree phase at certain sampling rate dependent frequencies. This was because there was a band of frequencies where a Low Pass Filter could be enabled in the zero crossing filter of one channel but not the other even though both channels were at the same frequency. - [Bz1126] Assorted minor bug fixes Many minor bug fixes that shouldn't affect functionality but should improve robustness and efficiency. - [Bz1298] USB Device Investigation Added development diagnostics which allowed us to fix numerous problems that could prevent the USB audio stream channels from working reliably on certain Windows PCs, especially when streaming at higher bitrates. This GREATLY improves reliability on certain PCs. REQUIRES NEW FIRMWARE though maintains compatibility with prior firmware as long as new diagnostics are not enabled. - [Bz1300] ASIO crashes Fixed some dScope crashes that could occur when using Soundcard inputs and outputs. This especially affected ASIO soundcards and was worse on dS3 hardware where the crash happened silently at program shutdown but would leave the dS3 firware in a state where communications could not be recovered when the dScope software was restarted (but no error was reported). Also modified the logic so that Channel mappings are remembered per soundcard. This is to work around a problem when a configuration is loaded which uses a soundcard that the software does not yet have any knowledge of. By saving per soundcard we now remember the mapping and it can be restored when the device is found (in theory!!!). NOTE: Not perfect - further work required. - [Bz1310] Show whole ASIO channel name in panels Now show up to 32 characters as several devices have channel names like "Channel 1", "Channel 2", etc, which isn't very usful if the last few characters aren't displayed. - [Bz1308] Use Unicode consistently Some sub-projects were using the old MBCS encoding rather than Unicode/UTF-16LE Also Added some logging to check whether we are using chinese, or not, and to print out hex values at points where we print out what appears to be chinese (but is probably just gibberish). - [Bz1050] Soundcard Outputs plays back corrupted/mixed buffers I've made the channel mapping and interleaving on soundcard outputs an output function rather than a generator function. Now we always generate samples for two channels to two (non-interleaved) temporary buffers then copy them to the actual device output buffers (rather than generating samples for each (of up to 64) output device channel and interleaving on the fly). - [Bz1299] Autosequence midnight overflow Whilst doing soak testing, had a number of cases where the Autosequence script crashed at exactly midnight whilst updating the progress bar. Microsoft VBScript runtime error Overflow: 'oSeqMenu.ProgBar.curpos' File: Auto Sequence.dss Line 12919, Column 13 Added function Secs_Since() to handle case where an overflow was being caused by the vaue returned by Timer() being reset to 0 at midnight. NOTE: Still can't handle periods greater than 24 hours. - [Bz1295] Move trace cursor to current Mark if no next or prev Mark After selecting a different Mark in OnMarkPrevious() or OnMarkNext() the Trace Cursor is automatically moved to the newly selected Mark. However, if there is only one Mark then cannot select a different Mark so the operation fails and the cursor is not moved leaving no easy way to move the cursor to the (only) Mark. We now always set the cursor to the current Mark after Next/Prev operation even if operation had no effect. NOTE: Not perfect - further work required - [Bz1293] Channel Check Scripting Bug Set m_bChannelCheckFailedSticky when Channel Check has failed when running on dSMini. For some reason this was only implemented when using dS3 hardware which meant that the ChAChannelCheckFailed and ChBChannelCheckFailed script members always returned False. - [Bz1287] Add Trace and Channel wildcards in OLE Getfirst+Next trace functions Now allows TRACE_ANY and CHANNEL_BOTH as parameters to GetFirstTraceOfType() and TRACE_ANY as parameter to GetNextTraceOfType() to allow the user to get a full list of traces. For example the following VBS snippet will get a full list of traces. strTraceList = "TRACETYPE_ANY, CHANNEL_BOTH" & vbCrLf sTraceID = TraceWindow.TW_GetFirstTraceOfType(TRACETYPE_ANY, CHANNEL_BOTH) Do While sTraceID <> TRACE_NULL_ID strTraceList = strTraceList & "TraceID = " & sTraceID & " : " & Trace.TRACE_Name & vbCrLf sTraceID = TraceWindow.TW_GetNextTraceOfType(TRACETYPE_ANY) Loop MsgBox strTraceList NOTE that last channel and last traceID are saved for each trace type individually rather than using the channel number and traceID of the current OLE selected trace, which might not even be of the correct trace type for the type specified in GetNextTraceOfType(). - [Bz1291] Trace OLE anomalies 1. OLEGetCursorYUnit() was not being diverted to CurrentOLETrace when called on CurrentTrace and the two traces are different. 2. Calls to OLEDefaultZoomY() were actually being directed to OLEAutoZoomY() if redirected to CurrentOLETrace when different from CurrentTrace. 3. Changed some OLEXxx functions that are not called by scripts to DoXxx() in TraceOLEData.cpp so that it is more obvious which functions need to be redirected to CurrentOLETrace if not the same as CurrentTrace. - [Bz1289] UseAwayMode + TimerResolution Added code to allow: SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED); and timeBeginPeriod(m_uTimerResolutionMS) to be called to ensure that the PC doesn't go to sleep and that we are using a higher resolution timer at all times. These are optional and are currently controlled by: HKEY_CURRENT_USER\SOFTWARE\Prism Sound\DScopeApp2\Debug\UseAwayMode which is a REG_DWORD which should be set to 0 (disable) or 1 (enable) and HKEY_CURRENT_USER\SOFTWARE\Prism Sound\DScopeApp2\Debug\TimeResolutionMs which is a REG_DWORD which should be set to 1 (= 1000 timer interrupts per second) or 0 which leaves windows at the default of 64th of a second. NOTE: the settling code automatically changes the timer interrupts to 1ms when actve, anyway, so not sure this is worthwhile in most cases. - Bz1286 CCIR468 filters in the CTA and FFT measurement On both dSMini and dS3 the samples were not adjusted back to nominal unity gain after weighting filters were applied. Instead the Amplitude, peak and other results from CT analysis were fudged to give the expected results but the live CTA scope trace showed the non-adjusted values (which for CCIR468-1K were about 12dB down on the non-weighted signal at 1K Hz) and the FFT worked on the non-adjusted samples. For dSMini we now apply a weighting factor to the processed samples and perform CT analysis and FFT analysis on the adjusted samples so the fudging of CT results is no longer required.. As dS3 performs CT analysis in firmware we still need to fudge the CT analysis results but we now adjust the samples so that the CT live trace shows the corrected sample values and the FFT analysis works on corrected samples. Applies to CCIR468 1KHz and 2KHz filters plus A-Weighting (and C-Weighting but that has a unity gain weighting factor). - [Bz1285] Crash during Graph OLE Export Problem turned out to be a UserTrace being created and then deleted again before the Quick Legend code got around to dealing with various Trace Update messages which meant that the Trace module bombed out when it tried to access the deleted trace. NOTE: needs re-visiting as the fix is more of a workarpound to massively reduce the chance of the problem occuring as a bullet-proof solution would need a considerable amount of re-engineering. - Bz1281 Swept sine ramp anomalies (1) Now defaults to WF_GAUSSIAN window function rather than dB ramp (-100dB to 0dB). This can be set by HKCU\SOFTWARE\Prism Sound\DScopeApp2\Debug\SweptSineRamp where 0=windowed, 1=linear ramp, 2=dB ramp (2) Fixed problem with divide by 0 if a ramp period of 1 selected. (3) Now starts trailing silence at a zero crossing. This can be turned off by zeroing HKCU\SOFTWARE\Prism Sound\DScopeApp2\Debug\SweptSineZeroX (4) To make testing easier the above registry entries are reloaded on each swept sine wave table generation rather than once at start up. - [Bz1258] Add TRACE_SetPoints() script function bRet = TRACE_SetPoints(lXPos, lNumPoints, arrXVals, arrYVals, bUpdateDisplay) Implemented TRACE_SetPoints() to replace multiple calls to TRACE_SetPoint() which can be quite slow due to the overhead of marshalling each call from the script to the C++ COM interface. Using VBScript on my PC it has reduced the time to draw 32000 points from about 300 milliseconds to about 6ms (including the time to update the trace display). Apparently C# is significantly slower in this regard but I haven't had a chance to check the speed up yet. - [Bz1256] Trace transform NaN problem Added check for divide by zero (or near-zero) to prevent NaN errors when interpolating X-value traces where adjacent points can have the same (or nearly the same X-Values). This was causing problems in UserTrace but the same could happen with Sweep, and FFT Response traces and Limit Lines. - [Bz1249] Crash after Tooltips buffer overflow with long filename Windows TOOLTIPTEXT structure only has an 80 character buffer for the text associated with a ToolTip. Because the UserBar tooltips display the name of the associated script or config file, 80 characters is inadequate and we were attempting to write beyond the end of the built in buffer. We now use a larger static buffer if the tooltip text is too long for the built-in buffer and then truncate if the static buffer is still too small. - [Bz1242] Regulation and mic sensitivity Fixed so that Regulation is informed of (and acts on) changes to the DA Lineup. - [Bz1232] Channel B graph export issue - WORKAROUND Changing the analyser channel whilst the Print/Export Settings Panel is open may cause subsequent Exports to use the wrong channel if done via the export button on the Export Preview page. This is because the Export preview is actually done by the Print preview code with the Print button being replaced with the Export button. As the Print preview code doesn't know how to do the export, the button is set to send a command to another window but this bypasses the code used which selects the correct channel in case it has been modified since the Settings panel was opened. This change is really a work around in the sense that we trap when ChA Graphview tries to do an export when only ChB is being analysed and vice-versa rather than preventing the situation arising in the first place. This would require a deeper understanding of WTF is going on. - [Bz1237] Chinese characters used unexpectedly The code was checking for a bit mask rather than using equality when checking for whether the user wanted to us Chinese rather than English (the only two supported languages) so that any locale with the 0x04 bit set would be treated as Chinese (e.g. Assamese, Bangali, Gujarati, Zulu etc) Version 1.50h - For Air India M1HP Acceptance Date 20210219 ProductVersion 1.50.14.2647 ProductCode (x86) {61A9D3F2-EA27-432B-BC3F-8618646D1B5D} ProductCode (x64) {30EAD96B-8DFA-4991-ADA1-D05910265E6E} - [Bz1235] AO sample rate resets to 96KHz when config with 768KHz loaded Now ensures that the output sample rate is set to 384KHz on dSMini if input is 768KHz. - [Bz1234] Interim fix for 768K sample offset Now delays input Channel A by 1 sample at 768KHz to cancel out the 1 sample delay added to Channel B in the FPGA. This is an interim fix until the FPGA is corrected. - [Bz1231] Selecting 80KHz filter in script editor uses 40KHz Now selects correct filter. - [Bz1230] Crash if unsupported panel (e.g. GPIO) in default config Just give warning if configuration contains settings for hardware not supported/licensed on current dScope model. Mostly affected GPIO and dS3 monitor output settings. - [Bz1229] Allow sensed sweep frequency to go up to 384K Hz Allow to go up to half Nyquist at 768K for sensed sweep. - [Bz1228] Removed ScriptDlg 1200x1024 max co-ordinates limit - [Bz1084] Added updated help files to cover GPIO + a few previous omissions. - [Bz1177] Added basic GPIO to dSMini Implemented GPIO on dSMini including: - GPIO panel - Config file. - Script interface - Events Requires modified ARM and FPGA firmware NOTE: By default pin inputs and outputs are inverted so are active low. This can be overriden by a couple of registry entries so that they revert to active high. 8< ------------- Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Prism Sound\DScopeApp2\Hardware] "DSM_GPIOInvertInputs"="1" "DSM_GPIOInvertOutputs"="1" --------------- 8< There are no settings for this - they need to be set manually. TODO: Some of the nice to haves have not yet been done: - Ability to tear off pin status as a separate panel. - Ability to tear off individual pins as readings. - Ability to specify pin numbers in script events. - [Bz1220] Increased reference amplitude range from +/-200 to +/-300 - [Bz1216] Fixed crash with some ASIO drivers Fixed a couple of bugs related to ASIO cards with no inputs, and swapping between different ASIO drivers. TODO: When loading a config using ASIO inputs and the existing config does not have the same ASIO device configured then the ASIO input channel assignments are reset - first ASIO channel is assigned to Analyser ChA and second channel to Analyset ChB. - [Bz1211] Fixed crash with more than 32x32 ASIO channels There was a design limit of 32x32 ASIO channels but would try to use more than that if the ASIO device supported more. This would cause a crash when using Wave Table generated signals. Have upped the design limit to 256x256 (but cannot guarantee that it will actually work with that many devices). - [Bz1173] Added jitter generation and analysis for dSMini - [Bz1204] [Firmware] Tweaked HF compensation filter parameters Tweaked slightly to give a flatter response. - [Bz1210] Prompt user to reconnect dSMini USB after sleep Usually, when the PC/laptop comes out of sleep mode, a connected dSMini is detected but fails to respond to interrogation requests. This is really a driver issue, however, reconnecting the USB often cures the situation but at present may fail as we may be retrying to re-detect the box at the time that the USB cable is unplugged. By delaying the retry (via a user prompt) we can ensure that we aren't trying to re-discover the box at that time. - [Bz1202] Fixed Lock ups when using FFTD with Weighting filter script - [Bz1202] Tweaked dSMini Digital Input Carrier phase compensation - [Bz1199] Fixed crash in FFT Params when changing trigger point with A-wtg - [Bz1126, Bz1193, Bz1116] Various minor bug fixes, stability and thread safety improvements. Date 20200709 ProductVersion 1.50.13.2612 ProductCode (x86) {ECD05CE9-DE0B-4EB9-A97F-D2D67D7B70DB} ProductCode (x64) {B8730ED4-02CC-42E4-8775-BC2BDEEDD9AE} Version 1.50g - For general release - [Bz1197] Upgraded Auto Sequence.dss to 2.038. See Auto Sequence.dss header comments for details. - [M1 Bz1194] Disable SMPTE-DIN CT Detector script for M1 Added new version of CT Detector Function script that gives a warning and advice to use FFT detector scriptif not supported by CT Detector for the device [dS3 implements it in the DSP]. Also add updated help files that explain that support may be added in an upcoming release (+ fixes a few other help file problems). NOTE: The new script is not installed during version upgrade by default but is on new installations. - [Bz1188] Fixed a number of customer reported issues relating to using an FFT detector result as the basis for the trace X-Axis. Start amplitude resets when switching between linear and logarithmic. -- Was resetting lower range to 1Volt as values below 1 were being reset to 1 when swapping to logarithmic scale as value zero is not allowed. At one time this would have been 1uV but a change was made to only have mV and uV as different representations of the same unit, not entirely separate units. Minimum amplitude of 1mV not shown: -- For some reason was being shown as Volts only (and not mV or uV) and only shown to two decimal points so that 0.001 became 0.00. Will now show mv or uv as appropriate but NOTE still only 2 decimal places so values below 0.01uV will show as 0.00 still (any change to more than 2 digits would be system wide so probably best left until after the next release. Channel B does not take the signal analyzer as an input for the X-Axis even though it is set up to do so in the sweep setup. -- Fixed bug whereby Channel B X-Axis source was not always being kept in step with Channel A. NOTE: That the config files saved that reproduced this bug have the invalid B channel X-Axis function saved so need to select another function and switch back to sort the problem out. After turning the x-Axis Source off and on again, the graph is offset and the x-Axis values are not correct anymore. -- Was not supplying the FFT detector ID when trying to figure out what units + relativity (+ other parameters) so could end up using wrong values for converting units. In this case the offset was an RMS offset wrongly applied. Now attempt to update "related" traces and redraw all traces and Axes at end of an inner sweep in case the XScales were modified. NOTE: There are still numerous problems in this area and further work is required but things are significantly better so not worth delaying the release further. - [Bz1196] Fixed some Windows Handle leaks. These could happen when a registry entry was not found or after interrogating the multi media capabilities after Windows reported a possible device change. - [BZ1190] Fixed some context sensitive help links that were broken due to limiting the filenames to 29 characters in the App. [TODO] There are still some broken cross help file links which will be fixed in the next release. - [Bz1178] Fixed TraceID enumeration bug when loading both limit lines from which could lead to both maximum and minimum limit lines having the same ID so that it would only be possible to access one of them. - [Bz1123] Fixed bug whereby creating limit line from user trace could wrongly report an out of memory error - [Bz1185] Fixed Buffer overflow of filter bins when frequency too high for sample rate - [Bz1184] Fixed buffer overrun on config load of CT filter. - [Bz1084] Updated help files + added context sensitive help for Virtual Monitor Output panel. - [Bz1183] Added "Load Factory Default" button to the Customize Userbar dialog to make it easier to restore back to a sensible state. Also made the logic of when to prompt the user to save the userbar a bit more sensible. - [M1 Bz1171] Virtual Monitor Outputs improved (though still always attempts to connect to default soundcard output which must be configured for 48kHz). - [M1 Bz1174] Auto-ranging. Added 0.2dB hysteresis to fix problem of continuous hunting when manual setting was overridden even though the signal level was not changing. (e.g. if the Signal generator was set to roughly the same as the manual setting when generating sine wave). - [M1 Bz1156] Fixed problem whereby the manual range was being overridden by auto-ranging but there was no indication of this on the Analogue Inputs panel if the auto-range value was changing frequently or swapping frequently between auto and manual (e.g. when generating Burst tone with peak level too high for the manual range settings). NOTE: This does not stop the continuous hunting under such circumstances, but at least there is now a clue as to what is happening. - [M1 Bz1172] Fixed problem with D/A line up in config file not being applied until there was a change in the analogue input range setting. This could happen if the input range was very low both before and after loading the config file, including not plugging in an plugging in an analogue signal source until after the config file loaded. - [M1 Bz1168] File Paths. Found another place where fixed rather than relative paths were being used. - [Bz1164] Removed 2 second delay in main loop when notified of a possible soundcard change by Windows. This caused the Trace window and Readings to stall (and may possibly also have led to occasional loss of audio samples). In most cases the notification was nothing to do with the soundcard, but could be any device change including something like a smart TV joining the network. - [Bz1155] dScope now runs at "Above Normal" priority by default. This appears to have made operation much more stable when other CPU hungry programs are running. Resisted the urge to default to "High" priority, though this can be set using Task Manager. - [Bz1163] No longer attempts to change protected registry settings when not running with administrator privileges as this seemed to have attracted the attention of some anti-virus software and caused performance issues. It is recommended that dScope be run at least once as administrator after installation - or re-installation - to enable it to register commands in File Explorer's (right-click) context menu and to register the COM interface for automation. - [M1 Bz1165] Fixed problem whereby soundcard input was not always turned off after loading a config file that didn't have soundcard analysis enabled with the result that the soundcard input could get fed to the analyser buffers in addition to the selected analogue or digital input samples. - [M1 Bz1160] Fixed a problem whereby soundcard analysis didn't always start without manual reselection after loading a config file if the previous config file didn't have soundcard analysis enabled. - [M1 Bz1162] Fixed occasional crash when loading a config file that enabled a wave table generated signal (including swept sine, bin centres etc) on the soundcard output. - [M1 Bz1161] Fixed problem whereby analogue and digital outputs weren't always enabled after loading a config file that also enabled soundcard outputs. Date 20200116 ProductVersion 1.50.12.2568 ProductCode (x86) {C156426A-023C-41DD-9600-0DFA55B84891} ProductCode (x64) {40C76834-B5C2-4352-BBE0-BC1BBFCC2B86} Version 1.50f - For general release (but has incomplete Virtual Monitor Output functionality). - Improvements to sample sequences demonstrating more features and with improved settling on readings that are essentially noise (including phase offsets) and that don't necessarily converge. (Bz1152). NOTE: Generally, previously installed sample sequences are not modified on an update as they are not crucial to system operation and the user may have customised them; HOWEVER, there have been a lot of changes in the last few releases that have greatly improved the samples sequences so the decision has been made - on this occasion - to move any existing sample sequences to backup directories and install the new sequences in the user's Documents directory. User supplied Sequences that are not in the Prism supplied Sample directories are not affected. - Fixed a related bug whereby an experimental "converge on noise" feature was being enabled by default. This feature has been entirely removed as it needs considerable further work to be useful. (Bz1121) - Bug fix: Outputs were being muted and some settings updated even if a configuration file was just being loaded to display which settings the file contained in the "Load Configuration" and "Save Configuration as" controls. This not only led to unnecessary interruptions in the outputs but could lead to the system being left in an inconsistent state. (Bz1131) ** END **