From e97e1228be07626860472277d0512f30eabdc8f9 Mon Sep 17 00:00:00 2001 From: Alex Mikhalev Date: Sun, 30 Dec 2018 23:43:33 -0700 Subject: [PATCH] Better u8g2 error handling and tuning to flags for perf --- main/u8g2_esp32_hal.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/main/u8g2_esp32_hal.c b/main/u8g2_esp32_hal.c index 90a6bfc..61b454c 100644 --- a/main/u8g2_esp32_hal.c +++ b/main/u8g2_esp32_hal.c @@ -10,7 +10,7 @@ #include "u8g2_esp32_hal.h" static const char * TAG = "u8g2_hal"; -static const unsigned int I2C_TIMEOUT_MS = 1000; +static const unsigned int I2C_TIMEOUT_MS = 10; static spi_device_handle_t handle_spi; // SPI handle. static i2c_cmd_handle_t handle_i2c; // I2C handle. @@ -19,10 +19,11 @@ static u8g2_esp32_hal_t u8g2_esp32_hal; // HAL state data. #undef ESP_ERROR_CHECK #define ESP_ERROR_CHECK(x) \ do { \ - esp_err_t rc = (x); \ - if (rc != ESP_OK) { \ - ESP_LOGE("err", "esp_err_t = %d", rc); \ - assert(0 && #x); \ + esp_err_t _rc = (x); \ + if (_rc != ESP_OK) { \ + const char *_error_name = esp_err_to_name(_rc); \ + ESP_LOGE(TAG, "%s failed: %s (%d)", #x, _error_name, _rc); \ + return 0; \ } \ } while (0); @@ -136,8 +137,11 @@ uint8_t u8g2_esp32_i2c_byte_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void ESP_LOGD(TAG, "i2c_param_config %d", conf.mode); ESP_ERROR_CHECK(i2c_param_config(I2C_MASTER_NUM, &conf)); ESP_LOGD(TAG, "i2c_driver_install %d", I2C_MASTER_NUM); - ESP_ERROR_CHECK( - i2c_driver_install(I2C_MASTER_NUM, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0)); + ESP_ERROR_CHECK(i2c_driver_install(I2C_MASTER_NUM, + conf.mode, + I2C_MASTER_RX_BUF_DISABLE, + I2C_MASTER_TX_BUF_DISABLE, + ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_LEVEL1)); break; } @@ -167,7 +171,7 @@ uint8_t u8g2_esp32_i2c_byte_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void } case U8X8_MSG_BYTE_END_TRANSFER: { - // ESP_LOGV(TAG, "End I2C transfer. txbuf len: %d", txbuf_ptr - txbuf); + ESP_LOGV(TAG, "End I2C transfer. txbuf len: %d", txbuf_ptr - txbuf); // ESP_LOG_BUFFER_HEXDUMP(TAG, txbuf, txbuf_ptr - txbuf, ESP_LOG_VERBOSE); ESP_ERROR_CHECK(i2c_master_write(handle_i2c, txbuf, txbuf_ptr - txbuf, ACK_CHECK_EN)); ESP_ERROR_CHECK(i2c_master_stop(handle_i2c)); @@ -175,8 +179,9 @@ uint8_t u8g2_esp32_i2c_byte_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void i2c_cmd_link_delete(handle_i2c); break; } + default: return 0; } - return 0; + return 1; } // u8g2_esp32_i2c_byte_cb /* @@ -243,6 +248,7 @@ uint8_t u8g2_esp32_gpio_and_delay_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, // Delay for the number of milliseconds passed in through arg_int. case U8X8_MSG_DELAY_MILLI: vTaskDelay(arg_int / portTICK_PERIOD_MS); break; + default: return 0; } - return 0; + return 1; } // u8g2_esp32_gpio_and_delay_cb \ No newline at end of file