Merge remote-tracking branch 'adafruit/main' into merge-micropython-v1.23.0

This commit is contained in:
Dan Halbert 2024-09-13 15:54:55 -04:00
commit d777cd7d78
62 changed files with 684 additions and 99 deletions

View file

@ -50,6 +50,17 @@ void common_hal_bleio_characteristic_construct(bleio_characteristic_obj_t *self,
}
}
bool common_hal_bleio_characteristic_deinited(bleio_characteristic_obj_t *self) {
return self->handle == BLE_GATT_HANDLE_INVALID;
}
void common_hal_bleio_characteristic_deinit(bleio_characteristic_obj_t *self) {
if (common_hal_bleio_characteristic_deinited(self)) {
return;
}
self->handle = BLE_GATT_HANDLE_INVALID;
}
mp_obj_tuple_t *common_hal_bleio_characteristic_get_descriptors(bleio_characteristic_obj_t *self) {
return mp_obj_new_tuple(self->descriptor_list->len, self->descriptor_list->items);
}

View file

@ -12,5 +12,6 @@ LONGINT_IMPL = MPZ
CIRCUITPY_FLOPPYIO = 0
CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_BLEIO_HCI = 0
CIRCUITPY_BITBANG_APA102 = 1

View file

@ -12,6 +12,9 @@ CROSS_COMPILE = riscv32-esp-elf-
else ifeq ($(IDF_TARGET),esp32c3)
IDF_TARGET_ARCH = riscv
CROSS_COMPILE = riscv32-esp-elf-
else ifeq ($(IDF_TARGET),esp32p4)
IDF_TARGET_ARCH = riscv
CROSS_COMPILE = riscv32-esp-elf-
else ifeq ($(IDF_TARGET),esp32c6)
IDF_TARGET_ARCH = riscv
CROSS_COMPILE = riscv32-esp-elf-
@ -215,7 +218,13 @@ ifeq ($(IDF_TARGET_ARCH),xtensa)
CFLAGS += -mlongcalls -isystem esp-idf/components/xtensa/deprecated_include/ -Wno-error=cpp
else ifeq ($(IDF_TARGET_ARCH),riscv)
ifeq ($(IDF_TARGET),esp32p4)
CFLAGS += -march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f
else
CFLAGS += -march=rv32imac_zicsr_zifencei
endif
LDFLAGS += \
-Lesp-idf/components/riscv/ld \
-Trom.api.ld
@ -285,6 +294,16 @@ LDFLAGS += \
-Tesp32c6.rom.wdt.ld
CHIP_COMPONENTS = \
esp_driver_tsens
else ifeq ($(IDF_TARGET),esp32p4)
LDFLAGS += \
-Tesp32p4.rom.newlib.ld \
-Tesp32p4.rom.systimer.ld \
-Tesp32p4.rom.wdt.ld
CHIP_COMPONENTS = \
esp_driver_tsens
@ -338,6 +357,8 @@ else ifeq ($(IDF_TARGET),esp32c3)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C3
else ifeq ($(IDF_TARGET),esp32c6)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C6
else ifeq ($(IDF_TARGET),esp32p4)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32P4
else ifeq ($(IDF_TARGET),esp32h2)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32H2
else ifeq ($(IDF_TARGET),esp32s2)
@ -578,7 +599,10 @@ update-board-sdkconfig: $(BUILD)/esp-idf/config/sdkconfig.h
python tools/update_sdkconfig.py --board=$(BOARD) --debug=$(DEBUG)
BINARY_WIFI_BLOBS = libcore.a libespnow.a libnet80211.a libpp.a libsmartconfig.a
BINARY_BLOBS = esp-idf/components/esp_phy/lib/$(IDF_TARGET)/libphy.a
ifneq ($(IDF_TARGET),esp32p4)
BINARY_BLOBS = esp-idf/components/esp_phy/lib/$(IDF_TARGET)/libphy.a
endif
ifneq ($(CIRCUITPY_WIFI),0)
BINARY_BLOBS += esp-idf/components/esp_coex/lib/$(IDF_TARGET)/libcoexist.a $(addprefix esp-idf/components/esp_wifi/lib/$(IDF_TARGET)/, $(BINARY_WIFI_BLOBS))
ifneq ($(IDF_TARGET),esp32c2)
@ -590,9 +614,9 @@ ifeq ($(IDF_TARGET),esp32)
BINARY_BLOBS += esp-idf/components/esp_phy/lib/$(IDF_TARGET)/librtc.a
endif
ESP_IDF_COMPONENTS_LINK = $(IDF_TARGET_ARCH) $(CHIP_COMPONENTS) app_update bootloader_support driver esp_driver_gpio esp_driver_gptimer esp_driver_ledc esp_driver_spi esp_driver_uart efuse esp_adc esp_app_format esp_common esp_event esp_hw_support esp_mm esp_partition esp_phy esp_pm esp_ringbuf esp_rom esp_system esp_timer freertos hal heap log newlib nvs_flash pthread soc spi_flash vfs esp_vfs_console
ESP_IDF_COMPONENTS_LINK = $(IDF_TARGET_ARCH) $(CHIP_COMPONENTS) app_update bootloader_support driver esp_driver_gpio esp_driver_gptimer esp_driver_ledc esp_driver_spi esp_driver_uart efuse esp_adc esp_app_format esp_common esp_event esp_hw_support esp_mm esp_partition esp_pm esp_ringbuf esp_rom esp_system esp_timer freertos hal heap log newlib nvs_flash pthread soc spi_flash vfs esp_vfs_console
ifneq ($(CIRCUITPY_WIFI),0)
ESP_IDF_COMPONENTS_LINK += esp_coex esp_netif esp-tls esp_wifi lwip mbedtls mdns wpa_supplicant
ESP_IDF_COMPONENTS_LINK += esp_coex esp_netif esp-tls esp_wifi lwip mbedtls mdns wpa_supplicant esp_phy
endif
ifneq ($(CIRCUITPY_BLEIO),0)
BLE_IMPL_esp32 := esp32
@ -603,7 +627,7 @@ ifneq ($(CIRCUITPY_BLEIO),0)
BLE_IMPL_esp32h2 := libble
BLE_IMPL = $(BLE_IMPL_$(IDF_TARGET))
ESP_IDF_COMPONENTS_LINK += bt
ESP_IDF_COMPONENTS_LINK += bt esp_phy
ifeq ($(BLE_IMPL),esp32)
# BLE will hang the ESP32 and trigger an interrupt watchdog without this undefined symbol at
# link because a weak version of the interrupt that BLE uses will be linked incorrectly.
@ -665,6 +689,8 @@ else ifeq ($(IDF_TARGET),esp32c3)
BOOTLOADER_OFFSET = 0x0
else ifeq ($(IDF_TARGET),esp32c6)
BOOTLOADER_OFFSET = 0x0
else ifeq ($(IDF_TARGET),esp32p4)
BOOTLOADER_OFFSET = 0x2000
else ifeq ($(IDF_TARGET),esp32s3)
BOOTLOADER_OFFSET = 0x0
else ifeq ($(IDF_TARGET),esp32s2)

