From 1c4cdfe4b75a75cfd841c48a6bf63f52bf59855e Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Thu, 9 May 2024 17:45:01 +0800 Subject: [PATCH 01/17] fix(brownout): fixed brownout isr crashing if cache disabled If a brownout ISR was triggered while cache was disabled the system would panic. This was due to a print accessing a string stored in flash --- components/esp_system/port/brownout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_system/port/brownout.c b/components/esp_system/port/brownout.c index 568e1044ddec..98724fb6c994 100644 --- a/components/esp_system/port/brownout.c +++ b/components/esp_system/port/brownout.c @@ -28,7 +28,7 @@ #define BROWNOUT_DET_LVL 0 #endif -static __attribute__((unused)) DRAM_ATTR const char *TAG = "BOD"; +static __attribute__((unused)) DRAM_ATTR const char TAG[] = "BOD"; #if CONFIG_ESP_SYSTEM_BROWNOUT_INTR IRAM_ATTR static void rtc_brownout_isr_handler(void *arg) From 7158afb1630582234cb012b9ad15ef41949b276f Mon Sep 17 00:00:00 2001 From: WanqQixiang Date: Fri, 28 Jun 2024 15:59:30 +0800 Subject: [PATCH 02/17] fix(openthread): register uart vfs devices when they are not registered --- .../openthread/src/port/esp_openthread_uart.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/components/openthread/src/port/esp_openthread_uart.c b/components/openthread/src/port/esp_openthread_uart.c index 9c8ef64cde6d..ba532af6962b 100644 --- a/components/openthread/src/port/esp_openthread_uart.c +++ b/components/openthread/src/port/esp_openthread_uart.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -61,6 +61,16 @@ otError otPlatUartSend(const uint8_t *buf, uint16_t buf_length) esp_err_t esp_openthread_uart_init_port(const esp_openthread_uart_config_t *config) { +#ifndef CONFIG_ESP_CONSOLE_UART + // If UART console is used, UART vfs devices should be registered during startup. + // Otherwise we need to register them here. + DIR *uart_dir = opendir("/dev/uart"); + if (!uart_dir) { + esp_vfs_dev_uart_register(); + } else { + closedir(uart_dir); + } +#endif ESP_RETURN_ON_ERROR(uart_param_config(config->port, &config->uart_config), OT_PLAT_LOG_TAG, "uart_param_config failed"); ESP_RETURN_ON_ERROR( @@ -90,7 +100,6 @@ esp_err_t esp_openthread_host_cli_usb_init(const esp_openthread_platform_config_ ret = usb_serial_jtag_driver_install((usb_serial_jtag_driver_config_t *)&config->host_config.host_usb_config); esp_vfs_usb_serial_jtag_use_driver(); - esp_vfs_dev_uart_register(); return ret; } #endif From faae7eccac54055cfd3e43114144077f285e8938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20M=C3=BAdry?= Date: Mon, 29 Jan 2024 10:19:22 +0100 Subject: [PATCH 03/17] fix: PRI inttypes error due to C++ invalid suffix on literal in SPIFFS --- components/spiffs/include/spiffs_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/spiffs/include/spiffs_config.h b/components/spiffs/include/spiffs_config.h index b245a5d1b54e..3281619256ba 100644 --- a/components/spiffs/include/spiffs_config.h +++ b/components/spiffs/include/spiffs_config.h @@ -71,7 +71,7 @@ extern void spiffs_api_unlock(struct spiffs_t *fs); // Defines spiffs debug print formatters // some general signed number -#define _SPIPRIi "%"PRIdMAX +#define _SPIPRIi "%" PRIdMAX // address #define _SPIPRIad "%08x" // block From bf7ab2249cc286049e158f7fa4b9cd2b9b01d2ac Mon Sep 17 00:00:00 2001 From: Myk Melez Date: Wed, 26 Jun 2024 15:34:23 -0700 Subject: [PATCH 04/17] fix(pthread): Remove TLS pointer/deletion callback from correct thread Originally, pthread_internal_local_storage_destructor_callback was only called from pthread_exit on the thread whose TLS is being destroyed. In b3755b751ed42d98c933a919c744dc6455f5ee68, pthread_internal_local_storage_destructor_callback started being called from pthread_join and pthread_detach on a different thread (whichever one called one of those functions). But pthread_internal_local_storage_destructor_callback is still calling vTaskSetThreadLocalStoragePointer and vTaskSetThreadLocalStoragePointerAndDelCallback with a NULL xTaskToSet argument, which causes those functions to set the TLS pointer and deletion callback for the current thread, not the thread whose TLS is being destroyed. This commit makes pthread_internal_local_storage_destructor_callback call vTaskSetThreadLocalStoragePointer and vTaskSetThreadLocalStoragePointerAndDelCallback with the handle of the thread whose TLS is being destroyed. --- components/pthread/pthread_local_storage.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/components/pthread/pthread_local_storage.c b/components/pthread/pthread_local_storage.c index abb547675bda..8d015813ee98 100644 --- a/components/pthread/pthread_local_storage.c +++ b/components/pthread/pthread_local_storage.c @@ -147,7 +147,9 @@ static void pthread_cleanup_thread_specific_data_callback(int index, void *v_tls free(tls); } -/* this function called from pthread_task_func for "early" cleanup of TLS in a pthread */ +/* this function called from pthread_task_func for "early" cleanup of TLS in a pthread + and from pthread_join/pthread_detach for cleanup of TLS after pthread exit +*/ void pthread_internal_local_storage_destructor_callback(TaskHandle_t handle) { void *tls = pvTaskGetThreadLocalStoragePointer(handle, PTHREAD_TLS_INDEX); @@ -157,9 +159,9 @@ void pthread_internal_local_storage_destructor_callback(TaskHandle_t handle) calling it again... */ #if !defined(CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS) - vTaskSetThreadLocalStoragePointer(NULL, PTHREAD_TLS_INDEX, NULL); + vTaskSetThreadLocalStoragePointer(handle, PTHREAD_TLS_INDEX, NULL); #else - vTaskSetThreadLocalStoragePointerAndDelCallback(NULL, + vTaskSetThreadLocalStoragePointerAndDelCallback(handle, PTHREAD_TLS_INDEX, NULL, NULL); From f3b58d221d915f2eae0d4455b9f5458221b7598c Mon Sep 17 00:00:00 2001 From: zwl Date: Wed, 26 Jun 2024 12:23:42 +0800 Subject: [PATCH 05/17] fix(ble): fixed some ble controller issues on ESP32-C2 --- components/bt/controller/lib_esp32c2/esp32c2-bt-lib | 2 +- components/esp_rom/esp32c2/ld/esp32c2.rom.ld | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/components/bt/controller/lib_esp32c2/esp32c2-bt-lib b/components/bt/controller/lib_esp32c2/esp32c2-bt-lib index 8ddd8acac498..e597ae529761 160000 --- a/components/bt/controller/lib_esp32c2/esp32c2-bt-lib +++ b/components/bt/controller/lib_esp32c2/esp32c2-bt-lib @@ -1 +1 @@ -Subproject commit 8ddd8acac498fcbb76b5a39c5c7d4025238298ab +Subproject commit e597ae529761d270f10d0616c375faa0e4b7ca13 diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index a3ac43639a71..2b58e7ac87f4 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -1048,7 +1048,6 @@ r_ble_lll_adv_coex_dpc_update_on_event_scheduled = 0x40001418; r_ble_lll_adv_done = 0x4000141c; r_ble_lll_adv_event_done = 0x40001424; r_ble_lll_adv_event_rmvd_from_sched = 0x40001428; -r_ble_lll_adv_ext_estimate_data_itvl = 0x4000142c; r_ble_lll_adv_get_sec_pdu_len = 0x40001430; r_ble_lll_adv_make_done = 0x40001438; r_ble_lll_adv_periodic_done = 0x4000143c; From b7534381117eba13db53c346b4dbe35af946622e Mon Sep 17 00:00:00 2001 From: zwl Date: Tue, 2 Jul 2024 15:09:51 +0800 Subject: [PATCH 06/17] fix(ble): fixed some ble controller issues on ESP32C6 and ESP32H2 --- components/bt/controller/lib_esp32c6/esp32c6-bt-lib | 2 +- components/bt/controller/lib_esp32h2/esp32h2-bt-lib | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/bt/controller/lib_esp32c6/esp32c6-bt-lib b/components/bt/controller/lib_esp32c6/esp32c6-bt-lib index ed6c0b4e0ab3..4a63b2963a8a 160000 --- a/components/bt/controller/lib_esp32c6/esp32c6-bt-lib +++ b/components/bt/controller/lib_esp32c6/esp32c6-bt-lib @@ -1 +1 @@ -Subproject commit ed6c0b4e0ab3b8ddce5d8bc65e417b1adcbca5b4 +Subproject commit 4a63b2963a8a75958db680df4ace64bbd3d6c618 diff --git a/components/bt/controller/lib_esp32h2/esp32h2-bt-lib b/components/bt/controller/lib_esp32h2/esp32h2-bt-lib index 2d69367e13a9..96b48749e249 160000 --- a/components/bt/controller/lib_esp32h2/esp32h2-bt-lib +++ b/components/bt/controller/lib_esp32h2/esp32h2-bt-lib @@ -1 +1 @@ -Subproject commit 2d69367e13a928afb73d1a8c579c0dad98eb9393 +Subproject commit 96b48749e249d0752f196007b008212cb8b28e07 From 9c7a81083c69b8afb9deb9b5fa3f1034bfa4c630 Mon Sep 17 00:00:00 2001 From: luoxu Date: Tue, 28 May 2024 17:52:36 +0800 Subject: [PATCH 07/17] feat(ble_mesh): add cas operation for bt_mesh_atomic_val_t --- components/bt/esp_ble_mesh/common/atomic.c | 19 ++++++++++++- .../esp_ble_mesh/common/include/mesh/atomic.h | 27 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/components/bt/esp_ble_mesh/common/atomic.c b/components/bt/esp_ble_mesh/common/atomic.c index 723ce7e3ac15..40f163ab4511 100644 --- a/components/bt/esp_ble_mesh/common/atomic.c +++ b/components/bt/esp_ble_mesh/common/atomic.c @@ -13,7 +13,7 @@ /* * SPDX-FileCopyrightText: 2016 Intel Corporation * SPDX-FileCopyrightText: 2011-2014 Wind River Systems, Inc. - * SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -170,4 +170,21 @@ bt_mesh_atomic_val_t bt_mesh_atomic_inc(bt_mesh_atomic_t *target) return ret; } +bool bt_mesh_atomic_campare_and_set(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val) +{ + bt_mesh_atomic_val_t ret = 0; + + bt_mesh_atomic_lock(); + + ret = *target; + if (*target == excepted) { + *target = new_val; + bt_mesh_atomic_unlock(); + return true; + } + + bt_mesh_atomic_unlock(); + return false; +} + #endif /* #ifndef CONFIG_ATOMIC_OPERATIONS_BUILTIN */ diff --git a/components/bt/esp_ble_mesh/common/include/mesh/atomic.h b/components/bt/esp_ble_mesh/common/include/mesh/atomic.h index f72834369fc5..c6ef0fc5ae00 100644 --- a/components/bt/esp_ble_mesh/common/include/mesh/atomic.h +++ b/components/bt/esp_ble_mesh/common/include/mesh/atomic.h @@ -147,6 +147,33 @@ static inline bt_mesh_atomic_val_t bt_mesh_atomic_and(bt_mesh_atomic_t *target, extern bt_mesh_atomic_val_t bt_mesh_atomic_and(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t value); #endif +/** + * @brief Atomic CAS operation. + * + * This compares the contents of @a *target + * with the contents of @a excepted. If equal, + * the operation is a read-modify-write operation + * that writes @a new_val into @a *target and return true. + * If they are not equal, the operation is a read + * and return false. + * + * @param target Address of atomic variable. + * @param excepted Value of excepted. + * @param new_val Write value if compare sunncess. + * + * @return + * - true: write operation succeeded. + * - false: write operation failed. + */ +#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN +static inline bool bt_mesh_atomic_campare_and_set(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val) +{ + return __atomic_compare_exchange_n(target, &excepted, &new_val, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); +} +#else +extern bool bt_mesh_atomic_campare_and_set(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val); +#endif + /** * @cond INTERNAL_HIDDEN */ From f5ae03e8f4374808f9aa36912e17289c85b0f346 Mon Sep 17 00:00:00 2001 From: luoxu Date: Tue, 28 May 2024 18:02:46 +0800 Subject: [PATCH 08/17] fix(ble_mesh): ensure the operation of adv busy is thread-safe --- components/bt/esp_ble_mesh/common/atomic.c | 5 +---- .../esp_ble_mesh/common/include/mesh/atomic.h | 10 +++++----- components/bt/esp_ble_mesh/core/adv.c | 18 +++++++++--------- components/bt/esp_ble_mesh/core/adv.h | 8 ++++++-- components/bt/esp_ble_mesh/core/friend.c | 2 +- components/bt/esp_ble_mesh/core/prov_common.c | 4 ++-- components/bt/esp_ble_mesh/core/transport.c | 14 +++++++++++--- .../bt/esp_ble_mesh/core/transport.enh.c | 6 +++--- 8 files changed, 38 insertions(+), 29 deletions(-) diff --git a/components/bt/esp_ble_mesh/common/atomic.c b/components/bt/esp_ble_mesh/common/atomic.c index 40f163ab4511..9c856cc33723 100644 --- a/components/bt/esp_ble_mesh/common/atomic.c +++ b/components/bt/esp_ble_mesh/common/atomic.c @@ -170,13 +170,10 @@ bt_mesh_atomic_val_t bt_mesh_atomic_inc(bt_mesh_atomic_t *target) return ret; } -bool bt_mesh_atomic_campare_and_set(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val) +bool bt_mesh_atomic_cas(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val) { - bt_mesh_atomic_val_t ret = 0; - bt_mesh_atomic_lock(); - ret = *target; if (*target == excepted) { *target = new_val; bt_mesh_atomic_unlock(); diff --git a/components/bt/esp_ble_mesh/common/include/mesh/atomic.h b/components/bt/esp_ble_mesh/common/include/mesh/atomic.h index c6ef0fc5ae00..b284974363a3 100644 --- a/components/bt/esp_ble_mesh/common/include/mesh/atomic.h +++ b/components/bt/esp_ble_mesh/common/include/mesh/atomic.h @@ -159,19 +159,19 @@ extern bt_mesh_atomic_val_t bt_mesh_atomic_and(bt_mesh_atomic_t *target, bt_mesh * * @param target Address of atomic variable. * @param excepted Value of excepted. - * @param new_val Write value if compare sunncess. + * @param new_val Write if target value is equal to expected one. * * @return - * - true: write operation succeeded. - * - false: write operation failed. + * - true: Target value updated. + * - false: Target value not updated. */ #ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN -static inline bool bt_mesh_atomic_campare_and_set(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val) +static inline bool bt_mesh_atomic_cas(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val) { return __atomic_compare_exchange_n(target, &excepted, &new_val, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } #else -extern bool bt_mesh_atomic_campare_and_set(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val); +extern bool bt_mesh_atomic_cas(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val); #endif /** diff --git a/components/bt/esp_ble_mesh/core/adv.c b/components/bt/esp_ble_mesh/core/adv.c index dbbda0ab147f..79932a058299 100644 --- a/components/bt/esp_ble_mesh/core/adv.c +++ b/components/bt/esp_ble_mesh/core/adv.c @@ -2,7 +2,7 @@ /* * SPDX-FileCopyrightText: 2017 Intel Corporation - * SPDX-FileContributor: 2018-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -335,8 +335,7 @@ static void adv_thread(void *p) } /* busy == 0 means this was canceled */ - if (BLE_MESH_ADV(*buf)->busy) { - BLE_MESH_ADV(*buf)->busy = 0U; + if (bt_mesh_atomic_cas(&BLE_MESH_ADV_BUSY(*buf), 1, 0)) { #if !CONFIG_BLE_MESH_RELAY_ADV_BUF if (adv_send(*buf)) { BT_WARN("Failed to send adv packet"); @@ -449,7 +448,7 @@ static void bt_mesh_unref_buf(bt_mesh_msg_t *msg) if (msg->arg) { buf = (struct net_buf *)msg->arg; - BLE_MESH_ADV(buf)->busy = 0U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(buf), 0); if (buf->ref > 1U) { buf->ref = 1U; } @@ -490,7 +489,7 @@ void bt_mesh_adv_send(struct net_buf *buf, uint8_t xmit, BLE_MESH_ADV(buf)->cb = cb; BLE_MESH_ADV(buf)->cb_data = cb_data; - BLE_MESH_ADV(buf)->busy = 1U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(buf), 1); BLE_MESH_ADV(buf)->xmit = xmit; bt_mesh_adv_buf_ref_debug(__func__, buf, 3U, BLE_MESH_BUF_REF_SMALL); @@ -589,7 +588,7 @@ void bt_mesh_relay_adv_send(struct net_buf *buf, uint8_t xmit, BLE_MESH_ADV(buf)->cb = cb; BLE_MESH_ADV(buf)->cb_data = cb_data; - BLE_MESH_ADV(buf)->busy = 1U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(buf), 1); BLE_MESH_ADV(buf)->xmit = xmit; msg.arg = (void *)net_buf_ref(buf); @@ -753,7 +752,7 @@ static void bt_mesh_ble_adv_send(struct net_buf *buf, const struct bt_mesh_send_ BLE_MESH_ADV(buf)->cb = cb; BLE_MESH_ADV(buf)->cb_data = cb_data; - BLE_MESH_ADV(buf)->busy = 1U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(buf), 1); bt_mesh_adv_buf_ref_debug(__func__, buf, 3U, BLE_MESH_BUF_REF_SMALL); @@ -772,7 +771,7 @@ static void ble_adv_tx_reset(struct ble_adv_tx *tx, bool unref) } bt_mesh_atomic_set(tx->flags, 0); memset(&tx->param, 0, sizeof(tx->param)); - BLE_MESH_ADV(tx->buf)->busy = 0U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(tx->buf), 0); if (unref) { net_buf_unref(tx->buf); } @@ -961,7 +960,8 @@ int bt_mesh_stop_ble_advertising(uint8_t index) /* busy 1, ref 1; busy 1, ref 2; * busy 0, ref 0; busy 0, ref 1; */ - if (BLE_MESH_ADV(tx->buf)->busy == 1U && + + if (bt_mesh_atomic_get(&BLE_MESH_ADV_BUSY(tx->buf)) && tx->buf->ref == 1U) { unref = false; } diff --git a/components/bt/esp_ble_mesh/core/adv.h b/components/bt/esp_ble_mesh/core/adv.h index ab37ec3cda85..33224d78b111 100644 --- a/components/bt/esp_ble_mesh/core/adv.h +++ b/components/bt/esp_ble_mesh/core/adv.h @@ -10,6 +10,7 @@ #ifndef _ADV_H_ #define _ADV_H_ +#include "mesh/atomic.h" #include "mesh/access.h" #include "mesh/adapter.h" @@ -24,6 +25,7 @@ extern "C" { #define BLE_MESH_ADV_USER_DATA_SIZE 4 #define BLE_MESH_ADV(buf) (*(struct bt_mesh_adv **)net_buf_user_data(buf)) +#define BLE_MESH_ADV_BUSY(buf) (BLE_MESH_ADV(buf)->busy) uint16_t bt_mesh_pdu_duration(uint8_t xmit); @@ -48,8 +50,10 @@ struct bt_mesh_adv { const struct bt_mesh_send_cb *cb; void *cb_data; - uint8_t type:3, - busy:1; + uint8_t type:3; + + bt_mesh_atomic_t busy; + uint8_t xmit; }; diff --git a/components/bt/esp_ble_mesh/core/friend.c b/components/bt/esp_ble_mesh/core/friend.c index fca3cf1358a4..b1a298d5a97a 100644 --- a/components/bt/esp_ble_mesh/core/friend.c +++ b/components/bt/esp_ble_mesh/core/friend.c @@ -183,7 +183,7 @@ static void friend_clear(struct bt_mesh_friend *frnd, uint8_t reason) /* Cancel the sending if necessary */ if (frnd->pending_buf) { bt_mesh_adv_buf_ref_debug(__func__, frnd->last, 2U, BLE_MESH_BUF_REF_EQUAL); - BLE_MESH_ADV(frnd->last)->busy = 0U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(frnd->last), 0); } else { bt_mesh_adv_buf_ref_debug(__func__, frnd->last, 1U, BLE_MESH_BUF_REF_EQUAL); } diff --git a/components/bt/esp_ble_mesh/core/prov_common.c b/components/bt/esp_ble_mesh/core/prov_common.c index 655c4712f244..bc75b447d256 100644 --- a/components/bt/esp_ble_mesh/core/prov_common.c +++ b/components/bt/esp_ble_mesh/core/prov_common.c @@ -359,7 +359,7 @@ static void free_segments(struct bt_mesh_prov_link *link) link->tx.buf[i] = NULL; bt_mesh_adv_buf_ref_debug(__func__, buf, 3U, BLE_MESH_BUF_REF_SMALL); /* Mark as canceled */ - BLE_MESH_ADV(buf)->busy = 0U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(buf), 0); net_buf_unref(buf); } } @@ -474,7 +474,7 @@ static void prov_retransmit(struct k_work *work) break; } - if (BLE_MESH_ADV(buf)->busy) { + if (bt_mesh_atomic_get(&BLE_MESH_ADV_BUSY(buf))) { continue; } diff --git a/components/bt/esp_ble_mesh/core/transport.c b/components/bt/esp_ble_mesh/core/transport.c index 64ac566aced5..70589706dae3 100644 --- a/components/bt/esp_ble_mesh/core/transport.c +++ b/components/bt/esp_ble_mesh/core/transport.c @@ -2,7 +2,7 @@ /* * SPDX-FileCopyrightText: 2017 Intel Corporation - * SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -310,7 +310,15 @@ static void seg_tx_done(struct seg_tx *tx, uint8_t seg_idx) { bt_mesh_adv_buf_ref_debug(__func__, tx->seg[seg_idx], 3U, BLE_MESH_BUF_REF_SMALL); - BLE_MESH_ADV(tx->seg[seg_idx])->busy = 0U; + /** + * When cancelling a segment that is still in the adv sending queue, `tx->seg_pending` + * must else be decremented by one. More detailed information + * can be found in BLEMESH24-26. + */ + if (bt_mesh_atomic_cas(&BLE_MESH_ADV_BUSY(tx->seg[seg_idx]), 1, 0)) { + tx->seg_pending--; + } + net_buf_unref(tx->seg[seg_idx]); tx->seg[seg_idx] = NULL; tx->nack_count--; @@ -443,7 +451,7 @@ static void seg_tx_send_unacked(struct seg_tx *tx) continue; } - if (BLE_MESH_ADV(seg)->busy) { + if (bt_mesh_atomic_get(&BLE_MESH_ADV_BUSY(seg))) { BT_DBG("Skipping segment that's still advertising"); continue; } diff --git a/components/bt/esp_ble_mesh/core/transport.enh.c b/components/bt/esp_ble_mesh/core/transport.enh.c index 6ef6c0a55db3..a4a5130e2150 100644 --- a/components/bt/esp_ble_mesh/core/transport.enh.c +++ b/components/bt/esp_ble_mesh/core/transport.enh.c @@ -350,7 +350,7 @@ static void seg_tx_done(struct seg_tx *tx, uint8_t seg_idx) */ bt_mesh_adv_buf_ref_debug(__func__, tx->seg[seg_idx], 4U, BLE_MESH_BUF_REF_SMALL); - BLE_MESH_ADV(tx->seg[seg_idx])->busy = 0U; + bt_mesh_atomic_set(&BLE_MESH_ADV_BUSY(tx->seg[seg_idx]), 0); net_buf_unref(tx->seg[seg_idx]); tx->seg[seg_idx] = NULL; @@ -498,7 +498,7 @@ static bool send_next_segment(struct seg_tx *tx, int *result) /* The segment may have already been transmitted, for example, the * Segment Retransmission timer is expired earlier. */ - if (BLE_MESH_ADV(seg)->busy) { + if (bt_mesh_atomic_get(&BLE_MESH_ADV_BUSY(seg))) { return false; } @@ -768,7 +768,7 @@ static bool resend_unacked_seg(struct seg_tx *tx, int *result) * A is still going to be retransmitted, but at this moment we could * find that the "busy" flag of Segment A is 1. */ - if (BLE_MESH_ADV(seg)->busy) { + if (bt_mesh_atomic_get(&BLE_MESH_ADV_BUSY(seg))) { return false; } From 34abdaea46ef44c585d1c66772cd336eac618df1 Mon Sep 17 00:00:00 2001 From: Cao Sen Miao Date: Thu, 11 Apr 2024 15:52:54 +0800 Subject: [PATCH 09/17] fix(i2c_master): Modify the behavior from ISR WDT to return timeout when circut get shortcut, Closes https://github.com/espressif/esp-idf/issues/13587 --- components/driver/i2c/i2c_master.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/driver/i2c/i2c_master.c b/components/driver/i2c/i2c_master.c index 13954c805d01..89036d172a7a 100644 --- a/components/driver/i2c/i2c_master.c +++ b/components/driver/i2c/i2c_master.c @@ -424,7 +424,7 @@ static void s_i2c_send_commands(i2c_master_bus_handle_t i2c_master, TickType_t t }; i2c_ll_master_write_cmd_reg(hal->dev, hw_stop_cmd, 0); i2c_hal_master_trans_start(hal); - return; + break; } i2c_operation_t *i2c_operation = &i2c_master->i2c_trans.ops[i2c_master->trans_idx]; @@ -563,7 +563,6 @@ static esp_err_t s_i2c_transaction_start(i2c_master_dev_handle_t i2c_dev, int xf IRAM_ATTR static void i2c_isr_receive_handler(i2c_master_bus_t *i2c_master) { i2c_hal_context_t *hal = &i2c_master->base->hal; - while(i2c_ll_is_bus_busy(hal->dev)){} if (i2c_master->status == I2C_STATUS_READ) { i2c_operation_t *i2c_operation = &i2c_master->i2c_trans.ops[i2c_master->trans_idx]; portENTER_CRITICAL_ISR(&i2c_master->base->spinlock); @@ -624,7 +623,9 @@ static void IRAM_ATTR i2c_master_isr_handler_default(void *arg) xQueueSendFromISR(i2c_master->event_queue, (void *)&i2c_master->event, &HPTaskAwoken); } if (i2c_master->contains_read == true) { - i2c_isr_receive_handler(i2c_master); + if (int_mask & I2C_LL_INTR_MST_COMPLETE || int_mask & I2C_LL_INTR_END_DETECT) { + i2c_isr_receive_handler(i2c_master); + } } if (i2c_master->async_trans) { From 5847ba0b9af96b0598aaa41406fc37e049ca0f28 Mon Sep 17 00:00:00 2001 From: Cao Sen Miao Date: Fri, 12 Apr 2024 11:46:36 +0800 Subject: [PATCH 10/17] fix(i2c_master): Fix the issue that probe cannot work properly after a general call, Closes https://github.com/espressif/esp-idf/issues/13547 --- components/driver/i2c/i2c_master.c | 19 ++++++++++ components/driver/i2c/i2c_private.h | 3 +- .../i2c_test_apps/main/test_i2c_common.c | 35 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/components/driver/i2c/i2c_master.c b/components/driver/i2c/i2c_master.c index 89036d172a7a..21060fa0fbb1 100644 --- a/components/driver/i2c/i2c_master.c +++ b/components/driver/i2c/i2c_master.c @@ -107,6 +107,18 @@ static esp_err_t s_i2c_hw_fsm_reset(i2c_master_bus_handle_t i2c_master) return ESP_OK; } +static void s_i2c_err_log_print(i2c_master_event_t event, bool bypass_nack_log) +{ + if (event == I2C_EVENT_TIMEOUT) { + ESP_LOGE(TAG, "I2C transaction timeout detected"); + } + if (bypass_nack_log != true) { + if (event == I2C_EVENT_NACK) { + ESP_LOGE(TAG, "I2C transaction unexpected nack detected"); + } + } +} + //////////////////////////////////////I2C operation functions//////////////////////////////////////////// /** * @brief This function is used to send I2C write command, which is divided in two parts. @@ -405,6 +417,7 @@ static void s_i2c_send_commands(i2c_master_bus_handle_t i2c_master, TickType_t t // Software timeout, clear the command link and finish this transaction. i2c_master->cmd_idx = 0; i2c_master->trans_idx = 0; + atomic_store(&i2c_master->status, I2C_STATUS_TIMEOUT); return; } @@ -424,6 +437,8 @@ static void s_i2c_send_commands(i2c_master_bus_handle_t i2c_master, TickType_t t }; i2c_ll_master_write_cmd_reg(hal->dev, hw_stop_cmd, 0); i2c_hal_master_trans_start(hal); + // The master trans start would start a transaction. + // Queue wait for the event instead of return directly. break; } @@ -446,6 +461,7 @@ static void s_i2c_send_commands(i2c_master_bus_handle_t i2c_master, TickType_t t if (event == I2C_EVENT_DONE) { atomic_store(&i2c_master->status, I2C_STATUS_DONE); } + s_i2c_err_log_print(event, i2c_master->bypass_nack_log); } else { i2c_master->cmd_idx = 0; i2c_master->trans_idx = 0; @@ -1093,6 +1109,8 @@ esp_err_t i2c_master_probe(i2c_master_bus_handle_t bus_handle, uint16_t address, bus_handle->cmd_idx = 0; bus_handle->trans_idx = 0; bus_handle->trans_done = false; + bus_handle->status = I2C_STATUS_IDLE; + bus_handle->bypass_nack_log = true; i2c_hal_context_t *hal = &bus_handle->base->hal; i2c_operation_t i2c_ops[] = { {.hw_cmd = I2C_TRANS_START_COMMAND}, @@ -1122,6 +1140,7 @@ esp_err_t i2c_master_probe(i2c_master_bus_handle_t bus_handle, uint16_t address, // Reset the status to done, in order not influence next time transaction. bus_handle->status = I2C_STATUS_DONE; + bus_handle->bypass_nack_log = false; i2c_ll_disable_intr_mask(hal->dev, I2C_LL_MASTER_EVENT_INTR); xSemaphoreGive(bus_handle->bus_lock_mux); return ret; diff --git a/components/driver/i2c/i2c_private.h b/components/driver/i2c/i2c_private.h index fde194dacbf1..8d09ccdf7b4c 100644 --- a/components/driver/i2c/i2c_private.h +++ b/components/driver/i2c/i2c_private.h @@ -126,7 +126,8 @@ struct i2c_master_bus_t { bool trans_over_buffer; // Data length is more than hardware fifo length, needs interrupt. bool async_trans; // asynchronous transaction, true after callback is installed. bool ack_check_disable; // Disable ACK check - volatile bool trans_done; // transaction command finish + volatile bool trans_done; // transaction command finish + bool bypass_nack_log; // Bypass the error log. Sometimes the error is expected. SLIST_HEAD(i2c_master_device_list_head, i2c_master_device_list) device_list; // I2C device (instance) list // asnyc trans members bool async_break; // break transaction loop flag. diff --git a/components/driver/test_apps/i2c_test_apps/main/test_i2c_common.c b/components/driver/test_apps/i2c_test_apps/main/test_i2c_common.c index b3e5a15e6fe3..53ad7f4326fe 100644 --- a/components/driver/test_apps/i2c_test_apps/main/test_i2c_common.c +++ b/components/driver/test_apps/i2c_test_apps/main/test_i2c_common.c @@ -167,6 +167,41 @@ TEST_CASE("I2C master probe device test", "[i2c]") TEST_ESP_OK(i2c_del_master_bus(bus_handle)); } +TEST_CASE("probe test after general call (0x00 0x06)", "[i2c]") +{ + uint8_t data_wr[1] = { 0x06 }; + + i2c_master_bus_config_t i2c_mst_config = { + .clk_source = I2C_CLK_SRC_DEFAULT, + .i2c_port = TEST_I2C_PORT, + .scl_io_num = I2C_MASTER_SCL_IO, + .sda_io_num = I2C_MASTER_SDA_IO, + .flags.enable_internal_pullup = true, + }; + i2c_master_bus_handle_t bus_handle; + + TEST_ESP_OK(i2c_new_master_bus(&i2c_mst_config, &bus_handle)); + + i2c_device_config_t dev_cfg1 = { + .dev_addr_length = I2C_ADDR_BIT_LEN_7, + .device_address = 0x00, + .scl_speed_hz = 100000, + }; + + i2c_master_dev_handle_t dev_handle1; + TEST_ESP_OK(i2c_master_bus_add_device(bus_handle, &dev_cfg1, &dev_handle1)); + + TEST_ESP_ERR(ESP_ERR_INVALID_STATE, i2c_master_transmit(dev_handle1, data_wr, 1, 200)); + + for (int i = 1; i < 0x7f; i++) { + TEST_ESP_ERR(ESP_ERR_NOT_FOUND, i2c_master_probe(bus_handle, i, 800)); + } + + TEST_ESP_OK(i2c_master_bus_rm_device(dev_handle1)); + + TEST_ESP_OK(i2c_del_master_bus(bus_handle)); +} + #define LENGTH 48 static IRAM_ATTR bool test_master_tx_done_callback(i2c_master_dev_handle_t i2c_dev, const i2c_master_event_data_t *evt_data, void *arg) From a44f8179deceab455b8ae2f7002c9c8e295776ea Mon Sep 17 00:00:00 2001 From: Cao Sen Miao Date: Thu, 26 Oct 2023 14:04:00 +0800 Subject: [PATCH 11/17] refactor(i2c): Add reset and clock control to i2c ll layer --- components/driver/i2c/i2c.c | 43 +++++++++++++++---- components/driver/i2c/i2c_common.c | 16 ++++--- components/driver/i2c/i2c_master.c | 16 +++++-- components/driver/i2c/i2c_private.h | 13 ++++++ components/driver/i2c/i2c_slave.c | 4 +- components/hal/esp32/include/hal/i2c_ll.h | 46 +++++++++++++++++++++ components/hal/esp32c2/include/hal/i2c_ll.h | 33 +++++++++++++++ components/hal/esp32c3/include/hal/i2c_ll.h | 33 +++++++++++++++ components/hal/esp32c6/include/hal/i2c_ll.h | 24 +++++++++++ components/hal/esp32h2/include/hal/i2c_ll.h | 22 ++++++++++ components/hal/esp32p4/include/hal/i2c_ll.h | 45 +++++++++++++++++++- components/hal/esp32s2/include/hal/i2c_ll.h | 46 +++++++++++++++++++++ components/hal/esp32s3/include/hal/i2c_ll.h | 41 ++++++++++++++++++ components/hal/i2c_hal.c | 7 ++-- components/hal/include/hal/i2c_hal.h | 30 ++++++++++++-- 15 files changed, 392 insertions(+), 27 deletions(-) diff --git a/components/driver/i2c/i2c.c b/components/driver/i2c/i2c.c index 1177ebca8b1e..658abff1e9fc 100644 --- a/components/driver/i2c/i2c.c +++ b/components/driver/i2c/i2c.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -110,6 +110,18 @@ static const char *I2C_TAG = "i2c"; #endif #define I2C_MEM_ALLOC_CAPS_DEFAULT MALLOC_CAP_DEFAULT +#if SOC_PERIPH_CLK_CTRL_SHARED +#define I2C_CLOCK_SRC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_CLOCK_SRC_ATOMIC() +#endif + +#if !SOC_RCC_IS_INDEPENDENT +#define I2C_RCC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_RCC_ATOMIC() +#endif + /** * I2C bus are defined in the header files, let's check that the values are correct */ @@ -240,7 +252,9 @@ static void i2c_hw_disable(i2c_port_t i2c_num) { I2C_ENTER_CRITICAL(&(i2c_context[i2c_num].spinlock)); if (i2c_context[i2c_num].hw_enabled != false) { - periph_module_disable(i2c_periph_signal[i2c_num].module); + I2C_RCC_ATOMIC() { + i2c_ll_enable_bus_clock(i2c_num, false); + } i2c_context[i2c_num].hw_enabled = false; } I2C_EXIT_CRITICAL(&(i2c_context[i2c_num].spinlock)); @@ -250,7 +264,10 @@ static void i2c_hw_enable(i2c_port_t i2c_num) { I2C_ENTER_CRITICAL(&(i2c_context[i2c_num].spinlock)); if (i2c_context[i2c_num].hw_enabled != true) { - periph_module_enable(i2c_periph_signal[i2c_num].module); + I2C_RCC_ATOMIC() { + i2c_ll_enable_bus_clock(i2c_num, true); + i2c_ll_reset_register(i2c_num); + } i2c_context[i2c_num].hw_enabled = true; } I2C_EXIT_CRITICAL(&(i2c_context[i2c_num].spinlock)); @@ -375,7 +392,9 @@ esp_err_t i2c_driver_install(i2c_port_t i2c_num, i2c_mode_t mode, size_t slv_rx_ return ESP_FAIL; } i2c_hw_enable(i2c_num); - i2c_hal_init(&i2c_context[i2c_num].hal, i2c_num); + I2C_CLOCK_SRC_ATOMIC() { + i2c_hal_init(&i2c_context[i2c_num].hal, i2c_num); + } //Disable I2C interrupt. i2c_ll_disable_intr_mask(i2c_context[i2c_num].hal.dev, I2C_LL_INTR_MASK); i2c_ll_clear_intr_mask(i2c_context[i2c_num].hal.dev, I2C_LL_INTR_MASK); @@ -478,7 +497,9 @@ esp_err_t i2c_driver_delete(i2c_port_t i2c_num) } #endif - i2c_hal_deinit(&i2c_context[i2c_num].hal); + I2C_CLOCK_SRC_ATOMIC() { + i2c_hal_deinit(&i2c_context[i2c_num].hal); + } free(p_i2c_obj[i2c_num]); p_i2c_obj[i2c_num] = NULL; @@ -746,7 +767,9 @@ esp_err_t i2c_param_config(i2c_port_t i2c_num, const i2c_config_t *i2c_conf) return ret; } i2c_hw_enable(i2c_num); - i2c_hal_init(&i2c_context[i2c_num].hal, i2c_num); + I2C_CLOCK_SRC_ATOMIC() { + i2c_hal_init(&i2c_context[i2c_num].hal, i2c_num); + } I2C_ENTER_CRITICAL(&(i2c_context[i2c_num].spinlock)); i2c_ll_disable_intr_mask(i2c_context[i2c_num].hal.dev, I2C_LL_INTR_MASK); i2c_ll_clear_intr_mask(i2c_context[i2c_num].hal.dev, I2C_LL_INTR_MASK); @@ -754,7 +777,9 @@ esp_err_t i2c_param_config(i2c_port_t i2c_num, const i2c_config_t *i2c_conf) if (i2c_conf->mode == I2C_MODE_SLAVE) { //slave mode i2c_hal_slave_init(&(i2c_context[i2c_num].hal)); i2c_ll_slave_tx_auto_start_en(i2c_context[i2c_num].hal.dev, true); - i2c_ll_set_source_clk(i2c_context[i2c_num].hal.dev, src_clk); + I2C_CLOCK_SRC_ATOMIC() { + i2c_ll_set_source_clk(i2c_context[i2c_num].hal.dev, src_clk); + } i2c_ll_set_slave_addr(i2c_context[i2c_num].hal.dev, i2c_conf->slave.slave_addr, i2c_conf->slave.addr_10bit_en); i2c_ll_set_rxfifo_full_thr(i2c_context[i2c_num].hal.dev, I2C_FIFO_FULL_THRESH_VAL); i2c_ll_set_txfifo_empty_thr(i2c_context[i2c_num].hal.dev, I2C_FIFO_EMPTY_THRESH_VAL); @@ -768,7 +793,9 @@ esp_err_t i2c_param_config(i2c_port_t i2c_num, const i2c_config_t *i2c_conf) i2c_hal_master_init(&(i2c_context[i2c_num].hal)); //Default, we enable hardware filter i2c_ll_master_set_filter(i2c_context[i2c_num].hal.dev, I2C_FILTER_CYC_NUM_DEF); - i2c_hal_set_bus_timing(&(i2c_context[i2c_num].hal), i2c_conf->master.clk_speed, src_clk, s_get_src_clk_freq(src_clk)); + I2C_CLOCK_SRC_ATOMIC() { + i2c_hal_set_bus_timing(&(i2c_context[i2c_num].hal), i2c_conf->master.clk_speed, src_clk, s_get_src_clk_freq(src_clk)); + } } i2c_ll_update(i2c_context[i2c_num].hal.dev); I2C_EXIT_CRITICAL(&(i2c_context[i2c_num].spinlock)); diff --git a/components/driver/i2c/i2c_common.c b/components/driver/i2c/i2c_common.c index f9cb44da5944..70a3f8241462 100644 --- a/components/driver/i2c/i2c_common.c +++ b/components/driver/i2c/i2c_common.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -56,9 +56,13 @@ static esp_err_t s_i2c_bus_handle_aquire(i2c_port_num_t port_num, i2c_bus_handle bus->bus_mode = mode; // Enable the I2C module - periph_module_enable(i2c_periph_signal[port_num].module); - periph_module_reset(i2c_periph_signal[port_num].module); - i2c_hal_init(&bus->hal, port_num); + I2C_RCC_ATOMIC() { + i2c_ll_enable_bus_clock(bus->port_num, true); + i2c_ll_reset_register(bus->port_num); + } + I2C_CLOCK_SRC_ATOMIC() { + i2c_hal_init(&bus->hal, port_num); + } } } else { ESP_LOGE(TAG, "I2C bus id(%d) has already been acquired", port_num); @@ -131,7 +135,9 @@ esp_err_t i2c_release_bus_handle(i2c_bus_handle_t i2c_bus) ESP_RETURN_ON_ERROR(esp_pm_lock_delete(i2c_bus->pm_lock), TAG, "delete pm_lock failed"); } // Disable I2C module - periph_module_disable(i2c_periph_signal[port_num].module); + I2C_RCC_ATOMIC() { + i2c_ll_enable_bus_clock(port_num, false); + } free(i2c_bus); } } diff --git a/components/driver/i2c/i2c_master.c b/components/driver/i2c/i2c_master.c index 21060fa0fbb1..ac54ba5d0496 100644 --- a/components/driver/i2c/i2c_master.c +++ b/components/driver/i2c/i2c_master.c @@ -92,8 +92,9 @@ static esp_err_t s_i2c_hw_fsm_reset(i2c_master_bus_handle_t i2c_master) //to reset the I2C hw module, we need re-enable the hw s_i2c_master_clear_bus(i2c_master->base); - periph_module_disable(i2c_periph_signal[i2c_master->base->port_num].module); - periph_module_enable(i2c_periph_signal[i2c_master->base->port_num].module); + I2C_RCC_ATOMIC() { + i2c_ll_reset_register(i2c_master->base->port_num); + } i2c_hal_master_init(hal); i2c_ll_disable_intr_mask(hal->dev, I2C_LL_INTR_MASK); @@ -546,7 +547,11 @@ static esp_err_t s_i2c_transaction_start(i2c_master_dev_handle_t i2c_dev, int xf i2c_master->read_len_static = 0; i2c_hal_master_set_scl_timeout_val(hal, i2c_dev->scl_wait_us, i2c_master->base->clk_src_freq_hz); - i2c_hal_set_bus_timing(hal, i2c_dev->scl_speed_hz, i2c_master->base->clk_src, i2c_master->base->clk_src_freq_hz); + + I2C_CLOCK_SRC_ATOMIC() { + i2c_ll_set_source_clk(hal->dev, i2c_master->base->clk_src); + i2c_hal_set_bus_timing(hal, i2c_dev->scl_speed_hz, i2c_master->base->clk_src, i2c_master->base->clk_src_freq_hz); + } i2c_ll_master_set_fractional_divider(hal->dev, 0, 0); i2c_ll_update(hal->dev); @@ -1125,7 +1130,10 @@ esp_err_t i2c_master_probe(i2c_master_bus_handle_t bus_handle, uint16_t address, // I2C probe does not have i2c device module. So set the clock parameter independently // This will not influence device transaction. - i2c_hal_set_bus_timing(hal, 100000, bus_handle->base->clk_src, bus_handle->base->clk_src_freq_hz); + I2C_CLOCK_SRC_ATOMIC() { + i2c_ll_set_source_clk(hal->dev, bus_handle->base->clk_src); + i2c_hal_set_bus_timing(hal, 100000, bus_handle->base->clk_src, bus_handle->base->clk_src_freq_hz); + } i2c_ll_master_set_fractional_divider(hal->dev, 0, 0); i2c_ll_enable_intr_mask(hal->dev, I2C_LL_MASTER_EVENT_INTR); i2c_ll_update(hal->dev); diff --git a/components/driver/i2c/i2c_private.h b/components/driver/i2c/i2c_private.h index 8d09ccdf7b4c..38776d3b9ad8 100644 --- a/components/driver/i2c/i2c_private.h +++ b/components/driver/i2c/i2c_private.h @@ -17,12 +17,25 @@ #include "freertos/task.h" #include "freertos/ringbuf.h" #include "driver/i2c_slave.h" +#include "esp_private/periph_ctrl.h" #include "esp_pm.h" #ifdef __cplusplus extern "C" { #endif +#if SOC_PERIPH_CLK_CTRL_SHARED +#define I2C_CLOCK_SRC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_CLOCK_SRC_ATOMIC() +#endif + +#if !SOC_RCC_IS_INDEPENDENT +#define I2C_RCC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_RCC_ATOMIC() +#endif + #if CONFIG_I2C_ISR_IRAM_SAFE #define I2C_MEM_ALLOC_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT) #else diff --git a/components/driver/i2c/i2c_slave.c b/components/driver/i2c/i2c_slave.c index 0376b6bbfddb..32070ebd78f1 100644 --- a/components/driver/i2c/i2c_slave.c +++ b/components/driver/i2c/i2c_slave.c @@ -247,7 +247,9 @@ esp_err_t i2c_new_slave_device(const i2c_slave_config_t *slave_config, i2c_slave #endif //Default, we enable hardware filter - i2c_ll_set_source_clk(hal->dev, slave_config->clk_source); + I2C_CLOCK_SRC_ATOMIC() { + i2c_ll_set_source_clk(hal->dev, slave_config->clk_source); + } bool addr_10bit_en = slave_config->addr_bit_len != I2C_ADDR_BIT_LEN_7; i2c_ll_set_slave_addr(hal->dev, slave_config->slave_addr, addr_10bit_en); #if SOC_I2C_SLAVE_SUPPORT_BROADCAST diff --git a/components/hal/esp32/include/hal/i2c_ll.h b/components/hal/esp32/include/hal/i2c_ll.h index e78a7ff32d9b..243f732756f0 100644 --- a/components/hal/esp32/include/hal/i2c_ll.h +++ b/components/hal/esp32/include/hal/i2c_ll.h @@ -13,6 +13,7 @@ #include "soc/i2c_periph.h" #include "soc/i2c_struct.h" #include "soc/clk_tree_defs.h" +#include "soc/dport_reg.h" #include "hal/i2c_types.h" #include "esp_attr.h" #include "hal/assert.h" @@ -709,6 +710,51 @@ static inline void i2c_ll_update(i2c_dev_t *hw) ;// ESP32 do not support } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + if (i2c_port == 0) { + uint32_t reg_val = DPORT_READ_PERI_REG(DPORT_PERIP_CLK_EN_REG); + reg_val &= ~DPORT_I2C_EXT0_CLK_EN; + reg_val |= enable << 7; + DPORT_WRITE_PERI_REG(DPORT_PERIP_CLK_EN_REG, reg_val); + } else if (i2c_port == 1) { + uint32_t reg_val = DPORT_READ_PERI_REG(DPORT_PERIP_CLK_EN_REG); + reg_val &= ~DPORT_I2C_EXT1_CLK_EN; + reg_val |= enable << 18; + DPORT_WRITE_PERI_REG(DPORT_PERIP_CLK_EN_REG, reg_val); + } +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_enable_bus_clock(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_enable_bus_clock(__VA_ARGS__);} while(0) + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + if (i2c_port == 0) { + DPORT_WRITE_PERI_REG(DPORT_PERIP_RST_EN_REG, DPORT_I2C_EXT0_RST); + DPORT_WRITE_PERI_REG(DPORT_PERIP_RST_EN_REG, 0); + } else if (i2c_port == 1) { + DPORT_WRITE_PERI_REG(DPORT_PERIP_RST_EN_REG, DPORT_I2C_EXT1_RST); + DPORT_WRITE_PERI_REG(DPORT_PERIP_RST_EN_REG, 0); + } +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_reset_register(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_reset_register(__VA_ARGS__);} while(0) + /** * @brief Set whether slave should auto start, or only start with start signal from master * diff --git a/components/hal/esp32c2/include/hal/i2c_ll.h b/components/hal/esp32c2/include/hal/i2c_ll.h index a7550cab6912..8fa30c225697 100644 --- a/components/hal/esp32c2/include/hal/i2c_ll.h +++ b/components/hal/esp32c2/include/hal/i2c_ll.h @@ -17,6 +17,7 @@ #include "hal/i2c_types.h" #include "soc/rtc_cntl_reg.h" #include "soc/clk_tree_defs.h" +#include "soc/system_struct.h" #include "esp_attr.h" #ifdef __cplusplus @@ -112,6 +113,38 @@ static inline void i2c_ll_update(i2c_dev_t *hw) hw->ctr.conf_upgate = 1; } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + (void)i2c_port; + SYSTEM.perip_clk_en0.i2c_ext0_clk_en = enable; +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_enable_bus_clock(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_enable_bus_clock(__VA_ARGS__);} while(0) + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + (void)i2c_port; + SYSTEM.perip_rst_en0.i2c_ext0_rst = 1; + SYSTEM.perip_rst_en0.i2c_ext0_rst = 0; +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_reset_register(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_reset_register(__VA_ARGS__);} while(0) + /** * @brief Configure the I2C bus timing related register. * diff --git a/components/hal/esp32c3/include/hal/i2c_ll.h b/components/hal/esp32c3/include/hal/i2c_ll.h index 11091748eed2..f22d15947f75 100644 --- a/components/hal/esp32c3/include/hal/i2c_ll.h +++ b/components/hal/esp32c3/include/hal/i2c_ll.h @@ -17,6 +17,7 @@ #include "hal/i2c_types.h" #include "soc/rtc_cntl_reg.h" #include "soc/clk_tree_defs.h" +#include "soc/system_struct.h" #include "esp_attr.h" #include "hal/misc.h" @@ -126,6 +127,38 @@ static inline void i2c_ll_update(i2c_dev_t *hw) hw->ctr.conf_upgate = 1; } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + (void)i2c_port; + SYSTEM.perip_clk_en0.reg_i2c_ext0_clk_en = enable; +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_enable_bus_clock(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_enable_bus_clock(__VA_ARGS__);} while(0) + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + (void)i2c_port; + SYSTEM.perip_rst_en0.reg_i2c_ext0_rst = 1; + SYSTEM.perip_rst_en0.reg_i2c_ext0_rst = 0; +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_reset_register(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_reset_register(__VA_ARGS__);} while(0) + /** * @brief Configure the I2C bus timing related register. * diff --git a/components/hal/esp32c6/include/hal/i2c_ll.h b/components/hal/esp32c6/include/hal/i2c_ll.h index 6b6aa120f154..2d465c20a433 100644 --- a/components/hal/esp32c6/include/hal/i2c_ll.h +++ b/components/hal/esp32c6/include/hal/i2c_ll.h @@ -128,6 +128,30 @@ static inline void i2c_ll_update(i2c_dev_t *hw) hw->ctr.conf_upgate = 1; } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + (void)i2c_port; + PCR.i2c_conf.i2c_clk_en = enable; +} + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + (void)i2c_port; + PCR.i2c_conf.i2c_rst_en = 1; + PCR.i2c_conf.i2c_rst_en = 0; +} + /** * @brief Configure the I2C bus timing related register. * diff --git a/components/hal/esp32h2/include/hal/i2c_ll.h b/components/hal/esp32h2/include/hal/i2c_ll.h index 26ff59a11aa3..1f21cae77c9f 100644 --- a/components/hal/esp32h2/include/hal/i2c_ll.h +++ b/components/hal/esp32h2/include/hal/i2c_ll.h @@ -127,6 +127,28 @@ static inline void i2c_ll_update(i2c_dev_t *hw) hw->ctr.conf_upgate = 1; } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + PCR.i2c[i2c_port].i2c_conf.i2c_clk_en = enable; +} + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + PCR.i2c[i2c_port].i2c_conf.i2c_rst_en = 1; + PCR.i2c[i2c_port].i2c_conf.i2c_rst_en = 0; +} + /** * @brief Configure the I2C bus timing related register. * diff --git a/components/hal/esp32p4/include/hal/i2c_ll.h b/components/hal/esp32p4/include/hal/i2c_ll.h index 88940be813dc..cb2a0af0cd5e 100644 --- a/components/hal/esp32p4/include/hal/i2c_ll.h +++ b/components/hal/esp32p4/include/hal/i2c_ll.h @@ -132,6 +132,45 @@ static inline void i2c_ll_update(i2c_dev_t *hw) hw->ctr.conf_upgate = 1; } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + if (i2c_port == 0) { + HP_SYS_CLKRST.soc_clk_ctrl2.reg_i2c0_apb_clk_en = enable; + } else if (i2c_port == 1) { + HP_SYS_CLKRST.soc_clk_ctrl2.reg_i2c1_apb_clk_en = enable; + } +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_enable_bus_clock(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_enable_bus_clock(__VA_ARGS__);} while(0) + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + if (i2c_port == 0) { + HP_SYS_CLKRST.hp_rst_en1.reg_rst_en_i2c0 = 1; + HP_SYS_CLKRST.hp_rst_en1.reg_rst_en_i2c0 = 0; + } else if (i2c_port == 1) { + HP_SYS_CLKRST.hp_rst_en1.reg_rst_en_i2c1 = 1; + HP_SYS_CLKRST.hp_rst_en1.reg_rst_en_i2c1 = 0; + } +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_reset_register(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_reset_register(__VA_ARGS__);} while(0) + /** * @brief Configure the I2C bus timing related register. * @@ -754,6 +793,10 @@ static inline void i2c_ll_set_source_clk(i2c_dev_t *hw, i2c_clock_source_t src_c } +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_set_source_clk(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_set_source_clk(__VA_ARGS__);} while(0) + /** * @brief Enable I2C peripheral controller clock * @@ -763,10 +806,8 @@ static inline void i2c_ll_set_source_clk(i2c_dev_t *hw, i2c_clock_source_t src_c static inline void i2c_ll_enable_controller_clock(i2c_dev_t *hw, bool en) { if (hw == &I2C0) { - HP_SYS_CLKRST.soc_clk_ctrl2.reg_i2c0_apb_clk_en = en; HP_SYS_CLKRST.peri_clk_ctrl10.reg_i2c0_clk_en = en; } else if (hw == &I2C1) { - HP_SYS_CLKRST.soc_clk_ctrl2.reg_i2c1_apb_clk_en = en; HP_SYS_CLKRST.peri_clk_ctrl10.reg_i2c1_clk_en = en; } else if (hw == &LP_I2C) { // Do nothing diff --git a/components/hal/esp32s2/include/hal/i2c_ll.h b/components/hal/esp32s2/include/hal/i2c_ll.h index f06851299684..f22accc1847f 100644 --- a/components/hal/esp32s2/include/hal/i2c_ll.h +++ b/components/hal/esp32s2/include/hal/i2c_ll.h @@ -11,6 +11,7 @@ #include "soc/i2c_periph.h" #include "soc/i2c_struct.h" #include "soc/clk_tree_defs.h" +#include "soc/system_reg.h" #include "hal/i2c_types.h" #include "esp_attr.h" #include "hal/misc.h" @@ -758,6 +759,51 @@ static inline void i2c_ll_update(i2c_dev_t *hw) ;// ESP32S2 do not support } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + if (i2c_port == 0) { + uint32_t reg_val = READ_PERI_REG(DPORT_PERIP_CLK_EN0_REG); + reg_val &= ~DPORT_I2C_EXT0_CLK_EN_M; + reg_val |= enable << DPORT_I2C_EXT0_CLK_EN_S; + WRITE_PERI_REG(DPORT_PERIP_CLK_EN0_REG, reg_val); + } else if (i2c_port == 1) { + uint32_t reg_val = READ_PERI_REG(DPORT_PERIP_CLK_EN0_REG); + reg_val &= ~DPORT_I2C_EXT1_CLK_EN_M; + reg_val |= enable << DPORT_I2C_EXT1_CLK_EN_S; + WRITE_PERI_REG(DPORT_PERIP_CLK_EN0_REG, reg_val); + } +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_enable_bus_clock(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_enable_bus_clock(__VA_ARGS__);} while(0) + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + if (i2c_port == 0) { + WRITE_PERI_REG(DPORT_PERIP_RST_EN0_REG, DPORT_I2C_EXT0_RST_M); + WRITE_PERI_REG(DPORT_PERIP_RST_EN0_REG, 0); + } else if (i2c_port == 1) { + WRITE_PERI_REG(DPORT_PERIP_RST_EN0_REG, DPORT_I2C_EXT1_RST_M); + WRITE_PERI_REG(DPORT_PERIP_RST_EN0_REG, 0); + } +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_reset_register(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_reset_register(__VA_ARGS__);} while(0) + /** * @brief Set whether slave should auto start, or only start with start signal from master * diff --git a/components/hal/esp32s3/include/hal/i2c_ll.h b/components/hal/esp32s3/include/hal/i2c_ll.h index f833cf9aa539..97131a888b66 100644 --- a/components/hal/esp32s3/include/hal/i2c_ll.h +++ b/components/hal/esp32s3/include/hal/i2c_ll.h @@ -15,6 +15,7 @@ #include "soc/soc_caps.h" #include "soc/i2c_struct.h" #include "soc/clk_tree_defs.h" +#include "soc/system_struct.h" #include "hal/i2c_types.h" #include "esp_attr.h" #include "esp_assert.h" @@ -126,6 +127,46 @@ static inline void i2c_ll_update(i2c_dev_t *hw) hw->ctr.conf_upgate = 1; } +/** + * @brief Enable the bus clock for I2C module + * + * @param i2c_port I2C port id + * @param enable true to enable, false to disable + */ +static inline void i2c_ll_enable_bus_clock(int i2c_port, bool enable) +{ + if (i2c_port == 0) { + SYSTEM.perip_clk_en0.i2c_ext0_clk_en = enable; + } else if (i2c_port == 1) { + SYSTEM.perip_clk_en0.i2c_ext1_clk_en = enable; + } +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_enable_bus_clock(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_enable_bus_clock(__VA_ARGS__);} while(0) + +/** + * @brief Reset the I2C module + * + * @param i2c_port Group ID + */ +static inline void i2c_ll_reset_register(int i2c_port) +{ + if (i2c_port == 0) { + SYSTEM.perip_rst_en0.i2c_ext0_rst = 1; + SYSTEM.perip_rst_en0.i2c_ext0_rst = 0; + } else if (i2c_port == 1) { + SYSTEM.perip_rst_en0.i2c_ext1_rst = 1; + SYSTEM.perip_rst_en0.i2c_ext1_rst = 0; + } + +} + +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_ll_reset_register(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; i2c_ll_reset_register(__VA_ARGS__);} while(0) + /** * @brief Configure the I2C bus timing related register. * diff --git a/components/hal/i2c_hal.c b/components/hal/i2c_hal.c index 3e43f5602785..2daa902bb721 100644 --- a/components/hal/i2c_hal.c +++ b/components/hal/i2c_hal.c @@ -22,9 +22,8 @@ void i2c_hal_slave_init(i2c_hal_context_t *hal) } #endif -void i2c_hal_set_bus_timing(i2c_hal_context_t *hal, int scl_freq, i2c_clock_source_t src_clk, int source_freq) +void _i2c_hal_set_bus_timing(i2c_hal_context_t *hal, int scl_freq, i2c_clock_source_t src_clk, int source_freq) { - i2c_ll_set_source_clk(hal->dev, src_clk); i2c_hal_clk_config_t clk_cal = {0}; i2c_ll_master_cal_bus_clk(source_freq, scl_freq, &clk_cal); i2c_ll_master_set_bus_timing(hal->dev, &clk_cal); @@ -45,7 +44,7 @@ void i2c_hal_master_init(i2c_hal_context_t *hal) i2c_ll_rxfifo_rst(hal->dev); } -void i2c_hal_init(i2c_hal_context_t *hal, int i2c_port) +void _i2c_hal_init(i2c_hal_context_t *hal, int i2c_port) { if (hal->dev == NULL) { hal->dev = I2C_LL_GET_HW(i2c_port); @@ -53,7 +52,7 @@ void i2c_hal_init(i2c_hal_context_t *hal, int i2c_port) i2c_ll_enable_controller_clock(hal->dev, true); } -void i2c_hal_deinit(i2c_hal_context_t *hal) +void _i2c_hal_deinit(i2c_hal_context_t *hal) { i2c_ll_enable_controller_clock(hal->dev, false); hal->dev = NULL; diff --git a/components/hal/include/hal/i2c_hal.h b/components/hal/include/hal/i2c_hal.h index 831c7b6f528a..b7f7518e1f4b 100644 --- a/components/hal/include/hal/i2c_hal.h +++ b/components/hal/include/hal/i2c_hal.h @@ -93,7 +93,15 @@ void i2c_hal_master_init(i2c_hal_context_t *hal); * * @return None */ -void i2c_hal_set_bus_timing(i2c_hal_context_t *hal, int scl_freq, i2c_clock_source_t src_clk, int source_freq); +void _i2c_hal_set_bus_timing(i2c_hal_context_t *hal, int scl_freq, i2c_clock_source_t src_clk, int source_freq); + +#if SOC_PERIPH_CLK_CTRL_SHARED +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_hal_set_bus_timing(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; _i2c_hal_set_bus_timing(__VA_ARGS__);} while(0) +#else +#define i2c_hal_set_bus_timing(...) _i2c_hal_set_bus_timing(__VA_ARGS__) +#endif /** * @brief I2C hardware FSM reset @@ -139,14 +147,30 @@ void i2c_hal_master_set_scl_timeout_val(i2c_hal_context_t *hal, uint32_t timeout * @param hal Context of the HAL * @param i2c_port I2C port number. */ -void i2c_hal_init(i2c_hal_context_t *hal, int i2c_port); +void _i2c_hal_init(i2c_hal_context_t *hal, int i2c_port); + +#if SOC_PERIPH_CLK_CTRL_SHARED +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_hal_init(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; _i2c_hal_init(__VA_ARGS__);} while(0) +#else +#define i2c_hal_init(...) _i2c_hal_init(__VA_ARGS__) +#endif /** * @brief Deinit I2C hal layer * * @param hal Context of the HAL */ -void i2c_hal_deinit(i2c_hal_context_t *hal); +void _i2c_hal_deinit(i2c_hal_context_t *hal); + +#if SOC_PERIPH_CLK_CTRL_SHARED +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define i2c_hal_deinit(...) do {(void)__DECLARE_RCC_ATOMIC_ENV; _i2c_hal_deinit(__VA_ARGS__);} while(0) +#else +#define i2c_hal_deinit(...) _i2c_hal_deinit(__VA_ARGS__) +#endif /** * @brief Start I2C master transaction From 4ce9b783f3c658d1752d836505c0fd46d67a3d52 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Tue, 18 Jun 2024 15:01:18 +0800 Subject: [PATCH 12/17] fix(i2c): Fix i2c not release semaphore in command send loop --- components/driver/i2c/i2c_master.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/driver/i2c/i2c_master.c b/components/driver/i2c/i2c_master.c index ac54ba5d0496..fbd5d4c5bc76 100644 --- a/components/driver/i2c/i2c_master.c +++ b/components/driver/i2c/i2c_master.c @@ -419,6 +419,8 @@ static void s_i2c_send_commands(i2c_master_bus_handle_t i2c_master, TickType_t t i2c_master->cmd_idx = 0; i2c_master->trans_idx = 0; atomic_store(&i2c_master->status, I2C_STATUS_TIMEOUT); + ESP_LOGE(TAG, "I2C software timeout"); + xSemaphoreGive(i2c_master->cmd_semphr); return; } From aacddac2ddb8d97894fe7078136f4eb0638e3577 Mon Sep 17 00:00:00 2001 From: yinqingzhao Date: Fri, 21 Jun 2024 11:36:19 +0800 Subject: [PATCH 13/17] docs(wifi):update TWT docs --- docs/_static/itwt_10s_current.png | Bin 0 -> 107886 bytes docs/_static/itwt_30s_current.png | Bin 0 -> 69190 bytes docs/_static/itwt_setup.png | Bin 0 -> 48712 bytes docs/_static/itwt_suspend.png | Bin 0 -> 43566 bytes docs/_static/itwt_teardown.png | Bin 0 -> 38537 bytes docs/zh_CN/api-guides/low-power-mode.rst | 290 +++++++++++++++++++++++ 6 files changed, 290 insertions(+) create mode 100644 docs/_static/itwt_10s_current.png create mode 100644 docs/_static/itwt_30s_current.png create mode 100644 docs/_static/itwt_setup.png create mode 100644 docs/_static/itwt_suspend.png create mode 100644 docs/_static/itwt_teardown.png diff --git a/docs/_static/itwt_10s_current.png b/docs/_static/itwt_10s_current.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd315c042e4113523752e3dc1e955d64283c81f GIT binary patch literal 107886 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Ν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�uGwx+oW7l`& zT@Dm}&_$IufbVAT!2st%(&!jnZ%$GmbtSg(;!$?>9 z`5pKzzKBQ>L<($NkMkj`p)2UZE(~jSUa-)62$+^@qJ}+{V3aB4Z#W%PzWHOHP^$ePtGJS?!pWkR#P%#A5vPkQa8 zs`;8Kj~kUL@0sYjbo4jfev;}gX&NT*LV5jHNCfy!54zuc%NoUCHgL z8B_`<79SuwO=|p~*i(VH3dVG~FH+EI)HcKMVNmS7vw)>6c-^WlD}?9ohQAZH$WNv^ zc+lZL33_dSZhT?;YBIjxiz4{>`wBf169ci#qR~M+$HEtc-bM8#gftMIMI})%%)RPj z5WHCsuxw%frEijAy#7yMChsf9##j?9(2}M0ySa85jg7cWLC?iSkjMR)pPJr2-iAhy+^OM=ZBBV;N4X1W4 zs`WzgxZ5dNGAvfD8^oQIWk4PT1Y84)(^5MSsa(U}$LnK@$I20%{r!~mYMdj?ARY5L z-!jk5XF81=Hu&p%O!lGYP&xQ}7r`zz#tRW5t{CLi6Zq_eQpU~-_W38okz?G0(Jc0 zS5Q?y<#G3Kg-W7si$b28R;*DJD9VcY^XCt@@-Cr$D7V7SL ztk#sayx#9#@qidQB+|;lf-@G~j4!gLUbB9Nf;%{nfwk9OqiKXzIyWQZj=s>U9k~3- zNg%QMZmA-+Cz2hM9zRw}(F%W9S}E7Uo}+0ezFdAF;FNVRW-=auFiq zdaj4Z4q#Q4t*voIyosgoW@z`6wn2~Jx^+~wa`EUgg)1^jH-Hx+`1rSMV9Rtz7SluM zm1a++@L#)xIZ(jkPi*`%n^uO3X-U!Q_EX4C79O~|fWP(m@i*)H_s_mA4AV{%v-L@- zTLZUe^}XK&rn)p@5Bw@>-aC;wL*&?RSHQTa`DTMY0Z&!N4(M*Pji|d(u6R&ewx9TIR`u z;--vYUxHNMNfJ-Lg(tmgcO)|uJgyXS412aZ+BeJ8v-@IsrO*7_M`deS^9ko;%3 z`o&Emm3=5uSuSVl>b4idCh6?P7q#?KU8}g{d|GWC@J7MRbIqvE{c&s?M>!H%(DMrm zg&6)DhPuXvy7dtXnF|t6eN8F6?3eVqG0m$N5(NsE+E3q%%&FC$DIQ`({)B>(>2WXO zq@^BJeru1os1(^d_*=ha7pd_3%fJ`;U5h8jhY(!IgLImrIBk+?c@l$#!dUp@0z5N1 zcs-QXn5F<(lAXBg>W@nFGJL6qQ@t3uqeG_&PkDV2_dEQYy=MkY?J8aKqdz*#T#q6y zlvGqJ9KXXxze!;L>qQA{4>dskLqmrebUa*yJYsRfC`G?iuA}@^Rasw8fg@Ksij1Gt zHeo$lQ`)bS*lfEUg;(q7kkH(CNuN? z&z-z@F?3`Db)My*yg>81u`PTC;T)ez99|QZkHqlRPUUY`x)3|p#44-Kuqb;ZRcs!| zxuEmOGgsZ)B|^u?XZ>yG`VHe4G=I01>3&AYUb!PY!2J_-$19G)`htFf6z`{7D+$*O zIR8JX1tU#}}&0j~}djuz6(p3i*buplWYbCcmBIi;y- z;Q+U*K%%I>^QY(*)$|Lhf19YFb+c8+15t|pB0p+SDKCN9BIuHuI@5vUUk)dIBnMmz zz{UVN7OG#b>Kc}wTX&!@pjvt> zXf=Y?y-_^#Y|KFw5`X-f0i)opff)}IkQ;iv55ffG`M~S{3f6r$0ZW+x5ixuLb8)z9 z3RVMV(_fgfxj*E6!3*8ws3l_VCex{-hB*TY2a-tAyM9FfFAfB7by3N0Q(@z;QoypP zf8pB{b!O1B0DwzEmmo0d*ZxRy`iqACG8g-;|D~|uP6R1O{4Uyo4CQ<|{N?w62q`^C zp-&+1FQx3121t|-$-QUdAlBri(^tq?oKg<@G?Hw1yTVpnXlZFhUTtj&JO{edKLlpV z5yfcWuaWbz4+pwdcYbkYGkr*6JP%4X-1;Orb75d@kgtV0fxk^Fg5p1wW(*I+itzlJ z;M!>U;lx$(!DSwZaJ&?juREb2X68KRQQT7B4Du1QVzcgDnsBrt|MoJEJK3gVZCD%r zK~weKtC1Wr0VJz<=MsBc?z>D1%3cJUtqcvWbN)agLSb!VJ|SGPt`CND4!cRS^!n8c z)6`A%ed!jNq3?I#A%}sUG5-+?+f-5%4JriETqg0mWRA_}8q=>6m%?8T%PC@RBd|Y4 zK$ML{e&zF2zD<+YMNbN|Z=PBEG&8^XR)Ii@$@c`bX756oU=jL(af?N`is9IHKUR`SE^#6mng_B>)W zoea}FD(s~*i@TShAh5a!=KH6awasIhe=kpUPEwOO`Id+{%wqE23tXF4)`nRecuyad z6#D2We|Vnje94Mt;qoT|*53F@-~^&@u1y@#T99+!n7vw zI$j_{Kx=qn%er-w6{GR$Q7E(DNS<2Ig+Zg~Cq16_7Y(4*IlJT`pdE+}rdCAgI?sRo zOdrUNvG>fLVN=*5UVbIAdFhNrRromqbp;54CSZx+?>$avU4)h+qvk)To9X0qqSL^UNiUnP1}oXvmH0Y+0T5S1*C=He#G@Pji3d( ze{CtBKMa;}{w=&Q$=`(j1w%W({u>wq>9>cLf)QHt5s7c(O77C-DDcLoQGn?86eUg|-!C8}wv<58SP1tp_pm{{cEB1vdGC&*x6Wk_#X%$c6iWw46rJ z5@)}@$dT11sZK;J6iAm7hWfms6EznRLSnId)vF)q{MUnQXyO%6p!-o4O#xbnNmPHi zfuC_;BC?(Ti4u3dCq^k%JT9DNr~Fbzz|3f`94@J}U;R={o(F;j#dzR#N~Xl&U16 z_Gu*%F@1*4TXgw{2(_|HfRLC*GSz-XRxjrJ z+82inr5y%WKpsJ<_m0Hm>dcc~4qvs^{vmiZ{&HKjNTe2HZsnuc`Gg-`nye>@T776x z@4*wA`1*#wYj!ewG+tJ-=D(JEK!bGYzX#pos~qKxGPSl3X2iZYa$|xeF=n|&maF69E z9GqWRL^=q_%=*M+j_##($;xTAz+<+#oOOu^C6I|MA6TE@VJBN~hqi62P3+`7 zQu63(NYqT;mh^WJax)6=m~_h~UfX^6N-oJF_mqVd&N!Ollr?{*P)7)=}^tFHiNw|9rBZOMtKhNZl5mo0wehRlJ#V``u7i zvHV(Zsr8Z8x1fQMFNM1Fn`bqWA@qNr`VH&~Z!N|9qYG>1&Da9BlE+?YTq&#C?BkYW z^KZ}E+vhRJM{@L%f_$cxg!q1^-OZ_UDfu+Yv0lg>v1@Q{G_5X~d@Z zwR5e@)r;OznP)$K8mVmlb{jCR^0c=CK3Q_oFSXNLo^IFdN%iY_9O^F{)00ID$vJYDa2M;b?f4LGPrG19BbQhMH+&3zRruGH@X0X=+u^j?R=zBuo8+1epcSAF%iq`?gt4n+$j_V5g2-In|FATGlc%C&S9u?LnEyz<|*1KMsW=d&)uCZLc?VgV*&= z7lVVUKBJKfV6r0=MWR+ZyDz`4j>d-JdPIK64~&hAbWUI)y*=%f2Ia|+i&uD?nwo%3 zL8+({!Sb_Fk4Xx6RBW$uk2d+l&@@g{uk9WnSdGyJ^6o&i@9gXh(}e=ReM?T*>Z&cp z#3VClonBd4VLQ~pVJ~NrZ$21*uBr=5^1f$w(r|M0>K@4#iHpAjDFYQ*Tc#lg2h?@- zqCkw6mDlNGm|ka3b=(-ds1f-^LZ8vET-Sme14?H+>Z5@MoSIT}^W43=N~-E9W?9)R zky~x+ERzYYlMm=@cCkn9{qj|IlQKdnl!AHzBIUik^$1;C!pxpOOHa}+*QH|(#R`vd^@|lRV|;yi&rLw#m`)22rKDg8$|ZdnedhtHV_<{W^3~aNemJksHXl=EKtd&k1D&|YcKS%;>L{|RiLO| z0SK2wnXhr-+c%(ufV}V>uM3|FDVGna9i0{pFqpaTb_|O-6QmL>-up*N;LWOcOI&;e zIo)>PW^vzE7l}5$b#xiHS-fm44fyA6Etb88=qdd4_k-!`-1A14QIjLodZGGjl^Z`F zSWlImZ+EGs{EHb{&uO`bShl&}PfH5r)4|{*zru zYGmc;a)$)DgzlEtN0+BQd<8_?{Y}IlGKKqmXpI@H9bJZ7>V$wOvNfz z$US{~0(SQ;Mn8b;`zy7czet#kLmMC2Ds9(wUf%_PVkra+5GB@&BEJu)0~N_$*pl~L zJaw=r`NhRV{RclSI(FKm(^j^Ey6t1xju3cSNH3E#{Z&%Ba?9ax} zBZch}RXVp!dT2qbl1py2d#39l8DhJpxG5)!q(XXWZ#r2{uK~cgoa!}R|1~K2S-Lt5 zYIK?Xk#zZjVMzWJ8>{TnI>^76>!jM*oj@7B1iqP;89AZW8m7< zWzsA^QSIc}$`h81hSl^~a51TElnQ%}*=%7()GnWv?wUp5Lq43p-EVcldaMZA0>K^-b-{wi%xWg_czYD_x|tu-nCxqtd--eoV{ny?Ad$&p6~N~o&;!i zSnYaO%uxsZ8@o{r3h`rM!q3_FFlfSl^OY-Y_;Sgy@cF!pzynE!FwZB7aJ`Hl4$zXA zmo>nl3*5X34ku#qai(x-pKE>}HrOT0Y)RRzpvlyTabv=t6H_}ac9sW@mB9TYy}2nP zfgeQ{Z9B<#!{^LhtmsLa?e}tzIIuIHJHk?VNK7l>6R+Xz7!vF-kM zMH%k&m3o6X`%F=$@YoKVzn@?yQJIR#7mH*3zuAf}j$(wMWwQ}xETbXm{P|zo3GW0g zMedI2WPEtf64W7BhJWp+mZ2UN(TINoPdm|#^?U$GjXZ$&@QxrCQH37TKK>!Q zA@NOJL@N1$9TA+(A6BTDaTxqROPoyE5axe3GeZ1Uff{DEJh&jeSHp^Wc9X1A4}x}Q zL&{BzOPXH*P(}7*pF_MzPDW+aV{QN~1jtV~>?48!{^r`f{Lhp+?Y)(>Fzq8OWz}+% zYcznWgYBPP8fTM7{vjjEK)V2oT{@#rtm07s-2z7LadMXR|6M1A#(1dZPXG$Q11U%8 z*aA3fcDmF&7?07hV34;pCC>6S!Yf~TX?i9=hK06%fiZY%F)NBGj42$f+~(QPssbQr zJd0|->4Fu>^M9}#(P&lOgZGb+T{qIq$o*ufApD9=mG0dbJkCCGRQ+wzfCkKuBmc;i zCCp7E;zJ#4wk5EALk=kZ+zh>`zXY=e8M*&OcKnA?+w=&Nay$oZ?0`xyMByld@Gz{i z{^|RqRjW#E=ecvxYJ)npptAkj%RIT&Lh53tysBDwZ#h;mS-|hZMT{)IOE8?_QQQ7f zWkwVWTsv45FNpJnBR^=NqCis~*=@~YQybE|TI)Qc1=@=i245yXXNIAMRyX5<^1%}5 zWjNA{o~xyK^sPW}KpN|higzWeLSA`r=8%wd$GtJ_BGHrIDO<={H~3vWBu$6Mo$(@d zx6;;mAsP0F;<@U?=L!0#YX8%i#qmxLp6x2qYy~PS05c(U+a1FUgelV<*@Bjv&HLlW z!xb7(angs}(TfYmS2-KB9i16tu!*M%7AmJgkWXD%h9J%20EH6oP%GFFK0vV}C^R;l z8@fM@m2a})N91g1%{Z}C>@a?z z{)W^q`yk)>A0#^f&})2F$i7A6{E+=_>kA7ihrs5i+X0XLA&cWtIQ@Gfe7!ztlpw_E zLBpBM)w*`QGk{fPg-Bmhf3MX^G$)^theg80Ofe+jmQ^6y?I91h{8y47Cq~C1TxntD z4}nokyOaC%ow!>hk7{%>NWHhah=+To& z?xx686L#Ju;XSWKx5)e)JWj3y$y-=%i)>sW$lh!uDv%@vh7B5C0=)gcyt z`6g|z=>9nh&Ohj*_;vseK}MG+So7Gfzsi_-aDB$$^BErnw@SqOuzZx=Hg38nrfSzOMlpN9d?Qos31oPn>z_L*xT#jFXFQfP?`7$~hUute#3aHjx&MzF zDe!E(0G^FacuEsvO8w`2>nhT^8QpTxR}-RFO!X%dF~t#c!EXz#k=6bBp9(iXU_i1` z^vqaaao9k6Eb1(Ols_lW7xV>T={9ulOp&3CL6MDKb9#s%1%~F_t(; z%$^Se&0;rtO=t-So}%*#NTGqlwHw9Opf59Zua{*Q2g$p0kh5Y z;ct6ff`2Bc9h<9xaRjViQ4oE>*ZK4$rXTQItYjR zR#yuHV5(kGN3SM`RshS&%k(CPFaZghGUc2LKaMg3@le$N(*iz-uD+i_-6Qy*Vcd% z$8w6U1ZMj@T)^z7ID(TyB|=aVWT$NEeinxA3f?wiqHEq<{@}1tVMUD|va5ve?oN*I z>7G+k-Y&TN7LZYN1$jD392$Eo;(YxMBC{PDeYxI&0>8p0nMoSA+&TEctQ3ZBv zWwLfH<8}Y+nZw_FJ9~WNWn0RWQe^Vp(vGvXL_=PltHE53=T<{c%1^lcsxt~2_m$LYJxZHq} zLc#uHlF2B#8O(8&dA*%I$D>G0D+Y?em6dZzoT$7w5o?@ei=uCBLfp%TNAEURjLWUx zrpk8N2kPI?!l!!~q1pb1VLiVMZRd;?7uNTaK3fb_HP8_XyTPi_gNgZO^fcU z-3pj`w7B`q4(<*W|F2~39HYFq0)0XY9W4M@3&|CCFkE%bXsEMO+-`YRWZF{aQ`%tD4CJ!yZ39yo z(W)}}>XzoxJBy&mi%;=mjo9YqZRN|~6}_z*fO+HULFpg#{X6Z)8ku`Evqv>E3++~> zrl5o(Px3zIs>lhnCL@suU+PA9Z%)5lzqA^DJ!eR>m?PCkb zdv0!`aW@SBAH&PvjgsVSM{U%TetGX6_7*;Ztqs^~0%oeg*e%GM!o-qT{~FHDI)vNX z5)<#1v++VsNDvVpH!|8|-G2E@W?N3J%x0si&Q3>lm8E_Di)lN#B>)4>S+8f$W30zN zTjftoO^Hs($k3{!wySIX-UDx|UKj6e@a9Kawuxf?B6(e?n2W2vSa7c9(nPg&kQC;# zFrVe7?;oJIM`Ccub}@60PP)>QT`YX+`9J19a>C^ z@R<1f0dq#pl83wV>zCFfg|il{RwozCY7JlXztS#FG`?l-tV){<>Usz(95xdr>VVm^ zM~`LbMLbLcIsa%vDQEs*`cg{Kn8_!vpt?cQ1622hheX1}xljp7V=$t@p&~Vlv4>!V z{Tza}d01M0_oAXltr0;r$P+g#CjNYLJ~49B`kHHKYD9SMcn~#E(5!r8S<9Yc;S09% z#zwguGAF`+r!sUXMLN`?_l0HfXGjEI>;zlsSOG)6co+VsccvFFHR#-*(UR_aLn6G= zK)Y7K((fYVQBRF#wH}-QSWZ=6=@_rB=UG_+;@4w^QT9H@Mhu#%*341+s-@GJ*)fr$ ziaRb=W4w4adeGed#dAV`IXn4i3!3nen_s3pX&U@tnUmgX{-!h~`v!>DYI|)Qm)V5E zmydu+<5R&Is}-E#x7>jzJxtDjAoYh%9{>D!`WcAN+|T&;+pcvJ)4dt9rZb@b4X8 z>K%l9i2+&f(*0jtDILatf5i2tvAMie(Wgto=7K%o5g8g{-*N~9SD&E-^R6UmZ`KJ*`><5hS=lvhfrGbZK{Mw>9^uX`YsTEFUc22fas zduY#yDoEs`;&6v#7vHxft67vfY;LisXy78Cmk5*l0JK^f-KzBBdIbOf9--Y~!2B8) zYLQ$%G~3CC+6}bekyge3TmM3JHj@pXST!=6lvjH(0hh2qheuaUg&h+f?;P?Ka_9>J z%7>$4m?t zDamiT9DY8;l)q0=$o+EbeqS7kujiKEA&=9KZ(}DiT%^YO$yUYY#xNr)Xk8+%o_OMc zD+Sz8Uo0g{KYdfUbCENMGRszRIJvfq%thhrh^88c1bl?wO$}PN^{T-{KOaeR*;xaO zK1&X?BCr~OaIVl)eRpCTCO3B+nCfuh@BPbDF^|yZzQgnbLnnplIn}PuD9&GaoRDd3 zX%(?_0%t0o%FPTYN-6Qwj)v#ni2vKZqFFom>=Si3vVow!uiBl;HukS`q9Myf?Q-)0 z&Tsyn73AUBxCA)%(Ve*fFQTo5vv=hv!*34~Co8rVkfE&y4`o<}tjSW8C-r^b+0<^T ziY**vgx?+UTs({E0>^LI@RwdNwsG#!<4ft$7x%}rACDd`HvMpG3?}t7f4&j zquOw`P&E3^8{`qacz5iJb9s}SLh4A&@nfI$r@0OyP}JBa#95`=dFtM1QEhoUjPVte z-1wu{7gM<1l)+#ESp?HclHAmHsg80)FiA^*g~C}qOFmS3T7P#aAz#MZWi-YKt{Oz5 z+!b9#&3=snkLT=>n3f9hsp*q)@P&Qbu*8xL7c&8z?@~Sz_~CJYdY# z(1DYX3`@!D0z@(ci>!rbAHFQ!GsWQ_7F5wsbfc1*fuG(XWANoPu~7y#9ayQc%j=T@ zg6S`LFHos8#-z#wSN-*RQ|eK^)B@V2^^cOOJxHYibQuzh&YQ}AfJ}=9ODx_0W~V|% zC|EzA>D=id_*~hHyKi`=CkIHUER#dU)&EYvRUO{9?P!C_AGE%U_zL~6un*f%XFnf_ zCV)L9zZ2qsrlYMO@3_993lXn1+dznhv}$UONW#|r9-fc9Q`Ux#o|pt>TxNM#@abkQ zr|IyGqK3P#;2#*WG5&u1!owcKD8Evv#exwtp3n}8czA;EWflbi?S`zALi>KrK1d9J zyz2gYf`5cu9$`m0xZGIOOKYwFxWtaqcKGNew~V`Qb^FZF@|l{HG}QT+YjiNuqi$8a z9e*)*fkii$yVzQSoiry*9P;wk{EADd6wO(&$TlK z-EjJWSZp+v%rPzl^VwY#J*Kh37#3KZ=HgMv7R6TNs0oV;%s~(X@-gnZuZ^Efg zXx!WQhR%(w#ucyMYvFOy#ur<6yZcUJyI5v!H7W;G*0p=CBi&R^549<2{(=^TK!FJE zm;<+s<|;KLGeZj!DRv>?LldOmTLrUjTzrSaT+KfQF%rBqr|pwVR@!Ep*G zh*N!^H1&q+j-!IoDksb{%rh>SCJrVD|Jvf=yjNt`yZWqQ}_BC zt>LM|g^!e=v7dW0jQvxxoSyHfRFC^1B-vgpP$j90EXgA6_T|X@ zv~b(E(=jXrUl8Q(FC*%h9t()eug8XGP!>1~50c&nUc31?cdW_-dWJqLfuc8RRVD;& znd~doBnOWIjhSJuD1qr)U~G{8_NJ9p+K46cl;?u>a@#(o#Z>$+8{}-1zegaQ)Vm<$ z)82j>Bv}Lopa#?ud!)LY+>=q`s&rvN-J|{WdF%5YI~xltiM^2ecJ5`^S5n$AiYn;z<*X=uJ-SvrC%GzU76w!F#pNlC(d(~K z?x@p?1+DK*t|;d>-DP8(etl-qr5x@0VSK*xYF&%Sm<%F4#mR9jMy;-*dq8eW{Jl@-lb~!uva;tp~ zIt}}$^FfpqcYFd^1J6k=Aivp_q0XtY^%2jnt)P+gm~70!?*W3G9Q(OtI>`Jzxd8|^ z&%@-Q8BXkSl2#_zJYF;73yJloiMx5{HZR>w@QCa84^LKXE=_6|mU*6OEdSlEf-wY} z<{JZC@naQk8Huh3BGE$RPV2E@DOaZ+Nf0*8CtqbG4lu8dB;5YJlYC8D z9f!CudE?3TW*4RWaK6YmW%#S)MM?AJw*jmnaRnzDWXUkdHmAG<+fe!p?4aY{=ds}I zQE*~-YP2E7q1EI66BG5AWbp3pcw%UT>LIQAi1W2!o#?<(KowR|Tz4dGX{FalYI;_+ z)k-7obcqGnG6}saQJ;gdV8sRLF_P(abb0tmLM2$&nw(}n2y@7E_4VmJNBj&UWl^FT zflUbv%MirJ;|v^{7T4B>>e-YN9>=~J=-`TvcV&(1GcYy=sWEI|&H?GDELiwt_v-R+ za9U%<)-R(%K#mxuiIvyo9`V>T^>M=0ZJ|3xZ7rg_~ zooD~LmjHC99Ct3yEJu?tw!8lwaNUfqKkDfjG1N9Lhw6S5aiEcyZCyt0RZr>~hg&SjJ@SL0O*=QX>mXQ9-}aBeiT0r(h=3r6k3-F& z|LIIk6#fu$d7*4z`Ld)@lf3KJl z;^X57fd9ZqS?jx=1kT<;h=kK7K^Y4MClAjJ3^}inSICZYK7N zFUo_wBVwHQX_-%4+&ABnpteh-F&iYYml=HYY)UPY^gI3PqN*!*ixe>vuC&j@4_62e zU)&5%GXOcM3M-khUUPs>HCN!_=1v2tPj&r6e?V7$hd*tCAYqJ z!#OARE;rj^=cY%2%Pv>l{dmYz$E8TDxhnk1(#7Sp@z~JQ_|LGRoyZ?olk5B#{e5NR zZYb0VGr;q(3{_P}LE)&%zGVo5-F^Eub7I4jqHs3lHL^AAwNn^XJEJ+z^71pQl;s=h z-QC@|TOIe^SkFm8a+_OjszT*^4axDWCrQdxjf~3AeQ}zMEHdmWNQYLuUvIBs0URDS zLdsMM;IA5XD)r#q2B^?#It)jr8p_+DzH_Sgn)G}(e&ThP7MGOxAowd3C-zG*hxvH) z-+szN14CJeaSm>#5(4}z0^x_?zw&cKtOK`}rIpo>@eM<#@#e|N;#oKx^L9&B&+8Tg zUhgbe)yF?-1~o6Hj!Hn*={xOY2ETRwt1q`H{e938B`Zb16XNe}GT?38-sT<~2g7sRZptPJp+Yg}1j=Im}gJHr_p8@XF(eg5_>P_ldu4;?J6a%I*F#udSD zTU%VWaXdD+geNA~-+}VsvG^baf{w4Zc@|v@)d=XRAfZ-VMw*PV6onBik8u_U%yttq zGm=H)qPvPJ+Uruko|u)|a((FrDLYbTOv=xCMFGHl2lis^fCY?D;Cx22Q3*`ESBB+c z%nfP&fu%l)!T>BJKvfCj#KoAJ!l|h6Mj*sCw;fAL48uYdxuXMzK{XRNf5XDoh(A9X z6n~{qa^jVM_l)OF6sfm$+N>_)&AmjRS8cUMqqkJQAub_0NTMR(=;UT5zy&gWhE8un zra>`0FNmcr-F)yUcjb*hxaYV`LKZq(2Mg=!zXYF&Atk5?1C>ot#@eLbWFT+E6X#F8 zz9&QuvUSqe(61%&Hv7%rv)k!Yv^sh`$Bg{21jh_zY2bYmz&1mYy}~M<+p(`?eua|P&)yC=0)>ecD2}InwlT7gQ?C%)w zgI;$%^kV|YWF5Rd4$9rZ8QDVW{mgzrzV^tWs4=rcA`DT7nP*`k;wLjFc;&o=*0_SV zsl%V@*xtsG38Qm#8s+u(?KCiG!gV}F4X&cCSz zhPPwPUU-g4V)1Ua23x#6royiU@kQaBIRuwf$8Mq4I_Hh@VwioS(r33K+PaC}AUZ zwpa`u2l&F4yyCGFMd@(4a_UH#0mmOZf5U0V|B*t2XtLV9W<#C2t((1Ko(@DEB$NIQ zyp)k=K`y39XlDUZP{6{#!}0#Sw1-{8XAYR z*`K2GwtvQqPa}`SB=p1V2l%)u6jAfrT+Ne?KuA@u*748FtJmq+7<2gUp7z~1OumE- zV@`ZIKyEB2)`7<%X*WDu)e)bnAN4MH{PKO(EZ@A)dJ_a&DkU%dT2JMFr;kQ{eYR!#B@*pd3LsH68@iX#E?3BKO=Y zX`nitIgPkt6OUo)#8U+}oYkw^0R6K}eDR9~l3~UeRe@I`Yim|aDS(4BYT=bkQ#T$y zURM4dnQ{>$?s=A-FXW^YQddndOx5lyZ3^9MOAoz8gFN{-Nj3aA5b9z{DLoSR87=<$ zXOK8Bz!a!P4)y6&q~OvZ#R9xyc7d+6LY~v@q{?Q)SqyhcOF%Y}qARu|EEvnKoVnkK z1m2tF`&*mZdVf$%gd=UtmDYJMgmYvgNxZXH+T!!0n?VwE5YPnWkdd!3$&nIS5+yF zZ!2(?JY{~5%&?4drpQe}TUMlkzVlg&1T7vHOdF7b%4z^Y`Cnx=52UboIqrjwWFoJW z0x^G<-cM6GnzYl7iGJn|_&ECrnSF;=E1A!)Kf~5~NFoZJ-FzF^D7nbGzx1U5I7%=X zCO+K@;N;8!sL|(OD4#Lr{wa^2SRe{IJkCCJ!TCuam|=pKVqq2z4MS&VT6V47E3$y*by?mb;XKk_~mOby%^ioqhN%nY-k@PuE<o6SG;y!;ri0p|L$pY)=b|o8cNMt+ zT@de|jJAi$Q0cF!!$a)yqIwF$mkgXz(({p-j#AzuRH3klY`e)Xp5&x2zQ{LFXy@xU zP)J%lUU?&fL3G>l>3%{)`5jj*UhtU3v{kH=&YDgWy`SRd+JBCIl;0uR!1UgA{WR%# zMXP&ROxW=Ag3pCz($1PJ*_w7?GQ#`_iTv=Rl3vG@Z#8|o7J9L@eRG|*VHV{E5uoXK zYg#^&lUg4W#DA3YxDm>NEjQ9F(0=m^`NCjFxq$xg>{3v(&%Gg6FDTVk@z~=&HpK@2 zIfY*~ zzL5KTg=2eCZ$HogvKNbf^r{F-WU)eWArjz6^ol#OPd3r^y2gERQ?(^`olM5Kf;xq<;ItLw44d9Qf?q8V4Teh9D$zLy3bv5*Wff-s2M zb`1HD)@v6nG1CfSc-h6Z5bz9HVg$g(VWPyzKwUKUjsAy#shL>oeyQ)((cDpSdF>YdqgB+dZm0e}wS|!q?lhm_|63Z6__f^$V%{ z8OVlo3~1mJdejr=NehVKSiwtA!J%XE{s*KO?V>{j-vZY^!cX`L63EUnlsS3T0uD7I zp}}rwP{f7$h3DmX!@33zxJewR!XE#Qs^^tG$2S~0TH526@}!AtOaT{xds%T`c);8uJyP_n3gsA*t4D(Dwo-8pt*|(c zH(Hir+kk%|q2KPmpi4Jia8@sy%d$PN(XHGIcRH{=p7GZYdw4j2@Q0ZoIBfJwY>mV2 z={=T^^N6YVw%qGRhu9CNjf%n!m()QPQadw*C33j5RcYS6wxFS@T?O+Sl^p3Pi z5RiO8tvy>_PNZC%x%UvaBEp;L2iWuM-(>N^`pIAo+^9cI4eI313j~Vp7f6v9B0A7F z`kw6T8r-G|1kaGPH4U;% zUZ{^*!%Jq2VMtsCEB=8wfm8h^q4RL}_A~9_$4>jq?lV)fK~D83YFqPaJPo`eU-CHo zcV6m@x5~<&4L*UrVr>3X=O!_y`GYx>@Z~|&>R$7kTFR|bDm`3A@b1uA*KmC!efN`S`a_7H zX2?!=8)~+Vg~8cOQRI@Wt;u0rJ4X{)|K_oHKi?S@aiDGK>sSF+S!8*{KMwWafC4k} zwq!8weHrdB;MAzz05(g|} ze{6^VX#^OQKGF(-i&9$%zQXH{=4NsEM>jxHPD?u%3v}>=sAvFH4iB9Rd{OO=38Xn2 zcceDtScm!^cR2>e)2E3!>W)AQ!@>Z4%%BkEv17jR4;^t|5N#_cD1TYc{j*BQ8~Cy$ zBqG#00dEKr|78P%NZAG3BlO4cA0v~j0M|OSDX;8z^Zo}yV1ROTBv{_3(9{fXDh;o9 zhpLiIRBXBR9FFAbPP>9}^gOZVybu*I8UyJM*yXyr!=g$F2t0rwS5iFSQ+WJXP%uC< zKf+}AdG^x~y`s;jr`+Q3664z3o7` zZcl%Iy4vr?9tG0w?y`S0!|OsV%Zu@=Gn&ia5^tNnH0ZP~reSJqy|XL1G0Z7B%=b|Q z=k|*iHFdyv7IJ#3y>^BTHuGW}7lZ_#A%2EC)&wmt-#1I}bwy!8;ZO2L=@NQLG&SQ5 zrurlmM$K{LGk;id#3`0T`6*xC?=>N|x98{N5iG7UOBKzb;YAs&`Qs;m6wy;4rg9sXnB z8{r8@Z4=BmJ*pm^yStoZM$Fwqd0((Bb|)HQ_p_8N9sA4u!wc(y@G@5z(%g zBt-bU?6*{|Izt;w>s-&RbfWY7>s*1%lN5xBUey4br z2oQ-I&lwCE#vi!tZNIkm02>46uD>D8DeA<1Q`hbDXt?0HQH4*yH5i|3nlUNP(}I9 z>$&(xM?Z@>3EbS=CT8h~4uIqlyl4OjOBltKg5EGFkk$N*wI={Q%FXQ;$m=!p_4<}J z(N6oLjc&w64q>|ag!i_<|4qjoaKlE+duy9&%@G&WAbrgW17g|MmKdeK-M2(PI9ze! zXl>~ZKkPf?cU$7@NDHn+6=BOjDh!Mu+b=KaDk|ZOG@u%Mc9t8&4}r!9ipT4c{bpup zEp0X?{wqlO&h4#eah!!9&n#-2n_EYvq`{`?+E-;@YRYHkwIp-2_pN_z?HHFg^al#} z#&RJ1=;*dqyu{ObM<0^* zty4slFh5?ESx#u5(GiSm<~#5zNsoe<>bz~;>z1P%?QtRqvRtiX zV8dZ>XA0OF+h>z05=OAnNJp(pKUCqQ0mTuIvZ2(_;ia8}hdNxdq^?eJvbgksZQXqv zpsnVQNQ19{h-nvttp|30?Z1;x(R&Yec2HKp z_KZ3^2k)8F-;@f)ItMkQVB;{6t(&PeFPC#Ada`1eF=kM5BhFpTajTcDAXn!qb{prw z;i{a}JKmVK=e3*-81aI9Zw!jcbS9f+?-$la2nBIBF$s?KnqtWD9Q($Rx^XFq+#_eKT%*0Ed znLRyTb^gshD+7fhWf{auCsY@|*h1~-0xA^oDOHMYBB{pS9j%LHCkYJK}pgRI-U zEmf4v;Q^?Ar1vDcnZIVH6f^mpp)Qw8B$95t zQt-2*J;vqF3izuw{`43(0u%HfzGJEE1K_w-Tn!C5RDL985@zovum!5~N)h{1$Xd`3aUF{tzeAVwptI7|1vw=nR{S7+D zys*3=s&ioCp0Pf@)t^clM|Gzh6N*4d*D;UiZf;3;mfc`*(s z3IQ9(h3B<`?4L-y?at&Pvr0WspOLm%Z>?MFSX4JTaogEBDyUrQ`m7 z$~U{+t~UvQY%|jbfts8g4>%$c!rs~-Kuy=WipDdI2xfZ|6B?jCZl9COcscd*Ghg;L z{7DP*=7buD zUTSIYu<27Mxaz8V=)s5SuCn%qv}cdV?#FzfY2faM`aV#TV2joi2F>^~@%zxEW#MncPeXnfafsc)vGrp|5%oxAG23Qa-z={L1Rh=={{_r#<>qi^uhzv`W9 z|I)wRXp(xi?R0EA=MixK_)EidYdCE+p2we0vk_z`W-K?9a*vC8PkOu^b<0FUs+J0H*1 zPxc;Ob!ReAyl!cjyI8@TJsW#bqmfT!UEL;ySf4Mfx!u!`D;E5ue7xc6*sbbxW&UaYW;Sqjg!0N34mwT+!irIr~d8HsRmzv37t7}5J-I{Vt7 z#sAhdihLg7*;q2uW)E-U4qNN1bK6C&dXAV0tvQklg-5#qv)%R2X`__stg~-NTBl9j zMc$ilRV!4J=Xdo^o|9J2Qt2EWO>v<^fG@z=i0hdeu)N$!u@+1+w-gf6NIhpplN5Nv z8+eWmU7Z=$L-a>%uTVJk=QTAqFZoiYJu3a&wuKc+lOZsqsiz4&VsZhgWXJn7J$3Yh z?cu0^9%_9JIgDXDtVl6?T+h9-q7$YHb>^IeIdF1|IQLrM|Az8f^ z3U_An-D0Js^hu0;8U91Il5YqHOG!-W{rlLlGMA;n8=yq);;+bbHeyJ28enPA4Gw4- zNgmGd9O${eK#Gn82W&ymaUTVkETQR8Y>InU>g+`I8#Op4nyDS>({;6q_rm5T zj>Yg^BHkcGAU;lQ!h&pJ)~~!*{G|x-xFNCWwzqhYEiHztV|G`JiOs&*+@A3XFkgM&}bFTap#KHD=-K4-KcJZDa3>V@=(Q6uns zBvqt(ia>~n>2$IQH8kuWU&<-q+;xxsB21b3{U&MC3WIG=*B>l=spH)1ao59#Q8wtf z{EvQ`{U@3vPTn#NN|fq2MnQ=AeWZl_mDdKGdAs3?S38aM(l}s;mWH{UYBikoth*i*_D%FZe%F!n9>wIrQc##9;QQ{gT70GwJ^-#8>)>C#J30V;k8vt@9@>Gb zH$B;ny-vPKL%31W>jY25v+jA2Gyh}v12DCrkx<{qTfJ|RjxzPzT7HOT>W37J7U_qi zB4q#O-=fLTbj;YlWlLh!(<|(}@s?0MzbT^eXJ>gg=SxpIJql1F-qsWPbf493;BXu9 z;(K2cun%4#8=fkH?9uiodKu3hJ!Saub`4?eGM5K%s`+{C5}%nNENf9)9sr{$Jtns- zrq{p5zl%C`P7JVH&>ttzH=Adq|Lvbgw|p=dVeY)!gvrO1P+6(l*iwJ;ygvPVHE56l1;|SzP3-5%iUS6 zBb;g7_brd{*>cFya?*B#ziOc$okx8hMtocN0M^o!OvWQ$?Z_+swe)EWAE^jyN? zPLm#kEwF_{P9JSIvndl4u?EgNfk_PK+XuNs0fQOKw8{BKWAxSSH>?)t9X}{Yp zNOe-bvq6eb`?x#2?j^=BMQI*(j!7g>tqMij&3oi=Z9qz~u3H6z(g8(N%9%`@<4zOB zJ`)_!P-Nk!Xf3xGvKIsX{f`AX%#)(2DDM`|LX)B0U=yv=SF=hML35Fv#o!b`r2Uac zWZf{+oE~9LI=;|06b(#h*rK9*Ub*J3(Ciry>zAs0jJo6o0L2GgEDL2HM9O6$01Wca zkV%Ouq9+gxQz3Lr!F59b=n;(jKO^SShjC6AFMWt{aT|`^_}yCsZ!;G@B<$#rfVFGN z>c|y8Z&Zi{ zqk154pbMFyRbB@kXtM5Wa_12d{Wg|V!ibm0=iK16)6NwFj}=qHJ}(hOIQVRaPFfOJ zR&^CwslPwU?qr7o{34+|pf&tEUEjD9jx;cCYoAW?>!4$-r_@mSHSsHj=z%EuCi3q* zs_gp2P|FXzo=3HcWBx)~IHtYV8Qv9588#U_`nf_ytt>$suM+HOs;d+D0c+QvS|Ld^ z8wfya^WfQQIw>qW#Zj<_$dYQ?MMGMMfLx$=Zwg;R~^%BD&X>~ zf2MYW{`_lSTv3*A)k;Fkd!qD7Z?A~>AMW=B`^N2OEZ%Z~Y$PEksny^4C+QN(FE{Fr z6Hb;`4hNphrr>_TG%@u7t49|ySECngD_I|G;jla*`g(zZv{f)mgPBU}8dK zh1zWqp>rRA?8m*!(?`NGJ+OuTC%Tezd1QHZeHOoqV=AFggU#DE98f#Y-uMl%*c~k6xnluO*hgm*xe$=Cd*oVd{ z8QF=#dsEGzy5hlDvE6-9OU`Og=`9vH104&IqOxB{{;K7kYD{psee^_0bCw$%d~2oG z`TRUNul8uyl=wS~Wzno)IKQa-|3lZC$3xluf53wzvQ&tWX}RqZm9eCuRLV9o#=c8o zjD3wk3EAtGh?tOl8QaLd4>v->7?gbage4enJW(;jj>-kFf`~Ud0l()336KfS6(ju_^h`C8Yj zR&QuNy|6tyas#C9(gtPwgumZn$V7-8KNkpp4`wG;uChX5|A=(niCP*45SPUIM|B1i z`b_kts3_N+WxM{n6}~&dl0mI9epXyEBR2G<7CwIbqseIsV@86^eK%q@WIk*)wQIK* zmfe1Qr+QK3%KgcuH3NO8l?Jxoz}>O@{2t{m*EHcW#H{;yUqS|^$`<35`O>x}9d|8e z>MB8#?Fu@5W1iQsbTv$mTR65jUs}y~VxZGA@4OM(V@EbB(B;BTn&MDXuBo-AQO*YX zIgrgzQiQiS%6n4La{W3|ocunnP zL9ZfhYEJq7rWs7}K@u6sA^n5j8BVL64LN`d)V}gRS{fZ`UHXa~>1>_3IbxXoC=G8t ze%Ab*mblT%3;KIfmk8(Cb&QO$o01lnZ+KPH3W^oI%Vcv;Pf@n(^J(nOe;JrHi* z?k2sFf9OAIFAp-c_|1QK)e6m=leGt_Z+WY#>bE?cY?~k+9sv~}P^sbx9IpGi2QuiLezXLKz?b7%A zz8VOT0vR?NeMXv=@8@S3mYm~Npjv_KO5ZONp0R18r3jkTjkj-v|JDt=7FIgb6-dJE zw_$(!IPPQ{hDH5z;!=mtfZzkN3QK#x;D_joO%uMS?dFE;)`H^p_^X5gjb-ySNqAod9^l0ZPRLU6<_RBpksM|OA;L$`^RG3GiM5?K$Id_1?iQ)1Aq|;Vj7#dGt zvv0rZaWc^2;`EKG9(?r;@wWCTQ#O4gq|@4zMe1+K^NquU!^oAnG@jp;V&%OV&a`hC zir2E;+mQD;KvguqO`mPtZN#(&IvJ#+CUd6a{`m`L25R2@zoHO1?ot3%0YGq3;hDMu zAQSe9NbsLByfsfS___W=Z_@g@-&xc344Fx)rohuZuTs`tKEc$~eQzQs%)65+g5jO`A9_PN_nMO&lL9a(4TYvl=8O}vKMH;`_*kqOcOJap!hL&uNDqzD-9~dr! z42jUYwG&K+CSc{O#tg%lKS-<7mKiqbS8W-d?p8=M^}8ki31>@dc90XMZM*Ye!p=Qj zr{8_{61*22`soaI`znPMypy&bS4O#M@#TXIN7gjZqw?Um8u4GP_e#z+{qGP5fT!A# z%xeGhlCw-ZWjG3Qf{uCMaA+v; z-?;z^ryLyI&>_6a#d~~T5(T-=T7(o08rF(I7p3_WSwG38O@@i-eETL#9vyI=j0DV?E=&lgQ&i0i3L`vYpK}X__UoH^fa37-1=T;AxoSU8%p|@9 zl)ZE7MI}Pc#Ni(B;1@KO(P$u_;Nw;k25clFm`o2{SaJ-B1HO?U?FF%SGsC<(*dxu-k0+qT754I8@j3toS}d!duaCkc8hZm^Mi6{p>>Ttm zGg;f2lCSjDsPV_&EE?d|C9mH8%SoBBqXX0|BWALGKN~ldveP-e>U~&A0S3RsMP!sOZ5p zcNp}HE$%+CuO4UNX}7*O?ZOxk%vD|A{7wD4twFu>`}*3cC3FB?E8}n$bH|C;O|+Fq zS-4-_>yqc3zDon58bVj3wf8<66h-I7df)C`pMFOY~{L#49oe=7>6d znv3}ulKCe3!^NY@QcA9JLD=C|fYjjyJJxTcVUA|_{&7-I+ zF5BNq+@fqd^{LFvKp1sNi+-+gtxDN;z=@i@g5q<*h1VPa* ze0Asaq~s!{XGvvubhyPvT_b1S#=v|B{%hswyH~rrcZ@4Jnk{T{Z~y+TB|+!t!+U!G zq(&Q3tnBir3UL?+ws<|L!VK5nv?|_y$kc9qI#v~W`}S&!>-B<)jMveA zr4i5AcY+*aFg*2TQAueF?Wn|<#*8ZkU@mD^pCnj!~}d-*`P zjJ<>Q(&M5SqvRW!qEoea3XCU`zpRY4Q0kuo?e(8Xxik+*KB=qm5nW^b$;hXFifSp)4ix>NhbNEbL2=XAODTjQJh!DeWFhK zgt&Us-uLjkL)lNzK@fy{W9NrUiv5rOkN@llRg&p1(Z% zGCY5!Pp;zzR_f`RkO6m>d=7ZNJoa9qjE?PhHsLOvdIS}6tc9|fB8kgKtF0-WBQL+! z_??API~AKaK|~lD-(OVuf@Wz;a<#PFX7Xpnji`&f=2(*lHE>^@uLDS6UjQpw{^B;e z5M&YI1c4hDOWjvf!vIIZa>8i?Ud zPp8(qp+jzdBMs(|_>8b;u3k*531~Yq`MXy3;@HFk`i>4(oqonXsGGc#mGWJJd}*Bp zWV13X=_14F(;?FXB%M-2R#DE`&l1}YGRiPko_a5BS!3R0B65LmwIS#<)68s0QE~AP zrLUCF1H;N`<72?w*BT{P?)9Vr>}P6m9N>*29LGk{Lvd!zo4cbxRFReuD1wx_(%4uS zWpP^>$8!?MbTN@WK1|P^hipP`KeKWtyx#R@_wiA_QwiVKe_SHhS66Lsc32VR=YJlz z_fs%I}#JN4qPR;rf^HFCHy1-WUF8tpBsind=N6nw`2QfF+IG2tC zv?d#aPB)*pm9Gi1VVyO#moE^BP|hrQ6B)@uhUJe)7L0h1%lZAT-CJ<&j=}+SeeJ}3r`zGShF^bpJ|zt zQh2fPPnyQ6T$mcpY$l7&YoBbUj&;cGpM2epzoJ5D(2EjwdN6dsHg}& zu5kMI){G^C-^dU5^Cof(0~+;m%Ic{7{ZcR)84EbBX?1mVdRcM*`!_-Xs&z6gI+-iL zearXgKmc5}zPr!l8Qa-j{MzU%Q@Q6d|5JmLIN#K-vBm+gU4n3!+FoLLn7;;JP_&1K zD0x&dV13d@ZPr7?u?Cx-xX7f&l`<0DwX=@{)>vhHr2YU>lLy=|YjHP5~b9Phc z${wa3qkm6bJ5szjIxeYclzEhA}cbtVzL5~8@6#uPxdG`XXBYrf=goq~_H@Z25? znqqQwwO-J3l1_o+-4F5GyT@N{Rh(c7a1q~KyyEce+SQ&sOJ5Ct2_yys1fIHQx2 z&P7E>k55hAA8zT_-6T6shAp|?_*m~IA5?S4=Tpw?MeYKqe}r12wMHdvbC>4oy^-e& zT~B*x&}ImhRj0S5kG&8a|qAZtwFDZ`lL;W zo6Roh2HWxQu-wm@D#t~3_B6={r%dYN$%=fe7Ow2(o?M>SgXVjQhu+Ce%YL5HD*cgW zX2=XbES{al}W70~d87xqV9SqF%rB z6&2~hk`bYdESutNH2msN&06~zeueL?NblvQDdA1;g-YC<G5P zso$dq5gAGDL6SvBF@lKT|FiwqdLKYX)e#t)Ou4d)J($nP4vc?O=NSy(z zp{(=azh9uta-^PW2=cp_8=x41bALN-b`oI^O}IYfMumv3maR%|hVHN(A-82h5S|5ssl`NIC?=N) zrk{p0xlia>*YJ?}HhYW%vz|dodx4<&X`0(M0(1hjJ;oQ zsC6YAyJ+h&^7197yJ+x&)#?6GNgqV-rE?+tvef63I!ZGSeLA7@ns z=LP&8`Wvp%a=&Vkb|K?h1Rmxs|Ny?3XSVy4!Xy$ zA5E+mh$MK+Z`}=28II{_(N32N4IQ!q`?0|{{S_WtxFD)f;%11&m3DzT&5BqY<^Y|al zmiYHGPU42j)imeSphYWB^Yf%VlJlfB^Z#NBsQo*GJNdl!chTAzILAPNTkzDQl+@@= z5&A^!F{PlZLGkroXEk8@Tl3*_y^jks9@!qg7M&>6JsAjseYr)O*OWv!T;$$K3Y?#C zjE7~6wkamoG8xM}JU~yQ4$R$lNjahgS+ea*ZdPwRa{R3GH(_vs<=(gAZ#z8pHP9H- zBohr-+#b<}=p?;~I>H{H2Qjdlg9}0Uxh_|+I21NysaIE$!{4(=2=>r?;PEeA?t*wZ z8){-sqymHekj?;Xy2pLLDXOZSyTDoYwJwr(Ff$kKRJ6%nWoB~b2R?%^WyL%yMbnG0 zb8USf_5qA8B3JbJb_3mT1{{v6qy89r$_xf|c%r8zxn!X{cW%y5tY7Y%;bbV|CamI< zO@io`e>-N8Q&=W-|K7_Q{-)e)(zHt`|JOsGU)-rlIc6reBXoc52;PZ@Yv3D5ds6d6 z7wOIL)eFJ7oiZ?^j|If)8`b*adB*Aa;*K3QG}*InO3qbC!YGRcqaXQD?bz3Ut~LY`JaRb`OTMNP z;PAaz@VsxWeMhyLJWv@h%@Hy_cQEzy!Pk>t47!6sqOgk;^WzBAQsp#2c^DOwtR~`^%m>G z#F@{{&rutYmR)miaJW_Wa%s!0BkjAYL6Pz08J{l;7QnugvL;*+FuHYZvE>9QK~Nu^ zFc$+Rip4|Ky%IJz|K`&+pOP)}ZxOU*gSf+dH)UB)`>?y+bs#wM%zmlH%w-BcrM_VK;@Dv58Y+On4X+ZS{?3u)oxxz=1u>SFO3L*#f*CVRl;WQ865 z6`lQ&Od)A(&skNmVTzpPV_jLn4J3n-!h^*#hI_B!`Op6h20Hx|_;f#|ZL;dj9;0gc z;DO31ek@p>9We}|R$z&pdGtUQ!kZ*lZX5evE2JUB(!0B=RYkt-UD)!-(IJ& zU1xO4V;m5z#@cokizguCOk9auVngn>H}jHwyV6j2XF{%H^Nl0q*j%`$O@8gUm-<)^ zLotEd#J^AED78gFmWKW&WQ6JyS_<(+|LL7|{$FsqLPpEk>z`dx_p5YDb4)3b?yGI} zJHj6Z60kPbc~S4JUVTd>YzZAo>8i9-ULWrf1dr7%<#w%+VHB@B>y1XcU^og|-j@rNz+2>akf} zxcZ^j1(uIp^HEn24ru@RIaT^T6l|zi<`bfihejq`zC=9@j$y<;6;P{r-XSe_0=YCqLb^M05?jYfDNi} z&qkmtCX571b5O@FOgt1h(XEA*>@HL=5WABPx1{C7tr&(!3!OA>-U`=WjQzp)?08JU z^i}1}>t_)NvdbLPVjUP)Ia=r*M+kY2D;~xj(NOSyyoZYn%S!L8SEfqX#_J9?9rLj} zV?AZ0jHtA+5-kNQIht~PaUQOLdpqt$`btkYlGY=pPvqcf!?U5H3d#Y5AHAwU&vB(& zB7(2KtJ1^r;b+2Yz}o`+Hf;WCa4PMey`j7m7AcmF53^-Yvo<)X_RlzVOH5Kkb9{sL z()ExP((vf3J^#JaUPpK7j}Au<&cOV4jbuOh57r7ZW#ug7#24Sc@Fho7xMMAdf&%G% z*A!Il5W9+*&xZ#UVQLaW<3MMyZyuyFCE3RwHaA%b-xDj0}Zc(If>>@p==9C|uHu=u_BT3gizfw*h z`tpoO@benQm^;KFseE>+D2L>K6pF>GZXhVGPx`-(*(Lg0^2PG^v`&A$@K}+u7;8P4 zZi1okOnP2~vQK&EtfNt=xFZW{DKWWHQ2moz&tDVS*S6wkf^!gy&r=vp1bx~S5*P5% zC8Bx}8bxs8#=JZN`#ZBt+T?2{MS;E^+wkrUGQQiMIK)x4wP1`{H*3}@!doteP3H`! z>0qR`xD=k3460&tNMa;S{p2gZzn(=Dt*U=}9-$bdQADK}yRUY~iUr(JdB5$KC^72H z6w`g`jRF(p=mkzNv9dW-a8-xcAh2bAuzb!ZXt@YRY~f$@Ti`)F`0ZGnz3gt;d)?Kk zLeagmN78Ajmv~fGT{lwpI4WZeZ3OFI)tSCYuI?5{wj|Y26o?xlUQE2VDxzD5%=j62 zkqgF&5!YSMY_Gw}N48HLS^Y*NPGy0zfUtQh-zCB7!?p9i&Rz_^M-RCDKC+FaD`FYf zQeP9=&iq#JW6q3L^LmdkN55|v=TZ~yI7cFpOdrX16yFyB5j-5hO_vw`dargx*nS)Y z%X+gK85sf2!`RqZztvL&Qec?(cJC|?;0{1?8(@cyq`FOqi9p)RJ(hUH}Gd z5S~EXJ_=!o*$UlH*1H8XkLi<==iSv@5UEw;-@VNiX!Pls^$M;77aAwd0ztrrHO$Z3 zK8F)qvIzu2N8)+2$=qA>`wM^nv^*I7pkcD%2yQ?m(l5-Atd~~_2#D_m+}E#PEpG9E z>$2nECYZ4Kn;kc}qgy5Uqo2rp$UP6iu+2l9h+&{bU{JccyOSz{B_Ixtj%ltsqi9tQ zh*XiMl@(pFc;L9xn_>~cthrTfid?X= z+7nXsA$;IRk~EFHAB7tTNnp#~r6t%0P3NppKvcn}PoF+hPt@=BJw;YP-XtLb0|2lb z)wKP2Ck8$p1AgR&iZ{tt5rZ-ClnL(YV@!!9y+7l&vcOYgXh3bOr zAdzi}OCO4ivg!+`PYt+Y%EB2`Q8~E~Bv8=_NPxcem2qX++qaQrXY1GzdJCEL3qhZ# z+?zsDYok+A3z>uk|CrPFWgLD6hsI1j_@R)X{|+^iu^ zPEO{LMVk=EaQ~b#QU27V!jw>oxun-+eh~df)i9^T$ERAF;Z&+VYp zN{Qs$iR_>Fu-q=)8+tKjK^huc9Cch+%b8>agu8;9%*!?I|Du1Gp-_&{Oni-A?9T;i z*E*kvr{|NhoM=ZQq0K{k<7tB9kLYnxMRBRs`k#gWRN7OX7U|amTEx0&$nEB(S)0mL z%6ea!rdyEZU~){`iHzR)*y`>npLc5JXb_GYb;b5m*wss>_H+z-|X1adt5U6lJ@@u8a`20|{MzB^xJJ}H^l zS-O|)kUT^R-KjCob123!pQHoNGw|0h6a2Qe{2o5RlktwF#>agC)6GexD|L2??}jyw zp}$dJP0bxg%KftJHeHvI=WDtDJYi#Fdty9Yv0y32494gI9MCY8UUmtYmE^ycXX6zv zciaHe$!B~#+F==aXMfe*-*Q4eNz;ssa5tuScZDHE;Zu$f9J$&!n z#UG)miFSX_wcsg9-LpgHKkw&;=C*H>r4}$!@LcrfxE{*CSeMJEeZB7~B0@K538irV zGD`<4Ia3g4<$HZQbhSoQbIvPkXkp@{;Nd@ajgrmQJ|TCT`bf8GeXTIz{_)(QbI59T=VvZvipkfRv?{l>w?B&#@CUahC{<;Cgbs*)8b(Oh{+4RP*aIkJ@G-w@7Ev){@*3V}x(!U+7JH^~R^w zloIagXyY#a3d9}mD4OjKhb$j>?i8Y5B@?J~Y4a?v@}tjKnFky&mlgDE@CL+6do4pC ze_ech|E>;Aqi^7)piO>NwD<~vWI6s(6`H;Bv(D3#gz`7>G;_Y@ltO00-di73o)>fTZj54=(#E-030FP&5w_gv{M{8 zNgT2}v@^q530Lkzb-bwZ1_Ll~6YKmZ<9BIvNQUAH*&FYe5TXEd@mhYoU8@Ocfj|wF zS3gUhjD=f{1J(e&sDKQc26yuq1nk4k3G>&6yC=-O_(A82Nm(nOA)@GO=aY4)kAj3a zHy-D*6n(o0rr4GhS{2d5Q#3evWJOQQoVvB&7ngH+m@iYVkdjg4k3pGy!9vn4 zKvZDCIkktu+?86J7g8;uyN%D+=%rB1Vk0jq{~id5DkISL)%xw`>OIu3nj3okec?sT z>46tUX7cJ=_NjzJJ3PK3ZPJiUv$BjVb&rbbZ;87jMQJALrfTr|VR+c@Q3+!CwJr4# zoHq^$)(DjPsTxIO{Oy$1xgRs`b)J~+GltpUE>=V?%<2%zoNGFh1@rZdDoT3@)^*?j zKLpKxzZM%$Xs<&&Mh^qNrIRLED6!HXgGn&0Yv*2*hPQy!3)MI5c$5b+vZIKWJ@IJ@ z!N=|6jRq{i#CT(Wzb<@+nBx~a4BHeVB}*8iF!o!egX$-QzsWln#o7d}=3XBiF37xb z5->@nq_b7JOj{cbC@`}P6REXmqbI8d>Q?_?bQFgRx{JkC^G(RTUr+!ajYys_$^Q)8LfX6Es1-?-js6=g<- zh%%-zMfpdRz5VgC7!YcVhXv7$BDRsXQ8&QBEwG1c<^fqMn7 zh;b$t&=K6Z7Md7>=>P=Wlq^&nPHw-nC#BJ%(Li9$XdFT4iiKQKyh?GtD00clLj<4|r_t zhPHu(%9r(3zgeZ_a+opt&FMGr)`7JAv`p<@$|72j#AkFf_F z+*duu!h{aE{-3t=%XD7?5c5|vS?K{T80b6}Da+|EjT2X32VBLw= z$s~Q>zt6ET&Ba`^G!W8x8%BaJt-{~_ea-Ud6gLh~EARJt?xDrEEdPbdVdnV`m!6nB zo~OfG^_=YxQ8_&Kc6Oy`Z12{QuJDyhpqU+Z`$nnu) zi-pje!wj)c1R2_wTx{|_E1xEOsFVkV&B%_uXv&$=J8jHO$<5^@`QKnuru zu=s66j|5rJtgI|62H}=-gZd^VtNwUqN=xKxOfrSint!lqU3kx>(d%pnThkwod9khX`L@Yi=R z3PktKHuQucM^OKaJFDQeVz%bGvcsV3>RZK}M^Eb(7PX$|!78hKf%F)g3=R>ei`@(21H`*Ilgvye-eZ#fnY6OP zp>btfjk?^oEhZ~|;xI|&b27W7@U9$VDH!q7=SC+EY~>C|6^JE5v|TrM~$0A}AWcyijXqt?`i* zC#Hw==`rI)x1aZ+U@fiig}tKSfQRJL&>+Qx(Rn0?QKVe!1-8l;GbM^z-4%&l>=9-r z0Bt0rQ3p2|%=WT#@}sL&94PIa!;b6)m3N3={XoVNtKts+rE>_WL(g9bskh6!_RXt+T3~t3M1e6l%GYr z^7BG`ndP}5&9BqmtN<}e^0AIjOwitedq`P2-UBGP44PsApemqiR=pyMvkMSWr&CafYKp*3Z2Ew4!Y=^5sOenA-us$^iCOJ+RLR*8xV49#xO1(Xd(wwO?i1LmZ0-YPY9J5}y-}ZN8#J#^g>hqNqKpL?i+>UP;_IdVAo!2!pL0YV zJ^scx`s@Vsytlsav)Y^eVcOYGINWVl0w)B!l$oj+$47{iMRCxJZkd8%fItLe7~3=A z$&)-nl1nE8X{tAVsI?cl(JRGSUU+tBAEpHqpmJug>G-rZa#(gm zPs@4V$wbHco>~9X(RJ}n1GRg~J417qtG7Ew8@7+8hqYn_o<5-A{5C!zcDwu8&2s-E z_|FR0*&OaEOJjiHR=t?__V#rBa+F?sS6&xm4%QFA!IgRa6YQ?fJXp27y`a~#x1dinjNx74BOEutxFx6rXd-|?f$HusOJ84Uq9LTD zc(m_|_OE1bugo0FKoZs-pHP3|4pv4^&a0*-<=iA=QfP;UY}qL~NMTh~?q;1x#m#*7 zesYE^eSlB@R9DjNhjo?{9KpHmtmLUJu*8xTylK0W@7x^XfcRTw7RT5E9rxQhADC+D znY|s=2qJ!DR&@2}GvqhFzpXEPdv+6Gb|p>-%8_-h#pzmog2U_ki2%ZbzdDIRhDeOS zxc}*c7SXg~R0xr*^ugN6&FyJvUAv}yqNPLQ{W`K`CrHd26T=Sd1=zc}3YrHSxoSm2 zAJojDe}nmX{20bYYJ9Gfzn|~c0C{0<<8)TLJ<^z0tUsOG)&>+LhbpCT&@9tz=2(Hp zVlVP5cm;^&_2H!nGJ`t5dpBT_zSm8kVx9!M1)+gcjdq++&Yrm<_a z0i934mZ9LaqU3!&orezMxzg~VBhlqCCs;pVBWV~JNtT{%;eT<)?+5X5TulLMTtYNv z`Q50zv4Dy+p}TmoxGZQ@Y{pcTt6McfSyFP-iaH#_fNS(&z%{shZ0Ir?4S^m68m%0` zcj^ki-H`R&;WouiYIs${0?=lQO$Q~pyh%CbR)#t*w-;NoD@~uTRKA-&q|iLrl<{WX zm3{z3>sl1%{*_c71i$iMG@=C%J+Z!=FOAL0)`MVYCC@Mqlf?mUGa0 zk;t6U+;h*27Ge49yW1JOpQvQm?fxY^MJ?`gf^43p+P9Hss_`h;ccLQ72YK#um{6IY z)K=WA2`A}uR}ryh{umUdmdeT3cV7f>nfe`bua^LZ=o`eRUW+nv@41!&;-?wPlobmg0C*SMJl zSGu;3r1s}Po_@BvLxII>U&pHOi1Atf-MX=6M1HYrjY*oV`RQyVDl6p_^hM&<%T1A3 zxkndMWLwNn+sP}F^V&w{ZXTx7Cf-5*7~&8aY@FIAThgLgx}ym{0IsHZp%_c}(cg1*hMGp!#KE`8_~<1Y7eS`_`i9S4@DMV&*I zVg*5Og5TS}l%t7f%JRQ;_tA#P;eWKnKe{CVWUAtbfd9A+EO+)5%@nLwAFC<|UpjB3 z6?)qqe~jZ{U!I1;v0GMe5<~PC`!jc1frtzaupAAB2Dz*awI`ZyX^L~|0dS+_>uSI( zUuazQaF`Ff8ybJzVs8bJ4QW!aprHD2^(V*G2PzL7nBo*GM+7VW4!UhMaF zIM=D`Ia|$6%`0!027}EsFzQlww=k#bf&0Y2lvU-J+ zy0=yzfeRxQEM0gNQaw^x{QOkDPRr*;t5_*XAAM0nlh)6TK!eZZbiE^;Ux1c(uQQdS z5r+Mf0VPLN)Q&uK7%f$$q+Ts0mC06?o*gZ;?@g)HWLRa&b4(nls3g0h>I!ari2BNQ zn_R2a0-MR%;;27vW{ItO|MC>C|2M;Ca{HH7;x>0a_w91iWgliUpxFNS!DGohs!%9( z`L%A`PLm&t%)>|g@v9m^L-C~^fW}ZzXJfxNbn~^YsFl_@7;`c7W-g~IR@4x=iH@qs z!jMJdL~2--ADrgo|8_Hvq_t&VnSpT@`QZKXuBsuoUr%O51E`064f{j&GA`p4fU*E; zMwB<~t)uR*3S1JAiwrw2su2HNKR;!0a4R9o+7xo@y1gVd9Nx(i#prBjk?)m{y$2vP z0H_atjvefZJ_3dpIUw0LtvCDD^3m^%9UEr6T3m*DRG^nNB{oHl`5*7C$7r18J)EXP zu<#4wu~p?5^Z=%*Sa;}ONEkZ3!2#AZ`}(fSF%JNY1LGGuY*l933`Ni^Pa?vy*=8<$ z5IPAQk^iS};Fvel0_*4Tn=@9;F0|iUXZ2eqV%`I*%rUAIa)Y}$t$x8hYC8`PBNvgI zT3=&YLS7p*?Yz z23!09m;8PA`@1k*=6~1H_|>CuBEOF2l(y0_tuQ|icsv3HPz!f99;4r~2Z;EcR7ZB1 zC`fS}SR2gT@-tE>#OM|E=X}yzYDL8$%6Ayi-DP9)nL`spE!1$SsQfT)LZ!?3JzZ$2 zHbkJS_HQNCgrS+dswkIxorc3zQ3<*cj@ms#Gwy$e4&cej0o8?r_V`aDw|bgvHj~r~ zhM=7MQg+0M9=8!>?fl!by*!=|-oz`>OLbOce5(51F4bVRCvnzFea7rd;Oz*D~yegotjPe*=*Mg7uI_j>}@ap@S(-J$9#c}vB@}Fd<0T# zdccYD2vEMh8)rKhB0}U%RIINRMHLzjns%R6D{lPb$e?ZtIB~#{iA>beW1H3S9J>OD zp8m`K#08M+QAWU>Aua^Lt}r{N-M9X&bxf*S(#H0taCo((N`H7t3?ac^w#zfFeisp_ zTW3_NJ0_w2<#~?%T{7=E94?&*aghy@8KIsxh8ovr)*ap9!*Q)F@Qwy7wei6ZrjTAc z8+}6z?&5JBBfj-M|3d~SiDs_f3jn;@KgHj&;@Xk9`p3SOOoSo!Gs19>gZ-Wjc*E&J z-w;i8W}u+mCg{ljO$ewC5>5r+ML!xa;{7N-D_tF&3Z}+^{zZ3Qj`Br~596c88hXzi zZi)?zD<16JiFel^h3L}O|CPg`IVw%id-M7y0|II+HP8y&JTxsrMdT}j1%fO^m*{;? z14GX}@|E)&OYiL#iRz2;;kK;Q?>vFaVAM2BauJDI4@dV^ExH*|r{56qz)NPPdxOi# zYu3tZdEJ%#g2GVfUh+!MbeDZ+Uq&&AZCP(+$bV}O` z4ihL^JN|;R5KF7zDV$Llj1elgZ28w_;BINr%0-=BuXutlw0*)MTp$7KT>nWf>$=?S z+85f8lLPREtTS;V^5Up<@&{}0w%#edMRNQqQT7VA)lBG^oia9g$bNop>9c-;!3UFq z>{Q{1r4n)F;eKn4if>5!Piyl>s9V_+MO_&XS)8SJm>htDVb2XdWZiGdsH^24o(j90 zJevg{ju*0AvYO5A%5d?GX&oRc#>ojxWNXBQwtRcy|8v-0B*9> z_i$w3p@OH$9t!1saWp;ud-O-20y$BS5jM}wiR0T-p6;5oVBxp*h5L=Kbb(B4JX1#$`tBSbBnP0h6Sp7O!+g`gu zhY`Lqfr*Rqb>#K3@4CBe?K5ZbEKnMnN0rLw^*iu%g0yFf$)A*OXZ-2r+gc{L%E&X0s!6 zJ6^c-;Qoc*ka{~hE?gxCtZ>~8Kz1kD`3RnZ4m3$;Dqbi0-q8^%#j*d-$E$Qt=qK9FYY#H6+9l&SY@bt#2pVhnz`$=krW|S*wjReK8+Y zCd!K8fSB0Jb2E>%MDmVIeo^}b(Z_0J+b>KYq4Y{0o4gc)=iS02NEI9q%x=XT`|Zs8 zQ48y)hNYNuLOOoGMn)bkJ*jokF@mQx0qq~KB4L@eXx7wg!L#7Xwx=#ZA^6qd%DA=F z72DW^!0@AE!vZWZW%*r^Pqf`qY`B2KUD(U)qxDRcLLZ^P-b^m1^?rQAU{m)P{?HC` zw1ul-33+}qKB`qKN>o4Ork7h~!1TGX{e8Y;(>VZjdeoep_DUN_ZMDUP=+?rzI!BDr z2LS-O-Du7v=2>wqfw&buKEBU^cVpVdhMr?D+uPd%LlQuxuX&(GkWzw)wG3{BiYq828;zHxXHO^>URxF>B}qq+&$tupMjrPcJFl=eB+L>t~L13 z0DJ&@+sj6?pVchxeiCdJ9N65H}Lz~=x3 zTY1p7-^=00>s2HOm`Lm#TUj{+I;dqVwHGR;mv}%l^>cQnVPIe&S*8PH&JeT;_p98Q z4g!fy1KRP%N`pYMl@~CBSdU~*1Q24zm;%H;SYYINB9A9L=mLNX|2#3Cmc>O z_JkjRpekTD!rcgIdrC{8P*%no=p146^`p?LZ`sGLhRBC=KJ!G&areXd@|=Cc57Vcm z={S9-v({=vV447K9h*2>ka6BaEq*Y-$zd={E{cRZ>djpuNFzCwW*7I5ndByp0=80! zldI|!7G?rpJM1!}fn#5s@b`Uj!dve3*Sb~Zoe)JYu3CNdv7TSi#PJy$KRRYv`eeKR1E|kx&Fw!E$^)P({@*GDs+t_OoO&v5md_ zpjC)aXIvjxg>%>FW`wnB%Zkk80q@jQ+4PvIx!J*mxsw3Y_l;Itehv?aaE zai)Whl}2>En?X|UEI8_(op^ZXL&e?y{M;UtGa0*%9{7)pO5jb_m{eW2QsY0@nKl4I(<&3fJE-$^` zCXB-u(O{}03#7v<>Amjo`t@6U+QsezjMD$gP5-L85nJCgz5B{^&(YVT#{Ra+Pk2w* zrP>-jh%YFubi!C^S8dFv5=QX&DfpLs-A(jCE~%<-vdXdN8LF!6EPIyUGaYgK=w5(o zZgjNo=QkNrmj&}GyG%-5)IUd}2rXV|cL(vcv!!VNR4fia2H@{a$RME_442+Wv8Ct4 zHrpFLc=~24uX6w)l`!mb=u+XE;uuRR3(G6OV29g@_&*w41}7R3x2iXf7ptm_h%R~# z#CF?PIV9Lt)fpl*XUm=rJYMPR7`n^*Lj+9o4i;D|r8PkJ8Vq|+ppNbHCPF9Qmu9RD zrQoG3Kk~vg+lham1tiG(?gRAbccIbYW5m8;Yx?C2!S?KJ!F=qGM#H`A*aq`2f!qkT zGDa{uaJiuNxLeI@0+))uu|S2UEsufqz0dO@W0_BL-4w%&6|P0wey}I2PAAf7Hc_wtW~~uB)gGI-*Ys#XghDF6RyLyR|nz8 zBjcAo7NZ4lH!byP_})nlp`+w*fMGDCle|cBa6`K5Y@_iGY_)6lPa$npyds#c>Mc|eDmkIOIu{&VBr-- zcLU*9eKN+2UKVxBdm$1;=J6JLO{`t;(qJztAe1$jh3LcSiddF%OEaV1y2?!HlUJ3a zIFaf$Ik9K2%L=~c4JT~rQAD>sb5r(8|7+~VsG#4{n&aRn63)4K5cwTpCQxmNB{QD?xVl3X zN1>(iSydqJG4T*V%PHx$=P9(emdKI;Vst0QKjPC;$Ke literal 0 HcmV?d00001 diff --git a/docs/_static/itwt_30s_current.png b/docs/_static/itwt_30s_current.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8890149f402e65068f79391bd7e4e4d99bd044 GIT binary patch literal 69190 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 X`rkLe{;0`@4G=eF6mMin>3aVkDoTAW literal 0 HcmV?d00001 diff --git a/docs/_static/itwt_setup.png b/docs/_static/itwt_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa68878e1b282d2a5cdd05536a854c9989d8a16 GIT binary patch literal 48712 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 literal 0 HcmV?d00001 diff --git a/docs/_static/itwt_suspend.png b/docs/_static/itwt_suspend.png new file mode 100644 index 0000000000000000000000000000000000000000..c49403313e32765cb7a2ca48149b2b5abd8cae06 GIT binary patch literal 43566 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 PcQc+iZ9>$zg}?t_PRQIk literal 0 HcmV?d00001 diff --git a/docs/_static/itwt_teardown.png b/docs/_static/itwt_teardown.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c6805e32baaf51fddad77a432c872a018747e1 GIT binary patch literal 38537 zcmeFZcT`l_-Yr^ct8H#uQ9%U*L6Rs@GHM%2Kva?xNhN0`XRvLw4Tu&3l2LM2qGYoI zl5-X%ND?I%@y!LEcfar5ckkbCym1+4oTHwq&E9MM!kqIr*S>x3?5PcFS=Lf0lnvC= ze_fzZR#j3c%a8uP3jflP@pB6Q^P9~vs><*9as6HYU;Lff_QXY7Wh+Blhs)Lm6eCM3 z3j=-|J!=C4OB-V=+u;>OGWd|RiONOW5Zii%Sf_ND0?W>zmBRnh77hjg*2!Z z$o^*fh?qra>seh2BWw&DV>EmVH zoiy$P#yQV(|G2Y#v&cg?%IZHJGv+$=VulahMFx36(SyPQ{F2rJy!F>$*n^C zL^pnxE#5AL&i+nOd+Co9VXo!EOMg7DM{dR9pFEfUpMU!Qz)DnR#ji6i-o|(FL8|+B zBDa7*YPI{fC%1aiN)ILmxa@N3dZ>}6U+g^IcI7UAb*5Q^?NGBw-f*GIM2l6?ApX!~ znwZ=ly=`er{UhRB+iY(++qBs=bl;Mly_`9boYl-@(_5|>dp1;*!7A-M_VKmXIx%Ng z{N4J?ZLXeALKUAZ^M>=v%Gp9&`1 zgPYQg)CX+7dW#wQNKbq$T9_$nF#8qK!Rw47L_Ad!)uJ7S+cokXuNkz66*0=Bras@$ zz%Mpv`S@_Z%{wM_^Xh_n=@rQ?lixL-U3$fJUo+3%!ZQEo`+K{@1=-xj&ik3Qq@TTBUn( z!1C)0=kfklr`}NSbJ|0>_CrA%cT1?4={~!3^uK-Ccy{V%pop28U)G(WoxFpY4LZ!i z#^?O9dY*afbtdGjwP?;T`TNYT#qp;kv$i2fR0}&0yw;x%e^437{?3yTpzAK~%c*Eu z+1xK^)t;ZEQ;w5S)3_}TW?#?v~soISF4 z|Ec?*f<(-CS}cp^CI-_hWH#s+DRL@2K9`(q){xTI_*`#`in8pTJ9mO|msZYL1=Uhf z``F#fD{0a>xTG?TMvJy+!y}j@B^Y0}7hQ}V+T<~HTrHVacWJz?`{qu|xO#i!r>Ohh zrKc(L#I|9p^}=P`1YM_o&}LHeyuW^VcX#yVicP|&E$ni7g3L^{u1`b@xW!kQEk&5| zMlATH_xG5c<{7<-8KGBSuQ92KQB2mmFVP=oJ5Zl|rX_c;)^Q$g?&2n+@KBp_@z~}} z_qpl1T<498zcwP;W))33j(ci4ijr{r)<$t8taT}Wwn~=wZb{MM{L!=1;{(}MnXY41 zrV3X3WcD^1L znA$Qs+bdh)<31MY9Gn`zm5E8jZq4F#E93r>8UL{De(<-SAJ|g=4C4sTpH6x`KQkQO zX5WJ6Mf?VJ>HhfMmexLFJqp0edVM%%)HOCXz7{y>Z3dSlPlcSx?FZ) zwq)3-EXeQY*AKmw$2TRX{yC6QdN8jmuVc>gtn_%T?Qna+`R~OaIM0SO)^b!*CfXc2 zVh&zcd!HUP{==2*gR#`|48=np^RrUZ-y&6;Pu|<{FihGdWpWo+sO<&vWRLv(RI}QU zsXKQ^sD>n~`SNEq?$ge-r8cB!3tj#EaxlBYy{{#E_+(pbPRlO;_>>CKaC3LjTOO0f z8dCDKO%>ZI#B(A0i;oZXI`u^dT+lL)48LjrJ*T&)KQT3Be0qzL)Wgm< zx5TcTpvcK{$hG_ydCI4}zb-K`V+a*~XFkhkp>T!*sjel%3sWCtd*1J~QXmEWMa=!( zl7_W$=XXkxxQJ_-`uWvtLj_%bq^me*D63_pZP-0~bK-JJ#NIWPqOW#4w4P5MdV2R@ z$%*aS8PrjKfB&BEdBf!wUQ2*HN@^vLeT@EXeeF(@=It7;nmpE0MhqsWC%*TxDOm4}pMRYjia9Vr!13Kq2x zb=JW}FTE+4?oULU(-d`VCA+ek&GnEjqePu0f(H+Dmw%VoF~wfr-5#?)gN2PyX$!}b ztyE217Um{L5t~-k`MAi-o04De38mQ&HG8wTl#BQ3*CnWqYi*`bys4g9*V|F}?(Gyy zIn(lB?{Pr{kz&})+bv2-_4SoT$s{UO5vOiW{qeD)&a+7x>DJ?Q>J54)C=_AQWzDNt zL`+pmN=uhY#<<|5k<4fyskW-ktnO2tXq`nmJ*#n%e$q)pP&b05D!K!7!zSBZQdxNr z2i(6`ipn`TIi2)oQH@T1@#4sb-40p>ZF+5oEXVuna?pMTEZlK{2zzyHJ5_SCiebHP zHpzZMI~{nkk3tFhn_{s74{$Kus3N7Bl)@OLaG7y?A1k*3O>Q2ZglfZ`r*HvdM^c4S zUVORZ96X$o_q{}SVYE4?zm2l*{A|rpbpkSmpM`D4@yQ7+67x zF!>!+hvKO=@OquVCjh#EL7P`Aw@0a`>SXFzp_8Pb>qzuoLe*(Od3+!oXZ@BG8^2lbRfdG644xo|I6p=a)t|MMrxIn>Y950-G6`Tt*U{SJwOZr zQg#yrC8QKi_m78RJ7e}P-IE^^uUZ$vH9lQwW@5+&*S7r8x?RWdGC)-xel04W({RD0 zsG}va(1)@C&u*-mlG~qc9kJeC0hjIkGj#2m~+1W!t1g)QQ@F-GC zk5czo*2A5|q{Pfve;qFt`qjyfuaX^%vjk2{%(U7yXamSrpX^wHSmRi_Iqy@fPV5Lp zy9oxP!XxZ#sD#CsG*HAysqVbsi4!O6Ch~g2Ttuf)+l2XkZR4Xyk7}Lf(!=M>&&n{m z6bmazqeDTt=4-l)64Cc-_w>G1KFQS4?C{eY7`Vfma{9yl-C_xV@Jtey~?w-0Z<+JcHIlDbb#%-FNihAvv>NaG?EM}?IJ%=T7Zx*#9SD|>D z07!h|&u*m;q~skO?X6Hs)hVdXvUpRlkMZ51D7faVB>!;Hf;$3Kt2gUDo_f=-Kf{Qn8xCXAJA=tW&#^^{Mw@yet1npOr)X$IW9 zyou=^fL%5~onja4D3pw?OOer}3Ho?2|HtcA6atMb^Co8>$saFQtTd)j%nvQ4Oj7d2 z=lkB=+)yenP*7VNjaqnSDN788fOeABS4=eO`GnZjYcNaL8t2*#_<#A5>*Fwth|_!Y zJ4J5Y{>5Ys%9Ne|=|iQ1JW6`Z4d|xVscDK_L-)+EwewIQw;gf2V7y+FN>4ABkat9Y zM*gvwJ7u&y`yo2}+{~oa7w{Bg{@-wK6uER#fHQM{Z8yHOHp8NSIa#s(G*`yRY`=O@2@sb*(pLsW z>MCJtgZMp70Pq95S_<7}%+t$6y;Zm=6#oBQ_vHOufuz&==&$_JvMh-C`OWk+i~!n@dl42Mu|%Yi2! zRd~#gHW>z6SijwTsw>DWr8vW+=7Nq+do2X1%Hh@mgh@-cX00xycTzFD1(;jat9%zy)02 zj$r-G`%kh{w;j}aeC_LdgTcnQa|L*$jke(qf_Z9`>&zAG%VSM@`(Q(LSa4y zCi(zm#Ryc{kFXnazNHl`I|C{n=04q5!emqvtCVV809fWST;OnX!%qK5ADP_S3BOS; z*>L^}a7Z5ARvt5&@9*yp1``q_S_uk$;u!OxOLAmeFTc6j{p`)gQqdOkn!oCRdj9-R z&=QPHR3;va0_X9P%eQu`F$WFdqlzlK5o-^Bg$D2?Z_)fGBN<<`)KB&IuxoK&Vh-X# zD3{y_J_a5xq=QQwjt#Y^A5>aWd|oEc0HCW;9y@K+e%i$Pm{ z1#bx`(u3G=cM0548Nt2aJy0K_ z(eQ=V({(5;)&B`@WJ<}yQ>=l|D>$hH&b2xZBs&30rWsc~1s>}v6YKZ{Ch8k`UxJ64 z27cs<22lZlvgT3r3d*yusqbE zUHro?8wFP9Z%>He*aU5M1P?((TeC0yC^oy+{3?#9(Mu(Sk-9LQ3O%H*Y2jO>Pq~u& zh%bBbjZHF-M@B|gr2?P(pYU9&kRAYVzU&?I6WI+epSWW~=9sCsp7U(5ZI>emh$;U{+*rcSS5=YX! zf9>v0DaWhyu9#p;+VEkqc1JzBKC=2uz(H-6|8^OWyN)w-skyNlMz+UH_9K7)`sVDU zBtCT=CxeuNiDvd<$RrI1L{M(h{_l1-l9}qpe~Z=Gm{hk`$(R%jhhhEPW8&4Bd z8KW4?ck$UCLed@|))Ulwe~+D7` zgUwQMV#?mL=O%hz0b%vedGgpr2`mxlJ_9Lccq`Fh4gi=zwO@P5Knnj`n|< zaFg_li~Y!aTXU90FkvysdwU&^xp9SHQT}z?50a8vldPFNSUB^YNSR2RT%?WSS21K5 zFrB6_AocrMmad}?juYp{Nb@ixOxj~`;~8wNt!a_vfu zWM`Td$*jN9(vGhynyyQ=hCYH1tY&q*MDBg*0~L$a5Z5^OpC&l*U2|z^sZH(qQwF#qfQ+*Bn+;-7$m_akqIfX+lstlTv8asj1xEO6#lox- z(bje#c`9H3der)pKCGdq*xZEQ+}czDNzZhB1y6=Wi|E3*?tW{x#p%iwp-fS79Hrn2XO)Jn@U>FwSo_0LoH&cnWbR81ee_8*+B8! zcIH>^0Ff%tXTP#7TpT_;+EZ2v5zUt!71Q`ZE;b@(k>b4U>3wpGwFI?F)Z{(^iuhon z>t=gshR@|L|AXf*&Zp;mkWU@dHu%+wz6JyInFFTegrF+q%4I5%Wv zHL?quPYdE-2wEc4zM|so7?F&#*nsqMP_tUCOUEEVW?0~hta%=9-2*(gZ= zBKQ(zXA)EcZhrpcpETeQe|}AW_9i@c4cZ;cjNSKEaa84`^_858K`KU`qD~`SC8+`U z5Gtf$cAI_T^Wjf{LcC^;$RE-=qJcC;Cin#eDu7@D*omm(JTa(Ywt*s7vlzQ5%+jR7 z*)X~Th|*g|Yrk^1X~;hC=kuoRlfP3UHe(*aO%xk?7b!RhK(j&h&Hs)gYLOF4^pera z{{C>+U0C_xA~5kTBFK~8K0i0p(44B7ZOQ1|2DL@^>L^vjnoeA>CfR)q{hqG<8BbpXZV zUoz5UDbE;rBwsL`ATp_V=RaFW<%Yy6O#q5=02tsp4%}e`?i*6R)zYA3<+^R`j498d z@=(c!Ml0-f85V}Of+q+=&d_DF&IuEyj)rX!etv!iSSfVj><;YASbSzXx_Le-E|rcs zS(H&lSZ4jy%biLT%90m=V$NFcmKEaMAFrBH1WrL3JKg8aEE&=w%@(%@39GDYwE zV*n#k=gIG(U0*9LrpNlos5jF{{@p0ob1+TX9jua3F`c8YE>T@MU^zvO_x#NDzbGPc zj?4w7bqV>vZz2;Y7iW7a!o%4a(T0e2QA)RQirA6ozR4u#A} z{4AJsl>!B$OVXqB^YhPm4$lfvjG675391_DzJyP6^Y`3rX47oXe-XafLN>ee{nHROfPBxF$Xh@A>hoxJV3nkl*63jfze z?@)f!8Pw6&lw?fXo51hsDsJ1D?q@z_qR{RuD@lvY3>SG2f{~b7m>XXT6_5$6U}w~q zq^D#xlFi!c_AxCaam%@kmWdHM@z!*+ahZhu;A6A~5h_XJB<(!WV%hMW(k>GU07(h= z;vKWLrd(k{V=%AcDHuhpRNd#-kEPmiMU2a>8LNK2yS67#ZbT710>n-Y= zC@*_Xd#*Bn_S)|XX3H0UrsbjRqm(JpJuGKle8(EkZCS>WVeeJpdB^DZiH|xpqfhq9 zB_7fH3E?tf_MaT4WS}96`JF6STb?oEe}7w2QX+_^L~_cn!IZ{d9j_cqI0uOUz>|wP zikh7aBLKx4qZJW;iAPo^e`&Iw>b%tpVL)l5!Y|1y*I_tpw|(PYo1RakKUAk^=arZ( zccK_;{4WHQ#!I0Rb|q*(K^U#7gsIj7#j-DG@uz*aH@mTVQ#l%Z;#R7&kEVA`iT^$*Nxv zxa9=skolvaa-QiAvhxoK!HH*$P<53>BqG(TgjtG#+3=V_8^VX)3Xh^coU_FZz~xpZewqA|&(y z<=$vmFYMukoXBcMci{pWO{mVoL_qYk1vV}h0~Jv+5*~QRZ2a;hw^U->mt7gn<+6!~ z!0U*dPpS*ys|eKtw*%T<%GwP!9!BfYoJX(cqW4(}`rf+~EVPEAx{OjQu#Dwd z)dXhkKxX@)^%J$B9qJx?=4xZIr7Jc`Jt+3&l3Z9%dj{o@*C^BuP?rsMnpNXPU37Wt zVvYdwvAL{f(?p&Mc1na3t-#rijF7cZjxkT_{*T}}K6pxY`aBuNW3*~m@PVW!qrqdY zfynk&FH0a2`ta|%?ya`Nb#8cJ-ijVY8Y;?3|6q}AUv(?Wj7T}4+d1E1*Ivn-FL!v; zth-B4)uNF|ewwnAz!{i70kfV5Cl(V0!xjM^dHI zw?XLu4-lnwYMe+nEITvulPA5|9LUbk!zuY2F7Q9XN7RU{8DLZ(I|GtQ7|>N0$)aq_ zHaa`Obfjz%nFq2)88l(im+Vd5If@6$whqo?T5b zhD!93vx$HUSKWrS8Bxxcvc7{Pd)gKJc)gBF7b-up-=alLw!8rSsAQ5o;BB|wY>u=tmM_oo4e^0*PA`evgfA4a9+{+gD7x7gf|tlo81Zj0)A%CpWp zB@J`@Ta337%S->C#uT;Ms>WZg0a`jqPGsJqm;{ZdWCBG0AYn9^8YWt7C<35CTJI-X zChRb@oVnTe&4>*lv`vS+s{psND(As;jG4r92y#7^^%^ z%vYiyWXu?f+hYW)fUL&z7Y`#ANthAY>E%hnaVV6sW8?&&ja4PhBR|PC%dv z!{zj^_a%FX918;$G^hZc220FYP_a13s2PkivSb2!3317dF3g}2Y{hP89K*_&|FdSx z2*%i5q#&djlwQ!%3OT5qOESC(v5}6fB@P2cZPS9B{)EI4NPE2xj&F<~RW8MNaV)UH zHRk;UM91#jfs|5^sUU9U7=6Y_cN6q&)1iuKB3}x@PUajs3e_pDfq@b79Y{2^K&mfi zHYXaVx-QqGg^CP0*IHyTZ0t=L>M@shA{^tPlz+Re2Et7$q9AXQ;qm+ z7#<753#yh@8Ds^1=~{$ioVdG<7+C_PoUAb*_d`63U3)hkOWcYu)Hox1$&?G@p-&L> zBA9Y!M@o6$q!W$gvEF?uyd|0LXki~A5NHqIdM_4@%Jw{79{u4JLhKPSrYOnI*&0@a zh0^JCS2Vr~CUvdzO-4VzymNy7t&CeZdSjKy0{V_V&zZ(aN9k-VO*cw zowSQRy^CN)U|>zN4orOoQ7%71?`DaYpm-`xz?{+3u`t&`f|6$l&@*Xd4t4A?n6n`q zBk&;_jbJQZc(~O3=X>v+0TAXm$q*ix13rXci5cvjH0JOM*REar4qQg;dJlP4BAb>A zH!3KEN{D>@;8OwhHw;843X0-xNqYs%5YthljgZu3uuvi-T5F^0?mtk*%Mt^ z3mzmz?Ts0~BiQ3-oq=#uvYk3$R8)9;XfL6HXU?2SBSQoTTjGPymT2+^X)sR>v}R&# zgBC0V??MT@A_T4x%s_M{ACK9u_t<1*sMY9wt|;^KZ=HF1hTs*txp6nGNe0Rf8C;PG z3LHG9yNlpX!enz@;E`)r5G6N~Xqh~~1*c)vu&zA1nj~ey=)3^b11P#h-2mE(&>DzW z1ewSS0Co|OX7={@3W^8{UyF6KNvx_nw4Ih%^p(KFdM7iX#7vYCt0U?DXmu_y4-R@P zOnQ)7-UD+}C)Z6QY8qLvo=<^9ShB{#b)!1kzuCTq^6d6+#+9E6;F!tz_Vg|R%Pgr% zSa;$?rAL9SkSbP#{d~{2xlsWmBWq*;!D}(%3LvzYa-?NIQE46zwki}ShM{t)(N8RI z=7^7wjBbdclws8&BRgH?GXjZKt&g}-^bz6&h1+AQM~bCgy)g9M*-4KD2YQ$6!l-QG zZ^qCe+zbxsYI+jCW=}$5N(tdnU&nV^zSyffT^&Ghl}er{+*(@rW1xhcX{OmG>9KPu zMf1}kP<0vA0fj2P6%>lfBnn`+?EF_*y6f!G2r?@rgJL2M*X3TBPt=_={SK{93S&WU z4b#LQcqC40s3gl)I2B670Q8B51k@LT%FxL7du0T(W`^JU5)d(cTrt0Ylja*w3zwKSY>0moXh@w7(3%D@<`&fLTB$W*|ZbAph zcvRFh1wAYTinw3+RJ%cdw)N-ht79M)5EC=WAZYd7@J%Z~jXPL4^@Y|;!=02L`Ff8; zD4CkA+PLd+*VklskWrhiho^clA1TAgl1#+(VKhv#OCgRGDk-F}I9<8n9z&`H+_g?1 zOQbXbw8>(f9Y~8o@qnvHn%Mea%hR$L1bZ2s8}^We%L;a`5(s!gK<4JC=7dI$^vW)X z-`&PvLfm)6cL!oOvZ`(sCAn>bSnC5Hndt*7R;~YtoZ?ltYq0e<^SZOCntqZ@G_7jjXiw(IMeuy5FIuV8)zth+ z#YX3{IIMZ3-SMk8I$*{TqMKm3Lh!+b(!W=(vj!CFA^T05^!i;#4h^+r>kj9*qe2>? z;*n=Ul~5n5`GBdFGcih$K@`!>NLiUJEt-}0wvmRTh&bzs0^UX1hP@kxk&JEuk3ixG z!>lJoL{1a-DiUBEj47`sG`75U*~LNzlj1(WZKBDO%d=$P)q?#YMj`M*v<19?j4B`Z zM_6`SXshsI*<}V$$(<0R7SZd;M1}C54GEjzKf`RAgGyZVVtOmc=;Gv@Siph(J`rJ(4ENBdQ|!VJnW~n%T_BX#zOYk5 zK_~NDVqKup5$_EeE#OnidXE0C`O_0N;WJuvp9(QDr7#_wM0y(nfl}!pUfI)o#TIZfPnQYN0`mlqI*b@ecTN#F3TnWI!P->5D&s87AHe7 z9^yF`kXwFOTOA;dr=phzSKp1=Iu_M`3?Zp^MC?9?9zfSGC|7`%yD>@bhM_5%BkU&{ z^e&WjTa0+r1xEcJJ<@;u&l;z0KXo!GBqLrTCM`w}i*Q{1H8PxP&9O;GGaziN=I%Dr9#Zq|E)D1fXI7-|!dVGB%gq|T zA6Q-ZsA&WVMcmk!kf{r(VT1D46CWE^f=5<&y1$O{qZr#}w<0(<>#Ej^tCtNHAh?KX zT}viiUl}!vBp9ko+-yV*7XwYqpIvSFa!T-qWh}zVULJ?FPz?({F<|pPNZ|Pe8jUv8 zj8T*I%Vn#(Fn|S@)K1VYf|FIqeRhgWi*BsiP(p?wFcdyH6E5JvD0S-e+HQ@LEwK>G zN#=)YK1$X|=Y(HGhrk9@eDyVzq{l4sxvmGtF*HDH^@TSnquJh+$$d1qLm%BbQR;K< zIdpSkMI=53qM6&z^#og$Bas52(WbvMzq^JBUKc-nRT!?sHDzL*UB3jfla7>Y z+lOL8mm2xFzixR3K$ObOOW4b)RTifh=m;t@t2avhcsb4*z)p_407{3k6I`7*XLWwc z4wohxUDsDtSIW!j7F6O<@Nxa-jD?DJw^Qn>-NS4i*2-(v9NyaZL}+Z=9^t(zdzXLx zcl5+bllzyB%Dr92z4pMK6NhS-#b1c(qntT!dW?EV?zi8r!;t^rkJAMvMY0!jigqfW z-Y>RyxPg`=F76WUCL@+^t?=DuvYo5Dv-4rR*~VQ*_E4>_T`Qg_Og&vzTujB;8dW(t zPZUggPlu+5-Eg}!Y_S*VX=6vZ0GQ?X$*mZP$C{Pkvzs?>mayr$hop-E+B9^@he~5s z>dznZT+;Si#9Ahv0|yVDUAAo5G$i`2;o($3;yx(<$`ALQsNThO`0#lIGx=paDsg)p z92}VVX)3Q?y-Lfo>-Cu!;Fr9Z6xf_^gl z4`sv0*!8P!z_5qy5#`2$13alhF{*uXe6@&i<(`_IM)K7d*eiB6@uucKMZb%7tjU6d ztGU1>8&4UFQf>zS&vcisQuQt}+9&2e$PCBF2O0#*nlvzVXaKp&gr>26;m9-+ox{K_ zCll=5n?>Y|51XuiW@aY25YBeQ^anh65CIYsB_V6kEDWA<7H6iW;au}Iy`B5&#%i;P z!6sUfdjW)r7(CHWZtB*x_V)JBt^8=2rqMuq#%R9uDCF1P6Q2H3ckAB2=Pcu3uJLW( zsjd|4=AQ(gQS*yyk=zktx-x=JjQ3~!cnqA@yvHinTywUXjr!m!%d~p+Ek5mVKWWU; z4h*8!?=A}zIt7D6Uc1|*Ha}2a+oq>)-@Y~e@%fd6b=SY_eZ+uYdSRUxv{o}fr;*7? zVlmHfo3Y1SQJs~Ql}9z<5jv^u+_c?LTb}w(QS(D{^HZqJ@d&qVa8gkA*!*7U>1vL7 zg@n^c)Zc&qjZR<`)ON|hAo>myZvw;!YX^sb*jS^W(t~G|{HY2$Jdu`dxj~069}9Y- z-di4OH_}B-)-BS3m9q-qk&BBfR`|o%$Vkbd9RuwJdHDqecH{l3p)zhX5(af#e0-lW zR=FcpTJoLJaV3tv;>iQaKNKz`xYb2*mBtLU<|xz0P%C3{ihN&Ps{Fv_kp$SI-CGgf zfT`)4%5&c!f@|T|orkPwa{IOZ*|TSzr+z#^O^hU+M?(>vLM_v@j;IXS{j#kQaPt=n zM+zsVSFlGr)^k*tmX&8>E>{JjmgefQM|SO+HPlSk#2gsb3|u_wgT<`+O9hG)(#zhz zKMA9AMg0r9?awbK+~CD9$ztNZ@E0bDidi50!#;g0y7u*Ckj3JVF3s8`@X+PIO>PeB zx&bJeRz@7n`Y?}l8voJxMz{quF{o!GSI%7-Jl}hl_yr-uPn8fh2tz{5R@Bb_=sZ5u z`26_%{5&nkI=as&6QV$Wcayk z)<^N>!h6_ktgWj@x=S-%8P)`AjJ>zSLj8T?2Gg!xNnp{&uy{K|WfRu__=mWJM9hw_ zs3ur}hwQ`w%ly4}e6nak8^1tZLE)bJ!kk0FShc*#!~mu-H|<=UoJ`vDoz9#-U5Q+% zUSDaQ)=IOc^nCg9lxWAL4V)Yt#g`66JuVngUv=Xs%1|Xvm)T8^nVdLz($FMk!?{Xv zaq)OyN-|!#cQW$NEn5^Td{B_TAs0!{`t#2}732?ed%+rERvscAQ<(&rB&Nv-SJTna z(O|79D=V{g#q{1b+|7jh{L_E#Y~_CX?VE9^tcOhLH60V}Zm~56Ud;GGSg8 zDya@}gqj|H>((t9m{iT@!reZ{2;9n8C9&@VDD$Zka*Y*8-*p>R@ zz&fJljS--+ryf3h$ekj4?aM!XFMxstS-kO|JKo-^=H^LPu3Xu=WlJQU-0z@vbM0h_ zAFoNho|RQ9k+_-bwZIx{3Qq$8)2oaX>bUYsli$64d*Hx<)AU*l^!SF^9?i}jP)`X7 z2@MsRb$`UGezw}zts_OJASil}k@SBPXe?A(Ha7glfF^|2;b$Ell1 z`O@TQg)Hyk!&O@oTpS(0VQlqj{x&|>l^+&6aA?_bCK3RMTJT<1Vkr-?B7cI=Cy3hVR z)%N1r@l*GA?UjP^zw%F^O3&r5%gfK=N@{2T9MWs-u*0$Vt0^vdMnOU4+_?vUXOZxR z2Biq;uKkAIC2p2qW?!|^!ohZ0r&3lEU=3@j`}QIK$*dWPJ=(C`U{q_KG&nrW@mIG%NG$M|5A zGWr;>LiW}_{)oV-kP>6z1Ze9Cx0Mg?j+A_+^E!`!4H5kVyVDO_3SW*W; zCw|oimLGX8GIq05*W55B4w81sik8O&;p0}rh-DSm!BtGr-y}Td^RY1pb@GjyOZPd& zpW@}^MMD#+FqCR+ZtjQkryk+c4ZvAhd5#IX3NVy7&9cn3ucW9jC$wpRO~y4&!mi&K z{7<8h)seL|*G?YHr4HJ;fu7!eb#?WomX-lH^zZ!p@1b#_9qXsjUus%E{1|W0Rlj)g zapByA=E~Kp&ES^jQA>J^{?D$dsfp6Xd*sMPFmtTxhDVw(Hzva9O4KM)hS}qx_K7bR?qneXOWZ za(8#AY zg={u%+z5i;5A**eXV#7!n^Rn8Ln`3_AW#hwTRaAZ{cU;K&DmDrU!9jx4k$oFNPwB> zV?%>jO~Vv}5f1?!DD1UR(s~a+pjXIQ*d84olysb8xV*L^>QkyIj+b0AnXO+g#dYl1 zF@+Cg*svS*+8Dr@9tD^iWEj)!g?NhtiY3jL;9HQ-nhaMx`v6UZ7r%EOvKCpLc9Rek zWHRYM05)%gzw$_v9lE`Ri=CR1l9Hg6lNO(hKq7S&cex4D=z=oNf7fW;A4;7pPmX3q z?IlLTZ*VS3IFH3`WR*I=ZB&{(he={BmXz!n4)^zA#Bp|V!*o%9Q+h0pB@-y)cYS;sP{+mrLCD)Cno^i3o_~{gMuj{*se88lw`5e4+^;eqzNhT6 zP3w5to&(VU6-0B%pN|!r#{lhNRG*ZfH9}nK?eSaQY0q78f7} zcYpg92db)FWIQWb|Up%5oyTDnss;bJQe3uJWo}?ybWol3}aPN;v^n;2PLnP?z>|DEXqZ-gB z`{HX%5|~hWYY>Y{^buR;ncgN)n8l8P z=7~yj;Z7E)O+O~wDsbAXVk)LJ7yKvAJi*)T>6&o*;l3bQk3uA1EH;?HI)u;Kb?cPT z!s5f>pJWj>{!yFR)skTn3C+UeXlQN}#=@dJCtr2^&8M617NxE=I%@@^Hvv zpRI0WK>$y?`tM2M@hM6Tus^EsUOla3DD2HDEm8Az$NHPQD*oUfgrhJDmokNv$$d<5 z_3G7gC;{qt*t%%>?KLI)46~jnNY2_?%tgYGM|7(fDTN%-a5eR#3Y29zdxoza@L2g3v?p0C-R z>byf7p>+zI)$G%>9IXntc@zN&M z4yHYSUPW3s-1i?LFjeCmB}K|+@h}&bT9-JR?xgzcmgLmc)rItTqyp5@avvSzI&|n9 zzIPs&j6=Ff=Mv_6MEEhSPl^YF96(@hOF?MwnOw4zP&{3eu_hy9V=8cP@M)iUg2mmS z7%HJk+5yqaDlt@nO(1U%P{{}*H8ph}L01Y!{2J#bC|w&D5AWbx`n21BatOOlT@5{Q?brt& zwgxC2=!HDgJGXBi9v^7QP6bAIf~HDKP=Ow2zIdi>Wiwm`84klb#K!p4?jP`7Nbk*g z4ymkCj+d%vxbDaqxRQiD=3Uzg-86|r02Hl%NXjX%56o+1VnPjI30tfPKMEBUW?RY* ztc#5~A9*>`M_Gh%H1sQ#UJG;cuCA^q6dr=b((p`jb|%5%HZfRnqOX~t?QTo_iUP-i z(#qZk0A2;5T>tsvJp>gL6u`cgj0_sUz@BI&FwVu3TJ4;s+YC=L6VMs9M)L(e?-{%J zaGd18x{#cZIvEqd+eDlJBdQNT$USGD0Le{b5+&?D>&Td%HpNDhrp3g>WYAYl_Q0DQ z-HEyaa*A6HEWCgFb`>F5;3R-S1nCix4poC4Wni5ej~~CL8h|}feoqYG`*LT{oDmO? zVq;_R&W8v@ULuN=|3Mr)-lI$oyU6hXkJO>_adv2+xvdKa0I0VH5U?{Uw{6qOXm>w zsxb=8b;+9QIBoU!$^`iq%!CR1h2C}+d7Wm=AMQRK4@Cz=)v6B%@9-~jN2_04(^E~R zsRjt>*27zfa?bB3pev(Vgdq!KW@cbXeL8>a*xy*(Xk<=2L^~+$XKiLloy7Y!9gq}+snV`f=O7Rg zyoN-LMdBLtXNHU0oOGEOtU~)TFfxiIafmlT5sn{|f)|A-i2+wxbQEgih-U+WkY9Tv zc5yBDa;o6lI28M6Q_VE}+ZciutbZekyT#8|KG+v+o?^-* zxFam7gazS>lMK9QA859OSlnlmO@X$MNVMQ&a&`#a;~ZKoKW(*Vh|}!U^S-InC!}JD zm{hZ4;8D`vt^=B(jxr508VS;90{(>NT9465BDoTNS6@4^6gKDDB?32LH1Pxz86II_ zVfo;SipPhK!-qy^&w26U8@R9|_a2&ik$v5B>8&yNR7DXp&;t=oYk%(W2L z_VpFpB;mPG79Vz;t1^XIAv4cm5)QPRQ zM}(mk?g4#7HE5DN9U+VOH8IZb4c-IJD|Tu?NDu+C+*;bakwy44PN4*vSiJ{C=qF~_ z!#90=e7L0`(?{d95H|{i@(kEzGN`;6=13YTNNV!K@O@RilHzEOH~K_jA%ffaWbFDM zfyL^B3UAdXd=)1mK|i^urZq9%gF{1#L-PK7537tH0h2*(uhEjoLX@)z8Qx>(2JL(k zZA>iBD2GP8Qod1mqsnRLKgSf|?WhZTfEmU#&V{L9_D!t@3&7al?`Z{kFFO^)EC?R8 zJ3sgsvxqU|NkB5*=0biREF4;~!Lb~dQovq_mc2ZJQ5(MGpP&o$I6F5-tl3`w{Br>O zF8Yk$1*~RmmW8H`8JP7tU%FP)%7H|)iK|9C#1gKIyiXzkI%}-En0w;JRKm!1w zRj?)NC)W`b4ZV(N(HLLJWo2dYkhhd&7(YR^h?dlRr!`V-iYlk#>Y88T&!32hO*|iY zQmJ6ufkDW~vB10aV|GxpEn8naf#>Y;a!!awM8=7c0Wv13z+Q~g?Qf!K($do1(6WF0 zxQfzL`sU64GI!$WvOh%Pl&BKUBd(y>T0wJI`Ed-0@HT;RRn#6L$`kg?5(z4dsU_9s zo}fWV94uPXkY>_Vq3@BOk?klVf1D1}*h}5SCZkaI9U2H>ftX*#HWmgOIQgU5pLk?};O!>%vdz13Knjo>7GQXq^!L24sX6n?_g3w$!ev z&>b0lIh*qUWeBL4M@mWyCH(B9%mxfw)jW54pi4sdgCh+!`C|}bpSB1*x7ub3-4a-=dD)3^!j01I*P!pB!ZT|DmD?yvp(bC=U32uK2^1*Qgs~IG2)T09m zD7aA&stx*BMho6R0uvLMnZW~Apkr>lzjgTjZNnT+Un`E9dgT3qw9#-HxmEKNuw zJ11w%l+`u+?)LzIlmo7$I$y-l0?zkDXh5f(1$`s&K8lzL@UM@?!X;Hz=Yi%;%Ev(5 z6JU3UB+}X1wQDcP$;suqFsb4g7_r+-xSv4(AUvAA4?R!OruZYy(a6Uth1WxHw*?`c z!wZ#6@&1N8hcR>KpyFXqXZAkC7!j|;c>40CoHp32rrq+>!M?t}eU8wcO{<=ItxTk9 zDE;-W<2_ z%}R_$?@raqp?`52RfiH-W(Xhg9)24E7-rJ6J)o*1>o}=IxlbtY`&5^rtqFt$ zxup^@8Q8Pq`}gn6?ZYNRl(ZCNSWI}Ct~=ud3ZbGyaYOz&3_qKinu@XM4Grq#U$axu z8T%StV=N&7Dd_Ezusux(FM%k~+u`wd(km!M!^^s#< zDs!k>nFgiXs25OZRPhRft$MbDjpw08!q9Nb7K4hdL&Z?6h;v8F18idPq1Ka!I*ild zDtk3f;+>lcAFz;szU8%cq*i8^z2}_q**fZ7Ff=q2-Yn}Be|mI)Zd4VR9s2=-4Su){ zo0ome!QjIb!UF+f@B!J)OjvB#aYzp6L8(drVkw3%4S1nY1eS)-t%|5H;%LAZ@MaKz z^RL2}U;hSx{i@a-V_Li?w0>-M2i~-kpkadzuLjFP;}Eg#I!!u^X?4`?_&Ln8S!CVw zO=4J<9%QWyy4nLsT!Opt(!{baE=++9TQ+b0Svz0s_9>MYhYS0T2nq_m8Q8yn|C$O< zqnB{#kOl_FdK5raAI?BFz`mh^7wqNa=JJS&s-eWzAsI%a!hq?_AWV=s2NN_h^z}YS zeJbb<#!~N?`YPUDxyA&eh;-`hfcc zauGxHNbb_z|1bw}_fo-FLE*#Eqer)Gs=TvZz%r=dVU>(owQr!Im}Tn&cASSSw=G2P zi8-8t9P8XcGVEFzrCJT{LP7yC`>R4EY=yjo6Vy>tIT;WyU^M}D;!;h~Vg%OL00WWH z2`Zh0`|Jy%@t_2oB4yJ+@1Bx4mOKf7hiZ2iBu$yr7N}O-u8A7yF&H4*V1O%C)3AiW zJoArxuG)G5eZ&u?3|MIlj)gcJj)?c?FO?S+6-`i24O_lq1%YBX3lp8k-i<&+6bn#I z8=pPt%ZK~Lnb^d{2~q|OueFTO0gg49QpkK zGZMnl059Xgl}vPI@OB(|SgMNz-BKZ%{ET-qZAeK*;KBLfLS|vF-@GA8CK`#p#7nc5 ztYp-TNFk$gGT?riy%_x`>I|Lq*34?HS5;8W7pWfkplAo6Gaf}6rvMyx6u)q!d1}tD2t)UKQ zu~hV0i#&AEN1QoRm&u(e7AiBXjl0};ft^aQDw=(oTLI`U`m`zvvliYPN_k9n0CTH- zN=pA%duJY&bKdv;6Ehf$?V>TrU}_{~E3#BFGnP|DDlKFm+LNWEk!5BKBTLgDOH-ku z)ubXB2}6TYT9gzumZl<03(0c7K4)@W_wgLZb3f00KhJUhbDzg?&4rfpcm96g?`L^` z-tYH!hS9oLcGSjuh9Xu}YzmNS{kLFt;FYW_^FYf68FY@RiW5w~pY#%@UP@6kyJPjW1gB`|f4Ot-T`kHM9nOP+f6$V!Z~sbYcP_uofLs2oQKUIZBAM(rOcaW6AScK<0wDkzICUwKM3L z1U{1od)MdaQe{HF>(IV^4shHzj5cA}F~*H1Be;~NCR1(b*y-}!A-0(&Z91Hy0G0Ww ztVxHtbNOZAY%(n#EE0h01PUn45zN!7gn3&xZ{kha_EHB!205ObECo7|FM?WKsAj+FQKM&8eMjLHO=7a)J%wg5{Gy)&oEPT-R=_e2_slO0%;H9YKNj z3>~mLJY0ifWTwHg+tyqiU8r@m^q}-JgE*J6Y~S@hWRcIm zA5eSqEiJ&R^79`uVLU28F+pihe75%L)z2MAj}F-L>V?j^#B;SDDlF_KO__4_&Yk%T zFrGbqdYz6avZ$y?zp1#mIGX3}awqK!g-SuHmn%cN2h-FET)DK2d2WeN9)VKgOWJ+f z1l112ICj-7qO%GBUN}k6ql?{lD9jkPSp#zx9G!U~Hv(%Tb@c*hCVjWhjIz|6#U~5G zWtNJnP}n+v^+#FEf#G}i_5yug#ufcceMjz#aN;+O%!A`I+dH+LKp^ON9 zLHb9o#EFP21O&pd&Rof79h%+B_?falE?%r;Ps#OBqmaIt((H?#56q)$p)TJ#?j7J7 z@EF?k;QsylPg=0&ck9I?DF&(aXUMgYmkJ2{LelxNCkS&`e-$3dPdDy>nbU3WzQ^u+ zGHG5ILyz9HM6Qe#u4_Gl?+6*xf^6ThOLo}}eyTZP!UP`W5vN3Yr+0m|^oo>Df#iWr zD5wh4m>cAR#co-YgJ`9=R2iCtrm_m#vws z^4+1`-Ol0?S}UA3s8q-5=t-}V{6R-01*SDV=pz&>K}w~Rqa~<>m}LQc7hwtzm%j1` zBQea9w`cZq7>M;KA4F9PuooaYT1Vf1rlka)E?v6NRyrYv6!?o`p5=b8x;lmxI+&gp1x^8dxX@OVmP7(l$OH@x z9M#rws})*KOh)Ab6+N^VtxB7SpyaI+Pn~9bu=c}}eG)qu1m$d$P_ok|^>%F^7`OAh+TZSS0 zCB0M2JcYk3V7M>ep?VFcjB5F_VsEqWFk4d$dhVB%1>9W^b0w)xm_8=0zFAx;L5$ZM zZPG|WLc-X7gA6Y5ca!p#U-L|zlzQsasrx>`KzR4Q9K~0)+}_`ryhO(taSo?)bC>Y% zVF8P}ygPn{zy04{BR`_ZY<3WoKPnVUo98V2$>cajyz>Z%Ji$FfWu0#7_5LQ4N|#nj zAXV&nXYVP0&U_ai<W5m+nlcH2G&g(yMw{b|(X_w# z;tSgvVVcp(h2Ii&v%@K-B0gy?L9YJ{s;nhN>+WCaNyR=S<2h6CT)aYPEp|PcEm8RE zcfovvA=HRj(nw!0rY0z$wpy_&lxDdS=;G4`F}B!ILrf2u(ULL#v?6_rs^LdJYDax8 z+wIQhBS$`qD!g^;mMg{l%`^%UpLH!^vVZo+eaBb`)YV{5FGV4_EAHu8XyT>6uhF|; zOk-`$ASrQ_v3!7k{t(Ptc;U~ZUZVzx7GC0ZKL&;(Ecmox@cgvj!9IV9SdIx}`NWpI ztR$!Fotik4 zVLBxEeZ7}a=oTMeV)~<>$c?0zPMu5z_@d?RrY`~}JR)wjMHMWB{bQE@WtFkj-#?FA zruT3$4HiUNl)~CWmb6xE`0{-cRU3r_fyPDmf^kPRog5s!Mn1$??MoObqc0d^2e(7! zZ}*uUnUsI|{zHNN7Xnu4J^Te88~~x_1!HQatG|_Ayf}&MetCr-`SD3hKHhK<)7-C^ z1wPX|lYto%y;78;FN@>J+TRjZwQ8Kj^!QqcQH&@zsDgZ%UH0wU*P2=XZtYpq=s#vc zptBp+N3~M>e`05Ee;J}HQx#k3ZFbIw_AFGjQ^r`N`WSZ$+xHV_CWurL%TuVU@bEuv z7-kv1rMH2H4h17lDw7#~?MX~r8NE&x7~`LiSvM=0N#-)o4lP~=z{Hf$HM$l8jS#v* zCpoL$ToEOtFKWvIc$U9ZFNP;4!_LACvUE15u?ewNs8LLek3igTe3?p1MD=%>U5Dyq zyHILqCtkxL8QJU2+p4|vsg!R|619xJqUBic63SRz&?BCi@R_PE89Np{TcC!)D7Lz-)@O{LI+ z>hHXLW6N#Herm@K_{JY>CSb{?aVAX+F>^a*3q4K-wakG6x0}DbbBOlG360WAe(VVG z1k^e5<}$d^LPSrrz9qzNitD^W038NFv-Vu_T)FbJyz>?_KPg(b*zB7vzsin@`A2c0Kdz(W#GwbO~$eAuPi)TJOi9C^I(Lpfj*1b@s zt2fW5{6net(}qIotGRPF^zewcF6@1wyHvVX7lUSmAXq9cp8fRc(=`q=%X3aHn=j(kTZP8}a0H}V zkuZ?`Zr7vOCfVN>Z3+BXmJ*5oRg^2`Ha8yRQ{k+ENXTZST`K)BCV1LLiT*0&B z_*%V}Sb_XTE?sjj4L8;XMjBdyP%=1~)klJxnN|_NfoBrJBh|AY|qwmgI1)q*k+8 z`CE?xYI+=;_G}($PwvHE4nX#d1hte^c}I2%B_K(!V{?;W_Z@U2u~VshBkP=@u3juA z)IHj68g0^4ZRrorY_Vw3p-s`3=YR+0(vw;R>xFvR9QyjBGgvPSE-r*ZoRX4a7)7|E zbD00_>V7@F&b(dzYE*}T+O50w@JKPS@xGvux$@&ly2;fxdvt$n8x?gQ*>iS8Y<_NP zRe|e%@0Ih97iene>2|x^p=VJ1{;j5e#c$El4jX=Uf??*b8}}{z;oQWE#xai5Gb@@J z*QPygy!15l$^OR`Z4?jSVhY|eCVw>ycF5~G6n6;TNOuN8UGg1;dsG7Sd0BLQ7o01If zZFh9lkiB}2JBV15=3GCW74B;4V9a?7f_j>{i;RZUh6K)`#%s^!IZxjXlDA5)e^y)D zm}x%|uGH-UO%~jM9$BqCUzd1)lyM})cN&{`=#4Z&6EONr!Niy-)FT-Nf3q5TG^ddf zWzvFkt^H5X5^FJNa#>&NcRk$ov-X@HVCPZ)u5HDJinUkh=s3h|gIgkf?`x*OWN> zuH#Rx#Fr(}7iPT}-CsTuuXOd4<#l)UJ-%(Xf0g^4y)g0NH195YP9mSpxkf_$17)#e zXI2#_#|Q{Rj4s{aa@C`zt?D=mU&UI~rOe{jjL_jlZ5vd5Wr`;BDw1xGL$l_mx0B$>x?wbS~30@Z{Z_vfu! zr_Cx>H}rD?1({}UKFX*I`VRDB5SM2DRYW0rlnPtT9rEC6tqn0#i`ujx2W6eNth=&9 zku?zxve1EKJ^>--Z^)?$jU9VIK!p3ht8(qNPC24MqLB7KAuaAuEesnW&%Ca-{d(yDFUX(!!lHbO>>sWs6cs&zr zUkdfTs;vD_FjzWD>g}9;9ej%F_-b9rg5elHnoB01Wu6`v9`3nk{nDAYU#LSlkXLZb zz51pFvxuoA!}&tj%SH6$vOLpCUq-w8p=0_-H-&OC8Y=suLvg@q+FDvUbQJ0#!dX$v z-ah%TBt&l4xQOY^zZBeM>v!XGg3EAf$bo;LQ!GTLq@*Ov?8?~jIeZFNIsPEutH=t9 zi8`}h3N-DY#*GI)T>Un^;GY-gfA7La;^nf)T^=DUDhG@05yxvTE}g-efcG%Rqqdo@ z%loFZZngg(&{bmy`4@}P#XS1Xm`OPSL*vx;pi4N{&Q*QH<+yKK7an5MXQ6+ zAe}zC-<3Ja{Ma9fgI8D(`78TT^6lHVFS0`VsijLJL8DEL26-kfUSpWj`|S74A9cgZ zZee3LG8LITd2&Jn!SoaB+6e@tM4uYCnPN&Qp>;kI(k^yxc9;K2$xmA|sN zs2Q`>XakC~?djcjOn(9$Ol*}8Wfc~lG@CffUUSeOA>gXH!*d+6(tL(d{Vpa$I>lF3 zh6<{rdTr>FMNDK#R{>Z}-{*=F;9@a^rpLQZnO>cJv;d0R$n0v+OvWGfNwNjbzJ2rU zzKZvl*U|PRqfJB@PykI6z4?)%(#3^~MNmM6=`RZ8GdlNoUuLE!tHeGDLlSqZ(N!y=i#VcWj5s}TJ6_B6=Z_8dM1dpK05x0@bEE)Vjb%XW;$xs-#LpiI6<`) zi{Qe(h&Ulv-ZU6c@Y*La#hVJ%YWWrBA@5%C-waQ!ycSJ- zDTb7u(13UVufne|+}iI#ogs`fBmvLx*++2fJMt!X>JUkp2e7{Q43KXZ+ua)`0< zZRd*S&!Qz}bBdDo9;bg;%v2A-Ls?Rz#IlIU$Z?v6Lpr*C`!j0JyePOLq~zJymnJxI zcJ6Lin>G2h3WGM^pIh*})h>f|?cS~IiWRpMkFaWyBrM_+^a`_~jsJY|zXVG5B=WDEHpiBUv+->zSo-1>>wB(Xgj|v zamt{z>6n&l`p>=J`*xe_RbkdkzR~af$T%1xY{!?F@ySH_NM^f2dq!ChOruIl9FAnI z`TYIjSS_u0PrHSlkjC3=?=|8};#>UCkCv>e`+KG!87$iAU4-neSPf77A+UuaSPq5K z4m)(tp3M|v`rR)PM~?g>{M};fDX6`5{|_8%Hury*6Oa0U8HTm)Kc>yZcbJgHa&Gg6 zj@^O}YJK+(=uWTao6Z4CnoP?11j3i8yoI)ra8%yaW%lI<-PRWLXMR8(~Az ztb2JOlkQO~-6#DyJwliDgS4lVa8}5YZ{%);zb##Eb9S8{!s6faR|kLG&(IF}gIKhb zuEPuEEX7TnF#%=i>W7S@+;@BoRR^8IqaBY6VuDJaHncuY-*8L)R*da14hc{K7L<(BDhI(HKyQa#2(DXD$=*0A#f$8eTP z|F|SsN5TA>8KT6&6%QTwhLP=@DHmiuS87aDn+f4D));u<(TeJKqTKj9FUKds=n22|im?6TW z_^lCk%cjz&0|pEjok6W}tEPw=`g8?0NGEw@a862}VndKHwt;8pow1@c_HOF((i9Je zlh1zl&>S%Jv~j<9fFuv^9qYOxVF(eOJ{_sZ6ZfMVhd;DpZpCa^tvI9GZ+^M^##dd8 z!kO5lp^e@4sZ~`1c*v4*tIf<})W2R&y?sde^+fA!5H6<~-QHc86+)_a#ayKK$Zxh3 z?+V~n*X(+JnG8y`_S>xtCw=V+6YkVJ4ZOC{_4hMt)W@z?CV$eS z$1b1F-(Fea5kIH$T9((4(o?5ABE}mO#;vOGzVEftdSL)u2q{0NU0som4-6Q<(X9@XZovk0w+^hnCqrQNTlp zDtaVGVQ3i|mONOF%Ix%A_%HM1+;W?p)E`CaV*hu#BCYn?_(waI<%Dfyd#B}8mX|MF zty7paF1}A;oL2k+FNc%4a}B1z%&J6YKMUlbeb&R_P?rwJ_$w5<9)e<7dw9fShlhL$C zcUJKajwd%zp>)SinOwAm>W7og+>wd~M5wn?c=$*3HpRnTZZ%*2n1uR#;m5@AboFk* zyYW|R{z6G>)jxF&9{XOLR?>lgA}DzNOHeTVz*$1bIeS$IkssYK=X0V<$+q^_t^}QP za$Sw&NM7k5Q$|dOPcjn=4u`owc^CUqJF>4WRk!0xx0ZM2n-~13`R*Jg`O*LOk>s|` zG2rdZuaqN6N&0lc=7B=>gJpd>WuPKO^7Vpp^jOjeCp1taUd_mu0yJn%%Ze&U8!xU; ztmQN_g<`8XLjfRaD5b_nQ|;aWg)4=oWSCOi5@c2|ZMWMnn-h?aUZa=}42SH1x83CF zG2b$37gm(UVCpPt#O1{$3JWy}(H*&yxoGD5R`r3C2tPWS&L|qL_*mQK>fenHbz5ca zEA}1p4y^-zckkZSHEx;!V&aQApIbvHZbne;G?lEz-+$3=yJ72gp<|5xux(q^03~(p z5$uwID_=0H(f6%$VswvTu9CRpDfYs=QjWn{*;g|VQCrfjlYcM&_I1Y&9ay6}LP8uc zKkUP@(K2Tojl6UY8(Yt)p{6tj)KvTP&%Xl46iWf(3kCsn4i@b3I|Z7muCHv5ka7C; z8>$qX7C&vr#K*MxxISbaKBI6)P;(_SbC(7%{Uv2VYmW1As*dRC~sPNsI5z3}b%Mt_uJ0#C5I#K98$bsFqx@{0?i z4ZJ_%u_ukoJm!uGQgNc=&Zvg7Z|aX-e0lHw{T5QLlnNptXAWoy&kFf8DvT!;o{AlJ z=XX+=>;t2p#Og1gfeYu!xqxli81$TnniW6Vqe!@Vj2{ib7-f_L{;-w^ye}q9c>Br< zSz)#3TXAzE63waRIn zi~Kq~)^dd@Na-Uopuw7&lSmK4)PzdoUi90W4JGrmxe1C#c+*(W70t4+=nvOM23CMdm=RvbN9G9Bczeu&UC@82On=;p za`bON$jdgY-Bw!bxO8b1kX(R9%<2SYA2VQf1!}-;jzQ5bVi!_@_#c7iPo|)-0Ylss z7Ck8NgES1ASm~|0T4r-CTmDm6ghvftm>smw4aQWB89HyP|BJZ2aj9 z(^j1aQPO3Td7BCM4MbJ^7zvbiYwx<=`}1cR9!da&URe#OG~Dlkc_2Hfj#1Pt!{@}V z{4~FBm4)XM#ppM2j4`B6E1w%^Yy3EHQ(A_~7Zjs)Y^y3-+dL5rQR%-%OF8snb0$hp zri@JH-Z2MPl6sE6_&p6Wtoqm$Uk5JPFnal4UyC6NoiZKA$ogTegiZ!=eLvAG7%!+`m`%+x)WFWF`T^emc zBoQeFkWIw!~k|S1phz{ zAOTZ*d;89zs?%IHY&~!IxAv=8hq^VqnKey~QoNx>3q-)epYFn;^~zRwt0u#`UOWm( zA%PcHm^Fd%kCbT;%r?)v09sUliLRAT1B=a-@OqIclPD6A2nflHr>531TSLf(!X?yj zMg=C#(pT)QWvadPq^?e1_n;>}G5(A3*x9WiJ9%J zsDj%vBXCLCQvKeriZzsCLcwP7i;IiSmYQ3CayDUmBj>2hZ zLUR(=?hYe#lzXvtR8*9hT#DJ^8Xt!yJP(&zKM=(SAi_CtU1c+l#nh&%B(lSuf-uwyRtZ1 z?}TyfCvWvQA${Q+(xdUX=39BTD= zit3w>4p68vsU}!ULp$HEes^V?ji>7BR^?^W!mp^iucfD#SDvN{Zq^#8G(qPJSXapa zTW~SI#N$Nxj+*vea;R)0$$+9GTQJHm~&HIz>qz>gM#pSST!hd2_9< zSM36Zsxg18>CjZv;SV8600j>w#sghiA($nWx?Qs!vlERRB%Hn-o~mwn%0BXmjfF)R zf@naEk{)3_&or5(syT>@6Vmyaq+tj}=1rlTtTz|!uT8=TSwnt*BJokNgfcQRT#T4I zbuKu=5M6RC8%f4jL+7Wt&9=<#U3*r2Eh9vso__`4GNtJD7M657aGB}}ZyR@3u3ALyu$ngecb^1s-AC8#Q`~4?#6F>~ zuaW9=lw_{;^D9Vlwo;CK^u3MGlzojs^RjxL7=(K-W3$NDSKLbdM3I`;&lvzA`O^@D z1p8j@{)5acEC~XihBJ1nz@@=iZywAUwfESzHi~P~d20Rg-FK~-erMDzO<_ex8dL^~ z9{>T?G?0nT5kf>!u#}mSjWuY}ju$-{mI(U8oC zP$OZSEkg?F4V8g7wShS3?2z*aRR(>|oN4RJArgI~N8kksI3J)PDOMbmr}c$e#_!PBeDRu-lO`o)N6`C3>aW}7iD<2%(7nfa(o2!A}jkEn)@N+sRWiH=+ zgiNYdU4d;tt2S+?rg~2)p{X(rz6FXgY}n&e*VfH-!)Tct;R<`EGJ)x$xDZj?+48h% zPF3`Kjgb#qub>yx$ef&QZ=zxh(l8GmGgF*g*uj-AptGs0db;n#cPW~Q?&5K2 z@YV!150sk1JjBo*&?31Jd%Kfk-jZ&mxB*u+qCsLhwlpCi*7K(f5uh?=-uVx4)8!R! zmC|Lu2KhZNf2k>x8}o0sebTV3Bqc#Gzy`QOvbQyyAxSW;+I{gUu{@gk`6bm9o`t8t zTBPtou4);m&uClFy^A#?`;1uh!};^)HRjHF_LQ@7hwDyot|0-*a63O-`HvGmin6ZX z|J;Oq;Zk$}=C0evA3~+&%k8KWkvbOgr?b|PWko8nDrVVafalCI5T3+SD{jsf zTnz}m2jkWJeCxbg1RPa3qn*xr!(JU7_hz7ys;3aGxO+n=F&b}Tv+O?lPGRs4=uNKF zY2IW?4<=yGeCI5OASs0!r?wJ}<|GIKdo)N_bJiZT38d7l$0%~|i6vWLsKweRnw5uX z5TM1$P#PHxOlbd>BS*N|1e{nB3!CBiDT1_y3^8RMZtda{%{9=VgmJ;u;6=&pvx6fD1afdR zS_SjfhZ*F!pj?r}g$J(CppYTRXm$F8338hh2D7O)bwX~PZey;UHer9<{XQKLW4SOe zj6C~MUyQuOrvnXIr62vhHH_uQFXOJm8eXawRn)`tqNJ>8g^aRsm z7m*Omn6o~88H4?e>}X`KPP}~-HM|jFJjHBOE6*;1VW*S}9FGxQ)jvDcI%W!jo*UeI z#kd{bpucDtpv_zX#t`Bhq?&2TvCXsO8XW@zTWs-TI)7%YvuxQi@qQRM@cdsx6Z%|q z(ysymFQg2XV_?Y?;%1e~=}naR>n~Kd@~lNvt-2lZpUmHW`277}{tt-ys-O9<&T{^j l*-Fb5yw?N#2XFJXOX8r=$#3H)tAe<4()6$6zg+O$zX5uEGV%Zb literal 0 HcmV?d00001 diff --git a/docs/zh_CN/api-guides/low-power-mode.rst b/docs/zh_CN/api-guides/low-power-mode.rst index 2dcf30dd9098..4d6851ef64f7 100644 --- a/docs/zh_CN/api-guides/low-power-mode.rst +++ b/docs/zh_CN/api-guides/low-power-mode.rst @@ -731,3 +731,293 @@ Deep-sleep 有如下可配置选项: .. only:: esp32c2 平均电流约 4.9 μA + +.. only:: esp32c6 + + 目标唤醒时间 (TWT) + ---------------------------------- + + 目标唤醒时间 (Target Wake Time, TWT) 是 Wi-Fi 6 中引入的一项特性,旨在降低设备功耗和提高网络效率。 + + 在以往的 Wi-Fi 节能机制中,设备可能需要在每个 DTIM 周期醒来与 AP 交换数据,而在 TWT 机制中支持 AP 和设备协商得到特定的唤醒时间,设备会在这些时间点醒来与 AP 进行数据交换,而其余时间则处于休眠状态。TWT 协商的唤醒和休眠时间取决于设备具体的应用需求。例如,有些传感器设备需要定时上传数据,在该场景下设备可以与 AP 建立 TWT 协商,相隔多个小时交换一次数据。实际应用中可根据具体需求定制唤醒时间,在不影响设备正常工作的情况下降低功耗。 + + AP 可以与多个设备建立 TWT 协商。利用 Wi-Fi 6 的多用户特性,AP 可以对上行和下行数据传输做出合理协调,从而减少信道竞争,提高传输效率。 + + TWT 类型 + ++++++++++ + + 根据协商类型和工作模式,可以把 TWT 分为: + + - **Individual TWT (iTWT)** + + iTWT 模式下,AP 与终端设备建立的是一对一的 TWT 协商。 + + - **Broadcast TWT (bTWT)** + + 在 bTWT 模式下,AP 通过 Beacon 帧广播 TWT 信息,以组的形式来管理多个终端设备的 TWT 过程。终端设备可以根据 Beacon 中的 TWT 信息选择执行加组操作。 + + .. note:: + 在建立 TWT 协商前,需要确认 AP 是否支持并开启了 TWT 功能。{IDF_TARGET_NAME} 当前只支持 iTWT 模式。 + + TWT 工作流程 + ++++++++++++ + TWT 工作流程一般分为 TWT 协商建立、TWT 协商暂停/恢复、TWT 协商终止。TWT 协商建立后,Station 就可以按照协商的参数进入休眠状态,直到约定好的下一个 TWT 时间点到来时苏醒。 + 对已经建立的 TWT,用户可以根据需求协商暂停/恢复 TWT 或者终止 TWT。 + + - TWT 协商建立 + + - Individual TWT 协商建立 + + 在 iTWT 协商建立过程中,通常由 Station 充当请求发起方发送 TWT 请求,而后 AP 作为接收方对该请求做出回应。AP 也可以主动向 Station 发起 TWT 协商建立过程。 + 在成功建立起 iTWT 协商后,Station 可以进入休眠状态,直到约定好的下一个 TWT 时间点到来时苏醒,该时间点通过和 AP 间的协商得到。Station 醒来后和 AP 进行数据交换,这段时间被称为 TWT 服务时间 (Service Period, SP)。 + TWT SP 的持续时间被称为 TWT Wake Duration,其最小值为 256 微秒。当一次 TWT SP 结束后,Station 进入休眠状态直到下次 TWT SP 醒来进行数据传输。本次 TWT SP 的起始到下次 TWT SP 的起始的时间间隔被称为 TWT Wake Interval。下图为基本的 iTWT 示例: + + .. figure:: ../../_static/itwt_setup.png + :align: center + + Individual TWT 协商建立过程示例 + + Station 在 iTWT 协商建立时可以发送不同类型的请求,AP 会根据请求类型及参数做出对应的回复。用户需要根据 AP 回复中的类型和具体参数决定后续的操作逻辑。Station 所发送的请求类型有 ``Request``、``Suggest`` 和 ``Demand``。 + AP 的回复类型可分为 ``Accept``、``Alternate`` 和 ``Dictate``。下表描述了发送不同请求时 AP 可能的回复以及不同情况下对应的含义: + + .. list-table:: + :header-rows: 1 + :widths: 20 10 40 + + * - 请求类型 + - AP 回复 + - 含义 + * - Request, Suggest or Demand + - No response + - 在该情况下 AP 不会与 Station 建立 iTWT 协商。 + * - Suggest or Request + - Accept + - AP 同意建立 iTWT 协商,其使用的参数以回复中 TWT 参数为准。回复中的 TWT 参数有可能与请求中不一致。 + * - Demand + - Accept + - AP 同意建立 iTWT 协商,且回复中的 TWT 参数与请求中的一致。 + * - Demand or Suggest + - Alternate + - AP 使用该回复类型代表给 Station提供一组备选 TWT 参数,此时不会建立 iTWT 协商。后续 Station 可以发送新的请求,但 AP 仍有可能使用该组参数。 + * - Demand or Suggest + - Dictate + - AP 使用该回复类型代表给 Station 提供一组备选 TWT 参数,此时不会建立 iTWT 协商,同时也表明 AP 不接受除该组参数以外的其他参数。后续 Station 可以发送新的请求,但只有参数与所提供的备选参数一致才会收到 Accept 回复。 + * - Request, Suggest or Demand + - Reject + - 在该情况下 AP 不会与 station 建立 iTWT 协商。后续 Station 可以更改 TWT 参数发送新的请求。 + + 在 TWT SP 中依照数据交互时的操作可以将 TWT 进一步地细分为多种类型,下表描述了这些类型间的差异: + + .. list-table:: + :header-rows: 1 + :widths: 10 20 + + * - Types + - 含义 + * - Trigger-enabled + - AP 会在 SP 中使用 Trigger 帧来协调 Station 的数据传输。 + * - Non trigger-enabled + - 在 SP 中不需要使用 Trigger 帧。 + * - Announced + - Station 会发送 QoS Null 帧告知 AP 其唤醒状态。 + * - Unannounced + - 不需要发送 QoS Null 帧。 + + - Broadcast TWT 协商建立 + + 与 iTWT 不同的是,在 bTWT 模式下 AP 将 TWT 信息放在 Beacon 帧中进行广播宣告。Station 接收到 Beacon 后,可以向 AP 发送请求申请选择加入某个 TWT。 + 当建立起 bTWT 协商后, Station 和 AP 会在协商好的 TWT SP 中进行数据传输。 + + 与 iTWT 类似,可以把 bTWT 进一步分成 Trigger-enabled 和 Non trigger-enabled 类型,以及 Announced 和 Unannounced 类型,具体的行为差异可以参考 iTWT 中的描述。 + + - TWT 协商暂停/恢复 + + 建立起 TWT 协商后, Station 可以通过向 AP 发送 TWT Information 帧暂停或者恢复指定的 TWT 协商。由 flow_id 来标识需要暂停或者恢复的 TWT 协商,具体可以参考 TWT 参数配置。 + + .. figure:: ../../_static/itwt_suspend.png + :align: center + + Individual TWT 协商暂停/恢复过程示例 + + - TWT 协商终止 + + 建立起 TWT 协商后, Station 可以通过向 AP 发送 TWT Teardown 帧终止指定的 TWT 协商。由 flow_id 来标识需要终止的 TWT 协商,具体可以参考 TWT 参数配置。 + + .. figure:: ../../_static/itwt_teardown.png + :align: center + + Individual TWT 协商终止过程示例 + + TWT 参数配置 + ++++++++++++ + + 在使用过程中,需要配置 TWT 和低功耗模式的相关参数,其中低功耗模式相关参数决定了设备在休眠状态下的行为模式。本小节将主要阐述如何配置 TWT,有关低功耗模式下的参数配置,请参考 `如何配置 Wi-Fi 场景下低功耗模式`_。 + + - Individual TWT 参数配置 + + 在建立 Station 和 AP 间的 iTWT 时,使用 :component_file:`esp_wifi/include/esp_wifi_he_types.h` 中定义的结构体 :cpp:type:`wifi_twt_setup_config_t` 来配置 TWT 的相关参数,其定义如下: + + .. code-block:: C + + typedef struct + { + wifi_twt_setup_cmds_t setup_cmd; + uint16_t trigger :1; + uint16_t flow_type :1; + uint16_t flow_id :3; + uint16_t wake_invl_expn :5; + uint16_t wake_duration_unit :1; + uint16_t reserved :5; + uint8_t min_wake_dura; + uint16_t wake_invl_mant; + uint16_t twt_id; + uint16_t timeout_time_ms; + } wifi_twt_setup_config_t; + + :cpp:type:`wifi_twt_setup_config_t` 中各个字段的含义如下: + + .. list-table:: + :header-rows: 1 + :widths: 15 45 + :align: center + + * - 字段 + - 描述 + * - setup_cmd + - 指示了 TWT 建立时请求和回复使用的命令类型,具体类型请参阅 :cpp:type:`wifi_twt_setup_cmds_t` 。 + * - trigger + - 值为 1 时配置 TWT 类型为 Trigger-enabled,值为 0 时配置为 Non trigger-enabled。 + * - flow_type + - 值为 1 时配置 TWT 类型为 Unannounced,值为 0 时配置为 Announced。 + * - flow_id + - 当建立起一个 iTWT 协商后,AP 会为其分配 flow_id。Station 在协商建立请求中可以指定 flow_id,但在 AP 的回复中该字段可能会被改变。 + * - wake_invl_expn + - TWT Wake Interval 指数部分。 + * - wake_duration_unit + - TWT Wake Duration 计数单元。为 0 代表 256 微秒,为 1 代表以 TU (1024 微秒) 为单位。 + * - reserved + - 保留字段。 + * - min_wake_dura + - 该字段代表 Station 期望处于唤醒状态的时间,以 ``wake_duration_unit`` 作为基本单位。 + * - wake_invl_mant + - TWT Wake Interval 尾数部分。 + * - twt_id + - TWT 配置标识。在发起多个 TWT 请求时,该字段用于在 handler 中区分不同的 TWT 参数配置。 + * - timeout_time_ms + - TWT 请求超时时间,单位为毫秒。 + + 需要指出的是,Station 在协商中所期望的 TWT Wake Interval 为 wake_invl_mant * 2\ :sup:`wake_invl_expn`\,单位是微秒。 + 而所期望的 TWT Wake Duration 为 min_wake_dura * wake_duration_unit。 + + .. note:: + 注意, TWT Wake Interval 和 TWT Wake Duration 的差值需要大于 10 毫秒。 + + 配置示例如下: + + .. code-block:: C + + wifi_twt_setup_config_t setup_config = { + .setup_cmd = TWT_REQUEST, + .flow_id = 0, + .twt_id = 0, + .flow_type = 0, + .min_wake_dura = 255, + .wake_duration_unit = 0, + .wake_invl_expn = 10, + .wake_invl_mant = 512, + .trigger = 1, + .timeout_time_ms = 5000, + }; + + 以上配置指定建立 TWT 请求时使用的类型为 Trigger-enabled,Announced,期望的 TWT Wake Interval 为 524288 微秒, TWT Wake Duration 为 65280 微秒。配置好 :cpp:type:`wifi_twt_setup_config_t` 后,调用 API :cpp:func:`esp_wifi_sta_itwt_setup` 向 AP 发起 iTWT 建立请求。 + + .. note:: + {IDF_TARGET_NAME} 支持用户调用 API :cpp:func:`esp_wifi_sta_itwt_set_target_wake_time_offset` 配置相对于目标唤醒时间的偏移时间。 + + TWT 事件 + ++++++++++ + + - WIFI_EVENT_ITWT_SETUP + + 发送请求后,用户可以在 :cpp:enumerator:`WIFI_EVENT_ITWT_SETUP` 事件的对应处理程序中获取请求结果并自定义处理逻辑。事件结果保存在 :cpp:type:`wifi_event_sta_itwt_setup_t` 结构体中,其成员变量 status 指示了此次事件的状态。 + 当 status 为 :c:macro:`ITWT_SETUP_SUCCESS` 时代表请求成功收到了对应回复,为其他值代表请求失败。在得到请求成功的状态后,用户可以从该结构体中的 config 成员变量中得到 AP 回复中的具体参数,并根据具体参数决定后续的处理逻辑。 + 例如,Station 发送了类型为 Demand 的 TWT 请求,收到 AP 的回复类型为 Dictate,用户此时可以考察回复中的 TWT 参数是否可行,若可行便可以发送一个新的 TWT 请求与 AP 继续建立 TWT 协商,并且该请求中的 TWT 参数需要与 AP 回复中一致。 + + 在 Station 未主动发送请求时也有可能触发 :cpp:enumerator:`WIFI_EVENT_ITWT_SETUP` 事件,这种情况下对应的是 AP 主动向 Station 发起 iTWT 协商建立过程,此时 AP 向 Station 发送的帧中会带有 TWT 参数。同样地,用户可以在 :cpp:enumerator:`WIFI_EVENT_ITWT_SETUP` 事件的对应处理程序中获取结果并自定义处理逻辑。 + 用户需要检查 config 成员变量中 AP 发送的 TWT 参数类型,一般有两种情况: + 1. AP 发送的 TWT 参数为 Accept 类型,此时 Station 会与 AP 建立起使用该 TWT 参数的 iTWT 协商。若用户不希望建立此 iTWT 协商,可以向 AP 发送 Teardown 帧。 + 2. AP 发送的 TWT 参数为 Alternate 或 Dictate 类型,此时 Station 不会与 AP 建立起 iTWT 协商,但可以在接下来使用该参数向 AP 发起 iTWT 协商建立请求。 + + - WIFI_EVENT_ITWT_SUSPEND + + 在调用 API :cpp:func:`esp_wifi_sta_itwt_suspend` 请求暂停已经建立的 iTWT 协商时, 用户可以在 :cpp:enumerator:`WIFI_EVENT_ITWT_SUSPEND` 事件的对应处理程序中获取请求结果并自定义处理逻辑。事件结果保存在 :cpp:type:`wifi_event_sta_itwt_suspend_t` 结构体中,其成员变量 status 指示了此次事件的状态。 + 当 status 为 :c:macro:`ESP_OK` 时代表成功暂停了指定的 iTWT 协商,为其他值代表请求暂停失败。 + + .. note:: + 注意,调用 API :cpp:func:`esp_wifi_sta_itwt_suspend` 请求暂停 iTWT 时,用户需要指定对应 iTWT 的 flow_id 以及暂停时间。需要注意的是,当暂停时间大于 0 时,对应 iTWT 会在暂停指定时间后恢复,而当暂停时间为 0 时,对应的 iTWT 会暂停,直到被用户调用 API 手动恢复为止。 + + - WIFI_EVENT_ITWT_TEARDOWN + + 在调用 API :cpp:func:`esp_wifi_sta_itwt_teardown` 请求终止 iTWT 时,用户可以在 :cpp:enumerator:`WIFI_EVENT_ITWT_TEARDOWN` 事件的对应处理程序中获取请求结果并自定义处理逻辑。事件结果保存在 :cpp:type:`wifi_event_sta_itwt_teardown_t` 结构体中,其成员变量 status 指示了此次事件的状态。 + 当 status 为 :cpp:enumerator:`ITWT_TEARDOWN_SUCCESS` 时代表成功终止了指定的 iTWT 协商,为其他值代表终止 iTWT 失败。调用 API 时用户需要指定需要终止的 iTWT 的 flow_id。 + + - WIFI_EVENT_TWT_WAKEUP + + 当 Station 在休眠中醒来时,Wi-Fi 驱动程序将会上报 :cpp:enumerator:`WIFI_EVENT_TWT_WAKEUP` 事件,用户可以在该事件的对应处理程序中自定义处理逻辑。事件结果保存在 :cpp:type:`wifi_event_sta_twt_wakeup_t` 结构体中,成员变量 twt_type 指示了此次事件 TWT 的类型,成员变量 flow_id 指示了此次醒来的具体的 TWT。 + + - WIFI_EVENT_ITWT_PROBE + + 调用 API :cpp:func:`esp_wifi_sta_itwt_send_probe_req` 在 iTWT 期间发送 probe request 时,用户可以在 :cpp:enumerator:`WIFI_EVENT_ITWT_PROBE` 事件的对应处理程序中获取请求结果并自定义处理逻辑。事件结果保存在 :cpp:type:`wifi_event_sta_itwt_probe_t` 结构体中,其成员变量 status 指示了此次事件的状态。 + 当 status 为 :cpp:enumerator:`ITWT_PROBE_SUCCESS` 时代表成功发送 probe request 并且接收到 AP 回复的 probe response,为其他值代表发送或者接收 probe 失败。 + + + 有关 iTWT 使用的更多信息,可以参考示例 :example:`wifi/itwt` 。 + + TWT 功耗分析 + +++++++++++++ + + 为了展现 TWT 在节省设备功耗方面的优势,我们使用功率分析仪追踪了 {IDF_TARGET_NAME} 在不同模式下的电流情况。如下图所示,{IDF_TARGET_NAME} 首先处于 DTIM 模式,接着与 AP 建立起 iTWT 协商,TWT Wake Interval 为 10 s,在 TWT SP 结束后,{IDF_TARGET_NAME} 会进入 Light-sleep 状态直到下个 SP 到来时唤醒。 + 其中 :cpp:type:`wifi_twt_setup_config_t` 配置示例如下: + + .. code-block:: C + + wifi_twt_setup_config_t setup_config = { + .setup_cmd = TWT_REQUEST, + .flow_id = 0, + .twt_id = 0, + .flow_type = 0, + .min_wake_dura = 255, + .wake_duration_unit = 0, + .wake_invl_expn = 10, + .wake_invl_mant = 10000, + .trigger = 1, + .timeout_time_ms = 5000, + }; + + .. figure:: ../../_static/itwt_10s_current.png + :align: center + + DTIM 与 iTWT 模式下的电流图 + + 进一步,将 TWT 协商中的 TWT Wake Interval 参数更改为 30 s,下图展现了参数变化对于电流的影响。 + 其中 :cpp:type:`wifi_twt_setup_config_t` 配置示例如下: + + .. code-block:: C + + wifi_twt_setup_config_t setup_config = { + .setup_cmd = TWT_REQUEST, + .flow_id = 0, + .twt_id = 0, + .flow_type = 0, + .min_wake_dura = 255, + .wake_duration_unit = 0, + .wake_invl_expn = 10, + .wake_invl_mant = 30000, + .trigger = 1, + .timeout_time_ms = 5000, + }; + + .. figure:: ../../_static/itwt_30s_current.png + :align: center + + 更改参数后的 DTIM 与 iTWT 模式下的电流图 From 3fcedf6432be1f99924948045922f522fdbc5590 Mon Sep 17 00:00:00 2001 From: yinqingzhao Date: Thu, 4 Jul 2024 15:42:04 +0800 Subject: [PATCH 14/17] fix(wifi):fix some wifi bugs --- components/esp_wifi/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 97850a864669..b427dba32c98 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 97850a864669fe1e98c7d812984e2d5ab70ccc5c +Subproject commit b427dba32c98cc1cbc2aa286c8d35679649aa99d From a45e4b3dca487b05f2d4935e65d92e4bc81bf969 Mon Sep 17 00:00:00 2001 From: Jakob Hasse Date: Mon, 24 Jun 2024 11:37:38 +0200 Subject: [PATCH 15/17] fix(bootloader_support): Fixed pattern in RNG enable function on C6 to avoid output on IO0 --- components/bootloader_support/src/bootloader_random_esp32c6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bootloader_support/src/bootloader_random_esp32c6.c b/components/bootloader_support/src/bootloader_random_esp32c6.c index 682e48544c8c..0efd9d4c086d 100644 --- a/components/bootloader_support/src/bootloader_random_esp32c6.c +++ b/components/bootloader_support/src/bootloader_random_esp32c6.c @@ -53,7 +53,7 @@ void bootloader_random_enable(void) // create patterns and set them in pattern table uint32_t pattern_one = (SAR2_CHANNEL << 2) | SAR2_ATTEN; // we want channel 9 with max attenuation - uint32_t pattern_two = SAR1_ATTEN; // we want channel 0 with max attenuation, channel doesn't really matter here + uint32_t pattern_two = (SAR2_CHANNEL << 2) | SAR1_ATTEN; // we want channel 9 with max attenuation uint32_t pattern_table = 0 | (pattern_two << 3 * PATTERN_BIT_WIDTH) | pattern_one << 2 * PATTERN_BIT_WIDTH; REG_WRITE(APB_SARADC_SAR_PATT_TAB1_REG, pattern_table); From cd0ffdac129e773c66c70d5bede02864c788335a Mon Sep 17 00:00:00 2001 From: "wangtao@espressif.com" Date: Fri, 5 Jul 2024 10:55:10 +0800 Subject: [PATCH 16/17] feat(wifi): add softap csa&dtim&wait_bcast_data setting and ignore err nodata v5.2 --- components/esp_rom/esp32c2/ld/esp32c2.rom.ld | 2 +- components/esp_wifi/Kconfig | 21 +++++++++++++++---- .../esp_wifi/include/esp_private/wifi.h | 17 ++++++++++++--- components/esp_wifi/include/esp_wifi.h | 4 ++-- components/esp_wifi/include/esp_wifi_types.h | 2 ++ components/esp_wifi/lib | 2 +- components/esp_wifi/src/wifi_init.c | 10 ++++++--- 7 files changed, 44 insertions(+), 14 deletions(-) diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index 2b58e7ac87f4..2ce2111a8175 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -1925,7 +1925,7 @@ ieee80211_send_deauth = 0x40002120; ieee80211_alloc_deauth = 0x40002124; ieee80211_send_proberesp = 0x40002128; ieee80211_getcapinfo = 0x40002130; -sta_rx_csa = 0x40002134; +/* sta_rx_csa = 0x40002134; */ /* sta_recv_sa_query_resp = 0x40002144; */ ieee80211_set_max_rate = 0x4000214c; ic_set_sta = 0x40002150; diff --git a/components/esp_wifi/Kconfig b/components/esp_wifi/Kconfig index 86779183906e..07437eca57e8 100644 --- a/components/esp_wifi/Kconfig +++ b/components/esp_wifi/Kconfig @@ -327,17 +327,30 @@ menu "Wi-Fi" int "Minimum active time" range 8 60 default 50 - depends on ESP_WIFI_SLP_IRAM_OPT help - The minimum timeout for waiting to receive data, unit: milliseconds. + Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. When the station enters the active state, + it will work for at least ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME. If a data packet is received or sent + during this period, the time will be refreshed. If the time is up, but the station still has packets + to receive or send, the time will also be refreshed. unit: milliseconds. config ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME int "Maximum keep alive time" range 10 60 default 10 - depends on ESP_WIFI_SLP_IRAM_OPT help - The maximum time that wifi keep alive, unit: seconds. + Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. If no packet has been + sent within ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME, a null data packet will be sent + to maintain the connection with the AP. unit: seconds. + + config ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME + int "Minimum wait broadcast data time" + range 10 30 + default 15 + help + Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. When the station knows through the beacon + that AP will send broadcast packet, it will wait for ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME + before entering the sleep process. If a broadcast packet is received with more data bits, the time + will refreshed. unit: milliseconds. config ESP_WIFI_FTM_ENABLE bool "WiFi FTM" diff --git a/components/esp_wifi/include/esp_private/wifi.h b/components/esp_wifi/include/esp_private/wifi.h index 12c4122f9455..ec9f2fae1ffe 100644 --- a/components/esp_wifi/include/esp_private/wifi.h +++ b/components/esp_wifi/include/esp_private/wifi.h @@ -618,13 +618,13 @@ esp_err_t esp_wifi_internal_set_spp_amsdu(wifi_interface_t ifidx, bool spp_cap, void esp_wifi_internal_update_light_sleep_default_params(int min_freq_mhz, int max_freq_mhz); /** - * @brief Set the delay time for wifi to enter the sleep state when light sleep + * @brief Set the min active time for wifi to enter the sleep state when light sleep * - * @param return_to_sleep_delay: minimum timeout time for waiting to receive + * @param min_active_time: minimum timeout time for waiting to receive * data, when no data is received during the timeout period, * the wifi enters the sleep process. */ -void esp_wifi_set_sleep_delay_time(uint32_t return_to_sleep_delay); +void esp_wifi_set_sleep_min_active_time(uint32_t min_active_time); /** * @brief Set wifi keep alive time @@ -633,6 +633,17 @@ void esp_wifi_set_sleep_delay_time(uint32_t return_to_sleep_delay); */ void esp_wifi_set_keep_alive_time(uint32_t keep_alive_time); +/** + * @brief Set the min broadcast data wait time for wifi to enter the sleep state + * + * @attention Default sleep wait broadcast data time is 15000, Uint µs. + * + * @param time: When the station knows through the beacon that the AP + * will send broadcast packet, it will wait for a minimum of + * wait_broadcast_data_time before entering the sleep process. + */ +void esp_wifi_set_sleep_wait_broadcast_data_time(uint32_t time); + /** * @brief Configure wifi beacon montior default parameters * diff --git a/components/esp_wifi/include/esp_wifi.h b/components/esp_wifi/include/esp_wifi.h index 6d49a1de9f5e..5bb4d4d28a86 100644 --- a/components/esp_wifi/include/esp_wifi.h +++ b/components/esp_wifi/include/esp_wifi.h @@ -347,7 +347,7 @@ esp_err_t esp_wifi_get_mode(wifi_mode_t *mode); * @return * - ESP_OK: succeed * - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init - * - ESP_ERR_INVALID_ARG: invalid argument + * - ESP_ERR_INVALID_ARG: It doesn't normally happen, the function called inside the API was passed invalid argument, user should check if the wifi related config is correct * - ESP_ERR_NO_MEM: out of memory * - ESP_ERR_WIFI_CONN: WiFi internal error, station or soft-AP control block wrong * - ESP_FAIL: other WiFi internal errors @@ -538,7 +538,7 @@ esp_err_t esp_wifi_scan_get_ap_record(wifi_ap_record_t *ap_record); * - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init * - ESP_ERR_WIFI_NOT_STARTED: WiFi is not started by esp_wifi_start * - ESP_ERR_WIFI_MODE: WiFi mode is wrong - * - ESP_ERR_INVALID_ARG: invalid argument + * - ESP_ERR_INVALID_ARG: It doesn't normally happen, the function called inside the API was passed invalid argument, user should check if the wifi related config is correct */ esp_err_t esp_wifi_clear_ap_list(void); diff --git a/components/esp_wifi/include/esp_wifi_types.h b/components/esp_wifi/include/esp_wifi_types.h index 95dbc8d9447e..25e6d73e4fa2 100644 --- a/components/esp_wifi/include/esp_wifi_types.h +++ b/components/esp_wifi/include/esp_wifi_types.h @@ -298,6 +298,8 @@ typedef struct { uint8_t ssid_hidden; /**< Broadcast SSID or not, default 0, broadcast the SSID */ uint8_t max_connection; /**< Max number of stations allowed to connect in */ uint16_t beacon_interval; /**< Beacon interval which should be multiples of 100. Unit: TU(time unit, 1 TU = 1024 us). Range: 100 ~ 60000. Default value: 100 */ + uint8_t csa_count; /**< Channel Switch Announcement Count. Notify the station that the channel will switch after the csa_count beacon intervals. Default value: 3 */ + uint8_t dtim_period; /**< Dtim period of soft-AP. Default value: 2 */ wifi_cipher_type_t pairwise_cipher; /**< Pairwise cipher of SoftAP, group cipher will be derived using this. Cipher values are valid starting from WIFI_CIPHER_TYPE_TKIP, enum values before that will be considered as invalid and default cipher suites(TKIP+CCMP) will be used. Valid cipher suites in softAP mode are WIFI_CIPHER_TYPE_TKIP, WIFI_CIPHER_TYPE_CCMP and WIFI_CIPHER_TYPE_TKIP_CCMP. */ bool ftm_responder; /**< Enable FTM Responder mode */ wifi_pmf_config_t pmf_cfg; /**< Configuration for Protected Management Frame */ diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index b427dba32c98..21b94ecb0303 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit b427dba32c98cc1cbc2aa286c8d35679649aa99d +Subproject commit 21b94ecb0303ca880c16585d7f5948ea615c2223 diff --git a/components/esp_wifi/src/wifi_init.c b/components/esp_wifi/src/wifi_init.c index e70facdca011..89746ef82f94 100644 --- a/components/esp_wifi/src/wifi_init.c +++ b/components/esp_wifi/src/wifi_init.c @@ -320,12 +320,16 @@ esp_err_t esp_wifi_init(const wifi_init_config_t *config) esp_pm_register_light_sleep_default_params_config_callback(esp_wifi_internal_update_light_sleep_default_params); - uint32_t sleep_delay_us = CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME * 1000; - esp_wifi_set_sleep_delay_time(sleep_delay_us); +#endif + + uint32_t min_active_time_us = CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME * 1000; + esp_wifi_set_sleep_min_active_time(min_active_time_us); uint32_t keep_alive_time_us = CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME * 1000 * 1000; esp_wifi_set_keep_alive_time(keep_alive_time_us); -#endif + + uint32_t wait_broadcast_data_time_us = CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME * 1000; + esp_wifi_set_sleep_wait_broadcast_data_time(wait_broadcast_data_time_us); #if CONFIG_FREERTOS_USE_TICKLESS_IDLE #if SOC_PM_MODEM_RETENTION_BY_REGDMA From e8ac1be60c27121ed546ef122ad7421278c20ac7 Mon Sep 17 00:00:00 2001 From: Rahul Tank Date: Fri, 5 Jul 2024 18:08:13 +0530 Subject: [PATCH 17/17] Revert "fix(nimble): Added debug print to check for skipped adv report" This reverts commit e29f31bca4387bd146f39a1216effffeab8d2e2a. --- components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c | 1 - 1 file changed, 1 deletion(-) diff --git a/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c b/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c index 4fa8a1090b8a..605b831211cd 100644 --- a/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c +++ b/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c @@ -217,7 +217,6 @@ static int host_rcv_pkt(uint8_t *data, uint16_t len) evbuf = ble_transport_alloc_evt(1); /* Skip advertising report if we're out of memory */ if (!evbuf) { - ESP_LOGI(TAG, "Skipping advertising report due to low memory"); return 0; } } else {