* calculateInjector1Timeout proxies calculateInjectorNTimeout
Unit test still pass.
* Remove calculateInjector1Timeout,
Replace with call to calculateInjectorTimeout
All unit tests still pass.
* Remove unecassary unit test
* calculateIgnition1Timeout proxies calculateIgnitionNTimeout
Unit test all pass
* Remove calculateIgnition1Timeout,
Replace with call to calculateIgnitionTimeout
All unit tests still pass.
* Remove unecassary unit test
* calculateIgnitionAngle\d proxies
calculateIgnitionAngle
Unit tests all pass
* Remove calculateIgnitionAngle\d
Just call calculateIgnitionAngle() directly
* Route rotary ignition angle calcs
through generic calculateIgnitionTrailingRotary
function.
* Remove calculateIgnitionAngle\d
Just call calculateIgnitionTrailingRotary() directly
* calculateInjectorStartAngle: inject all parameters
Do not rely on global state
Easier unit testing.
* calculateIgnitionAngle: inject all parameters
Do not rely on global state
Easier unit testing.
* Pull all ignition global vars into schedule_calcs
* Conditional compile for schedule calc vars
Saves memory
* Optimize: break out angleToTimeIntervalRev
from angleToTime. The new function will
always be inlined.
* Optimize - simpler code path
when no channel offset (zero)
Some optimization of arithmetic operations.
* Fix unit tests
* Fix bug on injector angle calculations
Need while loops to correctly bring intermediate
values into range
---------
Co-authored-by: Josh Stewart <josh@noisymime.org>
* Added a 1000Hz call for MAP reading on ARM cores
* Use 1kHz section for map reads on all MCUs
---------
Co-authored-by: Josh Stewart <josh@noisymime.org>
* adding VVT logging and trigger edge editing
fix missing define (temp fix?)
Revert "fix missing define (temp fix?)"
This reverts commit c6280f38ff69cc41278148a79c888736a71754b1.
fixes
* Create an additional logger screen in tunerstudio
Changes to create a third high speed logger window in tuner studio.
* Change variable name
Discord discussion requested compositeLogEnabled didn't do a test for false as the type is now a byte. Variable renamed to be compositeTriggerUsed and false replaced with 0. Variable name and values used should now make more logical sense.
* added more logging
Log the primary, secondary and third inputs as well as engine cycle on all composite logs. Still have 3 different logs to allow you to visualise which is the best way to present the information.
* Read analog values via CAN BUS
Allows reading of 16 analog signals via CAN-BUS. with selection of Edianness.
* Moved function
Function moved to improve data readability.
---------
Co-authored-by: Josh Stewart <josh@noisymime.org>
* Refactor: separate out schedule calcs from speeduino.ino
(so they can be unit tested)
* Add unit tests for compute_delay
* Use PROGMEM to store test input & output
* Add some 720 unit tests
* Rename unit test file
* Test ignition codepaths 2-8
* Test ign1 calcs
* Add first injector calc tests
* Add 720 deg tests
Simplify
* Simplify test_calc_inj1_timeout
* Claw back RAM
* Simplify test framework
Channel angle is part of the test data set.
* Move schedule calculation unit tests into their own harness
Competing for RAM with the rest of Speeduino
can cause them to fail,
* Performance: inline all schedule calcs.
* Unit test end angle
* Unit test calculateIgnitionAngle1
* Test start angles also
And test end angles for channel 1
* Unit test calculateIgnitionAngle3
* Unit test calculateIgnitionAngle4
* Improve unit test output
* Add Nissan360 decoder unit tests.
* Add Ford ST170 decoder unit tests
* Add NGC decoder unit tests
* Remove serialCRC - only used within parseSerial()
Also hoist the CRC read into a function.
* Minimize global variable visibility
* Encapsulate write of multi-byte primitives
* Factor out sendBufferAndCrc()
* Push safety test into TS_CommandButtonsHandler()
* Extract writePage()
* Simpler parsing
* Remove some functions from public interface
* Store constant arrays in progmem
* Centralize high speed logger start/stop code
* Factor out loadO2Calibration()
* Factor out temperature calibration table update functions
* Remove dead code
* Fix sendToothLog()
* Fix sendCompositeLog()
* Replace tooth log send booleans with an enum
Saves a byte
* Remove sendBufferAndCrcProgMem()
Use serialPayload to send
* Whitespace clean up
* Optimize comms.cpp for size
* Replace global unsigned long with bool
Saves 2 bytes
* Replace 2 global bools with an enum
Saves a byte, reads better.
* Remove global FastCRC instance
* Make sendSerialReturnCode blocking.
It was using non-blocking functions but was never
re-entered.
Rename to make blocking & non-blocking calls
more obvious.
* Use one uint16_t to track RX/TX byte count
* Simplify new comms log tx API
* Extract loadPageToBuffer function
* All endianess changes use the same code
* Doxygen comments and code organization
* Remove serialWriteUpdateCrc() & updateTmpCalibration()
* Combine SerialStatus & logSendStatus enums.
Makes sense since we can only be doing one thing at a time.
* Remove global inProgressCompositeTime
Only used when sending composite log
* Replace 3 global bools with expanded SerialStatus enum
* Remove unused global tsCanId
* Limit scope of some comms globals.
* Remove isMap global - replace witth function
* Reduce the serial API to only 2 calls
transmit & receive
* Tidy up #define visibility
* Fix Black* build errors
* Workaround Teensy code race condition
availableForWrite() is not reliable.
* Prevent race condition
Was pematurely setting the serialStatusFlag to
SERIAL_INACTIVE before final CRC ws read from
serial.
* Use post write buffer availability checks
Remove buffer size check prior to writing.
* Write multi-byte values as single bytes.
(attempt to fix Teensy 3.5 issue)
* Only use Serial.available() as a boolean test
(Teensy fix)
* writeNonBlocking checks Serial.write() return value
* Non-blocking CRC write
In sendBufferAndCrcNonBlocking().
* Fix compile warning
* Set serial status flag prior to transmitting!
* Reliable blocking byte writes.
* Fix timeout code: not firing under some conditions
* MISRA fixes
* Add decel enleanment feature
* Fix tps and map DOT scaling in TS.
* updates.ino
* Small bug fix.
* One more small bug fix.
* Update cancomms.ino
Cast tps/mapDOT as uint8 to cancomms to retain backwards compatibility
* Fix programmable outputs list.
* Fix programmable outputs in updates.ino
* Add abs around currentStatus.mapDOT
* 19.09.2021
* Final testing of AC Control, some idle features fixed
AC control feature added, better than the existing idle-up feature (which can still be used for other things, e.g. electrical load detection). Air conditioning is locked out with coolant temp, RPM high/low, and high TPS. So the A/C automatically cuts out when driving hard.
Idle step now works correctly with closed loop PWM, open loop PWM, and closed+open loop PWM. Untested with stepper motor, but no reason it shouldn't work.
* Fixed mistakenly incremented page sizes
* Initial changes as per HWright9
-Renamed engineRunSeconds to acAfterEngineStartDelay
-Formatted large if statements better
-Fixed acStartDelay overflow bug
-Improved readability of logic
* Final fixes as per HWright9's feedback
-Add high/low RPM lockout delay, similar to the high TPM lockout delay
-General tidy-up
* Added stand-alone fan, moved config data in EEPROM
-Added additional configurable stand-alone A/C fan output, for when there is dedicated cooling fan for the A/C compressor. This is independent of the engine cooling fan logic.
-Moved config storage in EEPROM to configPage9, as noisymime's SD card logging has used the (previously unused) bytes I had used in configPage13.
-Minor bug fix - rename Aux in 1-16 to Aux in 0-15
* Revert to current master branch - as of master commit 97f8ef795a
* A/C Control Re-Integrated from AC-Control-Clean-3 (@Corey-Harding). Tested & ready to merge.
Additionally, added @HazuTo25's lines into the update() routine to configure default A/C settings.
* Changed updates.ino to just set A/C to disabled
* Fix change reverted by mistake - master merge commit 73badbce8c
* Fix remaining mistakes from previous master merge
* Remove test statements left in by mistake
* define unusedBits
* Remove test statements left in by mistake
* Increase timing granularity to 0.1s
* idleUpRPMAdder
* Remove another line put in by mistake by auto merge
* idleUpRPMFixes
* Update speeduino.ino
* Tweak A/C idle up descriptions
* Tweak A/C TS descriptors again
* Fixed alignment bug that turned page 15 config values into gobbledegook.
This had the symptom of the A/C request never triggering, because when a pin was assigned in TS (e.g. I did 27), a completely different pin would be read from config15 (in my case 22 - connecting the button to pin 22 would work in this case, even though TS was set to 27).
* Fix bit count - should be 6 to match ini file
* Increase minimum RPM lockout granularity
* Change granularity of A/C minimum RPM lockout to 10 RPM; Inline some functions for readability
* Add static inline function prototypes to auxiliaries.h as per the style guide.
* Fixed page 15 merge errors
* Style changes to suit new pinIsUsed() checks in setPinMappings()
* Add PWM Fan Control Minimum Clamp Value when A/C Compressor Engaged
* Fix comment
* Fix bug with stand-alone fan initialisation
Pin was unable to be used in prog. I/O even if fan was disabled, because it was always initialised as an output even if it was disabled. Fixed in this commit.
* Correction to Fahrenheit temperature scaling
* Move A/C updates to correct next release
Co-authored-by: shiznit304 <62686180+shiznit304@users.noreply.github.com>
Co-authored-by: Josh Stewart <josh@noisymime.org>
* Implementing AFR protection
* Update globals.h
* Bug fixes and code refactoring
* Moved variables to prevent ODR
* Dialog for AFR protection
* Data size and math corrections
* Possibility to use either AFR or lambda
* Updated default AFR protection values
* No need to do multiplications due to existing RPMdiv100 variable
* The X100 multiplier was wrongfully removed
* Add defaults in updates.ino, minor formatting cleanups
Co-authored-by: Josh Stewart <josh@noisymime.org>
* Semi/Full sequential mode
Semi sequential in case of absent phase input at crank, engine will almost aways start in semi sequential mode
Minimal code change at speeduino.ino
Fix RPM reading when in half sync
* Update with latest changes in master
* Less calls to change functions
See #478 chat history for details
* Semi/Full sequential mode
Semi sequential in case of absent phase input at crank, engine will almost aways start in semi sequential mode
Minimal code change at speeduino.ino
Fix RPM reading when in half sync
* Update with latest changes in master
* Less calls to change functions
See #478 chat history for details
* Add sync status to log
* Updates
Updated speeduino.ini
Updated updates.ino
* Fix error in half to full sync function
Co-authored-by: Josh Stewart <josh@noisymime.org>