/** * This methods prints the message to whatever is configured as our primary console */ void print(const char *format, ...) { #if !EFI_UART_ECHO_TEST_MODE if (!isCommandLineConsoleReady()) { return; } va_list ap; va_start(ap, format); chvprintf((BaseSequentialStream*) getConsoleChannel(), format, ap); va_end(ap); #endif /* EFI_UART_ECHO_TEST_MODE */ }
/** * @brief Sends all pending data to dev console */ void updateDevConsoleState(Engine *engine) { if (!isCommandLineConsoleReady()) { return; } // looks like this is not needed anymore // checkIfShouldHalt(); printPending(); /** * this should go before the firmware error so that console can detect connection */ printSensors(&logger, false); #if EFI_PROD_CODE || defined(__DOXYGEN__) // todo: unify with simulator! if (hasFirmwareError()) { scheduleMsg(&logger, "FATAL error: %s", errorMessageBuffer); warningEnabled = false; scheduleLogging(&logger); return; } #endif #if (EFI_PROD_CODE && HAL_USE_ADC) || defined(__DOXYGEN__) printFullAdcReportIfNeeded(&logger); #endif if (!fullLog) { return; } systime_t nowSeconds = getTimeNowSeconds(); printInfo(nowSeconds); #if EFI_ENGINE_CONTROL || defined(__DOXYGEN__) int currentCkpEventCounter = getCrankEventCounter(); if (prevCkpEventCounter == currentCkpEventCounter && timeOfPreviousReport == nowSeconds) { return; } timeOfPreviousReport = nowSeconds; prevCkpEventCounter = currentCkpEventCounter; #else chThdSleepMilliseconds(200); #endif printState(); #if EFI_WAVE_ANALYZER printWave(&logger); #endif scheduleLogging(&logger); }
/** * @brief Reads a whole line from the input channel. * * @param[in] chp pointer to a @p BaseChannel object * @param[in] line pointer to the line buffer * @param[in] size buffer maximum length * @return The operation status. * @retval TRUE the channel was reset or CTRL-D pressed. * @retval FALSE operation successful. */ static bool getConsoleLine(BaseSequentialStream *chp, char *line, unsigned size) { char *p = line; while (true) { if (!isCommandLineConsoleReady()) { // we better do not read from USB serial before it is ready chThdSleepMilliseconds(10); continue; } short c = (short) streamGet(chp); onDataArrived(); #if defined(EFI_CONSOLE_UART_DEVICE) || defined(__DOXYGEN__) if (isCommandLineConsoleOverTTL()) { uint32_t flags; chSysLock() ; flags = chEvtGetAndClearFlagsI(&consoleEventListener); chSysUnlock() ; if (flags & SD_OVERRUN_ERROR) { // firmwareError(OBD_PCM_Processor_Fault, "serial overrun"); } } #endif #if EFI_UART_ECHO_TEST_MODE /** * That's test code - let's test connectivity */ consolePutChar((uint8_t) c); continue; #endif if (c < 0 || c == 4) { return true; } if (c == 8) { if (p != line) { // backspace consolePutChar((uint8_t) c); consolePutChar(0x20); consolePutChar((uint8_t) c); p--; } continue; } if (c == '\r') { consolePutChar('\r'); consolePutChar('\n'); *p = 0; return false; } if (c == '\n') { consolePutChar('\n'); *p = 0; return false; } if (c < 0x20) { continue; } if (p < line + size - 1) { consolePutChar((uint8_t) c); *p++ = (char) c; } } }