Skip to content

Commit 48fc964

Browse files
committed
Add empty 'check_gpio_param' to host GPIO
All the approriate gpio_xxx functions now call check_gpio_param. This provides an easy way for a project to add simple range checking by defining a final version of check_gpio_param, which whatever error mechanism it chooses if an invalid value is passed. Refs #2736
1 parent 777b40b commit 48fc964

File tree

2 files changed

+77
-60
lines changed

2 files changed

+77
-60
lines changed

src/host/hardware_gpio/gpio.c

Lines changed: 75 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@
66

77
#include "hardware/gpio.h"
88

9-
PICO_WEAK_FUNCTION_DEF(gpio_set_function)
10-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_function)(__unused uint gpio, __unused enum gpio_function fn) {
9+
PICO_WEAK_FUNCTION_DEF(check_gpio_param)
10+
void PICO_WEAK_FUNCTION_IMPL_NAME(check_gpio_param)(__unused uint gpio) {
11+
12+
}
1113

14+
PICO_WEAK_FUNCTION_DEF(gpio_set_function)
15+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_function)(uint gpio, __unused enum gpio_function fn) {
16+
check_gpio_param(gpio);
1217
}
1318

1419
PICO_WEAK_FUNCTION_DEF(gpio_set_function_masked)
@@ -22,98 +27,104 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_function_masked64)(__unused uint64_t
2227
}
2328

2429
PICO_WEAK_FUNCTION_DEF(gpio_get_function)
25-
gpio_function_t PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_function)(__unused uint gpio) {
30+
gpio_function_t PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_function)(uint gpio) {
31+
check_gpio_param(gpio);
2632
return GPIO_FUNC_NULL;
2733
}
2834

2935
PICO_WEAK_FUNCTION_DEF(gpio_pull_up)
30-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_pull_up)(__unused uint gpio) {
31-
36+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_pull_up)(uint gpio) {
37+
check_gpio_param(gpio);
3238
}
3339

3440
PICO_WEAK_FUNCTION_DEF(gpio_is_pulled_up)
35-
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_pulled_up)(__unused uint gpio) {
41+
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_pulled_up)(uint gpio) {
42+
check_gpio_param(gpio);
3643
return 0;
3744
}
3845

3946
PICO_WEAK_FUNCTION_DEF(gpio_pull_down)
40-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_pull_down)(__unused uint gpio) {
41-
47+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_pull_down)(uint gpio) {
48+
check_gpio_param(gpio);
4249
}
4350

4451
PICO_WEAK_FUNCTION_DEF(gpio_is_pulled_down)
45-
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_pulled_down)(__unused uint gpio) {
52+
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_pulled_down)(uint gpio) {
53+
check_gpio_param(gpio);
4654
return 0;
4755
}
4856

4957
PICO_WEAK_FUNCTION_DEF(gpio_disable_pulls)
50-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_disable_pulls)(__unused uint gpio) {
51-
58+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_disable_pulls)(uint gpio) {
59+
check_gpio_param(gpio);
5260
}
5361

5462
PICO_WEAK_FUNCTION_DEF(gpio_set_pulls)
55-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_pulls)(__unused uint gpio, __unused bool up, __unused bool down) {
56-
63+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_pulls)(uint gpio, __unused bool up, __unused bool down) {
64+
check_gpio_param(gpio);
5765
}
5866

5967
PICO_WEAK_FUNCTION_DEF(gpio_set_irqover)
60-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_irqover)(__unused uint gpio, __unused uint value) {
61-
68+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_irqover)(uint gpio, __unused uint value) {
69+
check_gpio_param(gpio);
6270
}
6371

6472
PICO_WEAK_FUNCTION_DEF(gpio_set_outover)
65-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_outover)(__unused uint gpio, __unused uint value) {
66-
73+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_outover)(uint gpio, __unused uint value) {
74+
check_gpio_param(gpio);
6775
}
6876

6977
PICO_WEAK_FUNCTION_DEF(gpio_set_inover)
70-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_inover)(__unused uint gpio, __unused uint value) {
71-
78+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_inover)(uint gpio, __unused uint value) {
79+
check_gpio_param(gpio);
7280
}
7381

7482
PICO_WEAK_FUNCTION_DEF(gpio_set_oeover)
75-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_oeover)(__unused uint gpio, __unused uint value) {
76-
83+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_oeover)(uint gpio, __unused uint value) {
84+
check_gpio_param(gpio);
7785
}
7886

7987
PICO_WEAK_FUNCTION_DEF(gpio_set_input_enabled)
80-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_input_enabled)(__unused uint gpio, __unused bool enabled){
81-
88+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_input_enabled)(uint gpio, __unused bool enabled){
89+
check_gpio_param(gpio);
8290
}
8391

