summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobert-hh <robert@hammelrath.com>2022-10-09 10:56:29 +0200
committerDamien George <damien@micropython.org>2022-10-25 23:39:41 +1100
commita6760bd4efa883ef463795036ff74d678ff65c7b (patch)
treefc8a46f5bd4ca8345e21a4e2236969968964b0fe
parent4d38ab652ea57a60c6f2ff085547f72012ac7df6 (diff)
samd/modmachine: Replace the LED class by the Signal class.
It simplifies and improves the code. The LED_Pxxx lines of the board.csv lines can still be used, but will be taken as Pin definitions.
-rw-r--r--ports/samd/Makefile1
-rw-r--r--ports/samd/boards/make-pin-table.py6
-rw-r--r--ports/samd/machine_led.c78
-rw-r--r--ports/samd/machine_pin.c4
-rw-r--r--ports/samd/modmachine.c3
-rw-r--r--ports/samd/modmachine.h1
-rw-r--r--ports/samd/modsamd.c2
-rw-r--r--ports/samd/mpconfigport.h1
-rw-r--r--ports/samd/pin_af.c6
-rw-r--r--ports/samd/pin_af.h2
10 files changed, 11 insertions, 93 deletions
diff --git a/ports/samd/Makefile b/ports/samd/Makefile
index f512fb0b2..b2e84460e 100644
--- a/ports/samd/Makefile
+++ b/ports/samd/Makefile
@@ -88,7 +88,6 @@ SRC_C += \
machine_bitstream.c \
machine_dac.c \
machine_i2c.c \
- machine_led.c \
machine_pin.c \
machine_rtc.c \
machine_spi.c \
diff --git a/ports/samd/boards/make-pin-table.py b/ports/samd/boards/make-pin-table.py
index 327478568..40bcd166d 100644
--- a/ports/samd/boards/make-pin-table.py
+++ b/ports/samd/boards/make-pin-table.py
@@ -36,11 +36,7 @@ class Pins:
# for compatibility, map LED_ to PIN_
if row[0].startswith("LED_"):
row[0] = "PIN_" + row[0][4:]
- if len(row) == 1:
- self.pin_names[row[0]] = (row[0][4:], "{&machine_led_type}")
- else:
- self.pin_names[row[0]] = (row[1], "{&machine_led_type}")
- elif row[0].startswith("PIN_"):
+ if row[0].startswith("PIN_"):
if len(row) == 1:
self.pin_names[row[0]] = (row[0][4:], "{&machine_pin_type}")
else:
diff --git a/ports/samd/machine_led.c b/ports/samd/machine_led.c
deleted file mode 100644
index c18bc052b..000000000
--- a/ports/samd/machine_led.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * This is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2016-2021 Damien P. George
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * Uses pins.h & pins.c to create board (MCU package) specific 'machine_led_obj' array.
- */
-
-#include "py/runtime.h"
-#include "py/mphal.h"
-#include "extmod/virtpin.h"
-#include "modmachine.h"
-#include "pin_af.h"
-
-extern mp_obj_t machine_pin_low_obj;
-extern mp_obj_t machine_pin_high_obj;
-extern mp_obj_t machine_pin_toggle_obj;
-extern mp_obj_t machine_pin_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args);
-
-STATIC void machine_led_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
- machine_pin_obj_t *self = self_in;
- mp_printf(print, "LED(\"%s\", GPIO=P%c%02u)",
- pin_name(self->pin_id),
- "ABCD"[self->pin_id / 32], self->pin_id % 32);
-}
-
-// constructor(id, ...)
-mp_obj_t mp_led_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
- mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
-
- // get the wanted LED object
- const machine_pin_obj_t *self;
-
- self = pin_find(args[0], &machine_led_type);
-
- mp_hal_pin_output(self->pin_id);
- mp_hal_pin_low(self->pin_id);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-STATIC const mp_rom_map_elem_t machine_led_locals_dict_table[] = {
- // instance methods
- { MP_ROM_QSTR(MP_QSTR_off), MP_ROM_PTR(&machine_pin_low_obj) },
- { MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&machine_pin_high_obj) },
- { MP_ROM_QSTR(MP_QSTR_toggle), MP_ROM_PTR(&machine_pin_toggle_obj) },
-};
-STATIC MP_DEFINE_CONST_DICT(machine_led_locals_dict, machine_led_locals_dict_table);
-
-MP_DEFINE_CONST_OBJ_TYPE(
- machine_led_type,
- MP_QSTR_LED,
- MP_TYPE_FLAG_NONE,
- make_new, mp_led_make_new,
- print, machine_led_print,
- call, machine_pin_call,
- locals_dict, &machine_led_locals_dict
- );
diff --git a/ports/samd/machine_pin.c b/ports/samd/machine_pin.c
index a7cd86d38..876848583 100644
--- a/ports/samd/machine_pin.c
+++ b/ports/samd/machine_pin.c
@@ -143,7 +143,7 @@ mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw,
const machine_pin_obj_t *self;
// get the wanted pin object
- self = pin_find(args[0], &machine_pin_type);
+ self = pin_find(args[0]);
if (n_args > 1 || n_kw > 0) {
// pin mode given, so configure this GPIO
@@ -499,7 +499,7 @@ STATIC const mp_irq_methods_t machine_pin_irq_methods = {
};
mp_hal_pin_obj_t mp_hal_get_pin_obj(mp_obj_t obj) {
- const machine_pin_obj_t *pin = pin_find(obj, &machine_pin_type);
+ const machine_pin_obj_t *pin = pin_find(obj);
return pin->pin_id;
}
diff --git a/ports/samd/modmachine.c b/ports/samd/modmachine.c
index 12e9f7c34..47fc03d82 100644
--- a/ports/samd/modmachine.c
+++ b/ports/samd/modmachine.c
@@ -29,6 +29,7 @@
#include "extmod/machine_mem.h"
#include "extmod/machine_pulse.h"
#include "extmod/machine_i2c.h"
+#include "extmod/machine_signal.h"
#include "extmod/machine_spi.h"
#include "drivers/dht/dht.h"
#include "modmachine.h"
@@ -228,8 +229,8 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
{ MP_ROM_QSTR(MP_QSTR_DAC), MP_ROM_PTR(&machine_dac_type) },
- { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&machine_led_type) },
{ MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&machine_pin_type) },
+ { MP_ROM_QSTR(MP_QSTR_Signal), MP_ROM_PTR(&machine_signal_type) },
{ MP_ROM_QSTR(MP_QSTR_PWM), MP_ROM_PTR(&machine_pwm_type) },
{ MP_ROM_QSTR(MP_QSTR_SoftI2C), MP_ROM_PTR(&mp_machine_soft_i2c_type) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&machine_i2c_type) },
diff --git a/ports/samd/modmachine.h b/ports/samd/modmachine.h
index 8f85e1498..792fca1b9 100644
--- a/ports/samd/modmachine.h
+++ b/ports/samd/modmachine.h
@@ -31,7 +31,6 @@
extern const mp_obj_type_t machine_adc_type;
extern const mp_obj_type_t machine_dac_type;
extern const mp_obj_type_t machine_i2c_type;
-extern const mp_obj_type_t machine_led_type;
extern const mp_obj_type_t machine_pin_type;
extern const mp_obj_type_t machine_pwm_type;
extern const mp_obj_type_t machine_spi_type;
diff --git a/ports/samd/modsamd.c b/ports/samd/modsamd.c
index 79e7b4cc3..5a2cf4616 100644
--- a/ports/samd/modsamd.c
+++ b/ports/samd/modsamd.c
@@ -35,7 +35,7 @@
extern const mp_obj_type_t samd_flash_type;
STATIC mp_obj_t samd_pininfo(mp_obj_t pin_obj) {
- const machine_pin_obj_t *pin_af = pin_find(pin_obj, NULL);
+ const machine_pin_obj_t *pin_af = pin_find(pin_obj);
// Get the name, now that it is not in the pin object
const char *name = pin_af->name;
diff --git a/ports/samd/mpconfigport.h b/ports/samd/mpconfigport.h
index 8b8305f0b..f03f8a11d 100644
--- a/ports/samd/mpconfigport.h
+++ b/ports/samd/mpconfigport.h
@@ -100,6 +100,7 @@
#define MICROPY_PY_MACHINE_PWM_INIT (0)
#define MICROPY_PY_MACHINE_PWM_DUTY_U16_NS (1)
#define MICROPY_PY_MACHINE_PWM_INCLUDEFILE "ports/samd/machine_pwm.c"
+#define MICROPY_PY_MACHINE_PIN_MAKE_NEW mp_pin_make_new
#define MP_STATE_PORT MP_STATE_VM
diff --git a/ports/samd/pin_af.c b/ports/samd/pin_af.c
index fc2a0f3d5..a7a72ac96 100644
--- a/ports/samd/pin_af.c
+++ b/ports/samd/pin_af.c
@@ -54,10 +54,10 @@ const machine_pin_obj_t *get_pin_obj_ptr(int pin_id) {
mp_raise_ValueError(MP_ERROR_TEXT("not a Pin"));
}
-const machine_pin_obj_t *pin_find(mp_obj_t pin, const mp_obj_type_t *type) {
+const machine_pin_obj_t *pin_find(mp_obj_t pin) {
const machine_pin_obj_t *self = NULL;
// Is already a object of the proper type
- if (mp_obj_is_type(pin, type)) {
+ if (mp_obj_is_type(pin, &machine_pin_type)) {
return pin;
}
if (mp_obj_is_small_int(pin)) {
@@ -81,7 +81,7 @@ const machine_pin_obj_t *pin_find(mp_obj_t pin, const mp_obj_type_t *type) {
}
}
}
- if (self != NULL && (type == NULL || mp_obj_is_type(self, type))) {
+ if (self != NULL) {
return self;
} else {
mp_raise_ValueError(MP_ERROR_TEXT("not a Pin"));
diff --git a/ports/samd/pin_af.h b/ports/samd/pin_af.h
index 5bb65a098..4b0c80250 100644
--- a/ports/samd/pin_af.h
+++ b/ports/samd/pin_af.h
@@ -96,4 +96,4 @@ adc_config_t get_adc_config(int pin_id, int32_t flag);
pwm_config_t get_pwm_config(int pin_id, int wanted_dev, uint8_t used_dev[]);
const machine_pin_obj_t *get_pin_obj_ptr(int pin_id);
const char *pin_name(int id);
-const machine_pin_obj_t *pin_find(mp_obj_t pin, const mp_obj_type_t *type);
+const machine_pin_obj_t *pin_find(mp_obj_t pin);