rather than try to integrate error over time, simply fault if there's been too much error for too long. Up to +-X error is allowed for any period of time, more is allowed for Y seconds.
* compiles but untested
* hide TS setting if clutchUpPin is not configured
* unit test passes
* disable feature if io not configured, fix unit test commit
* de morgans to align with other gating conditions - no functional change
* it compiles
* added description to the graph panel
* fixed typo and improved description
* dfco fuel cut map unit test added and passes
* added default settings
* allow wasted spark spin-up
* allow firing without phase sync on odd cyl engines
* support odd cyl wasted spark
* changelog
* unit test it
* wow, it's easy to support odd-fire too
* use engine module callbacks
* happy tests
* happy small-can-board
* interact with map avg via module
* simplify map avg init
* tweaks
* omit module to disable it instead!
* unnecessary guard
* minor cleanups
* unnecessary branch - lookups for these tables are fine at 0 rpm
* oop
* infrastructure for engine modules in the build
* fully move fuel pump
* fan
* gear detector
* gear detect
* fan control cleanup
* trip odometer
* shuffle makefiles around a little
* minor format
* replace large buffer instances
* handlePageReadCommand uses locked
* cleanup
* explicitly call big vs. small packet implementation
* correctness
* unused UNUSED
* cleaner TS logging & cleanup
* about time we bumped this
* remove redundant_ford_tps
* meld redundant_ford_tps logic into RedundantSensor
* default tps/ppsSecondaryMaximum is 100
* initTps uses melded RedundantSensor
* meld RedundantSensor unit tests
* RedundantSensor::showInfo prints redundancy status
* RedundantSensor::showInfo prints partial redundancy status
* assert SensorResult code in RedundantSensor tests
* RedundantSensor doesn't hide primary sensor result code
in the case of a single sensor only, don't hide the UnexpectedCode value