auto-sync

This commit is contained in:
rusEfi 2014-11-22 16:03:07 -06:00
parent 0aa93c89d4
commit bd14d66161
6 changed files with 139 additions and 138 deletions

View File

@ -12,31 +12,12 @@
#define GPIO_NULL NULL
#define NAMED_PIN_COUNT 24
/**
* Logical pins. See brain_pin_e for physical pins.
*/
typedef enum {
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,
/**
* see board_configuration_s->idleValvePin
*/
IDLE_VALVE,
TRIGGER_EMULATOR_PRIMARY,
TRIGGER_EMULATOR_SECONDARY,
TRIGGER_EMULATOR_3RD,
SPARKOUT_1_OUTPUT,
SPARKOUT_2_OUTPUT,
SPARKOUT_3_OUTPUT,
@ -63,6 +44,45 @@ typedef enum {
INJECTOR_11_OUTPUT,
INJECTOR_12_OUTPUT,
GPIO_0,
GPIO_1,
GPIO_2,
GPIO_3,
GPIO_4,
GPIO_5,
GPIO_6,
GPIO_7,
GPIO_8,
GPIO_9,
GPIO_10,
GPIO_11,
GPIO_12,
GPIO_13,
GPIO_14,
GPIO_15,
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,
/**
* see board_configuration_s->idleValvePin
*/
IDLE_VALVE,
TRIGGER_EMULATOR_PRIMARY,
TRIGGER_EMULATOR_SECONDARY,
TRIGGER_EMULATOR_3RD,
ELECTRONIC_THROTTLE_CONTROL_1,
ELECTRONIC_THROTTLE_CONTROL_2,
ELECTRONIC_THROTTLE_CONTROL_3,
@ -113,22 +133,6 @@ typedef enum {
MAIN_RELAY,
GPIO_0,
GPIO_1,
GPIO_2,
GPIO_3,
GPIO_4,
GPIO_5,
GPIO_6,
GPIO_7,
GPIO_8,
GPIO_9,
GPIO_10,
GPIO_11,
GPIO_12,
GPIO_13,
GPIO_14,
GPIO_15,
/**
@ -148,7 +152,6 @@ extern "C"
{
#endif /* __cplusplus */
const char *getPinName(io_pin_e io_pin);
io_pin_e getPinByName(const char *name);
void setDefaultPinState(io_pin_e pin, pin_output_mode_e *defaultState);

View File

@ -52,6 +52,11 @@ void initOutputSignal(OutputSignal *signal, io_pin_e ioPin) {
signal->io_pin = ioPin;
}
uint32_t dbgStart;
uint32_t dbgDurr;
extern const char *namedPinsArray[NAMED_PIN_COUNT];
void turnPinHigh(io_pin_e pin) {
#if EFI_DEFAILED_LOGGING
// signal->hi_time = hTimeNow();
@ -71,8 +76,13 @@ void turnPinHigh(io_pin_e pin) {
#endif
#if EFI_WAVE_CHART
addWaveChartEvent(getPinName(pin), WC_UP);
// this is a performance optimization - array index is cheaper then invoking a method with 'switch'
const char *pinName = namedPinsArray[pin];
dbgDurr = hal_lld_get_counter_value() - dbgStart;
addWaveChartEvent(pinName, WC_UP);
#endif /* EFI_WAVE_ANALYZER */
dbgDurr = hal_lld_get_counter_value() - dbgStart;
}
void turnPinLow(io_pin_e pin) {
@ -87,7 +97,10 @@ void turnPinLow(io_pin_e pin) {
#endif /* EFI_DEFAILED_LOGGING */
#if EFI_WAVE_CHART
addWaveChartEvent(getPinName(pin), WC_DOWN);
// this is a performance optimization - array index is cheaper then invoking a method with 'switch'
const char *pinName = namedPinsArray[pin];
addWaveChartEvent(pinName, WC_DOWN);
#endif /* EFI_WAVE_ANALYZER */
}
@ -115,104 +128,14 @@ 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 + durationMs), (schfunc_t) &turnPinLow, (void*) signal->io_pin);
scheduleTask("out up", sUp, (int) MS2US(delayMs), (schfunc_t) &turnPinHigh, (void *) signal->io_pin);
scheduleTask("out down", sDown, (int) MS2US(delayMs + durationMs), (schfunc_t) &turnPinLow, (void*) signal->io_pin);
}
io_pin_e getPinByName(const char *name) {
if(startsWith(name, "spa")) {
if (startsWith(name, "spa")) {
int index = atoi(name + 3);
return (io_pin_e)((int)SPARKOUT_1_OUTPUT - 1 + index);
return (io_pin_e) ((int) SPARKOUT_1_OUTPUT - 1 + index);
}
return IO_INVALID;
}
const char *getPinName(io_pin_e io_pin) {
switch (io_pin) {
// todo: refactor this hell - introduce arrays & checks?
case SPARKOUT_1_OUTPUT:
return "spa1";
case SPARKOUT_2_OUTPUT:
return "spa2";
case SPARKOUT_3_OUTPUT:
return "spa3";
case SPARKOUT_4_OUTPUT:
return "spa4";
case SPARKOUT_5_OUTPUT:
return "spa5";
case SPARKOUT_6_OUTPUT:
return "spa6";
case SPARKOUT_7_OUTPUT:
return "spa7";
case SPARKOUT_8_OUTPUT:
return "spa8";
case SPARKOUT_9_OUTPUT:
return "spa9";
case SPARKOUT_10_OUTPUT:
return "spa10";
case SPARKOUT_11_OUTPUT:
return "spa11";
case SPARKOUT_12_OUTPUT:
return "spa12";
case INJECTOR_1_OUTPUT:
return "inj1";
case INJECTOR_2_OUTPUT:
return "inj2";
case INJECTOR_3_OUTPUT:
return "inj3";
case INJECTOR_4_OUTPUT:
return "inj4";
case INJECTOR_5_OUTPUT:
return "inj5";
case INJECTOR_6_OUTPUT:
return "inj6";
case INJECTOR_7_OUTPUT:
return "inj7";
case INJECTOR_8_OUTPUT:
return "inj8";
case INJECTOR_9_OUTPUT:
return "inj9";
case INJECTOR_10_OUTPUT:
return "inj10";
case INJECTOR_11_OUTPUT:
return "inj11";
case INJECTOR_12_OUTPUT:
return "inj12";
case GPIO_0:
return "gpio0";
case GPIO_1:
return "gpio1";
case GPIO_2:
return "gpio2";
case GPIO_3:
return "gpio3";
case GPIO_4:
return "gpio4";
case GPIO_5:
return "gpio5";
case GPIO_6:
return "gpio6";
case GPIO_7:
return "gpio7";
case GPIO_8:
return "gpio8";
case GPIO_9:
return "gpio9";
case GPIO_10:
return "gpio10";
case GPIO_11:
return "gpio11";
case GPIO_12:
return "gpio12";
case GPIO_13:
return "gpio13";
case GPIO_14:
return "gpio14";
case GPIO_15:
return "gpio15";
default:
return "Pin needs name";
}
}

View File

@ -62,13 +62,13 @@ void idleDebug(const char *msg, int value) {
}
static void showIdleInfo(void) {
scheduleMsg(&logger, "isIdleControlActive=%d", engineConfiguration->idleMode);
scheduleMsg(&logger, "idleMode=%s", getIdle_mode_e(engineConfiguration->idleMode));
scheduleMsg(&logger, "idle valve freq=%d on %s", boardConfiguration->idleSolenoidFrequency,
hwPortname(boardConfiguration->idleValvePin));
}
static void setIdleControlEnabled(int value, Engine *engine) {
engineConfiguration->idleMode = value ? IM_MANUAL : IM_AUTO;
engineConfiguration->idleMode = value ? IM_AUTO : IM_MANUAL;
showIdleInfo();
}
@ -90,7 +90,7 @@ static msg_t ivThread(int param) {
chRegSetThreadName("IdleValve");
int currentIdleValve = -1;
while (TRUE) {
while (true) {
chThdSleepMilliseconds(boardConfiguration->idleThreadPeriod);
// this value is not used yet
@ -129,7 +129,7 @@ void startIdleThread(Engine *engine) {
boardConfiguration->idleValvePin,
IDLE_VALVE,
boardConfiguration->idleSolenoidFrequency,
0.5);
boardConfiguration->idleSolenoidPwm);
idleInit(&idle);
scheduleMsg(&logger, "initial idle %d", idle.value);

View File

@ -25,6 +25,7 @@
#include "signal_executor.h"
#include "main_trigger_callback.h"
#include "engine_configuration.h"
#include "efiGpio.h"
extern engine_configuration_s *engineConfiguration;
extern board_configuration_s *boardConfiguration;

View File

@ -17,11 +17,84 @@ int getOutputPinValue(io_pin_e pin) {
return getLogicPinValue(&outputs[pin]);
}
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", };
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];
case GPIO_0:
return "gpio0";
case GPIO_1:
return "gpio1";
case GPIO_2:
return "gpio2";
case GPIO_3:
return "gpio3";
case GPIO_4:
return "gpio4";
case GPIO_5:
return "gpio5";
case GPIO_6:
return "gpio6";
case GPIO_7:
return "gpio7";
case GPIO_8:
return "gpio8";
case GPIO_9:
return "gpio9";
case GPIO_10:
return "gpio10";
case GPIO_11:
return "gpio11";
case GPIO_12:
return "gpio12";
case GPIO_13:
return "gpio13";
case GPIO_14:
return "gpio14";
case GPIO_15:
return "gpio15";
default:
return "Pin needs name";
}
}
/**
* @brief Sets the value according to current electrical settings
*
* This method costs about 85 ticks
*/
extern uint32_t dbgStart;
extern uint32_t dbgDurr;
void setOutputPinValue(io_pin_e pin, int logicValue) {
#if EFI_PROD_CODE
if (outputs[pin].port == GPIO_NULL)

View File

@ -77,6 +77,7 @@ extern "C"
int getOutputPinValue(io_pin_e pin);
void setOutputPinValue(io_pin_e pin, int logicValue);
bool isPinAssigned(io_pin_e pin);
const char *getPinName(io_pin_e io_pin);
#ifdef __cplusplus
}