Skip to content

ESP32: New feature: EspError exception - #6638

Closed
IhorNehrutsa wants to merge 7 commits into
micropython:masterfrom
IhorNehrutsa:feature/esp_error
Closed

IhorNehrutsa wants to merge 7 commits into
micropython:masterfrom
IhorNehrutsa:feature/esp_error

Conversation

@IhorNehrutsa

@IhorNehrutsa IhorNehrutsa commented Nov 20, 2020 •

Copy link
Copy Markdown
Contributor

EspError exception handles native ESP-IDF error codes.
It designed to use in ESP32 port C code to catch ESP-IDF functions error codes like

// Example how to raise ESP exception from C code

#include "esp_error.h"

ESP_EXCEPTIONS(pcnt_event_disable(self->unit, evt_type))

// is equivalent to

esp_err_t err = pcnt_event_disable(self->unit, evt_type);
if (err != ESP_OK)
    mp_raise_EspError(err);

See Error Codes and Helper Functions
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/esp_err.html

Wrapped around
https://github.com/espressif/esp-idf/blob/master/components/esp_common/include/esp_err.h

Test is

#print('dir(EspError) =', dir(EspError))
print('1. help(EspError) =', help(EspError))
print('')
print('2. EspError.ESP_ERR_INVALID_ARG =', EspError.ESP_ERR_INVALID_ARG)
print('')
print('3. EspError.err_to_name(EspError(), EspError.ESP_FAIL) =', EspError.err_to_name(EspError(), EspError.ESP_FAIL))
print('')
print('4. EspError.err_to_name(e, 0x1205) =', EspError.err_to_name(EspError(), 0x1205))
print('')

#raise EspError()
#raise EspError(EspError.ESP_ERR_INVALID_SIZE)
#raise EspError(EspError.ESP_ERR_INVALID_ARG, '0x%X - ESP_ERR_INVALID_ARG' % EspError.ESP_ERR_INVALID_ARG)

try:
    raise EspError(EspError.ESP_ERR_INVALID_RESPONSE)

except EspError as e:
    print('5. EspError.err_to_name(e, e.args[0])=', EspError.err_to_name(e, e.args[0]))

output is

>>> %Run -c $EDITOR_CONTENT -f esp_err
object <class 'EspError'> is of type type
  ESP_ERR_INVALID_ARG -- 258
  ESP_ERR_INVALID_CRC -- 265
  ESP_ERR_INVALID_MAC -- 267
  ESP_ERR_INVALID_RESPONSE -- 264
  ESP_ERR_INVALID_SIZE -- 260
  ESP_ERR_INVALID_STATE -- 259
  ESP_ERR_INVALID_VERSION -- 266
  ESP_ERR_MESH_BASE -- 16384
  ESP_ERR_NOT_FOUND -- 261
  ESP_ERR_NOT_SUPPORTED -- 262
  ESP_ERR_NO_MEM -- 257
  ESP_ERR_TIMEOUT -- 263
  ESP_ERR_WIFI_BASE -- 12288
  ESP_FAIL -- -1
  ESP_OK -- 0
  err_to_name -- <function>
1. help(EspError) = None

2. EspError.ESP_ERR_INVALID_ARG = 258

3. EspError.err_to_name(EspError(), EspError.ESP_FAIL) = ESP_FAIL

4. EspError.err_to_name(e, 0x1205) = ESP_ERR_ULP_BRANCH_OUT_OF_RANGE

5. EspError.err_to_name(e, e.args[0])= ESP_ERR_INVALID_RESPONSE
>>> 

This PR overwrite the first part of PR #6626

Comment thread ports/esp32/esp_error.c
Comment on lines +103 to +117
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_INVALID_ARG), MP_ROM_INT(ESP_ERR_INVALID_ARG) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_INVALID_CRC), MP_ROM_INT(ESP_ERR_INVALID_CRC) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_INVALID_MAC), MP_ROM_INT(ESP_ERR_INVALID_MAC) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_INVALID_RESPONSE), MP_ROM_INT(ESP_ERR_INVALID_RESPONSE) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_INVALID_SIZE), MP_ROM_INT(ESP_ERR_INVALID_SIZE) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_INVALID_STATE), MP_ROM_INT(ESP_ERR_INVALID_STATE) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_INVALID_VERSION), MP_ROM_INT(ESP_ERR_INVALID_VERSION) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_MESH_BASE), MP_ROM_INT(ESP_ERR_MESH_BASE) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_NOT_FOUND), MP_ROM_INT(ESP_ERR_NOT_FOUND) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_NOT_SUPPORTED), MP_ROM_INT(ESP_ERR_NOT_SUPPORTED) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_NO_MEM), MP_ROM_INT(ESP_ERR_NO_MEM) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_TIMEOUT), MP_ROM_INT(ESP_ERR_TIMEOUT) },
{ MP_ROM_QSTR(MP_QSTR_ESP_ERR_WIFI_BASE), MP_ROM_INT(ESP_ERR_WIFI_BASE) },
{ MP_ROM_QSTR(MP_QSTR_ESP_FAIL), MP_ROM_INT(ESP_FAIL) },
{ MP_ROM_QSTR(MP_QSTR_ESP_OK), MP_ROM_INT(ESP_OK) },

@IhorNehrutsa IhorNehrutsa Nov 20, 2020 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if all(or part) ESP-IDF codes should be pulled(Q-stringed) as constants into MicroPython.
The complete list is very long and not in the "micro" paradigm.

Error Codes Reference
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/error-codes.html

@dpgeorge

Copy link
Copy Markdown
Member

Thanks for the contribution, but I don't think this is the right approach. Mainly because it diverges from the standard approach of using OSError which is portable and works across all ports/systems that run MicroPython. If esp32 has custom errors then it makes it a lot harder to write code that runs on esp32 and other systems.

@IhorNehrutsa
IhorNehrutsa deleted the feature/esp_error branch December 29, 2021 11:41
tannewt added a commit to tannewt/circuitpython that referenced this pull request Jul 25, 2022
Refine web workflow access control and http responses
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants