summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaureen Helm <maureen.helm@nxp.com>2020-03-19 13:22:18 -0500
committerDamien George <damien.p.george@gmail.com>2020-03-25 00:29:42 +1100
commit76a5b3a97a36e03d8339c11acd14d235d1c161d1 (patch)
treeb5cfb5cba9c1da00c9dfd3a22a00c23d81df4881
parent40255aff232fe726cf43f52961be9eb2839540b0 (diff)
zephyr: Update machine.Pin class to use new zephyr gpio api.
Zephyr v2.2 reworked its gpio api to support linux device tree bindings and pin logical levels. This commit updates the zephyr port's machine.Pin class to replace the deprecated gpio api calls with the new supported gpio api. This resolves several build warnings. Tested on frdm_k64f and mimxrt1050_evk boards.
-rw-r--r--ports/zephyr/machine_pin.c39
1 files changed, 18 insertions, 21 deletions
diff --git a/ports/zephyr/machine_pin.c b/ports/zephyr/machine_pin.c
index d15c556ec..032be7d8e 100644
--- a/ports/zephyr/machine_pin.c
+++ b/ports/zephyr/machine_pin.c
@@ -61,19 +61,20 @@ STATIC mp_obj_t machine_pin_obj_init_helper(machine_pin_obj_t *self, size_t n_ar
uint mode = args[ARG_mode].u_int;
// get pull mode
- uint pull = GPIO_PUD_NORMAL;
+ uint pull = 0;
if (args[ARG_pull].u_obj != mp_const_none) {
pull = mp_obj_get_int(args[ARG_pull].u_obj);
}
- int ret = gpio_pin_configure(self->port, self->pin, mode | pull);
- if (ret) {
- mp_raise_ValueError("invalid pin");
- }
-
// get initial value
+ uint init = 0;
if (args[ARG_value].u_obj != MP_OBJ_NULL) {
- (void)gpio_pin_write(self->port, self->pin, mp_obj_is_true(args[ARG_value].u_obj));
+ init = mp_obj_is_true(args[ARG_value].u_obj) ? GPIO_OUTPUT_INIT_HIGH : GPIO_OUTPUT_INIT_LOW;
+ }
+
+ int ret = gpio_pin_configure(self->port, self->pin, mode | pull | init);
+ if (ret) {
+ mp_raise_ValueError("invalid pin");
}
return mp_const_none;
@@ -116,11 +117,10 @@ STATIC mp_obj_t machine_pin_call(mp_obj_t self_in, size_t n_args, size_t n_kw, c
mp_arg_check_num(n_args, n_kw, 0, 1, false);
machine_pin_obj_t *self = self_in;
if (n_args == 0) {
- u32_t pin_val;
- (void)gpio_pin_read(self->port, self->pin, &pin_val);
+ int pin_val = gpio_pin_get_raw(self->port, self->pin);
return MP_OBJ_NEW_SMALL_INT(pin_val);
} else {
- (void)gpio_pin_write(self->port, self->pin, mp_obj_is_true(args[0]));
+ (void)gpio_pin_set_raw(self->port, self->pin, mp_obj_is_true(args[0]));
return mp_const_none;
}
}
@@ -139,14 +139,14 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_pin_value_obj, 1, 2, machine_
STATIC mp_obj_t machine_pin_off(mp_obj_t self_in) {
machine_pin_obj_t *self = self_in;
- (void)gpio_pin_write(self->port, self->pin, 0);
+ (void)gpio_pin_set_raw(self->port, self->pin, 0);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_pin_off_obj, machine_pin_off);
STATIC mp_obj_t machine_pin_on(mp_obj_t self_in) {
machine_pin_obj_t *self = self_in;
- (void)gpio_pin_write(self->port, self->pin, 1);
+ (void)gpio_pin_set_raw(self->port, self->pin, 1);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_pin_on_obj, machine_pin_on);
@@ -157,13 +157,10 @@ STATIC mp_uint_t machine_pin_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_
switch (request) {
case MP_PIN_READ: {
- u32_t pin_val;
- gpio_pin_read(self->port, self->pin, &pin_val);
- return pin_val;
+ return gpio_pin_get_raw(self->port, self->pin);
}
case MP_PIN_WRITE: {
- gpio_pin_write(self->port, self->pin, arg);
- return 0;
+ return gpio_pin_set_raw(self->port, self->pin, arg);
}
}
return -1;
@@ -177,10 +174,10 @@ STATIC const mp_rom_map_elem_t machine_pin_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&machine_pin_on_obj) },
// class constants
- { MP_ROM_QSTR(MP_QSTR_IN), MP_ROM_INT(GPIO_DIR_IN) },
- { MP_ROM_QSTR(MP_QSTR_OUT), MP_ROM_INT(GPIO_DIR_OUT) },
- { MP_ROM_QSTR(MP_QSTR_PULL_UP), MP_ROM_INT(GPIO_PUD_PULL_UP) },
- { MP_ROM_QSTR(MP_QSTR_PULL_DOWN), MP_ROM_INT(GPIO_PUD_PULL_DOWN) },
+ { MP_ROM_QSTR(MP_QSTR_IN), MP_ROM_INT(GPIO_INPUT) },
+ { MP_ROM_QSTR(MP_QSTR_OUT), MP_ROM_INT(GPIO_OUTPUT) },
+ { MP_ROM_QSTR(MP_QSTR_PULL_UP), MP_ROM_INT(GPIO_PULL_UP) },
+ { MP_ROM_QSTR(MP_QSTR_PULL_DOWN), MP_ROM_INT(GPIO_PULL_DOWN) },
};
STATIC MP_DEFINE_CONST_DICT(machine_pin_locals_dict, machine_pin_locals_dict_table);