mirror of https://github.com/FOME-Tech/fome-fw.git
auto-sync
This commit is contained in:
parent
c648dd05c7
commit
b74dd359f9
|
@ -66,7 +66,6 @@
|
|||
#endif
|
||||
|
||||
extern engine_pins_s enginePins;
|
||||
extern NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
|
||||
// this 'true' value is needed for simulator
|
||||
static volatile bool fullLog = true;
|
||||
|
@ -274,13 +273,9 @@ static void printInfo(Engine *engine, systime_t nowSeconds) {
|
|||
#endif
|
||||
|
||||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||
// todo: extract method?
|
||||
io_pin_e pin = (io_pin_e) ((int) SPARKOUT_1_OUTPUT + i);
|
||||
printOutPin(enginePins.coils[i].name, boardConfiguration->ignitionPins[i]);
|
||||
|
||||
printOutPin(outputs[(int)pin].name, boardConfiguration->ignitionPins[i]);
|
||||
|
||||
pin = (io_pin_e) ((int) INJECTOR_1_OUTPUT + i);
|
||||
printOutPin(outputs[(int)pin].name, boardConfiguration->injectionPins[i]);
|
||||
printOutPin(enginePins.injectors[i].name, boardConfiguration->injectionPins[i]);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
static Logging logger;
|
||||
|
||||
extern NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
extern engine_pins_s enginePins;
|
||||
|
||||
EXTERN_ENGINE
|
||||
;
|
||||
|
@ -69,10 +69,8 @@ static bool stopPin(NamedOutputPin *output) {
|
|||
bool Engine::stopPins() {
|
||||
bool result = false;
|
||||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||
io_pin_e pin = (io_pin_e) ((int) INJECTOR_1_OUTPUT + i);
|
||||
result |= stopPin(&outputs[(int)pin]);
|
||||
pin = (io_pin_e) ((int) SPARKOUT_1_OUTPUT + i);
|
||||
result |= stopPin(&outputs[(int)pin]);
|
||||
result |= stopPin(&enginePins.coils[i]);
|
||||
result |= stopPin(&enginePins.injectors[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#define GPIO_NULL NULL
|
||||
|
||||
#define NAMED_PIN_COUNT 24
|
||||
#define ENGINE_CHANNEL_COUNT 12
|
||||
|
||||
typedef enum {
|
||||
INJECTOR_1,
|
||||
|
@ -96,8 +96,6 @@ typedef enum {
|
|||
|
||||
} io_pin_e;
|
||||
|
||||
#define IO_PIN_COUNT 24
|
||||
|
||||
void initPrimaryPins(void);
|
||||
void initOutputPins(void);
|
||||
|
||||
|
|
|
@ -39,54 +39,26 @@ EXTERN_ENGINE;
|
|||
extern WaveChart waveChart;
|
||||
#endif
|
||||
|
||||
#include "efiGpio.h"
|
||||
|
||||
static Logging logger;
|
||||
|
||||
extern NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
extern engine_pins_s enginePins;
|
||||
|
||||
static const char *namedPinsArray[NAMED_PIN_COUNT] = { "spa1", "spa2", "spa3", "spa4", "spa5", "spa6", "spa7", "spa8",
|
||||
"spa9", "spa10", "spa11", "spa12", "inj1", "inj2", "inj3", "inj4", "inj5", "inj6", "inj7", "inj8", "inj9",
|
||||
"inj10", "inj11", "inj12", };
|
||||
static const char *sparkNames[ENGINE_CHANNEL_COUNT] = { "spa1", "spa2", "spa3", "spa4", "spa5", "spa6", "spa7", "spa8",
|
||||
"spa9", "spa10", "spa11", "spa12"};
|
||||
|
||||
static const char *getPinName(io_pin_e io_pin) {
|
||||
switch (io_pin) {
|
||||
// todo: refactor this hell - introduce arrays & checks?
|
||||
case SPARKOUT_1_OUTPUT:
|
||||
case SPARKOUT_2_OUTPUT:
|
||||
case SPARKOUT_3_OUTPUT:
|
||||
case SPARKOUT_4_OUTPUT:
|
||||
case SPARKOUT_5_OUTPUT:
|
||||
case SPARKOUT_6_OUTPUT:
|
||||
case SPARKOUT_7_OUTPUT:
|
||||
case SPARKOUT_8_OUTPUT:
|
||||
case SPARKOUT_9_OUTPUT:
|
||||
case SPARKOUT_10_OUTPUT:
|
||||
case SPARKOUT_11_OUTPUT:
|
||||
case SPARKOUT_12_OUTPUT:
|
||||
case INJECTOR_1_OUTPUT:
|
||||
case INJECTOR_2_OUTPUT:
|
||||
case INJECTOR_3_OUTPUT:
|
||||
case INJECTOR_4_OUTPUT:
|
||||
case INJECTOR_5_OUTPUT:
|
||||
case INJECTOR_6_OUTPUT:
|
||||
case INJECTOR_7_OUTPUT:
|
||||
case INJECTOR_8_OUTPUT:
|
||||
case INJECTOR_9_OUTPUT:
|
||||
case INJECTOR_10_OUTPUT:
|
||||
case INJECTOR_11_OUTPUT:
|
||||
case INJECTOR_12_OUTPUT:
|
||||
return namedPinsArray[io_pin];
|
||||
default:
|
||||
return "Pin needs name";
|
||||
}
|
||||
}
|
||||
static const char *injectorNames[ENGINE_CHANNEL_COUNT] = { "inj1", "inj2", "inj3", "inj4", "inj5", "inj6", "inj7", "inj8", "inj9",
|
||||
"inj10", "inj11", "inj12"};
|
||||
|
||||
void initSignalExecutor(void) {
|
||||
initLogging(&logger, "s exec");
|
||||
initSignalExecutorImpl();
|
||||
|
||||
for (int i = 0; i < IO_PIN_COUNT;i++)
|
||||
outputs[i].name = getPinName((io_pin_e)i);
|
||||
|
||||
for (int i = 0; i < ENGINE_CHANNEL_COUNT;i++) {
|
||||
enginePins.coils[i].name = sparkNames[i];
|
||||
enginePins.injectors[i].name = injectorNames[i];
|
||||
}
|
||||
}
|
||||
|
||||
//uint32_t dbgStart;
|
||||
|
|
|
@ -42,13 +42,11 @@ static bool_t isRunningBench = false;
|
|||
|
||||
static int is_injector_enabled[MAX_INJECTOR_COUNT];
|
||||
|
||||
extern NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
extern engine_pins_s enginePins;
|
||||
|
||||
void initIgnitionCentral(void) {
|
||||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||
io_pin_e pin = (io_pin_e)((int)SPARKOUT_1_OUTPUT + i);
|
||||
NamedOutputPin *output = &outputs[(int)pin];
|
||||
NamedOutputPin *output = &enginePins.coils[i];
|
||||
outputPinRegisterExt2(output->name, output, boardConfiguration->ignitionPins[i], &boardConfiguration->ignitionPinMode);
|
||||
}
|
||||
}
|
||||
|
@ -147,8 +145,7 @@ static void fuelbench2(const char *delayStr, const char *indexStr, const char *
|
|||
return;
|
||||
}
|
||||
brain_pin_e b = boardConfiguration->injectionPins[index - 1];
|
||||
io_pin_e p = (io_pin_e) ((int) INJECTOR_1_OUTPUT - 1 + index);
|
||||
pinbench(delayStr, onTimeStr, offTimeStr, countStr, &outputs[(int)p], b);
|
||||
pinbench(delayStr, onTimeStr, offTimeStr, countStr, &enginePins.injectors[index - 1], b);
|
||||
}
|
||||
|
||||
void fanBench(void) {
|
||||
|
@ -203,8 +200,7 @@ static void sparkbench2(const char *delayStr, const char *indexStr, const char *
|
|||
return;
|
||||
}
|
||||
brain_pin_e b = boardConfiguration->ignitionPins[index - 1];
|
||||
io_pin_e p = (io_pin_e) ((int) SPARKOUT_1_OUTPUT - 1 + index);
|
||||
pinbench(delayStr, onTimeStr, offTimeStr, countStr, &outputs[(int)p], b);
|
||||
pinbench(delayStr, onTimeStr, offTimeStr, countStr, &enginePins.coils[index - 1], b);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -245,7 +241,7 @@ void initInjectorCentral(Engine *engine) {
|
|||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||
io_pin_e pin = (io_pin_e) ((int) INJECTOR_1_OUTPUT + i);
|
||||
|
||||
NamedOutputPin *output = &outputs[(int)pin];
|
||||
NamedOutputPin *output = &enginePins.coils[i];
|
||||
|
||||
outputPinRegisterExt2(output->name, output, boardConfiguration->injectionPins[i],
|
||||
&boardConfiguration->injectionPinMode);
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
EXTERN_ENGINE
|
||||
;
|
||||
|
||||
extern NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
extern engine_pins_s enginePins;
|
||||
|
||||
/**
|
||||
* this cache allows us to find a close-enough (with one degree precision) trigger wheel index by
|
||||
|
@ -161,10 +161,10 @@ void FuelSchedule::addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_
|
|||
switch (mode) {
|
||||
case IM_SEQUENTIAL:
|
||||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||
io_pin_e pin = INJECTOR_PIN_BY_INDEX(getCylinderId(engineConfiguration->firingOrder, i) - 1);
|
||||
int index = getCylinderId(engineConfiguration->firingOrder, i) - 1;
|
||||
float angle = baseAngle
|
||||
+ (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount;
|
||||
registerInjectionEvent(&outputs[(pin)], angle, false PASS_ENGINE_PARAMETER);
|
||||
registerInjectionEvent(&enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
||||
}
|
||||
break;
|
||||
case IM_SIMULTANEOUS:
|
||||
|
@ -182,16 +182,15 @@ void FuelSchedule::addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_
|
|||
case IM_BATCH:
|
||||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||
int index = i % (engineConfiguration->cylindersCount / 2);
|
||||
io_pin_e pin = INJECTOR_PIN_BY_INDEX(index);
|
||||
float angle = baseAngle
|
||||
+ i * (float) engineConfiguration->engineCycle / engineConfiguration->cylindersCount;
|
||||
registerInjectionEvent(&outputs[(pin)], angle, false PASS_ENGINE_PARAMETER);
|
||||
registerInjectionEvent(&enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
||||
|
||||
/**
|
||||
* also fire the 2nd half of the injectors so that we can implement a batch mode on individual wires
|
||||
*/
|
||||
pin = INJECTOR_PIN_BY_INDEX(index + (engineConfiguration->cylindersCount / 2));
|
||||
registerInjectionEvent(&outputs[(pin)], angle, false PASS_ENGINE_PARAMETER);
|
||||
index = index + (engineConfiguration->cylindersCount / 2);
|
||||
registerInjectionEvent(&enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -299,21 +298,21 @@ int getCylinderId(firing_order_e firingOrder, int index) {
|
|||
static NamedOutputPin * getIgnitionPinForIndex(int i DECLARE_ENGINE_PARAMETER_S) {
|
||||
switch (CONFIG(ignitionMode)) {
|
||||
case IM_ONE_COIL:
|
||||
return &outputs[(int)SPARKOUT_1_OUTPUT];
|
||||
return &enginePins.coils[0];
|
||||
break;
|
||||
case IM_WASTED_SPARK: {
|
||||
int wastedIndex = i % (CONFIG(cylindersCount) / 2);
|
||||
int id = getCylinderId(CONFIG(firingOrder), wastedIndex) - 1;
|
||||
return &outputs[(int)(SPARKOUT_1_OUTPUT + id)];
|
||||
int id = getCylinderId(CONFIG(firingOrder), wastedIndex);
|
||||
return &enginePins.coils[id];
|
||||
}
|
||||
break;
|
||||
case IM_INDIVIDUAL_COILS:
|
||||
return &outputs[ ((int) SPARKOUT_1_OUTPUT + getCylinderId(CONFIG(firingOrder), i) - 1)];
|
||||
return &enginePins.coils[getCylinderId(CONFIG(firingOrder), i)];
|
||||
break;
|
||||
|
||||
default:
|
||||
firmwareError("unsupported ignitionMode %d in initializeIgnitionActions()", engineConfiguration->ignitionMode);
|
||||
return &outputs[(int)SPARKOUT_1_OUTPUT];
|
||||
return &enginePins.coils[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
pin_output_mode_e OUTPUT_MODE_DEFAULT = OM_DEFAULT;
|
||||
|
||||
// todo: clean this mess, this should become 'static'/private
|
||||
NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
engine_pins_s enginePins;
|
||||
|
||||
NamedOutputPin::NamedOutputPin() : OutputPin() {
|
||||
|
|
|
@ -50,6 +50,9 @@ typedef struct {
|
|||
OutputPin o2heater;
|
||||
OutputPin alternatorField;
|
||||
OutputPin errorLedPin;
|
||||
|
||||
NamedOutputPin injectors[ENGINE_CHANNEL_COUNT];
|
||||
NamedOutputPin coils[ENGINE_CHANNEL_COUNT];
|
||||
} engine_pins_s;
|
||||
|
||||
/**
|
||||
|
|
|
@ -57,10 +57,10 @@
|
|||
EXTERN_ENGINE
|
||||
;
|
||||
extern bool hasFirmwareErrorFlag;
|
||||
extern NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
|
||||
static LocalVersionHolder localVersion;
|
||||
|
||||
extern engine_pins_s enginePins;
|
||||
static MainTriggerCallback mainTriggerCallbackInstance;
|
||||
|
||||
/**
|
||||
|
@ -89,13 +89,13 @@ static Logging logger;
|
|||
|
||||
static void startSimultaniousInjection(Engine *engine) {
|
||||
for (int i = 0; i < engine->engineConfiguration->cylindersCount; i++) {
|
||||
turnPinHigh(&outputs[(int)INJECTOR_PIN_BY_INDEX(i)]);
|
||||
turnPinHigh(&enginePins.injectors[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void endSimultaniousInjection(Engine *engine) {
|
||||
for (int i = 0; i < engine->engineConfiguration->cylindersCount; i++) {
|
||||
turnPinLow(&outputs[(int)INJECTOR_PIN_BY_INDEX(i)]);
|
||||
turnPinLow(&enginePins.injectors[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@ static Logging logger;
|
|||
|
||||
static OutputPin sdCsPin;
|
||||
|
||||
extern NamedOutputPin outputs[IO_PIN_COUNT];
|
||||
extern engine_pins_s enginePins;
|
||||
|
||||
#if defined(STM32F4XX)
|
||||
|
@ -162,24 +161,15 @@ void initOutputPins(void) {
|
|||
|
||||
#if EFI_GPIO
|
||||
|
||||
static io_pin_e TO_BE_TURNED_OFF_ON_ERROR[] = { SPARKOUT_1_OUTPUT, SPARKOUT_2_OUTPUT, SPARKOUT_3_OUTPUT,
|
||||
SPARKOUT_4_OUTPUT, SPARKOUT_5_OUTPUT, SPARKOUT_6_OUTPUT, SPARKOUT_7_OUTPUT, SPARKOUT_8_OUTPUT,
|
||||
SPARKOUT_9_OUTPUT, SPARKOUT_10_OUTPUT, SPARKOUT_11_OUTPUT, SPARKOUT_12_OUTPUT,
|
||||
|
||||
INJECTOR_1_OUTPUT, INJECTOR_2_OUTPUT, INJECTOR_3_OUTPUT, INJECTOR_4_OUTPUT, INJECTOR_5_OUTPUT,
|
||||
INJECTOR_6_OUTPUT, INJECTOR_7_OUTPUT, INJECTOR_8_OUTPUT, INJECTOR_9_OUTPUT, INJECTOR_10_OUTPUT,
|
||||
INJECTOR_11_OUTPUT, INJECTOR_12_OUTPUT };
|
||||
|
||||
/**
|
||||
* This method is part of fatal error handling.
|
||||
* Please note that worst case scenario the pins might get re-enabled by some other code :(
|
||||
* The whole method is pretty naive, but that's at least something.
|
||||
*/
|
||||
void turnAllPinsOff(void) {
|
||||
int l = sizeof(TO_BE_TURNED_OFF_ON_ERROR) / sizeof(io_pin_e);
|
||||
for (int i = 0; i < l; i++) {
|
||||
OutputPin *output = &outputs[TO_BE_TURNED_OFF_ON_ERROR[l]];
|
||||
output->setValue(false);
|
||||
for (int i = 0; i < ENGINE_CHANNEL_COUNT; i++) {
|
||||
enginePins.coils[i].setValue(false);
|
||||
enginePins.injectors[i].setValue(false);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue