void lcd_HD44780_init(void) { initLogging(&logger, "HD44780 driver"); addConsoleAction("lcdinfo", lcdInfo); if (engineConfiguration->displayMode == DM_HD44780) { mySetPadMode("lcd RS", HD44780_PORT_RS, HD44780_PIN_RS, PAL_MODE_OUTPUT_PUSHPULL); mySetPadMode("lcd E", HD44780_PORT_E, HD44780_PIN_E, PAL_MODE_OUTPUT_PUSHPULL); mySetPadMode("lcd DB4", HD44780_PORT_DB4, HD44780_PIN_DB4, PAL_MODE_OUTPUT_PUSHPULL); mySetPadMode("lcd DB6", HD44780_PORT_DB5, HD44780_PIN_DB5, PAL_MODE_OUTPUT_PUSHPULL); mySetPadMode("lcd DB7", HD44780_PORT_DB6, HD44780_PIN_DB6, PAL_MODE_OUTPUT_PUSHPULL); mySetPadMode("lcd DB8", HD44780_PORT_DB7, HD44780_PIN_DB7, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(HD44780_PORT_RS, HD44780_PIN_RS, 0); palWritePad(HD44780_PORT_E, HD44780_PIN_E, 0); palWritePad(HD44780_PORT_DB4, HD44780_PIN_DB4, 0); palWritePad(HD44780_PORT_DB5, HD44780_PIN_DB5, 0); palWritePad(HD44780_PORT_DB6, HD44780_PIN_DB6, 0); palWritePad(HD44780_PORT_DB7, HD44780_PIN_DB7, 0); } // LCD needs some time to wake up chThdSleepMilliseconds(50); lcd_HD44780_write(LCD_2X16_RESET); chThdSleepMilliseconds(1); lcd_HD44780_write(0x30); lcd_HD44780_write(LCD_2X16_4_BIT_BUS); // 4 bit, 2 line chThdSleepMicroseconds(40); lcd_HD44780_write(LCD_2X16_4_BIT_BUS); // 4 bit, 2 line lcd_HD44780_write(0x80); chThdSleepMicroseconds(40); lcd_HD44780_write(0x00); // display and cursor control lcd_HD44780_write(0xC0); chThdSleepMicroseconds(40); lcd_HD44780_write(0x00); // display clear lcd_HD44780_write(0x01); chThdSleepMilliseconds(2); lcd_HD44780_write(0x00); // entry mode set lcd_HD44780_write(0x60); lcd_HD44780_set_position(0, 0); lcd_HD44780_print_string("rusefi here\n"); lcd_HD44780_print_string(__DATE__); }
static void lcdPrintf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); lcdLineStream.eos = 0; // reset chvprintf((BaseSequentialStream *) &lcdLineStream, fmt, ap); lcdLineStream.buffer[lcdLineStream.eos] = 0; // terminator va_end(ap); lcd_HD44780_print_string(lcdLineBuffer); }
void updateHD44780lcd(void) { lcd_HD44780_set_position(0, 9); /** * this would blink so that we know the LCD is alive */ if (getTimeNowSeconds() % 2 == 0) { lcd_HD44780_print_char('R'); } else { lcd_HD44780_print_char(' '); } lcd_HD44780_set_position(0, 10); char * ptr = itoa10(buffer, getRpm()); ptr[0] = 0; int len = ptr - buffer; for (int i = 0; i < 6 - len; i++) { lcd_HD44780_print_char(' '); } lcd_HD44780_print_string(buffer); if (hasFirmwareError()) { memcpy(buffer, getFirmwareError(), LCD_WIDTH); buffer[LCD_WIDTH] = 0; lcd_HD44780_set_position(1, 0); lcd_HD44780_print_string(buffer); return; } lcd_HD44780_set_position(1, 0); memset(buffer, ' ', LCD_WIDTH); memcpy(buffer, getWarninig(), LCD_WIDTH); buffer[LCD_WIDTH] = 0; lcd_HD44780_print_string(buffer); if (engineConfiguration->HD44780height < 3) { return; } int index = (getTimeNowSeconds() / 2) % (NUMBER_OF_DIFFERENT_LINES / 2); prepareCurrentSecondLine(index); buffer[LCD_WIDTH] = 0; lcd_HD44780_set_position(2, 0); lcd_HD44780_print_string(buffer); prepareCurrentSecondLine(index + NUMBER_OF_DIFFERENT_LINES / 2); buffer[LCD_WIDTH] = 0; lcd_HD44780_set_position(3, 0); lcd_HD44780_print_string(buffer); #if EFI_PROD_CODE dateToString(dateBuffer); lcd_HD44780_set_position(1, 0); lcd_HD44780_print_string(dateBuffer); #endif /* EFI_PROD_CODE */ }
void initHardware(Logging *logger, Engine *engine) { engine_configuration_s *engineConfiguration = engine->engineConfiguration; efiAssertVoid(engineConfiguration!=NULL, "engineConfiguration"); board_configuration_s *boardConfiguration = &engineConfiguration->bc; printMsg(logger, "initHardware()"); // todo: enable protection. it's disabled because it takes // 10 extra seconds to re-flash the chip //flashProtect(); chMtxInit(&spiMtx); #if EFI_HISTOGRAMS /** * histograms is a data structure for CPU monitor, it does not depend on configuration */ initHistogramsModule(); #endif /* EFI_HISTOGRAMS */ /** * This is so early because we want to init logger * which would be used while finding trigger synch index * while config read */ initTriggerDecoder(); /** * We need the LED_ERROR pin even before we read configuration */ initPrimaryPins(); if (hasFirmwareError()) { return; } initDataStructures(PASS_ENGINE_PARAMETER_F); #if EFI_INTERNAL_FLASH palSetPadMode(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN, PAL_MODE_INPUT_PULLUP); initFlash(engine); /** * this call reads configuration from flash memory or sets default configuration * if flash state does not look right. */ if (SHOULD_INGORE_FLASH()) { engineConfiguration->engineType = FORD_ASPIRE_1996; resetConfigurationExt(logger, engineConfiguration->engineType, engine); writeToFlash(); } else { readFromFlash(); } #else engineConfiguration->engineType = FORD_ASPIRE_1996; resetConfigurationExt(logger, engineConfiguration->engineType, engineConfiguration, engineConfiguration2, boardConfiguration); #endif /* EFI_INTERNAL_FLASH */ if (hasFirmwareError()) { return; } mySetPadMode2("board test", boardConfiguration->boardTestModeJumperPin, PAL_MODE_INPUT_PULLUP); bool isBoardTestMode_b = GET_BOARD_TEST_MODE_VALUE(); initAdcInputs(isBoardTestMode_b); if (isBoardTestMode_b) { // this method never returns initBoardTest(); } initRtc(); initOutputPins(); #if EFI_HIP_9011 initHip9011(); #endif /* EFI_HIP_9011 */ #if EFI_MAX_31855 initMax31855(boardConfiguration); #endif /* EFI_MAX_31855 */ #if EFI_CAN_SUPPORT initCan(); #endif /* EFI_CAN_SUPPORT */ // init_adc_mcp3208(&adcState, &SPID2); // requestAdcValue(&adcState, 0); // todo: figure out better startup logic initTriggerCentral(engine); #if EFI_SHAFT_POSITION_INPUT initShaftPositionInputCapture(); #endif /* EFI_SHAFT_POSITION_INPUT */ initSpiModules(boardConfiguration); #if EFI_FILE_LOGGING initMmcCard(); #endif /* EFI_FILE_LOGGING */ // initFixedLeds(); // initBooleanInputs(); #if EFI_UART_GPS initGps(); #endif #if ADC_SNIFFER initAdcDriver(); #endif #if EFI_HD44780_LCD // initI2Cmodule(); lcd_HD44780_init(); if (hasFirmwareError()) return; lcd_HD44780_print_string(VCS_VERSION); #endif /* EFI_HD44780_LCD */ addConsoleActionII("i2c", sendI2Cbyte); // while (true) { // for (int addr = 0x20; addr < 0x28; addr++) { // sendI2Cbyte(addr, 0); // int err = i2cGetErrors(&I2CD1); // print("I2C: err=%x from %d\r\n", err, addr); // chThdSleepMilliseconds(5); // sendI2Cbyte(addr, 255); // chThdSleepMilliseconds(5); // } // } printMsg(logger, "initHardware() OK!"); }
void lcdShowFatalMessage(char *message) { BUSY_WAIT_DELAY = TRUE; lcd_HD44780_set_position(0, 0); lcd_HD44780_print_string("fatal\n"); lcd_HD44780_print_string(message); }
void updateHD44780lcd(Engine *engine) { MenuItem *p = tree.topVisible; int screenY = 0; for (; screenY < tree.linesCount && p != NULL; screenY++) { lcd_HD44780_set_position(screenY, 0); char firstChar; if (p == tree.current) { if (p->callback != NULL) { firstChar = '!'; } else { firstChar = p->firstChild == NULL ? '*' : '>'; } } else { firstChar = ' '; } lcd_HD44780_print_char(firstChar); if (p->lcdLine == LL_STRING) { lcd_HD44780_print_string(p->text); } else { showLine(p->lcdLine, screenY); } fillWithSpaces(); p = p->next; } for (; screenY < tree.linesCount; screenY++) { lcd_HD44780_set_position(screenY, 0); fillWithSpaces(); } memcpy(buffer, getWarninig(), engineConfiguration->HD44780width); buffer[engineConfiguration->HD44780width] = 0; lcd_HD44780_set_position(engineConfiguration->HD44780height - 1, 0); lcd_HD44780_print_string(buffer); fillWithSpaces(); // // lcd_HD44780_set_position(0, 9); // /** // * this would blink so that we know the LCD is alive // */ // if (isEven) { // lcd_HD44780_print_char('R'); // } else { // lcd_HD44780_print_char(' '); // } // lcd_HD44780_set_position(0, 10); // // char * ptr = itoa10(buffer, getRpmE(engine)); // ptr[0] = 0; // int len = ptr - buffer; // for (int i = 0; i < 6 - len; i++) { // lcd_HD44780_print_char(' '); // } // lcd_HD44780_print_string(buffer); // // if (hasFirmwareError()) { // memcpy(buffer, getFirmwareError(), LCD_WIDTH); // buffer[LCD_WIDTH] = 0; // lcd_HD44780_set_position(1, 0); // lcd_HD44780_print_string(buffer); // return; // } // // lcd_HD44780_set_position(1, 0); // memset(buffer, ' ', LCD_WIDTH); // memcpy(buffer, getWarninig(), LCD_WIDTH); // buffer[LCD_WIDTH] = 0; // lcd_HD44780_print_string(buffer); // // if (engineConfiguration->HD44780height < 3) { // return; // } // // int index = (getTimeNowSeconds() / 2) % (NUMBER_OF_DIFFERENT_LINES / 2); // // prepareCurrentSecondLine(engine, index); // buffer[LCD_WIDTH] = 0; // lcd_HD44780_set_position(2, 0); // lcd_HD44780_print_string(buffer); // // prepareCurrentSecondLine(engine, index + NUMBER_OF_DIFFERENT_LINES / 2); // buffer[LCD_WIDTH] = 0; // lcd_HD44780_set_position(3, 0); // lcd_HD44780_print_string(buffer); // //#if EFI_PROD_CODE // dateToString(dateBuffer); // lcd_HD44780_set_position(1, 0); // lcd_HD44780_print_string(dateBuffer); //#endif /* EFI_PROD_CODE */ }
void initHardware(Logging *l) { efiAssertVoid(CUSTOM_IH_STACK, getRemainingStack(chThdGetSelfX()) > 256, "init h"); sharedLogger = l; engine_configuration_s *engineConfiguration = engine->engineConfigurationPtr; efiAssertVoid(CUSTOM_EC_NULL, engineConfiguration!=NULL, "engineConfiguration"); board_configuration_s *boardConfiguration = &engineConfiguration->bc; printMsg(sharedLogger, "initHardware()"); // todo: enable protection. it's disabled because it takes // 10 extra seconds to re-flash the chip //flashProtect(); chMtxObjectInit(&spiMtx); #if EFI_HISTOGRAMS /** * histograms is a data structure for CPU monitor, it does not depend on configuration */ initHistogramsModule(); #endif /* EFI_HISTOGRAMS */ /** * We need the LED_ERROR pin even before we read configuration */ initPrimaryPins(); if (hasFirmwareError()) { return; } #if EFI_INTERNAL_FLASH palSetPadMode(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN, PAL_MODE_INPUT_PULLUP); initFlash(sharedLogger); /** * this call reads configuration from flash memory or sets default configuration * if flash state does not look right. */ if (SHOULD_INGORE_FLASH()) { engineConfiguration->engineType = DEFAULT_ENGINE_TYPE; resetConfigurationExt(sharedLogger, engineConfiguration->engineType PASS_ENGINE_PARAMETER_SUFFIX); writeToFlashNow(); } else { readFromFlash(); } #else engineConfiguration->engineType = DEFAULT_ENGINE_TYPE; resetConfigurationExt(sharedLogger, engineConfiguration->engineType PASS_ENGINE_PARAMETER_SUFFIX); #endif /* EFI_INTERNAL_FLASH */ #if EFI_HD44780_LCD // initI2Cmodule(); lcd_HD44780_init(sharedLogger); if (hasFirmwareError()) return; lcd_HD44780_print_string(VCS_VERSION); #endif /* EFI_HD44780_LCD */ if (hasFirmwareError()) { return; } #if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__) initTriggerDecoder(); #endif bool isBoardTestMode_b; if (CONFIGB(boardTestModeJumperPin) != GPIO_UNASSIGNED) { efiSetPadMode("board test", CONFIGB(boardTestModeJumperPin), PAL_MODE_INPUT_PULLUP); isBoardTestMode_b = (!efiReadPin(CONFIGB(boardTestModeJumperPin))); // we can now relese this pin, it is actually used as output sometimes unmarkPin(CONFIGB(boardTestModeJumperPin)); } else { isBoardTestMode_b = false; } #if HAL_USE_ADC || defined(__DOXYGEN__) initAdcInputs(isBoardTestMode_b); #endif if (isBoardTestMode_b) { // this method never returns initBoardTest(); } initRtc(); initOutputPins(); #if EFI_MAX_31855 initMax31855(sharedLogger, getSpiDevice(CONFIGB(max31855spiDevice)), CONFIGB(max31855_cs)); #endif /* EFI_MAX_31855 */ #if EFI_CAN_SUPPORT initCan(); #endif /* EFI_CAN_SUPPORT */ // init_adc_mcp3208(&adcState, &SPID2); // requestAdcValue(&adcState, 0); #if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__) // todo: figure out better startup logic initTriggerCentral(sharedLogger); #endif /* EFI_SHAFT_POSITION_INPUT */ turnOnHardware(sharedLogger); #if HAL_USE_SPI || defined(__DOXYGEN__) initSpiModules(boardConfiguration); #endif #if EFI_HIP_9011 || defined(__DOXYGEN__) initHip9011(sharedLogger); #endif /* EFI_HIP_9011 */ #if EFI_FILE_LOGGING || defined(__DOXYGEN__) initMmcCard(); #endif /* EFI_FILE_LOGGING */ #if EFI_MEMS || defined(__DOXYGEN__) initAccelerometer(PASS_ENGINE_PARAMETER_SIGNATURE); #endif // initFixedLeds(); #if EFI_BOSCH_YAW || defined(__DOXYGEN__) initBoschYawRateSensor(); #endif /* EFI_BOSCH_YAW */ // initBooleanInputs(); #if EFI_UART_GPS || defined(__DOXYGEN__) initGps(); #endif #if EFI_SERVO initServo(); #endif #if ADC_SNIFFER || defined(__DOXYGEN__) initAdcDriver(); #endif #if HAL_USE_I2C || defined(__DOXYGEN__) addConsoleActionII("i2c", sendI2Cbyte); #endif // USBMassStorageDriver UMSD1; // while (true) { // for (int addr = 0x20; addr < 0x28; addr++) { // sendI2Cbyte(addr, 0); // int err = i2cGetErrors(&I2CD1); // print("I2C: err=%x from %d\r\n", err, addr); // chThdSleepMilliseconds(5); // sendI2Cbyte(addr, 255); // chThdSleepMilliseconds(5); // } // } #if EFI_VEHICLE_SPEED || defined(__DOXYGEN__) initVehicleSpeed(sharedLogger); #endif #if EFI_CDM_INTEGRATION cdmIonInit(); #endif #if HAL_USE_EXT || defined(__DOXYGEN__) initJoystick(sharedLogger); #endif calcFastAdcIndexes(); printMsg(sharedLogger, "initHardware() OK!"); }
void initHardware() { // todo: enable protection. it's disabled because it takes // 10 extra seconds to re-flash the chip //flashProtect(); /** * histograms is a data structure for CPU monitor, it does not depend on configuration */ initHistogramsModule(); /** * We need the LED_ERROR pin even before we read configuration */ initPrimaryPins(); /** * this call reads configuration from flash memory or sets default configuration * if flash state does not look right. */ initFlash(); initRtc(); initOutputPins(); initAdcInputs(); #if EFI_HIP_9011 initHip9011(); #endif /* EFI_HIP_9011 */ #if EFI_CAN_SUPPORT initCan(); #endif /* EFI_CAN_SUPPORT */ // init_adc_mcp3208(&adcState, &SPID2); // requestAdcValue(&adcState, 0); // todo: figure out better startup logic initTriggerCentral(); initShaftPositionInputCapture(); initSpiModules(); #if EFI_FILE_LOGGING initMmcCard(); #endif /* EFI_FILE_LOGGING */ // initFixedLeds(); // initBooleanInputs(); #if EFI_UART_GPS initGps(); #endif #if ADC_SNIFFER initAdcDriver(); #endif #if EFI_HD44780_LCD // initI2Cmodule(); lcd_HD44780_init(); char buffer[16]; itoa10(buffer, SVN_VERSION); lcd_HD44780_print_string(buffer); #endif addConsoleActionII("i2c", sendI2Cbyte); // while (true) { // for (int addr = 0x20; addr < 0x28; addr++) { // sendI2Cbyte(addr, 0); // int err = i2cGetErrors(&I2CD1); // print("I2C: err=%x from %d\r\n", err, addr); // chThdSleepMilliseconds(5); // sendI2Cbyte(addr, 255); // chThdSleepMilliseconds(5); // } // } initBoardTest(); }