MegaTune Setup Wizard is created with the excellent Inno Setup by Jordan Russell. Details and downloads can be found at http://www.jrsoftware.org/ Any problem reports, comments or suggestions should be directed to Eric Fahlgren , not to Bruce or Al, since this was my doing and is not necessarily condoned by them. First Time Startup ================== USB Serial Port Adapter Users READ THIS NOW! Occasionally USB adapters will cause MT to hang on startup (you'll start MT and it will just never appear). This can usually be cured by editing the config file, c:\Program Files\MegaSquirt\MegatuneN.NN\mtCfg\megatune.cfg and modifying the first line to correspond to the comm port that is mapped to the USB adapter. The communications settings dialog allows you to set the timer interval. The megatune.cfg file is generated and written automatically whenever you change settings, so there is no need to edit it manually any more except as noted above. If you have comm errors writing to your MS with a USB adaptor, try changing the "writeBlocks" and "interWriteDelay" values in the ini file for your configuration. WHEN DIALOGS DON'T APPEAR ========================= If you click on a menu and the corresponding dialog box does not appear when you expect it to, hit the "alt" key once. If the dialog then pops into existence, report this to me as I think I know how to fix it... GENERIC FIRMWARE UPDATE SUGGESTIONS =================================== (Write me at eric@wryday.com with any suggestions for this list and sooner or later I'll automate it in the Configurator.) 1) Practice "upgrading" first by using your current .s19 file, so that you have as few variables as possible when things go wrong and so that you become familiar with the process with the most likely-to-work scenario. 2) Make sure you have the old .s19 for the current firmware in the current project directory so you can back off the changes if you have unresolvable problems. 3) Make sure you have all the ini and inc files that are specific to the current installation in the old project's mtCfg directory. If you have only ever had one project, it is probably called "car1", so you should have your base ini in car1/mtCfg. 4) Make sure to save your current configuration before you do anything else. Do a File -> Save, then go to each table and do File -> Table Export on each table. 5) Print out a hard copy of you current settings first. Use Tools -> Dump and print the resulting MegaTune.dmp file (I usually edit it to add comments and remove anything I consider useless for my archiving). 6) Create a new project for your new firmware, use the MegaTune Configurator, Project -> New, name it such that you know that it is associated with the new firmware "Corvette 024s9" or something like that. Copy the ini and inc files for this installation into the new project's mtCfg directory; copy the s19 into the project directory. 7) Once you've installed the new firmware, make use of MegaTune's review mode, Tools -> Review Mode, to go through all the menus and verify that all the settings are as you expect. V 3.00 - 05 FEB 2006 =================================================== ======================================================================== Build 011 First pre-alpha release of COM interface. Notice that the install directory now contains megatune.tlb (MegaTune 1.0 Type Library), which describes the interface to your VB and other programs. Look in the install directory for a subdirectory named COMexamples, which contains a couple of VB examples that talk to MT using the COM interface. Build 001 Preliminary "flash table" work, so we can send GPIO ADC transfer function tables. NOTE - The 3.00 beta does not yet incorporate any 2.50 changes. V 2.50 - 26 MAY 2007 =================================================== ======================================================================== The required ini file changes to upgrade from 2.25 to 2.50 are very simple. 1) Change the header line from "MTversion = 2.25" to "MTversion = 2.50" 2) In the [OutputChannels] section of the ini, add an "nPages = 1" entry just above the ochBlockSize entry. If you are defining a CAN device's output channels, then you'll need a lot more than this, but for now this will make your 2.25 ini file work properly with the 2.50 code. Build 261 Detect when machine goes to stand-by or hibernate mode, then turn off timers and close comm port. Build 220 Added hysteresis to the gauge tell-tales. Add the following statement to the [GaugeConfigurations] section of the ini file: gaugeHysteresis = 3.0 ; seconds Build 219 Enhance installer to overwrite all .exe files every time; force permissions to all users. Report error when blockingFactor is specified without pageChunkWrite in [Constants] section. Fix F1 button in user dialogs (broken when porting to VC 8.0). Build 218 Ported to VC 8.0. Bug fixes in expression parsing and handling of polling pattern. Blocking factor modified to read only remainder of block if the page size is not a strict multiple of the page size. Build 216 Fix bug in endianess of output channel commands. Fix bug in page selection when reading constants. Build 156 First pass at raw datalog converter. Build 069 Increased the number of 3D tables from 20 to 50. Build 064 Force VE Table Generator to remain visible until all inputs have been satisfied without error, or until the user hits the cancel button. Don't allow secondary windows to be minimized. The Table Editor and 3D Tuning screen cannot be minimized now, because when you do so MT appears to lock up. Build 017 The output channels section is now growing in functionality to support the CAN pass-through code in MS-II. [OutputChannels] nPages = 2 pageIdentifier = same as in [Constants] section blockingFactor = 0, 8 ; List of numbers The blockingFactor list indicates how large a block can be sent or received by each command, and should be set in both the output channels and the constants section. If the value is 0, then that page and any chunks of the page are treated as a single block to be transmitted over the serial line in one block. If the value is non-zero, then the page contents will be sent in blocks of the specified size. When the page size is not a multiple of the blocking factor, something bad might happen until I get around to fixing it. Build 003 Added "pollingPattern" option to the OutputChannels section so that users can specify which pages are polled and in which order. If you have three pages, the primary one being a fast direct connection and the others being slower, then you might do the following: [OutputChannels] nPages = 3 pollingPattern = [1], [1,2], [1], [1-3] A seqence is enclosed in square brackets, and contains a comma separated list of subsequences. A subsequence is either a page number, two page numbers separated by a dash or an asterisk (denoting all pages): pollingPattern = [] ; Turns off polling pollingPattern = [1] ; Poll just page 1 at every chance pollingPattern = [1], [1,2] ; Poll page 1 each time, page 2 every other pollingPattern = [5,1-3] ; Poll page 5, then 1 through 3 pollingPattern = [*] ; Poll all pages every pass The pollingPattern settings are not additive, that is, if you were to specify the above set of specifications in your initialization file, only the last one would "stick." Build 001 The 2.50 version contains only enhancements from 2.25 to allow use of multiple board systems. The output channel section has been expanded to allow paging just as in the constants section. In this first test version, the pages are polled serially, but this will probably change as requirements become clearer. [OutputChannels] nPages = 2 ochBlockSize = 112, 22 ochGetCommand = "a\x00\x06", "G\x01\x00" page = 1 ; MS-II seconds = scalar, U16, 0, "s", 1.000, 0.0 pulseWidth1 = scalar, U16, 2, "s", 0.001, 0.0 ... page = 2 ; GPS longitude = scalar, S32, 0, "deg", 1.000, 0.0 latitude = scalar, S32, 4, "deg", 1.000, 0.0 ... V 2.25 - 30 JAN 2006 =================================================== ======================================================================== After almost two years of development, I'm calling 2.25 finished. Here's a quick guide to the ini file contents, more details are contained in the build notes following the ini documentation. [MegaTune] MTversion = number writeXML = true|false ; Forces use of binary msq if false. versionInfo = string queryCommand = string signature = number | string [BurstMode] commRate = number commPort = number getCommand = string initialDeltaT = number ================================================================= [Constants] endianness = little | big writeBlocks = on | off verify = on | off interWriteDelay = ms ; Time between subsequent data writes. blockReadTimeout = ms pageActivationDelay = ms nPages = number burnCommand = string, ... pageSize = number, ... pageReadCommand = string, ... pageChunkRead = string, ... pageValueRead = string, ... pageIdentifier = string, ... pageActivate = string, ... pageWriteCommand= string, ... pageChunkWrite = string, ... pageValueWrite = string, ... page = 1 name = array, type, offset, shape, units, scale, translate, lo, hi, digits VE = array, U08, 0, [X:8x8], "%", 1.0, 0.0, 0, 255, 0 WWU = array, U08, 68, [ 10], "%", 1.0, 0.0, 0, 255, 0 name = scalar, type, offset, units, scale, translate, lo, hi, digits TPSthresh = scalar, U08, 83, "v/s", 0.1953125, 0.0, 0, 50, 3 TPSclock = scalar, U08, 84, "ms", 0.1, 0.0, 0.1, 25.5, 1 name = bits, type, offset, bits ; Config12 byte at 117 cltType = bits, U08, 117, [0:1], "GM", "1", "2", "3" matType = bits U08, 117, [2:3], "GM" ; Same as above. nInjectors = bits, U08, 117, [4:7+1] ; Use auto-generated "1"-"16" where "type" is one of S08, U08, S16, U16, S32 or U32. Signed versus unsigned has no effect on bit fields. "INVALID" in bits holds a place that is not displayed in the combo box. [OutputChannels] ochBlockSize = number ochGetCommand = string user-defined-variable = { expression } [, "optional-units" ] ; name hunk type ofs units scale trans rpm = scalar, S16, 7, "RPM", 1.000, 0.000 ; name hunk type ofs bitSpec sch = bits, U08, 11, [2:2] Note: user-defined-variable = @(number) ; Now obsolete, generates an error. ================================================================= [GaugeConfigurations] ; Put the following all on one line... user-defined-gauge-name = name-string, variable-reference, title-string, units-string, lo, hi, lo-danger, lo-warning, hi-warning, hi-danger, value-decimals, range-decimals [FrontPage] gaugeN = gauge-configuration-reference ; N = 1 through 8 egoLEDs = lo-number, hi-number, redline-number indicator = expression, "-Txt", "+Txt", "-bg", "-fg", "+bg", "+fg" saved = "-bg", "-fg", "+bg", "+fg" logging = "-bg", "-fg", "+bg", "+fg" connected = "-bg", "-fg", "+bg", "+fg" "+/-fg" and "+/-bg" are color names defined in the ColorMap section. The - ones are used when the indicator is in the "off" state, the + ones are for the "on" state. [AccelerationWizard] tpsDotBar = 0, 30 mapDotBar = 0, 300 [RunTime] barHysteresis = seconds egoBar = lo-number, hi-number coolantBar = lo-number, hi-number batteryBar = lo-number, hi-number throttleBar = lo-number, hi-number gammaEBar = lo-number, hi-number mapBar = lo-number, hi-number matBar = lo-number, hi-number rpmBar = lo-number, hi-number pulseWidthBar = lo-number, hi-number dutyCycleBar = lo-number, hi-number egoCorrBar = lo-number, hi-number baroCorrBar = lo-number, hi-number warmupCorrBar = lo-number, hi-number airdenCorrBar = lo-number, hi-number veCorrBar = lo-number, hi-number accCorrBar = lo-number, hi-number [Tuning] gaugeColumns = 1 | 2 ; Four columns of gauge configuration references per gaugeN: gaugeN = gauge-configuration-reference, gauge-co... ; N = 1 through 8 pageButtons = string, ... for N pages egoLEDs = lo-number, hi-number font = "font", size cursorDepth = number spotDepth = number backgroundColor = color-name | R-byte, G-byte, B-byte cursorColor = color-name | R-byte, G-byte, B-byte gridColor = color-name | R-byte, G-byte, B-byte spotColor = color-name | R-byte, G-byte, B-byte textColor = color-name | R-byte, G-byte, B-byte [AutoTune] table = veTableMap ; Should be the map3d_id of a TableEditor entry. allowAutoTune = on ; Displays the check box on the specified tuning dialog. corrector = egoCorrection ; Variable used for correction algorithm. ; Tuning block parameters ; Global limits on tuning, outside the box and nothing happens. xLimits = 1500, 4000 ; RPM yLimits = 60, 90 ; MAP zLimits = 10, 200 ; VE ; Vertex tolerance parameters ; How close you must be to a vertex before tuning takes place. xRadius = 200 ; RPM yRadius = 7 ; MAP ; Controller parameters initialStartupInterval = 1.0 ; Seconds before first adjustment updateInterval = 1.0 ; Seconds between each consecutive adjustment. proportionalGain = 0.5 ; Proportion of (100-corrector) to use for adjustment. lumpiness = 5 ; Maximum percent adjustment above or below neighboring VE points. ================================================================= [ColorMap] fieldColoring = on | off color-name = R, G, B See color24b.ini for examples. There are several pre-defined colors derived from windows: SYSTEM_BG = ::GetSysColor(COLOR_3DFACE ) SYSTEM_WT = ::GetSysColor(COLOR_WINDOWTEXT ) SYSTEM_AC = ::GetSysColor(COLOR_ACTIVECAPTION) SYSTEM_CT = ::GetSysColor(COLOR_CAPTIONTEXT ) [GaugeColors] alertColor = color-name | R-byte, G-byte, B-byte backgroundColor = color-name | R-byte, G-byte, B-byte bgDangerColor = color-name | R-byte, G-byte, B-byte bgWarningColor = color-name | R-byte, G-byte, B-byte faceColor = color-name | R-byte, G-byte, B-byte ledAlertColor = color-name | R-byte, G-byte, B-byte ledColor = color-name | R-byte, G-byte, B-byte needleColor = color-name | R-byte, G-byte, B-byte rangeColor = color-name | R-byte, G-byte, B-byte scaleColor = color-name | R-byte, G-byte, B-byte titleColor = color-name | R-byte, G-byte, B-byte valueColor = color-name | R-byte, G-byte, B-byte ================================================================= [Menu] menu = "display-string" [, { enabling-expression } ] subMenu = dialog_name, "display-string" [, page-number [, { enabling-expression }]] plugIn = "path", "display_string" [, verb [, { enabling-expression }] Plug-in paths may utilize the following pre-defined variables: %MEGASQUIRT_DIR% %PLUGINS_DIR% %COMMON_DIR% %INSTALL_DIR% %WORKING_DIR% The path is fed to the windows shell execute with the default verb, so if you feed it just a directory name, the directory will be opened; if you feed it an executable path, the program will be run; if you feed it a .doc file, it will launch the editor and so on. The verb is an action that MegaTune takes upon executing the plugin. Valid verbs are none, minimize or exit, meaning do nothing, minimize the MegaTune window and exit MegaTune, respectively. menuDialog = dialog-identifier (main is the front page, default at start up) menu = "File" plugIn = "%INSTALL_DIR%/mtCfg.exe", "&Configurator", exit menu = "&Settings", { enabled } subMenu = std_constants, "&Constants" [, 0 [, { enabled }]] subMenu = std_enrichments, "&Enrichments" subMenu = std_separator menu = "&Tuning" subMenu = std_realtime, "&Realtime Display" subMenu = std_warmup, "&Warmup Wizard" [UserDefined] dialog = dialog-identifier-string [,dialog-title-string [,int-page-number]] topicHelp = help-identifier field = label-string, bit-const [,expression] field = label-string, scalar-const [,expression] array1D = title-string, label-string, array-const [,expression] help = help-identifier, "Help box title" webHelp = URI text = "text
" dialog = dtSettings, "General Dual Table Settings", 2 [TableEditor] table = table-id, map3d-id, "title" [, page] table = veTable1Tbl, veTable1Map, "VE Table 1", 1 topicHelp = table-help-identifer, tuning-help-identifer xBins = constant, variable [, readonly] yBins = constant, variable [, readonly] zVals = constant [, readonly] gridHeight = number gridOrient = x-rotation-number, y-rotation-number, z-rotation-number upDownLabel = "up", "down" [CurveEditor] curve = Id-for-menu, "dialog box title" topicHelp = Help-id or URL ; optional entry columnLabel = x-label, y-label xAxis = lo, hi, nTicks yAxis = lo, hi, nTicks xBins = x-array [,tracking variable] yBins = y-array gauge = gauge-definition ; optional entry curve = coldAdvance, "Cold Ignition Advance" topicHelp = "http://www.megasquirt.info/megatune.htm#ap" columnLabel = "Coolant", "Offset" xAxis = -40, 200, 9 yAxis = -10, 10, 11 xBins = tempTable, coolant yBins = coldAdvanceTable gauge = coolantGauge ================================================================= [Datalog] enableWrite = { expression } markOnTrue = variable-reference delimiter = "byte-string" ; default is "\t" defaultExtension = "file-extension" ; default is "xls" entry = variable-reference, label-string, float|int, format-string ; Example: entry = time, "Time", float, "%.3f" ================================================================= Standard dialogs std_separator std_accel - Handle to the Acceleration Wizard. Define constants with the following names to make them accessible to the AE Wizard: tpsDOT mapDOT tpsProportion tpsThresh mapThresh taeTime tdePct taeColdA taeColdM maeRates maeBins taeRates taeBins std_constants - This is the handle to the original MS-I constants dialog. algorithm alternate baroCorr battFac engineType fastIdleT injOpen injPwmP injPwmT injType mapType nCylinders nInjectors reqFuel twoStroke rpmk divider std_enrichments - MS-I style enrichments dialog. egoType primePulse crankCold crankHot asePct aseCount tpsThresh taeTime tdePct taeColdA taeColdM egoRPM egoTemp egoCount egoDelta egoLimit egoSwitch wueBins - 10 values taeBins - 4 values std_injection - Subset of above std_constants, used in MS-II. algorithm alternate engineType injType nCylinders nInjectors reqFuel twoStroke rpmk divider std_realtime engine - specific bit settings required... Change to use userIndicator. barometer secl egoVoltage map mat coolant throttle batteryVoltage rpm pulseWidth egoCorrection airCorrection warmupEnrich accelEnrich baroCorrection veCurr gammaEnrich idleDC std_warmup primePulse crankCold crankHot floodClear asePct aseCount wueBins - 10 values coolant egoVoltage map warmupEnrich std_ms2gentherm std_ms2geno2 ================================================================= Data types: * byte - scalar 8-bit integer. int - scalar 16-bit integer. double - scalar double precision float. string - dynamic length collection of characters. Boolean results may be derived from any value, with 0, 0.0 and "" being false and all other values being true. Operators in order of descending precendence: () grouping * [] indexing NOT DONE ! logical NOT ~ bitwise NOT - unary minus = negation * multiplication / division % modulus + addition - subtraction << left shift >> right shift < less than <= less than or equal to == equal to > greater than >= greater than or equal to != not equal to & bitwise AND ^ bitwise XOR | bitwise OR && logical AND || logical OR ?: conditional Built-in math functions and constants: PI acos(double) asin(double) atan(double) atan2(double, double) ceil(double) cos(double) exp(double) fabs(double) floor(double) fmod(double, double) log(double) log10(double) pow(double, double) sin(double) sqrt(double) tan(double) timeNow MS-specific functions: itable(val, "filename") - Inverse table lookup. Given a value, it returns the index of the table value nearest that value. table(idx, "filename") - Causes the table to be read on the first invocation. Indexes into the table and returns the value contained at the specified location. Table files may contain an arbitrary number of 16-bit signed or unsigned quantities. tempCvt(x) - Converts Fahrenheit temperature to user-selected units. Does nothing if temperature is set to F. vexInterp(rpm, load, page, "file.vex") - Performs interpolation of a vex file using the same algorithm as is used in MS-I and MS-II code. ================================================================= Build 757 Make Alt-C close all menu-containing dialog boxes, shortcut for File -> Exit. Build 755 Add post-plugin execution verbs to ini, so we can manipulate MT as we shoot off an executable. File -> Configurator launches MT Config and exits MT. Build 754 Get rid of root mtCfg, which does not work on win98 for some reason. Build 753 Added "indicator = restart" so you can delete all existing indicators on a dialog and define new ones in your custom.ini. Added better comm port checking at startup, should eliminate any lock up behavior on USB ports. Fix a windows resource leak in the runtime dialog, bug reported by Jeff Bond. Build 752 Ctrl-A now toggles Auto-tune in the 3D tuning dialog. Hopefully removed all the little nitpicks from the msns-extra.ini files... Build 749 Add "F1" button on user dialogs, only appears if there is user help. Build 748 Bug fix for gauge updating. Build 745 Clean up warmup wizard internals. Move some stuff around in the configuration files. Build 744 Added real logarithmic curve generation to complement the linear and exponential curves in the curve generator. Build 743 Put back the creation of the commmon directory, created a new include "common.ini" that is included into megatune.ini just before custom.ini. Moved all the "writeBlocks" and "interWriteDelay" parameters into the new common.ini. Fixed a bug in interpolation that Andy found, small values of X or Y were being truncated to integers, resulting in garbage on the 3D tuning dialog. Have I fixed the dialog drawing problem once and for all??? Build 742 Created File -> Offline mode, which doesn't even attempt to talk to MS, you are completely disconnected. Build 741 Added xAxis and yAxis settings on the curve editor. Fix check mark on tuning dialog Tools -> Autotune. Added display checking to runtime dialog, so timer events don't make it disappear. Fixed up plugin execution to edit .doc, .txt and .log files. Added audit log editing to all ini files. Build 739 Added curve generator to Tools menu of curve editor. It allows one to define linear or exponential curves through two points. The exp curve is especially useful for defining cranking pulsewidth tables, just enter a pair of points that are known to work pretty well and set the y-offset to about 0.5-PW_at_160 and see what sort of curve it gives you. The datalog now contains the firmware signature as the first line. This probably breaks a bunch of log viewers... Build 738 Fixed bug wrt non-square tables. Old MS-II 2.3+ ini files will not work properly with this build or later. Spare port settings were affected, but old msq files were correct even though the inin file was not. Exposed Automatic Mixture Control parameters in MS-II 2.5. Build 737 Add menu to 3D tuning dialog, still need to clean up buttons and other controls on the dialog. This menu is user extensible as are all other menus in MegaTune (see details in build 734). The Autotune button has been moved to the Tools menu. Build 736 Added topicHelp to table editor, you get a page for each of the table and tuning dialogs. table = tableVE, tuningVE topicHelp = "http://www.msefi.com/table.html", tuningHelp ... Timer mechanism rework, helps make the user menus on the table and curve editors more robust. Build 735 Cleaned up messaging system in ini file reader so that all messages get logged into the audit.log file. Added "#alert" to the ini file, so you can now display user messages using lines like this: #alert "Hello, world." Touched up the MS-II 2.5 configuration a bit. Build 734 User-defined Menus ------------------ Allow user-defined modification of menus on curve and table editor. This is accomplished by setting the "menuDialog" for the menu items that you wish to appear menuDialog = ignitionTbl <-- Created in [TableEditor] section menu = "&Settings" subMenu = generalIgnition, "&General Settings" menuDialog = main <-- "main" is a predefined name for the front page menu = "T&ables" subMenu = iacBins, "I&dle Steps" You can use the same "menuDialog" name as often as you wish, and you may want to mix them up because the Tools -> Review Mode displays all dialogs in the order in which they are placed in menus, so you would see generalIgnition followed by iacBins if you used the example above. Color Map --------- Added two new colors for the text used on the table and curve editors when tracking the spot and cursor. Previously the tuning dialog's text color was used to contrast with the spotColor and cursorColor used for field coloring, now there are spotText and cursorText colors to allow them to contrast with the spot and cursor colors, respectively. Build 733 Completed run-time variable tracking in the curve editor, turned on gauge display. Added help also (see example below), reworking it to allow addition of user-defined help on any dialog (still need to add syntax to the ini file to expose this). Also reworked the table editor dialog, deleting the buttons and moving the commands to the menus. Build 731 Added the preliminary two-D curve editor. Right now it has only the most rudimentary capabilities, just basic editing either via entry of numeric values or using shift-arrow or ctrl-shift-arrow on the curve. [CurveEditor] ; curve = Id-for-menu, "dialog box title" ; topicHelp = Help-id or URL (optional entry) ; columnLabel = x-label, y-label ; xBins = x-array [,tracking variable] ; yBins = y-array ; gauge = gauge-definition (optional entry) curve = coldAdvance, "Cold Ignition Advance" topicHelp = "http://www.megasquirt.info/megatune.htm#ap" columnLabel = "Coolant", "Offset" xBins = tempTable, coolant yBins = coldAdvanceTable gauge = coolantGauge Build 730 Color Map --------- Finish up the color map and color referencing stuff. Now all the colors can be specified either with the old RGB sequence or with a color name. The following definitions of backgroundColor are equivalent: [ColorMap] black = 0, 0, 0 [GaugeColors] backgroundColor = 0, 0, 0 backgroundColor = black There are now some pre-defined colors, sucked out of the windows repertoire of colors: SYSTEM_BG = ::GetSysColor(COLOR_3DFACE ) SYSTEM_WT = ::GetSysColor(COLOR_WINDOWTEXT ) SYSTEM_AC = ::GetSysColor(COLOR_ACTIVECAPTION) SYSTEM_CT = ::GetSysColor(COLOR_CAPTIONTEXT ) Color Scheme Ini Files ---------------------- Moved a bunch of standard colors to be predefined, see the new color definition file, colorScheme.ini, which replaces the two files colors24b.ini and colors08b.ini. Table Editor ------------ Add runtime variable tracking on table editor. It uses the tuning dialog spot color for the highlighted cell, and the tuning dialog text color. Required rework of the 3D tuning dialog, also, so be sensitive to weird behavior there and report it right away. Ini File Processing ------------------- Better error checking was added to byte string escape sequences. James pointed out that invalid octal sequences like "\008" were being passed through as "\00" + "8", goofing things up badly. Build 729 Label formatting options in user dialogs are now fully explicit; there is no more implicit highlighting of "header" lines. Formats may be stacked, the three prefixes are: > - Right justify label # - Use system header color for label ! - Use white text on red background for label So, this would display "Something" right justified in red: field = ">!Something" Implemented array1D to user dialogs. Here's the syntax for the new statement: array1D = title-string, label-string, array-const [,expression] If the title string is an empty string, then only the fields of interest are displayed, otherwise a group box is created to contain the fields and display the title. To support proper label generation, new format options for title and label strings have been added. Formatting options support the same symbol interpretation that was introduced in build 718, but has been enhanced to index into the symbol when used in the context of an array1D label. For example, the following label string array1D = "Cranking PW", "At %tempTable%", crankingPW will generate labels of the form "At -40.0 C", with the values being taken from tempTable[i] for each row. Similarly, there is now a "%INDEX%" pseudo-symbol that is replaced by the row number in the dialog, so you could use a label string like "Temperature %INDEX%", which turns into "Temperature 1", "Temperature 2" and so on. There is also a "%#symbol%" option, which replaces the format with the count of values for the symbol, instead of the value of the symbol. See the megasquirt-II.ini files for examples of usage on all this. Build 728 Reformat user-defined dialogs, add some structure for array editor enhancements. Finish up some stuff in mtCfg, add a help file. Build 727 Add more formatting options to user defined dialog fields to complement the symbol stuff from build 718. Try putting a ">" at the front of a label to make it right justified. Build 726 Make popups work on 95, which doesn't have scrolling menus. Build 724 Fix up the right mouse stuff from previous build. Rework mtCfg's File -> Open mechanism so it works on more windows versions. Build 723 Expose front panel gauge selection/reset mechanism. Right mouse on a gauge and see what happens. Build 718 Add label pre-processing, with symbol value substitution into static strings at dialog or menu creation time. Stick this into a dbox definition and %symbol% will be replaced with the constant's value and units. field = "String %symbol%", otherSymbol Build 717 Put in a whole bunch of ini file reader validation, mostly in the Constants and OutputChannels sections. Build 715 Finish up "plugIn" menu item, looks like: menu = "File" subMenu = std_separator plugIn = "path_to_file", "Menu display string" The path to the file may contain any of the following path variables, which will be expanded to the directory relative to the MegaTune installation directory. For a "standard" install to C:/Program Files/, these would be: %MEGASQUIRT_DIR% = C:/Program Files/MegaSquirt %INSTALL_DIR% = %MEGASQUIRT_DIR%/MegaTune2.25xxx %COMMON_DIR% = %MEGASQUIRT_DIR%/mtCfg %PLUGINS_DIR% = %MEGASQUIRT_DIR%/plugIns %WORKING_DIR% = %MEGASQUIRT_DIR%/wherever you are working This uses the windows ShellExecute function that should open file folders, launch programs based upon the extension of the path specified, or run executables. Build 710 Refinements to Mini-Term: added baud rate and comm port selections to the dialog, wrote a help file for it. Moved it under the Communications menu. Build 709 Added mini-terminal under Tools. Build 707 Rework error messages in xml reader per Lance's suggestions and add better version consistency checking. Build 706 Have AFR and thermistor calibration write actual C include files for use in compiling executables that are already calibrated. Public release of XML msq files. Build 700 Alpha test version: XML msq files. Add Matt Durys's changes to better support multi-WB installs on MS-II. Build 695 Add "File -> Activate" to MT Configurator. Allows one to activate a specific file of the form "name.ini.version", where "version" is anything you want it to be and this file gets copied to "name.ini" and then is read into the tree as the active file. Fix LED designations on PM4 and PM5. Make scaling of port edit hysteresis values work with Celsius temperature values. Build 693 Fix size of output block in MS-II 2.3 ini file. Build 690 Better consistency between port editor and flash, more descriptive labels. Changed all "Send to ECU" buttons to read "Burn to ECU" to better reflect what they actually do. Build 688 Preliminary general port editor for MS-II 2.3e. Build 683 Added group indicators to settings in audit.log. Put the MS-II 2.3 release ini in the installer, delete any MS-II 2.3 ini older than 13 NOV 2005. Build 674 More stuff for MS-II 2.3 code, spare port stuff and CAN id on output channel fetch command. Build 666 Add new datalog options to allow reformatting the output and specifying the default extension for the output files. [Datalog] delimiter = "\t" defaultExtension = "xls" Build 663 Have MS-II thermistor calibration check for connection first, clean up table labels in log file, renamed file from "temperature.tbl" to "thermistor.log" to indicate more clearly what its intended purpose is. Build 662 Added support for MS-II multi-board CAN stuff. This includes the MS-II 2.3 ini file. Build 656 Finished up the common directory processing. Here's the current directory tree that I build for the various program files. (Revised for build 755.) c:/Program Files/ MegaSquirt/ MegaTuneV.VVbNNN/ mtCfg/ megatune.ini msns-extra.ini megasquirt-I.ini megasquirt-II.ini mtCommon/ common.ini Firmware/ MS-II/ MS-II Download V.VV/ EasyTherm/ LogViewerV.VV/ car1/ mtCfg/ settings.ini custom.ini The startup sequence for MT is as follows: 1. Check the current directory, if it is a "car/project" directory, we are done, stay here, skip down to 5. 2. If we are anywhere else, chdir to the MegaSquirt install directory, and find all of the car/project directories. 3. If there is only one in the list, chdir there and skip down to 5. 4. Present the list to the user, allow them to select one, then chdir there. 5. Open megatune.ini and process its contents. 6. Display the front page, start communicating with MS. Given the above collection of directories, here's what MT does when it tries to open megatune.ini or any other "config" file (i.e., anything that has to do the startup .ini files). Once MT finds a file, it skips the subsequent search steps. 1. Look for the file in the selected car/project directory's mtCfg subdirectory. 2. Look for the file in the selected car/project directory. (OBSOLETE, don't put files here, put them in the mtCfg.) 3. Look in the MegaSquirt/mtCommon directory. 4. Look in the MegaSquirt/MegaTuneV.VVbNNN/mtCfg directory. That third one is the new addition, it is completely transparent and will not cause anything to change (just as number 2 should be unused). So, typical reading goes as follows: 1. megatune.ini is found in MegaSquirt/MegaTuneV.VVbNNN/mtCfg, it contains a line like #include "settings.ini" 2. The include is processed and settings.ini is found in MegaSquirt/car1/mtCfg. 3. Once settings.ini is read, it is closed an megatune.ini processing continues, you'll then get to #include "msns-extra.ini" or whatever you've got selected in settings.ini. 4. This will be found wherever it lives and so on... 5. Finally, we get all that including and stuff done (all of which is logged in audit.log) and we process custom.ini. Now, assume that you want to make a set of common gauges for several cars/projects. You'd do something like this: c:/Program Files/ MegaSquirt/ mtCommon/ extraGauges.ini car1/ mtCfg/ settings.ini custom.ini car2/ mtCfg/ settings.ini custom.ini Create "extraGauges.ini" in the mtCommon directory, change all of your custom.ini files to contain '#include "extraGauges.ini"' and remove all gauge definitions from those same files. Build 655 DELETE THIS BUILD IF YOU HAVE IT INSTALLED, IT DOESN'T WORK. Added another directory to the configuration file search path, so that users with multiple cars can write common files for their projects that are not mangled by the installation of a new build. The path is now: 1) ./mtCfg/file 2) ./file 3) c:/Program Files/MegaSquirt/mtCommon/file 4) c:/Program Files/MegaSquirt/MegaTuneN.NN/mtCfg/file where "." is the project directory and "c:/Prog..." is the installation area. Fix up ini file reading so that you can re-specify table editor entries so as to change things like gridOrient in the custom.ini file, after they have been defined. Build 654 Output a final status on burst logging. Add "initialDeltaT" to ini file on BurstMode block, so that if you know how fast your logs were run, you can get the early clock values closer. Build 631 Re-fix alternating pattern stuff. Build 627 Fix handling of non-square tables. Add corrected AutoTune block to custom.ini. Build 623 Fixed bug in injector control dialog that didn't detect invalid alternating combinations. Build 620 Moved "gridOrient" from [Tuning] to table editor entries, so each editor has its own unique orientation settings. Build 619 Refined auto-tune algorithm, changed defaults to more safe values. It produces many more diagnostic messages now, too. Build 615 Implemented interface to auto-tune parameters in ini files. Build 614 Added preliminary auto-tune feature to the 3D tuning dialog. You must add "allowAutoTune = on" to the proper TableEditor definition, which then shows the auto-tune check box on the tuning dialog. All control parameters are hardcoded at this point, they will be published in a future release. Build 612 File->Msq info... Reports MegaTune file version number and file signature for all msq files that MT can find. Added more MS-II ini files. Build 602 Added DynoJet Wideband Commander support to lambdaSensor.ini and code for MS-II. Build 596 Default ini file for MS-II is for C64 v2.0g code. Build 587 MAKE SURE TO MANUALLY COPY settings.ini from MegaTune/carMtCfg/ and place it in your car1/mtCfg directory. The definitions in settings.ini have been reworked quite a bit. The old names and new names are in the table below: DIY_TechE_NonL DIYWB_NON_LINEAR FIDLE FIDLE_GAUGE GM300KPa DELETED (identical to MPXH6300A) IAC IAC_GAUGE Innovate0_5 INNOVATE_0_5_LINEAR Innovate1_2 INNOVATE_1_2_LINEAR MSpark DELETED PWM PWM_GAUGE TechEdge_Lin TECHEDGE_LINEAR WB_NB_EMULATOR WB_1_0_LINEAR WB_Non_Above WB_UNKNOWN Zeit_100 ZEITRONIX_NON_LINEAR Build 554 - Fix "Rate" units on Acceleration Wizard to reflect the correct units of the data rather than have the "v/s" hard coded. Add IAC scale to MS-II ini, requires version 1.31. Build 545 - Add proper field definitions for AE taper to MS-II configuration so it actually works. Add AEM sensors to settings.ini and lambdaSensors.ini for MS-I. Added AEM non-linear to MS-II configuration tool. Build 543 - Add acceleration enrichment tail-off tapering to AE Wizard. This is implemented in MS-II as of version 1.3 of the MS-II code. Fix MS-II Flood Clear value's units. Build 541 - Add real GM 3-BAR info to MS-II ini file. Rework MS-II TPS calibration, requires MS-II code be upgraded to 1.30 or later. The included megasquirt-II.ini is for 1.30. Fixed minor bug in Communications Settings dialog, which would display the old Timer Interval even after you had actually changed it. Build 531 - Fix MAP bin range to allow 300 and 400 kPa sensors on MS-II. Add "Rename" to MT configurator. Fix MS-II TPS calibration scheme. Build 514 - Write correct page numbers to VEX files. Correct use of lambdaSensors.inc in some cases; fix a bug in the file itself. Build 484 - Enable MS-II alpha-N options, clean up lambda sensor definitions. Build 462 - Fix bug in VEX reader that transposed indices on table. This only affected non-square imports, so most examples still worked fine. Build 447 - Use DEFAULT_CHARSET instead of ANSI_CHARSET so that Cyrillic and other characters are displayed properly in gauges and dialogs. Build 443 - MS-II datalogging enhancements: turned spare1 and spare2 into dtPred error and deltaT, adding them to the log. Build 442 - Added Stewart's suggestion to increment/decrement 3D tuning points by bigger increment. This is mapped to Ctrl-Shift-Up and Ctrl-Shift-Down arrow keys, which increment by 5 internal units while the Shift-Up and Shift-Down still increment by 1 unit. Build 441 - Add Zenon's "Review" mode under Tools. Build 421 - Add comm status output to burst mode dialog. Build 420 - Fix memory overwrite with Tuning->Runtime dialog. Added Project->X options to MT Configurator. Build 417 - Units wrong on MS-II TPSdot values (affect AE wizard values). AE wizard dialog occasionally didn't appear when commanded. Added #group and #ungroup to ini parser, ignored by MT. Proto-MT Configurator included in release. Bug Fixes --------- More infrastructure rework with all edit dialogs. Better error recovery from mismatches in the signature contained in the ini file and reported by the embedded code. William Turner pointed out that the Warmup Wizard could leave incorrect values of 99 or 101 in the 160F bin under certain conditions. Jerome Lambourne found a very serious problem with the VEX reader, it turned out to be two things: 1) the VEX Import command was writing the VEX file over the original as soon as it was read (this looks like it has been there forever, a stupid cut'n'paste bug when I first did the export); 2) in certain cases, MT's path search routines were doubling up the directory name, so it would try to open something like this: c:\dir\c:\dir\file.vex which, of course, failed. These two bugs by themselves would have been fairly benign, but combined they actually overwrote the original file with an empty one, so this was pretty nasty! Enhancements ------------ Lance's VE Table Estimator has been incorporated under the Tools menu, it has a little different interface than the version on his website, but it should be fairly obvious what you need to do and experimentation should clear up it's behavior. There is a new datalogging "burst mode" to support Johan Grahn's Palm logging software. When in burst mode, MegaTune ignores the comm settings, and uses ones from the init files. By default, burst mode uses 115,200 baud and the same comm port as was set for talking to MegaSquirt, but these can be overridden with the values in settings.ini. The time delay between frames is always zero in burst mode. Johan has tested this to read logs at about 30 lines/second, which I find to be somewhat slower than I expected but it's a starting point. Burst mode basically does three things: 1) Turns on datalogging (using the User-Defined format, which has become the only format in 2.25 at this point). 2) Changes the delay between frames to zero. 3) Raises the comm rate to 115200 baud. It also suppresses sending extraneous "what version are you" type of messages, so that the connected device (the palm pilot) does not have to deal with them. By default, it uses the same comm port that is specified for normal MS operations, but that is settable in the .ini file (likewise the baud rate can be changed there, too). Right now, the main event loop is still in operation during burst mode, so all the gauges are updated, the menus are still alive and all sorts of non-productive processing is going on during the burst. I've got a note in my to-do list to make a burst mode dialog that would merely have a status line, "3840 records received..." along with "Done" and "Abort" buttons. This would probably make throughput about 4 times faster (mostly due to no gauge updates), and would give some assurance that things were cranking along at a decent clip. There is one caveat to logs created with burst mode, the "Time" column is totally useless, in that it reflects real time during download, not during recording (which, of course, must be the case since Time is a MegaTune thing and not MS). Multi-Car File Management ------------------------- I finally got around to creating a real installer and defining a standard file structure for MegaTune installations. It looks like this, if you don't change any of the defaults: C:\Program Files\ MegaSquirt\ MegaTune VERSION\ exec and help files mtCfg\ default init files car1\ log and msq files go here mtCfg\ Shortcuts and menus start up MegaTune in the "MegaSquirt" directory, and MT then looks around for "*\mtCfg". If it finds just one, it works there, so in the above default directory tree, you'd start up MT and see that you were in the "car1" directory. Now if you add peer directories to "car1", and put an "mtCfg" subdirectory in them, then when MT starts up, it will present you with a list of th directories found, allow you to select one, then run there. You can rename "car1" to be anything you want, the actual names are un-important, the structure is what is important. In fact, you could actually move the startup directory somewhere else if you like and things will work just fine, as long as you modify the "Start in" setting on all shortcuts and menus. Here's an alternative example, for those of you who want to separate your programs and data. C:\Program Files\ MegaSquirt\ MegaTune VERSION\ exec and help files mtCfg\ default init files C:\users\ eric\ cars\ MaxQ\ mtCfg\ dual table mods in "settings.ini" dual table mods in "custom.ini" Bosch clt.inc GM mat.inc Scirocco\ mtCfg\ standard settings in "settings.ini" empty "custom.ini" different Bosch clt.inc some Bosch mat.inc After I set my shortcuts to start in "C:\users\eric\cars", I see both MaxQ and Scirocco in my startup list. Want to see more details on what's going on? Look for a file named "audit.log" in your startup directory after you've exited MegaTune. It will contain all sorts of useful information relating to the processing of the initialization files, and is extremely useful for debugging your init files. General Init File ----------------- Two new files, settings.ini and custom.ini, are installed in the car-specific directories, and are intended to hold any modifications specific to that MegaSquirt installation. If you look in settings.ini you will see where metric temperature reporting (Celsius) is enabled, among other things. If you wish to redefine gauge settings specifically for one vehicle, then you would do that in custom.ini. For changes that you wish to be global to all vehicles, modify the base megatune.ini file. Added "#include" to ini file reader, so you can better organize your changes. In use it looks like this: #include "gaugeColors.ini" where the content of the file gaugeColors.ini would be anything that is valid in the megatune.ini file. Simple conditionals allow you have a global setting that changes many smaller specific things. Look for "CELSIUS" in megatune.ini for an example. Generally, you do this: #set THIS #unset THAT #if THIS whatever... #elif TOTHER ; As many "elif" clauses as you want. more stuff... #else something else. #endif You can use "set" and "unset" to toggle a setting back and forth; the "elif" and "else" parts of the "if" are strictly optional. A negation of the "if" is possible, using "ifnot" as follows: #ifnot SPEED_DENSITY #error "Alpha-N is not implemented by the MSnLaserBeam variant." #exit #endif Additionally, for debugging purposes, there is a logging feature that allows you to write a string to the audit log: #log "This text goes to the audit log." will add a line to audit.log prefixed by the current file name and the line number on which the "log" directive was found. And finally, to round out the directives, you can generate error messages when things go wrong. The string after the "#error" directive is sent displayed in an alert box and also logged in the audit file; the "#exit" directive terminates megatune immediately. #if BLAH ... #else #error "BLAH was unset, killing MegaTune" #exit #endif User-Defined Dialogs -------------------- This capability has been completely reworked. You can now define up to 30 dialog boxes with 20 edit fields each. If you supply more too many of either, those extra entries will be silently ignored. You now must define the menu entry and dialog box title. The field entries allow for constant scaling and translation of the values so that the "database" value can be in arbitrary units and then will be converted to user units for display and editing; each has its own scale, translate and limit values. Additionally, you may specify the number of digits to display in each field. You may now also edit bit fields from 1 to 8 bits long. The entry for the bit field editing contains the field lable, a location spec, and a list of values to be used to display the bit settings. The order of definition determines the order of display, for both dialogs and fields. [UserDefined] ;---------------------------------------------------------------------------- ; dialog = "menu entry", "dialog title", pageNumber ; field = "field label", offset-in-constants, scale, translate, lo, hi, digits ; field = "field label", location, "value 1", "value 2",... ; ; The scaling and translation values are used as follows: ; msValue = (userValue - translate) / scale ; userValue = msValue * scale + translate ; ; The page number of the dialog sets the current page upon which ; all data in the dialog are located. If you are using a single ; page embedded code, like B&G MS-I, then don't enter any value. ; See dual-table.ini for how it is used in a multi-page code. ; ; I've got no good way to handle a few of these things yet. ; ; Temperatures are fine, check out the Fielding IAC example. ; ; The TPS stuff is a problem, because we have to modify the ini file ; for each TPS installation and again whenever we move the TPS... ;---------------------------------------------------------------------------- dialog = "-" ; Using just a dash creates a divider in the "Settings" menu. dialog = "&Idle Control", "Fielding 2-Wire Idle Control", 1 ; Here's the layout for bit-edit comboboxes. You need to supply ; the correct number of labels matching the number of bits you've ; specified: one bit requires 2 values, two bits requires 4 values ; and so on. Bits are numbered 0-7, the rightmost being bit zero ; (this corresponds to the bit editing instructions in Motorola's ; CPUs, but may be different in other manufacturer's processors). ; "field label", ofs[loBit:hiBit], "n-labels" field = "Algorithm", 118[4:4], "B&G On-Off", "Fielding PWM" ; The next field definition provides an example where we translate ; from MS's internal units of raw ADC count for TPS into throttle ; position percentage. To calculate the scale and translate values ; from ADC, use: ; ; low = lowest display value ; high = highest display value ; scale = (high-low)/(max-min) ; translate = low-min ; ; So for my installation with TPS ADC values of 26 at idle and 225 at ; WOT, I calculate the values you see above as: ; scale = (100-0)/(225-26) = 0.502 ; translate = 0-26 ; Here's the layout for scalar-edit fields: ; "field label", ofs, scale, tra, lo, hi, digits field = "Throttle Threshold (%)", 127,0.502, -26.0, 0.0, 255, 1 #if CELSIUS field = "Fast Idle Temp (°C)", 121,0.555, -72.0, -40, 102, 1 #else field = "Fast Idle Temp (°F)", 121, 1.0, -40.0, -40, 215, 0 #endif Configurable Data Mapping ------------------------- The new [Constants] block allows you to configure how memory is stored on the controller. You may specify the size of each page, how it is read, how it is written and how it is made permanent (burned) on the controller. [Constants] ; Dual table definitions. nPages = 2 burnCommand = "B" pageSize = 128, 128 pageActivate = "", "" pageReadCommand = "P\000V", "P\001V" pageValueWrite = "P\000W%o%v", "P\001W%o%v" ??? FORMATS User Defined 3D Tuning Dialog ----------------------------- The tuning dialog is now user configurable. As you add more "table" entries, you get more buttons under the "Tuning" menu. You can have up to 20 tuning dialogs, the order in which you mention them is the order in which they will appear under Tuning. ??? all data are bytes! word/dword support is forthcoming. ??? ??? auto switching of load from MAP to TPS is not yet supported with the switch to ALPHA-N... ??? [TableEditor] table = "menu", "title", offset, scale, translate, page-number, "X-or-Y-order" xBins = x-offset, x-scale, x-translate, x-count, x-variable, "x units" yBins = y-offset, y-scale, y-translate, y-count, y-variable, "y units" menu - The character string that appears under the "Tuning" menu. title - The character string displayed at the top of the dialog box. offset - The memory offset in the page at which the table data begins. scale - Multiplier to convert from internal value into user value (same as "field" in UserDefined dialogs). translate - Translation for internal value. The displayed value is (internalValue + translate) * scale. page - Page number on which all the data for this table appears. The xBin and yBin data must also be stored in the same page. order - "X" means that the data is ordered such that x changes with each step, as in [x1,y1] [x2,y1] [x3,y1]... "Y" means that the y index changes fastest, like this [x1,y1] [x1,y2] [x1,y3]... For each x and y bin specification offset - Offset in memory of the bin data, must be on the same page as the table data. scale - Multiplier to convert from internal value into user value (same as "field" in UserDefined dialogs). translate - Translation for internal value. The displayed value is (internalValue + translate) * scale. count - Number of values in this bin (and thereby this dimension of the table). variable - Name of the variable that is interpolated into this bin. units - String name of the variable as you want it displayed in various places in the tuning dialog. Here's an example extracted from the megasquirt-I.ini file, see dual-table.ini for a multi-page example. [TableEditor] table = "&VE Table", "VE Table", 0, 1.0, 0.0, 1, "X" xBins = 100, 100.0, 0.0, 8, rpm, "RPM" yBins = 108, 1.0, 0.0, 8, map, "MAP" User-Configurable Datalogging ----------------------------- Datalogging is user configurable. See the [Datalog] block in the megatune.ini file for full details. All those variables that became available in release 2.20 are now allowed in the definition of datalog entries, so anything you can measure you can log. The user-defined datalog recording is invoked via the menus, or by the Alt-L shortcut; the default log file name now is suffixed with an ISO-8601 standard date, so each file name is unique without any user input. Now rather than the rather painful menu navigation to begin datalogging, you can simply type Alt-L and Enter. Datalog "marking" as suggested by Al Mitchell and refined a bit by Mike Soultanian, is implemented on the runtime screens (any thing with a gauge). If you have a datalog running and you hit the spacebar, then a "MARK NNN manual datestamp" is written to the datalog and a beep is generated to verify that the mark was made. This can help you later pinpoint when a stumble or other notable event occurs. Log mark date stamps are also written in ISO-8601 standard format. There is an "auto mark" feature, enabled by setting a variable reference in the "markOnTrue" property in the Datalog section of the ini file. Create a variable with a boolean value (0 means false, anything else is true), then reference it like this: [OutputChannels] highLoad = { rpm >= 3500 && throttle >= 50 } [Datalog] markOnTrue = highLoad The variable "highLoad" in this example changes from false to true as the rpm and throttle change, whenever it makes a transition from false to true, a datalog mark will be written and tagged with the variable name to distinguish it from "manual" datalog marks. (Processor resets generate an automatic mark, labelled "RESET n", where n is the sequence number of the reset.) Another Datalog property, "enableWrite", allows you to suppress datalogging with a similar scheme. Create another variable that defines the conditions under which you'd like to record datalogs and then reference it as follows: [OutputChannels] logging = { rpm >= 2000 } [Datalog] enableWrite = logging Beta build 334 or later ----------------------------------------- Bit spec has been augmented with an offset: nCylinders = bits, U08, 116, [4:7+1] This creates auto-labels that are sequenced "1", "2" and so on. The user values correspond to the auto-labels, but the internal value will be 0...15 for the above value. V 2.20 - 11 FEB 2004 ============================================ ================================================================= The biggest change in this release is in gauge functionality. You can now map any gauge to any position on either of the front or tuning pages. Full details are too numerous to list here, dig through the megatune.ini and find everything you want to know. You DO NOT need to know any of this to make MegaTune work, but if you want to modify the interface, check it out. (If you are writing your own embedded code, you really will want to take a look at this, since you can now map those blank spots to custom gauges.) Backward compatibility of old gauge definitions in the tuning section of megatune.ini was sacrificed for this release. If you had changed the default configuration for those gauges, they will no longer have any effect. The front page gauges had fewer changes, so old gauge definitions still work for them, but I'd still recommend using the new much more flexible definitions (I'll probably ditch backward compatibility mode sometime in the future, so be prepared). Added another of Marc Piccioni's ideas: the log file now allows user defined comments in the header. You will find a new options dialog accessible under File->Datalogging->Options..., which will let you enter text to be placed at the top of the file and allows you to toggle the writing of a full database dump at the head and tail of the datalog. The dump has the same format as Tools->Dump, and records the current state of all the constants and tables at that point in time, so if you do any tuning while the datalog is being recorded, those changes will be evident as differences in the two dumps. WARNING! Adding comments or dump output to the log files will cause them to be unreadable by older versions of MST3K and MSLVV. If you have problems, just edit the log file and delete all the lines starting with quotation marks, as these will be the ones that contain the comments. I completely reworked the VE table contour plot, it is now resizable and the color selection algorithm was re-written from scratch. The colors are now much more smoothly across the range, and they scale from blue at the minimum VE to red at the maximum value, rather than being fixed with blue = 0% and red = 255%. Gauge aesthetics were another major focus of this release: the fonts, colors and just about everything was massaged for a more pleasing look. I considered antialiasing the drawing routines, but decided against it as the CPU load would be quite heavy and there are no good fast libraries for our old win95 and win98 machines, so we'll just have to live with zig-zags on the lines... Added "faceColor = 255,255,255" to megatune.ini for default gauge face color of white. Note that the warning and danger colors are xored with the base color, so they might seem incorrect unless you know this. The VE Table dialog has been "flipped" such that the low load bins (MAP in speed-density mode and throttle position in Alpha-N mode) are at the bottom of the screen and the high values are at the top. This is to make it correspond with the VE plots and tuning screen. Read through the megatune.ini file to see if there is anything you wish to customize. In particular, the AFR gauge can be enabled and you'll probably want to select the proper include file to make it work (NBafr100.inc for narrow band sensors and WBafr100.inc for wideband). V 2.16 - 04 JAN 2004 ============================================ ================================================================= This version has been tested with Mike Robert's MegaSquirt Logfile Visual Viewer (MSLVV) version 2.16 (Mike has changed his versioning scheme to jive with MT so as to make it easier to know what works where). See the files section of the MegaSquirt yahoo group for the release code. Bug Fixes --------- Add Ben Stembridge's fix for the blurry gauges. Fix rounding of TPS percentages in VE table and elsewhere. Fix bug in Require Fuel calculator where nCylinders is garbage. Lance Gardiner uncovered a bug in the Enrichments dialog that mangled the O2 sensor settings. If you started MT and displayed the Enrichments screen before connecting to the MS, then the O2 sensor type (and Alpha-N) settings would be mangled. All fixed now. Enhancements ------------ Two major enhancements appear in this release. First, I merged in Steve Herz and Marc Piccioni's Warmup Wizard from their MegaTuneCS variant, try it, you'll like it. Find it under Runtime -> Warmup Wizard; hit F1 for context sensitive help. Second, there is now a user-defined dialog box that appears in the Settings menu. This is a very crude mechanism that allows you to edit data anywhere in flashed ram by customizing the contents of the megatune.ini file. See that file and read the help (hit F1 while displaying the dialog) for full details. (Thanks to MiseryQ and Mike Soultanian for their testing of this feature.) IMPORTANT NOTE FOR USER-DEFINED DIALOG USERS! --------------------------------------------- The standard code's V command only sends back 125 bytes, so MegaTune will never show those last three values properly unless you change the SCI routines. Dave Jeal wanted to see all 128, so he changed this part of the embedded code: MODE_V: clr txcnt lda #$03 sta txmode lda #$7E <==== MAKE THIS #$81 I then made MT handle this as a general case (a couple releases back). I suggest you make this change in your code, or you'll only ever see garbage coming back into the user-defined dialog fields for your extended variables. (Sending the values to MS works fine, only fetching them fails.) A host of minor enhancements were included. The serial data rate is now configurable via the communications settings dialog, with allowed speeds of 9600 (default), 19,200 and 38,400 BPS. UNLESS YOU HAVE MODIFIED YOUR EMBEDDED CODE TO TAKE ADVANTAGE OF THIS, DO NOT DO NOT DO NOT CHANGE IT FROM 9600! Mike Robert has tested this out in his code and it seems to work for him, so if you need faster comm for higher resolution datalogs or whatever, seek him out. Did I say DO NOT CHANGE FROM 9600 without knowing what you are doing? MT now allows gauge/meter values to be reversed, so as to accomodate WB O2 interfaces that have rich at low voltage and lean at high. See megatune.ini for details. The temperature scale setting in megatune.ini was previously case sensitive, only upper case values were valid. MT now ignores case for these values so 'C' is the same as 'c'. I added Per Andersen's colored indicators to the runtime dialog's status bar. Mike Robert requested that the "full" datalog get five new columns to the far right. These contain the two duty cycle values, corresponding to PW1 and PW2, and the three raw data values stored in the "blanks spots" of the runtime variables, so if you are experimenting with the embedded code and want to datalog some values, just write them into those last locations and they will be logged. Mike's Log View version 1.4 and later supports display of these values. Eric Aston's suggestion regarding locating the tuning spot and cursor has been implemented in 3D tuning. You now have optional vertical and horizontal indicator lines for the two objects as they move about the grid. Several gauges now show telltale values, that is, the highest reading of the gauge leaves a ghost image at that position. This is behavior is currently hard coded, so you cannot modify which gauges have telltales, or turn them off altogether, but I'll probably put this in the megatune.ini file sometime. Gauge behavior has changed a bit. The old "redline LED" is gone, replaced by a change in the background color for the whole gauge. I never did like those little LEDs, as they were hard to see; the new background color change is very obvious. The colors used for warning and danger are accessible in the megatune.ini file as follows: backgroundColor = 202, 202, 202 ; Normal. bgWarningColor = 255, 255, 190 ; Warning (light yellow). bgDangerColor = 255, 160, 160 ; Danger (light red). The limits for each gauge are set using a new form of the gauge limit entries in megatune.ini. The old form (which still works just fine) had three values: gauge = lower, upper, redline and the new form has six: gauge = lower, upper, low-danger, low-warning, high-warning, high-danger When the gauge's displayed value is below low-danger or above high-danger, then the background color is set to the bgDangerColor; likewise when the needle value is outside the low-warning and high-warning limits (but still inside the danger limits), the background color is set to the warning color. The old style is interpreted as meaning "no warning limits, no lower danger, upper danger = redline." V 2.15 - 31 MAR 2003 ============================================ ================================================================= New command in Tuning suggested by Mike Lough, the "GO TO" mode command. Type G to toggle it on or off. When in "GO TO" mode, the cursor chases the tuning spot. Some might find this annoying, but give it a try, you might like it. Look in the megatune.ini, there is a new section GaugeColors, which allows you to set every color used by the analog meters and LED bars. I don't suggest you change them, but if you cannot read the gauges because colors dither or go to some wacky value due to a small color map, you'll need to tweak them here. NOTE: You need not add this block of values to old megatune.ini files, as the default values are the same as they've always been. Likewise, down in the Tuning section of the .ini file are five new color values for the tuning windows. You can set all of the colors for the cursor, spot, grid and so on. A final value, gridOrient, allows you to set the space-based 123 euler angles for orienting the 3D grid in its perspective view (use the N and M keys to find something you like, then copy the numbers from the status window into your .ini file). Acceleration enrichment has two cold adjustments: the original additive adjustment (Cold Accel Enrichment) and a new for embedded code V2.0 code multiplier (Cold Accel Mult). Access it on the enrichments dialog. V 2.14 - 26 JAN 2003 ============================================ ================================================================= Added raw datalog, all values are stored without transformation. Notice that the sensor values are all in raw ADC counts, so you'll have to pump most numbers through the appropriate transfer function to make sense of them. Dual table stuff: VE and PW are now page specific on the runtime dialog. Pop it up and type alt-1 and alt-2 to see it work. The VE grid is now displayed as a 3D surface plot in the Tuning dialog. You can toggle between the surfact plot and the flat view by pressing the 'Z' key repeatedly. Note that the flat view has been flipped such that low MAP values are at the bottom. The navigation keys have been reversed to work more intuitively with the flipped view, up raises MAP, down lowers it (left still lowers RPM and right raises it). As a nice side effect, the reworked plotting code eliminates the phantom dot and cursor that arose occasionally with the previous implementation. Prof. Matthias Lindner pointed out a bunch of bugs with the gauge and LED bar settings, MAT on front page had its lower bound set to the MAP gauge's lower bound, the LED bars didn't pay very much attention to the minimum value at all... This is all fixed now. Matthias also suggested the color of the messages on the tuning screen key into the cursor and the spot, so now they do. The cursor is red and so is the text which reports its position; likewise for the spot and its new text values. Someone tried to set deceleration enrichment above 100% and found that MT limited this to the range 1-100%. I've changed the range to 0-200%, which should satisfy anyone. V 2.13 - 09 NOV 2002 ============================================ ================================================================= Default gauge on tuning screen is now EGO correction, since this is the most used number (by me, at least) while tuning. Command line read of .msq files, just double click on one then set the application to be MegaTune.exe. Alt-V for VE table. When a VEX or msq file is read, you are asked if you want to download it to the MegaSquirt and burn the contents to FLASH RAM. There are two datalog formats now, the "classic" format to accomodate MST3k, and a full log with real time, and VE with pulse width for both injector drivers. A new entry in the megatune.ini file allows you to set the default controller code version for off-line editing. Previously, MT assumed 1.0 unless it was connected to a running MS, so you could not modify any of the v2 or dual table options. The new default is v2, set it to 0.1 for dual table code. V 2.12 - 10 SEP 2002 ============================================ ================================================================= VEX Import had a bug which transposed the table values on input, all fixed now and ready to rock with MST3k. VE Table scaling can be accomplished by either clicking the button on VE Table dialog or using the VE Scale command from the Tools menu. Enter a pair of actual ReqFuel values and the table is scaled correctly, or just make up a couple of numbers that scale it as you like. V 2.11 - 04 SEP 2002 ============================================ ================================================================= Alpha N bug fix: MS uses raw ADC values internally, but MT uses percentage values through out. MT was not consistent, and sent percentages to MS occasionally, screwing things up greatly. Should be all fixed now. Likewise, duty cycle had some problems that lingered, but should be better now when more than one squirt per cycle is used. Go to the tuning screen and look at the bottom of the screen. There are now three sets of gauges available for display in the lower right of the gauge panel: enrichments, pulse width for bank one, or pulse width for bank two. MT now has better support for different MAT and CT sensors. Previous versions used the table in thermfactor.inc to convert the raw ADC counts to temperature for display on the real time display screen. If you used thermistors with the same curves for both, then things worked fine, but if you used, say, a GM MAT sensor and a Bosch CTS, then your MAT values were probably displayed way off (this in no way affected operation inside MS, as it doesn't ever use actual MAT, just the density factor from airdenfactor.inc). You can now create a file named matfactor.inc and put it in the same directory with thermfactor.inc and have different thermistors with correctly displayed temperatures. You can use gentherm2 v 2.3 to generate a matfactor.inc directly, or if you have a correct thermfactor.inc, just rename it matfactor.inc and put it in the proper directory. New key mappings Alt-C gone, replaced with Alt-S Ctrl-S saves F in tuning screen "finds" the intersection nearest the spot. EGO LEDs on front page and tuning screen. Driven from the settings in the megatune.ini file, where there is better documentation. V 2.10 - 03 AUG 2002 ============================================ ================================================================= Lots of new stuff in 2.10, here's the list. Installation ------------ Installation has changed, the mtCfg directory is the preferred location for all the .inc, .ini and .cfg files. The old location (where megatune.exe resides) will still work, but if you create the mtCfg directory you can keep your installation cleaner. Bug Fix ------- All previous versions with meters on the front page have consumed system resources without releasing them. This would ultimately cause the machine to either lock up or crash. All fixed in 2.10, thanks to Guy Hill for pointing this out to me. Dual Table Mode Support ----------------------- Speaking of Guy, this version supports dual table mode, which is available in his highly modified controller code. Dual table mode controls the two injector drivers on MS completely independent of one another. This allows you to use one driver for fuel injectors, and the other, say, for water injection (or anything else you can dream up). When you are using dual table mode, you change the "page" that you are working on by either clicking the spin control on the front page or by typing alt-1 and alt-2. The page upon which you are working is not obvious (I'm working on this), so pay attention to that little box on the bottom of the front page. Table Editor/Memory Viewer -------------------------- The new table editor (on the Tools menu) allows you to edit the raw memory inside your controller. Make sure you know what you are doing before you change anything here. Those of you hacking the assembler code will find this invaluable, because you can get to every byte accessible to MT, including those unused bytes at the end of the controller RAM. The memory viewer is a read-only version of the table editor. It allows you to view any memory location in the controller, but is only available with Guy's dual table code. If you turn on realtime updating, and set the base address to $0100, you can watch the stack grow and shrink at the top end of the page. Communications Logging ---------------------- The communications menu shows a new communcation logging facility. This dumps out all data communicated with MegaSquirt into a text file named comm.log in the MT working directory. This file shows all data as hex bytes, except for the command character sent from MT to MS, which is shown in ASCII. Hot Keys -------- There are finally hot keys for navigating the commonly used dialogs and functions. Note that these are global hot keys, so when you invoke one it doesn't matter what is going on, that hot key jumps into action (so, if you are in the middle of the tuning screen and need to change enrichments, type Alt-E and change them, without leaving the tuning screen). The keys are as follows: Alt-1 - switch to page one in dual page mode. Alt-2 - switch to page two in dual page mode. Alt-C - pop up the constants dialog. Alt-E - pop up the enrichment dialog. One peculiarity of this is that the Close button on all the dialogs can no longer be invoked by Alt-C, since this now pops up the constants dialog. VE Table Exchange ----------------- Darren Clark has come up with a standard called VEX for exchanging VE information between various programs and has implemented it as the file format for his MSTweak3000 (aka MST3K). I've added a like import and export facility in MT (and published the C++ objects as utlities), see VEX import and VEX export under the File menu. Go to the yahoo site and search for VEX and EVEME, then look in the files section for some other goodies. Dump ---- The dump command has been moved from the File menu to Tools. Throttle Factor Table --------------------- A generator for throttlefactor.inc can be found under the Tools menu. Either type in the raw ADC counts corresponding to closed and full open throttle, or sit in the car, and use the "get" buttons while holding the pedal in the proper position. It couldn't be easier, could it? This is a .inc file, so adheres to the rules for other .inc file with respect to location (read the first entry for this release). V 2.00 - 16 JUN 2002 ============================================ ================================================================= Enrichment window now 640x480 compatible. Controller resets are reported with a Bing! and setting the connected status bar entry to "RESET n" where n is the number of resets detected since startup. Barometric correction can now be disabled (v 2.0 controller code only). The toggle is on the constants page. V 2.00beta - 07 JUN 2002 ============================================ ================================================================= Second beta fixes V2 detection, reduces biggest windows to 640x480. The two major inputs are displayed in the first two gauges on the front panel. RPM is always displayed, and either MAP (in the case of speed-density) or throttle position (in the case of alpha-N) is next. Updating of gauge values is much improved, and the type of gauge should always reflect the metering algorithm. The TPS values have all been changed to Throttle %, and the runtime value is translated with a TPS->TP transfer function now. This function is defined in an include file with the same form as a the other .inc files, and is read from throttlefactor.inc. If this file is not found, the map from ADC counts of 0-255 are mapped to 0-255 percent throttle values. (Guy Hill's alpha-N version of the controller code utilizes this file, allowing you to work in engineering units rather than voltages or raw ADC counts.) The non-sticking O2 switching voltage is fixed. V 1.61 - 14 MAY 2002 ============================================ ================================================================= All constants are fully initialized, so you get a reasonable starting point without downloading from the controller. There are now two algorithms for injection control: the original speed density (MAP-based load) and a new alpha-N (TPS-based) system. Alpha-N is only implemented in the v.2.0 and later controller codes, and the setting will have no effect in versions older than that. The version 2.0 code also allows setting of EGO sensor parameters, namely EGO type (traditional 0-1v narrow band or wide band). Once you've specified the sensor type, you should also set the switch point for the sensor (0.5 v for nB and 2.5 for DIY-WB; other WB sensors may have different switch points). The datalog has moved from the tuning screen and is now under the file menu! Once enabled, datalogging occurs as long as MT is displaying the top window, the runtime window or the tuning window. The comm port initialization bug is fixed. V 1.60 - 13 MAY 2002 ============================================ ================================================================= Wacky new front page. Dump command added to File menu. It writes out the contents of constants array and VE table into the file MegaTune.dmp in the directory in which MT is run. Bug fix for constants page which zeroed out all the values on the left side of the dialog box. Comm verification added. V 1.52 - 01 MAY 2002 ============================================ ================================================================= Made comm handling a lot more robust and added "connected" status to both runtime and tuning dialogs. Still not perfect but much better. Fixed bug on enrichment dialog where illegal value in 160 degree warmup enrichment bin would lock MT into a loop. Added duty cycle to runtime output. V 1.51 - 22 APR 2002 ============================================ ================================================================= MSCOMM is now obsolete! This version uses the Win95 serial port calls, so it appears to be completely robust with respect to data communications. I've been running the timer interval at 50 ms, on a 233 mHz PII laptop with Win98, and have seen zero errors in many tens of minutes of datalogging. If you do see errors report them to me (efahl@adams.com) immediately! Comm settings are auto saved, so when you change comm ports, that port value is written to the megatune.cfg (which is also no longer needed at startup, it defaults to com1 and 200 ms timer interval). Two new fields have been added to the Enrichments. Both fields are only active for version 2.0 and later of the MS controller code, so if you want to take advantage of them, you will need to update your MS. The new Priming Pulse field allows you to specify the duration of a priming pulse applied when MS is powered up. The EGO Active Above RPM field allows you to set the RPM below which closed loop operation is disabled. See the help for the enrichment dialog for more. Database files now store parameters from ReqFuel calculator, notably engine displacement, injector flow and AFR. This allows you to see where that funny number came from. V 1.50 - 13 APR 2002 ============================================ ================================================================= This is the first release of the modified B&G code. Help is implemented across all dialogs, just hit F1 wherever you want help. At startup all of configuration tables are read from the startup directory, so you need to select the right versions of kpafactor.inc and barofactor.inc installed (see Installation, above). All commands have keyboard mappings, there is no need to ever use the mouse. Either type the underlined letter on the button, or "alt-letter" and the button will be pressed just like all other MFC-based applications. Settings file save and load are added, the default directory is the startup directory. Files contain version info, allowing future versions to do conversion. Required fuel calculator now allows metric or English units. Bar charting on run time screen, units added. VE Tuning key mappings include arrows for moving cursor and shift-up/down to scale VE. Bar between gauges and tuning map shows magnitude of VE. VE Tuning screen scales properly with large fonts. "Esc" exits anything now. Two screens require confirmation before editing: the VE Tuning and the top-level MegaTune dialog. When bouncing down the road, hitting "Esc" twice will return you to either of these two screens.