8492
PICO_WEAK_FUNCTION_DEF(gpio_set_input_hysteresis_enabled)
85-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_input_hysteresis_enabled)(__unused uint gpio, __unused bool enabled){
86-
93+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_input_hysteresis_enabled)(uint gpio, __unused bool enabled){
94+
check_gpio_param(gpio);
8795
}
8896

8997
PICO_WEAK_FUNCTION_DEF(gpio_is_input_hysteresis_enabled)
90-
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_input_hysteresis_enabled)(__unused uint gpio){
98+
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_input_hysteresis_enabled)(uint gpio){
99+
check_gpio_param(gpio);
91100
return true;
92101
}
93102

94103
PICO_WEAK_FUNCTION_DEF(gpio_set_slew_rate)
95-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_slew_rate)(__unused uint gpio, __unused enum gpio_slew_rate slew){
96-
104+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_slew_rate)(uint gpio, __unused enum gpio_slew_rate slew){
105+
check_gpio_param(gpio);
97106
}
98107

99108
PICO_WEAK_FUNCTION_DEF(gpio_get_slew_rate)
100-
enum gpio_slew_rate PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_slew_rate)(__unused uint gpio){
109+
enum gpio_slew_rate PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_slew_rate)(uint gpio){
110+
check_gpio_param(gpio);
101111
return GPIO_SLEW_RATE_FAST;
102112
}
103113

104114
PICO_WEAK_FUNCTION_DEF(gpio_set_drive_strength)
105-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_drive_strength)(__unused uint gpio, __unused enum gpio_drive_strength drive){
106-
115+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_drive_strength)(uint gpio, __unused enum gpio_drive_strength drive){
116+
check_gpio_param(gpio);
107117
}
108118

109119
PICO_WEAK_FUNCTION_DEF(gpio_get_drive_strength)
110-
enum gpio_drive_strength PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_drive_strength)(__unused uint gpio){
120+
enum gpio_drive_strength PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_drive_strength)(uint gpio){
121+
check_gpio_param(gpio);
111122
return GPIO_DRIVE_STRENGTH_4MA;
112123
}
113124

114125
PICO_WEAK_FUNCTION_DEF(gpio_set_irq_enabled)
115-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_irq_enabled)(__unused uint gpio, __unused uint32_t events, __unused bool enable) {
116-
126+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_irq_enabled)(uint gpio, __unused uint32_t events, __unused bool enable) {
127+
check_gpio_param(gpio);
117128
}
118129

119130
PICO_WEAK_FUNCTION_DEF(gpio_set_irq_callback)
@@ -122,23 +133,24 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_irq_callback)(__unused gpio_irq_callb
122133
}
123134

124135
PICO_WEAK_FUNCTION_DEF(gpio_set_irq_enabled_with_callback)
125-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_irq_enabled_with_callback)(__unused uint gpio, __unused uint32_t event_mask, __unused bool enabled, __unused gpio_irq_callback_t callback) {
126-
136+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_irq_enabled_with_callback)(uint gpio, __unused uint32_t event_mask, __unused bool enabled, __unused gpio_irq_callback_t callback) {
137+
check_gpio_param(gpio);
127138
}
128139

129140
PICO_WEAK_FUNCTION_DEF(gpio_set_dormant_irq_enabled)
130-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_dormant_irq_enabled)(__unused uint gpio, __unused uint32_t event_mask, __unused bool enabled) {
131-
141+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_dormant_irq_enabled)(uint gpio, __unused uint32_t event_mask, __unused bool enabled) {
142+
check_gpio_param(gpio);
132143
}
133144

134145
PICO_WEAK_FUNCTION_DEF(gpio_get_irq_event_mask)
135-
uint32_t PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_irq_event_mask)(__unused uint gpio) {
146+
uint32_t PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_irq_event_mask)(uint gpio) {
147+
check_gpio_param(gpio);
136148
return 0;
137149
}
138150

139151
PICO_WEAK_FUNCTION_DEF(gpio_acknowledge_irq)
140-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_acknowledge_irq)(__unused uint gpio, __unused uint32_t events) {
141-
152+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_acknowledge_irq)(uint gpio, __unused uint32_t events) {
153+
check_gpio_param(gpio);
142154
}
143155

144156
PICO_WEAK_FUNCTION_DEF(gpio_add_raw_irq_handler_with_order_priority_masked)
@@ -152,8 +164,8 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_add_raw_irq_handler_with_order_priority_m
152164
}
153165

154166
PICO_WEAK_FUNCTION_DEF(gpio_add_raw_irq_handler_with_order_priority)
155-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_add_raw_irq_handler_with_order_priority)(__unused uint gpio, __unused irq_handler_t handler, __unused uint8_t order_priority) {
156-
167+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_add_raw_irq_handler_with_order_priority)(uint gpio, __unused irq_handler_t handler, __unused uint8_t order_priority) {
168+
check_gpio_param(gpio);
157169
}
158170

159171
PICO_WEAK_FUNCTION_DEF(gpio_add_raw_irq_handler_masked)
@@ -167,8 +179,8 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_add_raw_irq_handler_masked64)(__unused ui
167179
}
168180

169181
PICO_WEAK_FUNCTION_DEF(gpio_add_raw_irq_handler)
170-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_add_raw_irq_handler)(__unused uint gpio, __unused irq_handler_t handler) {
171-
182+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_add_raw_irq_handler)(uint gpio, __unused irq_handler_t handler) {
183+
check_gpio_param(gpio);
172184
}
173185

174186
PICO_WEAK_FUNCTION_DEF(gpio_remove_raw_irq_handler_masked)
@@ -182,18 +194,18 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_remove_raw_irq_handler_masked64)(__unused
182194
}
183195

184196
PICO_WEAK_FUNCTION_DEF(gpio_remove_raw_irq_handler)
185-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_remove_raw_irq_handler)(__unused uint gpio, __unused irq_handler_t handler) {
186-
197+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_remove_raw_irq_handler)(uint gpio, __unused irq_handler_t handler) {
198+
check_gpio_param(gpio);
187199
}
188200

189201
PICO_WEAK_FUNCTION_DEF(gpio_init)
190-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_init)(__unused uint gpio) {
191-
202+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_init)(uint gpio) {
203+
check_gpio_param(gpio);
192204
}
193205

194206
PICO_WEAK_FUNCTION_DEF(gpio_deinit)
195-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_deinit)(__unused uint gpio) {
196-
207+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_deinit)(uint gpio) {
208+
check_gpio_param(gpio);
197209
}
198210

199211
PICO_WEAK_FUNCTION_DEF(gpio_init_mask)
@@ -202,7 +214,8 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_init_mask)(__unused uint gpio_mask) {
202214
}
203215

204216
PICO_WEAK_FUNCTION_DEF(gpio_get)
205-
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get)(__unused uint gpio) {
217+
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get)(uint gpio) {
218+
check_gpio_param(gpio);
206219
return 0;
207220
}
208221

@@ -287,12 +300,13 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_put_all64)(__unused uint64_t value) {
287300

288301
}
289302
PICO_WEAK_FUNCTION_DEF(gpio_put)
290-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_put)(__unused uint gpio, __unused int value) {
291-
303+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_put)(uint gpio, __unused int value) {
304+
check_gpio_param(gpio);
292305
}
293306

294307
PICO_WEAK_FUNCTION_DEF(gpio_set_dir_out_masked)
295-
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_out_level)(__unused uint gpio) {
308+
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_out_level)(uint gpio) {
309+
check_gpio_param(gpio);
296310
return 0;
297311
}
298312

@@ -336,12 +350,13 @@ void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_dir_all_bits64)(__unused uint64_t val
336350
}
337351

338352
PICO_WEAK_FUNCTION_DEF(gpio_set_dir)
339-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_dir)(__unused uint gpio, __unused bool out) {
340-
353+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_set_dir)(uint gpio, __unused bool out) {
354+
check_gpio_param(gpio);
341355
}
342356

343357
PICO_WEAK_FUNCTION_DEF(gpio_is_dir_out)
344-
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_dir_out)(__unused uint gpio) {
358+
bool PICO_WEAK_FUNCTION_IMPL_NAME(gpio_is_dir_out)(uint gpio) {
359+
check_gpio_param(gpio);
345360
return 0;
346361
}
347362

@@ -351,8 +366,8 @@ uint PICO_WEAK_FUNCTION_IMPL_NAME(gpio_get_dir)(uint gpio) {
351366
}
352367

353368
PICO_WEAK_FUNCTION_DEF(gpio_assign_to_ns)
354-
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_assign_to_ns)(__unused uint gpio, __unused bool ns) {
355-
369+
void PICO_WEAK_FUNCTION_IMPL_NAME(gpio_assign_to_ns)(uint gpio, __unused bool ns) {
370+
check_gpio_param(gpio);
356371
}
357372

358373
PICO_WEAK_FUNCTION_DEF(gpio_debug_pins_init)

src/host/hardware_gpio/include/hardware/gpio.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ enum gpio_drive_strength {
6666
GPIO_DRIVE_STRENGTH_12MA = 3 ///< 12 mA nominal drive strength
6767
};
6868

69+
void check_gpio_param(uint gpio);
70+
6971
// ----------------------------------------------------------------------------
7072
// Pad Controls + IO Muxing
7173
// ----------------------------------------------------------------------------

0 commit comments

Comments
 (0)