auto-sync

This commit is contained in:
rusEfi 2015-01-13 11:05:05 -06:00
parent 0975ec58e6
commit af5b413ff8
13 changed files with 46 additions and 40 deletions

View File

@ -23,7 +23,7 @@
static Logging logger;
extern OutputPin outputs[IO_PIN_COUNT];
extern NamedOutputPin outputs[IO_PIN_COUNT];
EXTERN_ENGINE
;

View File

@ -63,13 +63,13 @@ typedef enum {
IO_INVALID,
/**
* these seven segment display pins are related to unused external tachometer code
* I still have the hardware so maybe one day I will fix it, but for now it's just dead code
* See https://www.youtube.com/watch?v=YYiHoN6MBqE
* todo: this should be re-implemented in a smarter way with some sort of multiplexing anyway
*/
/* digit 1 */
/**
* these seven segment display pins are related to unused external tachometer code
* I still have the hardware so maybe one day I will fix it, but for now it's just dead code
* See https://www.youtube.com/watch?v=YYiHoN6MBqE
* todo: this should be re-implemented in a smarter way with some sort of multiplexing anyway
*/
/* digit 1 */
// LED_HUGE_0, // B2
// LED_HUGE_1,
// LED_HUGE_2,
@ -94,20 +94,19 @@ typedef enum {
// LED_HUGE_19,
// LED_HUGE_20,
} io_pin_e;
#define IO_PIN_COUNT 100
#define IO_PIN_COUNT 24
void initPrimaryPins(void);
void initOutputPins(void);
io_pin_e getPinByName(const char *name);
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
io_pin_e getPinByName(const char *name);
#if EFI_GPIO
void turnAllPinsOff(void);
#else

View File

@ -41,7 +41,7 @@ extern WaveChart waveChart;
static Logging logger;
extern OutputPin outputs[IO_PIN_COUNT];
extern NamedOutputPin outputs[IO_PIN_COUNT];
void initSignalExecutor(void) {
initLogging(&logger, "s exec");
@ -52,12 +52,12 @@ void initOutputSignal(OutputSignal *signal, io_pin_e ioPin) {
signal->io_pin = ioPin;
}
uint32_t dbgStart;
uint32_t dbgDurr;
//uint32_t dbgStart;
//uint32_t dbgDurr;
extern const char *namedPinsArray[NAMED_PIN_COUNT];
void turnPinHigh(io_pin_e pin) {
void turnPinHigh(NamedOutputPin *output) {
#if EFI_DEFAILED_LOGGING
// signal->hi_time = hTimeNow();
#endif /* EFI_DEFAILED_LOGGING */
@ -65,14 +65,14 @@ void turnPinHigh(io_pin_e pin) {
#if EFI_GPIO
// turn the output level ACTIVE
// todo: this XOR should go inside the setOutputPinValue method
doSetOutputPinValue2((&outputs[pin]), true);
doSetOutputPinValue2(output, true);
// sleep for the needed duration
#endif
#if EFI_WAVE_CHART
// explicit check here is a performance optimization to speed up no-chart mode
if (CONFIG(isDigitalChartEnabled)) {
// this is a performance optimization - array index is cheaper then invoking a method with 'switch'
const char *pinName = namedPinsArray[pin];
const char *pinName = output->name;
// dbgDurr = hal_lld_get_counter_value() - dbgStart;
addWaveChartEvent(pinName, WC_UP);
@ -81,10 +81,10 @@ void turnPinHigh(io_pin_e pin) {
// dbgDurr = hal_lld_get_counter_value() - dbgStart;
}
void turnPinLow(io_pin_e pin) {
void turnPinLow(NamedOutputPin *output) {
#if EFI_GPIO
// turn off the output
doSetOutputPinValue2((&outputs[pin]), false);
doSetOutputPinValue2(output, false);
#endif
#if EFI_DEFAILED_LOGGING
@ -96,7 +96,7 @@ void turnPinLow(io_pin_e pin) {
#if EFI_WAVE_CHART
if (CONFIG(isDigitalChartEnabled)) {
// this is a performance optimization - array index is cheaper then invoking a method with 'switch'
const char *pinName = namedPinsArray[pin];
const char *pinName = output->name;
addWaveChartEvent(pinName, WC_DOWN);
}
@ -128,8 +128,8 @@ void scheduleOutput(OutputSignal *signal, float delayMs, float durationMs) {
scheduling_s * sUp = &signal->signalTimerUp[index];
scheduling_s * sDown = &signal->signalTimerDown[index];
scheduleTask("out up", sUp, (int) MS2US(delayMs), (schfunc_t) &turnPinHigh, (void *) signal->io_pin);
scheduleTask("out down", sDown, (int) MS2US(delayMs) + MS2US(durationMs), (schfunc_t) &turnPinLow, (void*) signal->io_pin);
scheduleTask("out up", sUp, (int) MS2US(delayMs), (schfunc_t) &turnPinHigh, &outputs[(int)signal->io_pin]);
scheduleTask("out down", sDown, (int) MS2US(delayMs) + MS2US(durationMs), (schfunc_t) &turnPinLow, &outputs[(int)signal->io_pin]);
#endif
}

View File

@ -48,9 +48,6 @@ void scheduleOutput(OutputSignal *signal, float delayMs, float durationMs);
void initOutputSignalBase(OutputSignal *signal);
void scheduleOutputBase(OutputSignal *signal, float delayMs, float durationMs);
void turnPinHigh(io_pin_e pin);
void turnPinLow(io_pin_e pin);
void initSignalExecutor(void);
void initSignalExecutorImpl(void);
void scheduleByAngle(int rpm, scheduling_s *timer, float angle, schfunc_t callback, void *param);

View File

@ -149,7 +149,6 @@ static SimplePwm fsioPwm[LE_COMMAND_COUNT] CCM_OPTIONAL;
static LECalculator calc;
extern LEElement * fsioLogics[LE_COMMAND_COUNT];
extern OutputPin outputs[IO_PIN_COUNT];
// that's crazy, but what's an alternative? we need const char *, a shared buffer would not work for pin repository
static const char *getGpioPinName(int index) {
@ -357,8 +356,6 @@ void runFsio(void) {
static pin_output_mode_e defa = OM_DEFAULT;
extern OutputPin outputs[IO_PIN_COUNT];
void initFsioImpl(Engine *engine) {
initLogging(&logger, "le");

View File

@ -42,7 +42,7 @@ static bool_t isRunningBench = false;
static int is_injector_enabled[MAX_INJECTOR_COUNT];
extern OutputPin outputs[IO_PIN_COUNT];
extern NamedOutputPin outputs[IO_PIN_COUNT];
extern engine_pins_s enginePins;
void initIgnitionCentral(void) {

View File

@ -40,8 +40,6 @@
static THD_WORKING_AREA(mfiThreadStack, UTILITY_THREAD_STACK_SIZE); // declare thread
extern OutputPin outputs[IO_PIN_COUNT];
extern OutputPin checkEnginePin;
static void blink_digits(int digit, int duration) {

View File

@ -32,7 +32,7 @@
EXTERN_ENGINE
;
extern OutputPin outputs[IO_PIN_COUNT];
extern NamedOutputPin outputs[IO_PIN_COUNT];
/**
* this cache allows us to find a close-enough (with one degree precision) trigger wheel index by

View File

@ -13,7 +13,7 @@
pin_output_mode_e OUTPUT_MODE_DEFAULT = OM_DEFAULT;
// todo: clean this mess, this should become 'static'/private
OutputPin outputs[IO_PIN_COUNT];
NamedOutputPin outputs[IO_PIN_COUNT];
engine_pins_s enginePins;
const char *namedPinsArray[NAMED_PIN_COUNT] = { "spa1", "spa2", "spa3", "spa4", "spa5", "spa6", "spa7", "spa8",
@ -54,6 +54,10 @@ const char *getPinName(io_pin_e io_pin) {
}
}
NamedOutputPin::NamedOutputPin() : OutputPin() {
}
OutputPin::OutputPin() {
modePtr = &OUTPUT_MODE_DEFAULT;
}

View File

@ -36,6 +36,12 @@ public:
int currentLogicValue;
};
class NamedOutputPin : public OutputPin {
public:
NamedOutputPin();
const char *name;
};
typedef struct {
OutputPin mainRelay;
OutputPin fanRelay;
@ -113,6 +119,9 @@ typedef struct {
void outputPinRegisterExt2(const char *msg, OutputPin *output, brain_pin_e brainPin, pin_output_mode_e *outputMode);
void turnPinHigh(NamedOutputPin *output);
void turnPinLow(NamedOutputPin *output);
const char *getPinName(io_pin_e io_pin);
#endif /* EFIGPIO_H_ */

View File

@ -33,7 +33,7 @@
#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
#include "main_trigger_callback.h"
#include "efiGpio.h"
#include "engine_math.h"
#include "trigger_central.h"
#include "rpm_calculator.h"
@ -57,6 +57,7 @@
EXTERN_ENGINE
;
extern bool hasFirmwareErrorFlag;
extern NamedOutputPin outputs[IO_PIN_COUNT];
static LocalVersionHolder localVersion;
@ -88,13 +89,13 @@ static Logging logger;
static void startSimultaniousInjection(Engine *engine) {
for (int i = 0; i < engine->engineConfiguration->cylindersCount; i++) {
turnPinHigh(INJECTOR_PIN_BY_INDEX(i));
turnPinHigh(&outputs[(int)INJECTOR_PIN_BY_INDEX(i)]);
}
}
static void endSimultaniousInjection(Engine *engine) {
for (int i = 0; i < engine->engineConfiguration->cylindersCount; i++) {
turnPinLow(INJECTOR_PIN_BY_INDEX(i));
turnPinLow(&outputs[(int)INJECTOR_PIN_BY_INDEX(i)]);
}
}

View File

@ -27,7 +27,7 @@ static Logging logger;
static OutputPin sdCsPin;
extern OutputPin outputs[IO_PIN_COUNT];
extern NamedOutputPin outputs[IO_PIN_COUNT];
extern engine_pins_s enginePins;
#if defined(STM32F4XX)
@ -111,6 +111,9 @@ static void getPinValue(const char *name) {
void initOutputPins(void) {
initLogging(&logger, "io_pins");
for (int i = 0; i < IO_PIN_COUNT;i++)
outputs[i].name = getPinName((io_pin_e)i);
/**
* want to make sure it's all zeros so that we can compare in initOutputPinExt() method
*/

View File

@ -229,8 +229,6 @@ void chDbgStackOverflowPanic(Thread *otp) {
chDbgPanic3(panicMessage, __FILE__, __LINE__);
}
extern OutputPin outputs[IO_PIN_COUNT];
extern OutputPin errorLedPin;
// todo: why is this method here and not in error_handling.c ?