Skip to content

Commit c5c78d3

Browse files
committed
Moved DemuxKeyMatrix from board specific to a shared module
1 parent d14abd6 commit c5c78d3

File tree

14 files changed

+131
-139
lines changed

14 files changed

+131
-139
lines changed

docs/shared_bindings_matrix.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
"keypad.KeyMatrix": "CIRCUITPY_KEYPAD_KEYMATRIX",
7979
"keypad.Keys": "CIRCUITPY_KEYPAD_KEYS",
8080
"keypad.ShiftRegisterKeys": "CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS",
81+
"keypad.DemuxKeyMatrix": "CIRCUITPY_KEYPAD_DEMUXKEYMATRIX",
8182
"os.getenv": "CIRCUITPY_OS_GETENV",
8283
"select": "MICROPY_PY_SELECT_SELECT",
8384
"sys": "CIRCUITPY_SYS",

ports/atmel-samd/boards/pewpew_lcd/mpconfigboard.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ CIRCUITPY_KEYPAD = 1
1818
CIRCUITPY_KEYPAD_KEYS = 1
1919
CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS = 0
2020
CIRCUITPY_KEYPAD_KEYMATRIX = 0
21+
CIRCUITPY_KEYPAD_DEMUXKEYMATRIX = 0
2122

2223
# bonus, can be disabled if needed
2324
CIRCUITPY_MATH = 1

ports/atmel-samd/boards/pewpew_m4/mpconfigboard.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ CIRCUITPY_DISPLAYIO = 1
4646
CIRCUITPY_KEYPAD = 1
4747
CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS = 0
4848
CIRCUITPY_KEYPAD_KEYMATRIX = 0
49+
CIRCUITPY_KEYPAD_DEMUXKEYMATRIX = 0
4950
CIRCUITPY_MATH = 1
5051
CIRCUITPY_STAGE = 1
5152
CIRCUITPY_SYNTHIO = 0

ports/espressif/boards/m5stack_cardputer/mpconfigboard.mk

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,3 @@ CIRCUITPY_ESP_FLASH_SIZE = 8MB
1111
CIRCUITPY_ESPCAMERA = 0
1212

1313
CIRCUITPY_GIFIO = 1
14-
15-
# Enable board-specific modules
16-
USER_C_MODULES = boards/m5stack_cardputer/usermods

ports/espressif/boards/m5stack_cardputer/usermods/cardputer/DemuxKeyMatrix.h

Lines changed: 0 additions & 55 deletions
This file was deleted.

ports/espressif/boards/m5stack_cardputer/usermods/cardputer/cardputer.c

Lines changed: 0 additions & 17 deletions
This file was deleted.

ports/espressif/boards/m5stack_cardputer/usermods/cardputer/micropython.mk

Lines changed: 0 additions & 8 deletions
This file was deleted.

py/circuitpy_defns.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@ SRC_SHARED_MODULE_ALL = \
659659
keypad/Event.c \
660660
keypad/EventQueue.c \
661661
keypad/KeyMatrix.c \
662+
keypad/DemuxKeyMatrix.c \
662663
keypad/ShiftRegisterKeys.c \
663664
keypad/Keys.c \
664665
memorymonitor/__init__.c \

py/circuitpy_mpconfig.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,9 @@ CFLAGS += -DCIRCUITPY_KEYPAD_KEYMATRIX=$(CIRCUITPY_KEYPAD_KEYMATRIX)
345345
CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS ?= $(CIRCUITPY_KEYPAD)
346346
CFLAGS += -DCIRCUITPY_KEYPAD_SHIFTREGISTERKEYS=$(CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS)
347347

348+
CIRCUITPY_KEYPAD_DEMUXKEYMATRIX ?= $(CIRCUITPY_KEYPAD)
349+
CFLAGS += -DCIRCUITPY_KEYPAD_DEMUXKEYMATRIX=$(CIRCUITPY_KEYPAD_DEMUXKEYMATRIX)
350+
348351
CIRCUITPY_LOCALE ?= $(CIRCUITPY_FULL_BUILD)
349352
CFLAGS += -DCIRCUITPY_LOCALE=$(CIRCUITPY_LOCALE)
350353

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,22 @@
3030
#include "py/runtime.h"
3131
#include "shared-bindings/keypad/__init__.h"
3232
#include "shared-bindings/keypad/Event.h"
33+
#include "shared-bindings/keypad/DemuxKeyMatrix.h"
3334
#include "shared-bindings/microcontroller/Pin.h"
3435
#include "shared-bindings/util.h"
35-
#include "DemuxKeyMatrixBindings.h"
3636

