1 /* 2 * SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #pragma once 8 9 #include "sdkconfig.h" 10 11 #if CONFIG_ESP_COEX_GPIO_DEBUG 12 #include "esp_err.h" 13 #include "stdbool.h" 14 #include "soc/soc_caps.h" 15 16 #define COEX_GPIO_DEBUG_IO_INVALID SOC_GPIO_PIN_COUNT 17 18 /* Debug signal */ 19 #define COEX_GPIO_DEBUG_SIG_RES_US 10 20 typedef enum { 21 COEX_GPIO_DEBUG_SIG_POSE, 22 COEX_GPIO_DEBUG_SIG_NEGA, 23 } coex_gpio_debug_sig_t; 24 #define COEX_GPIO_DEBUG_SIG_TO_DURATION(sig) ((sig - COEX_GPIO_DEBUG_SIG_NEGA) * COEX_GPIO_DEBUG_SIG_RES_US) 25 #define COEX_GPIO_DEBUG_SIG_CHECK_US 100 26 27 /* User diagram */ 28 #ifdef CONFIG_ESP_COEX_GPIO_DEBUG_DIAG_GENERAL 29 #define COEX_GPIO_DEBUG_DIAG_GENERAL 1 30 #elif defined(CONFIG_ESP_COEX_GPIO_DEBUG_DIAG_WIFI) 31 #define COEX_GPIO_DEBUG_DIAG_WIFI 1 32 #endif 33 34 /* User configuration validity check */ 35 #define COEX_GPIO_DEBUG_IO_COUNT_MAX 12 36 #define COEX_GPIO_DEBUG_IO_COUNT CONFIG_ESP_COEX_GPIO_DEBUG_IO_COUNT 37 38 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX0) 39 #define COEX_GPIO_DEBUG_IO_IDX0 COEX_GPIO_DEBUG_IO_INVALID 40 #else 41 #define COEX_GPIO_DEBUG_IO_IDX0 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX0 42 #endif 43 44 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX1) 45 #define COEX_GPIO_DEBUG_IO_IDX1 COEX_GPIO_DEBUG_IO_INVALID 46 #else 47 #define COEX_GPIO_DEBUG_IO_IDX1 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX1 48 #endif 49 50 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX2) 51 #define COEX_GPIO_DEBUG_IO_IDX2 COEX_GPIO_DEBUG_IO_INVALID 52 #else 53 #define COEX_GPIO_DEBUG_IO_IDX2 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX2 54 #endif 55 56 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX3) 57 #define COEX_GPIO_DEBUG_IO_IDX3 COEX_GPIO_DEBUG_IO_INVALID 58 #else 59 #define COEX_GPIO_DEBUG_IO_IDX3 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX3 60 #endif 61 62 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX4) 63 #define COEX_GPIO_DEBUG_IO_IDX4 COEX_GPIO_DEBUG_IO_INVALID 64 #else 65 #define COEX_GPIO_DEBUG_IO_IDX4 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX4 66 #endif 67 68 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX5) 69 #define COEX_GPIO_DEBUG_IO_IDX5 COEX_GPIO_DEBUG_IO_INVALID 70 #else 71 #define COEX_GPIO_DEBUG_IO_IDX5 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX5 72 #endif 73 74 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX6) 75 #define COEX_GPIO_DEBUG_IO_IDX6 COEX_GPIO_DEBUG_IO_INVALID 76 #else 77 #define COEX_GPIO_DEBUG_IO_IDX6 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX6 78 #endif 79 80 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX7) 81 #define COEX_GPIO_DEBUG_IO_IDX7 COEX_GPIO_DEBUG_IO_INVALID 82 #else 83 #define COEX_GPIO_DEBUG_IO_IDX7 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX7 84 #endif 85 86 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX8) 87 #define COEX_GPIO_DEBUG_IO_IDX8 COEX_GPIO_DEBUG_IO_INVALID 88 #else 89 #define COEX_GPIO_DEBUG_IO_IDX8 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX8 90 #endif 91 92 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX9) 93 #define COEX_GPIO_DEBUG_IO_IDX9 COEX_GPIO_DEBUG_IO_INVALID 94 #else 95 #define COEX_GPIO_DEBUG_IO_IDX9 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX9 96 #endif 97 98 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX10) 99 #define COEX_GPIO_DEBUG_IO_IDX10 COEX_GPIO_DEBUG_IO_INVALID 100 #else 101 #define COEX_GPIO_DEBUG_IO_IDX10 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX10 102 #endif 103 104 #if !defined(CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX11) 105 #define COEX_GPIO_DEBUG_IO_IDX11 COEX_GPIO_DEBUG_IO_INVALID 106 #else 107 #define COEX_GPIO_DEBUG_IO_IDX11 CONFIG_ESP_COEX_GPIO_DEBUG_IO_IDX11 108 #endif 109 110 /* wifi callback -> debug */ 111 void wifi_set_gpio_debug_cb(void (* cb)(int, coex_gpio_debug_sig_t)); 112 int wifi_gpio_debug_max_event_get(void); 113 114 /* functions to check if in ROM */ 115 void lmacProcessTxComplete(void); 116 void lmacTxFrame(void); 117 void pm_update_by_connectionless_status(void); 118 void pm_sleep(void); 119 void pm_dream(void); 120 void pm_beacon_monitor_timeout_process(void); 121 void pm_connectionless_wake_window_timeout_process(void); 122 void pm_coex_schm_process(void); 123 void pm_tbtt_process(void); 124 void pm_rx_beacon_process(void); 125 void ppTask(void); 126 void wDev_IndicateFrame(void); 127 void pm_check_state(void); 128 void pm_tx_null_data_done_process(void); 129 void pm_start(void); 130 void pm_stop(void); 131 void pm_disconnected_wake(void); 132 133 /* coex callback -> debug */ 134 void coex_set_gpio_debug_cb(void (*cb)(int, coex_gpio_debug_sig_t)); 135 int coex_gpio_debug_max_event_get(void); 136 esp_err_t coex_gpio_debug_matrix_init(void); 137 138 /* debug -> coex wrapper */ 139 esp_err_t esp_coexist_debug_matrix_init(int evt, int sig, bool rev); 140 141 /* debug <-> diagram */ 142 void wifi_bind_io_to_evt(uint8_t io_idx, uint8_t evt); 143 void coex_bind_io_to_evt(uint8_t io_idx, uint8_t evt); 144 void diagram_bind_io_to_evt(void); 145 146 /* coex -> debug 147 * configure single gpio debug event */ 148 esp_err_t coex_gpio_debug_matrix_config(int event); 149 /* debug -> internal use */ 150 esp_err_t esp_coexist_gpio_debug_matrix_config(int event); 151 152 #endif 153