Skip to content

Commit 11dcd69

Browse files
authored
Merge pull request #7207 from jepler/nicer-pin-checking
shared-bindings: Get rid of CYW43 special cases in shared-bindings
2 parents 6134532 + cdab078 commit 11dcd69

File tree

6 files changed

+20
-16
lines changed

6 files changed

+20
-16
lines changed

ports/raspberrypi/common-hal/analogio/AnalogIn.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,12 @@
4040
// voltage monitor function and the wifi function. Special handling is required
4141
// to read the analog voltage.
4242
#if CIRCUITPY_CYW43
43+
#include "bindings/cyw43/__init__.h"
4344
#define SPECIAL_PIN(pin) (pin->number == 29)
45+
46+
const mcu_pin_obj_t *common_hal_analogio_analogin_validate_pin(mp_obj_t obj) {
47+
return validate_obj_is_free_pin_or_gpio29(obj);
48+
}
4449
#else
4550
#define SPECIAL_PIN(pin) false
4651
#endif

ports/raspberrypi/common-hal/digitalio/DigitalInOut.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@
4141
#include "pico/cyw43_arch.h"
4242
#include "bindings/cyw43/__init__.h"
4343
#define IS_CYW(self) ((self)->pin->base.type == &cyw43_pin_type)
44+
45+
const mcu_pin_obj_t *common_hal_digitalio_validate_pin(mp_obj_t obj) {
46+
return validate_obj_is_free_pin_including_cyw43(obj);
47+
}
4448
#endif
4549

4650
digitalinout_result_t common_hal_digitalio_digitalinout_construct(

shared-bindings/analogio/AnalogIn.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@
3636
#include "shared-bindings/analogio/AnalogIn.h"
3737
#include "shared-bindings/util.h"
3838

39-
#if CIRCUITPY_CYW43
40-
#include "bindings/cyw43/__init__.h"
41-
#endif
39+
MP_WEAK const mcu_pin_obj_t *common_hal_analogio_analogin_validate_pin(mp_obj_t obj) {
40+
return validate_obj_is_free_pin(obj);
41+
}
4242

4343
//| class AnalogIn:
4444
//| """Read analog voltage levels
@@ -64,11 +64,7 @@ STATIC mp_obj_t analogio_analogin_make_new(const mp_obj_type_t *type,
6464
mp_arg_check_num(n_args, n_kw, 1, 1, false);
6565

6666
// 1st argument is the pin
67-
#if CIRCUITPY_CYW43
68-
const mcu_pin_obj_t *pin = validate_obj_is_free_pin_or_gpio29(args[0]);
69-
#else
70-
const mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[0]);
71-
#endif
67+
const mcu_pin_obj_t *pin = common_hal_analogio_analogin_validate_pin(args[0]);
7268
analogio_analogin_obj_t *self = m_new_obj(analogio_analogin_obj_t);
7369
self->base.type = &analogio_analogin_type;
7470
common_hal_analogio_analogin_construct(self, pin);

shared-bindings/analogio/AnalogIn.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
extern const mp_obj_type_t analogio_analogin_type;
3434

35+
const mcu_pin_obj_t *common_hal_analogio_analogin_validate_pin(mp_obj_t obj);
3536
void common_hal_analogio_analogin_construct(analogio_analogin_obj_t *self, const mcu_pin_obj_t *pin);
3637
void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self);
3738
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self);

shared-bindings/digitalio/DigitalInOut.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ STATIC void check_result(digitalinout_result_t result) {
6666
}
6767
}
6868

69+
MP_WEAK const mcu_pin_obj_t *common_hal_digitalio_validate_pin(mp_obj_t obj) {
70+
return validate_obj_is_free_pin(obj);
71+
}
72+
6973
//| class DigitalInOut:
7074
//| """Digital input and output
7175
//|
@@ -87,14 +91,7 @@ STATIC mp_obj_t digitalio_digitalinout_make_new(const mp_obj_type_t *type,
8791
digitalio_digitalinout_obj_t *self = m_new_obj(digitalio_digitalinout_obj_t);
8892
self->base.type = &digitalio_digitalinout_type;
8993

90-
#if CIRCUITPY_CYW43
91-
// The GPIO pin attached to the CYW43 co-processor can only be used for
92-
// DigitalInOut, not for other purposes like PWM. That's why this check
93-
// is here, and it's not rolled into validate_obj_is_free_pin.
94-
const mcu_pin_obj_t *pin = validate_obj_is_free_pin_including_cyw43(args[0]);
95-
#else
96-
const mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[0]);
97-
#endif
94+
const mcu_pin_obj_t *pin = common_hal_digitalio_validate_pin(args[0]);
9895
common_hal_digitalio_digitalinout_construct(self, pin);
9996

10097
return MP_OBJ_FROM_PTR(self);

shared-bindings/digitalio/DigitalInOut.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ typedef enum {
5555
DIGITALINOUT_REG_TOGGLE,
5656
} digitalinout_reg_op_t;
5757

58+
const mcu_pin_obj_t *common_hal_digitalio_validate_pin(mp_obj_t obj);
5859
digitalinout_result_t common_hal_digitalio_digitalinout_construct(digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin);
5960
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self);
6061
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self);

0 commit comments

Comments
 (0)