//------------------------------------------------------------------------------ static void loopMain(void) { tOplkError ret = kErrorOk; char cKey = 0; BOOL fExit = FALSE; #if !defined(CONFIG_KERNELSTACK_DIRECTLINK) #if defined(CONFIG_USE_SYNCTHREAD) system_startSyncThread(processSync); #endif #endif // start processing ret = oplk_execNmtCommand(kNmtEventSwReset); if (ret != kErrorOk) { return; } printf("start POWERLINK Stack... ok\n"); printf("Digital I/O interface with openPOWERLINK is ready!\n"); printf("\n-------------------------------\n"); printf("Press Esc to leave the programm\n"); printf("Press r to reset the node\n"); printf("Press i to increase digital input\n"); printf("Press d to decrease digital input\n"); printf("Press p to print digital outputs\n"); printf("-------------------------------\n\n"); setupInputs(); // wait for key hit while (!fExit) { if (console_kbhit()) { cKey = (BYTE)console_getch(); switch (cKey) { case 'r': ret = oplk_execNmtCommand(kNmtEventSwReset); if (ret != kErrorOk) { fExit = TRUE; } break; case 'i': increaseInputs(); break; case 'd': decreaseInputs(); break; case 'p': printOutputs(); break; case 0x1B: fExit = TRUE; break; default: break; } } if (system_getTermSignalState() == TRUE) { fExit = TRUE; printf("Received termination signal, exiting...\n"); } if (oplk_checkKernelStack() == FALSE) { fExit = TRUE; fprintf(stderr, "Kernel stack has gone! Exiting...\n"); } #if defined(CONFIG_USE_SYNCTHREAD) || defined(CONFIG_KERNELSTACK_DIRECTLINK) system_msleep(100); #else processSync(); #endif } #if (TARGET_SYSTEM == _WIN32_) printf("Press Enter to quit!\n"); console_getch(); #endif return; }
/** * @brief Prints current engine configuration to human-readable console. */ void printConfiguration(engine_configuration_s *engineConfiguration) { scheduleMsg(&logger, "Template %s/%d trigger %s/%s/%d", getConfigurationName(engineConfiguration->engineType), engineConfiguration->engineType, getTrigger_type_e(engineConfiguration->trigger.type), getEngine_load_mode_e(engineConfiguration->algorithm), engineConfiguration->algorithm); scheduleMsg(&logger, "configurationVersion=%d", getGlobalConfigurationVersion()); for (int k = 0; k < FUEL_LOAD_COUNT; k++) { // print("line %d (%f): ", k, engineConfiguration->fuelKeyBins[k]); // for (int r = 0; r < FUEL_RPM_COUNT; r++) { // print("%f ", engineConfiguration->fuelTable[k][r]); // } // print("\r\n"); } // printFloatArray("RPM bin: ", config->fuelRpmBins, FUEL_RPM_COUNT); // // printFloatArray("Y bin: ", config->fuelLoadBins, FUEL_LOAD_COUNT); // // printFloatArray("CLT: ", config->cltFuelCorr, CLT_CURVE_SIZE); // printFloatArray("CLT bins: ", config->cltFuelCorrBins, CLT_CURVE_SIZE); // // printFloatArray("IAT: ", config->iatFuelCorr, IAT_CURVE_SIZE); // printFloatArray("IAT bins: ", config->iatFuelCorrBins, IAT_CURVE_SIZE); // // printFloatArray("vBatt: ", engineConfiguration->injector.battLagCorr, VBAT_INJECTOR_CURVE_SIZE); // printFloatArray("vBatt bins: ", engineConfiguration->injector.battLagCorrBins, VBAT_INJECTOR_CURVE_SIZE); scheduleMsg(&logger, "rpmHardLimit: %d/operationMode=%d", engineConfiguration->rpmHardLimit, engineConfiguration->operationMode); scheduleMsg(&logger, "globalTriggerAngleOffset=%f", engineConfiguration->globalTriggerAngleOffset); scheduleMsg(&logger, "=== cranking ==="); scheduleMsg(&logger, "crankingRpm: %d", engineConfiguration->cranking.rpm); scheduleMsg(&logger, "cranking injection %s", getInjection_mode_e(engineConfiguration->crankingInjectionMode)); if (engineConfiguration->useConstantDwellDuringCranking) { scheduleMsg(&logger, "ignitionDwellForCrankingMs=%f", engineConfiguration->ignitionDwellForCrankingMs); } else { scheduleMsg(&logger, "cranking charge charge angle=%f fire at %f", engineConfiguration->crankingChargeAngle, engineConfiguration->crankingTimingAngle); } scheduleMsg(&logger, "=== ignition ==="); scheduleMsg(&logger, "ignitionMode: %s/enabled=%s", getIgnition_mode_e(engineConfiguration->ignitionMode), boolToString(engineConfiguration->isIgnitionEnabled)); scheduleMsg(&logger, "timingMode: %s", getTiming_mode_e(engineConfiguration->timingMode)); if (engineConfiguration->timingMode == TM_FIXED) { scheduleMsg(&logger, "fixedModeTiming: %d", (int) engineConfiguration->fixedModeTiming); } scheduleMsg(&logger, "ignitionOffset=%f", engineConfiguration->ignitionOffset); scheduleMsg(&logger, "=== injection ==="); scheduleMsg(&logger, "injection %s offset=%f/enabled=%s", getInjection_mode_e(engineConfiguration->injectionMode), (double) engineConfiguration->injectionOffset, boolToString(engineConfiguration->isInjectionEnabled)); printOutputs(engineConfiguration); scheduleMsg(&logger, "map_avg=%s/mil=%s/fp=%s/ts=%s/wa=%s/it=%s/fastAdc=%s", boolToString(engineConfiguration->isMapAveragingEnabled), boolToString(engineConfiguration->isMilEnabled), boolToString(engineConfiguration->isFuelPumpEnabled), boolToString(engineConfiguration->isTunerStudioEnabled), boolToString(engineConfiguration->isWaveAnalyzerEnabled), boolToString(engineConfiguration->isIdleThreadEnabled), boolToString(boardConfiguration->isFastAdcEnabled)); scheduleMsg(&logger, "isManualSpinningMode=%s/isCylinderCleanupEnabled=%s", boolToString(engineConfiguration->isManualSpinningMode), boolToString(engineConfiguration->isCylinderCleanupEnabled)); scheduleMsg(&logger, "clutchUp@%s: %s", hwPortname(boardConfiguration->clutchUpPin), boolToString(engine->clutchUpState)); scheduleMsg(&logger, "clutchDown@%s: %s", hwPortname(boardConfiguration->clutchDownPin), boolToString(engine->clutchDownState)); scheduleMsg(&logger, "boardTestModeJumperPin: %s/nesting=%d", hwPortname(boardConfiguration->boardTestModeJumperPin), maxNesting); scheduleMsg(&logger, "digitalPotentiometerSpiDevice %d", boardConfiguration->digitalPotentiometerSpiDevice); for (int i = 0; i < DIGIPOT_COUNT; i++) { scheduleMsg(&logger, "digitalPotentiometer CS%d %s", i, hwPortname(boardConfiguration->digitalPotentiometerChipSelect[i])); } #if EFI_PROD_CODE printSpiState(&logger, boardConfiguration); #endif /* EFI_PROD_CODE */ }