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