View file

@ -14,6 +14,7 @@ Support Status:
ESP32-C2, "alpha"
ESP32-C3, "beta"
ESP32-C6, "alpha"
ESP32-P4, "alpha"
ESP32-S2, "stable"
ESP32-S3, "stable"

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,20 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "ESP32-P4-Function-EV"
#define MICROPY_HW_MCU_NAME "ESP32P4"
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0)
#define DEFAULT_UART_BUS_RX (&pin_GPIO38)
#define DEFAULT_UART_BUS_TX (&pin_GPIO37)
#define CIRCUITPY_CONSOLE_UART_TX DEFAULT_UART_BUS_TX
#define CIRCUITPY_CONSOLE_UART_RX DEFAULT_UART_BUS_RX

View file

@ -0,0 +1,14 @@
# USB_VID = 0x303A
# USB_PID = 0x7003
# USB_PRODUCT = "ESP32-P4-Function-EV"
# USB_MANUFACTURER = "Espressif"
IDF_TARGET = esp32p4
CIRCUITPY_ESP_FLASH_SIZE = 16MB
CIRCUITPY_ESP_FLASH_MODE = opi
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_PSRAM_SIZE = 32MB
CIRCUITPY_ESP_PSRAM_MODE = opi
CIRCUITPY_ESP_PSRAM_FREQ = 80m

View file

@ -0,0 +1,55 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) },
{ MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47) },
{ MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO48) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -6,7 +6,7 @@
#pragma once
#define MICROPY_HW_BOARD_NAME "VIDI X"
#define MICROPY_HW_BOARD_NAME "VIDI X V1.1"
#define MICROPY_HW_MCU_NAME "ESP32"
#define MICROPY_HW_LED_STATUS (&pin_GPIO2)

View file

