diff --git a/MicroPython_BUILD/.gitignore b/MicroPython_BUILD/.gitignore index c89ab33..ab24ac9 100644 --- a/MicroPython_BUILD/.gitignore +++ b/MicroPython_BUILD/.gitignore @@ -25,3 +25,9 @@ patches/ sdkconfig sdkconfig.old _sdkconfig.saved +sdkconfig.fw_esp32 +sdkconfig.fw_esp32_ota +sdkconfig.fw_psram +sdkconfig.fw_psram_ota + +makefirmwares.sh diff --git a/MicroPython_BUILD/BUILD.sh b/MicroPython_BUILD/BUILD.sh index f5740df..01ae2e5 100755 --- a/MicroPython_BUILD/BUILD.sh +++ b/MicroPython_BUILD/BUILD.sh @@ -44,7 +44,7 @@ #======================= -TOOLS_VER=ver20180103.id +TOOLS_VER=ver20180107.id #======================= # ----------------------------- diff --git a/MicroPython_BUILD/components/micropython/esp32/machine_hw_spi.c b/MicroPython_BUILD/components/micropython/esp32/machine_hw_spi.c index 88f4d38..578cb4d 100644 --- a/MicroPython_BUILD/components/micropython/esp32/machine_hw_spi.c +++ b/MicroPython_BUILD/components/micropython/esp32/machine_hw_spi.c @@ -80,34 +80,43 @@ extern uint8_t disp_used_spi_host; int checkSPIBUS(int8_t bus, int8_t mosi, uint8_t miso, uint8_t sck) { if ((disp_used_spi_host > 0) && (MPy_SPIbus[disp_used_spi_host]->mosi_io_num >= 0)) return -3; // bus used by display driver - if (MPy_SPIbus[bus] == NULL) return -2; // bus not available - if (MPy_SPIbus[bus]->mosi_io_num < 0) return 1; // bus not configured, free to use + + if (MPy_SPIbus[bus] == NULL) return -2; // bus not available + if (MPy_SPIbus[bus]->mosi_io_num < 0) return 1; // bus not configured, free to use if ((mosi != MPy_SPIbus[bus]->mosi_io_num) || (miso != MPy_SPIbus[bus]->miso_io_num) || - (sck != MPy_SPIbus[bus]->sclk_io_num)) return -1; // requested pins different than configured - return 0; // bus already configured with the same pins + (sck != MPy_SPIbus[bus]->sclk_io_num)) return -1; // requested pins different than configured + return 0; // bus already configured with the same pins } -//-------------------------------------------------------------------- -STATIC void machine_hw_spi_deinit_internal(machine_hw_spi_obj_t *self) +//--------------------------------------------------------------------------------- +STATIC void machine_hw_spi_deinit_internal(machine_hw_spi_obj_t *self, int freebus) { spi_device_handle_t handle = self->spi.handle; if (spi_bus_remove_device(handle) != ESP_OK) { - mp_raise_msg(&mp_type_OSError, "error at deinitialization"); + mp_raise_msg(&mp_type_OSError, "error removing spi device"); } - spi_host_t *host=(spi_host_t*)handle->host; - int i; - for (i=0; idevice[i] != NULL) break; - } + if (freebus) { + // Check if spi buss can be freed + spi_host_t *host=(spi_host_t*)handle->host; + int i; + for (i=0; idevice[i] != NULL) break; + } - if (i == NO_CS) { - // no more devices attached to host, free bus - spi_bus_free(self->host); - MPy_SPIbus[self->host]->sclk_io_num = -1; - MPy_SPIbus[self->host]->mosi_io_num = -1; - MPy_SPIbus[self->host]->miso_io_num = -1; + if (i == NO_CS) { + // no more devices attached to host, free bus + if (spi_bus_free(self->host) != ESP_OK) { + mp_raise_msg(&mp_type_OSError, "error freeing spi host"); + } + gpio_pad_select_gpio(MPy_SPIbus[self->host]->miso_io_num); + gpio_pad_select_gpio(MPy_SPIbus[self->host]->mosi_io_num); + gpio_pad_select_gpio(MPy_SPIbus[self->host]->sclk_io_num); + MPy_SPIbus[self->host]->sclk_io_num = -1; + MPy_SPIbus[self->host]->mosi_io_num = -1; + MPy_SPIbus[self->host]->miso_io_num = -1; + } } } @@ -123,22 +132,38 @@ STATIC void machine_hw_spi_init_internal( int8_t mosi, int8_t miso, int8_t cs, - int8_t duplex) { + int8_t duplex, + uint8_t new) { // if we're not initialized, then we're implicitly 'changed', since this is the init routine - uint16_t changed = self->state != MACHINE_HW_SPI_STATE_INIT; esp_err_t ret; int bus_state = 0; - machine_hw_spi_obj_t old_self = *self; + machine_hw_spi_obj_t old_self; + machine_hw_spi_obj_t *pold_self; - if ((host > -1) && (host != self->host)) { + if (new) pold_self = self; + else { + memcpy(&old_self, self, sizeof(machine_hw_spi_obj_t)); + pold_self = &old_self; + } + + if (((mosi < 0) && (MPy_SPIbus[self->host]->mosi_io_num <0)) || + ((miso < 0) && (MPy_SPIbus[self->host]->miso_io_num <0)) || + ((sck < 0) && (MPy_SPIbus[self->host]->sclk_io_num <0))) { + mp_raise_ValueError("Error, not all spi pins given"); + } + + uint16_t changed = pold_self->state != MACHINE_HW_SPI_STATE_INIT; + + if (host > -1) { + // Host initialization or host change #if CONFIG_SPIRAM_SPEED_80M if (host != HSPI_HOST) { mp_raise_ValueError("SPI host must be HSPI(1)"); } #else - if (host != HSPI_HOST && host != VSPI_HOST) { + if ((host != HSPI_HOST) && (host != VSPI_HOST)) { mp_raise_ValueError("SPI host must be either HSPI(1) or VSPI(2)"); } #endif @@ -147,33 +172,70 @@ STATIC void machine_hw_spi_init_internal( if (bus_state == -3) { mp_raise_ValueError("SPI host already used by display driver"); } - else if (bus_state < 0) { + else if (bus_state == -1) { mp_raise_ValueError("SPI host already used with different configuration"); } - self->host = host; - changed |= 0x0004; + else if (bus_state == -2) { + mp_raise_ValueError("SPI host not available"); + } + if ((host != pold_self->host) || (bus_state != 0)) { + self->host = host; + changed |= 0x0004; + } } - if ((baudrate > 0) && (baudrate != self->devcfg.clock_speed_hz)) { - if (baudrate == 0) { - mp_raise_ValueError("SPI baudrate must be >0"); + + if ((baudrate > 0) && (baudrate != pold_self->devcfg.clock_speed_hz)) { + // Speed changed + if ((baudrate <= 0) || (baudrate > 80000000)) { + mp_raise_ValueError("SPI baudrate must be >0 & <=80000000"); } self->devcfg.clock_speed_hz = baudrate; changed |= 0x0008; } - if ((polarity > -1) && (polarity != self->polarity)) { + + if ((polarity > -1) && (polarity != pold_self->polarity)) { + // Polarity changed self->polarity = polarity & 1; changed |= 0x0010; } - if ((phase > -1) && (phase != self->phase)) { + + if ((phase > -1) && (phase != pold_self->phase)) { + // Phase changed self->phase = phase & 1; changed |= 0x0020; } - if ((firstbit > -1) && (firstbit != self->firstbit)) { + + if ((firstbit > -1) && (firstbit != pold_self->firstbit)) { self->firstbit = firstbit & 1; changed |= 0x0040; } - if (bus_state > 0) { + if ((cs > -1) && (cs != pold_self->spi.cs)) { + // Initialize CS + gpio_pad_select_gpio(cs); + gpio_set_direction(cs, GPIO_MODE_OUTPUT); + gpio_set_level(cs, 1); + self->spi.cs = cs; + changed |= 0x0400; + } + + if ((duplex > -1) && (duplex != pold_self->duplex)) { + // Duplex changed + self->duplex = duplex & 1; + changed |= 0x0800; + } + + if (!changed) return; // no configuration changes, return + + if (pold_self->state == MACHINE_HW_SPI_STATE_INIT) { + // Remove device from spi host + self->state = MACHINE_HW_SPI_STATE_DEINIT; + machine_hw_spi_deinit_internal(pold_self, 0); + } + + // Check if spi bus has to be initialized + if (MPy_SPIbus[self->host]->mosi_io_num < 0) { + // SPI bus not initialized gpio_pad_select_gpio(miso); gpio_pad_select_gpio(mosi); gpio_pad_select_gpio(sck); @@ -181,7 +243,7 @@ STATIC void machine_hw_spi_init_internal( gpio_set_pull_mode(miso, GPIO_PULLUP_ONLY); gpio_set_direction(mosi, GPIO_MODE_OUTPUT); gpio_set_direction(sck, GPIO_MODE_OUTPUT); - // SPI bus is free + MPy_SPIbus[self->host]->sclk_io_num = sck; MPy_SPIbus[self->host]->mosi_io_num = mosi; MPy_SPIbus[self->host]->miso_io_num = miso; @@ -194,28 +256,11 @@ STATIC void machine_hw_spi_init_internal( mp_raise_msg(&mp_type_OSError, "error initializing spi bus"); return; } + changed |= 0x1000; } - if ((cs > -1) && (cs != self->spi.cs)) { - gpio_pad_select_gpio(cs); - gpio_set_direction(cs, GPIO_MODE_OUTPUT); - gpio_set_level(cs, 1); - self->spi.cs = cs; - changed |= 0x0400; - } - if ((duplex > -1) && (duplex != self->duplex)) { - self->duplex = duplex & 1; - changed |= 0x0800; - } - - if (!changed) return; // no changes - - if (self->state == MACHINE_HW_SPI_STATE_INIT) { - self->state = MACHINE_HW_SPI_STATE_DEINIT; - machine_hw_spi_deinit_internal(&old_self); - } - - self->devcfg.spics_io_num = -1; // No hw CS pin, we use software CS handling + // No hw CS pin, we use software CS handling in this module + self->devcfg.spics_io_num = -1; self->devcfg.mode = self->phase | (self->polarity << 1); self->devcfg.flags = ((self->firstbit == MICROPY_PY_MACHINE_SPI_LSB) ? SPI_DEVICE_TXBIT_LSBFIRST | SPI_DEVICE_RXBIT_LSBFIRST : 0); @@ -227,6 +272,14 @@ STATIC void machine_hw_spi_init_internal( ret = spi_bus_add_device(self->host, &self->devcfg, &self->spi.handle); if (ret == ESP_OK) { + ret = spi_device_select(&self->spi, 1); + if (ret != ESP_OK) { + mp_raise_msg(&mp_type_OSError, "Error selecting device"); + } + ret = spi_device_deselect(&self->spi); + if (ret != ESP_OK) { + mp_raise_msg(&mp_type_OSError, "Error deselecting device"); + } self->state = MACHINE_HW_SPI_STATE_INIT; return; } @@ -255,7 +308,7 @@ STATIC mp_obj_t machine_hw_spi_deinit(mp_obj_t self_in) machine_hw_spi_obj_t *self = self_in; if (self->state == MACHINE_HW_SPI_STATE_INIT) { self->state = MACHINE_HW_SPI_STATE_DEINIT; - machine_hw_spi_deinit_internal(self); + machine_hw_spi_deinit_internal(self, 1); } return mp_const_none; } @@ -269,10 +322,11 @@ STATIC void machine_hw_spi_print(const mp_print_t *print, mp_obj_t self_in, mp_p if (self->spi.cs < 0) sprintf(scs, "Not used"); else sprintf(scs, "%d", self->spi.cs); - mp_printf(print, "SPI([%s] spihost=%u, baudrate=%u, polarity=%u, phase=%u, firstbit=%s, sck=%d, mosi=%d, miso=%d, cs=%s, duplex=%s)", - (self->state == MACHINE_HW_SPI_STATE_INIT) ? "init" : "deinit", self->host, - spi_get_speed(&self->spi), self->polarity, self->phase, (self->firstbit) ? "LSB" : "MSB", - MPy_SPIbus[self->host]->sclk_io_num, MPy_SPIbus[self->host]->mosi_io_num, MPy_SPIbus[self->host]->miso_io_num, scs, (self->duplex) ? "True" : "False"); + mp_printf(print, "SPI( %s\n spihost=%s (%s)\n baudrate=%u, polarity=%u, phase=%u, firstbit=%s, duplex=%s\n Pins: sck=%d, mosi=%d, miso=%d, cs=%s\n )", + (self->state == MACHINE_HW_SPI_STATE_INIT) ? "INITIALIZED" : "DEINITIALIZED", + (self->host == HSPI_HOST) ? "HSPI" : "VSPI", (MPy_SPIbus[self->host]->mosi_io_num < 0) ? "free" : "initialized", + spi_get_speed(&self->spi), self->polarity, self->phase, (self->firstbit) ? "LSB" : "MSB", (self->duplex) ? "True" : "False", + MPy_SPIbus[self->host]->sclk_io_num, MPy_SPIbus[self->host]->mosi_io_num, MPy_SPIbus[self->host]->miso_io_num, scs); } //------------------------------------------------------------------------------------------------ @@ -307,7 +361,7 @@ STATIC mp_obj_t machine_hw_spi_init(mp_uint_t n_args, const mp_obj_t *pos_args, machine_hw_spi_init_internal(self, args[ARG_spihost].u_int, args[ARG_baudrate].u_int, args[ARG_polarity].u_int, args[ARG_phase].u_int, - args[ARG_firstbit].u_int, sck, mosi, miso, cs, args[ARG_duplex].u_bool); + args[ARG_firstbit].u_int, sck, mosi, miso, cs, args[ARG_duplex].u_bool, 0); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(machine_hw_spi_init_obj, 0, machine_hw_spi_init); @@ -340,6 +394,7 @@ mp_obj_t machine_hw_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_ memset(&self->devcfg, 0, sizeof(spi_device_interface_config_t)); self->spi.cs = -1; + self->spi.handle = NULL; int8_t cs = -1; if (args[ARG_cs].u_obj != MP_OBJ_NULL) cs = machine_pin_get_gpio(args[ARG_cs].u_obj); @@ -354,7 +409,8 @@ mp_obj_t machine_hw_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_ machine_pin_get_gpio(args[ARG_mosi].u_obj), machine_pin_get_gpio(args[ARG_miso].u_obj), cs, - args[ARG_duplex].u_bool); + args[ARG_duplex].u_bool, + 1); return MP_OBJ_FROM_PTR(self); } diff --git a/MicroPython_BUILD/components/micropython/esp32/machine_pwm.c b/MicroPython_BUILD/components/micropython/esp32/machine_pwm.c index 4d6c59f..1cd469f 100644 --- a/MicroPython_BUILD/components/micropython/esp32/machine_pwm.c +++ b/MicroPython_BUILD/components/micropython/esp32/machine_pwm.c @@ -4,6 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2016 Damien P. George + * Copyright (c) 2018 LoBo (https://github.com/loboris) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,6 +24,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + #include #include "driver/ledc.h" #include "esp_err.h" @@ -30,8 +32,12 @@ #include "py/nlr.h" #include "py/runtime.h" #include "modmachine.h" +#include "machine_pin.h" #include "mphalport.h" +// High speed mode +#define PWMODE (LEDC_HIGH_SPEED_MODE) + // Forward dec'l extern const mp_obj_type_t machine_pwm_type; @@ -40,50 +46,44 @@ typedef struct _esp32_pwm_obj_t { gpio_num_t pin; uint8_t active; uint8_t channel; + uint8_t duty; + ledc_timer_config_t timer_cfg; } esp32_pwm_obj_t; // Which channel has which GPIO pin assigned? // (-1 if not assigned) -STATIC int chan_gpio[LEDC_CHANNEL_MAX]; +STATIC int chan_gpio[LEDC_CHANNEL_MAX/2]; -// Params for PW operation -// 5khz -#define PWFREQ (5000) -// High speed mode -#define PWMODE (LEDC_HIGH_SPEED_MODE) -// 10-bit resolution (compatible with esp8266 PWM) -#define PWRES (LEDC_TIMER_10_BIT) -// Timer 1 -#define PWTIMER (LEDC_TIMER_1) - -// Config of timer upon which we run all PWM'ed GPIO pins STATIC bool pwm_inited = false; -STATIC ledc_timer_config_t timer_cfg = { - .bit_num = PWRES, - .freq_hz = PWFREQ, - .speed_mode = PWMODE, - .timer_num = PWTIMER -}; -STATIC void pwm_init(void) { +//---------------------------------------------------- +STATIC int set_freq(esp32_pwm_obj_t *self, int newval) +{ + int oval = self->timer_cfg.freq_hz; + int ores = self->timer_cfg.duty_resolution; + int dperc = (self->duty * 100) / (2 << self->timer_cfg.duty_resolution); - // Initial condition: no channels assigned - for (int x = 0; x < LEDC_CHANNEL_MAX; ++x) { - chan_gpio[x] = -1; + // Adjust duty resolution + int dres = 15; + while (newval > (80000000 / (1 << dres))) { + dres--; + if (dres == 0) break; } + if (dres == 0) return 0; - // Init with default timer params - ledc_timer_config(&timer_cfg); -} - -STATIC int set_freq(int newval) { - int oval = timer_cfg.freq_hz; - - timer_cfg.freq_hz = newval; - if (ledc_timer_config(&timer_cfg) != ESP_OK) { - timer_cfg.freq_hz = oval; + self->timer_cfg.duty_resolution = dres; + self->timer_cfg.freq_hz = newval; + if (ledc_timer_config(&self->timer_cfg) != ESP_OK) { + self->timer_cfg.freq_hz = oval; + self->timer_cfg.duty_resolution = ores; return 0; } + if (dres != ores) { + // Adjust + int dval = (dperc * (2 << self->timer_cfg.duty_resolution)) / 100; + ledc_set_duty(PWMODE, self->channel, dval); + ledc_update_duty(PWMODE, self->channel); + } return 1; } @@ -91,18 +91,24 @@ STATIC int set_freq(int newval) { // MicroPython bindings for PWM -STATIC void esp32_pwm_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { +//------------------------------------------------------------------------------------------ +STATIC void esp32_pwm_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) +{ esp32_pwm_obj_t *self = MP_OBJ_TO_PTR(self_in); - mp_printf(print, "PWM(%u", self->pin); + mp_printf(print, "PWM(pin: %u", self->pin); if (self->active) { - mp_printf(print, ", freq=%u, duty=%u", timer_cfg.freq_hz, - ledc_get_duty(PWMODE, self->channel)); + int duty = ledc_get_duty(PWMODE, self->channel); + int dperc = (duty * 100) / (1 << self->timer_cfg.duty_resolution); + mp_printf(print, ", freq=%u Hz, duty=%u%% [%d], duty resolution=%d bits, channel=%d", + ledc_get_freq(PWMODE, self->timer_cfg.timer_num), dperc, duty, + self->timer_cfg.duty_resolution, self->channel); } mp_printf(print, ")"); } -STATIC void esp32_pwm_init_helper(esp32_pwm_obj_t *self, - size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { +//------------------------------------------------------------------------------------------------------------------ +STATIC void esp32_pwm_init_helper(esp32_pwm_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) +{ enum { ARG_freq, ARG_duty }; static const mp_arg_t allowed_args[] = { { MP_QSTR_freq, MP_ARG_INT, {.u_int = -1} }, @@ -115,77 +121,103 @@ STATIC void esp32_pwm_init_helper(esp32_pwm_obj_t *self, int channel; int avail = -1; - // Find a free PWM channel, also spot if our pin is - // already mentioned. - for (channel = 0; channel < LEDC_CHANNEL_MAX; ++channel) { - if (chan_gpio[channel] == self->pin) { - break; - } - if ((avail == -1) && (chan_gpio[channel] == -1)) { - avail = channel; - } - } - if (channel >= LEDC_CHANNEL_MAX) { - if (avail == -1) { - mp_raise_ValueError("out of PWM channels"); - } - channel = avail; - } - self->channel = channel; + if (self->channel >= LEDC_CHANNEL_MAX/2) { + // New PWM assignment, find a free PWM channel + for (channel = 0; channel < LEDC_CHANNEL_MAX/2; ++channel) { + if (chan_gpio[channel] == -1) { + avail = channel; + break; + } + } + // Check if pin already used + for (channel = 0; channel < LEDC_CHANNEL_MAX/2; ++channel) { + if (chan_gpio[channel] == self->pin) { + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "pin %d already used for pwm", self->pin)); + } + } + // Find a free PWM channel + for (channel = 0; channel < LEDC_CHANNEL_MAX/2; ++channel) { + if (chan_gpio[channel] == -1) { + avail = channel; + break; + } + } + if (avail == -1) { + mp_raise_ValueError("out of PWM channels"); + } + self->channel = channel; - // New PWM assignment - self->active = 1; - if (chan_gpio[channel] == -1) { - ledc_channel_config_t cfg = { - .channel = channel, - .duty = (1 << PWRES) / 2, - .gpio_num = self->pin, - .intr_type = LEDC_INTR_DISABLE, - .speed_mode = PWMODE, - .timer_sel = PWTIMER, - }; - if (ledc_channel_config(&cfg) != ESP_OK) { - nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, - "PWM not supported on pin %d", self->pin)); - } - chan_gpio[channel] = self->pin; + // Setup timer + self->active = 1; + if (chan_gpio[channel] == -1) { + // Init timer + self->timer_cfg.duty_resolution = LEDC_TIMER_12_BIT; // 12 bits duty resolution + self->timer_cfg.freq_hz = 5000; // 5 kHz frequency + self->timer_cfg.speed_mode = PWMODE; + self->timer_cfg.timer_num = channel; + if (ledc_timer_config(&self->timer_cfg) != ESP_OK) { + mp_raise_ValueError("Error configuring pwm timer"); + } + + self->duty = 50; + ledc_channel_config_t cfg = { + .channel = channel, + .duty = (1 << self->timer_cfg.duty_resolution) / 2, // 50% + .gpio_num = self->pin, + .intr_type = LEDC_INTR_DISABLE, + .speed_mode = PWMODE, + .timer_sel = channel, + }; + if (ledc_channel_config(&cfg) != ESP_OK) { + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "PWM not supported on pin %d", self->pin)); + } + chan_gpio[channel] = self->pin; + } } + else channel = self->channel; // Maybe change PWM timer int tval = args[ARG_freq].u_int; if (tval != -1) { - if (tval != timer_cfg.freq_hz) { - if (!set_freq(tval)) { - nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, - "Bad frequency %d", tval)); + if (tval != self->timer_cfg.freq_hz) { + if (!set_freq(self, tval)) { + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Bad frequency %d", tval)); } } } // Set duty cycle? - int dval = args[ARG_duty].u_int; - if (dval != -1) { - dval &= ((1 << PWRES)-1); + int dperc = args[ARG_duty].u_int; + if (dperc != -1) { + if ((dperc < 0) || (dperc > 100)) { + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Bad duty %d, use 0 ~ 100 (%%)", dperc)); + } + // Calculate duty value + int dval = (dperc * (2 << self->timer_cfg.duty_resolution)) / 100; ledc_set_duty(PWMODE, channel, dval); ledc_update_duty(PWMODE, channel); } } -STATIC mp_obj_t esp32_pwm_make_new(const mp_obj_type_t *type, - size_t n_args, size_t n_kw, const mp_obj_t *args) { +//------------------------------------------------------------------------------------------------------------- +STATIC mp_obj_t esp32_pwm_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) +{ mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true); - gpio_num_t pin_id = machine_pin_get_id(args[0]); + gpio_num_t pin_id = machine_pin_get_gpio(args[0]); // create PWM object from the given pin esp32_pwm_obj_t *self = m_new_obj(esp32_pwm_obj_t); self->base.type = &machine_pwm_type; self->pin = pin_id; self->active = 0; - self->channel = -1; + self->channel = LEDC_CHANNEL_MAX; // start the PWM subsystem if it's not already running if (!pwm_inited) { - pwm_init(); + // Initial condition: no channels assigned + for (int x = 0; x < LEDC_CHANNEL_MAX/2; ++x) { + chan_gpio[x] = -1; + } pwm_inited = true; } @@ -197,19 +229,22 @@ STATIC mp_obj_t esp32_pwm_make_new(const mp_obj_type_t *type, return MP_OBJ_FROM_PTR(self); } -STATIC mp_obj_t esp32_pwm_init(size_t n_args, - const mp_obj_t *args, mp_map_t *kw_args) { +//------------------------------------------------------------------------------------ +STATIC mp_obj_t esp32_pwm_init(size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) +{ esp32_pwm_init_helper(args[0], n_args - 1, args + 1, kw_args); return mp_const_none; } MP_DEFINE_CONST_FUN_OBJ_KW(esp32_pwm_init_obj, 1, esp32_pwm_init); -STATIC mp_obj_t esp32_pwm_deinit(mp_obj_t self_in) { +//------------------------------------------------ +STATIC mp_obj_t esp32_pwm_deinit(mp_obj_t self_in) +{ esp32_pwm_obj_t *self = MP_OBJ_TO_PTR(self_in); int chan = self->channel; // Valid channel? - if ((chan >= 0) && (chan < LEDC_CHANNEL_MAX)) { + if ((chan >= 0) && (chan < LEDC_CHANNEL_MAX/2)) { // Mark it unused, and tell the hardware to stop routing chan_gpio[chan] = -1; ledc_stop(PWMODE, chan, 0); @@ -220,54 +255,89 @@ STATIC mp_obj_t esp32_pwm_deinit(mp_obj_t self_in) { } STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp32_pwm_deinit_obj, esp32_pwm_deinit); -STATIC mp_obj_t esp32_pwm_freq(size_t n_args, const mp_obj_t *args) { +//----------------------------------------------------------------- +STATIC mp_obj_t esp32_pwm_freq(size_t n_args, const mp_obj_t *args) +{ + esp32_pwm_obj_t *self = MP_OBJ_TO_PTR(args[0]); + if (n_args == 1) { // get - return MP_OBJ_NEW_SMALL_INT(timer_cfg.freq_hz); + return MP_OBJ_NEW_SMALL_INT(self->timer_cfg.freq_hz); } // set int tval = mp_obj_get_int(args[1]); - if (!set_freq(tval)) { - nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, - "Bad frequency %d", tval)); + if (!set_freq(self, tval)) { + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Bad frequency %d", tval)); } return mp_const_none; } - STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(esp32_pwm_freq_obj, 1, 2, esp32_pwm_freq); -STATIC mp_obj_t esp32_pwm_duty(size_t n_args, const mp_obj_t *args) { +//----------------------------------------------------------------- +STATIC mp_obj_t esp32_pwm_duty(size_t n_args, const mp_obj_t *args) +{ esp32_pwm_obj_t *self = MP_OBJ_TO_PTR(args[0]); - int duty; + int dperc, duty; if (n_args == 1) { - // get + // get duty duty = ledc_get_duty(PWMODE, self->channel); - return MP_OBJ_NEW_SMALL_INT(duty); + dperc = (duty * 100) / (1 << self->timer_cfg.duty_resolution); + return MP_OBJ_NEW_SMALL_INT(dperc); } // set - duty = mp_obj_get_int(args[1]); - duty &= ((1 << PWRES)-1); - ledc_set_duty(PWMODE, self->channel, duty); - ledc_update_duty(PWMODE, self->channel); + dperc = mp_obj_get_int(args[1]); + if (dperc != -1) { + if ((dperc < 0) || (dperc > 100)) { + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Bad duty %d, use 0 ~ 100 (%%)", dperc)); + } + // Calculate duty value + duty = (dperc * (1 << self->timer_cfg.duty_resolution)) / 100; + ledc_set_duty(PWMODE, self->channel, duty); + ledc_update_duty(PWMODE, self->channel); + self->duty = dperc; + } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(esp32_pwm_duty_obj, - 1, 2, esp32_pwm_duty); +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(esp32_pwm_duty_obj, 1, 2, esp32_pwm_duty); +//----------------------------------------------- +STATIC mp_obj_t esp32_pwm_pause(mp_obj_t self_in) +{ + esp32_pwm_obj_t *self = MP_OBJ_TO_PTR(self_in); + ledc_timer_pause(PWMODE, self->timer_cfg.timer_num); + + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp32_pwm_pause_obj, esp32_pwm_pause); + +//------------------------------------------------ +STATIC mp_obj_t esp32_pwm_resume(mp_obj_t self_in) +{ + esp32_pwm_obj_t *self = MP_OBJ_TO_PTR(self_in); + ledc_timer_resume(PWMODE, self->timer_cfg.timer_num); + + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp32_pwm_resume_obj, esp32_pwm_resume); + + + +//============================================================== STATIC const mp_rom_map_elem_t esp32_pwm_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&esp32_pwm_init_obj) }, { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&esp32_pwm_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR_freq), MP_ROM_PTR(&esp32_pwm_freq_obj) }, { MP_ROM_QSTR(MP_QSTR_duty), MP_ROM_PTR(&esp32_pwm_duty_obj) }, + { MP_ROM_QSTR(MP_QSTR_pause), MP_ROM_PTR(&esp32_pwm_pause_obj) }, + { MP_ROM_QSTR(MP_QSTR_resume), MP_ROM_PTR(&esp32_pwm_resume_obj) }, }; +STATIC MP_DEFINE_CONST_DICT(esp32_pwm_locals_dict, esp32_pwm_locals_dict_table); -STATIC MP_DEFINE_CONST_DICT(esp32_pwm_locals_dict, - esp32_pwm_locals_dict_table); - +//====================================== const mp_obj_type_t machine_pwm_type = { { &mp_type_type }, .name = MP_QSTR_PWM, diff --git a/MicroPython_BUILD/components/micropython/esp32/mpversion.h b/MicroPython_BUILD/components/micropython/esp32/mpversion.h index 4058eb1..2e2496a 100644 --- a/MicroPython_BUILD/components/micropython/esp32/mpversion.h +++ b/MicroPython_BUILD/components/micropython/esp32/mpversion.h @@ -1,8 +1,8 @@ // MicroPython version info -#define MICROPY_GIT_TAG "ESP32_LoBo_v3.1.0" -#define MICROPY_GIT_HASH "g1837a034" -#define MICROPY_BUILD_DATE "2017-01-03" +#define MICROPY_GIT_TAG "ESP32_LoBo_v3.1.1" +#define MICROPY_GIT_HASH "ga1b59679" +#define MICROPY_BUILD_DATE "2017-01-07" #define MICROPY_VERSION_MAJOR (3) #define MICROPY_VERSION_MINOR (1) -#define MICROPY_VERSION_MICRO (0) -#define MICROPY_VERSION_STRING "3.1.0" +#define MICROPY_VERSION_MICRO (1) +#define MICROPY_VERSION_STRING "3.1.1" diff --git a/MicroPython_BUILD/components/micropython/genhdr/qstrdefs.generated.h b/MicroPython_BUILD/components/micropython/genhdr/qstrdefs.generated.h new file mode 100644 index 0000000..d49319b --- /dev/null +++ b/MicroPython_BUILD/components/micropython/genhdr/qstrdefs.generated.h @@ -0,0 +1,951 @@ +// This file was automatically generated by makeqstrdata.py + +QDEF(MP_QSTR_NULL, (const byte*)"\x00\x00\x00" "") +QDEF(MP_QSTR_, (const byte*)"\x05\x15\x00" "") +QDEF(MP_QSTR___abs__, (const byte*)"\x95\xd6\x07" "__abs__") +QDEF(MP_QSTR___add__, (const byte*)"\xc4\x82\x07" "__add__") +QDEF(MP_QSTR___aenter__, (const byte*)"\x4c\x84\x0a" "__aenter__") +QDEF(MP_QSTR___aexit__, (const byte*)"\xc4\xcf\x09" "__aexit__") +QDEF(MP_QSTR___aiter__, (const byte*)"\x4e\x2b\x09" "__aiter__") +QDEF(MP_QSTR___and__, (const byte*)"\x0e\xdb\x07" "__and__") +QDEF(MP_QSTR___anext__, (const byte*)"\x83\xb4\x09" "__anext__") +QDEF(MP_QSTR___bool__, (const byte*)"\x2b\x65\x08" "__bool__") +QDEF(MP_QSTR___build_class__, (const byte*)"\x42\x88\x0f" "__build_class__") +QDEF(MP_QSTR___call__, (const byte*)"\xa7\xf9\x08" "__call__") +QDEF(MP_QSTR___class__, (const byte*)"\x2b\xc5\x09" "__class__") +QDEF(MP_QSTR___contains__, (const byte*)"\xc6\x5f\x0c" "__contains__") +QDEF(MP_QSTR___del__, (const byte*)"\x68\x37\x07" "__del__") +QDEF(MP_QSTR___delitem__, (const byte*)"\xfd\x35\x0b" "__delitem__") +QDEF(MP_QSTR___dict__, (const byte*)"\x7f\x54\x08" "__dict__") +QDEF(MP_QSTR___divmod__, (const byte*)"\x78\x11\x0a" "__divmod__") +QDEF(MP_QSTR___enter__, (const byte*)"\x6d\xba\x09" "__enter__") +QDEF(MP_QSTR___eq__, (const byte*)"\x71\x3e\x06" "__eq__") +QDEF(MP_QSTR___exit__, (const byte*)"\x45\xf8\x08" "__exit__") +QDEF(MP_QSTR___file__, (const byte*)"\x03\x54\x08" "__file__") +QDEF(MP_QSTR___floordiv__, (const byte*)"\x46\x5f\x0c" "__floordiv__") +QDEF(MP_QSTR___ge__, (const byte*)"\xa7\x46\x06" "__ge__") +QDEF(MP_QSTR___getattr__, (const byte*)"\x40\xf8\x0b" "__getattr__") +QDEF(MP_QSTR___getitem__, (const byte*)"\x26\x39\x0b" "__getitem__") +QDEF(MP_QSTR___gt__, (const byte*)"\xb6\x82\x06" "__gt__") +QDEF(MP_QSTR___hash__, (const byte*)"\xf7\xc8\x08" "__hash__") +QDEF(MP_QSTR___iadd__, (const byte*)"\x6d\x4a\x08" "__iadd__") +QDEF(MP_QSTR___import__, (const byte*)"\x38\x3e\x0a" "__import__") +QDEF(MP_QSTR___init__, (const byte*)"\x5f\xa5\x08" "__init__") +QDEF(MP_QSTR___invert__, (const byte*)"\xf7\x77\x0a" "__invert__") +QDEF(MP_QSTR___isub__, (const byte*)"\x08\x78\x08" "__isub__") +QDEF(MP_QSTR___iter__, (const byte*)"\xcf\x32\x08" "__iter__") +QDEF(MP_QSTR___le__, (const byte*)"\xcc\x13\x06" "__le__") +QDEF(MP_QSTR___len__, (const byte*)"\xe2\xb0\x07" "__len__") +QDEF(MP_QSTR___lshift__, (const byte*)"\x09\x88\x0a" "__lshift__") +QDEF(MP_QSTR___lt__, (const byte*)"\x5d\x68\x06" "__lt__") +QDEF(MP_QSTR___main__, (const byte*)"\x8e\x13\x08" "__main__") +QDEF(MP_QSTR___mod__, (const byte*)"\x63\x37\x07" "__mod__") +QDEF(MP_QSTR___module__, (const byte*)"\xff\x30\x0a" "__module__") +QDEF(MP_QSTR___mul__, (const byte*)"\x31\x42\x07" "__mul__") +QDEF(MP_QSTR___name__, (const byte*)"\xe2\x38\x08" "__name__") +QDEF(MP_QSTR___neg__, (const byte*)"\x69\xd5\x07" "__neg__") +QDEF(MP_QSTR___new__, (const byte*)"\x79\x15\x07" "__new__") +QDEF(MP_QSTR___next__, (const byte*)"\x02\x73\x08" "__next__") +QDEF(MP_QSTR___or__, (const byte*)"\x38\xbb\x06" "__or__") +QDEF(MP_QSTR___path__, (const byte*)"\xc8\x23\x08" "__path__") +QDEF(MP_QSTR___pos__, (const byte*)"\x29\xf0\x07" "__pos__") +QDEF(MP_QSTR___pow__, (const byte*)"\x2d\x00\x07" "__pow__") +QDEF(MP_QSTR___qualname__, (const byte*)"\x6b\x00\x0c" "__qualname__") +QDEF(MP_QSTR___repl_print__, (const byte*)"\x00\xbb\x0e" "__repl_print__") +QDEF(MP_QSTR___repr__, (const byte*)"\x10\x0b\x08" "__repr__") +QDEF(MP_QSTR___reversed__, (const byte*)"\x61\xff\x0c" "__reversed__") +QDEF(MP_QSTR___rshift__, (const byte*)"\x57\x98\x0a" "__rshift__") +QDEF(MP_QSTR___setitem__, (const byte*)"\x32\x3e\x0b" "__setitem__") +QDEF(MP_QSTR___str__, (const byte*)"\xd0\xcd\x07" "__str__") +QDEF(MP_QSTR___sub__, (const byte*)"\x21\x09\x07" "__sub__") +QDEF(MP_QSTR___traceback__, (const byte*)"\x4f\xcf\x0d" "__traceback__") +QDEF(MP_QSTR___truediv__, (const byte*)"\x88\xef\x0b" "__truediv__") +QDEF(MP_QSTR___xor__, (const byte*)"\x20\xec\x07" "__xor__") +QDEF(MP_QSTR__star_, (const byte*)"\x8f\xb5\x01" "*") +QDEF(MP_QSTR__, (const byte*)"\xfa\xb5\x01" "_") +QDEF(MP_QSTR__slash_, (const byte*)"\x8a\xb5\x01" "/") +QDEF(MP_QSTR__percent__hash_o, (const byte*)"\x6c\x1a\x03" "%#o") +QDEF(MP_QSTR__percent__hash_x, (const byte*)"\x7b\x1a\x03" "%#x") +QDEF(MP_QSTR__brace_open__colon__hash_b_brace_close_, (const byte*)"\x58\x37\x05" "{:#b}") +QDEF(MP_QSTR__0x0a_, (const byte*)"\xaf\xb5\x01" "\x0a") +QDEF(MP_QSTR_maximum_space_recursion_space_depth_space_exceeded, (const byte*)"\x73\x1e\x20" "maximum recursion depth exceeded") +QDEF(MP_QSTR__lt_module_gt_, (const byte*)"\xbd\x94\x08" "") +QDEF(MP_QSTR__lt_lambda_gt_, (const byte*)"\x80\x8c\x08" "") +QDEF(MP_QSTR__lt_listcomp_gt_, (const byte*)"\xd4\x15\x0a" "") +QDEF(MP_QSTR__lt_dictcomp_gt_, (const byte*)"\xcc\x8d\x0a" "") +QDEF(MP_QSTR__lt_setcomp_gt_, (const byte*)"\x54\x51\x09" "") +QDEF(MP_QSTR__lt_genexpr_gt_, (const byte*)"\x34\x6a\x09" "") +QDEF(MP_QSTR__lt_string_gt_, (const byte*)"\x52\x53\x08" "") +QDEF(MP_QSTR__lt_stdin_gt_, (const byte*)"\xe3\x63\x07" "") +QDEF(MP_QSTR_utf_hyphen_8, (const byte*)"\xb7\x82\x05" "utf-8") +QDEF(MP_QSTR__slash_lib, (const byte*)"\x8d\x9c\x04" "/lib") +QDEF(MP_QSTR_ADC, (const byte*)"\x63\xb6\x03" "ADC") +QDEF(MP_QSTR_AF_INET, (const byte*)"\xeb\xb7\x07" "AF_INET") +QDEF(MP_QSTR_AF_INET6, (const byte*)"\x7d\xb5\x08" "AF_INET6") +QDEF(MP_QSTR_AP_IF, (const byte*)"\x04\x96\x05" "AP_IF") +QDEF(MP_QSTR_ARRAY, (const byte*)"\x5c\x7a\x05" "ARRAY") +QDEF(MP_QSTR_ATTN_0DB, (const byte*)"\x23\x45\x08" "ATTN_0DB") +QDEF(MP_QSTR_ATTN_11DB, (const byte*)"\x13\x1d\x09" "ATTN_11DB") +QDEF(MP_QSTR_ATTN_2_5DB, (const byte*)"\xeb\xf6\x0a" "ATTN_2_5DB") +QDEF(MP_QSTR_ATTN_6DB, (const byte*)"\x25\x2d\x08" "ATTN_6DB") +QDEF(MP_QSTR_AUTH_MAX, (const byte*)"\x66\x8d\x08" "AUTH_MAX") +QDEF(MP_QSTR_AUTH_OPEN, (const byte*)"\x46\xb3\x09" "AUTH_OPEN") +QDEF(MP_QSTR_AUTH_WEP, (const byte*)"\xf0\x0d\x08" "AUTH_WEP") +QDEF(MP_QSTR_AUTH_WPA2_PSK, (const byte*)"\xf1\xfe\x0d" "AUTH_WPA2_PSK") +QDEF(MP_QSTR_AUTH_WPA_PSK, (const byte*)"\xc3\x6c\x0c" "AUTH_WPA_PSK") +QDEF(MP_QSTR_AUTH_WPA_WPA2_PSK, (const byte*)"\xe8\x79\x11" "AUTH_WPA_WPA2_PSK") +QDEF(MP_QSTR_ArithmeticError, (const byte*)"\x2d\x8c\x0f" "ArithmeticError") +QDEF(MP_QSTR_AssertionError, (const byte*)"\x97\x5a\x0e" "AssertionError") +QDEF(MP_QSTR_AttributeError, (const byte*)"\x21\xde\x0e" "AttributeError") +QDEF(MP_QSTR_BFINT16, (const byte*)"\x95\xe2\x07" "BFINT16") +QDEF(MP_QSTR_BFINT32, (const byte*)"\x53\xe2\x07" "BFINT32") +QDEF(MP_QSTR_BFINT8, (const byte*)"\x4a\x9a\x06" "BFINT8") +QDEF(MP_QSTR_BFUINT16, (const byte*)"\x40\xa6\x08" "BFUINT16") +QDEF(MP_QSTR_BFUINT32, (const byte*)"\x06\xa6\x08" "BFUINT32") +QDEF(MP_QSTR_BFUINT8, (const byte*)"\xbf\xaf\x07" "BFUINT8") +QDEF(MP_QSTR_BF_LEN, (const byte*)"\x19\xb0\x06" "BF_LEN") +QDEF(MP_QSTR_BF_POS, (const byte*)"\x52\x9d\x06" "BF_POS") +QDEF(MP_QSTR_BIG_ENDIAN, (const byte*)"\xff\x51\x0a" "BIG_ENDIAN") +QDEF(MP_QSTR_BLACK, (const byte*)"\x82\x4d\x05" "BLACK") +QDEF(MP_QSTR_BLUE, (const byte*)"\x3b\x3b\x04" "BLUE") +QDEF(MP_QSTR_BMP, (const byte*)"\x9a\xc3\x03" "BMP") +QDEF(MP_QSTR_BOTTOM, (const byte*)"\x6a\x29\x06" "BOTTOM") +QDEF(MP_QSTR_BaseException, (const byte*)"\x07\x92\x0d" "BaseException") +QDEF(MP_QSTR_BufferedWriter, (const byte*)"\xeb\x2c\x0e" "BufferedWriter") +QDEF(MP_QSTR_BytesIO, (const byte*)"\x1a\xb7\x07" "BytesIO") +QDEF(MP_QSTR_CENTER, (const byte*)"\x8e\xdb\x06" "CENTER") +QDEF(MP_QSTR_CHRONO, (const byte*)"\x32\xd2\x06" "CHRONO") +QDEF(MP_QSTR_CYAN, (const byte*)"\x10\x26\x04" "CYAN") +QDEF(MP_QSTR_DAC, (const byte*)"\x03\xba\x03" "DAC") +QDEF(MP_QSTR_DARKCYAN, (const byte*)"\x0c\xab\x08" "DARKCYAN") +QDEF(MP_QSTR_DARKGREEN, (const byte*)"\x42\x23\x09" "DARKGREEN") +QDEF(MP_QSTR_DARKGREY, (const byte*)"\x90\xf1\x08" "DARKGREY") +QDEF(MP_QSTR_DEBUG, (const byte*)"\x34\x6d\x05" "DEBUG") +QDEF(MP_QSTR_DHT, (const byte*)"\x3d\xbb\x03" "DHT") +QDEF(MP_QSTR_DHT11, (const byte*)"\x5d\x80\x05" "DHT11") +QDEF(MP_QSTR_DHT2X, (const byte*)"\x97\x80\x05" "DHT2X") +QDEF(MP_QSTR_DecompIO, (const byte*)"\x93\xb7\x08" "DecompIO") +QDEF(MP_QSTR_EACCES, (const byte*)"\x37\xc2\x06" "EACCES") +QDEF(MP_QSTR_EADDRINUSE, (const byte*)"\x17\x11\x0a" "EADDRINUSE") +QDEF(MP_QSTR_EAGAIN, (const byte*)"\x20\xec\x06" "EAGAIN") +QDEF(MP_QSTR_EALREADY, (const byte*)"\x46\x15\x08" "EALREADY") +QDEF(MP_QSTR_EBADF, (const byte*)"\x61\xa3\x05" "EBADF") +QDEF(MP_QSTR_ECONNABORTED, (const byte*)"\x27\xab\x0c" "ECONNABORTED") +QDEF(MP_QSTR_ECONNREFUSED, (const byte*)"\x3a\x2c\x0c" "ECONNREFUSED") +QDEF(MP_QSTR_ECONNRESET, (const byte*)"\x19\xfb\x0a" "ECONNRESET") +QDEF(MP_QSTR_EEXIST, (const byte*)"\x53\xad\x06" "EEXIST") +QDEF(MP_QSTR_EHOSTUNREACH, (const byte*)"\x86\x25\x0c" "EHOSTUNREACH") +QDEF(MP_QSTR_EINPROGRESS, (const byte*)"\x9a\xa0\x0b" "EINPROGRESS") +QDEF(MP_QSTR_EINVAL, (const byte*)"\x5c\xff\x06" "EINVAL") +QDEF(MP_QSTR_EIO, (const byte*)"\x86\xa6\x03" "EIO") +QDEF(MP_QSTR_EISDIR, (const byte*)"\xa5\x4f\x06" "EISDIR") +QDEF(MP_QSTR_ENOBUFS, (const byte*)"\xe3\x87\x07" "ENOBUFS") +QDEF(MP_QSTR_ENODEV, (const byte*)"\xb6\x67\x06" "ENODEV") +QDEF(MP_QSTR_ENOENT, (const byte*)"\x5e\x65\x06" "ENOENT") +QDEF(MP_QSTR_ENOMEM, (const byte*)"\xa4\x85\x06" "ENOMEM") +QDEF(MP_QSTR_ENOTCONN, (const byte*)"\x79\xd7\x08" "ENOTCONN") +QDEF(MP_QSTR_EOFError, (const byte*)"\x91\xbf\x08" "EOFError") +QDEF(MP_QSTR_EOPNOTSUPP, (const byte*)"\xac\x97\x0a" "EOPNOTSUPP") +QDEF(MP_QSTR_EPERM, (const byte*)"\xea\x7f\x05" "EPERM") +QDEF(MP_QSTR_ETIMEDOUT, (const byte*)"\xff\xf8\x09" "ETIMEDOUT") +QDEF(MP_QSTR_EXIT, (const byte*)"\x45\xc7\x04" "EXIT") +QDEF(MP_QSTR_EXTBASE, (const byte*)"\x19\x3d\x07" "EXTBASE") +QDEF(MP_QSTR_EXTENDED, (const byte*)"\x42\x69\x08" "EXTENDED") +QDEF(MP_QSTR_Ellipsis, (const byte*)"\xf0\xe0\x08" "Ellipsis") +QDEF(MP_QSTR_Exception, (const byte*)"\xf2\x29\x09" "Exception") +QDEF(MP_QSTR_FLOAT32, (const byte*)"\xb4\x87\x07" "FLOAT32") +QDEF(MP_QSTR_FLOAT64, (const byte*)"\x17\x87\x07" "FLOAT64") +QDEF(MP_QSTR_FONT_7seg, (const byte*)"\x0f\x87\x09" "FONT_7seg") +QDEF(MP_QSTR_FONT_Comic, (const byte*)"\xa2\xd2\x0a" "FONT_Comic") +QDEF(MP_QSTR_FONT_Default, (const byte*)"\x22\xdc\x0c" "FONT_Default") +QDEF(MP_QSTR_FONT_DefaultSmall, (const byte*)"\x5d\x0b\x11" "FONT_DefaultSmall") +QDEF(MP_QSTR_FONT_DejaVu18, (const byte*)"\xa9\xa8\x0d" "FONT_DejaVu18") +QDEF(MP_QSTR_FONT_Dejavu24, (const byte*)"\x66\x1c\x0d" "FONT_Dejavu24") +QDEF(MP_QSTR_FONT_Minya, (const byte*)"\x3b\xc1\x0a" "FONT_Minya") +QDEF(MP_QSTR_FONT_Small, (const byte*)"\x16\x43\x0a" "FONT_Small") +QDEF(MP_QSTR_FONT_Tooney, (const byte*)"\xef\xf6\x0b" "FONT_Tooney") +QDEF(MP_QSTR_FONT_Ubuntu, (const byte*)"\xa4\xfb\x0b" "FONT_Ubuntu") +QDEF(MP_QSTR_FileIO, (const byte*)"\xc5\x15\x06" "FileIO") +QDEF(MP_QSTR_GRAY, (const byte*)"\x08\xc6\x04" "GRAY") +QDEF(MP_QSTR_GREEN, (const byte*)"\xde\x98\x05" "GREEN") +QDEF(MP_QSTR_GREENYELLOW, (const byte*)"\xda\x02\x0b" "GREENYELLOW") +QDEF(MP_QSTR_GeneratorExit, (const byte*)"\x16\x62\x0d" "GeneratorExit") +QDEF(MP_QSTR_HALL, (const byte*)"\x4c\x8d\x04" "HALL") +QDEF(MP_QSTR_HSBtoRGB, (const byte*)"\xd0\x92\x08" "HSBtoRGB") +QDEF(MP_QSTR_HSBtoRGBint, (const byte*)"\xe3\xfa\x0b" "HSBtoRGBint") +QDEF(MP_QSTR_HSPI, (const byte*)"\xc7\xe9\x04" "HSPI") +QDEF(MP_QSTR_I2C, (const byte*)"\x5d\xdf\x03" "I2C") +QDEF(MP_QSTR_ILI9341, (const byte*)"\x86\x05\x07" "ILI9341") +QDEF(MP_QSTR_ILI9488, (const byte*)"\x84\x12\x07" "ILI9488") +QDEF(MP_QSTR_IN, (const byte*)"\x22\x73\x02" "IN") +QDEF(MP_QSTR_INT16, (const byte*)"\x91\x76\x05" "INT16") +QDEF(MP_QSTR_INT32, (const byte*)"\x57\x76\x05" "INT32") +QDEF(MP_QSTR_INT64, (const byte*)"\xf4\x75\x05" "INT64") +QDEF(MP_QSTR_INT8, (const byte*)"\xce\xbd\x04" "INT8") +QDEF(MP_QSTR_IPPROTO_IP, (const byte*)"\x0c\x8e\x0a" "IPPROTO_IP") +QDEF(MP_QSTR_IPPROTO_TCP, (const byte*)"\xb2\xde\x0b" "IPPROTO_TCP") +QDEF(MP_QSTR_IPPROTO_UDP, (const byte*)"\x54\xdb\x0b" "IPPROTO_UDP") +QDEF(MP_QSTR_IP_ADD_MEMBERSHIP, (const byte*)"\x6f\x5b\x11" "IP_ADD_MEMBERSHIP") +QDEF(MP_QSTR_IRQ, (const byte*)"\xaf\xda\x03" "IRQ") +QDEF(MP_QSTR_IRQ_FALLING, (const byte*)"\x37\xc0\x0b" "IRQ_FALLING") +QDEF(MP_QSTR_IRQ_RISING, (const byte*)"\x78\xed\x0a" "IRQ_RISING") +QDEF(MP_QSTR_ImportError, (const byte*)"\x20\x9c\x0b" "ImportError") +QDEF(MP_QSTR_IndentationError, (const byte*)"\x5c\x20\x10" "IndentationError") +QDEF(MP_QSTR_IndexError, (const byte*)"\x83\xad\x0a" "IndexError") +QDEF(MP_QSTR_JPG, (const byte*)"\x38\xe7\x03" "JPG") +QDEF(MP_QSTR_KeyError, (const byte*)"\xea\x00\x08" "KeyError") +QDEF(MP_QSTR_KeyboardInterrupt, (const byte*)"\xaf\xe2\x11" "KeyboardInterrupt") +QDEF(MP_QSTR_LANDSCAPE, (const byte*)"\xa6\x7b\x09" "LANDSCAPE") +QDEF(MP_QSTR_LANDSCAPE_FLIP, (const byte*)"\xca\x5c\x0e" "LANDSCAPE_FLIP") +QDEF(MP_QSTR_LASTX, (const byte*)"\x57\x45\x05" "LASTX") +QDEF(MP_QSTR_LASTY, (const byte*)"\x56\x45\x05" "LASTY") +QDEF(MP_QSTR_LIGHTGREY, (const byte*)"\xd2\x77\x09" "LIGHTGREY") +QDEF(MP_QSTR_LIME, (const byte*)"\xe8\x3c\x04" "LIME") +QDEF(MP_QSTR_LITTLE_ENDIAN, (const byte*)"\xbf\x5b\x0d" "LITTLE_ENDIAN") +QDEF(MP_QSTR_LOG_DEBUG, (const byte*)"\x6f\xdb\x09" "LOG_DEBUG") +QDEF(MP_QSTR_LOG_ERROR, (const byte*)"\x06\xce\x09" "LOG_ERROR") +QDEF(MP_QSTR_LOG_INFO, (const byte*)"\xd0\x75\x08" "LOG_INFO") +QDEF(MP_QSTR_LOG_NONE, (const byte*)"\xf4\xd3\x08" "LOG_NONE") +QDEF(MP_QSTR_LOG_VERBOSE, (const byte*)"\x24\xbd\x0b" "LOG_VERBOSE") +QDEF(MP_QSTR_LOG_WARN, (const byte*)"\x54\xad\x08" "LOG_WARN") +QDEF(MP_QSTR_LSB, (const byte*)"\xd8\xde\x03" "LSB") +QDEF(MP_QSTR_LookupError, (const byte*)"\xff\x69\x0b" "LookupError") +QDEF(MP_QSTR_MAGENTA, (const byte*)"\xf0\xf0\x07" "MAGENTA") +QDEF(MP_QSTR_MAROON, (const byte*)"\x95\x40\x06" "MAROON") +QDEF(MP_QSTR_MASTER, (const byte*)"\x39\x8d\x06" "MASTER") +QDEF(MP_QSTR_MODE_11B, (const byte*)"\xfb\x44\x08" "MODE_11B") +QDEF(MP_QSTR_MODE_11G, (const byte*)"\xfe\x44\x08" "MODE_11G") +QDEF(MP_QSTR_MODE_11N, (const byte*)"\xf7\x44\x08" "MODE_11N") +QDEF(MP_QSTR_MSB, (const byte*)"\x59\xca\x03" "MSB") +QDEF(MP_QSTR_MemoryError, (const byte*)"\xdc\x83\x0b" "MemoryError") +QDEF(MP_QSTR_Message, (const byte*)"\x8e\x9c\x07" "Message") +QDEF(MP_QSTR_NATIVE, (const byte*)"\x04\x8e\x06" "NATIVE") +QDEF(MP_QSTR_NAVY, (const byte*)"\xc5\x57\x04" "NAVY") +QDEF(MP_QSTR_NameError, (const byte*)"\xba\x2d\x09" "NameError") +QDEF(MP_QSTR_Neopixel, (const byte*)"\x49\x42\x08" "Neopixel") +QDEF(MP_QSTR_NoneType, (const byte*)"\x17\x68\x08" "NoneType") +QDEF(MP_QSTR_NotImplemented, (const byte*)"\x3e\xc6\x0e" "NotImplemented") +QDEF(MP_QSTR_NotImplementedError, (const byte*)"\xc6\x98\x13" "NotImplementedError") +QDEF(MP_QSTR_OLIVE, (const byte*)"\x7c\xb1\x05" "OLIVE") +QDEF(MP_QSTR_ONE_SHOT, (const byte*)"\x5e\xff\x08" "ONE_SHOT") +QDEF(MP_QSTR_OPEN_DRAIN, (const byte*)"\x5e\x48\x0a" "OPEN_DRAIN") +QDEF(MP_QSTR_ORANGE, (const byte*)"\xf5\xc1\x06" "ORANGE") +QDEF(MP_QSTR_OSError, (const byte*)"\xa1\x65\x07" "OSError") +QDEF(MP_QSTR_OUT, (const byte*)"\x0b\xe3\x03" "OUT") +QDEF(MP_QSTR_Onewire, (const byte*)"\x48\x3b\x07" "Onewire") +QDEF(MP_QSTR_OrderedDict, (const byte*)"\xf0\x7e\x0b" "OrderedDict") +QDEF(MP_QSTR_OverflowError, (const byte*)"\x81\xe1\x0d" "OverflowError") +QDEF(MP_QSTR_PAUSE, (const byte*)"\xf7\xdd\x05" "PAUSE") +QDEF(MP_QSTR_PERIODIC, (const byte*)"\x0a\x35\x08" "PERIODIC") +QDEF(MP_QSTR_PHY_LAN8720, (const byte*)"\xf5\x1f\x0b" "PHY_LAN8720") +QDEF(MP_QSTR_PHY_TLK110, (const byte*)"\x98\xf7\x0a" "PHY_TLK110") +QDEF(MP_QSTR_PINK, (const byte*)"\x19\x12\x04" "PINK") +QDEF(MP_QSTR_POLLERR, (const byte*)"\xdf\xc0\x07" "POLLERR") +QDEF(MP_QSTR_POLLHUP, (const byte*)"\x77\x8a\x07" "POLLHUP") +QDEF(MP_QSTR_POLLIN, (const byte*)"\x7d\x61\x06" "POLLIN") +QDEF(MP_QSTR_POLLOUT, (const byte*)"\x74\x85\x07" "POLLOUT") +QDEF(MP_QSTR_PORTRAIT, (const byte*)"\xf2\xcd\x08" "PORTRAIT") +QDEF(MP_QSTR_PORTRAIT_FLIP, (const byte*)"\x1e\xf2\x0d" "PORTRAIT_FLIP") +QDEF(MP_QSTR_PTR, (const byte*)"\xb3\x0c\x03" "PTR") +QDEF(MP_QSTR_PULL_DOWN, (const byte*)"\xad\xfb\x09" "PULL_DOWN") +QDEF(MP_QSTR_PULL_UP, (const byte*)"\xba\x5e\x07" "PULL_UP") +QDEF(MP_QSTR_PURPLE, (const byte*)"\x0b\x40\x06" "PURPLE") +QDEF(MP_QSTR_PWM, (const byte*)"\x4f\x0d\x03" "PWM") +QDEF(MP_QSTR_Pin, (const byte*)"\x12\x14\x03" "Pin") +QDEF(MP_QSTR_PinBase, (const byte*)"\x47\x43\x07" "PinBase") +QDEF(MP_QSTR_RED, (const byte*)"\x96\x06\x03" "RED") +QDEF(MP_QSTR_RESUME, (const byte*)"\x1c\x5c\x06" "RESUME") +QDEF(MP_QSTR_RGBtoHSB, (const byte*)"\x10\x1d\x08" "RGBtoHSB") +QDEF(MP_QSTR_RIGHT, (const byte*)"\xc5\x79\x05" "RIGHT") +QDEF(MP_QSTR_RTC, (const byte*)"\xa0\x04\x03" "RTC") +QDEF(MP_QSTR_RuntimeError, (const byte*)"\x61\xf1\x0c" "RuntimeError") +QDEF(MP_QSTR_SILVER, (const byte*)"\x52\xdb\x06" "SILVER") +QDEF(MP_QSTR_SOCK_DGRAM, (const byte*)"\xb3\x14\x0a" "SOCK_DGRAM") +QDEF(MP_QSTR_SOCK_RAW, (const byte*)"\xca\x96\x08" "SOCK_RAW") +QDEF(MP_QSTR_SOCK_STREAM, (const byte*)"\x32\xbe\x0b" "SOCK_STREAM") +QDEF(MP_QSTR_SOL_SOCKET, (const byte*)"\x0f\xdf\x0a" "SOL_SOCKET") +QDEF(MP_QSTR_SO_REUSEADDR, (const byte*)"\x21\x53\x0c" "SO_REUSEADDR") +QDEF(MP_QSTR_SPI, (const byte*)"\xef\x11\x03" "SPI") +QDEF(MP_QSTR_ST7735, (const byte*)"\x24\x22\x06" "ST7735") +QDEF(MP_QSTR_ST7735B, (const byte*)"\xe6\x66\x07" "ST7735B") +QDEF(MP_QSTR_ST7735R, (const byte*)"\xf6\x66\x07" "ST7735R") +QDEF(MP_QSTR_ST7789, (const byte*)"\x03\x23\x06" "ST7789") +QDEF(MP_QSTR_STATUS, (const byte*)"\x31\xf4\x06" "STATUS") +QDEF(MP_QSTR_STA_IF, (const byte*)"\xb3\x1b\x06" "STA_IF") +QDEF(MP_QSTR_STOP, (const byte*)"\x5d\x3f\x04" "STOP") +QDEF(MP_QSTR_SUSPEND, (const byte*)"\x0f\x79\x07" "SUSPEND") +QDEF(MP_QSTR_Signal, (const byte*)"\x9b\xe4\x06" "Signal") +QDEF(MP_QSTR_StopAsyncIteration, (const byte*)"\xec\xf0\x12" "StopAsyncIteration") +QDEF(MP_QSTR_StopIteration, (const byte*)"\xea\x1c\x0d" "StopIteration") +QDEF(MP_QSTR_StringIO, (const byte*)"\x76\x76\x08" "StringIO") +QDEF(MP_QSTR_SyntaxError, (const byte*)"\x94\x8f\x0b" "SyntaxError") +QDEF(MP_QSTR_SystemExit, (const byte*)"\x20\xff\x0a" "SystemExit") +QDEF(MP_QSTR_TEAL, (const byte*)"\x79\xd1\x04" "TEAL") +QDEF(MP_QSTR_TFT, (const byte*)"\x63\xff\x03" "TFT") +QDEF(MP_QSTR_TOUCH_NONE, (const byte*)"\xb5\x0a\x0a" "TOUCH_NONE") +QDEF(MP_QSTR_TOUCH_STMPE, (const byte*)"\xc0\x76\x0b" "TOUCH_STMPE") +QDEF(MP_QSTR_TOUCH_XPT, (const byte*)"\x43\x32\x09" "TOUCH_XPT") +QDEF(MP_QSTR_TYPE_RGB, (const byte*)"\x95\xd4\x08" "TYPE_RGB") +QDEF(MP_QSTR_TYPE_RGBW, (const byte*)"\x62\x67\x09" "TYPE_RGBW") +QDEF(MP_QSTR_TextIOWrapper, (const byte*)"\xad\x8d\x0d" "TextIOWrapper") +QDEF(MP_QSTR_ThreadID, (const byte*)"\x26\x9d\x08" "ThreadID") +QDEF(MP_QSTR_TimeoutError, (const byte*)"\x66\x4b\x0c" "TimeoutError") +QDEF(MP_QSTR_Timer, (const byte*)"\xa2\x1f\x05" "Timer") +QDEF(MP_QSTR_TouchPad, (const byte*)"\xd5\x8a\x08" "TouchPad") +QDEF(MP_QSTR_TypeError, (const byte*)"\x25\x96\x09" "TypeError") +QDEF(MP_QSTR_UART, (const byte*)"\xb7\x19\x04" "UART") +QDEF(MP_QSTR_UINT16, (const byte*)"\xc4\x17\x06" "UINT16") +QDEF(MP_QSTR_UINT32, (const byte*)"\x82\x17\x06" "UINT32") +QDEF(MP_QSTR_UINT64, (const byte*)"\x61\x18\x06" "UINT64") +QDEF(MP_QSTR_UINT8, (const byte*)"\xbb\xe1\x05" "UINT8") +QDEF(MP_QSTR_UnicodeError, (const byte*)"\x22\xd1\x0c" "UnicodeError") +QDEF(MP_QSTR_VOID, (const byte*)"\x31\xf2\x04" "VOID") +QDEF(MP_QSTR_VSPI, (const byte*)"\x19\x7e\x04" "VSPI") +QDEF(MP_QSTR_ValueError, (const byte*)"\x96\x87\x0a" "ValueError") +QDEF(MP_QSTR_VfsNative, (const byte*)"\x07\xdf\x09" "VfsNative") +QDEF(MP_QSTR_WHITE, (const byte*)"\xa2\xc2\x05" "WHITE") +QDEF(MP_QSTR_WIDTH_10BIT, (const byte*)"\xc2\x7c\x0b" "WIDTH_10BIT") +QDEF(MP_QSTR_WIDTH_11BIT, (const byte*)"\xa3\xdf\x0b" "WIDTH_11BIT") +QDEF(MP_QSTR_WIDTH_12BIT, (const byte*)"\x80\xa4\x0b" "WIDTH_12BIT") +QDEF(MP_QSTR_WIDTH_9BIT, (const byte*)"\x5a\x2c\x0a" "WIDTH_9BIT") +QDEF(MP_QSTR_WLAN, (const byte*)"\x11\x94\x04" "WLAN") +QDEF(MP_QSTR_YELLOW, (const byte*)"\x41\x49\x06" "YELLOW") +QDEF(MP_QSTR_ZeroDivisionError, (const byte*)"\xb6\x27\x11" "ZeroDivisionError") +QDEF(MP_QSTR__thread, (const byte*)"\xd4\x02\x07" "_thread") +QDEF(MP_QSTR_a2b_base64, (const byte*)"\x3c\x0b\x0a" "a2b_base64") +QDEF(MP_QSTR_abs, (const byte*)"\x95\x32\x03" "abs") +QDEF(MP_QSTR_accept, (const byte*)"\x85\x89\x06" "accept") +QDEF(MP_QSTR_accepted, (const byte*)"\x24\x02\x08" "accepted") +QDEF(MP_QSTR_acos, (const byte*)"\x1b\xa0\x04" "acos") +QDEF(MP_QSTR_acosh, (const byte*)"\x13\xa3\x05" "acosh") +QDEF(MP_QSTR_acquire, (const byte*)"\x1d\xd3\x07" "acquire") +QDEF(MP_QSTR_active, (const byte*)"\x69\xea\x06" "active") +QDEF(MP_QSTR_add, (const byte*)"\x44\x32\x03" "add") +QDEF(MP_QSTR_addService, (const byte*)"\xd9\x55\x0a" "addService") +QDEF(MP_QSTR_addr, (const byte*)"\xb6\x7a\x04" "addr") +QDEF(MP_QSTR_address, (const byte*)"\x73\x53\x07" "address") +QDEF(MP_QSTR_addressof, (const byte*)"\x5a\xf9\x09" "addressof") +QDEF(MP_QSTR_addrlen, (const byte*)"\x71\x7c\x07" "addrlen") +QDEF(MP_QSTR_all, (const byte*)"\x44\x33\x03" "all") +QDEF(MP_QSTR_alloc_emergency_exception_buf, (const byte*)"\x78\x2a\x1d" "alloc_emergency_exception_buf") +QDEF(MP_QSTR_allowsuspend, (const byte*)"\x76\xc3\x0c" "allowsuspend") +QDEF(MP_QSTR_angle, (const byte*)"\x84\x2c\x05" "angle") +QDEF(MP_QSTR_any, (const byte*)"\x13\x33\x03" "any") +QDEF(MP_QSTR_append, (const byte*)"\x6b\x97\x06" "append") +QDEF(MP_QSTR_arc, (const byte*)"\x95\x34\x03" "arc") +QDEF(MP_QSTR_arg, (const byte*)"\x91\x34\x03" "arg") +QDEF(MP_QSTR_args, (const byte*)"\xc2\xc6\x04" "args") +QDEF(MP_QSTR_argv, (const byte*)"\xc7\xc6\x04" "argv") +QDEF(MP_QSTR_array, (const byte*)"\x7c\x72\x05" "array") +QDEF(MP_QSTR_asin, (const byte*)"\x50\xe5\x04" "asin") +QDEF(MP_QSTR_asinh, (const byte*)"\x38\x8f\x05" "asinh") +QDEF(MP_QSTR_asnum, (const byte*)"\x01\x82\x05" "asnum") +QDEF(MP_QSTR_atan, (const byte*)"\x1f\xbe\x04" "atan") +QDEF(MP_QSTR_atan2, (const byte*)"\xcd\x81\x05" "atan2") +QDEF(MP_QSTR_atanh, (const byte*)"\x97\x81\x05" "atanh") +QDEF(MP_QSTR_atten, (const byte*)"\xaf\x50\x05" "atten") +QDEF(MP_QSTR_attrib7seg, (const byte*)"\xdb\x79\x0a" "attrib7seg") +QDEF(MP_QSTR_authmode, (const byte*)"\xce\x65\x08" "authmode") +QDEF(MP_QSTR_b2a_base64, (const byte*)"\x3c\x8f\x0a" "b2a_base64") +QDEF(MP_QSTR_backl_on, (const byte*)"\xbc\x78\x08" "backl_on") +QDEF(MP_QSTR_backl_pin, (const byte*)"\xaa\x80\x09" "backl_pin") +QDEF(MP_QSTR_baudrate, (const byte*)"\xf5\xd8\x08" "baudrate") +QDEF(MP_QSTR_bgr, (const byte*)"\xb2\x46\x03" "bgr") +QDEF(MP_QSTR_bin, (const byte*)"\xe0\x48\x03" "bin") +QDEF(MP_QSTR_binascii, (const byte*)"\x91\x3c\x08" "binascii") +QDEF(MP_QSTR_bind, (const byte*)"\x84\x64\x04" "bind") +QDEF(MP_QSTR_bits, (const byte*)"\x49\x68\x04" "bits") +QDEF(MP_QSTR_bool, (const byte*)"\xeb\x3c\x04" "bool") +QDEF(MP_QSTR_bound_method, (const byte*)"\x97\xa2\x0c" "bound_method") +QDEF(MP_QSTR_brightness, (const byte*)"\x4c\xc6\x0a" "brightness") +QDEF(MP_QSTR_buf, (const byte*)"\x74\x49\x03" "buf") +QDEF(MP_QSTR_buffer, (const byte*)"\xe5\xa0\x06" "buffer") +QDEF(MP_QSTR_buffering, (const byte*)"\x25\xdb\x09" "buffering") +QDEF(MP_QSTR_buffsize, (const byte*)"\x77\xad\x08" "buffsize") +QDEF(MP_QSTR_builtins, (const byte*)"\xf7\x31\x08" "builtins") +QDEF(MP_QSTR_bytearray, (const byte*)"\x76\xa3\x09" "bytearray") +QDEF(MP_QSTR_bytearray_at, (const byte*)"\x9c\x5c\x0c" "bytearray_at") +QDEF(MP_QSTR_bytecode, (const byte*)"\x22\x7d\x08" "bytecode") +QDEF(MP_QSTR_byteorder, (const byte*)"\x61\x99\x09" "byteorder") +QDEF(MP_QSTR_bytes, (const byte*)"\x5c\xb2\x05" "bytes") +QDEF(MP_QSTR_bytes_at, (const byte*)"\xb6\x5d\x08" "bytes_at") +QDEF(MP_QSTR_calcsize, (const byte*)"\x4d\x38\x08" "calcsize") +QDEF(MP_QSTR_callable, (const byte*)"\x0d\x70\x08" "callable") +QDEF(MP_QSTR_callback, (const byte*)"\x4c\xf0\x08" "callback") +QDEF(MP_QSTR_calx, (const byte*)"\x73\xc1\x04" "calx") +QDEF(MP_QSTR_caly, (const byte*)"\x72\xc1\x04" "caly") +QDEF(MP_QSTR_ceil, (const byte*)"\x06\xb0\x04" "ceil") +QDEF(MP_QSTR_center, (const byte*)"\x4e\xbf\x06" "center") +QDEF(MP_QSTR_cert, (const byte*)"\x25\xb1\x04" "cert") +QDEF(MP_QSTR_channel, (const byte*)"\x26\x91\x07" "channel") +QDEF(MP_QSTR_chdir, (const byte*)"\xb1\xb2\x05" "chdir") +QDEF(MP_QSTR_choice, (const byte*)"\x2e\x33\x06" "choice") +QDEF(MP_QSTR_chr, (const byte*)"\xdc\x4c\x03" "chr") +QDEF(MP_QSTR_circle, (const byte*)"\xb7\xdd\x06" "circle") +QDEF(MP_QSTR_classmethod, (const byte*)"\xb4\x8c\x0b" "classmethod") +QDEF(MP_QSTR_clear, (const byte*)"\x7c\xa0\x05" "clear") +QDEF(MP_QSTR_clearwin, (const byte*)"\xac\xb0\x08" "clearwin") +QDEF(MP_QSTR_clk, (const byte*)"\x41\x4c\x03" "clk") +QDEF(MP_QSTR_close, (const byte*)"\x33\x67\x05" "close") +QDEF(MP_QSTR_closure, (const byte*)"\x74\xca\x07" "closure") +QDEF(MP_QSTR_cmath, (const byte*)"\xb6\xf4\x05" "cmath") +QDEF(MP_QSTR_code, (const byte*)"\x68\xda\x04" "code") +QDEF(MP_QSTR_collect, (const byte*)"\x9b\x65\x07" "collect") +QDEF(MP_QSTR_collections, (const byte*)"\xe0\xc8\x0b" "collections") +QDEF(MP_QSTR_color, (const byte*)"\xd8\x06\x05" "color") +QDEF(MP_QSTR_color_order, (const byte*)"\x29\xfe\x0b" "color_order") +QDEF(MP_QSTR_compile, (const byte*)"\xf4\xc9\x07" "compile") +QDEF(MP_QSTR_compileFont, (const byte*)"\x47\x0c\x0b" "compileFont") +QDEF(MP_QSTR_complex, (const byte*)"\xc5\x9d\x07" "complex") +QDEF(MP_QSTR_config, (const byte*)"\x4f\xa2\x06" "config") +QDEF(MP_QSTR_connect, (const byte*)"\xdb\x3d\x07" "connect") +QDEF(MP_QSTR_const, (const byte*)"\xc0\xff\x05" "const") +QDEF(MP_QSTR_conv_time, (const byte*)"\x3b\x1d\x09" "conv_time") +QDEF(MP_QSTR_convert, (const byte*)"\xf2\x9e\x07" "convert") +QDEF(MP_QSTR_convert_read, (const byte*)"\x1f\x45\x0c" "convert_read") +QDEF(MP_QSTR_convert_readint, (const byte*)"\x4c\x62\x0f" "convert_readint") +QDEF(MP_QSTR_copy, (const byte*)"\xe0\xdb\x04" "copy") +QDEF(MP_QSTR_copysign, (const byte*)"\x33\x14\x08" "copysign") +QDEF(MP_QSTR_cos, (const byte*)"\x7a\x4c\x03" "cos") +QDEF(MP_QSTR_cosh, (const byte*)"\xd2\xdb\x04" "cosh") +QDEF(MP_QSTR_count, (const byte*)"\xa6\x4d\x05" "count") +QDEF(MP_QSTR_crc32, (const byte*)"\x76\xe8\x05" "crc32") +QDEF(MP_QSTR_crc8, (const byte*)"\xcf\xef\x04" "crc8") +QDEF(MP_QSTR_cs, (const byte*)"\xf5\x6e\x02" "cs") +QDEF(MP_QSTR_cts, (const byte*)"\x41\x4d\x03" "cts") +QDEF(MP_QSTR_dbgpin, (const byte*)"\x53\x30\x06" "dbgpin") +QDEF(MP_QSTR_dc, (const byte*)"\x82\x6d\x02" "dc") +QDEF(MP_QSTR_debug, (const byte*)"\xd4\x55\x05" "debug") +QDEF(MP_QSTR_decode, (const byte*)"\xa9\x59\x06" "decode") +QDEF(MP_QSTR_decompress, (const byte*)"\x62\xfb\x0a" "decompress") +QDEF(MP_QSTR_deepsleep, (const byte*)"\x9e\xd2\x09" "deepsleep") +QDEF(MP_QSTR_default, (const byte*)"\xce\x7d\x07" "default") +QDEF(MP_QSTR_degrees, (const byte*)"\x02\x41\x07" "degrees") +QDEF(MP_QSTR_deinit, (const byte*)"\x9e\x8d\x06" "deinit") +QDEF(MP_QSTR_delattr, (const byte*)"\xdb\xc8\x07" "delattr") +QDEF(MP_QSTR_deleter, (const byte*)"\x6e\xdb\x07" "deleter") +QDEF(MP_QSTR_deselect, (const byte*)"\x0c\x9d\x08" "deselect") +QDEF(MP_QSTR_device, (const byte*)"\x3d\x93\x06" "device") +QDEF(MP_QSTR_dict, (const byte*)"\x3f\xfc\x04" "dict") +QDEF(MP_QSTR_dict_view, (const byte*)"\x2d\xa9\x09" "dict_view") +QDEF(MP_QSTR_difference, (const byte*)"\x72\x24\x0a" "difference") +QDEF(MP_QSTR_difference_update, (const byte*)"\x9c\xfa\x11" "difference_update") +QDEF(MP_QSTR_digest, (const byte*)"\xcd\xc4\x06" "digest") +QDEF(MP_QSTR_dir, (const byte*)"\xfa\x1e\x03" "dir") +QDEF(MP_QSTR_disable, (const byte*)"\x91\x76\x07" "disable") +QDEF(MP_QSTR_disable_irq, (const byte*)"\x04\x3a\x0b" "disable_irq") +QDEF(MP_QSTR_discard, (const byte*)"\x0f\x71\x07" "discard") +QDEF(MP_QSTR_disconnect, (const byte*)"\xa5\x85\x0a" "disconnect") +QDEF(MP_QSTR_display, (const byte*)"\x1f\x55\x07" "display") +QDEF(MP_QSTR_dist, (const byte*)"\x2f\xfe\x04" "dist") +QDEF(MP_QSTR_divmod, (const byte*)"\xb8\x04\x06" "divmod") +QDEF(MP_QSTR_doc, (const byte*)"\x2d\x1f\x03" "doc") +QDEF(MP_QSTR_ds18x20, (const byte*)"\x61\x26\x07" "ds18x20") +QDEF(MP_QSTR_dumps, (const byte*)"\x7a\x2d\x05" "dumps") +QDEF(MP_QSTR_duplex, (const byte*)"\xf5\x7b\x06" "duplex") +QDEF(MP_QSTR_duty, (const byte*)"\x19\x2c\x04" "duty") +QDEF(MP_QSTR_e, (const byte*)"\xc0\xb5\x01" "e") +QDEF(MP_QSTR_ellipse, (const byte*)"\x0f\xdc\x07" "ellipse") +QDEF(MP_QSTR_enable, (const byte*)"\x04\xde\x06" "enable") +QDEF(MP_QSTR_enable_irq, (const byte*)"\x91\x60\x0a" "enable_irq") +QDEF(MP_QSTR_encode, (const byte*)"\x43\xca\x06" "encode") +QDEF(MP_QSTR_encoding, (const byte*)"\x06\x9c\x08" "encoding") +QDEF(MP_QSTR_end, (const byte*)"\x0a\x23\x03" "end") +QDEF(MP_QSTR_endswith, (const byte*)"\x1b\xa3\x08" "endswith") +QDEF(MP_QSTR_enumerate, (const byte*)"\x71\xba\x09" "enumerate") +QDEF(MP_QSTR_erf, (const byte*)"\x94\x23\x03" "erf") +QDEF(MP_QSTR_erfc, (const byte*)"\x77\x96\x04" "erfc") +QDEF(MP_QSTR_errno, (const byte*)"\xc1\x11\x05" "errno") +QDEF(MP_QSTR_errorcode, (const byte*)"\x10\xdd\x09" "errorcode") +QDEF(MP_QSTR_essid, (const byte*)"\x4d\xb1\x05" "essid") +QDEF(MP_QSTR_eval, (const byte*)"\x9b\xa6\x04" "eval") +QDEF(MP_QSTR_events, (const byte*)"\x9a\xa2\x06" "events") +QDEF(MP_QSTR_exc_info, (const byte*)"\x0a\xff\x08" "exc_info") +QDEF(MP_QSTR_exec, (const byte*)"\x1e\xc0\x04" "exec") +QDEF(MP_QSTR_execfile, (const byte*)"\x58\x28\x08" "execfile") +QDEF(MP_QSTR_exit, (const byte*)"\x85\xbe\x04" "exit") +QDEF(MP_QSTR_exp, (const byte*)"\xc8\x24\x03" "exp") +QDEF(MP_QSTR_expm1, (const byte*)"\x74\x72\x05" "expm1") +QDEF(MP_QSTR_extend, (const byte*)"\x63\xe8\x06" "extend") +QDEF(MP_QSTR_fabs, (const byte*)"\x93\x12\x04" "fabs") +QDEF(MP_QSTR_file, (const byte*)"\xc3\x34\x04" "file") +QDEF(MP_QSTR_fileno, (const byte*)"\x82\x76\x06" "fileno") +QDEF(MP_QSTR_fillcolor, (const byte*)"\x77\x7f\x09" "fillcolor") +QDEF(MP_QSTR_filter, (const byte*)"\x25\xbe\x06" "filter") +QDEF(MP_QSTR_find, (const byte*)"\x00\x34\x04" "find") +QDEF(MP_QSTR_firstbit, (const byte*)"\x20\x39\x08" "firstbit") +QDEF(MP_QSTR_fixedwidth, (const byte*)"\x35\x36\x0a" "fixedwidth") +QDEF(MP_QSTR_float, (const byte*)"\x35\x44\x05" "float") +QDEF(MP_QSTR_floor, (const byte*)"\x7d\x46\x05" "floor") +QDEF(MP_QSTR_flush, (const byte*)"\x61\xc1\x05" "flush") +QDEF(MP_QSTR_fmod, (const byte*)"\xe5\x44\x04" "fmod") +QDEF(MP_QSTR_font, (const byte*)"\x96\x2b\x04" "font") +QDEF(MP_QSTR_fontSize, (const byte*)"\x93\x3e\x08" "fontSize") +QDEF(MP_QSTR_forceFactory, (const byte*)"\x2c\x9d\x0c" "forceFactory") +QDEF(MP_QSTR_format, (const byte*)"\x26\x33\x06" "format") +QDEF(MP_QSTR_freq, (const byte*)"\xe5\x3a\x04" "freq") +QDEF(MP_QSTR_frexp, (const byte*)"\x1c\x98\x05" "frexp") +QDEF(MP_QSTR_from_bytes, (const byte*)"\x35\x74\x0a" "from_bytes") +QDEF(MP_QSTR_fromfile, (const byte*)"\xf5\x42\x08" "fromfile") +QDEF(MP_QSTR_fromkeys, (const byte*)"\x37\xbd\x08" "fromkeys") +QDEF(MP_QSTR_frozenset, (const byte*)"\xed\x9c\x09" "frozenset") +QDEF(MP_QSTR_ftp, (const byte*)"\x47\x39\x03" "ftp") +QDEF(MP_QSTR_func, (const byte*)"\x1b\x68\x04" "func") +QDEF(MP_QSTR_function, (const byte*)"\x27\x02\x08" "function") +QDEF(MP_QSTR_gamma, (const byte*)"\x02\x90\x05" "gamma") +QDEF(MP_QSTR_gc, (const byte*)"\x61\x6e\x02" "gc") +QDEF(MP_QSTR_generator, (const byte*)"\x96\xc3\x09" "generator") +QDEF(MP_QSTR_get, (const byte*)"\x33\x3b\x03" "get") +QDEF(MP_QSTR_getReplID, (const byte*)"\xb5\xe5\x09" "getReplID") +QDEF(MP_QSTR_getSelfName, (const byte*)"\x68\xaf\x0b" "getSelfName") +QDEF(MP_QSTR_getThreadName, (const byte*)"\xba\xa7\x0d" "getThreadName") +QDEF(MP_QSTR_get_pwrmode, (const byte*)"\x7a\x71\x0b" "get_pwrmode") +QDEF(MP_QSTR_get_res, (const byte*)"\x88\x95\x07" "get_res") +QDEF(MP_QSTR_getaddrinfo, (const byte*)"\x6e\x18\x0b" "getaddrinfo") +QDEF(MP_QSTR_getattr, (const byte*)"\xc0\x17\x07" "getattr") +QDEF(MP_QSTR_getcwd, (const byte*)"\x03\xd0\x06" "getcwd") +QDEF(MP_QSTR_getmsg, (const byte*)"\x0a\x1b\x06" "getmsg") +QDEF(MP_QSTR_getnotification, (const byte*)"\x3e\xa6\x0f" "getnotification") +QDEF(MP_QSTR_getpeercert, (const byte*)"\xb1\x92\x0b" "getpeercert") +QDEF(MP_QSTR_getrandbits, (const byte*)"\x66\x7d\x0b" "getrandbits") +QDEF(MP_QSTR_getter, (const byte*)"\x90\xb2\x06" "getter") +QDEF(MP_QSTR_gettouch, (const byte*)"\xb6\x12\x08" "gettouch") +QDEF(MP_QSTR_getvalue, (const byte*)"\x78\xac\x08" "getvalue") +QDEF(MP_QSTR_globals, (const byte*)"\x9d\x49\x07" "globals") +QDEF(MP_QSTR_gmtime, (const byte*)"\x5a\x8e\x06" "gmtime") +QDEF(MP_QSTR_group, (const byte*)"\xba\xb0\x05" "group") +QDEF(MP_QSTR_handler, (const byte*)"\xdd\x5d\x07" "handler") +QDEF(MP_QSTR_hasattr, (const byte*)"\x8c\xb0\x07" "hasattr") +QDEF(MP_QSTR_hash, (const byte*)"\xb7\x70\x04" "hash") +QDEF(MP_QSTR_hashlib, (const byte*)"\x10\x6d\x07" "hashlib") +QDEF(MP_QSTR_hastouch, (const byte*)"\x7a\x3f\x08" "hastouch") +QDEF(MP_QSTR_heap_info, (const byte*)"\x68\x1d\x09" "heap_info") +QDEF(MP_QSTR_heap_lock, (const byte*)"\xad\x8c\x09" "heap_lock") +QDEF(MP_QSTR_heap_unlock, (const byte*)"\x56\x2d\x0b" "heap_unlock") +QDEF(MP_QSTR_heapify, (const byte*)"\xaf\x2d\x07" "heapify") +QDEF(MP_QSTR_heappop, (const byte*)"\xd6\x27\x07" "heappop") +QDEF(MP_QSTR_heappush, (const byte*)"\x87\x6b\x08" "heappush") +QDEF(MP_QSTR_heapq, (const byte*)"\x68\x1d\x05" "heapq") +QDEF(MP_QSTR_height, (const byte*)"\xfa\x33\x06" "height") +QDEF(MP_QSTR_help, (const byte*)"\x94\x5c\x04" "help") +QDEF(MP_QSTR_hex, (const byte*)"\x70\x50\x03" "hex") +QDEF(MP_QSTR_hexlify, (const byte*)"\x2a\x7f\x07" "hexlify") +QDEF(MP_QSTR_hidden, (const byte*)"\xef\x48\x06" "hidden") +QDEF(MP_QSTR_hostname, (const byte*)"\xc2\x95\x08" "hostname") +QDEF(MP_QSTR_hsb2rgb, (const byte*)"\xd9\xce\x07" "hsb2rgb") +QDEF(MP_QSTR_hue, (const byte*)"\x7d\x52\x03" "hue") +QDEF(MP_QSTR_id, (const byte*)"\x28\x6f\x02" "id") +QDEF(MP_QSTR_idle, (const byte*)"\xa1\xdc\x04" "idle") +QDEF(MP_QSTR_if, (const byte*)"\x2a\x6f\x02" "if") +QDEF(MP_QSTR_ifconfig, (const byte*)"\xe0\x41\x08" "ifconfig") +QDEF(MP_QSTR_ilistdir, (const byte*)"\x71\x6a\x08" "ilistdir") +QDEF(MP_QSTR_imag, (const byte*)"\x47\xb7\x04" "imag") +QDEF(MP_QSTR_image, (const byte*)"\x42\xa0\x05" "image") +QDEF(MP_QSTR_implementation, (const byte*)"\x17\x2d\x0e" "implementation") +QDEF(MP_QSTR_index, (const byte*)"\x7b\x28\x05" "index") +QDEF(MP_QSTR_init, (const byte*)"\x1f\xb4\x04" "init") +QDEF(MP_QSTR_input, (const byte*)"\x73\x5a\x05" "input") +QDEF(MP_QSTR_insert, (const byte*)"\x12\x54\x06" "insert") +QDEF(MP_QSTR_instance, (const byte*)"\x8c\x54\x08" "instance") +QDEF(MP_QSTR_int, (const byte*)"\x16\x53\x03" "int") +QDEF(MP_QSTR_intersection, (const byte*)"\x28\x2a\x0c" "intersection") +QDEF(MP_QSTR_intersection_update, (const byte*)"\x06\xdd\x13" "intersection_update") +QDEF(MP_QSTR_invert, (const byte*)"\xb7\x00\x06" "invert") +QDEF(MP_QSTR_invrot, (const byte*)"\x9d\xcb\x06" "invrot") +QDEF(MP_QSTR_io, (const byte*)"\x23\x6f\x02" "io") +QDEF(MP_QSTR_ipoll, (const byte*)"\x53\x5d\x05" "ipoll") +QDEF(MP_QSTR_irq, (const byte*)"\x8f\x56\x03" "irq") +QDEF(MP_QSTR_isalpha, (const byte*)"\xeb\x37\x07" "isalpha") +QDEF(MP_QSTR_isconnected, (const byte*)"\x80\x99\x0b" "isconnected") +QDEF(MP_QSTR_isdigit, (const byte*)"\xa8\x9a\x07" "isdigit") +QDEF(MP_QSTR_isdisjoint, (const byte*)"\xf7\x68\x0a" "isdisjoint") +QDEF(MP_QSTR_isenabled, (const byte*)"\x9a\xe5\x09" "isenabled") +QDEF(MP_QSTR_isfinite, (const byte*)"\xa6\xab\x08" "isfinite") +QDEF(MP_QSTR_isinf, (const byte*)"\x3e\x11\x05" "isinf") +QDEF(MP_QSTR_isinstance, (const byte*)"\xb6\xbe\x0a" "isinstance") +QDEF(MP_QSTR_islower, (const byte*)"\xfc\x80\x07" "islower") +QDEF(MP_QSTR_isnan, (const byte*)"\x9e\x03\x05" "isnan") +QDEF(MP_QSTR_isrunning, (const byte*)"\x18\xfb\x09" "isrunning") +QDEF(MP_QSTR_isspace, (const byte*)"\x5b\xf8\x07" "isspace") +QDEF(MP_QSTR_issubclass, (const byte*)"\xb5\x7f\x0a" "issubclass") +QDEF(MP_QSTR_issubset, (const byte*)"\xb9\xc1\x08" "issubset") +QDEF(MP_QSTR_issuperset, (const byte*)"\xfc\xec\x0a" "issuperset") +QDEF(MP_QSTR_isupper, (const byte*)"\xdd\xa7\x07" "isupper") +QDEF(MP_QSTR_items, (const byte*)"\xe3\x53\x05" "items") +QDEF(MP_QSTR_iter, (const byte*)"\x8f\x21\x04" "iter") +QDEF(MP_QSTR_iterable, (const byte*)"\x25\x92\x08" "iterable") +QDEF(MP_QSTR_iterator, (const byte*)"\x47\xbe\x08" "iterator") +QDEF(MP_QSTR_join, (const byte*)"\xa7\x5c\x04" "join") +QDEF(MP_QSTR_json, (const byte*)"\xfd\xd1\x04" "json") +QDEF(MP_QSTR_kbd_intr, (const byte*)"\xf6\x13\x08" "kbd_intr") +QDEF(MP_QSTR_keepends, (const byte*)"\x62\x8b\x08" "keepends") +QDEF(MP_QSTR_key, (const byte*)"\x32\x6d\x03" "key") +QDEF(MP_QSTR_keys, (const byte*)"\x01\x13\x04" "keys") +QDEF(MP_QSTR_kill, (const byte*)"\x67\x02\x04" "kill") +QDEF(MP_QSTR_kwarg, (const byte*)"\x2d\x1f\x05" "kwarg") +QDEF(MP_QSTR_ldexp, (const byte*)"\x40\x6f\x05" "ldexp") +QDEF(MP_QSTR_len, (const byte*)"\x62\x40\x03" "len") +QDEF(MP_QSTR_length, (const byte*)"\x59\x87\x06" "length") +QDEF(MP_QSTR_level, (const byte*)"\xd3\x4b\x05" "level") +QDEF(MP_QSTR_lgamma, (const byte*)"\xce\x6c\x06" "lgamma") +QDEF(MP_QSTR_line, (const byte*)"\xcb\x1c\x04" "line") +QDEF(MP_QSTR_lineByAngle, (const byte*)"\x71\x01\x0b" "lineByAngle") +QDEF(MP_QSTR_list, (const byte*)"\x27\x1d\x04" "list") +QDEF(MP_QSTR_listdir, (const byte*)"\x98\xe3\x07" "listdir") +QDEF(MP_QSTR_listen, (const byte*)"\xcc\x0e\x06" "listen") +QDEF(MP_QSTR_little, (const byte*)"\x89\x6a\x06" "little") +QDEF(MP_QSTR_load, (const byte*)"\x63\x24\x04" "load") +QDEF(MP_QSTR_loads, (const byte*)"\xb0\xb0\x05" "loads") +QDEF(MP_QSTR_locals, (const byte*)"\x3b\xa1\x06" "locals") +QDEF(MP_QSTR_localtime, (const byte*)"\x7d\x46\x09" "localtime") +QDEF(MP_QSTR_lock, (const byte*)"\xae\x23\x04" "lock") +QDEF(MP_QSTR_locked, (const byte*)"\x0f\xba\x06" "locked") +QDEF(MP_QSTR_log, (const byte*)"\x21\x3f\x03" "log") +QDEF(MP_QSTR_log10, (const byte*)"\x40\x91\x05" "log10") +QDEF(MP_QSTR_log2, (const byte*)"\x73\x23\x04" "log2") +QDEF(MP_QSTR_loglevel, (const byte*)"\x37\x99\x08" "loglevel") +QDEF(MP_QSTR_lower, (const byte*)"\xc6\xcb\x05" "lower") +QDEF(MP_QSTR_lstrip, (const byte*)"\xe5\xb9\x06" "lstrip") +QDEF(MP_QSTR_mDNS, (const byte*)"\xd1\x48\x04" "mDNS") +QDEF(MP_QSTR_mac, (const byte*)"\xaa\x43\x03" "mac") +QDEF(MP_QSTR_machine, (const byte*)"\x60\xab\x07" "machine") +QDEF(MP_QSTR_makefile, (const byte*)"\xc1\xd5\x08" "makefile") +QDEF(MP_QSTR_map, (const byte*)"\xb9\x43\x03" "map") +QDEF(MP_QSTR_match, (const byte*)"\x96\x22\x05" "match") +QDEF(MP_QSTR_math, (const byte*)"\x35\xbb\x04" "math") +QDEF(MP_QSTR_max, (const byte*)"\xb1\x43\x03" "max") +QDEF(MP_QSTR_maxsize, (const byte*)"\xd4\x70\x07" "maxsize") +QDEF(MP_QSTR_md5, (const byte*)"\x19\x44\x03" "md5") +QDEF(MP_QSTR_mem, (const byte*)"\x20\x44\x03" "mem") +QDEF(MP_QSTR_mem16, (const byte*)"\x07\xca\x05" "mem16") +QDEF(MP_QSTR_mem32, (const byte*)"\x41\xca\x05" "mem32") +QDEF(MP_QSTR_mem8, (const byte*)"\x18\xc8\x04" "mem8") +QDEF(MP_QSTR_mem_alloc, (const byte*)"\x52\x2b\x09" "mem_alloc") +QDEF(MP_QSTR_mem_free, (const byte*)"\xcb\x62\x08" "mem_free") +QDEF(MP_QSTR_mem_info, (const byte*)"\xd1\xf1\x08" "mem_info") +QDEF(MP_QSTR_memaddr, (const byte*)"\x93\xe8\x07" "memaddr") +QDEF(MP_QSTR_memoryview, (const byte*)"\x69\x44\x0a" "memoryview") +QDEF(MP_QSTR_micropython, (const byte*)"\x0b\x7c\x0b" "micropython") +QDEF(MP_QSTR_min, (const byte*)"\xaf\x42\x03" "min") +QDEF(MP_QSTR_miso, (const byte*)"\x9d\x98\x04" "miso") +QDEF(MP_QSTR_mkdir, (const byte*)"\x9c\xb5\x05" "mkdir") +QDEF(MP_QSTR_mkfs, (const byte*)"\x76\xb0\x04" "mkfs") +QDEF(MP_QSTR_mktime, (const byte*)"\x96\x2b\x06" "mktime") +QDEF(MP_QSTR_mode, (const byte*)"\x26\xc0\x04" "mode") +QDEF(MP_QSTR_modf, (const byte*)"\x25\xc0\x04" "modf") +QDEF(MP_QSTR_modify, (const byte*)"\xf5\x66\x06" "modify") +QDEF(MP_QSTR_module, (const byte*)"\xbf\x99\x06" "module") +QDEF(MP_QSTR_modules, (const byte*)"\xec\xd1\x07" "modules") +QDEF(MP_QSTR_mosi, (const byte*)"\x1d\xc2\x04" "mosi") +QDEF(MP_QSTR_mount, (const byte*)"\xa8\x0d\x05" "mount") +QDEF(MP_QSTR_mountsd, (const byte*)"\x5f\x1e\x07" "mountsd") +QDEF(MP_QSTR_name, (const byte*)"\xa2\x75\x04" "name") +QDEF(MP_QSTR_namedtuple, (const byte*)"\x1e\x16\x0a" "namedtuple") +QDEF(MP_QSTR_nbytes, (const byte*)"\xd2\x76\x06" "nbytes") +QDEF(MP_QSTR_network, (const byte*)"\x5b\x28\x07" "network") +QDEF(MP_QSTR_next, (const byte*)"\x42\x88\x04" "next") +QDEF(MP_QSTR_nodename, (const byte*)"\x62\xab\x08" "nodename") +QDEF(MP_QSTR_notify, (const byte*)"\x06\x1c\x06" "notify") +QDEF(MP_QSTR_now, (const byte*)"\xb3\x57\x03" "now") +QDEF(MP_QSTR_ntp_sync, (const byte*)"\xd7\xfc\x08" "ntp_sync") +QDEF(MP_QSTR_num, (const byte*)"\x73\x5b\x03" "num") +QDEF(MP_QSTR_nvs_erase, (const byte*)"\x71\x60\x09" "nvs_erase") +QDEF(MP_QSTR_nvs_erase_all, (const byte*)"\x6f\x3b\x0d" "nvs_erase_all") +QDEF(MP_QSTR_nvs_getint, (const byte*)"\xb4\x12\x0a" "nvs_getint") +QDEF(MP_QSTR_nvs_getstr, (const byte*)"\x72\x1b\x0a" "nvs_getstr") +QDEF(MP_QSTR_nvs_setint, (const byte*)"\x20\xd4\x0a" "nvs_setint") +QDEF(MP_QSTR_nvs_setstr, (const byte*)"\xe6\x58\x0a" "nvs_setstr") +QDEF(MP_QSTR_object, (const byte*)"\x90\x8d\x06" "object") +QDEF(MP_QSTR_oct, (const byte*)"\xfd\x5c\x03" "oct") +QDEF(MP_QSTR_off, (const byte*)"\x8a\x5c\x03" "off") +QDEF(MP_QSTR_on, (const byte*)"\x64\x6f\x02" "on") +QDEF(MP_QSTR_open, (const byte*)"\xd1\x3a\x04" "open") +QDEF(MP_QSTR_opt, (const byte*)"\xce\x5e\x03" "opt") +QDEF(MP_QSTR_opt_level, (const byte*)"\x87\x67\x09" "opt_level") +QDEF(MP_QSTR_ord, (const byte*)"\x1c\x5e\x03" "ord") +QDEF(MP_QSTR_orient, (const byte*)"\x8e\x81\x06" "orient") +QDEF(MP_QSTR_os, (const byte*)"\x79\x6f\x02" "os") +QDEF(MP_QSTR_ota, (const byte*)"\x5f\x5f\x03" "ota") +QDEF(MP_QSTR_outline, (const byte*)"\x65\xf7\x07" "outline") +QDEF(MP_QSTR_owb, (const byte*)"\x7f\x5f\x03" "owb") +QDEF(MP_QSTR_pack, (const byte*)"\xbc\xd1\x04" "pack") +QDEF(MP_QSTR_pack_into, (const byte*)"\x1f\xa9\x09" "pack_into") +QDEF(MP_QSTR_parity, (const byte*)"\x42\x05\x06" "parity") +QDEF(MP_QSTR_partition, (const byte*)"\x87\xe5\x09" "partition") +QDEF(MP_QSTR_password, (const byte*)"\x9a\x6f\x08" "password") +QDEF(MP_QSTR_path, (const byte*)"\x88\xce\x04" "path") +QDEF(MP_QSTR_pause, (const byte*)"\xd7\xbd\x05" "pause") +QDEF(MP_QSTR_peektime, (const byte*)"\x8b\x5c\x08" "peektime") +QDEF(MP_QSTR_period, (const byte*)"\xa0\xa0\x06" "period") +QDEF(MP_QSTR_phase, (const byte*)"\x6a\xd5\x05" "phase") +QDEF(MP_QSTR_phy_mode, (const byte*)"\x38\xa0\x08" "phy_mode") +QDEF(MP_QSTR_pi, (const byte*)"\x1c\x70\x02" "pi") +QDEF(MP_QSTR_pin, (const byte*)"\xf2\x73\x03" "pin") +QDEF(MP_QSTR_pins, (const byte*)"\x41\xf2\x04" "pins") +QDEF(MP_QSTR_pixel, (const byte*)"\x4d\xf0\x05" "pixel") +QDEF(MP_QSTR_pixels, (const byte*)"\x9e\xf9\x06" "pixels") +QDEF(MP_QSTR_platform, (const byte*)"\x3a\x19\x08" "platform") +QDEF(MP_QSTR_polar, (const byte*)"\x05\x0c\x05" "polar") +QDEF(MP_QSTR_polarity, (const byte*)"\x41\xed\x08" "polarity") +QDEF(MP_QSTR_poll, (const byte*)"\x9a\xd9\x04" "poll") +QDEF(MP_QSTR_polygon, (const byte*)"\x29\xf9\x07" "polygon") +QDEF(MP_QSTR_pop, (const byte*)"\x2a\x73\x03" "pop") +QDEF(MP_QSTR_popitem, (const byte*)"\xbf\x2c\x07" "popitem") +QDEF(MP_QSTR_port, (const byte*)"\x5c\xd8\x04" "port") +QDEF(MP_QSTR_pos, (const byte*)"\x29\x73\x03" "pos") +QDEF(MP_QSTR_pow, (const byte*)"\x2d\x73\x03" "pow") +QDEF(MP_QSTR_print, (const byte*)"\x54\xc6\x05" "print") +QDEF(MP_QSTR_print_exception, (const byte*)"\x1c\x22\x0f" "print_exception") +QDEF(MP_QSTR_property, (const byte*)"\xc2\x29\x08" "property") +QDEF(MP_QSTR_protocol, (const byte*)"\x33\xf5\x08" "protocol") +QDEF(MP_QSTR_pull, (const byte*)"\x80\x7d\x04" "pull") +QDEF(MP_QSTR_push, (const byte*)"\xbb\x7e\x04" "push") +QDEF(MP_QSTR_qstr_info, (const byte*)"\xb0\x81\x09" "qstr_info") +QDEF(MP_QSTR_queryHost, (const byte*)"\xaf\x72\x09" "queryHost") +QDEF(MP_QSTR_queryService, (const byte*)"\x52\x9b\x0c" "queryService") +QDEF(MP_QSTR_r, (const byte*)"\xd7\xb5\x01" "r") +QDEF(MP_QSTR_radians, (const byte*)"\x87\x3f\x07" "radians") +QDEF(MP_QSTR_rainbow, (const byte*)"\x8b\xc7\x07" "rainbow") +QDEF(MP_QSTR_randint, (const byte*)"\xaf\xdc\x07" "randint") +QDEF(MP_QSTR_random, (const byte*)"\xbe\x2c\x06" "random") +QDEF(MP_QSTR_randrange, (const byte*)"\xa3\x3e\x09" "randrange") +QDEF(MP_QSTR_range, (const byte*)"\x1a\x5e\x05" "range") +QDEF(MP_QSTR_raw, (const byte*)"\xe1\x8b\x03" "raw") +QDEF(MP_QSTR_re, (const byte*)"\xd2\x70\x02" "re") +QDEF(MP_QSTR_read, (const byte*)"\xb7\xf9\x04" "read") +QDEF(MP_QSTR_readPixel, (const byte*)"\x5f\x5d\x09" "readPixel") +QDEF(MP_QSTR_read_string, (const byte*)"\xfd\x18\x0b" "read_string") +QDEF(MP_QSTR_read_temp, (const byte*)"\xe4\x2e\x09" "read_temp") +QDEF(MP_QSTR_read_tempint, (const byte*)"\x57\x05\x0c" "read_tempint") +QDEF(MP_QSTR_readbyte, (const byte*)"\x7d\xf0\x08" "readbyte") +QDEF(MP_QSTR_readbytes, (const byte*)"\x6e\x00\x09" "readbytes") +QDEF(MP_QSTR_readfrom, (const byte*)"\x41\xb1\x08" "readfrom") +QDEF(MP_QSTR_readfrom_into, (const byte*)"\x82\x3f\x0d" "readfrom_into") +QDEF(MP_QSTR_readfrom_mem, (const byte*)"\x3b\x65\x0c" "readfrom_mem") +QDEF(MP_QSTR_readfrom_mem_into, (const byte*)"\x38\x8e\x11" "readfrom_mem_into") +QDEF(MP_QSTR_readinto, (const byte*)"\x4b\xbf\x08" "readinto") +QDEF(MP_QSTR_readline, (const byte*)"\xf9\x19\x08" "readline") +QDEF(MP_QSTR_readlines, (const byte*)"\x6a\x59\x09" "readlines") +QDEF(MP_QSTR_readonly, (const byte*)"\x03\x89\x08" "readonly") +QDEF(MP_QSTR_readraw, (const byte*)"\x13\x0a\x07" "readraw") +QDEF(MP_QSTR_real, (const byte*)"\xbf\xf9\x04" "real") +QDEF(MP_QSTR_rect, (const byte*)"\xe5\xf9\x04" "rect") +QDEF(MP_QSTR_recv, (const byte*)"\xe7\xf9\x04" "recv") +QDEF(MP_QSTR_recvfrom, (const byte*)"\x91\x90\x08" "recvfrom") +QDEF(MP_QSTR_redirectlog, (const byte*)"\x5b\x4c\x0b" "redirectlog") +QDEF(MP_QSTR_register, (const byte*)"\xac\xa1\x08" "register") +QDEF(MP_QSTR_release, (const byte*)"\xec\x8f\x07" "release") +QDEF(MP_QSTR_remove, (const byte*)"\x63\x8a\x06" "remove") +QDEF(MP_QSTR_removeService, (const byte*)"\x5e\xed\x0d" "removeService") +QDEF(MP_QSTR_rename, (const byte*)"\x35\x18\x06" "rename") +QDEF(MP_QSTR_replAcceptMsg, (const byte*)"\xd7\x84\x0d" "replAcceptMsg") +QDEF(MP_QSTR_replace, (const byte*)"\x49\x25\x07" "replace") +QDEF(MP_QSTR_repr, (const byte*)"\xd0\xf7\x04" "repr") +QDEF(MP_QSTR_reset, (const byte*)"\x10\xf4\x05" "reset") +QDEF(MP_QSTR_resetwin, (const byte*)"\x80\xa8\x08" "resetwin") +QDEF(MP_QSTR_reshot, (const byte*)"\x52\xa2\x06" "reshot") +QDEF(MP_QSTR_restart, (const byte*)"\xb2\x75\x07" "restart") +QDEF(MP_QSTR_restorelog, (const byte*)"\x09\x2e\x0a" "restorelog") +QDEF(MP_QSTR_restorewin, (const byte*)"\x9d\x8d\x0a" "restorewin") +QDEF(MP_QSTR_resume, (const byte*)"\x5c\xb9\x06" "resume") +QDEF(MP_QSTR_reverse, (const byte*)"\x25\x2a\x07" "reverse") +QDEF(MP_QSTR_reversed, (const byte*)"\xa1\x6e\x08" "reversed") +QDEF(MP_QSTR_rfind, (const byte*)"\xd2\x9c\x05" "rfind") +QDEF(MP_QSTR_rindex, (const byte*)"\xe9\x2b\x06" "rindex") +QDEF(MP_QSTR_rmdir, (const byte*)"\x45\xa7\x05" "rmdir") +QDEF(MP_QSTR_rom_code, (const byte*)"\xa7\x3c\x08" "rom_code") +QDEF(MP_QSTR_rot, (const byte*)"\xac\x8b\x03" "rot") +QDEF(MP_QSTR_rotate, (const byte*)"\xdc\x7d\x06" "rotate") +QDEF(MP_QSTR_round, (const byte*)"\xe7\x25\x05" "round") +QDEF(MP_QSTR_roundrect, (const byte*)"\xc7\x49\x09" "roundrect") +QDEF(MP_QSTR_rpartition, (const byte*)"\x15\xd0\x0a" "rpartition") +QDEF(MP_QSTR_rsplit, (const byte*)"\xa5\x00\x06" "rsplit") +QDEF(MP_QSTR_rst_pin, (const byte*)"\x58\xf4\x07" "rst_pin") +QDEF(MP_QSTR_rstrip, (const byte*)"\x3b\x95\x06" "rstrip") +QDEF(MP_QSTR_rts, (const byte*)"\x50\x89\x03" "rts") +QDEF(MP_QSTR_rx, (const byte*)"\xcf\x70\x02" "rx") +QDEF(MP_QSTR_ry, (const byte*)"\xce\x70\x02" "ry") +QDEF(MP_QSTR_samecore, (const byte*)"\x24\xe0\x08" "samecore") +QDEF(MP_QSTR_saturation, (const byte*)"\x59\x68\x0a" "saturation") +QDEF(MP_QSTR_savewin, (const byte*)"\x74\x5e\x07" "savewin") +QDEF(MP_QSTR_scale, (const byte*)"\x7d\x51\x05" "scale") +QDEF(MP_QSTR_scan, (const byte*)"\x1a\x8e\x04" "scan") +QDEF(MP_QSTR_schedule, (const byte*)"\xe0\xac\x08" "schedule") +QDEF(MP_QSTR_sck, (const byte*)"\xfe\x8f\x03" "sck") +QDEF(MP_QSTR_scl, (const byte*)"\xf9\x8f\x03" "scl") +QDEF(MP_QSTR_screensize, (const byte*)"\x2c\xe1\x0a" "screensize") +QDEF(MP_QSTR_sda, (const byte*)"\x53\x8f\x03" "sda") +QDEF(MP_QSTR_search, (const byte*)"\xab\xc1\x06" "search") +QDEF(MP_QSTR_secs, (const byte*)"\x43\x75\x04" "secs") +QDEF(MP_QSTR_seed, (const byte*)"\x92\x75\x04" "seed") +QDEF(MP_QSTR_seek, (const byte*)"\x9d\x75\x04" "seek") +QDEF(MP_QSTR_select, (const byte*)"\x8d\x41\x06" "select") +QDEF(MP_QSTR_send, (const byte*)"\xb9\x76\x04" "send") +QDEF(MP_QSTR_sendall, (const byte*)"\x38\x9f\x07" "sendall") +QDEF(MP_QSTR_sendmsg, (const byte*)"\x40\x8d\x07" "sendmsg") +QDEF(MP_QSTR_sendto, (const byte*)"\x22\x03\x06" "sendto") +QDEF(MP_QSTR_sep, (const byte*)"\x23\x8f\x03" "sep") +QDEF(MP_QSTR_server, (const byte*)"\xc0\x28\x06" "server") +QDEF(MP_QSTR_server_hostname, (const byte*)"\x58\xef\x0f" "server_hostname") +QDEF(MP_QSTR_server_side, (const byte*)"\x64\xef\x0b" "server_side") +QDEF(MP_QSTR_service, (const byte*)"\x98\x75\x07" "service") +QDEF(MP_QSTR_set, (const byte*)"\x27\x8f\x03" "set") +QDEF(MP_QSTR_setCalib, (const byte*)"\x42\x7a\x08" "setCalib") +QDEF(MP_QSTR_setHSB, (const byte*)"\xbe\xcd\x06" "setHSB") +QDEF(MP_QSTR_setHSBint, (const byte*)"\xcd\x1a\x09" "setHSBint") +QDEF(MP_QSTR_setWhite, (const byte*)"\xc0\x4f\x08" "setWhite") +QDEF(MP_QSTR_set_bootpart, (const byte*)"\xb9\x33\x0c" "set_bootpart") +QDEF(MP_QSTR_set_res, (const byte*)"\x9c\x65\x07" "set_res") +QDEF(MP_QSTR_setattr, (const byte*)"\xd4\xa8\x07" "setattr") +QDEF(MP_QSTR_setblocking, (const byte*)"\x6e\x18\x0b" "setblocking") +QDEF(MP_QSTR_setdefault, (const byte*)"\x6c\xa3\x0a" "setdefault") +QDEF(MP_QSTR_setsockopt, (const byte*)"\x38\xe8\x0a" "setsockopt") +QDEF(MP_QSTR_setter, (const byte*)"\x04\x59\x06" "setter") +QDEF(MP_QSTR_settimeout, (const byte*)"\xdc\x8a\x0a" "settimeout") +QDEF(MP_QSTR_setwin, (const byte*)"\x57\x45\x06" "setwin") +QDEF(MP_QSTR_sha1, (const byte*)"\x8e\xac\x04" "sha1") +QDEF(MP_QSTR_sha256, (const byte*)"\x2e\x01\x06" "sha256") +QDEF(MP_QSTR_show, (const byte*)"\x86\xaa\x04" "show") +QDEF(MP_QSTR_sides, (const byte*)"\x4d\xb8\x05" "sides") +QDEF(MP_QSTR_sin, (const byte*)"\xb1\x90\x03" "sin") +QDEF(MP_QSTR_single, (const byte*)"\x3f\x20\x06" "single") +QDEF(MP_QSTR_sinh, (const byte*)"\xb9\xa6\x04" "sinh") +QDEF(MP_QSTR_sizeof, (const byte*)"\x49\x73\x06" "sizeof") +QDEF(MP_QSTR_sleep, (const byte*)"\xea\x27\x05" "sleep") +QDEF(MP_QSTR_sleep_ms, (const byte*)"\x0b\x63\x08" "sleep_ms") +QDEF(MP_QSTR_sleep_us, (const byte*)"\x13\x60\x08" "sleep_us") +QDEF(MP_QSTR_slice, (const byte*)"\xb5\xf4\x05" "slice") +QDEF(MP_QSTR_socket, (const byte*)"\x60\xcc\x06" "socket") +QDEF(MP_QSTR_sort, (const byte*)"\xbf\x9d\x04" "sort") +QDEF(MP_QSTR_sorted, (const byte*)"\x5e\x15\x06" "sorted") +QDEF(MP_QSTR_speed, (const byte*)"\x62\x0f\x05" "speed") +QDEF(MP_QSTR_spihost, (const byte*)"\x6f\x91\x07" "spihost") +QDEF(MP_QSTR_split, (const byte*)"\xb7\x33\x05" "split") +QDEF(MP_QSTR_splitlines, (const byte*)"\x6a\xd3\x0a" "splitlines") +QDEF(MP_QSTR_sqrt, (const byte*)"\x21\x44\x04" "sqrt") +QDEF(MP_QSTR_ssl, (const byte*)"\xe9\x8d\x03" "ssl") +QDEF(MP_QSTR_stack, (const byte*)"\xab\xed\x05" "stack") +QDEF(MP_QSTR_stack_size, (const byte*)"\x31\x3b\x0a" "stack_size") +QDEF(MP_QSTR_stack_use, (const byte*)"\x97\xf7\x09" "stack_use") +QDEF(MP_QSTR_stacksize, (const byte*)"\xce\xdd\x09" "stacksize") +QDEF(MP_QSTR_start, (const byte*)"\x85\xef\x05" "start") +QDEF(MP_QSTR_start_new_thread, (const byte*)"\xd7\x25\x10" "start_new_thread") +QDEF(MP_QSTR_startswith, (const byte*)"\x74\xe8\x0a" "startswith") +QDEF(MP_QSTR_stat, (const byte*)"\xd7\x35\x04" "stat") +QDEF(MP_QSTR_staticmethod, (const byte*)"\x62\xaf\x0c" "staticmethod") +QDEF(MP_QSTR_status, (const byte*)"\x71\x09\x06" "status") +QDEF(MP_QSTR_statvfs, (const byte*)"\x14\x19\x07" "statvfs") +QDEF(MP_QSTR_stderr, (const byte*)"\xa3\x58\x06" "stderr") +QDEF(MP_QSTR_stdin, (const byte*)"\x21\x04\x05" "stdin") +QDEF(MP_QSTR_stdin_get, (const byte*)"\x48\x5a\x09" "stdin_get") +QDEF(MP_QSTR_stdout, (const byte*)"\x08\x83\x06" "stdout") +QDEF(MP_QSTR_stdout_put, (const byte*)"\xe6\x62\x0a" "stdout_put") +QDEF(MP_QSTR_step, (const byte*)"\x57\x36\x04" "step") +QDEF(MP_QSTR_stop, (const byte*)"\x9d\x36\x04" "stop") +QDEF(MP_QSTR_str, (const byte*)"\x50\x8d\x03" "str") +QDEF(MP_QSTR_strftime, (const byte*)"\x43\xf0\x08" "strftime") +QDEF(MP_QSTR_strip, (const byte*)"\x29\x1e\x05" "strip") +QDEF(MP_QSTR_struct, (const byte*)"\x12\x90\x06" "struct") +QDEF(MP_QSTR_sum, (const byte*)"\x2e\x8d\x03" "sum") +QDEF(MP_QSTR_super, (const byte*)"\xc4\xb2\x05" "super") +QDEF(MP_QSTR_suspend, (const byte*)"\x6f\xf5\x07" "suspend") +QDEF(MP_QSTR_symmetric_difference, (const byte*)"\xce\x67\x14" "symmetric_difference") +QDEF(MP_QSTR_symmetric_difference_update, (const byte*)"\x60\xf8\x1b" "symmetric_difference_update") +QDEF(MP_QSTR_synced, (const byte*)"\x03\x87\x06" "synced") +QDEF(MP_QSTR_sys, (const byte*)"\xbc\x8e\x03" "sys") +QDEF(MP_QSTR_sysname, (const byte*)"\x9b\x36\x07" "sysname") +QDEF(MP_QSTR_tan, (const byte*)"\xfe\x61\x03" "tan") +QDEF(MP_QSTR_tanh, (const byte*)"\xd6\xa1\x04" "tanh") +QDEF(MP_QSTR_tcs, (const byte*)"\xa1\x61\x03" "tcs") +QDEF(MP_QSTR_tell, (const byte*)"\x14\xb1\x04" "tell") +QDEF(MP_QSTR_telnet, (const byte*)"\x67\x4a\x06" "telnet") +QDEF(MP_QSTR_text, (const byte*)"\x98\xaf\x04" "text") +QDEF(MP_QSTR_textClear, (const byte*)"\x21\x72\x09" "textClear") +QDEF(MP_QSTR_textWidth, (const byte*)"\x7e\x9d\x09" "textWidth") +QDEF(MP_QSTR_thick, (const byte*)"\x78\x53\x05" "thick") +QDEF(MP_QSTR_threshold, (const byte*)"\xf2\x2f\x09" "threshold") +QDEF(MP_QSTR_throw, (const byte*)"\xb3\x44\x05" "throw") +QDEF(MP_QSTR_ticks_add, (const byte*)"\x9d\xae\x09" "ticks_add") +QDEF(MP_QSTR_ticks_cpu, (const byte*)"\x1a\xa5\x09" "ticks_cpu") +QDEF(MP_QSTR_ticks_diff, (const byte*)"\xb1\xe0\x0a" "ticks_diff") +QDEF(MP_QSTR_ticks_ms, (const byte*)"\x42\x32\x08" "ticks_ms") +QDEF(MP_QSTR_ticks_us, (const byte*)"\x5a\x31\x08" "ticks_us") +QDEF(MP_QSTR_time, (const byte*)"\xf0\xc1\x04" "time") +QDEF(MP_QSTR_time_pulse_us, (const byte*)"\x89\x0c\x0d" "time_pulse_us") +QDEF(MP_QSTR_timeout, (const byte*)"\x3e\x54\x07" "timeout") +QDEF(MP_QSTR_timeout_char, (const byte*)"\x79\x4a\x0c" "timeout_char") +QDEF(MP_QSTR_timernum, (const byte*)"\x14\x90\x08" "timernum") +QDEF(MP_QSTR_timings, (const byte*)"\xa6\x89\x07" "timings") +QDEF(MP_QSTR_to_bytes, (const byte*)"\xd8\x3e\x08" "to_bytes") +QDEF(MP_QSTR_transparent, (const byte*)"\xc3\xc2\x0b" "transparent") +QDEF(MP_QSTR_triangle, (const byte*)"\xeb\x99\x08" "triangle") +QDEF(MP_QSTR_trigger, (const byte*)"\x9d\x8c\x07" "trigger") +QDEF(MP_QSTR_trunc, (const byte*)"\x5b\x99\x05" "trunc") +QDEF(MP_QSTR_tuple, (const byte*)"\xfd\x41\x05" "tuple") +QDEF(MP_QSTR_tx, (const byte*)"\x89\x6f\x02" "tx") +QDEF(MP_QSTR_txdata, (const byte*)"\x99\x3a\x06" "txdata") +QDEF(MP_QSTR_type, (const byte*)"\x9d\x7f\x04" "type") +QDEF(MP_QSTR_ubinascii, (const byte*)"\xc4\x88\x09" "ubinascii") +QDEF(MP_QSTR_ucollections, (const byte*)"\x15\x9a\x0c" "ucollections") +QDEF(MP_QSTR_uctypes, (const byte*)"\xf8\x71\x07" "uctypes") +QDEF(MP_QSTR_uerrno, (const byte*)"\xb4\xe9\x06" "uerrno") +QDEF(MP_QSTR_uhashlib, (const byte*)"\x65\x9d\x08" "uhashlib") +QDEF(MP_QSTR_uheapq, (const byte*)"\x1d\x43\x06" "uheapq") +QDEF(MP_QSTR_uio, (const byte*)"\xb6\x66\x03" "uio") +QDEF(MP_QSTR_ujson, (const byte*)"\xe8\x30\x05" "ujson") +QDEF(MP_QSTR_umachine, (const byte*)"\x95\x7f\x08" "umachine") +QDEF(MP_QSTR_umount, (const byte*)"\xdd\x9e\x06" "umount") +QDEF(MP_QSTR_umountsd, (const byte*)"\xaa\xbb\x08" "umountsd") +QDEF(MP_QSTR_uname, (const byte*)"\xb7\x9c\x05" "uname") +QDEF(MP_QSTR_unhexlify, (const byte*)"\xb1\xb9\x09" "unhexlify") +QDEF(MP_QSTR_uniform, (const byte*)"\x01\xf5\x07" "uniform") +QDEF(MP_QSTR_union, (const byte*)"\xf6\x7c\x05" "union") +QDEF(MP_QSTR_unique_id, (const byte*)"\x04\x89\x09" "unique_id") +QDEF(MP_QSTR_unpack, (const byte*)"\x07\x3c\x06" "unpack") +QDEF(MP_QSTR_unpack_from, (const byte*)"\x0e\x6d\x0b" "unpack_from") +QDEF(MP_QSTR_unregister, (const byte*)"\x17\xd4\x0a" "unregister") +QDEF(MP_QSTR_uos, (const byte*)"\xec\x67\x03" "uos") +QDEF(MP_QSTR_update, (const byte*)"\xb4\x76\x06" "update") +QDEF(MP_QSTR_update_period, (const byte*)"\x0e\x65\x0d" "update_period") +QDEF(MP_QSTR_upper, (const byte*)"\x27\x94\x05" "upper") +QDEF(MP_QSTR_urandom, (const byte*)"\xab\xae\x07" "urandom") +QDEF(MP_QSTR_ure, (const byte*)"\x87\x63\x03" "ure") +QDEF(MP_QSTR_uselect, (const byte*)"\x58\x8e\x07" "uselect") +QDEF(MP_QSTR_user, (const byte*)"\x54\xf1\x04" "user") +QDEF(MP_QSTR_usocket, (const byte*)"\x75\x00\x07" "usocket") +QDEF(MP_QSTR_ussl, (const byte*)"\x1c\xf2\x04" "ussl") +QDEF(MP_QSTR_ustruct, (const byte*)"\x47\x08\x07" "ustruct") +QDEF(MP_QSTR_utime, (const byte*)"\xe5\x9d\x05" "utime") +QDEF(MP_QSTR_utimeq, (const byte*)"\xf4\x5a\x06" "utimeq") +QDEF(MP_QSTR_uzlib, (const byte*)"\x6d\x9b\x05" "uzlib") +QDEF(MP_QSTR_value, (const byte*)"\x4e\x34\x05" "value") +QDEF(MP_QSTR_values, (const byte*)"\x7d\xbe\x06" "values") +QDEF(MP_QSTR_version, (const byte*)"\xbf\xd3\x07" "version") +QDEF(MP_QSTR_version_info, (const byte*)"\x6e\x0a\x0c" "version_info") +QDEF(MP_QSTR_vref, (const byte*)"\xe2\x78\x04" "vref") +QDEF(MP_QSTR_vref_topin, (const byte*)"\xb1\xaa\x0a" "vref_topin") +QDEF(MP_QSTR_wake_description, (const byte*)"\x04\x8d\x10" "wake_description") +QDEF(MP_QSTR_wake_on_ext0, (const byte*)"\x05\xdc\x0c" "wake_on_ext0") +QDEF(MP_QSTR_wake_on_ext1, (const byte*)"\x04\xdc\x0c" "wake_on_ext1") +QDEF(MP_QSTR_wake_reason, (const byte*)"\x66\xc6\x0b" "wake_reason") +QDEF(MP_QSTR_white, (const byte*)"\x42\xc3\x05" "white") +QDEF(MP_QSTR_width, (const byte*)"\x23\x75\x05" "width") +QDEF(MP_QSTR_winsize, (const byte*)"\xd0\x0e\x07" "winsize") +QDEF(MP_QSTR_wrap, (const byte*)"\x51\xfc\x04" "wrap") +QDEF(MP_QSTR_wrap_socket, (const byte*)"\xcb\xf3\x0b" "wrap_socket") +QDEF(MP_QSTR_write, (const byte*)"\x98\xa8\x05" "write") +QDEF(MP_QSTR_write_readinto, (const byte*)"\x89\x84\x0e" "write_readinto") +QDEF(MP_QSTR_write_string, (const byte*)"\xb2\x83\x0c" "write_string") +QDEF(MP_QSTR_writebyte, (const byte*)"\xd2\x1e\x09" "writebyte") +QDEF(MP_QSTR_writebytes, (const byte*)"\x61\xf9\x0a" "writebytes") +QDEF(MP_QSTR_writeto, (const byte*)"\x03\x39\x07" "writeto") +QDEF(MP_QSTR_writeto_mem, (const byte*)"\x79\xed\x0b" "writeto_mem") +QDEF(MP_QSTR_x, (const byte*)"\xdd\xb5\x01" "x") +QDEF(MP_QSTR_x1, (const byte*)"\x4c\x71\x02" "x1") +QDEF(MP_QSTR_x2, (const byte*)"\x4f\x71\x02" "x2") +QDEF(MP_QSTR_y, (const byte*)"\xdc\xb5\x01" "y") +QDEF(MP_QSTR_y1, (const byte*)"\x6d\x71\x02" "y1") +QDEF(MP_QSTR_y2, (const byte*)"\x6e\x71\x02" "y2") +QDEF(MP_QSTR_ymodem, (const byte*)"\xf2\x89\x06" "ymodem") +QDEF(MP_QSTR_zip, (const byte*)"\xe6\xac\x03" "zip") +QDEF(MP_QSTR_zlib, (const byte*)"\xf8\x37\x04" "zlib") diff --git a/MicroPython_BUILD/firmware/MicroPython_LoBo_Firmwares.zip b/MicroPython_BUILD/firmware/MicroPython_LoBo_Firmwares.zip new file mode 100644 index 0000000..f8d59ed Binary files /dev/null and b/MicroPython_BUILD/firmware/MicroPython_LoBo_Firmwares.zip differ diff --git a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32.zip b/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32.zip deleted file mode 100644 index a324ff6..0000000 Binary files a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32.zip and /dev/null differ diff --git a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_ota.zip b/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_ota.zip deleted file mode 100644 index d0c6168..0000000 Binary files a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_ota.zip and /dev/null differ diff --git a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_psram.zip b/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_psram.zip deleted file mode 100644 index 6def120..0000000 Binary files a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_psram.zip and /dev/null differ diff --git a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_psram_ota.zip b/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_psram_ota.zip deleted file mode 100644 index 2ae45fe..0000000 Binary files a/MicroPython_BUILD/firmware/MicroPython_LoBo_esp32_psram_ota.zip and /dev/null differ diff --git a/MicroPython_BUILD/firmware/esp32/MicroPython.bin b/MicroPython_BUILD/firmware/esp32/MicroPython.bin index 84b746d..7871220 100644 Binary files a/MicroPython_BUILD/firmware/esp32/MicroPython.bin and b/MicroPython_BUILD/firmware/esp32/MicroPython.bin differ diff --git a/MicroPython_BUILD/firmware/esp32/bootloader/bootloader.bin b/MicroPython_BUILD/firmware/esp32/bootloader/bootloader.bin index 6cefb10..e0d1010 100644 Binary files a/MicroPython_BUILD/firmware/esp32/bootloader/bootloader.bin and b/MicroPython_BUILD/firmware/esp32/bootloader/bootloader.bin differ diff --git a/MicroPython_BUILD/firmware/esp32_ota/MicroPython.bin b/MicroPython_BUILD/firmware/esp32_ota/MicroPython.bin index 705bd1a..db0540e 100644 Binary files a/MicroPython_BUILD/firmware/esp32_ota/MicroPython.bin and b/MicroPython_BUILD/firmware/esp32_ota/MicroPython.bin differ diff --git a/MicroPython_BUILD/firmware/esp32_ota/bootloader/bootloader.bin b/MicroPython_BUILD/firmware/esp32_ota/bootloader/bootloader.bin index 8318ff0..ef4d066 100644 Binary files a/MicroPython_BUILD/firmware/esp32_ota/bootloader/bootloader.bin and b/MicroPython_BUILD/firmware/esp32_ota/bootloader/bootloader.bin differ diff --git a/MicroPython_BUILD/firmware/esp32_psram/MicroPython.bin b/MicroPython_BUILD/firmware/esp32_psram/MicroPython.bin index 084f6ff..139cc90 100644 Binary files a/MicroPython_BUILD/firmware/esp32_psram/MicroPython.bin and b/MicroPython_BUILD/firmware/esp32_psram/MicroPython.bin differ diff --git a/MicroPython_BUILD/firmware/esp32_psram/bootloader/bootloader.bin b/MicroPython_BUILD/firmware/esp32_psram/bootloader/bootloader.bin index 228d991..b43f4c4 100644 Binary files a/MicroPython_BUILD/firmware/esp32_psram/bootloader/bootloader.bin and b/MicroPython_BUILD/firmware/esp32_psram/bootloader/bootloader.bin differ diff --git a/MicroPython_BUILD/firmware/esp32_psram_ota/MicroPython.bin b/MicroPython_BUILD/firmware/esp32_psram_ota/MicroPython.bin index fbf483d..9a6ef25 100644 Binary files a/MicroPython_BUILD/firmware/esp32_psram_ota/MicroPython.bin and b/MicroPython_BUILD/firmware/esp32_psram_ota/MicroPython.bin differ diff --git a/MicroPython_BUILD/firmware/esp32_psram_ota/bootloader/bootloader.bin b/MicroPython_BUILD/firmware/esp32_psram_ota/bootloader/bootloader.bin index 185af56..12127ef 100644 Binary files a/MicroPython_BUILD/firmware/esp32_psram_ota/bootloader/bootloader.bin and b/MicroPython_BUILD/firmware/esp32_psram_ota/bootloader/bootloader.bin differ diff --git a/MicroPython_BUILD/make_firmwares.sh b/MicroPython_BUILD/make_firmwares.sh new file mode 100755 index 0000000..ca43cf7 --- /dev/null +++ b/MicroPython_BUILD/make_firmwares.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# BUILD standard firmwares + +mv -f sdkconfig sdkconfig.bkp + +# Build firmwaware for esp32, no psRAM, no OTA +cp sdkconfig.fw_esp32 sdkconfig +./BUILD.sh -j8 clean all +if [ $? -ne 0 ]; then + mv -f sdkconfig.bkp sckconfig + exit 1 +fi +./BUILD.sh -fs 1024 flash > /dev/null 2>&1 +./BUILD.sh firmware +if [ $? -ne 0 ]; then + mv -f sdkconfig.bkp sckconfig + exit 1 +fi + +# Build firmwaware for esp32, no psRAM, OTA +cp sdkconfig.fw_esp32_ota sdkconfig +./BUILD.sh -j8 clean all +if [ $? -ne 0 ]; then + mv -f sdkconfig.bkp sckconfig + exit 1 +fi +./BUILD.sh -fs 1024 flash > /dev/null 2>&1 +./BUILD.sh firmware +if [ $? -ne 0 ]; then + mv -f sdkconfig.bkp sckconfig + exit 1 +fi + +# Build firmwaware for esp32, psRAM, no OTA +cp sdkconfig.fw_psram sdkconfig +./BUILD.sh -j8 clean all +if [ $? -ne 0 ]; then + mv -f sdkconfig.bkp sckconfig + exit 1 +fi +./BUILD.sh -fs 1024 flash > /dev/null 2>&1 +./BUILD.sh firmware +if [ $? -ne 0 ]; then + exit 1 +fi + +# Build firmwaware for esp32, psRAM, OTA +cp sdkconfig.fw_psram_ota sdkconfig +./BUILD.sh -j8 clean all +if [ $? -ne 0 ]; then + mv -f sdkconfig.bkp sckconfig + exit 1 +fi +./BUILD.sh -fs 1024 flash > /dev/null 2>&1 +./BUILD.sh firmware +if [ $? -ne 0 ]; then + mv -f sdkconfig.bkp sckconfig + exit 1 +fi + +mv -f sdkconfig.bkp sckconfig + +cd firmware +rm -f MicroPython_LoBo_Firmwares.zip > /dev/null 2>&1 +zip MicroPython_LoBo_Firmwares.zip -9 -r esp32 esp32_ota esp32_psram esp32_psram_ota README.md + +cd .. + diff --git a/MicroPython_BUILD/sckconfig b/MicroPython_BUILD/sckconfig new file mode 100644 index 0000000..727a034 --- /dev/null +++ b/MicroPython_BUILD/sckconfig @@ -0,0 +1,630 @@ +# +# Automatically generated file; DO NOT EDIT. +# Espressif IoT Development Framework Configuration +# + +# +# SDK tool configuration +# +CONFIG_TOOLPREFIX="xtensa-esp32-elf-" +CONFIG_PYTHON="python" +CONFIG_MAKE_WARN_UNDEFINED_VARIABLES=y + +# +# Bootloader config +# +CONFIG_LOG_BOOTLOADER_LEVEL_NONE= +CONFIG_LOG_BOOTLOADER_LEVEL_ERROR= +CONFIG_LOG_BOOTLOADER_LEVEL_WARN= +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG= +CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE= +CONFIG_LOG_BOOTLOADER_LEVEL=3 +CONFIG_BOOTLOADER_VDDSDIO_BOOST=y + +# +# Security features +# +CONFIG_SECURE_BOOT_ENABLED= +CONFIG_FLASH_ENCRYPTION_ENABLED= + +# +# Serial flasher config +# +CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB1" +CONFIG_ESPTOOLPY_BAUD_115200B= +CONFIG_ESPTOOLPY_BAUD_230400B= +CONFIG_ESPTOOLPY_BAUD_921600B=y +CONFIG_ESPTOOLPY_BAUD_2MB= +CONFIG_ESPTOOLPY_BAUD_OTHER= +CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 +CONFIG_ESPTOOLPY_BAUD=921600 +CONFIG_ESPTOOLPY_COMPRESSED=y +CONFIG_FLASHMODE_QIO= +CONFIG_FLASHMODE_QOUT= +CONFIG_FLASHMODE_DIO=y +CONFIG_FLASHMODE_DOUT= +CONFIG_ESPTOOLPY_FLASHMODE="dio" +CONFIG_ESPTOOLPY_FLASHFREQ_80M= +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +CONFIG_ESPTOOLPY_FLASHFREQ_26M= +CONFIG_ESPTOOLPY_FLASHFREQ_20M= +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +CONFIG_ESPTOOLPY_FLASHSIZE_1MB= +CONFIG_ESPTOOLPY_FLASHSIZE_2MB= +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_ESPTOOLPY_FLASHSIZE_8MB= +CONFIG_ESPTOOLPY_FLASHSIZE_16MB= +CONFIG_ESPTOOLPY_FLASHSIZE="4MB" +CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +CONFIG_ESPTOOLPY_BEFORE_RESET=y +CONFIG_ESPTOOLPY_BEFORE_NORESET= +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET= +CONFIG_ESPTOOLPY_AFTER_NORESET=y +CONFIG_ESPTOOLPY_AFTER="no_reset" +CONFIG_MONITOR_BAUD_9600B= +CONFIG_MONITOR_BAUD_57600B= +CONFIG_MONITOR_BAUD_115200B=y +CONFIG_MONITOR_BAUD_230400B= +CONFIG_MONITOR_BAUD_921600B= +CONFIG_MONITOR_BAUD_2MB= +CONFIG_MONITOR_BAUD_OTHER= +CONFIG_MONITOR_BAUD_OTHER_VAL=115200 +CONFIG_MONITOR_BAUD=115200 + +# +# MicroPython +# +CONFIG_MICROPY_HW_BOARD_NAME="ESP32 board" +CONFIG_MICROPY_HW_MCU_NAME="ESP32" +CONFIG_MICROPY_TIMEZONE="GMT0BST" +CONFIG_MICROPY_USE_OTA=y +CONFIG_GPIO_INPUT_FORCE_FACTORY= + +# +# System settings +# +CONFIG_MICRO_PY_LOG_LEVEL=2 +CONFIG_MICRO_PY_LOG_LEVEL0= +CONFIG_MICRO_PY_LOG_LEVEL1= +CONFIG_MICRO_PY_LOG_LEVEL2=y +CONFIG_MICRO_PY_LOG_LEVEL3= +CONFIG_MICRO_PY_LOG_LEVEL4= +CONFIG_MICRO_PY_LOG_LEVEL5= +CONFIG_MICROPY_RX_BUFFER_SIZE=1080 +CONFIG_MICROPY_USE_TASK_WDT=y +CONFIG_MICROPY_USE_BOTH_CORES= +CONFIG_MICROPY_TASK_PRIORITY=5 +CONFIG_MICROPY_STACK_SIZE=20 +CONFIG_MICROPY_HEAP_SIZE=3072 +CONFIG_MICROPY_THREAD_MAX_THREADS=4 +CONFIG_MICROPY_THREAD_STACK_SIZE=4 +CONFIG_MICROPY_USE_TELNET=y +CONFIG_MICROPY_USE_WEBSERVER= +CONFIG_MICROPY_USE_FTPSERVER=y + +# +# FTP Server Configuration +# +CONFIG_FTPSERVER_LOG_LEVEL=1 +CONFIG_FTPSERVER_LOG_LEVEL0= +CONFIG_FTPSERVER_LOG_LEVEL1=y +CONFIG_FTPSERVER_LOG_LEVEL2= +CONFIG_FTPSERVER_LOG_LEVEL3= +CONFIG_FTPSERVER_LOG_LEVEL4= +CONFIG_MICROPY_FTPSERVER_TIMEOUT=300 +CONFIG_MICROPY_FTPSERVER_BUFFER_SIZE=1024 + +# +# Modules +# +CONFIG_MICROPY_PY_FRAMEBUF= +CONFIG_MICROPY_PY_USE_BTREE= +CONFIG_MICROPY_USE_WEBSOCKETS= +CONFIG_MICROPY_USE_GSM= +CONFIG_MICROPY_USE_ETHERNET= +CONFIG_MICROPY_USE_MDNS=y +CONFIG_MICROPY_USE_CURL= +CONFIG_MICROPY_USE_SSH= +CONFIG_MICROPY_USE_MQTT= + +# +# File systems +# +CONFIG_MICROPY_FATFS_MAX_OPEN_FILES=6 +CONFIG_MICROPY_USE_SPIFFS=y +CONFIG_MICROPY_SDMMC_SHOW_INFO=y + +# +# SD Card configuration +# +CONFIG_SDCARD_MODE=3 +CONFIG_SDCARD_MODE1= +CONFIG_SDCARD_MODE2= +CONFIG_SDCARD_MODE3=y + +# +# Partition Table +# +CONFIG_PARTITION_TABLE_SINGLE_APP= +CONFIG_PARTITION_TABLE_TWO_OTA= +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_mpy.csv" +CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 +CONFIG_PARTITION_TABLE_CUSTOM_PHY_DATA_OFFSET=0xf000 +CONFIG_PARTITION_TABLE_FILENAME="partitions_mpy.csv" +CONFIG_APP_OFFSET=0x10000 +CONFIG_PHY_DATA_OFFSET=0xf000 + +# +# Compiler options +# +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_OPTIMIZATION_LEVEL_RELEASE= +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +CONFIG_OPTIMIZATION_ASSERTIONS_SILENT= +CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED= +CONFIG_CXX_EXCEPTIONS= +CONFIG_STACK_CHECK_NONE=y +CONFIG_STACK_CHECK_NORM= +CONFIG_STACK_CHECK_STRONG= +CONFIG_STACK_CHECK_ALL= +CONFIG_STACK_CHECK= + +# +# Component config +# + +# +# Application Level Tracing +# +CONFIG_ESP32_APPTRACE_DEST_TRAX= +CONFIG_ESP32_APPTRACE_DEST_NONE=y +CONFIG_ESP32_APPTRACE_ENABLE= +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y + +# +# FreeRTOS SystemView Tracing +# +CONFIG_AWS_IOT_SDK= + +# +# Bluetooth +# +CONFIG_BT_ENABLED= +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 +CONFIG_BT_RESERVE_DRAM=0 + +# +# ESP32-specific +# +CONFIG_ESP32_DEFAULT_CPU_FREQ_80= +CONFIG_ESP32_DEFAULT_CPU_FREQ_160= +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 +CONFIG_MEMMAP_SMP=y +CONFIG_SPIRAM_SUPPORT=y + +# +# SPI RAM config +# +CONFIG_SPIRAM_BOOT_INIT=y +CONFIG_SPIRAM_USE_MEMMAP= +CONFIG_SPIRAM_USE_CAPS_ALLOC= +CONFIG_SPIRAM_USE_MALLOC=y +CONFIG_SPIRAM_TYPE_ESPPSRAM32=y +CONFIG_SPIRAM_SIZE=4194304 +CONFIG_SPIRAM_SPEED_40M=y +CONFIG_SPIRAM_MEMTEST=y +CONFIG_SPIRAM_CACHE_WORKAROUND=y +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384 +CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST= +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768 +CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY= +CONFIG_MEMMAP_TRACEMEM= +CONFIG_MEMMAP_TRACEMEM_TWOBANKS= +CONFIG_ESP32_TRAX= +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH= +CONFIG_ESP32_ENABLE_COREDUMP_TO_UART= +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +CONFIG_ESP32_ENABLE_COREDUMP= +CONFIG_TWO_UNIVERSAL_MAC_ADDRESS= +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2048 +CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_TIMER_TASK_STACK_SIZE=3584 +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF= +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR= +CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF= +CONFIG_NEWLIB_STDIN_LINE_ENDING_LF= +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +CONFIG_NEWLIB_NANO_FORMAT= +CONFIG_CONSOLE_UART_DEFAULT=y +CONFIG_CONSOLE_UART_CUSTOM= +CONFIG_CONSOLE_UART_NONE= +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +CONFIG_ULP_COPROC_ENABLED= +CONFIG_ULP_COPROC_RESERVE_MEM=0 +CONFIG_ESP32_PANIC_PRINT_HALT=y +CONFIG_ESP32_PANIC_PRINT_REBOOT= +CONFIG_ESP32_PANIC_SILENT_REBOOT= +CONFIG_ESP32_PANIC_GDBSTUB= +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +CONFIG_TASK_WDT=y +CONFIG_TASK_WDT_PANIC= +CONFIG_TASK_WDT_TIMEOUT_S=15 +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +CONFIG_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +CONFIG_BROWNOUT_DET_LVL_SEL_1= +CONFIG_BROWNOUT_DET_LVL_SEL_2= +CONFIG_BROWNOUT_DET_LVL_SEL_3= +CONFIG_BROWNOUT_DET_LVL_SEL_4= +CONFIG_BROWNOUT_DET_LVL_SEL_5= +CONFIG_BROWNOUT_DET_LVL_SEL_6= +CONFIG_BROWNOUT_DET_LVL_SEL_7= +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC= +CONFIG_ESP32_TIME_SYSCALL_USE_FRC1= +CONFIG_ESP32_TIME_SYSCALL_USE_NONE= +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL= +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_XTAL_FREQ_40= +CONFIG_ESP32_XTAL_FREQ_26= +CONFIG_ESP32_XTAL_FREQ_AUTO=y +CONFIG_ESP32_XTAL_FREQ=0 +CONFIG_DISABLE_BASIC_ROM_CONSOLE= +CONFIG_NO_BLOBS= +CONFIG_ESP_TIMER_PROFILING= +CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS= + +# +# Wi-Fi +# +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16 +CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_NVS_ENABLED=y + +# +# PHY +# +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION=y +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 + +# +# Power Management +# +CONFIG_PM_ENABLE= + +# +# Ethernet +# +CONFIG_DMA_RX_BUF_NUM=10 +CONFIG_DMA_TX_BUF_NUM=10 +CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE= +CONFIG_EMAC_TASK_PRIORITY=20 + +# +# FAT Filesystem support +# +CONFIG_FATFS_CODEPAGE_DYNAMIC= +CONFIG_FATFS_CODEPAGE_437=y +CONFIG_FATFS_CODEPAGE_720= +CONFIG_FATFS_CODEPAGE_737= +CONFIG_FATFS_CODEPAGE_771= +CONFIG_FATFS_CODEPAGE_775= +CONFIG_FATFS_CODEPAGE_850= +CONFIG_FATFS_CODEPAGE_852= +CONFIG_FATFS_CODEPAGE_855= +CONFIG_FATFS_CODEPAGE_857= +CONFIG_FATFS_CODEPAGE_860= +CONFIG_FATFS_CODEPAGE_861= +CONFIG_FATFS_CODEPAGE_862= +CONFIG_FATFS_CODEPAGE_863= +CONFIG_FATFS_CODEPAGE_864= +CONFIG_FATFS_CODEPAGE_865= +CONFIG_FATFS_CODEPAGE_866= +CONFIG_FATFS_CODEPAGE_869= +CONFIG_FATFS_CODEPAGE_932= +CONFIG_FATFS_CODEPAGE_936= +CONFIG_FATFS_CODEPAGE_949= +CONFIG_FATFS_CODEPAGE_950= +CONFIG_FATFS_CODEPAGE=437 +CONFIG_FATFS_LFN_NONE= +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_STACK= +CONFIG_FATFS_MAX_LFN=127 +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE= + +# +# FreeRTOS +# +CONFIG_FREERTOS_UNICORE= +CONFIG_FREERTOS_CORETIMER_0=y +CONFIG_FREERTOS_CORETIMER_1= +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION= +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE= +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL= +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y +CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK= +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=4 +CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y +CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE= +CONFIG_FREERTOS_ASSERT_DISABLE= +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_ISR_STACKSIZE=4096 +CONFIG_FREERTOS_LEGACY_HOOKS= +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +CONFIG_SUPPORT_STATIC_ALLOCATION=y +CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK=y +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_USE_TRACE_FACILITY= +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS= +CONFIG_FREERTOS_DEBUG_INTERNALS= + +# +# Heap memory debugging +# +CONFIG_HEAP_POISONING_DISABLED=y +CONFIG_HEAP_POISONING_LIGHT= +CONFIG_HEAP_POISONING_COMPREHENSIVE= +CONFIG_HEAP_TRACING= + +# +# libsodium +# +CONFIG_LIBSODIUM_USE_MBEDTLS_SHA=y + +# +# Log output +# +CONFIG_LOG_DEFAULT_LEVEL_NONE= +CONFIG_LOG_DEFAULT_LEVEL_ERROR= +CONFIG_LOG_DEFAULT_LEVEL_WARN= +CONFIG_LOG_DEFAULT_LEVEL_INFO= +CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y +CONFIG_LOG_DEFAULT_LEVEL_VERBOSE= +CONFIG_LOG_DEFAULT_LEVEL=4 +CONFIG_LOG_COLORS=y + +# +# LWIP +# +CONFIG_L2_TO_L3_COPY= +CONFIG_LWIP_MAX_SOCKETS=8 +CONFIG_LWIP_SO_REUSE=y +CONFIG_LWIP_SO_REUSE_RXTOALL=y +CONFIG_LWIP_SO_RCVBUF= +CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 +CONFIG_LWIP_IP_FRAG= +CONFIG_LWIP_IP_REASSEMBLY= +CONFIG_LWIP_STATS= +CONFIG_LWIP_ETHARP_TRUST_IP_MAC=y +CONFIG_TCPIP_RECVMBOX_SIZE=32 +CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y + +# +# DHCP server +# +CONFIG_LWIP_DHCPS_LEASE_UNIT=60 +CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +CONFIG_LWIP_AUTOIP= +CONFIG_LWIP_NETIF_LOOPBACK=y +CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 + +# +# TCP +# +CONFIG_LWIP_MAX_ACTIVE_TCP=16 +CONFIG_LWIP_MAX_LISTENING_TCP=16 +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=6 +CONFIG_TCP_MSS=1436 +CONFIG_TCP_MSL=60000 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_QUEUE_OOSEQ=y +CONFIG_TCP_OVERSIZE_MSS=y +CONFIG_TCP_OVERSIZE_QUARTER_MSS= +CONFIG_TCP_OVERSIZE_DISABLE= + +# +# UDP +# +CONFIG_LWIP_MAX_UDP_PCBS=16 +CONFIG_UDP_RECVMBOX_SIZE=6 +CONFIG_TCPIP_TASK_STACK_SIZE=4096 +CONFIG_PPP_SUPPORT=y +CONFIG_PPP_PAP_SUPPORT=y +CONFIG_PPP_CHAP_SUPPORT= +CONFIG_PPP_MSCHAP_SUPPORT= +CONFIG_PPP_MPPE_SUPPORT= +CONFIG_PPP_DEBUG_ON= + +# +# ICMP +# +CONFIG_LWIP_MULTICAST_PING= +CONFIG_LWIP_BROADCAST_PING= + +# +# LWIP RAW API +# +CONFIG_LWIP_MAX_RAW_PCBS=16 + +# +# mbedTLS +# +CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 +CONFIG_MBEDTLS_DEBUG= +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_HARDWARE_MPI= +CONFIG_MBEDTLS_HARDWARE_SHA= +CONFIG_MBEDTLS_HAVE_TIME=y +CONFIG_MBEDTLS_HAVE_TIME_DATE= +CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +CONFIG_MBEDTLS_TLS_SERVER_ONLY= +CONFIG_MBEDTLS_TLS_CLIENT_ONLY= +CONFIG_MBEDTLS_TLS_DISABLED= +CONFIG_MBEDTLS_TLS_SERVER=y +CONFIG_MBEDTLS_TLS_CLIENT=y +CONFIG_MBEDTLS_TLS_ENABLED=y + +# +# TLS Key Exchange Methods +# +CONFIG_MBEDTLS_PSK_MODES= +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y +CONFIG_MBEDTLS_SSL_PROTO_SSL3= +CONFIG_MBEDTLS_SSL_PROTO_TLS1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y +CONFIG_MBEDTLS_SSL_PROTO_DTLS= +CONFIG_MBEDTLS_SSL_ALPN=y +CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y + +# +# Symmetric Ciphers +# +CONFIG_MBEDTLS_AES_C=y +CONFIG_MBEDTLS_CAMELLIA_C= +CONFIG_MBEDTLS_DES_C= +CONFIG_MBEDTLS_RC4_DISABLED=y +CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT= +CONFIG_MBEDTLS_RC4_ENABLED= +CONFIG_MBEDTLS_BLOWFISH_C= +CONFIG_MBEDTLS_XTEA_C= +CONFIG_MBEDTLS_CCM_C=y +CONFIG_MBEDTLS_GCM_C=y +CONFIG_MBEDTLS_RIPEMD160_C= + +# +# Certificates +# +CONFIG_MBEDTLS_PEM_PARSE_C=y +CONFIG_MBEDTLS_PEM_WRITE_C=y +CONFIG_MBEDTLS_X509_CRL_PARSE_C=y +CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +CONFIG_MBEDTLS_ECP_C=y +CONFIG_MBEDTLS_ECDH_C=y +CONFIG_MBEDTLS_ECDSA_C=y +CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y +CONFIG_MBEDTLS_ECP_NIST_OPTIM=y + +# +# OpenSSL +# +CONFIG_OPENSSL_DEBUG= +CONFIG_OPENSSL_ASSERT_DO_NOTHING=y +CONFIG_OPENSSL_ASSERT_EXIT= + +# +# PThreads +# +CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 + +# +# SPI Flash driver +# +CONFIG_SPI_FLASH_VERIFY_WRITE= +CONFIG_SPI_FLASH_ENABLE_COUNTERS= +CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y +CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y +CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS= +CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED= + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_MAX_PARTITIONS=1 + +# +# SPIFFS Cache Configuration +# +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +CONFIG_SPIFFS_CACHE_STATS= +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +CONFIG_SPIFFS_GC_STATS= +CONFIG_SPIFFS_OBJ_NAME_LEN=64 +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=5 +CONFIG_SPIFFS_USE_MTIME=y +CONFIG_SPIFFS_USE_DIR=y + +# +# Debug Configuration +# +CONFIG_SPIFFS_DBG= +CONFIG_SPIFFS_API_DBG= +CONFIG_SPIFFS_GC_DBG= +CONFIG_SPIFFS_CACHE_DBG= +CONFIG_SPIFFS_CHECK_DBG= +CONFIG_SPIFFS_TEST_VISUALISATION= + +# +# tcpip adapter +# +CONFIG_IP_LOST_TIMER_INTERVAL=120 + +# +# Wear Levelling +# +CONFIG_WL_SECTOR_SIZE_512=y +CONFIG_WL_SECTOR_SIZE_4096= +CONFIG_WL_SECTOR_SIZE=512 +CONFIG_WL_SECTOR_MODE_PERF= +CONFIG_WL_SECTOR_MODE_SAFE=y +CONFIG_WL_SECTOR_MODE=1 diff --git a/README.md b/README.md index adf1908..b5d164b 100644 --- a/README.md +++ b/README.md @@ -14,16 +14,16 @@ MicroPython works great on ESP32, but the most serious issue is still (as on most other MicroPython boards) limited amount of free memory. -ESP32 can use external **SPI RAM (psRAM)** to expand available RAM up to 16MB. -Currently, there are several modules & development boards which incorporates **4MB** of psRAM: +ESP32 can use external **SPIRAM** (psRAM) to expand available RAM up to 16MB. -**ESP-WROVER-KIT boards** from Espressif or [AnalogLamb](https://www.analoglamb.com/product/esp-wrover-kit-esp32-wrover-module/). +Currently, there are several modules & development boards which incorporates **4MB** of psRAM:
-**ESP-WROVER** from Espressif or [AnalogLamb](https://www.analoglamb.com/product/esp32-wrover/). - -**ALB32-WROVER** from [AnalogLamb](https://www.analoglamb.com/product/alb32-wrover-esp32-module-with-64mb-flash-and-32mb-psram/). - -**S01** and **L01** OEM modules from [Pycom](https://www.pycom.io/webshop). +* **ESP-WROVER-KIT boards** from Espressif or [AnalogLamb](https://www.analoglamb.com/product/esp-wrover-kit-esp32-wrover-module/). +* **Lolin32 Pro board** from [Wemos](https://wiki.wemos.cc/products:lolin32:lolin32_pro) - **recommended**. +* **WiPy 3.0 board** from [Pycom](https://pycom.io/product/wipy-3/). +* **ESP-WROVER** from Espressif or [ElecrtoDragon](http://www.electrodragon.com/product/esp32-wrover-v4-module-based-esp32/). +* **ALB32-WROVER** (4 MB SPIRAM & 4/8/16 MB Flash) from [AnalogLamb](https://www.analoglamb.com/product/alb32-wrover-esp32-module-with-64mb-flash-and-32mb-psram/). +* **S01**, **L01** and G01 OEM modules from [Pycom](https://pycom.io/webshop#oem-products). --- @@ -49,8 +49,8 @@ This way many features not available in standard ESP32 MicroPython are enabled, ### Features -* MicroPython build is based on latest build (1.9.2) from [main Micropython repository](https://github.com/micropython/micropython) -* ESP32 build is based on [MicroPython's ESP32 build](https://github.com/micropython/micropython-esp32/tree/esp32/esp32) with added changes needed to build on ESP32 with psRAM +* MicroPython core based on latest build from [main Micropython repository](https://github.com/micropython/micropython) +* added changes needed to build on ESP32 with psRAM * Default configuration has **2MB** of MicroPython heap, **20KB** of MicroPython stack, **~200KB** of free DRAM heap for C modules and functions * MicroPython can be built in **unicore** (FreeRTOS & MicroPython task running only on the first ESP32 core, or **dualcore** configuration (MicroPython task running on ESP32 **App** core) * ESP32 Flash can be configured in any mode, **QIO**, **QOUT**, **DIO**, **DOUT** @@ -67,15 +67,20 @@ This way many features not available in standard ESP32 MicroPython are enabled, * **Btree** module included, can be Enabled/Disabled via **menuconfig** * **_threads** module greatly improved, inter-thread **notifications** and **messaging** included * **Neopixel** module using ESP32 **RMT** peripheral with many new features +* **DHT** module implemented using ESP32 RMT peripheral +* **1-wire** module implemented using ESP32 RMT peripheral * **i2c** module uses ESP32 hardware i2c driver * **spi** module uses ESP32 hardware spi driver +* **adc** module improved, new functions added * **curl** module added, many client protocols including FTP and eMAIL * **ssh** module added with sftp support * **display** module added with full support for spi TFT displays -* **DHT** module implemented using ESP32 RMT peripheral * **mqtt** module added, implemented in C, runs in separate task +* **mDNS** module added, implemented in C, runs in separate task * **telnet** module added, connect to **REPL via WiFi** using telnet protocol * **ftp** server module added, runs as separate ESP32 task +* **GSM/PPPoS** support, connect to the Internet via GSM module +* **OTA Update** supported * **Eclipse** project files included. To include it into Eclipse goto File->Import->Existing Projects into Workspace->Select root directory->[select *MicroPython_BUILD* directory]->Finish. **Rebuild index**. --- diff --git a/Tools/.gitignore b/Tools/.gitignore index f163bcc..2be2b7f 100644 --- a/Tools/.gitignore +++ b/Tools/.gitignore @@ -2,4 +2,5 @@ esp-idf/ esp-idf_psram/ xtensa-esp32-elf/ xtensa-esp32-elf_psram/ +esp-idf_patches/ *.id diff --git a/Tools/esp-idf.tar.xz b/Tools/esp-idf.tar.xz index a03b11c..90c7faa 100644 Binary files a/Tools/esp-idf.tar.xz and b/Tools/esp-idf.tar.xz differ