summaryrefslogtreecommitdiffstatshomepage
path: root/stm/pin_map.c
diff options
context:
space:
mode:
Diffstat (limited to 'stm/pin_map.c')
-rw-r--r--stm/pin_map.c226
1 files changed, 0 insertions, 226 deletions
diff --git a/stm/pin_map.c b/stm/pin_map.c
deleted file mode 100644
index bb2c054e78..0000000000
--- a/stm/pin_map.c
+++ /dev/null
@@ -1,226 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stm32f4xx.h>
-
-#include "misc.h"
-#include "mpconfig.h"
-#include "qstr.h"
-#include "obj.h"
-#include "runtime.h"
-#include "nlr.h"
-
-#include "pin.h"
-
-// Usage Model:
-//
-// All Board Pins are predefined as pyb.Pin.board.Name
-//
-// x1_pin = pyb.Pin.board.X1
-//
-// g = pyb.gpio(pyb.Pin.board.X1, 0)
-//
-// CPU pins which correspond to the board pins are available
-// as pyb.cpu.Name. For the CPU pins, the names are the port letter
-// followed by the pin number. On the PYBOARD4, pyb.Pin.board.X1 and
-// pyb.Pin.cpu.B6 are the same pin.
-//
-// You can also use strings:
-//
-// g = pyb.gpio('X1', 0)
-//
-// Users can add their own names:
-//
-// pyb.Pin("LeftMotorDir", pyb.Pin.cpu.C12)
-// g = pyb.gpio("LeftMotorDir", 0)
-//
-// and can query mappings
-//
-// pin = pyb.Pin("LeftMotorDir");
-//
-// Users can also add their own mapping function:
-//
-// def MyMapper(pin_name):
-// if pin_name == "LeftMotorDir":
-// return pyb.Pin.cpu.A0
-//
-// pyb.Pin.mapper(MyMapper)
-//
-// So, if you were to call: pyb.gpio("LeftMotorDir", 0)
-// then "LeftMotorDir" is passed directly to the mapper function.
-//
-// To summarize, the following order determines how things get mapped into
-// an ordinal pin number:
-//
-// 1 - Directly specify a pin object
-// 2 - User supplied mapping function
-// 3 - User supplied mapping (object must be usable as a dictionary key)
-// 4 - Supply a string which matches a board pin
-// 5 - Supply a string which matches a CPU port/pin
-//
-// You can set pyb.Pin.debug(True) to get some debug information about
-// how a particular object gets mapped to a pin.
-
-static void pin_map_obj_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) {
- (void)self_in;
- print(env, "<PinMap>");
-}
-
-static mp_obj_t pin_map_call(mp_obj_t self_in, uint n_args, uint n_kw, const mp_obj_t *args) {
- pin_map_obj_t *self = self_in;
- mp_arg_check_num(n_args, n_kw, 1, 2, false);
-
- if (n_args > 1) {
- if (!self->map_dict) {
- self->map_dict = mp_obj_new_dict(1);
- }
- mp_obj_dict_store(self->map_dict, args[0], args[1]);
- return mp_const_none;
- }
-
- // Run an argument through the mapper and return the result.
- return (mp_obj_t)pin_map_user_obj(args[0]);
-}
-
-static mp_obj_t pin_map_obj_mapper(uint n_args, mp_obj_t *args) {
- pin_map_obj_t *self = args[0];
- if (n_args > 1) {
- self->mapper = args[1];
- return mp_const_none;
- }
- return self->mapper;
-}
-static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pin_map_obj_mapper_obj, 1, 2, pin_map_obj_mapper);
-
-static mp_obj_t pin_map_obj_debug(uint n_args, mp_obj_t *args) {
- pin_map_obj_t *self = args[0];
- if (n_args > 1) {
- self->debug = mp_obj_is_true(args[1]);
- return mp_const_none;
- }
- return MP_BOOL(self->debug);
-}
-static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pin_map_obj_debug_obj, 1, 2, pin_map_obj_debug);
-
-static void pin_map_load_attr(mp_obj_t self_in, qstr attr_qstr, mp_obj_t *dest) {
- (void)self_in;
- const char *attr = qstr_str(attr_qstr);
-
- if (strcmp(attr, "mapper") == 0) {
- dest[0] = (mp_obj_t)&pin_map_obj_mapper_obj;
- dest[1] = self_in;
- }
- if (strcmp(attr, "debug") == 0) {
- dest[0] = (mp_obj_t)&pin_map_obj_debug_obj;
- dest[1] = self_in;
- }
- if (strcmp(attr, pin_board_pins_obj.name) == 0) {
- dest[0] = (mp_obj_t)&pin_board_pins_obj;
- dest[1] = MP_OBJ_NULL;
- }
- if (strcmp(attr, pin_cpu_pins_obj.name) == 0) {
- dest[0] = (mp_obj_t)&pin_cpu_pins_obj;
- dest[1] = MP_OBJ_NULL;
- }
-}
-
-static const mp_obj_type_t pin_map_obj_type = {
- { &mp_type_type },
- .name = MP_QSTR_PinMap,
- .print = pin_map_obj_print,
- .call = pin_map_call,
- .load_attr = pin_map_load_attr,
-};
-
-static const pin_map_obj_t pin_map_obj_init = {
- { &pin_map_obj_type },
- .mapper = MP_OBJ_NULL,
- .map_dict = MP_OBJ_NULL,
- .debug = false,
-};
-
-pin_map_obj_t pin_map_obj;
-
-void pin_map_init(void) {
- pin_map_obj = pin_map_obj_init;
-}
-
-// C API used to convert a user-supplied pin name into an ordinal pin number.
-const pin_obj_t *pin_map_user_obj(mp_obj_t user_obj) {
- const pin_obj_t *pin_obj;
-
- // If a pin was provided, then use it
- if (MP_OBJ_IS_TYPE(user_obj, &pin_obj_type)) {
- pin_obj = user_obj;
- if (pin_map_obj.debug) {
- printf("Pin map passed pin ");
- mp_obj_print((mp_obj_t)pin_obj, PRINT_STR);
- printf("\n");
- }
- return pin_obj;
- }
-
- if (pin_map_obj.mapper) {
- pin_obj = mp_call_function_1(pin_map_obj.mapper, user_obj);
- if (pin_obj != mp_const_none) {
- if (!MP_OBJ_IS_TYPE(pin_obj, &pin_obj_type)) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Pin.mapper didn't return a Pin object"));
- }
- if (pin_map_obj.debug) {
- printf("Pin.mapper maps ");
- mp_obj_print(user_obj, PRINT_REPR);
- printf(" to ");
- mp_obj_print((mp_obj_t)pin_obj, PRINT_STR);
- printf("\n");
- }
- return pin_obj;
- }
- // The pin mapping function returned mp_const_none, fall through to
- // other lookup methods.
- }
-
- if (pin_map_obj.map_dict) {
- mp_map_t *pin_map_map = mp_obj_dict_get_map(pin_map_obj.map_dict);
- mp_map_elem_t *elem = mp_map_lookup(pin_map_map, user_obj, MP_MAP_LOOKUP);
- if (elem != NULL && elem->value != NULL) {
- pin_obj = elem->value;
- if (pin_map_obj.debug) {
- printf("Pin.map_dict maps ");
- mp_obj_print(user_obj, PRINT_REPR);
- printf(" to ");
- mp_obj_print((mp_obj_t)pin_obj, PRINT_STR);
- printf("\n");
- }
- return pin_obj;
- }
- }
-
- // See if the pin name matches a board pin
- const char *pin_name = mp_obj_str_get_str(user_obj);
- pin_obj = pin_find_named_pin(pin_board_pins, pin_name);
- if (pin_obj) {
- if (pin_map_obj.debug) {
- printf("Pin.board maps ");
- mp_obj_print(user_obj, PRINT_REPR);
- printf(" to ");
- mp_obj_print((mp_obj_t)pin_obj, PRINT_STR);
- printf("\n");
- }
- return pin_obj;
- }
-
- // See if the pin name matches a cpu pin
- pin_obj = pin_find_named_pin(pin_cpu_pins, pin_name);
- if (pin_obj) {
- if (pin_map_obj.debug) {
- printf("Pin.cpu maps ");
- mp_obj_print(user_obj, PRINT_REPR);
- printf(" to ");
- mp_obj_print((mp_obj_t)pin_obj, PRINT_STR);
- printf("\n");
- }
- return pin_obj;
- }
-
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "pin '%s' not a valid pin identifier", pin_name));
-}