From 1e90d175f4ab5fe74e7a3a8bb9abea83baa05fc8 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Mon, 26 Jan 2015 18:04:19 -0600 Subject: [PATCH] auto-sync --- firmware/config/engines/sachs.cpp | 16 ++++++++++++++++ firmware/console/status_loop.cpp | 14 ++++++++++---- firmware/controllers/engine_controller.cpp | 18 ++++++++++++++++++ firmware/controllers/settings.cpp | 2 ++ 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/firmware/config/engines/sachs.cpp b/firmware/config/engines/sachs.cpp index 09f4e44758..83d04c8c3e 100644 --- a/firmware/config/engines/sachs.cpp +++ b/firmware/config/engines/sachs.cpp @@ -9,10 +9,18 @@ */ #include "sachs.h" +#include "allsensors.h" void setSachs(engine_configuration_s *engineConfiguration) { engineConfiguration->displacement = 0.1; // 100cc + engineConfiguration->hasIatSensor = false; + engineConfiguration->hasMapSensor = false; + engineConfiguration->hasBaroSensor = false; + engineConfiguration->hasAfrSensor = false; + engineConfiguration->hasCltSensor = false; + + // Frankenstein analog input #1: PA1 adc1 // Frankenstein analog input #2: PA3 adc3 // Frankenstein analog input #3: PC3 adc13 @@ -26,6 +34,14 @@ void setSachs(engine_configuration_s *engineConfiguration) { // Frankenstein analog input #11: PC4 adc14 // Frankenstein analog input #12: PC5 adc15 + engineConfiguration->tpsAdcChannel = EFI_ADC_1; + + /** + * TPS 0% 0.9v + * TPS 100% 2.34v + */ + engineConfiguration->tpsMin = convertVoltageTo10bitADC(1.250); + engineConfiguration->tpsMax = convertVoltageTo10bitADC(4.538); // Frankenstein: low side - out #1: PC14 diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 68f0567eea..f55fd65f8e 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -426,10 +426,7 @@ extern engine_pins_s enginePins; static OutputPin *leds[] = { &warningPin, &runningPin, &enginePins.errorLedPin, &communicationPin, &checkEnginePin }; -/** - * This method would blink all the LEDs just to test them - */ -static void initialLedsBlink(void) { +static void initStatisLeds() { #if EFI_PROD_CODE outputPinRegister("communication status 1", &communicationPin, LED_COMMUNICATION_PORT, LED_COMMUNICATION_PIN); #endif @@ -438,7 +435,12 @@ static void initialLedsBlink(void) { 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 */ +} +/** + * This method would blink all the LEDs just to test them + */ +static void initialLedsBlink(void) { int size = sizeof(leds) / sizeof(leds[0]); for (int i = 0; i < size; i++) leds[i]->setValue(1); @@ -450,6 +452,9 @@ static void initialLedsBlink(void) { } #if EFI_PROD_CODE || defined(__DOXYGEN__) +/** + * this thread has a lower-then-usual stack size so we cannot afford *print* methods here + */ static void blinkingThread(void *arg) { (void) arg; chRegSetThreadName("communication blinking"); @@ -616,6 +621,7 @@ void startStatusThreads(Engine *engine) { chThdCreateStatic(lcdThreadStack, sizeof(lcdThreadStack), NORMALPRIO, (tfunc_t) lcdThread, engine); chThdCreateStatic(tsThreadStack, sizeof(tsThreadStack), NORMALPRIO, (tfunc_t) tsStatusThread, engine); #if EFI_PROD_CODE || defined(__DOXYGEN__) + initStatisLeds(); chThdCreateStatic(blinkingStack, sizeof(blinkingStack), NORMALPRIO, (tfunc_t) blinkingThread, NULL); #endif /* EFI_PROD_CODE */ } diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 2a01028784..d836c661a6 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -275,6 +275,22 @@ static THD_WORKING_AREA(csThreadStack, UTILITY_THREAD_STACK_SIZE); // declare th #define isOutOfBounds(offset) ((offset<0) || (offset) >= sizeof(engine_configuration_s)) +static void setShort(const int offset, const int value) { + if (isOutOfBounds(offset)) + return; + uint16_t *ptr = (uint16_t *) (&((char *) engine->engineConfiguration)[offset]); + *ptr = (uint16_t)value; + scheduleMsg(&logger, "setting short @%d to %d", offset, (uint16_t)value); +} + +static void getShort(int offset) { + if (isOutOfBounds(offset)) + return; + uint16_t *ptr = (uint16_t *) (&((char *) engine->engineConfiguration)[offset]); + uint16_t value = *ptr; + scheduleMsg(&logger, "short @%d is %d", offset, value); +} + static void setInt(const int offset, const int value) { if (isOutOfBounds(offset)) return; @@ -409,8 +425,10 @@ void initEngineContoller(Logging *sharedLogger, Engine *engine) { addConsoleActionSS("set_float", (VoidCharPtrCharPtr) setFloat); addConsoleActionII("set_int", (VoidIntInt) setInt); + addConsoleActionII("set_short", (VoidIntInt) setShort); addConsoleActionI("get_float", getFloat); addConsoleActionI("get_int", getInt); + addConsoleActionI("get_short", getShort); #if EFI_FSIO || defined(__DOXYGEN__) initFsioImpl(sharedLogger, engine); diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 796b26a222..264b773626 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -156,6 +156,8 @@ const char* getConfigurationName(engine_type_e engineType) { return "BMWe34"; case TEST_ENGINE: return "Test"; + case SACHS: + return "SACHS"; default: firmwareError("Unexpected: engineType %d", engineType); return NULL;