diff --git a/ports/esp32/mphalport.c b/ports/esp32/mphalport.c index d7003a1437454..538b3e405c905 100644 --- a/ports/esp32/mphalport.c +++ b/ports/esp32/mphalport.c @@ -53,7 +53,12 @@ STATIC uint8_t stdin_ringbuf_array[260]; ringbuf_t stdin_ringbuf = {stdin_ringbuf_array, sizeof(stdin_ringbuf_array), 0, 0}; // Check the ESP-IDF error code and raise an OSError if it's not ESP_OK. -void check_esp_err(esp_err_t code) { +#if MICROPY_ERROR_REPORTING <= MICROPY_ERROR_REPORTING_NORMAL +void check_esp_err_(esp_err_t code) +#else +void check_esp_err_(esp_err_t code, const char *func, const int line, const char *file) +#endif +{ if (code != ESP_OK) { // map esp-idf error code to posix error code uint32_t pcode = -code; @@ -75,7 +80,16 @@ void check_esp_err(esp_err_t code) { return; } o_str->base.type = &mp_type_str; + #if MICROPY_ERROR_REPORTING > MICROPY_ERROR_REPORTING_NORMAL + char err_msg[64]; + esp_err_to_name_r(code, err_msg, sizeof(err_msg)); + vstr_t vstr; + vstr_init(&vstr, 80); + vstr_printf(&vstr, "0x%04X %s in function '%s' at line %d in file '%s'", code, err_msg, func, line, file); + o_str->data = (const byte *)vstr_null_terminated_str(&vstr); + #else o_str->data = (const byte *)esp_err_to_name(code); // esp_err_to_name ret's ptr to const str + #endif o_str->len = strlen((char *)o_str->data); o_str->hash = qstr_compute_hash(o_str->data, o_str->len); // raise diff --git a/ports/esp32/mphalport.h b/ports/esp32/mphalport.h index 566d6609f110b..5e54c24bfea0e 100644 --- a/ports/esp32/mphalport.h +++ b/ports/esp32/mphalport.h @@ -55,7 +55,13 @@ extern TaskHandle_t mp_main_task_handle; extern ringbuf_t stdin_ringbuf; // Check the ESP-IDF error code and raise an OSError if it's not ESP_OK. -void check_esp_err(esp_err_t code); +#if MICROPY_ERROR_REPORTING <= MICROPY_ERROR_REPORTING_NORMAL +#define check_esp_err(code) check_esp_err_(code) +void check_esp_err_(esp_err_t code); +#else +#define check_esp_err(code) check_esp_err_(code, __FUNCTION__, __LINE__, __FILE__) +void check_esp_err_(esp_err_t code, const char *func, const int line, const char *file); +#endif uint32_t mp_hal_ticks_us(void); __attribute__((always_inline)) static inline uint32_t mp_hal_ticks_cpu(void) {
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: