Lcd fix (I hope) (#2211)

* LCD: check if settings are valid on each access

* Lada Kalina: remove duplicate code

All LCD pins are set to GPIO_UNASSIGNED in disableLCD()

* Remove duplicate code

* We still need to know when invalid gpio is used...

This reverts commit c17775231a.
This commit is contained in:
Andrey G 2021-01-10 01:16:10 +03:00 committed by GitHub
parent 021dc9d185
commit 7803968621
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 46 deletions

View File

@ -12,17 +12,9 @@
#include "engine_math.h"
#include "thermistors.h"
#include "citroenBerlingoTU3JP.h"
#include "custom_engine.h"
#include "settings.h"
void setLCD(engine_configuration_s *engineConfiguration) {
engineConfiguration->HD44780_rs = GPIOE_7;
engineConfiguration->HD44780_e = GPIOE_9;
engineConfiguration->HD44780_db4 = GPIOE_11;
engineConfiguration->HD44780_db5 = GPIOE_13;
engineConfiguration->HD44780_db6 = GPIOE_15;
engineConfiguration->HD44780_db7 = GPIOB_10;
}
#if IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT
static const ignition_table_t default_tps_advance_table = {
{/*0 engineLoad=0.00*/ /*0 800.0*/+15.00, /*1 1213.0*/+16.33, /*2 1626.0*/+17.67, /*3 2040.0*/+19.00, /*4 2453.0*/+20.33, /*5 2866.0*/+21.67, /*6 3280.0*/+23.00, /*7 3693.0*/+24.33, /*8 4106.0*/+25.67, /*9 4520.0*/+27.00, /*10 4933.0*/+28.33, /*11 5346.0*/+29.67, /*12 5760.0*/+31.00, /*13 6173.0*/+32.33, /*14 6586.0*/+33.67, /*15 7000.0*/+35.00},
@ -118,7 +110,7 @@ void setCitroenBerlingoTU3JPConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->fuelPumpPin = GPIOB_9;
engineConfiguration->fuelPumpPinMode = OM_DEFAULT;
setLCD(engineConfiguration);
setFrankenso_01_LCD(engineConfiguration);
// engineConfiguration->o2heaterPin = GPIOC_13;

View File

@ -37,14 +37,6 @@ void setLadaKalina(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
setFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE);
disableLCD(engineConfiguration);
engineConfiguration->HD44780_rs = GPIO_UNASSIGNED;
engineConfiguration->HD44780_e = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db4 = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db5 = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db6 = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db7 = GPIO_UNASSIGNED;
setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR);
engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2;

View File

@ -55,7 +55,6 @@ static const int lineStart[] = { 0, 0x40, 0x14, 0x54 };
static int BUSY_WAIT_DELAY = FALSE;
static int currentRow = 0;
static int currentColumn = 0;
static bool lcd_enabled = false;
static void lcdSleep(int period) {
if (BUSY_WAIT_DELAY) {
@ -81,6 +80,17 @@ static void writePad(const char *msg, brain_pin_e pin, int bit) {
palWritePad(getHwPort(msg, pin), getHwPin(msg, pin), bit);
}
static bool lcd_HD44780_is_enabled(void) {
/* check for valid LCD setting */
return ((engineConfiguration->displayMode == DM_HD44780) &&
(isBrainPinValid(CONFIG(HD44780_rs))) &&
(isBrainPinValid(CONFIG(HD44780_e))) &&
(isBrainPinValid(CONFIG(HD44780_db4))) &&
(isBrainPinValid(CONFIG(HD44780_db5))) &&
(isBrainPinValid(CONFIG(HD44780_db6))) &&
(isBrainPinValid(CONFIG(HD44780_db7))));
}
//-----------------------------------------------------------------------------
static void lcd_HD44780_write(uint8_t data) {
if (engineConfiguration->displayMode == DM_HD44780) {
@ -132,7 +142,7 @@ static void lcd_HD44780_write_data(uint8_t data) {
//-----------------------------------------------------------------------------
void lcd_HD44780_set_position(uint8_t row, uint8_t column) {
if (!lcd_enabled)
if (!lcd_HD44780_is_enabled())
return;
efiAssertVoid(CUSTOM_ERR_6657, row <= engineConfiguration->HD44780height, "invalid row");
@ -142,21 +152,21 @@ void lcd_HD44780_set_position(uint8_t row, uint8_t column) {
}
int getCurrentHD44780row(void) {
if (!lcd_enabled)
if (!lcd_HD44780_is_enabled())
return 0;
return currentRow;
}
int getCurrentHD44780column(void) {
if (!lcd_enabled)
if (!lcd_HD44780_is_enabled())
return 0;
return currentColumn;
}
void lcd_HD44780_print_char(char data) {
if (!lcd_enabled)
if (!lcd_HD44780_is_enabled())
return;
if (data == '\n') {
@ -167,7 +177,7 @@ void lcd_HD44780_print_char(char data) {
}
void lcd_HD44780_print_string(const char* string) {
if (!lcd_enabled)
if (!lcd_HD44780_is_enabled())
return;
while (*string != 0x00)
@ -193,14 +203,8 @@ void stopHD44780_pins() {
efiSetPadUnused(activeConfiguration.HD44780_db7);
}
int startHD44780_pins() {
if ((engineConfiguration->displayMode == DM_HD44780) &&
(isBrainPinValid(CONFIG(HD44780_rs))) &&
(isBrainPinValid(CONFIG(HD44780_e))) &&
(isBrainPinValid(CONFIG(HD44780_db4))) &&
(isBrainPinValid(CONFIG(HD44780_db5))) &&
(isBrainPinValid(CONFIG(HD44780_db6))) &&
(isBrainPinValid(CONFIG(HD44780_db7)))) {
void startHD44780_pins() {
if (lcd_HD44780_is_enabled()) {
// initialize hardware lines
efiSetPadMode("lcd RS", CONFIG(HD44780_rs), PAL_MODE_OUTPUT_PUSHPULL);
efiSetPadMode("lcd E", CONFIG(HD44780_e), PAL_MODE_OUTPUT_PUSHPULL);
@ -215,14 +219,7 @@ int startHD44780_pins() {
writePad("lcd", CONFIG(HD44780_db5), 0);
writePad("lcd", CONFIG(HD44780_db6), 0);
writePad("lcd", CONFIG(HD44780_db7), 0);
return 0;
}
/* failed to init LCD pins, avoid writes */
lcd_enabled = false;
return -1;
}
void lcd_HD44780_init(Logging *sharedLogger) {
@ -242,7 +239,7 @@ void lcd_HD44780_init(Logging *sharedLogger) {
printMsg(logger, "lcd_HD44780_init %d", engineConfiguration->displayMode);
if (startHD44780_pins() < 0)
if (!lcd_HD44780_is_enabled())
return;
chThdSleepMilliseconds(20); // LCD needs some time to wake up
@ -271,11 +268,14 @@ void lcd_HD44780_init(Logging *sharedLogger) {
lcd_HD44780_set_position(0, 0);
printMsg(logger, "lcd_HD44780_init() done");
lcd_enabled = true;
}
void lcdShowPanicMessage(char *message) {
/* this is not a good idea to access config data
* when everything goes wrong... */
if (!lcd_HD44780_is_enabled())
return;
BUSY_WAIT_DELAY = TRUE;
lcd_HD44780_set_position(0, 0);
lcd_HD44780_print_string("PANIC\n");

View File

@ -12,7 +12,7 @@ extern "C"
{
#endif /* __cplusplus */
int startHD44780_pins();
void startHD44780_pins();
void stopHD44780_pins();
void lcd_HD44780_init(Logging *sharedLogger);
void lcd_HD44780_set_position(uint8_t row, uint8_t column);

View File

@ -122,10 +122,7 @@ int getPortPinIndex(ioportid_t port, ioportmask_t pin) {
ioportid_t getHwPort(const char *msg, brain_pin_e brainPin) {
if (!isBrainPinValid(brainPin)) {
/*
* https://github.com/dron0gus please help
firmwareError(CUSTOM_ERR_INVALID_PIN, "%s: Invalid brain_pin_e: %d", msg, brainPin);
*/
return GPIO_NULL;
}
return ports[(brainPin - GPIOA_0) / PORT_SIZE];