37-
//| class KeyMatrix:
38-
//| """Manage Cardputer 2D matrix of keyboard.
37+
//| class DemuxKeyMatrix:
38+
//| """Manage Cardputer 2D matrix of keys with a demultiplexer to drive rows and pins on columns.
3939
//|
4040
//| .. raw:: html
4141
//|
4242
//| <p>
4343
//| <details>
4444
//| <summary>Available on these boards</summary>
4545
//| <ul>
46-
//| <li> M5Stack Cardputer
46+
//| {% for board in support_matrix_reverse["keypad.DemuxKeyMatrix"] %}
47+
//| <li> {{ board }}
48+
//| {% endfor %}
4749
//| </ul>
4850
//| </details>
4951
//| </p>
@@ -60,14 +62,14 @@
6062
//| """
6163
//| Create a `Keys` object that will scan the key matrix attached to the given row and column pins.
6264
//| There should not be any external pull-ups or pull-downs on the matrix:
63-
//| ``KeyMatrix`` enables internal pull-ups or pull-downs on the pins as necessary.
65+
//| ``DemuxKeyMatrix`` enables internal pull-ups or pull-downs on the pins as necessary.
6466
//|
6567
//| The keys are numbered sequentially from zero. A key number can be computed
6668
//| by ``row * len(column_pins) + column``.
6769
//|
6870
//| An `EventQueue` is created when this object is created and is available in the `events` attribute.
6971
//|
70-
//| :param Sequence[microcontroller.Pin] row_addr_pins: The pins attached to the rows decoder.
72+
//| :param Sequence[microcontroller.Pin] row_addr_pins: The pins attached to the rows demultiplexer.
7173
//| :param Sequence[microcontroller.Pin] column_pins: The pins attached to the columns.
7274
//| :param float interval: Scan keys no more often than ``interval`` to allow for debouncing.
7375
//| ``interval`` is in float seconds. The default is 0.020 (20 msecs).
@@ -78,8 +80,9 @@
7880
//| """
7981
//| ...
8082

81-
STATIC mp_obj_t cardputer_demuxkeymatrix_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
82-
cardputer_demuxkeymatrix_obj_t *self = mp_obj_malloc(cardputer_demuxkeymatrix_obj_t, &cardputer_demuxkeymatrix_type);
83+
STATIC mp_obj_t keypad_demuxkeymatrix_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
84+
#if CIRCUITPY_KEYPAD_DEMUXKEYMATRIX
85+
keypad_demuxkeymatrix_obj_t *self = mp_obj_malloc(keypad_demuxkeymatrix_obj_t, &keypad_demuxkeymatrix_type);
8386
enum { ARG_row_addr_pins, ARG_column_pins, ARG_interval, ARG_max_events };
8487
static const mp_arg_t allowed_args[] = {
8588
{ MP_QSTR_row_addr_pins, MP_ARG_REQUIRED | MP_ARG_OBJ },
@@ -118,19 +121,24 @@ STATIC mp_obj_t cardputer_demuxkeymatrix_make_new(const mp_obj_type_t *type, siz
118121
column_pins_array[column] = pin;
119122
}
120123

121-
common_hal_cardputer_demuxkeymatrix_construct(self, num_row_addr_pins, row_addr_pins_array, num_column_pins, column_pins_array, interval, max_events);
124+
common_hal_keypad_demuxkeymatrix_construct(self, num_row_addr_pins, row_addr_pins_array, num_column_pins, column_pins_array, interval, max_events);
122125
return MP_OBJ_FROM_PTR(self);
126+
#else
127+
mp_raise_NotImplementedError_varg(MP_ERROR_TEXT("%q"), MP_QSTR_DemuxKeyMatrix);
128+
129+
#endif
123130
}
124131

