RELEASE NOTES ------------- DATE VERSION DESCRIPTION --------------------------------------------------------- 04.27.16 1.0.1 Change calculation of RGB lighting to comply with regulatory limit on blue LED brightness; adjust other colors to keep proportional. 05.10.16 1.0.2 Add support for serial numbers starting with "U" to match the new labeling scheme; update version number display; minor VOA feedforward calculation fix. 05.24.16 1.0.3 Change amp module so that it allows a maximum drain voltage of 7.5V instead of 7.25V, before digital pot adjustment stage, which was needed for some boxes where the starting voltage is slightly higher than the previous limit. 08.04.16 1.0.4 RC1 Support for multiple standard wavelengths, with backward compability with existing EEPROM data supplying VOA coefficients and tap responsivities for a single wavelength. EEPROM data can indicate if extra data is provided for these values at 1310, 1550, and 1590 nm. If so, it can also specify a hard-coded choice of power-on default wavelength for the GUI to use. If the power-on default is not provided an iTLA API is used to determine laser band. If that reports one of the standard bands O, C, or L then 1310, 1550, or 1590 is chosen, respectively, for the default wavelength. If not 1550 is chosen. If the extra wavelength data is not provided, the GUI is told to disable the wavelength selection feature and only the old data is used for tap responsivities and VOA coefficients. This is for backward compatibility with boxes with older EEPROM data or to build a custom box where the hardware is only suited to one wavelength. Also has support for an error popup when bias calibration fails. 08.05.16 RC2 Refactor some code that detects startup wavelength; bug fix; wavelength from EEPROM is now sent to GUI correctly at startup. 08.09.16 RC3 Remove some unused variables and functions in Bias Control; fix bug in VOA startup which would result in bad coefficients applied when run on a box without multi-wavelength coefficient data 08.09.16 RC4 Add some logic to the calibration scan in bias control to detect when an external modulator is not responding to sweep, either because too little light is going in, too little light is coming back, or the cable to control the bias voltage is not connected. Passes basic testing. 08.11.16 1.0.5 RC1 Allow the EEPROM to specify custom min and max amp swing voltages. Push these values out to the GUI on startup and sleep/wake. Configurable min/max swing voltages were already implemented in the GUI. 08.12.16 1.0.5 RC2 Tweak the calibration scan logic in Bias_Control.c for Patrick 08.29.16 1.0.6 Fix a counting bug in eeprom_data that resulted in bad format 2 amp data saved to EEPROM (data contained valid voltages alternating with zero voltages). This was causing amp errors on MX40B S/N 122. NOTE: this bug only manifests itself in the bootloader, since while the application is running the unit does not accept EEPROM data. I am just updating the application build to keep the version numbers and source code in sync as much as possible. 10.10.16 1.0.7 RC1 Add support for MX G boxes. Other than that, changes are minimal. 10.11.16 1.0.7 Add support for overriding the standard part ID and/or appending a "-SPNNN" suffix to the model description. Both of these options depend on settings in the EEPROM data. 02.23.17 1.0.8 Minor fixes to maintain compatibility with some bug fixes on the development branch. 03.15.17 1.0.9 Support for 35E with linear amplifier page. The GUI version 1.4.3 or later is required to support the 35E. This build supports a third amp type, type 3, a third amp data format, format 3, and an option to have amp type zero, meaning no amplifier. Amp data in format 3 uses +/-XX.YYY format for its numbers instead of +/-X.YYY like the format 1 and format 2 data. The format is otherwise similar, 20 columns, but only 14 rows. The first column values represent amp gain in dB. 05.09.17 1.5.0 Official support for SCPI-like remote control of laser and VOA functions; requires GUI 1.5.0 (or else GUI will not properly update when settings are changed). Also supports version 2 EEPROM layout and the extended swing option with format 4 amp data (shipping initially to HiLight for MX10B-LB S/N 109). 06.22.17 1.5.1 Bug fix: on boxes running previous builds of the 1.5 firmware, and which had the multi-wavelength feature enabled in EEPROM, changing the wavelength setting on the box did not actually update the VOA coefficients and tap responsivity values for the alternate wavelengths. The values for the startup wavelength would remain in effect. This could result in incorrect tap tap readings at the alternate wavelengths and possible poor VOA behavior especially at low attenuations, although the boxes that shipped with this bug passed multi-wavelength testing so the differences may be within our error thresholds. 07.20.17 1.5.2 Performance improvements: tweak some edge cases and parameters in the VOA to make the VOA behavior more stable on boxes with somewhat poor VOA curve fit and high insertion loss. 05.23.17 1.1.5 This is an updated version of the "sweep only" firmware taken from the clang remote control branch which also produced sweep- only firmware 0.0.0, 1.1.1, 1.1.2, and beta releases (with early remote control functionality) 1.1.3 and 1.1.4. This 1.1.X branch is basically dead, and I'm continuing most development with 1.5.0 and up, but I created this updated version so that the sweep-only firmware used for VOA calibration could understand the version 2 EEPROM layout and format 4 amp data initially for MX10B-LB S/N 109. The goal is eventually to support the VOA sweep in the standard firmware, maybe in 1.6.0, and then I will not have to maintain the 1.1.X branch any longer. 07.07.17 1.6.0 B1 First beta version of 1.6 for testing. Handling of GUI bias power button is uncertain when GUI is in power low state. RGB lighting settings can be controlled remotely but are not integrated with GUI for accent lighting. Similar situation with wavelength feature. 07.21.17 1.1.6 Slight update to the "sweep only" firmware which allows it to run with EEPROM data configured for the MX 35E. The old amp code in GUI_Comm.c calls the swing and crossing point APIs in Amp_Power.c even though the settings should not be applied to the linear amp in the 35E. The code in Amp_Power.c catches this and hits breakpoints. I just took out the breakpoints so that these calls do nothing and so are harmless. The long-term fix is to get VOA sweep support working in the 1.6+ versions but this fix makes it possible to do VOA sweeps on the 35E without crashing. 07.27.17 1.6.0 B2 Incorporates many minor fixes. Wavelength feature is fully integrated. SCPI integration of Amp and MZM bias features has undergone basic testing but should still be considered beta level. MZM bias can still be shut off by LCD GUI which could result in confusing behavior for a user trying to control bias modes via SCPI. The LED control works but is not integrated with the LCD GUI (the LCD GUI does not update displayed settings when the LED red, green, and blue levels are changed via remote control). 07.28.17 1.6.0 B3 New SCPI command to support triggering bias recalibration ("reset auto bias"). Fix problem displaying bias voltage. 08.09.17 1.6.0 B4 RGB controls improved, integrated with LCD GUI. All known bugs fixed. Testing this version with TLX1. 08.10.17 1.6.0 B5 Fixed some minor bugs with RGB lighting. TLX family reports tap 2 now as laser output via SCPI. Amp swing Vpi and MZM bias reset commands via SCPI are now rejected with "missing hardware" error in units with no amplifier and no MZM bias. 08.11.17 1.6.0 B6 Fixed problem which caused the microcontroller to overwrite the LCD GUI's initial screen brightness and sleep time values. This resulted in the display page going to minimal brightness when it was opened. 08.14.17 1.6.0 B7 Firmware guarantees that LCD screen brightness is always set to a minimum of 10 upon wakeup after sleep. This prevents the behavior where the user sets the brightness all the way down, puts the instrument to sleep, wakes it back up, and can't see anything, and so can't navigate to the Display & Sounds screen in order change the brightness. I have also made this change in the LCD GUI software, but I'm adding an extra check in the firmware so we use a "belt and suspenders" approach. 08.16.17 1.6.0 B8 Fix a bug with scaling values going to the POT_Set_DDS_Pos() API. This was setting dither too high and resulting in terrible performance of the 35E in quad auto modes (with dither). 08.23.17 1.6.0 B9 Allow the remote control API for amp swing to use the same upper and lower limits as the GUI. This makes it so if we have a unit with an extended swing range, the remote control API will allow the extended swing values. The Windows GUI still limits the range to the standard 3.0..7.0Vpp range, but AMP:SWING: commands with extended range values can be sent via RS-232. 08.25.17 1.6.0 B10 Fix a bug that prevents the limiting amplifiers from actually receiving swing changes when in digital mode. This does not affect the 35E (which does not use the swing setting). 08.31.17 1.6.0 This is the same as beta 7 with the exception that this build disables the debug touch area on the splash screen. This version is approved for use with TLX instruments, either installed at time of manufacture or as a field update. 08.31.17 1.6.1 B1 Test build for 10B and 40B and 35E. Removed some code on the MZM Bias page that sets the manual ratio and voltage setpoints when we enter the manual ratio and bias modes. This prevents dramatic jumps in bias voltage. Moved this logic to the firmware so that it works correctly when the mode changes are driven by remote control or LCD GUI, instead of just when driven by the LCD GUI. This build must be used with 1.6.1 B1 LCD GUI firmware. 09.04.17 1.6.1 B2 Test build for further refinements to the control logic to help avoid extra page reloads, beeps, and voltage jumps when changing MZM Bias mode. Uses some special flag values to indicate to the LCD GUI when certain value updates are part of a remote-control driven mode change, or generated by an update to the bias voltage or ratio setpoints as part of a mode change. 09.05.17 1.6.1 B3 Further refinements to control logic for handling MZM bias mode as smoothly as possible. Added logic to match changing some of the "mode precursor" values in the back end when the full mode value is changed by SCPI, because we were not getting these changes pushed back from the GUI on mode change, and also, doing that would introduce possible race conditions. Fix some logging code in the LCD module for debugging purposes. Mode changes seem fairly solid now but the GUI responds sluggishly -- does not finish redrawing the bias page in some cases until 2-3 seconds have elapsed since changing the setting in the GUI. 09.06.17 1.6.1 B4 Minor changes to startup mode precursor values in MZM bias logic. Prevents some redundant execution. Add some additional logging code for debugging & performance checking with millisecond time values reported. Changes to LCD task timing values to send commands to the LCD GUI faster. Slight tweak to timeout value used when waiting for acknowledgements. Can't really tighten this up more because the LCD GUI is often slow to send acknowledgement, especially when page loads happen. To some extent we can't avoid this because we have to use page loads to get new screen state to be redrawn correctly. Current timing settings are based on experimentation, testing "worst-case scenarios" with communication with the LCD GUI. Double the timeout in MZM_Main.c waiting for IO22 -12V_An_GOOD (aka -12V_Good) GPIO to read high. This works around a timeout that happens inconsistently on one MX10B whose power supply may be an outlier, but I'm assuming this could happen on other boxes which are otherwise normal. 09.06.17 1.6.1 B5 Minor changes to allow the microcontroller to not send bias mode updates in the cases where only the bias power is changing. This lets us avoid additional page loads in the LCD GUI. 09.14.17 1.6.1 B6 Slight fix to implementation of wavelength set function so that we allow the single supported wavelength to be set, on boxes without multi-wavelength tap responsivity and VOA coefficient data. Put default values in queues for reading bias mode and bias setpoint via SCPI even if MZM bias has not been turned on. 09.18.17 1.6.1 B7 SCPI library has been updated to latest version. Turn on support for detailed SCPI errors. 09.19.17 1.6.1 B8 SCPI is configured to send only a carriage return and not carriage return/line feed after responses. Trying to set wavelength to a value that isn't supported results in a "illegal parameter" error instead of "missing hardware" error. 09.21.17 1.6.1 This is the release build, the same as B8. This version is approved for MX B family instruments and I expect to approve it for 35E and 40G instruments as soon as I can put it through testing on those systems. 10.04.17 1.1.7 Update to the sweep-only firmware: bring some changes over from the 1.5 minor updates branch so that the GUI communication logic will work correctly for boxes with no amps like the MX40G. With new improvements to the EEPROM file generation spreadsheets we are no longer creating EEPROM files with fake amp data for boxes without amps, but the older sweep-only could not handle this case correctly and would make calls to Amp_Power APIs even though the amp task had not been initialized and the amp task command queues not allocated, resulting in asserts in the FreeRTOS queue implementation. 11.15.17 1.6.2 Fix a minor bug where the amp status was not reported correctly when the amp was transitioning, such as when turning on or changing swing. The result was that if the amp was turned on, then the unit was put into the standby state, then the unit was woken from standby, and then the amp was turned on again, the amp would work correctly but the green dot indicating amp status would not stop blinking, incorrectly indicating that the amp is not functioning as expected. Affects all models with built-in amplifiers. 10.09.17 1.7.0 B1 First tagged build of code that supports 1310 lasers with TEC, for testing. 11.22.17 1.7.0 B2 Discover bug in testing because the 1.6 bootloader is configuring some GPIOs incorrectly for our use case with 1310 lasers. Work around this until I can build a 1.7 bootloader. 11.29.17 1.7.0 First release to customer. Works with 1.7 bootloader, removed the workaround used in B2. 12.05.17 1.7.1 Fix a bug that causes some extra redraws and beeps when editing VOA output power in mW and dBm. This bug may make the VOA difficult to use in constant output power mode when adjusting the power from the built-in screen. Goes along (and tested with) latest update to the 1.7 GUI that removes extraneous beeping when editing VOA and MZM Bias settings. 12.05.17 1.7.2 Support for 850 fixed-frequency laser. Very similar to 1310 laser except that 850 is not one of the standard 3 wavelengths, so an 850 box is expected to be set up with single-wavelength EEPROM data for tap responsivities and VOA coefficients. This also required some changes to the SCPI implementation which should be tested. 12.05.17 1.1.8 Update to the sweep-only firmware: on startup the power units for tap readings are set to mW instead of dBm. The fix is a bit of a hack because the software is designed to let the LCD GUI initialize the units, and I'm not sure the workaround where we set the Amulet byte upon starting the GUI VOA task is really robust. I noted another problem in the (now abandoned) C++ class- based code for managing settings. If you do a sleep/wake cycle, we crash when detecting an Amulet array indexing error in a resend() method. I'm not going to put effort into fixing this now because this is used for manufacturing only. 03.08.18 1.1.9 Update to the sweep-only firmware: bring over changes to the ADC module that allow the box to calibrate the ADC channels on startup. This requires bringing a number of other minor changes and cleanups over from later revisions of the code. This ADC calibration is a build-time option using a preprocessor #define in the project: USE_ADC_CALIBRATION. Bring over some changes to GPIO to support safe practices when we run on a box with a TEC laser (laser control pins are initially inputs and this build can't accidentally turn on the laser). Right now this is for making special builds for boxes with TEC lasers. This should be used with bootloader 1.7.0. It is currently only for experimental use and not well-tested yet. 03.01.18 1.6.2 DEM Special demo build, Thorlabs MX Family Firmware 1.6.2_demo_incomplete_hardware.srec. This build always has the laser report that it is at setpoint, even if there is no laser. The MZM bias ignores failed calibration. This build is meant to work with a custom version of the Amulet GUI that doesn't shut off the bias due to low power or display low power warnings. This build is for demo boxes at trade shows that have incomplete hardware (up to and including missing lasers and modulators). 03.10.18 1.7.2 DEM Special demo build, Thorlabs MX Family Firmware 1.7.2_demo_incomplete_hardware.srec. Like the 1.6.2 DEMO build except that it is for boxes with fixed-frequency laser hardware; use with 1.7 bootloader and demo version of 1.7 GUI. 03.21.18 1.6.3 Fix a problem where on A boxes, which have no modulator, the amp swing value stored in EEPROM is zero, so the initial swing value sent to the LCD GUI is also zero, which is outside of the legal range and causes strange behavior. Make it so the swing value defaults to 5.2V in this case. This is how it used to work when the LCD GUI set the default value. This problem and the fix should only apply to A boxes although this firmware revision can go on all boxes and I will port this fix to the 1.7 tree. 04.04.18 1.7.3 Fix a problem with 1.7.2 which shows up on custom unit S/N 200 with 850nm laser. When using the 1310 laser on TEC, we would read a change in the TEC status from 0 to 1 after turning on the laser for the first time. With the 850 laser on TEC, our first reading of the TEC status is 1 and so we were not triggering an update to the "at setpoint" status after powering on the laser. Change the code so that a change in the laser on/off state would also trigger re-evaluating the "at setpoint" status. This change should be backward-compatible with units with the 1310 laser on TEC and also with units with iTLAs. For the custom 1310 on TEC box, we also need a customized GUI because we need a higher default VOA attenuation and lower default MZM bias dither amplitude (the customized GUI changes these defaults to 2.8dB from 1.5dB, and 150mVpp from 600mVpp. Currently these defaults are set by the GUI; we probably want a feature to let the micro override them. We might support an EEPROM value for default dither amplitude for custom boxes, and we might use the B value from the VOA coefficients to set the starting attenuation value. 05.02.18 1.7.4 Fix a couple of minor problems that manifest on the 35E when built with a 1310 laser. The initial amp gain setting was not being properly received from the GUI on startup due to using a receive API call instead of a peek API call in the code that waits to verify we have received all requested words from the LCD GUI at startup. Add support for custom MZM dither amplitude and frequency read from EEPROM. Also some assorted small cleanups such as renaming some constants for consistency and more detailed logging in LCD.c module when debugging macros are turned on. This build still has a problem when using negative fine frequency tuning offsets with iTLA lasers; the "at setpoint" indicator never settles back to on. So for now it is only for use with fixed-frequency lasers (and to date we've only shipped the 1.7 builds on these systems). 06.11.18 1.7.5 Found a bug in testing; boxes with custom default MZM dither amplitude and frequency in EEPROM were not properly sending these values to the Bias_Control.c module on startup. Fixed this. The problem had to do with the use of flag bits for configuring the setting states in Control_Logic.c. 09.18.18 1.7.7 B2 Combined build with support for all MX/TLX/MBX instruments including boxes with fixed-frequency lasers. Works with LCD GUI 1.7.6. Implements reporting of nominal higher-precisions frequency and wavelength values to LCD GUI and via new SCPI commands. Supports setting iTLA fine-frequency offset from LCD GUI. Brings in VOA scan functionality. Incorporates self-calibration of ADCs. Incorporates many other changes under the hood including new 3-color LED failure codes for detection of many different possible error conditions at startup. 11.08.18 1.6.4 This build adds SCPI support for reporting the serial number via the SYStem:SERial? command. Brings over a few very minor source cleanups from the 1310 laser branch, to help keep code branches consistent. There should be no other differences in code behavior. 11.19.18 1.7.7 B3 This build adds support for a revised 10GHz amp type, PCA-00049. It behaves almost entirely like the original 10GHz amps, with a minor change in the way we apply crossing point offsets. The new design is more sensitive to gate voltage adjustments, so we scale the applied voltage offsets down. The new amplifiers use the same EEPROM data format. 11.20.18 1.7.7 B4 B3 was not working right; code in Capabilities.c was incorrectly reporting that the new amp type doesn't handle swing and crossing point adjustments. Fixed this. Improved startup error reporting in Amp_Power.c 11.26.18 1.7.7 B5 New EEPROM option to enable running ADC self-calibration, so that we run it only on units that had their tap responsivities and swept VOA attenuation levels measured while running self-calibration. This is to ensure that any units in the field with their original tap responsivities and VOA coefficients aren't made less accurate when this firmware version is installed as an update. 11.27.18 1.7.7 B6 Restore SCPI commands for manufacturing that were left out due to old macros in source. 12.04.18 1.7.7 B7 Unify code with minor EEPROM improvements made for bootloader 1.7.3. 01.04.19 1.7.7 B8 Add support to identify MX40G-850 model. 01.16.19 1.7.7 B9 Minor changes to initialization of the counters used for amp error display and acknowledgement, reset auto bias triggering, and bias calibration failure and acknowledgement. Goes along with 1.7.7 B3 GUI version. 02.07.19 1.7.7 B10 Change the number of sweeps we use in a VOA scan from 6 back to 2 for faster scanning. It was originally six, but I wound up changing it in the sweep-only branch, and then losing that change when I merged them back together. I had chosen 6 originally so we'd capture more direction changes - there is a slight hysteresis in the VOA so that voltages in ascending order produce slightly different attenuation values than if the same voltages are applied in descending order. My thought was that sweeping in both directions multiple times might help us average out any any variations in the degree of hysteresis. However, in practice, one sweep ascending and one descending seem to be sufficient for good data, and doing only two sweeps for each wavelength drastically reduces the time required to generate the data sets for calibration. 02.15.19 1.7.7 B11 Add support for several future models like MX40G-850, MX40G-1310, etc. Deprecate some part IDs that were never used, like MX27G. These are available for future parts. 02.22.19 1.7.7 B12 Fix a problem in Laser_Init() in iTLA.c where EEPROM data indicating a laser type of "no laser" triggered a 3-color error code. "No laser" is valid for A units. Also, fix a problem in the handling of 3-color error codes mistakenly defined blue to turn on the green part of our RGB LEDs. This meant that the error sequence red, blue, yellow for STARTUP_ERR_ITLA_LASER_TYPE was showing up as red, green, yellow (the code for STARTUP_ERR_LCD_INIT_TX_BYTE_Q_CREATE_FAILED), which caused some confusion diagnosing the problem. 03.21.19 1.7.7 Fix a bug where the MX10A crashes on sleep. This is the "official" release version of 1.7.7 to be made available on the web site for updating instruments. Future revisions will start with 1.7.8. 04.05.19 1.7.8 Add support for MX10B-1310 and MX40B-1310 models so they will display the correct version strings in the GUI. LB models do not have separate part names and numbers and are not shown as "specials" when the serial numbers are displayed in the GUI, but are just identified with a sticker on the back (and the different laser wavelength range). 04.12.19 1.7.8 Slipstream update without version change. Fix a minor problem where, if MZM bias calibration fails, the bias control module on the main microcontroller is set to off, but the LCD GUI button would still show on. 04.26.19 1.7.9 Make the string for the part string slightly longer to handle longer product names like "MX40B-1310-SP999," needed for some new products. 07.10.19 1.8.0 B1 Support for MX65E amplifier - simplified amp power task that just manages a single Vdd for amp power. Also, adjust thresholds for switching TIA gain from 2K to 200K in Tap_Power.c, per Patrick, to better match performance of taps at 1310. 08.14.19 1.8.1 B1 This build adds part number support for Anritsu OEM units. 08.21.19 1.8.1 B2 Fix a bug in the amplifier code that affects only the new amplifier for the MX65E. In the amp power control code, when turning off the MX65E's one-stage amp, the main amp task was not recognizing that the single amp stage task had successfully shut off the amp stage, so after a timeout the code would stop at a breakpoint to indicate a failure. I fixed that logic to check for stage shutoff. This incorrect logic was giving a "false positive" in the cases of 2- and 3-stage amps shutting down. However, this would be harmless, since the stage tasks would still shut down after they were incorrectly reported as shut down, and the stage task logic will not allow a stage to be turned back on until it has fully completed returning to the off state. 09.26.19 1.8.1 B3 Implement several new SCPI commands to provide all the information on bootloader version, firmware version, part name, etc. that we provide to the LCD GUI. Disable a bunch of standard SCPI commands since we don't really support them or intend to support them. Define a new SYS:DEFAULTS command which isn't implemented yet. 10.07.19 1.8.1 B4 Support part numbers for three new MX35D models. 10.11.19 1.8.1 In response to a customer report of lost characters in replies to SCPI commands when the instrument is sent commands quickly back-to-back, try a change to help ensure that when we have back-to-back command replies to send, we don't accidentally step on the reply that is still being sent out the serial port with the new reply. Also, reduce the number of digits we send when replying to commands that request floating-point values; we were sending out values formatted as if they were double-precision floating-point values, but internally we only really have single-precision. 11.06.19 1.8.2 B1 In response to a customer request, add several new remote-control commands including SYS:RESTART which allows the instrument to be rebooted, changing all the settings to their default configurations as if the user had turned the power off and back on, SYS:WAKE, which will take the instrument out of standby mode, and SYS:SLEEP, which will put the unit into standby mode. 12.03.19 1.8.2 Under very rare circumstances, in instruments without amplifiers or the thermistors that monitor amplifier temperature, we can get a reading from our thermistor voltage divider that makes our temperature calculation give an incorrect result. This is then interpreted to mean that the amplifier is overheating, and so the instrument shuts down the amplifier, laser, and screen, and turns on flashing red lighting. This is actually so rare that we've only seen it happen in a single instrument, but it still needs a bug fix. This version fixes it. 12.05.19 1.8.3 The 1.8.2 build (which was unreleased) included some changes to the MZM bias control code. We were testing an experimental way of removing offset error from the lock-in amplifier voltage. But this resulted in frequent failures in the initial bias control calibration. So I have backed that out completely and we're using the earlier code for MZM bias control.