@ -16,6 +16,7 @@
#include "shared-bindings/_bleio/PacketBuffer.h"
#include "shared-bindings/_bleio/Service.h"
#include "shared-bindings/time/__init__.h"
#include "supervisor/shared/safe_mode.h"
#include "common-hal/_bleio/Adapter.h"
#include "common-hal/_bleio/Service.h"
@ -74,27 +75,20 @@ void common_hal_bleio_characteristic_construct(bleio_characteristic_obj_t *self,
self->flags |= BLE_GATT_CHR_F_WRITE_AUTHEN;
}
if (initial_value_bufinfo != NULL) {
// Copy the initial value if it's on the heap. Otherwise it's internal and we may not be able
// to allocate.
self->current_value_len = initial_value_bufinfo->len;
if (gc_alloc_possible()) {
self->current_value = m_malloc(max_length);
self->current_value_alloc = max_length;
if (gc_nbytes(initial_value_bufinfo->buf) > 0) {
memcpy(self->current_value, initial_value_bufinfo->buf, self->current_value_len);
}
} else {
self->current_value = initial_value_bufinfo->buf;
assert(self->current_value_len == max_length);
}
if (gc_alloc_possible()) {
self->current_value = m_malloc(max_length);
} else {
self->current_value = port_malloc(max_length, false);
if (self->current_value != NULL) {
self->current_value_alloc = max_length;
self->current_value_len = 0;
if (self->current_value == NULL) {
reset_into_safe_mode(SAFE_MODE_NO_HEAP);
}
}
self->current_value_alloc = max_length;
self->current_value_len = 0;
if (initial_value_bufinfo != NULL) {
common_hal_bleio_characteristic_set_value(self, initial_value_bufinfo);
}
if (gc_alloc_possible()) {
self->descriptor_list = mp_obj_new_list(0, NULL);
@ -114,6 +108,26 @@ void common_hal_bleio_characteristic_construct(bleio_characteristic_obj_t *self,
}
}
bool common_hal_bleio_characteristic_deinited(bleio_characteristic_obj_t *self) {
return self->current_value == NULL;
}
void common_hal_bleio_characteristic_deinit(bleio_characteristic_obj_t *self) {
if (common_hal_bleio_characteristic_deinited(self)) {
return;
}
if (self->current_value == NULL) {
return;
}
if (gc_nbytes(self->current_value) > 0) {
m_free(self->current_value);
} else {
port_free(self->current_value);
}
self->current_value = NULL;
}
mp_obj_tuple_t *common_hal_bleio_characteristic_get_descriptors(bleio_characteristic_obj_t *self) {
if (self->descriptor_list == NULL) {
return mp_const_empty_tuple;
@ -173,21 +187,7 @@ void common_hal_bleio_characteristic_set_value(bleio_characteristic_obj_t *self,
}
self->current_value_len = bufinfo->len;
// If we've already allocated an internal buffer or the provided buffer
// is on the heap, then copy into the internal buffer.
if (self->current_value_alloc > 0 || gc_nbytes(bufinfo->buf) > 0) {
if (self->current_value_alloc < bufinfo->len) {
self->current_value = m_realloc(self->current_value, bufinfo->len);
// Get the number of bytes from the heap because it may be more
// than the len due to gc block size.
self->current_value_alloc = gc_nbytes(self->current_value);
}
memcpy(self->current_value, bufinfo->buf, bufinfo->len);
} else {
// Otherwise, use the provided buffer to delay any heap allocation.
self->current_value = bufinfo->buf;
self->current_value_alloc = 0;
}
memcpy(self->current_value, bufinfo->buf, self->current_value_len);
ble_gatts_chr_updated(self->handle);
}

View file

@ -26,6 +26,7 @@ void bleio_characteristic_buffer_extend(bleio_characteristic_buffer_obj_t *self,
for (uint16_t i = 0; i < len; i++) {
if (data[i] == mp_interrupt_char) {
mp_sched_keyboard_interrupt();
ringbuf_clear(&self->ringbuf);
} else {
ringbuf_put(&self->ringbuf, data[i]);
}

View file

@ -436,6 +436,7 @@ void common_hal_bleio_packet_buffer_deinit(bleio_packet_buffer_obj_t *self) {
return;
}
bleio_characteristic_clear_observer(self->characteristic);
self->characteristic = NULL;
ble_event_remove_handler(packet_buffer_on_ble_client_evt, self);
ringbuf_deinit(&self->ringbuf);
}

View file

@ -33,7 +33,7 @@
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
#define ADC_RESULT_BYTE 2
#define ADC_CONV_LIMIT_EN 0
#elif defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2)
#elif defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2) || defined(CONFIG_IDF_TARGET_ESP32P4)
#define ADC_RESULT_BYTE 4
#define ADC_CONV_LIMIT_EN 0
#elif defined(CONFIG_IDF_TARGET_ESP32S3)

View file

@ -32,6 +32,8 @@
#define DATA_WIDTH ADC_BITWIDTH_12
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
#define DATA_WIDTH ADC_BITWIDTH_12
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
#define DATA_WIDTH ADC_BITWIDTH_12
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
#define DATA_WIDTH ADC_BITWIDTH_13
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
@ -84,9 +86,10 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
adc_cali_scheme_ver_t supported_schemes;
adc_cali_check_scheme(&supported_schemes);
#ifndef CONFIG_IDF_TARGET_ESP32P4
adc_cali_scheme_ver_t calibration_scheme = 0;
adc_cali_handle_t calibration;
#endif
#if defined(ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED) && ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
adc_cali_curve_fitting_config_t config = {
.unit_id = self->pin->adc_index,
@ -134,8 +137,11 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
// This corrects non-linear regions of the ADC range with a LUT, so it's a better reading than raw
int voltage;
#ifdef CONFIG_IDF_TARGET_ESP32P4
voltage = 0;
#else
adc_cali_raw_to_voltage(calibration, adc_reading, &voltage);
#endif
#if defined(ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED) && ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
if (calibration_scheme == ADC_CALI_SCHEME_VER_CURVE_FITTING) {

View file

@ -27,7 +27,11 @@
static size_t psram_size_usable(void) {
#ifdef CONFIG_SPIRAM
/* PSRAM chip may be larger than the size we can map into address space */
#ifdef CONFIG_IDF_TARGET_ESP32P4
size_t s = esp_psram_get_size();
#else
size_t s = MIN(esp_psram_get_size(), SOC_EXTRAM_DATA_SIZE);
#endif
return s - esp_himem_reserved_area_size();
#else
return 0;

View file

@ -171,6 +171,26 @@ static const uint64_t pin_mask_reset_forbidden =
#endif
#endif // ESP32H2
#if defined(CONFIG_IDF_TARGET_ESP32P4)
// Never ever reset pins used to communicate with the SPI flash.
GPIO_SEL_28 |
GPIO_SEL_29 |
GPIO_SEL_30 |
GPIO_SEL_32 |
GPIO_SEL_33 |
GPIO_SEL_34 |
#if CIRCUITPY_ESP_USB_SERIAL_JTAG
// Never ever reset serial/JTAG communication pins.
GPIO_SEL_50 | // USB D-
GPIO_SEL_51 | // USB D+
#endif
#if defined(CONFIG_ESP_CONSOLE_UART_DEFAULT) && CONFIG_ESP_CONSOLE_UART_DEFAULT && CONFIG_ESP_CONSOLE_UART_NUM == 0
// Never reset debug UART/console pins.
GPIO_SEL_37 |
GPIO_SEL_38 |
#endif
#endif // ESP32P4
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
#if CIRCUITPY_USB_DEVICE
// Never ever reset USB pins.

View file

@ -107,11 +107,14 @@ void common_hal_mcu_processor_set_frequency(mcu_processor_obj_t *self, uint32_t
}
#endif
#ifndef CONFIG_IDF_TARGET_ESP32P4
static uint8_t swap_nibbles(uint8_t v) {
return ((v << 4) | (v >> 4)) & 0xff;
}
#endif
void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) {
#ifndef CONFIG_IDF_TARGET_ESP32P4
memset(raw_id, 0, COMMON_HAL_MCU_PROCESSOR_UID_LENGTH);
uint8_t *ptr = &raw_id[COMMON_HAL_MCU_PROCESSOR_UID_LENGTH - 1];
@ -149,6 +152,10 @@ void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) {
*ptr-- = swap_nibbles(mac_address_part & 0xff);
mac_address_part >>= 8;
*ptr-- = swap_nibbles(mac_address_part & 0xff);
#else
// TODO: Get UID for ESP32-P4.
return;
#endif
}
mcu_reset_reason_t common_hal_mcu_processor_get_reset_reason(void) {

View file

@ -36,6 +36,8 @@
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
#include "soc/lp_aon_reg.h"
#include "esp32c6/rom/rtc.h"
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
#include "esp32p4/rom/rtc.h"
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
#include "soc/rtc_cntl_reg.h"
#include "esp32s2/rom/rtc.h"
@ -93,18 +95,22 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
REG_WRITE(RTC_RESET_CAUSE_REG, 0); // reset uf2
#endif
#ifdef SOC_LP_AON_SUPPORTED
#if defined(CONFIG_IDF_TARGET_ESP32P4)
REG_WRITE(LP_SYSTEM_REG_LP_STORE15_REG, 0);
#elif defined(SOC_LP_AON_SUPPORTED)
REG_WRITE(LP_AON_STORE0_REG, 0); // reset safe mode
#else
REG_WRITE(RTC_CNTL_STORE0_REG, 0); // reset safe mode
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32)
#ifdef SOC_LP_AON_SUPPORTED
#if defined(CONFIG_IDF_TARGET_ESP32)
// No UF2 bootloader.
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
REG_WRITE(LP_SYSTEM_REG_SYS_CTRL_REG, 0);
#elif defined(SOC_LP_AON_SUPPORTED)
REG_WRITE(LP_AON_SYS_CFG_REG, 0); // reset bootloader
#else
REG_WRITE(RTC_CNTL_OPTION1_REG, 0); // reset bootloader
#endif
#endif
break;
case RUNMODE_SAFE_MODE:
// enter safe mode on next boot
@ -118,7 +124,10 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
chip_usb_set_persist_flags(USBDC_BOOT_DFU);
#endif
#ifdef SOC_LP_AON_SUPPORTED
#if defined(CONFIG_IDF_TARGET_ESP32P4)
REG_WRITE(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_FORCE_DOWNLOAD_BOOT);
#elif defined(SOC_LP_AON_SUPPORTED)
REG_WRITE(LP_AON_SYS_CFG_REG, LP_AON_FORCE_DOWNLOAD_BOOT);
#else
REG_WRITE(RTC_CNTL_OPTION1_REG, RTC_CNTL_FORCE_DOWNLOAD_BOOT);
@ -314,5 +323,23 @@ static const mp_rom_map_elem_t mcu_pin_global_dict_table[] = {
#ifdef GPIO48_EXISTS
{ MP_ROM_QSTR(MP_QSTR_GPIO48), MP_ROM_PTR(&pin_GPIO48) },
#endif
#ifdef GPIO49_EXISTS
{ MP_ROM_QSTR(MP_QSTR_GPIO49), MP_ROM_PTR(&pin_GPIO49) },
#endif
#ifdef GPIO50_EXISTS
{ MP_ROM_QSTR(MP_QSTR_GPIO50), MP_ROM_PTR(&pin_GPIO50) },
#endif
#ifdef GPIO51_EXISTS
{ MP_ROM_QSTR(MP_QSTR_GPIO51), MP_ROM_PTR(&pin_GPIO51) },
#endif
#ifdef GPIO52_EXISTS
{ MP_ROM_QSTR(MP_QSTR_GPIO52), MP_ROM_PTR(&pin_GPIO52) },
#endif
#ifdef GPIO53_EXISTS
{ MP_ROM_QSTR(MP_QSTR_GPIO53), MP_ROM_PTR(&pin_GPIO53) },
#endif
#ifdef GPIO54_EXISTS
{ MP_ROM_QSTR(MP_QSTR_GPIO54), MP_ROM_PTR(&pin_GPIO54) },
#endif
};
MP_DEFINE_CONST_DICT(mcu_pin_globals, mcu_pin_global_dict_table);

View file

@ -0,0 +1,4 @@
# CONFIG_SPIRAM_TYPE_AUTO is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set
CONFIG_SPIRAM_TYPE_AUTO=y

View file

@ -23,6 +23,8 @@ CIRCUITPY_SSL_MBEDTLS = 1
# Wifi Power Save
CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL = 1
# Never use our copy of MBEDTLS
CIRCUITPY_HASHLIB_MBEDTLS_ONLY = 0
# These modules are implemented in ports/<port>/common-hal:
CIRCUITPY_ALARM ?= 1
@ -155,7 +157,7 @@ CIRCUITPY_PARALLELDISPLAYBUS = 0
CIRCUITPY_TOUCHIO ?= 1
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
CIRCUITPY_HASHLIB_MBEDTLS_ONLY = 0
# Features
CIRCUITPY_USB_DEVICE = 0
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 1
@ -163,6 +165,37 @@ CIRCUITPY_WIFI = 0
CIRCUITPY_MAX3421E = 0
else ifeq ($(IDF_TARGET),esp32p4)
# No wifi
# TODO: Support ESP32-C6 coprocessor on some boards.
CIRCUITPY_BLEIO = 0
CIRCUITPY_WIFI = 0
CIRCUITPY_SSL = 0
CIRCUITPY_TOUCHIO = 1
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
# TinyUSB doesn't have it upstreamed
# https://github.com/hathach/tinyusb/issues/2791
CIRCUITPY_USB_DEVICE = 0
CIRCUITPY_MAX3421E = 0
# Update this for the 40mhz processor.
CIRCUITPY_ESPULP = 0
# Update this for multiple TWAI?
CIRCUITPY_CANIO = 0
# Protomatter needs an update
CIRCUITPY_RGBMATRIX = 0
# No I80 support from the IDF
CIRCUITPY_PARALLELDISPLAYBUS = 0
# Library doesn't support P4 yet it seems
CIRCUITPY_ESPCAMERA = 0
else ifeq ($(IDF_TARGET),esp32s2)
# Modules
CIRCUITPY_ALARM_TOUCH = 1

View file

@ -12,6 +12,8 @@
#include "components/esp_rom/include/esp32/rom/ets_sys.h"
#elif defined(CONFIG_IDF_TARGET_ESP32C2)
#include "components/esp_rom/include/esp32c2/rom/ets_sys.h"
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
#include "components/esp_rom/include/esp32p4/rom/ets_sys.h"
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
#include "components/esp_rom/include/esp32c3/rom/ets_sys.h"
#elif defined(CONFIG_IDF_TARGET_ESP32C6)

View file

@ -0,0 +1,63 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 microDev
//
// SPDX-License-Identifier: MIT
#include "peripherals/pins.h"
const mcu_pin_obj_t pin_GPIO0 = PIN(0, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO1 = PIN(1, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO2 = PIN(2, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM0);
const mcu_pin_obj_t pin_GPIO3 = PIN(3, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM1);
const mcu_pin_obj_t pin_GPIO4 = PIN(4, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM2);
const mcu_pin_obj_t pin_GPIO5 = PIN(5, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM3);
const mcu_pin_obj_t pin_GPIO6 = PIN(6, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM4);
const mcu_pin_obj_t pin_GPIO7 = PIN(7, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM5);
const mcu_pin_obj_t pin_GPIO8 = PIN(8, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM6);
const mcu_pin_obj_t pin_GPIO9 = PIN(9, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM7);
const mcu_pin_obj_t pin_GPIO10 = PIN(10, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM8);
const mcu_pin_obj_t pin_GPIO11 = PIN(11, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM9);
const mcu_pin_obj_t pin_GPIO12 = PIN(12, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM10);
const mcu_pin_obj_t pin_GPIO13 = PIN(13, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM11);
const mcu_pin_obj_t pin_GPIO14 = PIN(14, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM12);
const mcu_pin_obj_t pin_GPIO15 = PIN(15, NO_ADC, NO_ADC_CHANNEL, TOUCH_PAD_NUM13);
const mcu_pin_obj_t pin_GPIO16 = PIN(16, ADC_UNIT_1, ADC_CHANNEL_0, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO17 = PIN(17, ADC_UNIT_1, ADC_CHANNEL_1, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO18 = PIN(18, ADC_UNIT_1, ADC_CHANNEL_2, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO19 = PIN(19, ADC_UNIT_1, ADC_CHANNEL_3, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO20 = PIN(20, ADC_UNIT_1, ADC_CHANNEL_4, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO21 = PIN(21, ADC_UNIT_1, ADC_CHANNEL_5, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO22 = PIN(22, ADC_UNIT_1, ADC_CHANNEL_6, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO23 = PIN(23, ADC_UNIT_1, ADC_CHANNEL_7, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO24 = PIN(24, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO25 = PIN(25, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO26 = PIN(26, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO27 = PIN(27, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO28 = PIN(28, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO29 = PIN(29, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO30 = PIN(30, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO31 = PIN(31, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO32 = PIN(32, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO33 = PIN(33, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO34 = PIN(34, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO35 = PIN(35, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO36 = PIN(36, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO37 = PIN(37, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO38 = PIN(38, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO39 = PIN(39, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO40 = PIN(40, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO41 = PIN(41, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO42 = PIN(42, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO43 = PIN(43, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO44 = PIN(44, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO45 = PIN(45, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO46 = PIN(46, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO47 = PIN(47, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO48 = PIN(48, NO_ADC, NO_ADC_CHANNEL, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO49 = PIN(49, ADC_UNIT_2, ADC_CHANNEL_2, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO50 = PIN(50, ADC_UNIT_2, ADC_CHANNEL_3, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO51 = PIN(51, ADC_UNIT_2, ADC_CHANNEL_4, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO52 = PIN(52, ADC_UNIT_2, ADC_CHANNEL_5, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO53 = PIN(53, ADC_UNIT_2, ADC_CHANNEL_6, NO_TOUCH_CHANNEL);
const mcu_pin_obj_t pin_GPIO54 = PIN(54, ADC_UNIT_2, ADC_CHANNEL_7, NO_TOUCH_CHANNEL);

View file

@ -0,0 +1,114 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 microDev
//
// SPDX-License-Identifier: MIT
// DO NOT include this file directly.
// Use shared-bindings/microcontroller/Pin.h instead.
// This ensures that all necessary includes are already included.
#pragma once
#define GPIO0_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO0;
#define GPIO1_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO1;
#define GPIO2_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO2;
#define GPIO3_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO3;
#define GPIO4_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO4;
#define GPIO5_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO5;
#define GPIO6_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO6;
#define GPIO7_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO7;
#define GPIO8_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO8;
#define GPIO9_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO9;
#define GPIO10_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO10;
#define GPIO11_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO11;
#define GPIO12_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO12;
#define GPIO13_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO13;
#define GPIO14_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO14;
#define GPIO15_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO15;
#define GPIO16_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO16;
#define GPIO17_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO17;
#define GPIO18_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO18;
#define GPIO19_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO19;
#define GPIO20_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO20;
#define GPIO21_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO21;
#define GPIO26_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO26;
#define GPIO27_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO27;
#define GPIO28_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO28;
#define GPIO29_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO29;
#define GPIO30_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO30;
#define GPIO31_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO31;
#define GPIO32_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO32;
#define GPIO33_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO33;
#define GPIO34_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO34;
#define GPIO35_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO35;
#define GPIO36_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO36;
#define GPIO37_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO37;
#define GPIO38_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO38;
#define GPIO39_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO39;
#define GPIO40_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO40;
#define GPIO41_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO41;
#define GPIO42_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO42;
#define GPIO43_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO43;
#define GPIO44_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO44;
#define GPIO45_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO45;
#define GPIO46_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO46;
#define GPIO47_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO47;
#define GPIO48_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO48;
#define GPIO49_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO49;
#define GPIO50_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO50;
#define GPIO51_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO51;
#define GPIO52_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO52;
#define GPIO53_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO53;
#define GPIO54_EXISTS 1
extern const mcu_pin_obj_t pin_GPIO54;

View file

@ -52,6 +52,8 @@ extern const mp_obj_type_t mcu_pin_type;
#include "esp32c3/pins.h"
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
#include "esp32c6/pins.h"
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
#include "esp32p4/pins.h"
#elif defined(CONFIG_IDF_TARGET_ESP32H2)
#include "esp32h2/pins.h"
#elif defined(CONFIG_IDF_TARGET_ESP32S2)

View file

@ -57,9 +57,18 @@
#include "soc/lp_aon_reg.h"
#define CP_SAVED_WORD_REGISTER LP_AON_STORE0_REG
#else
#ifdef CONFIG_IDF_TARGET_ESP32P4
#include "soc/lp_system_reg.h"
#define CP_SAVED_WORD_REGISTER LP_SYSTEM_REG_LP_STORE15_REG
#else
// To-do idf v5.0: remove following include
#include "soc/rtc_cntl_reg.h"
#define CP_SAVED_WORD_REGISTER RTC_CNTL_STORE0_REG
#endif
#endif
#include "soc/spi_pins.h"
#include "bootloader_flash_config.h"
@ -238,20 +247,6 @@ safe_mode_t port_init(void) {
common_hal_never_reset_pin(&pin_GPIOn_EXPAND(CONFIG_CONSOLE_UART_RX_GPIO));
#endif
#if DEBUG
// debug UART
#if defined(CONFIG_IDF_TARGET_ESP32C3)
common_hal_never_reset_pin(&pin_GPIO20);
common_hal_never_reset_pin(&pin_GPIO21);
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
common_hal_never_reset_pin(&pin_GPIO16);
common_hal_never_reset_pin(&pin_GPIO17);
#elif defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
common_hal_never_reset_pin(&pin_GPIO43);
common_hal_never_reset_pin(&pin_GPIO44);
#endif
#endif
#ifndef ENABLE_JTAG
#define ENABLE_JTAG (0)
#endif
@ -269,6 +264,11 @@ safe_mode_t port_init(void) {
common_hal_never_reset_pin(&pin_GPIO40);
common_hal_never_reset_pin(&pin_GPIO41);
common_hal_never_reset_pin(&pin_GPIO42);
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
common_hal_never_reset_pin(&pin_GPIO3);
common_hal_never_reset_pin(&pin_GPIO4);
common_hal_never_reset_pin(&pin_GPIO5);
common_hal_never_reset_pin(&pin_GPIO6);
#endif
#endif

View file

@ -46,6 +46,7 @@ static void _copy_out_of_fifo(void) {
for (size_t i = 0; i < len; ++i) {
if (rx_buf[i] == mp_interrupt_char) {
mp_sched_keyboard_interrupt();
ringbuf_clear(&ringbuf);
} else {
ringbuf_put(&ringbuf, rx_buf[i]);
}

View file

@ -38,6 +38,14 @@ internal_memory = {
("Internal SRAM 1", (0x3FC8_0000, 0x4037_8000), 416 * 1024),
("Internal SRAM 2", (0x3FCF_0000,), 64 * 1024),
],
"esp32p4": [
# Name, Start, Length
("RTC Fast Memory", (0x600F_E000,), 8 * 1024),
("RTC Slow Memory", (0x5000_0000,), 8 * 1024),
("Internal SRAM 0", (0x4037_0000,), 32 * 1024),
("Internal SRAM 1", (0x3FC8_0000, 0x4037_8000), 416 * 1024),
("Internal SRAM 2", (0x3FCF_0000,), 64 * 1024),
],
"esp32c2": [
# Name, Start, Length
("Internal SRAM 0", (0x4037_C000,), 16 * 1024),

View file

@ -109,6 +109,19 @@ void common_hal_bleio_characteristic_construct(bleio_characteristic_obj_t *self,
}
}
bool common_hal_bleio_characteristic_deinited(bleio_characteristic_obj_t *self) {
return self->handle == BLE_GATT_HANDLE_INVALID;
}
void common_hal_bleio_characteristic_deinit(bleio_characteristic_obj_t *self) {
if (common_hal_bleio_characteristic_deinited(self)) {
return;
}
self->handle = BLE_GATT_HANDLE_INVALID;
// TODO: Can we remove this from the soft device? Right now we assume the
// reset clears things.
}
mp_obj_tuple_t *common_hal_bleio_characteristic_get_descriptors(bleio_characteristic_obj_t *self) {
if (self->descriptor_list == NULL) {
return mp_const_empty_tuple;

View file

@ -29,6 +29,7 @@ static void write_to_ringbuf(bleio_characteristic_buffer_obj_t *self, uint8_t *d
for (uint16_t i = 0; i < len; i++) {
if (data[i] == mp_interrupt_char) {
mp_sched_keyboard_interrupt();
ringbuf_clear(&self->ringbuf);
} else {
ringbuf_put(&self->ringbuf, data[i]);
}

View file

@ -21,6 +21,7 @@
#include "supervisor/shared/safe_mode.h"
#include "nrfx_glue.h"
#include "nrf_nvic.h"
#include "nrf_power.h"
// This routine should work even when interrupts are disabled. Used by OneWire
// for precise timing.
@ -61,10 +62,14 @@ void common_hal_mcu_enable_interrupts() {
void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
enum { DFU_MAGIC_UF2_RESET = 0x57 };
uint8_t new_value = 0;
if (runmode == RUNMODE_BOOTLOADER || runmode == RUNMODE_UF2) {
sd_power_gpregret_set(0, DFU_MAGIC_UF2_RESET);
} else {
sd_power_gpregret_set(0, 0);
new_value = DFU_MAGIC_UF2_RESET;
}
int err_code = sd_power_gpregret_set(0, DFU_MAGIC_UF2_RESET);
if (err_code != NRF_SUCCESS) {
// Set it without the soft device if the SD failed. (It may be off.)
nrf_power_gpregret_set(NRF_POWER, new_value);
}
if (runmode == RUNMODE_SAFE_MODE) {
safe_mode_on_next_reset(SAFE_MODE_PROGRAMMATIC);

View file

@ -8,8 +8,3 @@ CHIP_PACKAGE = A
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "GD25Q64C,W25Q64JVxQ"
CIRCUITPY_ALARM = 0
CIRCUITPY_FLOPPYIO = 0
CIRCUITPY_PICODVI = 1

View file

@ -8,5 +8,3 @@ CHIP_PACKAGE = A
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
CIRCUITPY_ALARM = 0

View file

@ -10,7 +10,6 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0
# Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SimpleIO

View file

@ -10,7 +10,6 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0
# Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View file

@ -10,4 +10,3 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0

View file

@ -10,4 +10,3 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0

View file

@ -10,4 +10,3 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0

View file

@ -10,4 +10,3 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0

View file

@ -10,4 +10,3 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0

View file

@ -8,5 +8,3 @@ CHIP_PACKAGE = A
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "P25Q16H"
CIRCUITPY_ALARM = 0

View file

@ -10,8 +10,6 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0
CIRCUITPY_PICODVI = 1
FROZEN_MPY_DIRS += $(TOP)/ports/raspberrypi/boards/solderparty_rp2040_stamp
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID

View file

@ -10,8 +10,6 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_ALARM = 0
CIRCUITPY_PICODVI = 1
FROZEN_MPY_DIRS += $(TOP)/ports/raspberrypi/boards/solderparty_rp2040_stamp
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID

View file

@ -8,10 +8,3 @@ CHIP_PACKAGE = A
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
CIRCUITPY_ALARM = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_USB_HOST = 0
CIRCUITPY_FLOPPYIO = 0
CIRCUITPY_PICODVI = 1

View file

@ -0,0 +1,17 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "src/rp2_common/hardware_gpio/include/hardware/gpio.h"
#include "supervisor/shared/board.h"
void reset_board(void) {
// turn off any left over LED
board_reset_user_neopixels(&pin_GPIO0, 58);
}
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,12 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
#define MICROPY_HW_BOARD_NAME "WK-50 Trackball Keyboard"
#define MICROPY_HW_MCU_NAME "rp2040"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO0)

View file

@ -0,0 +1,14 @@
USB_VID = 0x1209
USB_PID = 0x6036
USB_PRODUCT = "WK-50"
USB_MANUFACTURER = "Weekin"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_PICODVI = 1
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
// Put board-specific pico-sdk definitions here. This file must exist.

View file

@ -0,0 +1,38 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_COL13), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_COL12), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_COL11), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_COL10), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_COL9), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_COL8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_COL7), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_COL6), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_ROW1), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_ROW0), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_ENC1), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_ENC0), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_ROW2), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_ROW3), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_XY_NCS), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_XY_SCLK), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_XY_SDIO), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_COL5), MP_ROM_PTR(&pin_GPIO24) },
{ MP_ROM_QSTR(MP_QSTR_COL4), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_COL3), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_COL2), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_COL1), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_COL0), MP_ROM_PTR(&pin_GPIO29) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -5,7 +5,6 @@ CIRCUITPY_OPTIMIZE_PROPERTY_FLASH_SIZE ?= 1
# CYW43 support does not provide settable MAC addresses for station or AP.
CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS = 0
CIRCUITPY_ALARM ?= 1
CIRCUITPY_RP2PIO ?= 1
CIRCUITPY_NEOPIXEL_WRITE ?= $(CIRCUITPY_RP2PIO)
CIRCUITPY_FLOPPYIO ?= 1
@ -47,6 +46,26 @@ CIRCUITPY_AUDIOPWMIO ?= 1
CIRCUITPY_AUDIOMIXER ?= 1
ifeq ($(CHIP_VARIANT),RP2040)
CIRCUITPY_ALARM ?= 1
# Default PICODVI off because it uses RAM to store code run on the second CPU for RP2040.
CIRCUITPY_PICODVI ?= 0
CIRCUITPY_TOUCHIO ?= 1
endif
ifeq ($(CHIP_VARIANT),RP2350)
# This needs to be implemented.
CIRCUITPY_ALARM = 0
# Default PICODVI on because it doesn't require much code in RAM to talk to HSTX.
CIRCUITPY_PICODVI ?= 1
# Our generic touchio uses a pull down and RP2350 A2 hardware doesn't work correctly.
# So, turn touchio off because it doesn't work.
CIRCUITPY_TOUCHIO = 0
endif
INTERNAL_LIBM = 1
CIRCUITPY_BUILD_EXTENSIONS ?= uf2

View file

@ -155,6 +155,13 @@ void common_hal_bleio_characteristic_construct(
}
}
bool common_hal_bleio_characteristic_deinited(bleio_characteristic_obj_t *self) {
return false;
}
void common_hal_bleio_characteristic_deinit(bleio_characteristic_obj_t *self) {
}
// A tuple of Descriptor that describe this characteristic
mp_obj_tuple_t *common_hal_bleio_characteristic_get_descriptors(
bleio_characteristic_obj_t *self) {

View file

@ -773,13 +773,10 @@ void gc_info(gc_info_t *info) {
GC_EXIT();
}
// CIRCUITPY-CHANGE
// CIRCUITPY-CHANGE: C code may be used when the VM heap isn't active. This
// allows that code to test if it is. It can use the outer pool if needed.
bool gc_alloc_possible(void) {
#if MICROPY_GC_SPLIT_HEAP
return MP_STATE_MEM(gc_last_free_area) != 0;
#else
return MP_STATE_MEM(area).gc_pool_start != 0;
#endif
}
void *gc_alloc(size_t n_bytes, unsigned int alloc_flags) {

View file

@ -12,6 +12,8 @@
#include "shared-bindings/_bleio/Characteristic.h"
#include "shared-bindings/_bleio/Service.h"
#include "shared-bindings/_bleio/UUID.h"
#include "shared-bindings/util.h"
//| class Characteristic:
//| """Stores information about a BLE service characteristic and allows reading
@ -138,7 +140,21 @@ static mp_obj_t bleio_characteristic_add_to_service(size_t n_args, const mp_obj_
static MP_DEFINE_CONST_FUN_OBJ_KW(bleio_characteristic_add_to_service_fun_obj, 1, bleio_characteristic_add_to_service);
static MP_DEFINE_CONST_CLASSMETHOD_OBJ(bleio_characteristic_add_to_service_obj, MP_ROM_PTR(&bleio_characteristic_add_to_service_fun_obj));
//| def deinit(self) -> None:
//| """Deinitialises the Characteristic and releases any hardware resources for reuse."""
//| ...
static mp_obj_t bleio_characteristic_deinit(mp_obj_t self_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_bleio_characteristic_deinit(self);
return mp_const_none;
}
static MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_deinit_obj, bleio_characteristic_deinit);
static void check_for_deinit(bleio_characteristic_obj_t *self) {
if (common_hal_bleio_characteristic_deinited(self)) {
raise_deinited_error();
}
}
//| properties: int
//| """An int bitmask representing which properties are set, specified as bitwise or'ing of
@ -146,6 +162,7 @@ static MP_DEFINE_CONST_CLASSMETHOD_OBJ(bleio_characteristic_add_to_service_obj,
//| `BROADCAST`, `INDICATE`, `NOTIFY`, `READ`, `WRITE`, `WRITE_NO_RESPONSE`."""
static mp_obj_t bleio_characteristic_get_properties(mp_obj_t self_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_characteristic_get_properties(self));
}
@ -160,6 +177,7 @@ MP_PROPERTY_GETTER(bleio_characteristic_properties_obj,
//| Will be ``None`` if the 128-bit UUID for this characteristic is not known."""
static mp_obj_t bleio_characteristic_get_uuid(mp_obj_t self_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
bleio_uuid_obj_t *uuid = common_hal_bleio_characteristic_get_uuid(self);
return uuid ? MP_OBJ_FROM_PTR(uuid) : mp_const_none;
@ -173,6 +191,7 @@ MP_PROPERTY_GETTER(bleio_characteristic_uuid_obj,
//| """The value of this characteristic."""
static mp_obj_t bleio_characteristic_get_value(mp_obj_t self_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
uint8_t temp[512];
size_t actual_len = common_hal_bleio_characteristic_get_value(self, temp, sizeof(temp));
@ -182,6 +201,7 @@ static MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_get_value_obj, bleio_chara
static mp_obj_t bleio_characteristic_set_value(mp_obj_t self_in, mp_obj_t value_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(value_in, &bufinfo, MP_BUFFER_READ);
@ -200,6 +220,7 @@ MP_PROPERTY_GETSET(bleio_characteristic_value_obj,
//| """The max length of this characteristic."""
static mp_obj_t bleio_characteristic_get_max_length(mp_obj_t self_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_characteristic_get_max_length(self));
}
@ -212,6 +233,8 @@ MP_PROPERTY_GETTER(bleio_characteristic_max_length_obj,
//| """A tuple of :py:class:`Descriptor` objects related to this characteristic. (read-only)"""
static mp_obj_t bleio_characteristic_get_descriptors(mp_obj_t self_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
// Return list as a tuple so user won't be able to change it.
return MP_OBJ_FROM_PTR(common_hal_bleio_characteristic_get_descriptors(self));
}
@ -225,6 +248,7 @@ MP_PROPERTY_GETTER(bleio_characteristic_descriptors_obj,
//| """The Service this Characteristic is a part of."""
static mp_obj_t bleio_characteristic_get_service(mp_obj_t self_in) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
return common_hal_bleio_characteristic_get_service(self);
}
@ -242,6 +266,7 @@ MP_PROPERTY_GETTER(bleio_characteristic_service_obj,
//| ...
static mp_obj_t bleio_characteristic_set_cccd(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
check_for_deinit(self);
enum { ARG_notify, ARG_indicate };
static const mp_arg_t allowed_args[] = {
@ -259,6 +284,9 @@ static mp_obj_t bleio_characteristic_set_cccd(mp_uint_t n_args, const mp_obj_t *
static MP_DEFINE_CONST_FUN_OBJ_KW(bleio_characteristic_set_cccd_obj, 1, bleio_characteristic_set_cccd);
static const mp_rom_map_elem_t bleio_characteristic_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&bleio_characteristic_deinit_obj) },
{ MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&bleio_characteristic_deinit_obj) },
{ MP_ROM_QSTR(MP_QSTR_add_to_service), MP_ROM_PTR(&bleio_characteristic_add_to_service_obj) },
{ MP_ROM_QSTR(MP_QSTR_descriptors), MP_ROM_PTR(&bleio_characteristic_descriptors_obj) },
{ MP_ROM_QSTR(MP_QSTR_properties), MP_ROM_PTR(&bleio_characteristic_properties_obj) },

View file

@ -24,5 +24,7 @@ extern size_t common_hal_bleio_characteristic_get_max_length(bleio_characteristi
extern size_t common_hal_bleio_characteristic_get_value(bleio_characteristic_obj_t *self, uint8_t *buf, size_t len);
extern void common_hal_bleio_characteristic_add_descriptor(bleio_characteristic_obj_t *self, bleio_descriptor_obj_t *descriptor);
extern void common_hal_bleio_characteristic_construct(bleio_characteristic_obj_t *self, bleio_service_obj_t *service, uint16_t handle, bleio_uuid_obj_t *uuid, bleio_characteristic_properties_t props, bleio_attribute_security_mode_t read_perm, bleio_attribute_security_mode_t write_perm, mp_int_t max_length, bool fixed_length, mp_buffer_info_t *initial_value_bufinfo, const char *user_description);
extern bool common_hal_bleio_characteristic_deinited(bleio_characteristic_obj_t *self);
extern void common_hal_bleio_characteristic_deinit(bleio_characteristic_obj_t *self);
extern void common_hal_bleio_characteristic_set_cccd(bleio_characteristic_obj_t *self, bool notify, bool indicate);
extern void common_hal_bleio_characteristic_set_value(bleio_characteristic_obj_t *self, mp_buffer_info_t *bufinfo);

View file

@ -339,6 +339,10 @@ void supervisor_stop_bluetooth(void) {
ble_started = false;
#if CIRCUITPY_BLE_FILE_SERVICE
supervisor_stop_bluetooth_file_transfer();
#endif
#if CIRCUITPY_SERIAL_BLE
supervisor_stop_bluetooth_serial();
#endif

View file

@ -101,6 +101,13 @@ void supervisor_start_bluetooth_file_transfer(void) {
&static_handler_entry);
}
void supervisor_stop_bluetooth_file_transfer(void) {
common_hal_bleio_packet_buffer_deinit(&_transfer_packet_buffer);
common_hal_bleio_characteristic_deinit(&supervisor_ble_transfer_characteristic);
common_hal_bleio_characteristic_deinit(&supervisor_ble_version_characteristic);
common_hal_bleio_service_deinit(&supervisor_ble_service);
}
#define COMMAND_SIZE 1024
#define ANY_COMMAND 0x00

View file

@ -8,6 +8,8 @@
#include <stdbool.h>
void supervisor_bluetooth_file_transfer_background(void);
void supervisor_start_bluetooth_file_transfer(void);
void supervisor_stop_bluetooth_file_transfer(void);
void supervisor_bluetooth_file_transfer_background(void);
void supervisor_bluetooth_file_transfer_disconnected(void);

View file

@ -148,6 +148,11 @@ void supervisor_stop_bluetooth_serial(void) {
return;
}
common_hal_bleio_packet_buffer_flush(&_tx_packet_buffer);
common_hal_bleio_packet_buffer_deinit(&_tx_packet_buffer);
common_hal_bleio_characteristic_deinit(&supervisor_ble_circuitpython_rx_characteristic);
common_hal_bleio_characteristic_deinit(&supervisor_ble_circuitpython_tx_characteristic);
common_hal_bleio_characteristic_deinit(&supervisor_ble_circuitpython_version_characteristic);
common_hal_bleio_service_deinit(&supervisor_ble_circuitpython_service);
}
bool ble_serial_connected(void) {

View file

@ -155,8 +155,9 @@ static void send_bufn_core(const char *buf, size_t n) {
for (; n--; buf++) {
int code = *buf;
if (code == mp_interrupt_char) {
ringbuf_clear(&_incoming_ringbuf);
mp_sched_keyboard_interrupt();
return;
continue;
}
if (ringbuf_num_empty(&_incoming_ringbuf) == 0) {
// Drop on the floor

View file

@ -227,6 +227,7 @@ void websocket_background(void) {
while (ringbuf_num_empty(&_incoming_ringbuf) > 0 &&
_read_next_payload_byte(&c)) {
if (c == mp_interrupt_char) {
ringbuf_clear(&_incoming_ringbuf);
mp_sched_keyboard_interrupt();
continue;
}

View file

@ -98,7 +98,7 @@ def check_vid_pid(files, clusterlist):
"""
usb_pattern = re.compile(
r"^CIRCUITPY_USB_DEVICE\s*=\s*0$|^IDF_TARGET = (esp32|esp32c2|esp32c3|esp32c6|esp32h2)$|^MCU_SERIES = MG24$",
r"^CIRCUITPY_USB_DEVICE\s*=\s*0$|^IDF_TARGET = (esp32|esp32c2|esp32c3|esp32c6|esp32h2|esp32p4)$|^MCU_SERIES = MG24$",
flags=re.M,
)