diff --git a/firmware/boards/f1_dual/port.cpp b/firmware/boards/f1_dual/port.cpp index a6d4a7e..b03df49 100644 --- a/firmware/boards/f1_dual/port.cpp +++ b/firmware/boards/f1_dual/port.cpp @@ -143,7 +143,7 @@ int GetConfiguratiuonSize() return sizeof(config); } -#define TS_SIGNATURE "rusEFI 2022.05.29.wideband_rev2" +#define TS_SIGNATURE "rusEFI 2022.05.29.wideband_dual" const char *getTsSignature() { return TS_SIGNATURE; diff --git a/firmware/ini/rusefi_wb_f1_dual.ini b/firmware/ini/rusefi_wb_f1_dual.ini new file mode 100644 index 0000000..5c91391 --- /dev/null +++ b/firmware/ini/rusefi_wb_f1_dual.ini @@ -0,0 +1,250 @@ +; This is a TunerStudio project for the rusEFI.com engine management system + +; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly. +enable2ndByteCanID = false + +[SettingGroups] + ; the referenceName will over-ride previous, so if you are creating a + ; settingGroup with a reference name of lambdaSensor, it will replace the + ; setting group defined in the settingGroups.xml of the TunerStudio config + ; folder. If is is an undefined referenceName, it will be added. + ; keyword = referenceName, DisplayName + +[MegaTune] + ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 + signature = "rusEFI 2022.05.29.wideband_dual" + +[TunerStudio] + queryCommand = "S" + versionInfo = "V" ; firmware version for title bar. + signature = "rusEFI 2022.05.29.wideband_dual" ; signature is expected to be 7 or more characters. + + ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C + useLegacyFTempUnits = false + ignoreMissingBitOptions = true + + ; Optimize comms for fast rusEFI ECUs + noCommReadDelay = true; + defaultRuntimeRecordPerSec = 100; + maxUnusedRuntimeRange = 1000; + + ; Set default IP/port to our IP/port + defaultIpAddress = 192.168.10.1; + defaultIpPort = 29000; + +[Constants] +; new packet serial format with CRC + messageEnvelopeFormat = msEnvelope_1.0 + + endianness = little + nPages = 1 + + pageIdentifier = "\x00\x00" + pageReadCommand = "R%2o%2c" + burnCommand = "B" + pageActivate = "P" + pageValueWrite = "W%2o%v" + pageChunkWrite = "C%2o%2c%v" + crc32CheckCommand = "k%2o%2c" + retrieveConfigError = "e" + + ; communication settings + pageActivationDelay = 500 ; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/ + ; e.g. put writeblocks off and add an interwrite delay + writeBlocks = on + interWriteDelay = 10 + blockReadTimeout = 3000; Milliseconds general timeout + ; delayAfterPortOpen = 500 + blockingFactor = 256 ; max chunk size + ; end communication settings + +; name = bits, type, offset, bits +; name = array, type, offset, shape, units, scale, translate, lo, hi, digits +; name = scalar, type, offset, units, scale, translate, lo, hi, digits + +; CONFIG_DEFINITION_START + +pageSize = 128 +page = 1 + +test = scalar, U08, 6, "test", 50.0, 0, 0, 20000, 2 + +; total TS size = 1 + +[SettingContextHelp] + +; SettingContextHelpEnd + +[LoggerDefinition] +; valid logger types: composite, tooth, trigger, csv +; loggerDef = compositeLogger, "Primary Trigger Logger", tooth + loggerDef = compositeLogger, "Trigger Logger", composite + startCommand = "l\x01" + stopCommand = "l\x02" + dataReadCommand = "L" + dataReadTimeout = 10000 ; time in ms + dataReadyCondition = { toothLogReady } + continuousRead = true + ; each packet is 5 and we have 500 of those + dataLength = 1250 + + + ; recordDef = headerLen, footerLen, recordLen + recordDef = 0, 0, 5 + + ; these names are hard-coded inside TS + recordField = priLevel, "PriLevel", 0, 1, 1.0, "Flag" + recordField = secLevel, "SecLevel", 1, 1, 1.0, "Flag" + recordField = trigger, "Trigger", 2, 1, 1.0, "Flag" + recordField = sync, "Sync", 3, 1, 1.0, "Flag" + recordField = coil, "Coil", 4, 1, 1.0, "Flag" + recordField = inj, "Injector", 5, 1, 1.0, "Flag" + recordField = time, "Time", 8, 32, 0.001, "ms" + + ; it seems that TS also needs to know the diff.size of a tooth + calcField = toothTime, "ToothTime", "ms", { time - pastValue(time, 1) } + +; +; in order to add new TunerStudio gauge you need to chagne two places +; 1) add a line here in '[OutputChannels]' +; 2) in rusEFI firmware make a change to output_channels.txt + +[OutputChannels] + ochGetCommand = "O%2o%2c" + ; see TS_OUTPUT_SIZE in console source code + ochBlockSize = 1016 + +; Common +TestValue = scalar, U32, 0, "na", 1, 0, 0, 65535, 0 +VBatt = scalar, F32, 4, "V", 1, 0, 0.0, 30.0, 2 + +; AFR0 +AFR0_in = scalar, F32, 32, "", 14.7, 0, 0.0, 20.0, 2 +AFR0_temp = scalar, F32, 36, "C", 1, 0, 0.0, 1050.0, 0 +AFR0_Nernst = scalar, F32, 40, "V", 1, 0, 0.0, 1.0, 2 +AFR0_PumpITarget = scalar, F32, 44, "mA", 1, 0, -5.0, 5.0, 2 +AFR0_PumpIMeasure = scalar, F32, 48, "mA", 1, 0, -5.0, 5.0, 2 +AFR0_HeaterDuty = scalar, F32, 52, "%", 100, 0, 0.0, 100.0, 0 + +; AFR1 +AFR1_in = scalar, F32, 64, "", 14.7, 0, 0.0, 20.0, 2 +AFR1_temp = scalar, F32, 68, "C", 1, 0, 0.0, 1050.0, 0 +AFR1_Nernst = scalar, F32, 72, "V", 1, 0, 0.0, 1.0, 2 +AFR1_PumpITarget = scalar, F32, 76, "mA", 1, 0, -5.0, 5.0, 2 +AFR1_PumpIMeasure = scalar, F32, 80, "mA", 1, 0, -5.0, 5.0, 2 +AFR1_HeaterDuty = scalar, F32, 84, "%", 100, 0, 0.0, 100.0, 0 + +; EGT0 +EGT0_temp = scalar, F32, 96, "C", 1, 0, -250.0, 1600.0, 0 +EGT0_coldJunction = scalar, F32, 100, "C", 1, 0, -55.0, 127.0, 0 + +; EGT1 +EGT1_temp = scalar, F32, 112, "C", 1, 0, -250.0, 1600.0, 0 +EGT1_coldJunction = scalar, F32, 116, "C", 1, 0, -55.0, 127.0, 0 + +seconds = scalar, U32, 124, "sec", 1, 0 + +[PcVariables] + +[TableEditor] + +[GaugeConfigurations] + +gaugeCategory = Common +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +TestGauge = TestValue, "TestValue", "", -10000.0, 10000.0, -10000.0, 10000.0, -10000.0, 10000.0, 3, 3 +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +VBattGauge = VBatt, "Battery", "V", 3.0, 24.0, 9.0, 11.0, 15.0, 16.0, 2, 2 + +; AFR0 +gaugeCategory = AFR channel 0 +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +AFR0_Gauge = AFR0_in, "0: AFR", "", 6.5, 20.0, 9.0, 10.0, 16.0, 17.0, 2, 2 +AFR0_TempGauge = AFR0_temp, "0: AFR t", "C", 500, 1050, 500, 650, 800, 950, 2, 2 +AFR0_NernstGauge = AFR0_Nernst, "0: nernst", "V", 0.0, 1.0, 0.0, 0.0, 0.9, 0.95, 2, 2 +AFR0_HeaterDutyGauge = AFR0_HeaterDuty, "0: Heater", "%", 0.0, 100.0, 1.0, 3.0, 90, 95, 2, 2 +AFR0_PumpITargetGauge = AFR0_PumpITarget, "0: Ipump Target", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 +AFR0_PumpIMeasureGauge = AFR0_PumpIMeasure, "0: Ipump Actual", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 + +; AFR1 +gaugeCategory = AFR channel 1 +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +AFR1_Gauge = AFR1_in, "1: AFR", "", 6.5, 20.0, 9.0, 10.0, 16.0, 17.0, 2, 2 +AFR1_TempGauge = AFR1_temp, "1: AFR t", "C", 500, 1050, 500, 650, 800, 950, 2, 2 +AFR1_NernstGauge = AFR1_Nernst, "1: nernst", "V", 0.0, 1.0, 0.0, 0.0, 0.9, 0.95, 2, 2 +AFR1_HeaterDutyGauge = AFR1_HeaterDuty, "1: Heater", "%", 0.0, 100.0, 1.0, 3.0, 90, 95, 2, 2 +AFR1_PumpITargetGauge = AFR1_PumpITarget, "1: Ipump Target", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 +AFR1_PumpIMeasureGauge = AFR1_PumpIMeasure, "1: Ipump Actual", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 + +; EGT0 +gaugeCategory = EGT channel 0 +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +EGT0_Gauge = EGT0_temp, "0: EGT", "C", 0.0, 1600.0, 100.0, 250.0, 900.0, 1000.0, 2, 2 +EGT0_ColdJunctionGauge = EGT0_coldJunction, "0: EGT CJ", "C", 0.0, 130.0, -55.0, -20.0, 95.0, 105.0, 2, 2 + +; EGT1 +gaugeCategory = EGT channel 1 +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +EGT1_Gauge = EGT1_temp, "1: EGT", "C", 0.0, 1600.0, 100.0, 250.0, 900.0, 1000.0, 2, 2 +EGT1_ColdJunctionGauge = EGT1_coldJunction, "1: EGT CJ", "C", 0.0, 130.0, -55.0, -20.0, 95.0, 105.0, 2, 2 + +[FrontPage] + ; Gauges are numbered left to right, top to bottom. + ; + ; 1 2 3 4 + ; 5 6 7 8 + + gauge1 = AFR0_TempGauge + gauge2 = AFR0_Gauge + gauge3 = AFR1_Gauge + gauge4 = AFR1_TempGauge + gauge5 = VBattGauge + gauge6 = EGT0_Gauge + gauge7 = EGT1_Gauge + gauge8 = TestGauge + +[KeyActions] + +[Datalog] +; Channel Label Type Format +entry = time, "Time", float, "%.3f" +entry = TestValue, "TestValue", int, "%d" + +[Menu] + +menuDialog = main + + menu = "&Base &Engine" + + menu = "Fuel" + + menu = "Ignition" + + menu = "&Cranking" + + menu = "&Idle" + + menu = "&View" + + menu = "&Advanced" + + menu = "&Sensors" + +[ControllerCommands] +; commandName = command1, command2, commandn... +; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order. +; This does not include any resultant protocol envelope data, only the response data itself. + +; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands +; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition +; and may create error messages. +; It is expected that these commands would not typically alter any ram mapped to a Constant. + +; reboot ECU +cmd_reset_controller = "Z\x00\xbb\x00\x00" +; jump to DFU mode +cmd_dfu = "Z\x00\xba\x00\x00" + +[UserDefined] + +[Tools] diff --git a/firmware/ini/rusefi_wb_f1_rev2.ini b/firmware/ini/rusefi_wb_f1_rev2.ini index b477b4c..d0e9e07 100644 --- a/firmware/ini/rusefi_wb_f1_rev2.ini +++ b/firmware/ini/rusefi_wb_f1_rev2.ini @@ -118,13 +118,13 @@ test = scalar, U08, 6, "test", 50.0, 0, 0, 20000, 2 TestValue = scalar, U32, 0, "na", 1, 0, 0, 65535, 0 VBatt = scalar, F32, 4, "V", 1, 0, 0.0, 30.0, 2 -; AFR -AFRin = scalar, F32, 32, "", 14.7, 0, 0.0, 20.0, 2 -AFRtemp = scalar, F32, 36, "C", 1, 0, 0.0, 1050.0, 0 -Nernst = scalar, F32, 40, "V", 1, 0, 0.0, 1.0, 2 -PumpITarget = scalar, F32, 44, "mA", 1, 0, -5.0, 5.0, 2 -PumpIMeasure = scalar, F32, 48, "mA", 1, 0, -5.0, 5.0, 2 -HeaterDuty = scalar, F32, 52, "%", 100, 0, 0.0, 100.0, 0 +; AFR0 +AFR0_in = scalar, F32, 32, "", 14.7, 0, 0.0, 20.0, 2 +AFR0_temp = scalar, F32, 36, "C", 1, 0, 0.0, 1050.0, 0 +AFR0_Nernst = scalar, F32, 40, "V", 1, 0, 0.0, 1.0, 2 +AFR0_PumpITarget = scalar, F32, 44, "mA", 1, 0, -5.0, 5.0, 2 +AFR0_PumpIMeasure = scalar, F32, 48, "mA", 1, 0, -5.0, 5.0, 2 +AFR0_HeaterDuty = scalar, F32, 52, "%", 100, 0, 0.0, 100.0, 0 seconds = scalar, U32, 124, "sec", 1, 0 @@ -135,16 +135,16 @@ seconds = scalar, U32, 124, "sec", 1, 0 [GaugeConfigurations] gaugeCategory = Test -; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active -TestGauge = TestValue, "TestValue", "", -10000.0, 10000.0, -10000.0, 10000.0, -10000.0, 10000.0, 3, 3 -; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active -VBattGauge = VBatt, "Battery", "V", 3.0, 24.0, 9.0, 11.0, 15.0, 16.0, 2, 2 -AFRGauge = AFRin, "AFR", "", 6.5, 20.0, 9.0, 10.0, 16.0, 17.0, 2, 2 -AFRTempGauge = AFRtemp, "AFR t", "C", 500, 1050, 500, 650, 800, 950, 2, 2 -NernstGauge = Nernst, "nernst", "V", 0.0, 1.0, 0.0, 0.0, 0.9, 0.95, 2, 2 -HeaterDutyGauge = HeaterDuty, "Heater", "%", 0.0, 100.0, 1.0, 3.0, 90, 95, 2, 2 -PumpITargetGauge = PumpITarget, "Ipump Target", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 -PumpIMeasureGauge = PumpIMeasure, "Ipump Actual", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +TestGauge = TestValue, "TestValue", "", -10000.0, 10000.0, -10000.0, 10000.0, -10000.0, 10000.0, 3, 3 +; Name = Channel, Title, Units, Lo, Hi, LoD, LoW, HiW, HiD, vd, ld, Active +VBattGauge = VBatt, "Battery", "V", 3.0, 24.0, 9.0, 11.0, 15.0, 16.0, 2, 2 +AFR0_Gauge = AFR0_in, "AFR", "", 6.5, 20.0, 9.0, 10.0, 16.0, 17.0, 2, 2 +AFR0_TempGauge = AFR0_temp, "AFR t", "C", 500, 1050, 500, 650, 800, 950, 2, 2 +AFR0_NernstGauge = AFR0_Nernst, "nernst", "V", 0.0, 1.0, 0.0, 0.0, 0.9, 0.95, 2, 2 +AFR0_HeaterDutyGauge = AFR0_HeaterDuty, "Heater", "%", 0.0, 100.0, 1.0, 3.0, 90, 95, 2, 2 +AFR0_PumpITargetGauge = AFR0_PumpITarget, "Ipump Target", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 +AFR0_PumpIMeasureGauge = AFR0_PumpIMeasure, "Ipump Actual", "mA", -5.0, 5.0, -4.0, -3.0, 3.0, 4.0, 2, 2 [FrontPage] @@ -154,12 +154,12 @@ PumpIMeasureGauge = PumpIMeasure, "Ipump Actual", "mA", -5.0, 5.0, ; 5 6 7 8 gauge1 = VBattGauge - gauge2 = AFRGauge - gauge3 = AFRTempGauge - gauge4 = HeaterDutyGauge - gauge5 = NernstGauge - gauge6 = PumpITargetGauge - gauge7 = PumpIMeasureGauge + gauge2 = AFR0_Gauge + gauge3 = AFR0_TempGauge + gauge4 = AFR0_HeaterDutyGauge + gauge5 = AFR0_NernstGauge + gauge6 = AFR0_PumpITargetGauge + gauge7 = AFR0_PumpIMeasureGauge gauge8 = TestGauge [KeyActions]