diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index c2c4eb92e1..8443ad0838 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -33,7 +33,7 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = @@TS_SIGNATURE@@ + signature = @@TS_SIGNATURE@@ [TunerStudio] queryCommand = "S" @@ -285,7 +285,7 @@ enable2ndByteCanID = false calibrationValue = scalar, F32, 128, "", 1, 0 calibrationMode = scalar, U08, 132, "", 1, 0 ; 1 bytes padding1 - + fuelingLoad = scalar, U16, 134, "%", 0.01, 0 ignitionLoad = scalar, U16, 136, "%", 0.01, 0 @@ -440,7 +440,7 @@ enable2ndByteCanID = false requiresPowerCycle = etb_use_two_wires requiresPowerCycle = etbFreq - + requiresPowerCycle = idle_solenoidFrequency requiresPowerCycle = boostPwmFrequency requiresPowerCycle = alternatorPwmFrequency @@ -448,7 +448,7 @@ enable2ndByteCanID = false requiresPowerCycle = auxPidFrequency2 requiresPowerCycle = auxPidFrequency3 requiresPowerCycle = auxPidFrequency4 - + requiresPowerCycle = fsioOutputPins1 requiresPowerCycle = fsioOutputPins2 requiresPowerCycle = fsioOutputPins3 @@ -465,7 +465,7 @@ enable2ndByteCanID = false requiresPowerCycle = fsioOutputPins14 requiresPowerCycle = fsioOutputPins15 requiresPowerCycle = fsioOutputPins16 - + requiresPowerCycle = fsioFrequency1 requiresPowerCycle = fsioFrequency2 requiresPowerCycle = fsioFrequency3 @@ -482,12 +482,12 @@ enable2ndByteCanID = false requiresPowerCycle = fsioFrequency14 requiresPowerCycle = fsioFrequency15 requiresPowerCycle = fsioFrequency16 - + requiresPowerCycle = fsioAdc1 requiresPowerCycle = fsioAdc2 requiresPowerCycle = fsioAdc3 requiresPowerCycle = fsioAdc4 - + readOnly = warning_message @@ -738,7 +738,7 @@ enable2ndByteCanID = false yBins = boostTpsBins, TPSValue zBins = boostTableClosedLoop - + table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 xBins = fsioTable1RpmBins, RPMValue @@ -1050,14 +1050,14 @@ gaugeCategory = Knock indicator = { sd_status & 8}, "SD Log", "SD Log", white, black, green, black indicator = { sd_status & 16}, "SD Err", "SD Err", white, black, red, black - ; this is required so that the "config error" feature works in TS + ; this is required so that the "config error" feature works in TS ; don't change this line - TS is looking for an indicator with particular text/styling ; you don't even have to show it by default indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black ; minor info indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black + indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black @@ -1082,7 +1082,7 @@ gaugeCategory = Knock [KeyActions] showPanel = spi, spiFunction - showPanel = con, connection + showPanel = con, connection [Datalog] ; Channel Label Type Format @@ -1207,7 +1207,7 @@ gaugeCategory = Knock entry = knock6, "Knock 6", int, "%d" entry = knock7, "Knock 7", int, "%d" entry = knock8, "Knock 8", int, "%d" - + ; tpsADC = U16, "ADC", ; alignmet = U16, "al", ; atmPres = F32, "pres", @@ -1315,7 +1315,7 @@ menuDialog = main subMenu = cltIdleCurve, "CLT multiplier" subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - menu = "&Advanced" + menu = "&Advanced" subMenu = boostDialog, "Boost Control" subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } @@ -1399,7 +1399,7 @@ menuDialog = main subMenu = sdCard, "SD Card Logger" @@if_ts_show_sd_card subMenu = connection, "Connection" subMenu = tle8888, "TLE8888" - + subMenu = allPins1, "Full pinout 1/3" @@if_ts_show_full_pinout subMenu = allPins2, "Full pinout 2/3" @@if_ts_show_full_pinout subMenu = allPins3_1_and_2 "Full pinout 3/3" @@if_ts_show_full_pinout @@ -1419,7 +1419,7 @@ menuDialog = main subMenu = etbDialog, "Electronic throttle body (beta version)" @@if_ts_show_etb subMenu = etbTpsBiasCurve, "Electronic throttle body bias curve" @@if_ts_show_etb subMenu = pedalToTpsTbl, "Electronic Pedal Map" @@if_ts_show_etb - subMenu = std_separator + subMenu = std_separator # subMenu = smLaunchControl, "Launch Control" # subMenu = std_separator # subMenu = smRollingLaunch, "Rolling Launch" @@ -1462,7 +1462,7 @@ cmd_test_spk13 = "@@TS_IO_TEST_COMMAND_char@@\x00\x12\x00\x0d" cmd_test_spk14 = "@@TS_IO_TEST_COMMAND_char@@\x00\x12\x00\x0e" cmd_test_spk15 = "@@TS_IO_TEST_COMMAND_char@@\x00\x12\x00\x0f" cmd_test_spk16 = "@@TS_IO_TEST_COMMAND_char@@\x00\x12\x00\x10" - + cmd_test_inj1 = "@@TS_IO_TEST_COMMAND_char@@@@CMD_TS_INJECTOR_CATEGORY@@\x00\x01" cmd_test_inj2 = "@@TS_IO_TEST_COMMAND_char@@@@CMD_TS_INJECTOR_CATEGORY@@\x00\x02" @@ -1588,7 +1588,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says ; this section is auto-generated by FiringOrderTSLogic.java -@@FIRINGORDER@@ +@@FIRINGORDER@@ field = "This is useful to have tachometer working" field = " while converting from distributor" field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} @@ -1660,7 +1660,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Invert Cam/VVT", invertCamVVTSignal panel = triggerInputComparator @@if_ts_show_trigger_comparator - + dialog = triggerConfiguration panel = triggerConfiguration_settings, North, { consumeObdSensors == 0 } panel = triggerInputs, South, { consumeObdSensors == 0 } @@ -1834,7 +1834,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" panel = pedalSensorLeft, West panel = pedalGauges, East - dialog = mc33Dialog, "GDI Dreams" + dialog = mc33Dialog, "GDI Dreams" field = "MC33816 cs", mc33816_cs field = "MC33816 rstb", mc33816_rstb field = "MC33816 flag0", mc33816_flag0 @@ -1853,7 +1853,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Hold current target", mc33_i_hold field = "mc33_t_hold_off ?????", mc33_t_hold_off field = "Maximum injection duration", mc33_t_hold_tot - + ; Sensor Inputs dialog = otherSensorInputs, "Other Sensor Inputs" @@ -2044,6 +2044,10 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "LIS302DLCsPin", LIS302DLCsPin field = "MIL / Check Engine", malfunctionIndicatorPin field = "Saab CDM knock", cdmInputPin + field = "DRV8860 CS", drv8860_cs + field = "DRV8860 CS Mode", drv8860_csPinMode + field = "DRV8860 MISO pin", drv8860_miso + field = "DRV8860 SPI", drv8860spiDevice field = "comm status light", communicationLedPin field = "running status light", runningLedPin @@ -2142,7 +2146,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" dialog = iatSensor, "IAT Sensor", border panel = iat_thermistor, West panel = iatGauges, East - + ; Sensors->Oil pressure sensor dialog = oilp_settings, "Oil Pressure Sensor" field = "Oil Pressure ADC input", oilPressure_hwChannel @@ -2549,7 +2553,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" panel = batteryDialog panel = alternator panel = startStopDialog - + dialog = speedSensorAnalog field = "Input pin", vehicleSpeedSensorInputPin field = "revolution to speed mult", vehicleSpeedCoef @@ -2565,7 +2569,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" dialog = speedSensor, "Speed sensor", xAxis panel = speedSensorLeft gauge = VSSGauge - + ; Engine->Other inputs dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" @@ -2841,10 +2845,10 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop field = "#5", fsioFormulas5 - + field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter field = "#6", fsioFormulas6 - + field = "#7", fsioFormulas7 field = "use FSIO #8 for servo #1", useFSIO8ForServo1 @@ -2889,8 +2893,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Control Mode", boostType, { isBoostControlEnabled } field = "Output", boostControlPin, { isBoostControlEnabled } field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - + field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } + dialog = boostDialog, "", border panel = boost_left, West panel = boostTableTbl, Center @@ -2898,20 +2902,20 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" ;Boost Closed Loop dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } + field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } + field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } + field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } + field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } + field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } + field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } dialog = boostTableDialog, "", card panel = boostTable2Tbl dialog = boostPidDialog, "", border panel = boostPidleft, West - panel = boostTableDialog, Center - + panel = boostTableDialog, Center + help = veTableDialogHelp, "Volumetric Efficiency" text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" webHelp = "https://rusefi.com/s/fuel" @@ -3096,7 +3100,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - + diff --git a/firmware/util/containers/cyclic_buffer.h b/firmware/util/containers/cyclic_buffer.h index 5c76adb9ed..399783e0a0 100644 --- a/firmware/util/containers/cyclic_buffer.h +++ b/firmware/util/containers/cyclic_buffer.h @@ -41,7 +41,7 @@ class cyclic_buffer volatile T elements[maxSize]; volatile int currentIndex; - private: + protected: void baseC(int size); /** * number of elements added into this buffer, would be eventually bigger then size diff --git a/firmware/util/containers/fifo_buffer.h b/firmware/util/containers/fifo_buffer.h new file mode 100644 index 0000000000..b51ac7ed77 --- /dev/null +++ b/firmware/util/containers/fifo_buffer.h @@ -0,0 +1,75 @@ +/** + * @file fifo_buffer.h + * @brief A FIFO buffer (base on cyclic_buffer) + * + * https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics) + * + * @date Aug 6, 2020 + * @author andreika + * @author Andrey Belomutskiy + * +*/ + +#ifndef FIFO_BUFFER_H +#define FIFO_BUFFER_H + +#include "cyclic_buffer.h" + +// todo: this is not a thread-safe version! +template +class fifo_buffer : public cyclic_buffer { +public: + fifo_buffer() : currentIndexRead(0) { + } + + void put(T item); + T get(); + void clear() /*override*/; + + void put(const T *items, int numItems); + + bool isEmpty() const { + return getCount() == 0; + } + + bool isFull() const { + return getCount() >= getSize(); + } + +public: + volatile int currentIndexRead; // FIFO "tail" +}; + +template +void fifo_buffer::put(T item) { + // check if full + if (!isFull()) { + cyclic_buffer::add(item); + } +} + +template +void fifo_buffer::put(const T *items, int numItems) { + for (int i = 0; i < numItems; i++) { + put(items[i]); + } +} + +template +T fifo_buffer::get() { + auto ret = elements[currentIndexRead]; + if (!isEmpty()) { + currentIndexRead = (currentIndexRead + 1) % size; + count--; + } + return ret; +} + +template +void fifo_buffer::clear() { + cyclic_buffer::clear(); + currentIndexRead = 0; +} + + +#endif /* FIFO_BUFFER_H */ \ No newline at end of file