2015-08-18 12:03:44 -07:00
|
|
|
/*
|
|
|
|
* @file tachometer.cpp
|
2015-08-18 14:01:49 -07:00
|
|
|
* @brief This is about driving external analog tachometers
|
2015-08-18 12:03:44 -07:00
|
|
|
*
|
2016-08-16 19:05:36 -07:00
|
|
|
* This implementation produces one pulse per engine cycle
|
|
|
|
*
|
2016-05-24 19:02:13 -07:00
|
|
|
* todo: these is a bit of duplication with dizzySparkOutputPin
|
|
|
|
*
|
2015-08-18 12:03:44 -07:00
|
|
|
* @date Aug 18, 2015
|
2018-01-20 17:55:31 -08:00
|
|
|
* @author Andrey Belomutskiy, (c) 2012-2018
|
2015-08-18 12:03:44 -07:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include "tachometer.h"
|
2015-08-18 14:01:49 -07:00
|
|
|
#include "trigger_central.h"
|
2015-08-18 12:03:44 -07:00
|
|
|
|
2019-04-09 19:52:03 -07:00
|
|
|
#if !EFI_UNIT_TEST
|
|
|
|
|
2015-08-18 12:03:44 -07:00
|
|
|
EXTERN_ENGINE;
|
|
|
|
|
2015-08-19 13:01:36 -07:00
|
|
|
static scheduling_s tachTurnSignalOff;
|
|
|
|
|
|
|
|
static void turnTachPinLow(void) {
|
2017-04-21 16:23:20 -07:00
|
|
|
enginePins.tachOut.setLow();
|
2015-08-19 13:01:36 -07:00
|
|
|
}
|
2015-08-18 14:01:49 -07:00
|
|
|
|
|
|
|
static void tachSignalCallback(trigger_event_e ckpSignalType,
|
2017-05-15 20:33:22 -07:00
|
|
|
uint32_t index DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
2015-08-18 21:03:11 -07:00
|
|
|
if (index != engineConfiguration->tachPulseTriggerIndex) {
|
|
|
|
return;
|
|
|
|
}
|
2017-04-21 16:23:20 -07:00
|
|
|
enginePins.tachOut.setHigh();
|
2017-08-28 18:00:36 -07:00
|
|
|
float durationMs;
|
|
|
|
if (engineConfiguration->tachPulseDurationAsDutyCycle) {
|
|
|
|
// todo: implement tachPulseDurationAsDutyCycle
|
|
|
|
durationMs = engineConfiguration->tachPulseDuractionMs;
|
|
|
|
} else {
|
|
|
|
durationMs = engineConfiguration->tachPulseDuractionMs;
|
|
|
|
}
|
2019-01-09 04:57:43 -08:00
|
|
|
engine->executor.scheduleForLater(&tachTurnSignalOff, (int)MS2US(durationMs), (schfunc_t) &turnTachPinLow, NULL);
|
2015-08-18 14:01:49 -07:00
|
|
|
}
|
|
|
|
|
2015-08-18 12:03:44 -07:00
|
|
|
void initTachometer(void) {
|
2019-01-09 19:57:33 -08:00
|
|
|
if (CONFIGB(tachOutputPin) == GPIO_UNASSIGNED) {
|
2015-08-18 12:03:44 -07:00
|
|
|
return;
|
2015-08-18 21:03:11 -07:00
|
|
|
}
|
2015-08-18 12:03:44 -07:00
|
|
|
|
2019-01-09 19:57:33 -08:00
|
|
|
enginePins.tachOut.initPin("analog tach output", CONFIGB(tachOutputPin), &CONFIGB(tachOutputPinMode));
|
2015-08-18 14:01:49 -07:00
|
|
|
|
2019-04-12 19:07:03 -07:00
|
|
|
#if EFI_SHAFT_POSITION_INPUT
|
2015-08-18 14:01:49 -07:00
|
|
|
addTriggerEventListener(tachSignalCallback, "tach", engine);
|
2019-01-31 08:57:15 -08:00
|
|
|
#endif /* EFI_SHAFT_POSITION_INPUT */
|
2015-08-18 12:03:44 -07:00
|
|
|
}
|
2019-04-09 19:52:03 -07:00
|
|
|
|
|
|
|
#endif /* EFI_UNIT_TEST */
|