auto-sync

This commit is contained in:
rusEfi 2016-10-10 14:02:17 -04:00
parent 6edafdc1af
commit e984e7a0c4
43 changed files with 75 additions and 77 deletions

View File

@ -154,8 +154,6 @@ void dbg_check_unlock_from_isr(void) {
dbg_leave_lock(); dbg_leave_lock();
} }
void firmwareError(const char *fmt, ...);
extern int maxNesting; extern int maxNesting;
/** /**

View File

@ -788,10 +788,10 @@ int tunerStudioHandleCrcCommand(ts_channel_s *tsChannel, char *data, int incomin
void startTunerStudioConnectivity(void) { void startTunerStudioConnectivity(void) {
if (sizeof(persistent_config_s) != getTunerStudioPageSize(0)) if (sizeof(persistent_config_s) != getTunerStudioPageSize(0))
firmwareError("TS page size mismatch: %d/%d", sizeof(persistent_config_s), getTunerStudioPageSize(0)); firmwareError(OBD_PCM_Processor_Fault, "TS page size mismatch: %d/%d", sizeof(persistent_config_s), getTunerStudioPageSize(0));
if (sizeof(TunerStudioOutputChannels) != TS_OUTPUT_SIZE) if (sizeof(TunerStudioOutputChannels) != TS_OUTPUT_SIZE)
firmwareError("TS outputs size mismatch: %d/%d", sizeof(TunerStudioOutputChannels), TS_OUTPUT_SIZE); firmwareError(OBD_PCM_Processor_Fault, "TS outputs size mismatch: %d/%d", sizeof(TunerStudioOutputChannels), TS_OUTPUT_SIZE);
memset(&tsState, 0, sizeof(tsState)); memset(&tsState, 0, sizeof(tsState));
syncTunerStudioCopy(); syncTunerStudioCopy();

View File

@ -82,7 +82,7 @@ static bool getConsoleLine(BaseSequentialStream *chp, char *line, unsigned size)
; ;
if (flags & SD_OVERRUN_ERROR) { if (flags & SD_OVERRUN_ERROR) {
// firmwareError("serial overrun"); // firmwareError(OBD_PCM_Processor_Fault, "serial overrun");
} }
} }
@ -229,7 +229,7 @@ void consoleOutputBuffer(const uint8_t *buf, int size) {
#if !EFI_UART_ECHO_TEST_MODE #if !EFI_UART_ECHO_TEST_MODE
lastWriteActual = chnWriteTimeout(getConsoleChannel(), buf, size, CONSOLE_WRITE_TIMEOUT); lastWriteActual = chnWriteTimeout(getConsoleChannel(), buf, size, CONSOLE_WRITE_TIMEOUT);
// if (r != size) // if (r != size)
// firmwareError("Partial console write"); // firmwareError(OBD_PCM_Processor_Fault, "Partial console write");
#endif /* EFI_UART_ECHO_TEST_MODE */ #endif /* EFI_UART_ECHO_TEST_MODE */
} }

View File

