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 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. 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. 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. 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. 05.03.19 1.7.9+ Create a custom build for specific unit with altered amp swing range and tricky modulator. Changes: remove ratio mode algorithm limiting at previously scanned peak and null to accommodate bias drift; add limits at -10/+10V with triggering of recalibration. 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, to better match performance of taps at 1310. 08.14.19 1.8.1 B1 This build adds part number support for 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. 01.15.20 1.8.4 During manufacturing, we found that a particular instrument was producing over-voltage errors on the amplifier drain voltages. We found that the digital potentiometer driver was incorrectly setting a register bit that turned off the part's "performance mode" (which produces less accuracy). We apparently just happened to run across a part with resistance accuracy in "normal mode" that was inaccurate enough to result in producing a voltage that exceeded the amplifier monitoring limit. It worked fine after fixing the bug and using "performance mode" as intended. Since the amplifier code _calibrates_ the digital potentiometer on the fly, it will normally calibrate out error, so the inaccuracy should only be an issue in a case like this where the inaccuracy results in a voltage that exceeds the threshold and triggers an error. 01.29.20 1.8.5 During manufacturing, we found that firmware 1.8.4 was not properly responding to SCPI commands, sent either to the serial port or USB. It appears that a recent update of the ARM uVision development environment installed an updated ARMCC compiler, 5.06 build 750, as the default compiler. Installing an older compiler, 5.06 build 528, and making no other changes, fixes the problem, but I starting seeing license manager problems when trying to work with older compilers. So I have migrated the whole thing to ARMCLANG V16.13.1, which is the compiler version we're using for newer projects. 08.14.20 1.8.5+ Experimental build for MX40B-1310-SP1; bring back the logic originally changed for a specific unit, accessible with a #define. 08.17.20 1.8.6 Incorporate the MZM bias control logic originally changed for previous unit for all boxes. This logic works better with certain modulators. Add some new logic so that when in manual bias ratio mode, when changing from positive to negative slope or vice-versa, we jump to a more accurate bias voltage, calculated with a new method that takes drift into account. Also, adjust the default ratio in the MZM bias control code, so that in the initial case when going from quad pos to ratio, we get less of a voltage jump. 09.14.20 1.8.7 Add part numbers and part number strings for MX35E-850, MX40B-850, and MX10B-850 so they are properly recognized and display the correct part numbers on the INFO screens. No other changes to functionality. 09.14.20 1.8.8 Fix a bug in a table in the capabilities module that looks up which models have which functions. This was causing the MX35E to fail to show the "at setpoint" dot when the amplifier was on. 09.14.20 1.8.9 B1 Extensive changes to the iTLA.c module to support both the older large iTLAs and the newer micro-iTLAs which serve as the replacement for the discontinued part. The originally sourced iTLAs (which we never shipped in production units but only had in pre-production units) are no longer supported. We are still having some difficulty with the micro iTLA power output becoming unstable after turning dither off and making settings changes. The instability is persistent even after turning off the laser output, waiting a few minutes, and turning it back on. This suggests the micro iTLA firmware has gotten itself into a state that it can't recover from. Turning off the power to the micro iTLA using the key interlock, and then turning it back on, will restore the laser to normal behavior. We are trying to determine if we can modify our laser driver code to avoid triggering this behavior at all. So far it is not clear if this will work. B2 ... B3 ... B4 ... B5 ... 01.11.21 1.8.9 B6 These unreleased beta versions incorporate a number of stepwise improvements to the iTLA module, including many cleanups and simplifications to the code, and many changes to the iTLA state machine to make it work faster and more reliably to drive the micro iTLA hardware. Changes are too numerous to list individually but the logic for checking for key interlock changes has been completely refactored, logic for re-establishing communication with the micro iTLA after the power is cut with the key interlock and then turned back on is improved in several ways for better reliability, logic for making large changes to the fine tuning offset with the dither off is improved to avoid unnecessary changes to the dither state as we drive the laser towards the requested value using small increments of 5GHz or less, and there is extra logic to verify that the reported dither and power have been stable for a while before applying dither, channel, or fine-tuning changes. This seems to improve the laser stability when the dither is turned off. 05.27.21 1.9.0 Hardware 1.1 laser I/O initialization correction. (Boot 1.7.8). Added new part number capabilities and PIDs MX10B-850, MX40G-DB1, MX70G-DB1, MX35E-DB1, MX65E-DB1.PIDs 0x5000 - 0x5022. Fixed issue in logic for timer delay on HW 1.1 models. Added new event timer and color bar error code. Updated SCPI logic for dual band models. Added Delay state to iTLA TX ON. Make distinction between HW 1.0 and 1.1 and implement\ differnt laser start up settings. Added SCPI commands to support dual laser and selecting the active laser. 06.11.21 1.9.1 Added part number, PID for OEM dual band. Added initialization for dual band LCD display. Added new LCD GUI messages for laser selection task. 06.16.21 1.9.2 Updates to SCPI MACRO for laser setpoint. Updates to LCD write routine to remove redundant writes. 07.22.21 1.9.3 Added support for MX1-OEM to indicate to stay in Boot mode. Added configuration for MX1 to allow for no tap three configuration. Added part number and PID for MX1-OEM. Reconfigured ADC/DACs for use with MX1-OEM, changed where dither is applied to account for a pulse vs CW laser source. Modified Dither frequency and gain for MX1-OEM. Modified Bias routine for MX1-OEM. Allowed for no panel LEDs, no fan, no VOA if MX1-OEM model. Changed boot-up to accomodate no LCD display for MX1. Established build for MX1-OEM with proper build flags set/cleared. Updated SCPI commands to accomodate a No Tap 3 configuration, No panel LED configuration. Added GoToBoot SCPI command for MX1-OEM support. Add MX1-OEM to perform unique action based on SCPI Bias Mode set command. Bypass find_polarity if MX1-OEM due to changes in ADC/DAC functionality and changes to auto bias. Set DAC tuning values different for MX1-OEM due to changes in ADC/DAC functionality. 07.23.21 1.9.4 Added timer delay for HW 1.1 laser enable for LCD laser setpoint indication. Modified reinitiialization for laser switch logic. 10.04.21 1.9.5 Combined changes for multi-band and changes for MX1-OEM. Support for build for smaller flash size controller 11.30.21 1.9.6 Improvements to SCPI commands - changed error from Hardware missing to Feature not present. Added InitOrUpdate GUI with current laser selected to sync Firmware to GUI. (relies on GUI 1.8.7 or > for proper sync) Updated for current build for Bare Board Test - MX1 flags needed to be ignored for DAC/ADC initialization. Corrected Power Down sequence for Bias control when entering power standby. Added force bias recal when lasers are switched on a dual band version. In Bias Cal/Recal task, added wait until TAP_PRE_MZM (TAP1) has reached an acceptable power level before performing calibration. 02.25.22 1.9.7 b1 Added MX110G and MX50E-850 to eeprom_data definition and capabilities array as new products Added BIAS Demo HW ifdef in the Bias algorithm to allow the Recal to occur when ini low power Save default ITU channel to the get_scpi_laser_itu_channel when set at initialization Added VOA initialization and Laser initialization, called at release from standby to recover values after a standby event. This allows the VOA wavelength update to send the set parameter and the Laser to update the appropriate values to the GUI. Corrected race condition with updating the VOA wavelength to the GUI. Issue #236. Added Demo logic to not show low power when flag is set. b2/b3 Added OEM-0110, OEM-0111, and MX110G-1310. Changed Power ratio min in FW and scpi commands from 1:1 to 2.5 :1. Enhancements to Bias Manual Power ratio mode. Store last non manual mode to use for values during Bias recalibration. During Bias Recal - if non MX1-OEM-SP1 - determine the best ratios based on peak and quad found during recal, use these values if in manual ratio mode when exiting Bias recal. Changed Bias dither level from 0.3F to 0.2F to use during Bias recal.Extended progress bar time due to a slightly longer time to perform Bias recal due to updating the ratios as noted above. Added some hysterisis to power ratio pid control for out of range indication. Added an event to force update of power ratio to GUI and system. Initialize ITU channel to 39 C-Band or 45 L-Band MX boxes. In dual band unit use the values in eeprom for the iTLA laser present to set ITU channel.Added logic for Demo HW to correctly adjust the setpoint after a standby event. Add logic to reinitialize the iTLA after a standby power event. b4 Add support for White Accent LED with associated scpi commands. Added White On/Off. Logic supports RGB On or White On or both OFF. GUI v1.8.9 B6 or later supports the White Accent LED. b5 Fixed iTLA start up from power on and ITU channel set to other than 1. On a DB unit when switching from fixed to iTLA with Laser ON must first send ITU channel while OFF then continue the delay for ON, then wait for dither ON/OFF communication. b6 If Bias OFF then turn off Dither. When switching lasers in the DB version, force a bias recalibration (even when Bias is OFF) and force VOA to max attenuation until a bias recal occurs if laser is ON when switched. If the laser is OFF when switched, ensure the bias cal is cleared so that the next time Bias is turned on that a recalibration occurs (see 1.9.6). 04.11.22 B6 was Released as 1.9.7 01.18.23 1.9.9 Released as special build for OEM-0110 and OEM-0111 ONLY Modified to properly interact in Bias with a 110G capable MZM. Characteristics of the MZM mandated the Bias mode changes. Bias Calibration, min and max (1.0V - 5.5V) for Bias Voltage, Currently Quad operates in Hold mode but with ratio insted of voltage.Min and Max set to 1v - 5.5v for bias control, set to use Amp V5 for second heater. Voltages at heaters must ramp up and down. Added Power down seq for command for reset mode from scpi commands - delays 20 seconds to allow routine to power down. Bias will ramp to 0 slowly when unit put into Standby mode. Standard mode of operation is to use Standby to power down unit prior to removing AC power to allow unit to ramp voltage at MZM down. Added support for high power iTLAs and modifications to setpoint values. GUI OEM 1.9.1 should be used with the build. 02.21.23 2.0.0b1 Added VOA Power Limited indication to use EEPROM parameter for min VOA attenuation. Updated GUI to use new value in comparison for power limited indication - GUI - OEM 1.9.2. Added iTLA changes from main branch for iTLA after interlock improvements. Incorporated common laser type calls into Capabilities.c from main branch. Added set VOA Max attenuation when ramping to new voltage. Clear flag when STATE_ON is attained for Bias. When in Bias Manual Mode - STATE ON - max VOA attenuation not forced. b2-b4 Update method to determine if V2 connected duing Bias calibration. Add logic for determining quad pos/quad neg if above or below the set min/max values. Add new indication to GUI when Bias Voltage ramping down to 0V at Bias OFF. Indicates "Bias Voltage Ramping Down". Added Bias OFF takes voltages to 0V. Use more aggressive step for powering down - 50mV/ 100mS to decrease wait time. b5 Bias calibration not needed to enable Bias Manual Mode. Valid Laser Input is required. b6-b7 Modified PID values for PEAK/NULL. With the increased performance of the modulator the existing equation was not holding peak/null at 600mV dither amplitude. Modified PID values to accomodate dither amplitude and provide a better response. Old equation was kept for fielded units. 3.21.23 2.0.0 Released b7 as v2.0.0 for both OEM and standard MX110G variants ONLY 4.03.23 2.0.1 MX110G variants ONLY. Added escape events to autobias pid call to sample and hold routine. Allow the task to interrupt the sample and hold based on given events. Allows the interface to be more responsive to events. In peak mode found that the sample and hold routine was taking longer than expected and was causing a lag in responsiveness. VOA Atten value from eeprom is now sent to GUI on init, reinit and wavelength change. The default of 1.5 is maintained unless the stored VOA atten value is larger for the set wavelength. Avoids situations where the default value was below th eminimum capabalities of the VOA device and would not reach setpoint. Send MIN to GUI to allow for more range for VOA Atten settings. Requires GUI 1.9.3 or greater for proper operation of VOA Atten setting. Modified SCPI VOA Atten set routine to use the MIN from the VOA coeff. Modified Bias Calibration - when reversing calibration direction add 0.7F to first point instead of returning to midpoint. Allows for units where Peak/Null is moving around the midpoint. 5.02.23 2.0.2 MX110G variants ONLY. For safety, before applying voltage for Bias Heater 2 control check to verify that this is an MX110G variant. For Quad, when switching from Peak to Quad, if locked in Peak mode calculate the 3dB down ratio to use for Quad and update the quad ratio. This alleviates issues if Bias Calibration has run before Laser has attained it full power. In the pid routines, if locked, save the bias voltage to the appropriate saved state voltage to allow for the best go-to voltage when it returns to this mode. 5.12.23 2.0.3 In Bias Calibration for checking Heater 2 was using the wrong comparison units when comparing mW values - needed to compare the difference of dBm values to dB for a range of difference >3dB to declare Heater 2 functional. 09.06.23 2.0.4 MX110G variants ONLY. Update to Version 3 of the EEPROM. Dyanmic Bias Voltage Min/Max. GUI v1.9.4 supports dynamic bias min/max. Updated to common routine for Ramp up/Ramp down. Fully qualify Heater 2 voltage on Ramp up or Ramp down min/max voltage. New Bootloader v1.8.5 to support Version 3 of EEPROM. Dynamic PIDs added to EEPROM although not used in this version of firmware. 10.16.23 2.0.5b1 MX110 variants ONLY. Added MX100E and MX100E-1310 and new Amp type definition - EEPROM setting - for new simple amp for MX100E. Added "D" to indicate Demo (aka show) mode. Added ifdef for Demo in Amp_power.c to allow Amp to turn on at Gui without error. Bias will turn on at midpoint. 02.02.24 2.0.5 Released for MX110 variants only. 04.08.24 2.0.6b1 MX100+ variants ONLY. Added MBX3. Added iTLA logic to correct pending operations flag and to adhere to after Laser ON do not turn off Laser Dither until the pending operation flags have cleared. Added logic to suspend tasks and signal error at LEDs if this code loaded to non-MX100+ model. 5.20.24 2.0.6 Released - Updated EEPROM access for part number.