rusefi-1/firmware/development/engine_emulator.cpp

107 lines
2.1 KiB
C++
Raw Normal View History

2014-08-29 07:52:33 -07:00
/**
* @file engine_emulator.cpp
* @brief Entry point for all the emulation and analysis code
*
* @date Mar 15, 2013
2015-01-12 15:04:10 -08:00
* @author Andrey Belomutskiy, (c) 2012-2015
2014-08-29 07:52:33 -07:00
*/
#include "main.h"
#include "engine_emulator.h"
2014-09-07 17:04:36 -07:00
#include "advance_map.h"
#include "fuel_math.h"
2014-08-29 07:52:33 -07:00
#include "status_loop.h"
#include "wave_analyzer.h"
#include "pin_repository.h"
2014-11-05 09:03:15 -08:00
#include "pwm_generator_logic.h"
2014-09-07 17:04:36 -07:00
2014-08-29 07:52:33 -07:00
#include "poten.h"
#include "trigger_emulator.h"
2014-11-24 09:03:09 -08:00
extern bool hasFirmwareErrorFlag;
2014-08-29 07:52:33 -07:00
static THD_WORKING_AREA(eeThreadStack, UTILITY_THREAD_STACK_SIZE);
#define DIAG_PORT GPIOD
#define DIAG_PIN 0
void setDiag(int value) {
print("Setting diag: %d\r\n", value);
palWritePad(DIAG_PORT, DIAG_PIN, value);
}
#define PERIOD 3000
2014-11-07 18:03:15 -08:00
void emulate(Engine *engine) {
2014-08-29 07:52:33 -07:00
print("Emulating...\r\n");
setDiag(1);
chThdSleep(1);
setFullLog(1);
for (int i = 400; i <= 1300; i++) {
if (i % 50 != 0)
continue;
2014-11-07 18:03:15 -08:00
setTriggerEmulatorRPM(i, engine);
2014-08-29 07:52:33 -07:00
chThdSleepMilliseconds(PERIOD);
}
2014-11-07 18:03:15 -08:00
setTriggerEmulatorRPM(0, engine);
2014-08-29 07:52:33 -07:00
setFullLog(0);
setDiag(0);
chThdSleep(1);
print("Emulation DONE!\r\n");
}
static int flag = FALSE;
2014-11-07 18:03:15 -08:00
static msg_t eeThread(Engine *engine) {
2014-08-29 07:52:33 -07:00
chRegSetThreadName("Engine");
while (TRUE) {
while (!flag)
chThdSleepMilliseconds(200);
flag = FALSE;
2014-11-07 18:03:15 -08:00
emulate(engine);
2014-08-29 07:52:33 -07:00
}
#if defined __GNUC__
return (msg_t)NULL;
#endif
}
void startEmulator(void) {
flag = TRUE;
}
2014-11-07 18:03:15 -08:00
//static void printAdvance(int rpm, int maf100) {
// float advance = getAdvance(rpm, maf100 / 100.0);
// print("advance for %d rpm %d maf100: %f\r\n", rpm, maf100, advance);
//}
2014-08-29 07:52:33 -07:00
2014-11-07 18:03:15 -08:00
static void initECUstimulator(Engine *engine) {
2014-08-29 07:52:33 -07:00
mySetPadMode("TEN", DIAG_PORT, DIAG_PIN,
PAL_MODE_OUTPUT_PUSHPULL);
addConsoleActionI("diag", setDiag);
addConsoleAction("emu", startEmulator);
2014-11-07 18:03:15 -08:00
// addConsoleActionII("ad", printAdvance);
2014-08-29 07:52:33 -07:00
setDiag(1);
2014-11-07 18:03:15 -08:00
chThdCreateStatic(eeThreadStack, sizeof(eeThreadStack), NORMALPRIO, (tfunc_t) eeThread, engine);
2014-08-29 07:52:33 -07:00
}
2015-01-14 16:03:39 -08:00
void initEngineEmulator(Logging *sharedLogger, Engine *engine) {
2014-08-29 07:52:33 -07:00
if (hasFirmwareError())
return;
#if EFI_POTENTIOMETER
2015-01-15 13:03:51 -08:00
initPotentiometers(sharedLogger, &engine->engineConfiguration->bc);
2014-08-29 07:52:33 -07:00
#endif /* EFI_POTENTIOMETER */
//initECUstimulator();
2015-01-14 16:03:39 -08:00
initTriggerEmulator(sharedLogger, engine);
2014-08-29 07:52:33 -07:00
}