mirror of https://github.com/FOME-Tech/fome-fw.git
Output pin init/deinit needs a linked list #1803
This commit is contained in:
parent
310998d0ae
commit
e7b1b80ce9
|
@ -62,15 +62,34 @@ RegisteredOutputPin::RegisteredOutputPin(const char *name, short pinOffset,
|
||||||
registeredOutputHead = this;
|
registeredOutputHead = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RegisteredOutputPin::unregister() {
|
bool RegisteredOutputPin::isPinConfigurationChanged() {
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
brain_pin_e curPin = *(brain_pin_e *) ((void *) (&((char*)&activeConfiguration)[pinOffset]));
|
brain_pin_e curPin = *(brain_pin_e *) ((void *) (&((char*)&activeConfiguration)[pinOffset]));
|
||||||
brain_pin_e newPin = *(brain_pin_e *) ((void *) (&((char*) engineConfiguration)[pinOffset]));
|
brain_pin_e newPin = *(brain_pin_e *) ((void *) (&((char*) engineConfiguration)[pinOffset]));
|
||||||
|
|
||||||
pin_output_mode_e curMode = *(pin_output_mode_e *) ((void *) (&((char*)&activeConfiguration)[pinModeOffset]));
|
pin_output_mode_e curMode = *(pin_output_mode_e *) ((void *) (&((char*)&activeConfiguration)[pinModeOffset]));
|
||||||
pin_output_mode_e newMode = *(pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset]));
|
pin_output_mode_e newMode = *(pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset]));
|
||||||
|
return curPin != newPin || curMode != newMode;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif // EFI_PROD_CODE
|
||||||
|
}
|
||||||
|
|
||||||
if (curPin != newPin || curMode != newMode) {
|
void RegisteredOutputPin::init() {
|
||||||
|
#if EFI_PROD_CODE
|
||||||
|
brain_pin_e newPin = *(brain_pin_e *) ((void *) (&((char*) engineConfiguration)[pinOffset]));
|
||||||
|
pin_output_mode_e newMode = *(pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset]));
|
||||||
|
|
||||||
|
if (isPinConfigurationChanged()) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif // EFI_PROD_CODE
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisteredOutputPin::unregister() {
|
||||||
|
#if EFI_PROD_CODE
|
||||||
|
brain_pin_e curPin = *(brain_pin_e *) ((void *) (&((char*)&activeConfiguration)[pinOffset]));
|
||||||
|
if (isPinConfigurationChanged()) {
|
||||||
unregisterOutput(curPin);
|
unregisterOutput(curPin);
|
||||||
}
|
}
|
||||||
#endif // EFI_PROD_CODE
|
#endif // EFI_PROD_CODE
|
||||||
|
@ -83,21 +102,21 @@ void RegisteredOutputPin::unregister() {
|
||||||
|
|
||||||
|
|
||||||
EnginePins::EnginePins() :
|
EnginePins::EnginePins() :
|
||||||
mainRelay("mainRelay", CONFIG_PIN_OFFSETS(mainRelay)),
|
mainRelay("Main relay", CONFIG_PIN_OFFSETS(mainRelay)),
|
||||||
hpfpValve("hpfpValve", CONFIG_PIN_OFFSETS(hpfpValve)),
|
hpfpValve("hpfpValve", CONFIG_PIN_OFFSETS(hpfpValve)),
|
||||||
starterControl("starterControl", CONFIG_PIN_OFFSETS(starterControl)),
|
starterControl("starterControl", CONFIG_PIN_OFFSETS(starterControl)),
|
||||||
starterRelayDisable("starterRelayDisable", CONFIG_PIN_OFFSETS(starterRelayDisable)),
|
starterRelayDisable("starterRelayDisable", CONFIG_PIN_OFFSETS(starterRelayDisable)),
|
||||||
fanRelay("fanRelay", CONFIG_PIN_OFFSETS(fan)),
|
fanRelay("Fan", CONFIG_PIN_OFFSETS(fan)),
|
||||||
acRelay("acRelay", CONFIG_PIN_OFFSETS(acRelay)),
|
acRelay("A/C relay", CONFIG_PIN_OFFSETS(acRelay)),
|
||||||
fuelPumpRelay("fuelPump", CONFIG_PIN_OFFSETS(fuelPump)),
|
fuelPumpRelay("Fuel pump", CONFIG_PIN_OFFSETS(fuelPump)),
|
||||||
boostPin("boostPin", CONFIG_PIN_OFFSETS(boostControl)),
|
boostPin("Boost", CONFIG_PIN_OFFSETS(boostControl)),
|
||||||
idleSolenoidPin("idleSolenoid", idle_solenoidPin_offset, idle_solenoidPinMode_offset),
|
idleSolenoidPin("Idle Valve", idle_solenoidPin_offset, idle_solenoidPinMode_offset),
|
||||||
secondIdleSolenoidPin("secondIdleSolenoid", CONFIG_OFFSET(secondSolenoidPin), idle_solenoidPinMode_offset),
|
secondIdleSolenoidPin("Idle Valve#2", CONFIG_OFFSET(secondSolenoidPin), idle_solenoidPinMode_offset),
|
||||||
alternatorPin("alternatorPin", CONFIG_PIN_OFFSETS(alternatorControl)),
|
alternatorPin("Alternator control", CONFIG_PIN_OFFSETS(alternatorControl)),
|
||||||
checkEnginePin("checkEnginePin", CONFIG_PIN_OFFSETS(malfunctionIndicator)),
|
checkEnginePin("checkEnginePin", CONFIG_PIN_OFFSETS(malfunctionIndicator)),
|
||||||
// todo: NamedOutputPin vs RegisteredOutputPin
|
// todo: NamedOutputPin vs RegisteredOutputPin
|
||||||
// tachOut("tachOut", CONFIG_PIN_OFFSETS(tachOutput)),
|
// tachOut("tachOut", CONFIG_PIN_OFFSETS(tachOutput)),
|
||||||
triggerDecoderErrorPin("triggerDecoderErrorPin", CONFIG_PIN_OFFSETS(triggerError)),
|
triggerDecoderErrorPin("led: trigger debug", CONFIG_PIN_OFFSETS(triggerError)),
|
||||||
hipCs("hipCs", CONFIG_PIN_OFFSETS(hip9011Cs))
|
hipCs("hipCs", CONFIG_PIN_OFFSETS(hip9011Cs))
|
||||||
{
|
{
|
||||||
tachOut.name = PROTOCOL_TACH_NAME;
|
tachOut.name = PROTOCOL_TACH_NAME;
|
||||||
|
@ -212,6 +231,13 @@ void EnginePins::startPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
starterControl.initPin("Starter control", CONFIG(starterControlPin));
|
starterControl.initPin("Starter control", CONFIG(starterControlPin));
|
||||||
#endif /* EFI_ENGINE_CONTROL */
|
#endif /* EFI_ENGINE_CONTROL */
|
||||||
|
|
||||||
|
RegisteredOutputPin * pin = registeredOutputHead;
|
||||||
|
while (pin != nullptr) {
|
||||||
|
pin->init();
|
||||||
|
pin = pin->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
initIfPinOrModeChanged(mainRelay, "Main relay", mainRelayPin, mainRelayPinMode);
|
initIfPinOrModeChanged(mainRelay, "Main relay", mainRelayPin, mainRelayPinMode);
|
||||||
|
|
||||||
initIfPinOrModeChanged(fanRelay, "Fan", fanPin, fanPinMode);
|
initIfPinOrModeChanged(fanRelay, "Fan", fanPin, fanPinMode);
|
||||||
|
|
|
@ -132,12 +132,14 @@ public:
|
||||||
class RegisteredOutputPin : public OutputPin {
|
class RegisteredOutputPin : public OutputPin {
|
||||||
public:
|
public:
|
||||||
RegisteredOutputPin(const char *name, short pinOffset, short pinModeOffset);
|
RegisteredOutputPin(const char *name, short pinOffset, short pinModeOffset);
|
||||||
|
void init();
|
||||||
void unregister();
|
void unregister();
|
||||||
RegisteredOutputPin *next;
|
RegisteredOutputPin *next;
|
||||||
private:
|
private:
|
||||||
const char *name;
|
const char *name;
|
||||||
short pinOffset;
|
short pinOffset;
|
||||||
short pinModeOffset;
|
short pinModeOffset;
|
||||||
|
bool isPinConfigurationChanged();
|
||||||
};
|
};
|
||||||
|
|
||||||
class EnginePins {
|
class EnginePins {
|
||||||
|
|
Loading…
Reference in New Issue