@ -36,7 +36,7 @@ static void myfatal(void) {
} }
static void myerror(void) { static void myerror(void) {
firmwareError("firmwareError: %d", getRusEfiVersion()); firmwareError(OBD_PCM_Processor_Fault, "firmwareError: %d", getRusEfiVersion());
} }
static void sayNothing(void) { static void sayNothing(void) {

View File

@ -288,7 +288,7 @@ void Engine::watchdog() {
return; return;
if (!isSpinning) { if (!isSpinning) {
if (!isRunningBenchTest() && stopPins()) { if (!isRunningBenchTest() && stopPins()) {
firmwareError("Some pins were turned off by 2nd pass watchdog"); firmwareError(OBD_PCM_Processor_Fault, "Some pins were turned off by 2nd pass watchdog");
} }
return; return;
} }

View File

@ -990,7 +990,7 @@ void resetConfigurationExt(Logging * logger, engine_type_e engineType DECLARE_EN
applyNonPersistentConfiguration(logger PASS_ENGINE_PARAMETER); applyNonPersistentConfiguration(logger PASS_ENGINE_PARAMETER);
// todo: eliminate triggerShape.operationMode? // todo: eliminate triggerShape.operationMode?
if (engineConfiguration->operationMode != engine->triggerShape.getOperationMode()) if (engineConfiguration->operationMode != engine->triggerShape.getOperationMode())
firmwareError("operationMode/trigger mismatch"); firmwareError(OBD_PCM_Processor_Fault, "operationMode/trigger mismatch");
#if EFI_TUNER_STUDIO #if EFI_TUNER_STUDIO
syncTunerStudioCopy(); syncTunerStudioCopy();
@ -1015,11 +1015,11 @@ void applyNonPersistentConfiguration(Logging * logger DECLARE_ENGINE_PARAMETER_S
engine->triggerShape.initializeTriggerShape(logger PASS_ENGINE_PARAMETER); engine->triggerShape.initializeTriggerShape(logger PASS_ENGINE_PARAMETER);
#endif #endif
if (engine->triggerShape.getSize() == 0) { if (engine->triggerShape.getSize() == 0) {
firmwareError("triggerShape size is zero"); firmwareError(OBD_PCM_Processor_Fault, "triggerShape size is zero");
return; return;
} }
if (engine->triggerShape.getSize() == 0) { if (engine->triggerShape.getSize() == 0) {
firmwareError("shaftPositionEventCount is zero"); firmwareError(OBD_PCM_Processor_Fault, "shaftPositionEventCount is zero");
return; return;
} }
engine->engineCycleEventCount = engine->triggerShape.getLength(); engine->engineCycleEventCount = engine->triggerShape.getLength();

View File

@ -34,7 +34,7 @@ bool isWarningNow(efitimesec_t now, bool forIndicator);
* *
* todo: better method name? * todo: better method name?
*/ */
void firmwareError(const char *fmt, ...); void firmwareError(obd_code_e code, const char *fmt, ...);
#define hasFirmwareError() hasFirmwareErrorFlag #define hasFirmwareError() hasFirmwareErrorFlag
@ -63,8 +63,8 @@ int getRusEfiVersion(void);
* is stopped. Please use firmwareWarning() instead * is stopped. Please use firmwareWarning() instead
*/ */
#if EFI_ENABLE_ASSERTS #if EFI_ENABLE_ASSERTS
#define efiAssert(condition, message, result) { if (!(condition)) { firmwareError(message); return result; } } #define efiAssert(condition, message, result) { if (!(condition)) { firmwareError(OBD_PCM_Processor_Fault, message); return result; } }
#define efiAssertVoid(condition, message) { if (!(condition)) { firmwareError(message); return; } } #define efiAssertVoid(condition, message) { if (!(condition)) { firmwareError(OBD_PCM_Processor_Fault, message); return; } }
#else /* EFI_ENABLE_ASSERTS */ #else /* EFI_ENABLE_ASSERTS */
#define efiAssert(condition, message, result) { } #define efiAssert(condition, message, result) { }
#define efiAssertVoid(condition, message) { } #define efiAssertVoid(condition, message) { }

View File

@ -105,7 +105,7 @@ int getNumberOfInjections(injection_mode_e mode DECLARE_ENGINE_PARAMETER_S) {
case IM_BATCH: case IM_BATCH:
return 2; return 2;
default: default:
firmwareError("Unexpected getFuelMultiplier %d", mode); firmwareError(OBD_PCM_Processor_Fault, "Unexpected getFuelMultiplier %d", mode);
return 1; return 1;
} }
} }

View File

@ -51,12 +51,12 @@ float multi_wave_s::getSwitchTime(int index) const {
void checkSwitchTimes2(int size, float *switchTimes) { void checkSwitchTimes2(int size, float *switchTimes) {
if (switchTimes[size - 1] != 1) { if (switchTimes[size - 1] != 1) {
firmwareError("last switch time has to be 1 not %f", switchTimes[size - 1]); firmwareError(OBD_PCM_Processor_Fault, "last switch time has to be 1 not %f", switchTimes[size - 1]);
return; return;
} }
for (int i = 0; i < size - 1; i++) { for (int i = 0; i < size - 1; i++) {
if (switchTimes[i] >= switchTimes[i + 1]) { if (switchTimes[i] >= switchTimes[i + 1]) {
firmwareError("invalid switchTimes @%d: %f/%f", i, switchTimes[i], switchTimes[i + 1]); firmwareError(OBD_PCM_Processor_Fault, "invalid switchTimes @%d: %f/%f", i, switchTimes[i], switchTimes[i + 1]);
} }
} }
} }

View File

@ -59,7 +59,7 @@ bool FLStack<T, MAXSIZE>::remove(T value) {
template<typename T, int MAXSIZE> template<typename T, int MAXSIZE>
void FLStack<T, MAXSIZE>::push(T value) { void FLStack<T, MAXSIZE>::push(T value) {
if (currentSize >= MAXSIZE) { if (currentSize >= MAXSIZE) {
firmwareError("FLstack overflow"); firmwareError(OBD_PCM_Processor_Fault, "FLstack overflow");
return; return;
//warning() //warning()
} }
@ -69,7 +69,7 @@ void FLStack<T, MAXSIZE>::push(T value) {
template<typename T, int MAXSIZE> template<typename T, int MAXSIZE>
T FLStack<T, MAXSIZE>::pop() { T FLStack<T, MAXSIZE>::pop() {
if (currentSize == 0) { if (currentSize == 0) {
firmwareError("FLStack is empty"); firmwareError(OBD_PCM_Processor_Fault, "FLStack is empty");
} }
return values[--currentSize]; return values[--currentSize];
} }

View File

@ -353,7 +353,7 @@ int LEElementPool::getSize() {
LEElement *LEElementPool::next() { LEElement *LEElementPool::next() {
if (index >= size) { if (index >= size) {
// todo: this should not be a fatal error, just an error // todo: this should not be a fatal error, just an error
firmwareError("LE_ELEMENT_POOL_SIZE overflow"); firmwareError(OBD_PCM_Processor_Fault, "LE_ELEMENT_POOL_SIZE overflow");
return NULL; return NULL;
} }
LEElement *result = &pool[index++]; LEElement *result = &pool[index++];

View File

@ -81,7 +81,7 @@ FastInterpolation::FastInterpolation(float x1, float y1, float x2, float y2) {
void FastInterpolation::init(float x1, float y1, float x2, float y2) { void FastInterpolation::init(float x1, float y1, float x2, float y2) {
if (x1 == x2) { if (x1 == x2) {
firmwareError("init: Same x1 and x2 in interpolate: %f/%f", x1, x2); firmwareError(OBD_PCM_Processor_Fault, "init: Same x1 and x2 in interpolate: %f/%f", x1, x2);
return; return;
} }
a = INTERPOLATION_A(x1, y1, x2, y2); a = INTERPOLATION_A(x1, y1, x2, y2);

View File

@ -142,7 +142,7 @@ static const char* idleModeStr[] = { "I:A", "I:M" };
// case O2_HEATER: // case O2_HEATER:
// return "O2H"; // return "O2H";
// default: // default:
// firmwareError("No short name for %d", (int) pin); // firmwareError(OBD_PCM_Processor_Fault, "No short name for %d", (int) pin);
// return ""; // return "";
// } // }
//} //}

View File

@ -193,7 +193,7 @@ static void mapAveragingCallback(trigger_event_e ckpEventType,
angle_t samplingDuration = ENGINE(engineState.mapAveragingDuration); angle_t samplingDuration = ENGINE(engineState.mapAveragingDuration);
if (samplingDuration <= 0) { if (samplingDuration <= 0) {
firmwareError("map sampling angle should be positive"); firmwareError(OBD_PCM_Processor_Fault, "map sampling angle should be positive");
return; return;
} }

View File

@ -23,7 +23,7 @@ void initializeIgnitionActions(angle_t advance, angle_t dwellAngle,
IgnitionEventList *list DECLARE_ENGINE_PARAMETER_S); IgnitionEventList *list DECLARE_ENGINE_PARAMETER_S);
#if EFI_ENABLE_ASSERTS #if EFI_ENABLE_ASSERTS
#define assertAngleRange(angle) if(angle > 10000000 || angle < -10000000) { firmwareError("angle range");angle = 0;} #define assertAngleRange(angle) if(angle > 10000000 || angle < -10000000) { firmwareError(OBD_PCM_Processor_Fault, "angle range");angle = 0;}
#else #else
#define assertAngleRange(angle) {} #define assertAngleRange(angle) {}
#endif #endif

View File

@ -56,7 +56,7 @@ static void initEgoSensor(afr_sensor_s *sensor, ego_sensor_e type) {
sensor->value2 = 14; sensor->value2 = 14;
break; break;
default: default:
firmwareError("Unexpected EGO %d", type); firmwareError(OBD_PCM_Processor_Fault, "Unexpected EGO %d", type);
break; break;
} }
} }

View File

@ -88,7 +88,7 @@ float decodePressure(float voltage, air_pressure_sensor_config_s * mapConfig DEC
case MT_MPX4100: case MT_MPX4100:
return mpx4100.getValue(voltage); return mpx4100.getValue(voltage);
default: default:
firmwareError("Unknown MAP type: %d", mapConfig->type); firmwareError(OBD_PCM_Processor_Fault, "Unknown MAP type: %d", mapConfig->type);
return NAN; return NAN;
} }
} }
@ -159,7 +159,7 @@ static FastInterpolation *getDecoder(air_pressure_sensor_type_e type) {
case MT_GM_3_BAR: case MT_GM_3_BAR:
return &gm3bar; return &gm3bar;
default: default:
firmwareError("Unknown MAP type: %d", type); firmwareError(OBD_PCM_Processor_Fault, "Unknown MAP type: %d", type);
return &customMap; return &customMap;
} }
} }

View File

@ -82,7 +82,7 @@ float getResistance(ThermistorConf *config) {
float getTemperatureC(ThermistorConf *config, ThermistorMath *tm) { float getTemperatureC(ThermistorConf *config, ThermistorMath *tm) {
if (!initialized) { if (!initialized) {
firmwareError("thermstr not initialized"); firmwareError(OBD_PCM_Processor_Fault, "thermstr not initialized");
return NAN; return NAN;
} }
float resistance = getResistance(config); float resistance = getResistance(config);
@ -137,7 +137,7 @@ static void prepareThermistorCurve(thermistor_conf_s *tc, thermistor_curve_s * c
float L1 = logf(tc->resistance_1); float L1 = logf(tc->resistance_1);
if (L1 == tc->resistance_1) { if (L1 == tc->resistance_1) {
firmwareError("log is broken?"); firmwareError(OBD_PCM_Processor_Fault, "log is broken?");
} }
float L2 = logf(tc->resistance_2); float L2 = logf(tc->resistance_2);
float L3 = logf(tc->resistance_3); float L3 = logf(tc->resistance_3);

View File

@ -62,7 +62,7 @@ Executor::Executor() {
void Executor::scheduleByTime(const bool monitorReuse, scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback, void Executor::scheduleByTime(const bool monitorReuse, scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback,
void *param) { void *param) {
// if (delayUs < 0) { // if (delayUs < 0) {
// firmwareError("Negative delayUs %s: %d", prefix, delayUs); // firmwareError(OBD_PCM_Processor_Fault, "Negative delayUs %s: %d", prefix, delayUs);
// return; // return;
// } // }
// if (delayUs == 0) { // if (delayUs == 0) {
@ -117,7 +117,7 @@ void Executor::doExecute() {
} }
lastExecutionCount = totalExecuted; lastExecutionCount = totalExecuted;
if (!isLocked()) { if (!isLocked()) {
firmwareError("Someone has stolen my lock"); firmwareError(OBD_PCM_Processor_Fault, "Someone has stolen my lock");
return; return;
} }
reentrantFlag = false; reentrantFlag = false;

View File

@ -134,7 +134,7 @@ int EventQueue::executeAll(efitime_t now) {
{ {
efiAssert(current->callback != NULL, "callback==null1", 0); efiAssert(current->callback != NULL, "callback==null1", 0);
if (++listIterationCounter > QUEUE_LENGTH_LIMIT) { if (++listIterationCounter > QUEUE_LENGTH_LIMIT) {
firmwareError("Is this list looped?"); firmwareError(OBD_PCM_Processor_Fault, "Is this list looped?");
return false; return false;
} }
if (current->momentX <= now) { if (current->momentX <= now) {

View File

@ -26,7 +26,7 @@ bool assertNotInList(T *head, T*element) {
LL_FOREACH(head, current) LL_FOREACH(head, current)
{ {
if (++counter > QUEUE_LENGTH_LIMIT) { if (++counter > QUEUE_LENGTH_LIMIT) {
firmwareError("Looped queue?"); firmwareError(OBD_PCM_Processor_Fault, "Looped queue?");
return false; return false;
} }
if (current == element) { if (current == element) {

View File

@ -182,11 +182,11 @@ void PwmConfig::weComplexInit(const char *msg, int phaseCount, float *switchTime
efiAssertVoid(periodNt != 0, "period is not initialized"); efiAssertVoid(periodNt != 0, "period is not initialized");
if (phaseCount == 0) { if (phaseCount == 0) {
firmwareError("signal length cannot be zero"); firmwareError(OBD_PCM_Processor_Fault, "signal length cannot be zero");
return; return;
} }
if (phaseCount > PWM_PHASE_MAX_COUNT) { if (phaseCount > PWM_PHASE_MAX_COUNT) {
firmwareError("too many phases in PWM"); firmwareError(OBD_PCM_Processor_Fault, "too many phases in PWM");
return; return;
} }
efiAssertVoid(waveCount > 0, "waveCount should be positive"); efiAssertVoid(waveCount > 0, "waveCount should be positive");

View File

@ -71,7 +71,7 @@ void scheduleTask(const bool monitorReuse, const char *prefix, scheduling_s *sch
if (monitorReuse) { if (monitorReuse) {
// for (int i = 0;i<100;i++) // for (int i = 0;i<100;i++)
printf("%s: isArmed? why? sch=%d cb=%d p=%d\r\n", prefix, (int) scheduling, (int)callback, (int)param); printf("%s: isArmed? why? sch=%d cb=%d p=%d\r\n", prefix, (int) scheduling, (int)callback, (int)param);
firmwareError("armored\r\n"); firmwareError(OBD_PCM_Processor_Fault, "armored\r\n");
} }
#endif /* EFI_SIMULATOR */ #endif /* EFI_SIMULATOR */
chVTResetI(&scheduling->timer); chVTResetI(&scheduling->timer);

View File

@ -440,7 +440,7 @@ static ALWAYS_INLINE void ignitionMathCalc(int rpm DECLARE_ENGINE_PARAMETER_S) {
float dwellMs = ENGINE(engineState.sparkDwell); float dwellMs = ENGINE(engineState.sparkDwell);
if (cisnan(dwellMs) || dwellMs < 0) { if (cisnan(dwellMs) || dwellMs < 0) {
firmwareError("invalid dwell: %f at %d", dwellMs, rpm); firmwareError(OBD_PCM_Processor_Fault, "invalid dwell: %f at %d", dwellMs, rpm);
return; return;
} }
} }

View File

@ -599,7 +599,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMET
break; break;
default: default:
firmwareError("initializeTriggerShape() not implemented: %d", triggerConfig->type); firmwareError(OBD_PCM_Processor_Fault, "initializeTriggerShape() not implemented: %d", triggerConfig->type);
return; return;
} }
wave.checkSwitchTimes(getSize()); wave.checkSwitchTimes(getSize());

View File

@ -62,7 +62,7 @@ void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(uint32_t index,
nextStep(state, shape, i, triggerConfig PASS_ENGINE_PARAMETER); nextStep(state, shape, i, triggerConfig PASS_ENGINE_PARAMETER);
} }
if (state->getTotalRevolutionCounter() != 3) { if (state->getTotalRevolutionCounter() != 3) {
firmwareError("sync failed/wrong gap parameters trigger=%s", getTrigger_type_e(engineConfiguration->trigger.type)); firmwareError(OBD_PCM_Processor_Fault, "sync failed/wrong gap parameters trigger=%s", getTrigger_type_e(engineConfiguration->trigger.type));
return; return;
} }
@ -79,6 +79,6 @@ uint32_t TriggerStimulatorHelper::doFindTrigger(TriggerShape * shape,
if (state->shaft_is_synchronized) if (state->shaft_is_synchronized)
return i; return i;
} }
firmwareError("findTriggerZeroEventIndex() failed"); firmwareError(OBD_PCM_Processor_Fault, "findTriggerZeroEventIndex() failed");
return EFI_ERROR_CODE; return EFI_ERROR_CODE;
} }

View File

@ -303,7 +303,7 @@ void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const waveIndex, trig
efiAssertVoid(angle > 0, "angle should be positive"); efiAssertVoid(angle > 0, "angle should be positive");
if (size > 0) { if (size > 0) {
if (angle <= previousAngle) { if (angle <= previousAngle) {
firmwareError("invalid angle order: %f and %f, size=%d", angle, previousAngle, size); firmwareError(OBD_PCM_Processor_Fault, "invalid angle order: %f and %f, size=%d", angle, previousAngle, size);
return; return;
} }
} }
@ -314,7 +314,7 @@ void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const waveIndex, trig
single_wave_s *wave = &this->wave.waves[i]; single_wave_s *wave = &this->wave.waves[i];
if (wave->pinStates == NULL) { if (wave->pinStates == NULL) {
firmwareError("wave pinStates is NULL"); firmwareError(OBD_PCM_Processor_Fault, "wave pinStates is NULL");
return; return;
} }
wave->pinStates[0] = initialState[i]; wave->pinStates[0] = initialState[i];
@ -328,7 +328,7 @@ void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const waveIndex, trig
int exactMatch = wave.findAngleMatch(angle, size); int exactMatch = wave.findAngleMatch(angle, size);
if (exactMatch != EFI_ERROR_CODE) { if (exactMatch != EFI_ERROR_CODE) {
firmwareError("same angle: not supported"); firmwareError(OBD_PCM_Processor_Fault, "same angle: not supported");
return; return;
} }
@ -346,7 +346,7 @@ void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const waveIndex, trig
isFrontEvent[index] = TV_RISE == stateParam; isFrontEvent[index] = TV_RISE == stateParam;
if (index != size) { if (index != size) {
firmwareError("are we ever here?"); firmwareError(OBD_PCM_Processor_Fault, "are we ever here?");
} }
// int index = size; // int index = size;

View File

@ -161,7 +161,7 @@ void doSlowAdc(void) {
if (ADC_SLOW_DEVICE.state != ADC_READY && if (ADC_SLOW_DEVICE.state != ADC_READY &&
ADC_SLOW_DEVICE.state != ADC_COMPLETE && ADC_SLOW_DEVICE.state != ADC_COMPLETE &&
ADC_SLOW_DEVICE.state != ADC_ERROR) { ADC_SLOW_DEVICE.state != ADC_ERROR) {
// todo: why and when does this happen? firmwareError("ADC slow not ready?"); // todo: why and when does this happen? firmwareError(OBD_PCM_Processor_Fault, "ADC slow not ready?");
slowAdc.errorsCount++; slowAdc.errorsCount++;
chSysUnlockFromIsr() chSysUnlockFromIsr()
; ;
@ -194,7 +194,7 @@ static void pwmpcb_fast(PWMDriver *pwmp) {
ADC_FAST_DEVICE.state != ADC_COMPLETE && ADC_FAST_DEVICE.state != ADC_COMPLETE &&
ADC_FAST_DEVICE.state != ADC_ERROR) { ADC_FAST_DEVICE.state != ADC_ERROR) {
fastAdc.errorsCount++; fastAdc.errorsCount++;
// todo: when? why? firmwareError("ADC fast not ready?"); // todo: when? why? firmwareError(OBD_PCM_Processor_Fault, "ADC fast not ready?");
chSysUnlockFromIsr() chSysUnlockFromIsr()
; ;
return; return;
@ -333,7 +333,7 @@ ioportid_t getAdcChannelPort(adc_channel_e hwChannel) {
case ADC_CHANNEL_IN15: case ADC_CHANNEL_IN15:
return GPIOC; return GPIOC;
default: default:
firmwareError("Unknown hw channel %d", hwChannel); firmwareError(OBD_PCM_Processor_Fault, "Unknown hw channel %d", hwChannel);
return NULL; return NULL;
} }
} }
@ -384,7 +384,7 @@ int getAdcChannelPin(adc_channel_e hwChannel) {
case ADC_CHANNEL_IN15: case ADC_CHANNEL_IN15:
return 5; return 5;
default: default:
firmwareError("Unknown hw channel %d", hwChannel); firmwareError(OBD_PCM_Processor_Fault, "Unknown hw channel %d", hwChannel);
return -1; return -1;
} }
} }
@ -512,7 +512,7 @@ static void addChannel(const char *name, adc_channel_e setting, adc_channel_mode
} }
if (adcHwChannelEnabled[setting] != ADC_OFF) { if (adcHwChannelEnabled[setting] != ADC_OFF) {
getPinNameByAdcChannel(setting, errorMsgBuff); getPinNameByAdcChannel(setting, errorMsgBuff);
firmwareError("ADC mapping error: input %s for %s already used by %s?", errorMsgBuff, name, adcHwChannelUsage[setting]); firmwareError(OBD_PCM_Processor_Fault, "ADC mapping error: input %s for %s already used by %s?", errorMsgBuff, name, adcHwChannelUsage[setting]);
} }
adcHwChannelUsage[setting] = name; adcHwChannelUsage[setting] = name;
@ -547,9 +547,9 @@ static void configureInputs(void) {
void initAdcInputs(bool boardTestMode) { void initAdcInputs(bool boardTestMode) {
printMsg(&logger, "initAdcInputs()"); printMsg(&logger, "initAdcInputs()");
if (ADC_BUF_DEPTH_FAST > MAX_ADC_GRP_BUF_DEPTH) if (ADC_BUF_DEPTH_FAST > MAX_ADC_GRP_BUF_DEPTH)
firmwareError("ADC_BUF_DEPTH_FAST too high"); firmwareError(OBD_PCM_Processor_Fault, "ADC_BUF_DEPTH_FAST too high");
if (ADC_BUF_DEPTH_SLOW > MAX_ADC_GRP_BUF_DEPTH) if (ADC_BUF_DEPTH_SLOW > MAX_ADC_GRP_BUF_DEPTH)
firmwareError("ADC_BUF_DEPTH_SLOW too high"); firmwareError(OBD_PCM_Processor_Fault, "ADC_BUF_DEPTH_SLOW too high");
configureInputs(); configureInputs();

View File

@ -34,7 +34,7 @@ static digital_input_s * finddigital_input_s(ICUDriver *driver) {
return &registeredIcus.elements[i]; return &registeredIcus.elements[i];
} }
} }
firmwareError("reader not found"); firmwareError(OBD_PCM_Processor_Fault, "reader not found");
return (digital_input_s *) NULL; return (digital_input_s *) NULL;
} }
@ -60,7 +60,7 @@ static void icuPeriordCallBack(ICUDriver *driver) {
static uint32_t getAlternateFunctions(ICUDriver *driver) { static uint32_t getAlternateFunctions(ICUDriver *driver) {
if (driver == NULL) { if (driver == NULL) {
firmwareError("getAlternateFunctions(NULL)"); firmwareError(OBD_PCM_Processor_Fault, "getAlternateFunctions(NULL)");
return 0xffffffff; return 0xffffffff;
} }
#if STM32_ICU_USE_TIM1 #if STM32_ICU_USE_TIM1
@ -88,7 +88,7 @@ static uint32_t getAlternateFunctions(ICUDriver *driver) {
return GPIO_AF_TIM9; return GPIO_AF_TIM9;
} }
#endif #endif
firmwareError("No such driver"); firmwareError(OBD_PCM_Processor_Fault, "No such driver");
return 0xffffffff; return 0xffffffff;
} }
@ -107,7 +107,7 @@ icuchannel_t getInputCaptureChannel(brain_pin_e hwPin) {
case GPIOE_11: case GPIOE_11:
return ICU_CHANNEL_2; return ICU_CHANNEL_2;
default: default:
firmwareError("Unexpected hw pin in getInputCaptureChannel %d", hwPin); firmwareError(OBD_PCM_Processor_Fault, "Unexpected hw pin in getInputCaptureChannel %d", hwPin);
return ICU_CHANNEL_1; return ICU_CHANNEL_1;
} }
} }

View File

@ -36,7 +36,7 @@ void initOutputPinExt(const char *msg, OutputPin *outputPin, ioportid_t port, ui
* here we check if another physical pin is already assigned to this logical output * here we check if another physical pin is already assigned to this logical output
*/ */
// todo: need to clear '&outputs' in io_pins.c // todo: need to clear '&outputs' in io_pins.c
firmwareError("outputPin [%s] already assigned to %x%d", msg, outputPin->port, outputPin->pin); firmwareError(OBD_PCM_Processor_Fault, "outputPin [%s] already assigned to %x%d", msg, outputPin->port, outputPin->pin);
return; return;
} }
outputPin->currentLogicValue = INITIAL_PIN_STATE; outputPin->currentLogicValue = INITIAL_PIN_STATE;

View File

@ -106,7 +106,7 @@ SPIDriver * getSpiDevice(spi_device_e spiDevice) {
return &SPID3; return &SPID3;
} }
#endif #endif
firmwareError("Unexpected SPI device: %d", spiDevice); firmwareError(OBD_PCM_Processor_Fault, "Unexpected SPI device: %d", spiDevice);
return NULL; return NULL;
} }
#endif #endif

View File

@ -64,7 +64,7 @@ ioportid_t getHwPort(brain_pin_e brainPin) {
if (brainPin == GPIO_UNASSIGNED) if (brainPin == GPIO_UNASSIGNED)
return GPIO_NULL; return GPIO_NULL;
if (brainPin > GPIO_UNASSIGNED || brainPin < 0) { if (brainPin > GPIO_UNASSIGNED || brainPin < 0) {
firmwareError("Invalid brain_pin_e: %d", brainPin); firmwareError(OBD_PCM_Processor_Fault, "Invalid brain_pin_e: %d", brainPin);
return GPIO_NULL; return GPIO_NULL;
} }
return PORTS[brainPin / PORT_SIZE]; return PORTS[brainPin / PORT_SIZE];
@ -74,7 +74,7 @@ ioportmask_t getHwPin(brain_pin_e brainPin) {
if (brainPin == GPIO_UNASSIGNED) if (brainPin == GPIO_UNASSIGNED)
return EFI_ERROR_CODE; return EFI_ERROR_CODE;
if (brainPin > GPIO_UNASSIGNED || brainPin < 0) { if (brainPin > GPIO_UNASSIGNED || brainPin < 0) {
firmwareError("Invalid brain_pin_e: %d", brainPin); firmwareError(OBD_PCM_Processor_Fault, "Invalid brain_pin_e: %d", brainPin);
return EFI_ERROR_CODE; return EFI_ERROR_CODE;
} }
return brainPin % PORT_SIZE; return brainPin % PORT_SIZE;

View File

@ -116,7 +116,7 @@ static uint32_t getExtMode(ioportid_t port) {
} else if (port == GPIOF) { } else if (port == GPIOF) {
return EXT_MODE_GPIOF; return EXT_MODE_GPIOF;
} }
firmwareError("Unsupported %d", port); firmwareError(OBD_PCM_Processor_Fault, "Unsupported %d", port);
return 0; return 0;
} }

View File

@ -180,7 +180,7 @@ void lcd_HD44780_init(Logging *sharedLogger) {
addConsoleAction("lcdinfo", lcdInfo); addConsoleAction("lcdinfo", lcdInfo);
if (engineConfiguration->displayMode > DM_HD44780_OVER_PCF8574) { if (engineConfiguration->displayMode > DM_HD44780_OVER_PCF8574) {
firmwareError("Unexpected displayMode %d", engineConfiguration->displayMode); firmwareError(OBD_PCM_Processor_Fault, "Unexpected displayMode %d", engineConfiguration->displayMode);
return; return;
} }

View File

@ -76,7 +76,7 @@ static void callback(GPTDriver *gptp) {
(void)gptp; (void)gptp;
timerCallbackCounter++; timerCallbackCounter++;
if (globalTimerCallback == NULL) { if (globalTimerCallback == NULL) {
firmwareError("NULL globalTimerCallback"); firmwareError(OBD_PCM_Processor_Fault, "NULL globalTimerCallback");
return; return;
} }
isTimerPending = false; isTimerPending = false;
@ -97,7 +97,7 @@ static void usTimerWatchDog(void) {
if (getTimeNowNt() >= lastSetTimerTimeNt + 2 * CORE_CLOCK) { if (getTimeNowNt() >= lastSetTimerTimeNt + 2 * CORE_CLOCK) {
strcpy(buff, "no_event"); strcpy(buff, "no_event");
itoa10(&buff[8], lastSetTimerValue); itoa10(&buff[8], lastSetTimerValue);
firmwareError(buff); firmwareError(OBD_PCM_Processor_Fault, buff);
return; return;
} }

View File

@ -80,7 +80,7 @@ static int getPortIndex(ioportid_t port) {
if (port == GPIOH) if (port == GPIOH)
return 6; return 6;
#endif /* defined(STM32F4XX) */ #endif /* defined(STM32F4XX) */
firmwareError("unknown port"); firmwareError(OBD_PCM_Processor_Fault, "unknown port");
return -1; return -1;
} }
@ -197,7 +197,7 @@ const char * getPinFunction(brain_input_pin_e brainPin) {
*/ */
void mySetPadMode(const char *msg, ioportid_t port, ioportmask_t pin, iomode_t mode) { void mySetPadMode(const char *msg, ioportid_t port, ioportmask_t pin, iomode_t mode) {
if (!initialized) { if (!initialized) {
firmwareError("repository not initialized"); firmwareError(OBD_PCM_Processor_Fault, "repository not initialized");
return; return;
} }
if (port == GPIO_NULL) if (port == GPIO_NULL)
@ -216,7 +216,7 @@ void mySetPadMode(const char *msg, ioportid_t port, ioportmask_t pin, iomode_t m
* connected, so the warning is never displayed on the console and that's quite a problem! * connected, so the warning is never displayed on the console and that's quite a problem!
*/ */
// warning(OBD_PCM_Processor_Fault, "%s%d req by %s used by %s", portname(port), pin, msg, PIN_USED[index]); // warning(OBD_PCM_Processor_Fault, "%s%d req by %s used by %s", portname(port), pin, msg, PIN_USED[index]);
firmwareError("%s%d req by %s used by %s", portname(port), pin, msg, PIN_USED[index]); firmwareError(OBD_PCM_Processor_Fault, "%s%d req by %s used by %s", portname(port), pin, msg, PIN_USED[index]);
return; return;
} }
markUsed(index, msg); markUsed(index, msg);
@ -250,7 +250,7 @@ void registedFundamentralIoPin(char *msg, ioportid_t port, ioportmask_t pin, iom
if (PIN_USED[index] != NULL) { if (PIN_USED[index] != NULL) {
print("!!!!!!!!!!!!! Already used [%s] %d\r\n", msg, pin); print("!!!!!!!!!!!!! Already used [%s] %d\r\n", msg, pin);
print("!!!!!!!!!!!!! Already used by [%s]\r\n", PIN_USED[index]); print("!!!!!!!!!!!!! Already used by [%s]\r\n", PIN_USED[index]);
firmwareError("pin already used"); firmwareError(OBD_PCM_Processor_Fault, "pin already used");
return; return;
} }
markUsed(index, msg); markUsed(index, msg);

View File

@ -114,7 +114,7 @@ static ICUDriver *turnOnTriggerInputPin(brain_pin_e hwPin, ICUConfig *icucfg) {
icuEnable(driver); icuEnable(driver);
} else { } else {
// we would be here for example if same pin is used for multiple input capture purposes // we would be here for example if same pin is used for multiple input capture purposes
firmwareError("ICU unexpected state [%s]", hwPortname(hwPin)); firmwareError(OBD_PCM_Processor_Fault, "ICU unexpected state [%s]", hwPortname(hwPin));
} }
} }
return driver; return driver;

View File

@ -260,7 +260,7 @@ void chDbgStackOverflowPanic(Thread *otp) {
} }
// todo: why is this method here and not in error_handling.cpp ? // todo: why is this method here and not in error_handling.cpp ?
void firmwareError(const char *errorMsg, ...) { void firmwareError(obd_code_e code, const char *errorMsg, ...) {
if (hasFirmwareErrorFlag) if (hasFirmwareErrorFlag)
return; return;
ON_FATAL_ERROR() ON_FATAL_ERROR()
@ -293,5 +293,5 @@ int getRusEfiVersion(void) {
return 123; // this is here to make the compiler happy about the unused array return 123; // this is here to make the compiler happy about the unused array
if (UNUSED_CCM_SIZE[0] * 0 != 0) if (UNUSED_CCM_SIZE[0] * 0 != 0)
return 3211; // this is here to make the compiler happy about the unused array return 3211; // this is here to make the compiler happy about the unused array
return 20161009; return 20161010;
} }

View File

@ -51,7 +51,7 @@ static bool intermediateLoggingBufferInited = false;
*/ */
static ALWAYS_INLINE bool validateBuffer(Logging *logging, uint32_t extraLen) { static ALWAYS_INLINE bool validateBuffer(Logging *logging, uint32_t extraLen) {
if (logging->buffer == NULL) { if (logging->buffer == NULL) {
firmwareError("Logging not initialized: %s", logging->name); firmwareError(OBD_PCM_Processor_Fault, "Logging not initialized: %s", logging->name);
return true; return true;
} }
@ -116,7 +116,7 @@ static void vappendPrintfI(Logging *logging, const char *fmt, va_list arg) {
void vappendPrintf(Logging *logging, const char *fmt, va_list arg) { void vappendPrintf(Logging *logging, const char *fmt, va_list arg) {
efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#5b"); efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#5b");
if (!intermediateLoggingBufferInited) { if (!intermediateLoggingBufferInited) {
firmwareError("intermediateLoggingBufferInited not inited!"); firmwareError(OBD_PCM_Processor_Fault, "intermediateLoggingBufferInited not inited!");
return; return;
} }
int wasLocked = lockAnyContext(); int wasLocked = lockAnyContext();
@ -240,7 +240,7 @@ void appendMsgPostfix(Logging *logging) {
void resetLogging(Logging *logging) { void resetLogging(Logging *logging) {
char *buffer = logging->buffer; char *buffer = logging->buffer;
if (buffer == NULL) { if (buffer == NULL) {
firmwareError("Null buffer: %s", logging->name); firmwareError(OBD_PCM_Processor_Fault, "Null buffer: %s", logging->name);
return; return;
} }
logging->linePointer = buffer; logging->linePointer = buffer;

View File

@ -83,7 +83,7 @@ int histogramGetIndex(int64_t value) {
*/ */
void initHistogram(histogram_s *h, const char *name) { void initHistogram(histogram_s *h, const char *name) {
if (efiStrlen(name) > sizeof(h->name) - 1) { if (efiStrlen(name) > sizeof(h->name) - 1) {
firmwareError("Histogram name [%s] too long", name); firmwareError(OBD_PCM_Processor_Fault, "Histogram name [%s] too long", name);
} }
strcpy(h->name, name); strcpy(h->name, name);
h->total_value = 0; h->total_value = 0;

View File

@ -183,7 +183,7 @@ int warning(obd_code_e code, const char *fmt, ...) {
bool hasFirmwareErrorFlag = false; bool hasFirmwareErrorFlag = false;
void firmwareError(const char *fmt, ...) { void firmwareError(obd_code_e code, const char *fmt, ...) {
printf(fmt); printf(fmt);
exit(-1); exit(-1);
} }

View File

@ -34,7 +34,7 @@ float getLEValue(Engine *engine, calc_stack_t *s, le_action_e action) {
case LE_METHOD_FAN_OFF_SETTING: case LE_METHOD_FAN_OFF_SETTING:
return 0; return 0;
default: default:
firmwareError("No mock value for %d", action); firmwareError(OBD_PCM_Processor_Fault, "No mock value for %d", action);
return NAN; return NAN;
} }
} }

View File

@ -136,7 +136,7 @@ void logMsg(const char *format, ...) {
// fclose(fp); // fclose(fp);
} }
void firmwareError(const char *fmt, ...) { void firmwareError(obd_code_e code, const char *fmt, ...) {
printf("firmwareError [%s]\r\n", fmt); printf("firmwareError [%s]\r\n", fmt);
va_list ap; va_list ap;