1
6
7
8
9
14
15
16
17
18
19
22
23
24
27
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/* ... */
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "esp_err.h"
#include "esp_attr.h"
#include "soc/soc_caps.h"5 includes
#ifdef __cplusplus
extern "C" {
#endif
/* ... */
typedef struct dedic_gpio_bundle_t *dedic_gpio_bundle_handle_t;
/* ... */
typedef struct {
const int *gpio_array;
size_t array_size;
struct {
unsigned int in_en: 1;
unsigned int in_invert: 1;
unsigned int out_en: 1;
unsigned int out_invert: 1;
}{ ... } flags;
}{ ... } dedic_gpio_bundle_config_t;
/* ... */
esp_err_t dedic_gpio_new_bundle(const dedic_gpio_bundle_config_t *config, dedic_gpio_bundle_handle_t *ret_bundle);
/* ... */
esp_err_t dedic_gpio_del_bundle(dedic_gpio_bundle_handle_t bundle);
/* ... */
esp_err_t dedic_gpio_get_out_mask(dedic_gpio_bundle_handle_t bundle, uint32_t *mask);
esp_err_t dedic_gpio_get_in_mask(dedic_gpio_bundle_handle_t bundle, uint32_t *mask);
/* ... */
esp_err_t dedic_gpio_get_out_offset(dedic_gpio_bundle_handle_t bundle, uint32_t *offset);
esp_err_t dedic_gpio_get_in_offset(dedic_gpio_bundle_handle_t bundle, uint32_t *offset);
/* ... */
void dedic_gpio_bundle_write(dedic_gpio_bundle_handle_t bundle, uint32_t mask, uint32_t value) IRAM_ATTR;
/* ... */
uint32_t dedic_gpio_bundle_read_out(dedic_gpio_bundle_handle_t bundle) IRAM_ATTR;
/* ... */
uint32_t dedic_gpio_bundle_read_in(dedic_gpio_bundle_handle_t bundle) IRAM_ATTR;
#if SOC_DEDIC_GPIO_HAS_INTERRUPT
/* ... */
typedef enum {
DEDIC_GPIO_INTR_NONE,
DEDIC_GPIO_INTR_LOW_LEVEL = 2,
DEDIC_GPIO_INTR_HIGH_LEVEL,
DEDIC_GPIO_INTR_NEG_EDGE,
DEDIC_GPIO_INTR_POS_EDGE,
DEDIC_GPIO_INTR_BOTH_EDGE
}{...} dedic_gpio_intr_type_t;
/* ... */
typedef bool (*dedic_gpio_isr_callback_t)(dedic_gpio_bundle_handle_t bundle, uint32_t index, void *args);
/* ... */
esp_err_t dedic_gpio_bundle_set_interrupt_and_callback(dedic_gpio_bundle_handle_t bundle, uint32_t mask, dedic_gpio_intr_type_t intr_type, dedic_gpio_isr_callback_t cb_isr, void *cb_args);
/* ... */
#endif
#ifdef __cplusplus
}{...}
#endif