132+
#if CIRCUITPY_KEYPAD_DEMUXKEYMATRIX
125133
//| def deinit(self) -> None:
126134
//| """Stop scanning and release the pins."""
127135
//| ...
128-
STATIC mp_obj_t cardputer_demuxkeymatrix_deinit(mp_obj_t self_in) {
129-
cardputer_demuxkeymatrix_obj_t *self = MP_OBJ_TO_PTR(self_in);
130-
common_hal_cardputer_demuxkeymatrix_deinit(self);
136+
STATIC mp_obj_t keypad_demuxkeymatrix_deinit(mp_obj_t self_in) {
137+
keypad_demuxkeymatrix_obj_t *self = MP_OBJ_TO_PTR(self_in);
138+
common_hal_keypad_demuxkeymatrix_deinit(self);
131139
return MP_ROM_NONE;
132140
}
133-
MP_DEFINE_CONST_FUN_OBJ_1(cardputer_demuxkeymatrix_deinit_obj, cardputer_demuxkeymatrix_deinit);
141+
MP_DEFINE_CONST_FUN_OBJ_1(keypad_demuxkeymatrix_deinit_obj, keypad_demuxkeymatrix_deinit);
134142

135143
//| def __enter__(self) -> KeyMatrix:
136144
//| """No-op used by Context Managers."""
@@ -141,14 +149,14 @@ MP_DEFINE_CONST_FUN_OBJ_1(cardputer_demuxkeymatrix_deinit_obj, cardputer_demuxke
141149
//| """Automatically deinitializes when exiting a context. See
142150
//| :ref:`lifetime-and-contextmanagers` for more info."""
143151
//| ...
144-
STATIC mp_obj_t cardputer_demuxkeymatrix___exit__(size_t n_args, const mp_obj_t *args) {
152+
STATIC mp_obj_t keypad_demuxkeymatrix___exit__(size_t n_args, const mp_obj_t *args) {
145153
(void)n_args;
146-
common_hal_cardputer_demuxkeymatrix_deinit(args[0]);
154+
common_hal_keypad_demuxkeymatrix_deinit(args[0]);
147155
return MP_ROM_NONE;
148156
}
149-
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(cardputer_demuxkeymatrix___exit___obj, 4, 4, cardputer_demuxkeymatrix___exit__);
157+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(keypad_demuxkeymatrix___exit___obj, 4, 4, keypad_demuxkeymatrix___exit__);
150158

151-
STATIC void check_for_deinit(cardputer_demuxkeymatrix_obj_t *self) {
159+
STATIC void check_for_deinit(keypad_demuxkeymatrix_obj_t *self) {
152160
if (common_hal_keypad_deinited(self)) {
153161
raise_deinited_error();
154162
}
@@ -174,8 +182,8 @@ STATIC void check_for_deinit(cardputer_demuxkeymatrix_obj_t *self) {
174182
//| :rtype: Tuple[int]
175183
//| """
176184
//| ...
177-
STATIC mp_obj_t cardputer_demuxkeymatrix_key_number_to_row_column(mp_obj_t self_in, mp_obj_t key_number_in) {
178-
cardputer_demuxkeymatrix_obj_t *self = MP_OBJ_TO_PTR(self_in);
185+
STATIC mp_obj_t keypad_demuxkeymatrix_key_number_to_row_column(mp_obj_t self_in, mp_obj_t key_number_in) {
186+
keypad_demuxkeymatrix_obj_t *self = MP_OBJ_TO_PTR(self_in);
179187
check_for_deinit(self);
180188

181189
const mp_uint_t key_number = (mp_uint_t)mp_arg_validate_int_range(
@@ -185,59 +193,63 @@ STATIC mp_obj_t cardputer_demuxkeymatrix_key_number_to_row_column(mp_obj_t self_
185193

186194
mp_uint_t row;
187195
mp_uint_t column;
188-
common_hal_cardputer_demuxkeymatrix_key_number_to_row_column(self, key_number, &row, &column);
196+
common_hal_keypad_demuxkeymatrix_key_number_to_row_column(self, key_number, &row, &column);
189197

190198
mp_obj_t row_column[2];
191199
row_column[0] = MP_OBJ_NEW_SMALL_INT(row);
192200
row_column[1] = MP_OBJ_NEW_SMALL_INT(column);
193201

194202
return mp_obj_new_tuple(2, row_column);
195203
}
196-
MP_DEFINE_CONST_FUN_OBJ_2(cardputer_demuxkeymatrix_key_number_to_row_column_obj, cardputer_demuxkeymatrix_key_number_to_row_column);
204+
MP_DEFINE_CONST_FUN_OBJ_2(keypad_demuxkeymatrix_key_number_to_row_column_obj, keypad_demuxkeymatrix_key_number_to_row_column);
197205

198206
//| def row_column_to_key_number(self, row: int, column: int) -> int:
199207
//| """Return the key number for a given row and column.
200208
//| The key number is ``row * len(column_pins) + column``.
201209
//| """
202210
//| ...
203-
STATIC mp_obj_t cardputer_demuxkeymatrix_row_column_to_key_number(mp_obj_t self_in, mp_obj_t row_in, mp_obj_t column_in) {
204-
cardputer_demuxkeymatrix_obj_t *self = MP_OBJ_TO_PTR(self_in);
211+
STATIC mp_obj_t keypad_demuxkeymatrix_row_column_to_key_number(mp_obj_t self_in, mp_obj_t row_in, mp_obj_t column_in) {
212+
keypad_demuxkeymatrix_obj_t *self = MP_OBJ_TO_PTR(self_in);
205213
check_for_deinit(self);
206214

207215
const mp_uint_t row = (mp_uint_t)mp_arg_validate_int_range(
208-
mp_obj_get_int(row_in), 0, (mp_int_t)common_hal_cardputer_demuxkeymatrix_get_row_count(self), MP_QSTR_row);
216+
mp_obj_get_int(row_in), 0, (mp_int_t)common_hal_keypad_demuxkeymatrix_get_row_count(self), MP_QSTR_row);
209217

210218
const mp_int_t column = (mp_uint_t)mp_arg_validate_int_range(
211-
mp_obj_get_int(column_in), 0, (mp_int_t)common_hal_cardputer_demuxkeymatrix_get_column_count(self), MP_QSTR_column);
219+
mp_obj_get_int(column_in), 0, (mp_int_t)common_hal_keypad_demuxkeymatrix_get_column_count(self), MP_QSTR_column);
212220

213221
return MP_OBJ_NEW_SMALL_INT(
214-
(mp_int_t)common_hal_cardputer_demuxkeymatrix_row_column_to_key_number(self, row, column));
222+
(mp_int_t)common_hal_keypad_demuxkeymatrix_row_column_to_key_number(self, row, column));
215223
}
216-
MP_DEFINE_CONST_FUN_OBJ_3(cardputer_demuxkeymatrix_row_column_to_key_number_obj, cardputer_demuxkeymatrix_row_column_to_key_number);
224+
MP_DEFINE_CONST_FUN_OBJ_3(keypad_demuxkeymatrix_row_column_to_key_number_obj, keypad_demuxkeymatrix_row_column_to_key_number);
217225

218226
//| events: EventQueue
219227
//| """The `EventQueue` associated with this `Keys` object. (read-only)
220228
//| """
221229
//|
222230

223-
STATIC const mp_rom_map_elem_t cardputer_demuxkeymatrix_locals_dict_table[] = {
224-
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&cardputer_demuxkeymatrix_deinit_obj) },
231+
STATIC const mp_rom_map_elem_t keypad_demuxkeymatrix_locals_dict_table[] = {
232+
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&keypad_demuxkeymatrix_deinit_obj) },
225233
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
226-
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&cardputer_demuxkeymatrix___exit___obj) },
234+
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&keypad_demuxkeymatrix___exit___obj) },
227235

228236
{ MP_ROM_QSTR(MP_QSTR_events), MP_ROM_PTR(&keypad_generic_events_obj) },
229237
{ MP_ROM_QSTR(MP_QSTR_key_count), MP_ROM_PTR(&keypad_generic_key_count_obj) },
230238
{ MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&keypad_generic_reset_obj) },
231-
{ MP_ROM_QSTR(MP_QSTR_key_number_to_row_column), MP_ROM_PTR(&cardputer_demuxkeymatrix_key_number_to_row_column_obj) },
232-
{ MP_ROM_QSTR(MP_QSTR_row_column_to_key_number), MP_ROM_PTR(&cardputer_demuxkeymatrix_row_column_to_key_number_obj) },
239+
{ MP_ROM_QSTR(MP_QSTR_key_number_to_row_column), MP_ROM_PTR(&keypad_demuxkeymatrix_key_number_to_row_column_obj) },
240+
{ MP_ROM_QSTR(MP_QSTR_row_column_to_key_number), MP_ROM_PTR(&keypad_demuxkeymatrix_row_column_to_key_number_obj) },
233241
};
234242

235-
STATIC MP_DEFINE_CONST_DICT(cardputer_demuxkeymatrix_locals_dict, cardputer_demuxkeymatrix_locals_dict_table);
243+
STATIC MP_DEFINE_CONST_DICT(keypad_demuxkeymatrix_locals_dict, keypad_demuxkeymatrix_locals_dict_table);
244+
245+
#endif
236246

237247
MP_DEFINE_CONST_OBJ_TYPE(
238-
cardputer_demuxkeymatrix_type,
248+
keypad_demuxkeymatrix_type,
239249
MP_QSTR_KeyMatrix,
240250
MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS,
241-
make_new, cardputer_demuxkeymatrix_make_new,
242-
locals_dict, &cardputer_demuxkeymatrix_locals_dict
251+
make_new, keypad_demuxkeymatrix_make_new
252+
#if CIRCUITPY_KEYPAD_DEMUXKEYMATRIX
253+
, locals_dict, &keypad_demuxkeymatrix_locals_dict
254+
#endif
243255
);

0 commit comments

Comments
 (0)