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>
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).
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
237247MP_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