Feel free to modify it test it etc
Code: Select all
#define GOTO_ON_ERROR(x, goto_tag, log_tag, error_var, format, ...) do { \
(void)log_tag; \
error_var = (x); \
if (error_var != ESP_OK) { \
ESP_LOGE(log_tag, "%s(%d): Error code is: %d, " format, __FUNCTION__, __LINE__, error_var, __VA_ARGS__); \
goto goto_tag; \
} \
} while(0)
it can be called with something like
Code: Select all
GOTO_ON_ERROR(i2c_driver_install(i2c_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0), i2c_init_end, "I2C Truc", _error, "Error calling i2c_driver_install (%d, %d, %d, %d %d)",i2c_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
this only requires the inclusion of "esp_log.h"
this will actually print the error message on error and the error code as well
it takes the error variable as an argument and as such breaks the existing code
Anyway just my 2 cents for now.