mirror of https://github.com/rusefi/rusefi-1.git
auto-sync
This commit is contained in:
parent
2de4b7e839
commit
6d7b802996
|
@ -352,16 +352,28 @@ static THD_WORKING_AREA(lcdThreadStack, UTILITY_THREAD_STACK_SIZE);
|
||||||
*/
|
*/
|
||||||
static THD_WORKING_AREA(comBlinkingStack, UTILITY_THREAD_STACK_SIZE);
|
static THD_WORKING_AREA(comBlinkingStack, UTILITY_THREAD_STACK_SIZE);
|
||||||
|
|
||||||
static OutputPin *leds[] = { &outputs[(int)LED_WARNING], &outputs[(int)LED_RUNNING],
|
extern OutputPin errorLedPin;
|
||||||
&outputs[(int)LED_ERROR],
|
static OutputPin communicationPin;
|
||||||
&outputs[(int)LED_COMMUNICATION_1],
|
OutputPin checkEnginePin;
|
||||||
&outputs[(int)LED_EXT_1],
|
OutputPin warningPin;
|
||||||
&outputs[(int)LED_CHECK_ENGINE] };
|
OutputPin runningPin;
|
||||||
|
|
||||||
|
static OutputPin *leds[] = { &warningPin, &runningPin,
|
||||||
|
&errorLedPin,
|
||||||
|
&communicationPin,
|
||||||
|
&checkEnginePin };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method would blink all the LEDs just to test them
|
* This method would blink all the LEDs just to test them
|
||||||
*/
|
*/
|
||||||
static void initialLedsBlink(void) {
|
static void initialLedsBlink(void) {
|
||||||
|
outputPinRegister("communication status 1", &communicationPin, LED_COMMUNICATION_PORT, LED_COMMUNICATION_PIN);
|
||||||
|
|
||||||
|
#if EFI_WARNING_LED
|
||||||
|
outputPinRegister("warning", &warningPin, LED_WARNING_PORT, LED_WARNING_PIN);
|
||||||
|
outputPinRegister("is running status", &runningPin, LED_RUNNING_STATUS_PORT, LED_RUNNING_STATUS_PIN);
|
||||||
|
#endif /* EFI_WARNING_LED */
|
||||||
|
|
||||||
int size = sizeof(leds) / sizeof(leds[0]);
|
int size = sizeof(leds) / sizeof(leds[0]);
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
leds[i]->setValue(1);
|
leds[i]->setValue(1);
|
||||||
|
@ -393,12 +405,10 @@ static void comBlinkingThread(void *arg) {
|
||||||
delay = isConsoleReady() ? 100 : 33;
|
delay = isConsoleReady() ? 100 : 33;
|
||||||
}
|
}
|
||||||
|
|
||||||
outputs[(int)LED_COMMUNICATION_1].setValue(0);
|
communicationPin.setValue(0);
|
||||||
outputs[(int)LED_EXT_1].setValue(1);
|
|
||||||
chThdSleepMilliseconds(delay);
|
chThdSleepMilliseconds(delay);
|
||||||
|
|
||||||
outputs[(int)LED_COMMUNICATION_1].setValue(1);
|
communicationPin.setValue(1);
|
||||||
outputs[(int)LED_EXT_1].setValue(0);
|
|
||||||
chThdSleepMilliseconds(delay);
|
chThdSleepMilliseconds(delay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -410,9 +420,9 @@ static void errBlinkingThread(void *arg) {
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
int delay = 33;
|
int delay = 33;
|
||||||
if (isTriggerDecoderError() || isIgnitionTimingError())
|
if (isTriggerDecoderError() || isIgnitionTimingError())
|
||||||
outputs[(int)LED_WARNING].setValue(1);
|
warningPin.setValue(1);
|
||||||
chThdSleepMilliseconds(delay);
|
chThdSleepMilliseconds(delay);
|
||||||
outputs[(int)LED_WARNING].setValue(0);
|
warningPin.setValue(0);
|
||||||
chThdSleepMilliseconds(delay);
|
chThdSleepMilliseconds(delay);
|
||||||
}
|
}
|
||||||
#endif /* EFI_ENGINE_CONTROL */
|
#endif /* EFI_ENGINE_CONTROL */
|
||||||
|
|
|
@ -81,22 +81,6 @@ case INJECTOR_9_OUTPUT:
|
||||||
return "INJECTOR_9_OUTPUT";
|
return "INJECTOR_9_OUTPUT";
|
||||||
case IO_INVALID:
|
case IO_INVALID:
|
||||||
return "IO_INVALID";
|
return "IO_INVALID";
|
||||||
case LED_CHECK_ENGINE:
|
|
||||||
return "LED_CHECK_ENGINE";
|
|
||||||
case LED_COMMUNICATION_1:
|
|
||||||
return "LED_COMMUNICATION_1";
|
|
||||||
case LED_DEBUG:
|
|
||||||
return "LED_DEBUG";
|
|
||||||
case LED_EMULATOR:
|
|
||||||
return "LED_EMULATOR";
|
|
||||||
case LED_ERROR:
|
|
||||||
return "LED_ERROR";
|
|
||||||
case LED_EXT_1:
|
|
||||||
return "LED_EXT_1";
|
|
||||||
case LED_EXT_2:
|
|
||||||
return "LED_EXT_2";
|
|
||||||
case LED_EXT_3:
|
|
||||||
return "LED_EXT_3";
|
|
||||||
case LED_HUGE_0:
|
case LED_HUGE_0:
|
||||||
return "LED_HUGE_0";
|
return "LED_HUGE_0";
|
||||||
case LED_HUGE_1:
|
case LED_HUGE_1:
|
||||||
|
@ -139,12 +123,8 @@ case LED_HUGE_8:
|
||||||
return "LED_HUGE_8";
|
return "LED_HUGE_8";
|
||||||
case LED_HUGE_9:
|
case LED_HUGE_9:
|
||||||
return "LED_HUGE_9";
|
return "LED_HUGE_9";
|
||||||
case LED_RUNNING:
|
|
||||||
return "LED_RUNNING";
|
|
||||||
case LED_TRIGGER_ERROR:
|
case LED_TRIGGER_ERROR:
|
||||||
return "LED_TRIGGER_ERROR";
|
return "LED_TRIGGER_ERROR";
|
||||||
case LED_WARNING:
|
|
||||||
return "LED_WARNING";
|
|
||||||
case MAIN_RELAY:
|
case MAIN_RELAY:
|
||||||
return "MAIN_RELAY";
|
return "MAIN_RELAY";
|
||||||
case O2_HEATER:
|
case O2_HEATER:
|
||||||
|
|
|
@ -62,15 +62,6 @@ typedef enum {
|
||||||
GPIO_15,
|
GPIO_15,
|
||||||
|
|
||||||
IO_INVALID,
|
IO_INVALID,
|
||||||
LED_WARNING, // Orange on-board LED
|
|
||||||
LED_RUNNING, // Green on-board LED
|
|
||||||
LED_ERROR, // Red on-board LED
|
|
||||||
LED_COMMUNICATION_1, // Blue on-board LED
|
|
||||||
LED_EXT_1, // external board LED
|
|
||||||
LED_EXT_2, // external board LED
|
|
||||||
LED_EXT_3, // external board LED
|
|
||||||
LED_DEBUG,
|
|
||||||
LED_EMULATOR,
|
|
||||||
|
|
||||||
LED_TRIGGER_ERROR,
|
LED_TRIGGER_ERROR,
|
||||||
|
|
||||||
|
@ -117,9 +108,6 @@ typedef enum {
|
||||||
LED_HUGE_19,
|
LED_HUGE_19,
|
||||||
LED_HUGE_20,
|
LED_HUGE_20,
|
||||||
|
|
||||||
// malfunction LED indicator - CheckEngine
|
|
||||||
LED_CHECK_ENGINE,
|
|
||||||
|
|
||||||
FUEL_PUMP_RELAY,
|
FUEL_PUMP_RELAY,
|
||||||
FAN_RELAY,
|
FAN_RELAY,
|
||||||
O2_HEATER,
|
O2_HEATER,
|
||||||
|
@ -159,7 +147,6 @@ void turnAllPinsOff(void);
|
||||||
#else
|
#else
|
||||||
#define turnAllPinsOff() {}
|
#define turnAllPinsOff() {}
|
||||||
#endif
|
#endif
|
||||||
void outputPinRegisterExt2(const char *msg, io_pin_e ioPin, brain_pin_e brainPin, pin_output_mode_e *outputMode);
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
|
@ -312,6 +312,8 @@ void runFsio(void) {
|
||||||
|
|
||||||
static pin_output_mode_e defa = OM_DEFAULT;
|
static pin_output_mode_e defa = OM_DEFAULT;
|
||||||
|
|
||||||
|
extern OutputPin outputs[IO_PIN_COUNT];
|
||||||
|
|
||||||
void initFsioImpl(Engine *engine) {
|
void initFsioImpl(Engine *engine) {
|
||||||
initLogging(&logger, "le");
|
initLogging(&logger, "le");
|
||||||
|
|
||||||
|
@ -335,7 +337,7 @@ void initFsioImpl(Engine *engine) {
|
||||||
|
|
||||||
int frequency = boardConfiguration->fsioFrequency[i];
|
int frequency = boardConfiguration->fsioFrequency[i];
|
||||||
if (frequency == 0) {
|
if (frequency == 0) {
|
||||||
outputPinRegisterExt2(getPinName(pin), pin, boardConfiguration->fsioPins[i], &defa);
|
outputPinRegisterExt2(getPinName(pin), &outputs[(int)pin], boardConfiguration->fsioPins[i], &defa);
|
||||||
} else {
|
} else {
|
||||||
startSimplePwmExt(&fsioPwm[i], "FSIO", brainPin, pin, frequency, 0.5f, applyPinState);
|
startSimplePwmExt(&fsioPwm[i], "FSIO", brainPin, pin, frequency, 0.5f, applyPinState);
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,6 +98,8 @@ Engine * engine = &_engine;
|
||||||
*/
|
*/
|
||||||
#define CLEANUP_MODE_TPS 95
|
#define CLEANUP_MODE_TPS 95
|
||||||
|
|
||||||
|
extern OutputPin runningPin;
|
||||||
|
|
||||||
static msg_t csThread(void) {
|
static msg_t csThread(void) {
|
||||||
chRegSetThreadName("status");
|
chRegSetThreadName("status");
|
||||||
#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
|
#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
|
||||||
|
@ -107,13 +109,13 @@ static msg_t csThread(void) {
|
||||||
int is_running = rpm > 0 && !is_cranking;
|
int is_running = rpm > 0 && !is_cranking;
|
||||||
if (is_running) {
|
if (is_running) {
|
||||||
// blinking while running
|
// blinking while running
|
||||||
outputs[(int)LED_RUNNING].setValue(0);
|
runningPin.setValue(0);
|
||||||
chThdSleepMilliseconds(50);
|
chThdSleepMilliseconds(50);
|
||||||
outputs[(int)LED_RUNNING].setValue(1);
|
runningPin.setValue(1);
|
||||||
chThdSleepMilliseconds(50);
|
chThdSleepMilliseconds(50);
|
||||||
} else {
|
} else {
|
||||||
// constant on while cranking and off if engine is stopped
|
// constant on while cranking and off if engine is stopped
|
||||||
outputs[(int)LED_RUNNING].setValue(is_cranking);
|
runningPin.setValue(is_cranking);
|
||||||
chThdSleepMilliseconds(100);
|
chThdSleepMilliseconds(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,10 +122,10 @@ static void setIdleRpmAction(int value) {
|
||||||
static void applyIdleSolenoidPinState(PwmConfig *state, int stateIndex) {
|
static void applyIdleSolenoidPinState(PwmConfig *state, int stateIndex) {
|
||||||
efiAssertVoid(stateIndex < PWM_PHASE_MAX_COUNT, "invalid stateIndex");
|
efiAssertVoid(stateIndex < PWM_PHASE_MAX_COUNT, "invalid stateIndex");
|
||||||
efiAssertVoid(state->multiWave.waveCount == 1, "invalid idle waveCount");
|
efiAssertVoid(state->multiWave.waveCount == 1, "invalid idle waveCount");
|
||||||
io_pin_e ioPin = state->outputPins[0];
|
OutputPin *output = state->outputPins[0];
|
||||||
int value = state->multiWave.waves[0].pinStates[stateIndex];
|
int value = state->multiWave.waves[0].pinStates[stateIndex];
|
||||||
if (!value || engine->rpmCalculator.rpmValue != 0)
|
if (!value || engine->rpmCalculator.rpmValue != 0)
|
||||||
setOutputPinValue(ioPin, value);
|
output->setValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void startIdleThread(Engine *engine) {
|
void startIdleThread(Engine *engine) {
|
||||||
|
|
|
@ -43,11 +43,13 @@ static bool_t isRunningBench = false;
|
||||||
|
|
||||||
static int is_injector_enabled[MAX_INJECTOR_COUNT];
|
static int is_injector_enabled[MAX_INJECTOR_COUNT];
|
||||||
|
|
||||||
|
extern OutputPin outputs[IO_PIN_COUNT];
|
||||||
|
|
||||||
void initIgnitionCentral(void) {
|
void initIgnitionCentral(void) {
|
||||||
|
|
||||||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||||
io_pin_e pin = (io_pin_e)((int)SPARKOUT_1_OUTPUT + i);
|
io_pin_e pin = (io_pin_e)((int)SPARKOUT_1_OUTPUT + i);
|
||||||
outputPinRegisterExt2(getPinName(pin), pin, boardConfiguration->ignitionPins[i], &boardConfiguration->ignitionPinMode);
|
outputPinRegisterExt2(getPinName(pin), &outputs[(int)pin], boardConfiguration->ignitionPins[i], &boardConfiguration->ignitionPinMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,7 +233,7 @@ void initInjectorCentral(Engine *engine) {
|
||||||
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
for (int i = 0; i < engineConfiguration->cylindersCount; i++) {
|
||||||
io_pin_e pin = (io_pin_e) ((int) INJECTOR_1_OUTPUT + i);
|
io_pin_e pin = (io_pin_e) ((int) INJECTOR_1_OUTPUT + i);
|
||||||
|
|
||||||
outputPinRegisterExt2(getPinName(pin), pin, boardConfiguration->injectionPins[i],
|
outputPinRegisterExt2(getPinName(pin), &outputs[(int)pin], boardConfiguration->injectionPins[i],
|
||||||
&boardConfiguration->injectionPinMode);
|
&boardConfiguration->injectionPinMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,11 +42,13 @@ static THD_WORKING_AREA(mfiThreadStack, UTILITY_THREAD_STACK_SIZE); // declare t
|
||||||
|
|
||||||
extern OutputPin outputs[IO_PIN_COUNT];
|
extern OutputPin outputs[IO_PIN_COUNT];
|
||||||
|
|
||||||
|
extern OutputPin checkEnginePin;
|
||||||
|
|
||||||
static void blink_digits(int digit, int duration) {
|
static void blink_digits(int digit, int duration) {
|
||||||
for (int iter = 0; iter < digit; iter++) {
|
for (int iter = 0; iter < digit; iter++) {
|
||||||
outputs[(int)LED_CHECK_ENGINE].setValue(0);
|
checkEnginePin.setValue(0);
|
||||||
chThdSleepMilliseconds(duration);
|
chThdSleepMilliseconds(duration);
|
||||||
outputs[(int)LED_CHECK_ENGINE].setValue(1);
|
checkEnginePin.setValue(1);
|
||||||
chThdSleepMilliseconds(MFI_BLINK_SEPARATOR);
|
chThdSleepMilliseconds(MFI_BLINK_SEPARATOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,6 +113,7 @@ const char *getPinName(io_pin_e io_pin);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define doSetOutputPinValue(pin, logicValue) doSetOutputPinValue2((&outputs[pin]), logicValue)
|
#define doSetOutputPinValue(pin, logicValue) doSetOutputPinValue2((&outputs[pin]), logicValue)
|
||||||
|
void outputPinRegisterExt2(const char *msg, OutputPin *output, brain_pin_e brainPin, pin_output_mode_e *outputMode);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "EfiWave.h"
|
#include "EfiWave.h"
|
||||||
#include "io_pins.h"
|
#include "io_pins.h"
|
||||||
#include "scheduler.h"
|
#include "scheduler.h"
|
||||||
|
#include "efiGpio.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/**
|
/**
|
||||||
|
@ -47,7 +48,7 @@ public:
|
||||||
void handleCycleStart();
|
void handleCycleStart();
|
||||||
|
|
||||||
|
|
||||||
io_pin_e outputPins[PWM_PHASE_MAX_WAVE_PER_PWM];
|
OutputPin *outputPins[PWM_PHASE_MAX_WAVE_PER_PWM];
|
||||||
multi_wave_s multiWave;
|
multi_wave_s multiWave;
|
||||||
const char *name;
|
const char *name;
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
extern PwmConfig triggerSignal;
|
extern PwmConfig triggerSignal;
|
||||||
|
|
||||||
|
extern OutputPin outputs[IO_PIN_COUNT];
|
||||||
|
|
||||||
void initTriggerEmulator(Engine *engine) {
|
void initTriggerEmulator(Engine *engine) {
|
||||||
|
|
||||||
engine_configuration_s *engineConfiguration = engine->engineConfiguration;
|
engine_configuration_s *engineConfiguration = engine->engineConfiguration;
|
||||||
|
@ -32,9 +34,9 @@ void initTriggerEmulator(Engine *engine) {
|
||||||
#if EFI_EMULATE_POSITION_SENSORS || defined(__DOXYGEN__)
|
#if EFI_EMULATE_POSITION_SENSORS || defined(__DOXYGEN__)
|
||||||
print("Emulating %s\r\n", getConfigurationName(engineConfiguration->engineType));
|
print("Emulating %s\r\n", getConfigurationName(engineConfiguration->engineType));
|
||||||
|
|
||||||
triggerSignal.outputPins[0] = TRIGGER_EMULATOR_PRIMARY;
|
triggerSignal.outputPins[0] = &outputs[(int)TRIGGER_EMULATOR_PRIMARY];
|
||||||
triggerSignal.outputPins[1] = TRIGGER_EMULATOR_SECONDARY;
|
triggerSignal.outputPins[1] = &outputs[(int)TRIGGER_EMULATOR_SECONDARY];
|
||||||
triggerSignal.outputPins[2] = TRIGGER_EMULATOR_3RD;
|
triggerSignal.outputPins[2] = &outputs[(int)TRIGGER_EMULATOR_3RD];
|
||||||
|
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
// todo: refactor, make this a loop
|
// todo: refactor, make this a loop
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#if EFI_HIP_9011 || defined(__DOXYGEN__)
|
#if EFI_HIP_9011 || defined(__DOXYGEN__)
|
||||||
|
|
||||||
#define HIP_DEBUG FALSE
|
#define HIP_DEBUG FALSE
|
||||||
|
extern OutputPin outputs[IO_PIN_COUNT];
|
||||||
|
|
||||||
extern pin_output_mode_e DEFAULT_OUTPUT;
|
extern pin_output_mode_e DEFAULT_OUTPUT;
|
||||||
|
|
||||||
|
@ -233,8 +234,8 @@ void initHip9011(void) {
|
||||||
spicfg.ssport = getHwPort(boardConfiguration->hip9011CsPin);
|
spicfg.ssport = getHwPort(boardConfiguration->hip9011CsPin);
|
||||||
spicfg.sspad = getHwPin(boardConfiguration->hip9011CsPin);
|
spicfg.sspad = getHwPin(boardConfiguration->hip9011CsPin);
|
||||||
|
|
||||||
outputPinRegisterExt2("hip int/hold", HIP9011_INT_HOLD, boardConfiguration->hip9011IntHoldPin, &DEFAULT_OUTPUT);
|
outputPinRegisterExt2("hip int/hold", &outputs[(int)HIP9011_INT_HOLD], boardConfiguration->hip9011IntHoldPin, &DEFAULT_OUTPUT);
|
||||||
outputPinRegisterExt2("hip CS", SPI_CS_HIP9011, boardConfiguration->hip9011CsPin, &DEFAULT_OUTPUT);
|
outputPinRegisterExt2("hip CS", &outputs[(int)SPI_CS_HIP9011], boardConfiguration->hip9011CsPin, &DEFAULT_OUTPUT);
|
||||||
|
|
||||||
scheduleMsg(&logger, "Starting HIP9011/TPIC8101 driver");
|
scheduleMsg(&logger, "Starting HIP9011/TPIC8101 driver");
|
||||||
spiStart(driver, &spicfg);
|
spiStart(driver, &spicfg);
|
||||||
|
|
|
@ -75,21 +75,24 @@ ioportmask_t getHwPin(brain_pin_e brainPin) {
|
||||||
return brainPin % 16;
|
return brainPin % 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
void outputPinRegisterExt2(const char *msg, io_pin_e ioPin, brain_pin_e brainPin, pin_output_mode_e *outputMode) {
|
void outputPinRegisterExt2(const char *msg, OutputPin *output, brain_pin_e brainPin, pin_output_mode_e *outputMode) {
|
||||||
if (brainPin == GPIO_UNASSIGNED)
|
if (brainPin == GPIO_UNASSIGNED)
|
||||||
return;
|
return;
|
||||||
GPIO_TypeDef *hwPort = getHwPort(brainPin);
|
GPIO_TypeDef *hwPort = getHwPort(brainPin);
|
||||||
int hwPin = getHwPin(brainPin);
|
int hwPin = getHwPin(brainPin);
|
||||||
|
|
||||||
outputPinRegisterExt(msg, &outputs[(int)ioPin], hwPort, hwPin, outputMode);
|
outputPinRegisterExt(msg, output, hwPort, hwPin, outputMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void outputPinRegister(const char *msg, OutputPin *output, GPIO_TypeDef *port, uint32_t pin) {
|
void outputPinRegister(const char *msg, OutputPin *output, GPIO_TypeDef *port, uint32_t pin) {
|
||||||
outputPinRegisterExt(msg, output, port, pin, &DEFAULT_OUTPUT);
|
outputPinRegisterExt(msg, output, port, pin, &DEFAULT_OUTPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OutputPin errorLedPin;
|
||||||
|
extern OutputPin checkEnginePin;
|
||||||
|
|
||||||
void initPrimaryPins(void) {
|
void initPrimaryPins(void) {
|
||||||
outputPinRegister("LED_ERROR", &outputs[(int)LED_ERROR], LED_ERROR_PORT, LED_ERROR_PIN);
|
outputPinRegister("LED_ERROR", &errorLedPin, LED_ERROR_PORT, LED_ERROR_PIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getPinValue(const char *name) {
|
static void getPinValue(const char *name) {
|
||||||
|
@ -105,13 +108,6 @@ static void getPinValue(const char *name) {
|
||||||
void initOutputPins(void) {
|
void initOutputPins(void) {
|
||||||
initLogging(&logger, "io_pins");
|
initLogging(&logger, "io_pins");
|
||||||
|
|
||||||
#if EFI_WARNING_LED
|
|
||||||
outputPinRegister("warning", &outputs[(int)LED_WARNING], LED_WARNING_PORT, LED_WARNING_PIN);
|
|
||||||
outputPinRegister("is running status", &outputs[(int)LED_RUNNING], LED_RUNNING_STATUS_PORT, LED_RUNNING_STATUS_PIN);
|
|
||||||
#endif /* EFI_WARNING_LED */
|
|
||||||
|
|
||||||
outputPinRegister("communication status 1", &outputs[(int)LED_COMMUNICATION_1], LED_COMMUNICATION_PORT, LED_COMMUNICATION_PIN);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* want to make sure it's all zeros so that we can compare in initOutputPinExt() method
|
* want to make sure it's all zeros so that we can compare in initOutputPinExt() method
|
||||||
*/
|
*/
|
||||||
|
@ -122,7 +118,7 @@ void initOutputPins(void) {
|
||||||
// outputPinRegister("ext led 2", LED_EXT_2, EXTRA_LED_2_PORT, EXTRA_LED_2_PIN);
|
// outputPinRegister("ext led 2", LED_EXT_2, EXTRA_LED_2_PORT, EXTRA_LED_2_PIN);
|
||||||
// outputPinRegister("ext led 3", LED_EXT_3, EXTRA_LED_2_PORT, EXTRA_LED_3_PIN);
|
// outputPinRegister("ext led 3", LED_EXT_3, EXTRA_LED_2_PORT, EXTRA_LED_3_PIN);
|
||||||
// outputPinRegister("alive1", LED_DEBUG, GPIOD, 6);
|
// outputPinRegister("alive1", LED_DEBUG, GPIOD, 6);
|
||||||
outputPinRegisterExt2("MalfunctionIndicator", LED_CHECK_ENGINE, boardConfiguration->malfunctionIndicatorPin, &DEFAULT_OUTPUT);
|
outputPinRegisterExt2("MalfunctionIndicator", &checkEnginePin, boardConfiguration->malfunctionIndicatorPin, &DEFAULT_OUTPUT);
|
||||||
|
|
||||||
// todo: are these needed here? todo: make configurable
|
// todo: are these needed here? todo: make configurable
|
||||||
// outputPinRegister("spi CS1", SPI_CS_1, SPI_CS1_PORT, SPI_CS1_PIN);
|
// outputPinRegister("spi CS1", SPI_CS_1, SPI_CS1_PORT, SPI_CS1_PIN);
|
||||||
|
@ -134,14 +130,14 @@ void initOutputPins(void) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// todo: should we move this code closer to the fuel pump logic?
|
// todo: should we move this code closer to the fuel pump logic?
|
||||||
outputPinRegisterExt2("fuel pump relay", FUEL_PUMP_RELAY, boardConfiguration->fuelPumpPin, &DEFAULT_OUTPUT);
|
outputPinRegisterExt2("fuel pump relay", &outputs[(int)FUEL_PUMP_RELAY], boardConfiguration->fuelPumpPin, &DEFAULT_OUTPUT);
|
||||||
|
|
||||||
outputPinRegisterExt2("main relay", MAIN_RELAY, boardConfiguration->mainRelayPin, &boardConfiguration->mainRelayPinMode);
|
outputPinRegisterExt2("main relay", &outputs[(int)MAIN_RELAY], boardConfiguration->mainRelayPin, &boardConfiguration->mainRelayPinMode);
|
||||||
|
|
||||||
outputPinRegisterExt2("fan relay", FAN_RELAY, boardConfiguration->fanPin, &DEFAULT_OUTPUT);
|
outputPinRegisterExt2("fan relay", &outputs[(int)FAN_RELAY], boardConfiguration->fanPin, &DEFAULT_OUTPUT);
|
||||||
outputPinRegisterExt2("o2 heater", O2_HEATER, boardConfiguration->o2heaterPin, &DEFAULT_OUTPUT);
|
outputPinRegisterExt2("o2 heater", &outputs[(int)O2_HEATER], boardConfiguration->o2heaterPin, &DEFAULT_OUTPUT);
|
||||||
outputPinRegisterExt2("trg_err", LED_TRIGGER_ERROR, boardConfiguration->triggerErrorPin, &boardConfiguration->triggerErrorPinMode);
|
outputPinRegisterExt2("trg_err", &outputs[(int)LED_TRIGGER_ERROR], boardConfiguration->triggerErrorPin, &boardConfiguration->triggerErrorPinMode);
|
||||||
outputPinRegisterExt2("A/C relay", AC_RELAY, boardConfiguration->acRelayPin, &boardConfiguration->acRelayPinMode);
|
outputPinRegisterExt2("A/C relay", &outputs[(int)AC_RELAY], boardConfiguration->acRelayPin, &boardConfiguration->acRelayPinMode);
|
||||||
|
|
||||||
// digit 1
|
// digit 1
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "datalogging.h"
|
#include "datalogging.h"
|
||||||
|
|
||||||
static Logging logger;
|
static Logging logger;
|
||||||
|
extern OutputPin outputs[IO_PIN_COUNT];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method controls the actual hardware pins
|
* This method controls the actual hardware pins
|
||||||
|
@ -28,9 +29,9 @@ void applyPinState(PwmConfig *state, int stateIndex) {
|
||||||
efiAssertVoid(stateIndex < PWM_PHASE_MAX_COUNT, "invalid stateIndex");
|
efiAssertVoid(stateIndex < PWM_PHASE_MAX_COUNT, "invalid stateIndex");
|
||||||
efiAssertVoid(state->multiWave.waveCount <= PWM_PHASE_MAX_WAVE_PER_PWM, "invalid waveCount");
|
efiAssertVoid(state->multiWave.waveCount <= PWM_PHASE_MAX_WAVE_PER_PWM, "invalid waveCount");
|
||||||
for (int waveIndex = 0; waveIndex < state->multiWave.waveCount; waveIndex++) {
|
for (int waveIndex = 0; waveIndex < state->multiWave.waveCount; waveIndex++) {
|
||||||
io_pin_e ioPin = state->outputPins[waveIndex];
|
OutputPin *output = state->outputPins[waveIndex];
|
||||||
int value = state->multiWave.waves[waveIndex].pinStates[stateIndex];
|
int value = state->multiWave.waves[waveIndex].pinStates[stateIndex];
|
||||||
setOutputPinValue(ioPin, value);
|
output->setValue(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ void startSimplePwm(PwmConfig *state, const char *msg, io_pin_e ioPin, float fre
|
||||||
|
|
||||||
int *pinStates[1] = { pinStates0 };
|
int *pinStates[1] = { pinStates0 };
|
||||||
|
|
||||||
state->outputPins[0] = ioPin;
|
state->outputPins[0] = &outputs[(int)ioPin];
|
||||||
|
|
||||||
state->periodNt = US2NT(frequency2periodUs(frequency));
|
state->periodNt = US2NT(frequency2periodUs(frequency));
|
||||||
weComplexInit(msg, state, 2, switchTimes, 1, pinStates, NULL, stateChangeCallback);
|
weComplexInit(msg, state, 2, switchTimes, 1, pinStates, NULL, stateChangeCallback);
|
||||||
|
|
|
@ -232,11 +232,13 @@ void chDbgStackOverflowPanic(Thread *otp) {
|
||||||
|
|
||||||
extern OutputPin outputs[IO_PIN_COUNT];
|
extern OutputPin outputs[IO_PIN_COUNT];
|
||||||
|
|
||||||
|
extern OutputPin errorLedPin;
|
||||||
|
|
||||||
// todo: why is this method here and not in error_handling.c ?
|
// todo: why is this method here and not in error_handling.c ?
|
||||||
void firmwareError(const char *fmt, ...) {
|
void firmwareError(const char *fmt, ...) {
|
||||||
if (hasFirmwareErrorFlag)
|
if (hasFirmwareErrorFlag)
|
||||||
return;
|
return;
|
||||||
outputs[(int)LED_ERROR].setValue(1);
|
errorLedPin.setValue(1);
|
||||||
turnAllPinsOff();
|
turnAllPinsOff();
|
||||||
hasFirmwareErrorFlag = TRUE;
|
hasFirmwareErrorFlag = TRUE;
|
||||||
if (indexOf(fmt, '%') == -1) {
|
if (indexOf(fmt, '%') == -1) {
|
||||||
|
|
Loading…
Reference in New Issue