30
30
#include "py/runtime.h"
31
31
#include "shared-bindings/keypad/__init__.h"
32
32
#include "shared-bindings/keypad/Event.h"
33
+ #include "shared-bindings/keypad/DemuxKeyMatrix.h"
33
34
#include "shared-bindings/microcontroller/Pin.h"
34
35
#include "shared-bindings/util.h"
35
- #include "DemuxKeyMatrixBindings.h"
36
36
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 .
39
39
//|
40
40
//| .. raw:: html
41
41
//|
42
42
//| <p>
43
43
//| <details>
44
44
//| <summary>Available on these boards</summary>
45
45
//| <ul>
46
- //| <li> M5Stack Cardputer
46
+ //| {% for board in support_matrix_reverse["keypad.DemuxKeyMatrix"] %}
47
+ //| <li> {{ board }}
48
+ //| {% endfor %}
47
49
//| </ul>
48
50
//| </details>
49
51
//| </p>
60
62
//| """
61
63
//| Create a `Keys` object that will scan the key matrix attached to the given row and column pins.
62
64
//| 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.
64
66
//|
65
67
//| The keys are numbered sequentially from zero. A key number can be computed
66
68
//| by ``row * len(column_pins) + column``.
67
69
//|
68
70
//| An `EventQueue` is created when this object is created and is available in the `events` attribute.
69
71
//|
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 .
71
73
//| :param Sequence[microcontroller.Pin] column_pins: The pins attached to the columns.
72
74
//| :param float interval: Scan keys no more often than ``interval`` to allow for debouncing.
73
75
//| ``interval`` is in float seconds. The default is 0.020 (20 msecs).
78
80
//| """
79
81
//| ...
80
82
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 );
83
86
enum { ARG_row_addr_pins , ARG_column_pins , ARG_interval , ARG_max_events };
84
87
static const mp_arg_t allowed_args [] = {
85
88
{ 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
118
121
column_pins_array [column ] = pin ;
119
122
}
120
123
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 );
122
125
return MP_OBJ_FROM_PTR (self );
126
+ #else
127
+ mp_raise_NotImplementedError_varg (MP_ERROR_TEXT ("%q" ), MP_QSTR_DemuxKeyMatrix );
128
+
129
+ #endif
123
130
}
124
131
132
+ #if CIRCUITPY_KEYPAD_DEMUXKEYMATRIX
125
133
//| def deinit(self) -> None:
126
134
//| """Stop scanning and release the pins."""
127
135
//| ...
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 );
131
139
return MP_ROM_NONE ;
132
140
}
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 );
134
142
135
143
//| def __enter__(self) -> KeyMatrix:
136
144
//| """No-op used by Context Managers."""
@@ -141,14 +149,14 @@ MP_DEFINE_CONST_FUN_OBJ_1(cardputer_demuxkeymatrix_deinit_obj, cardputer_demuxke
141
149
//| """Automatically deinitializes when exiting a context. See
142
150
//| :ref:`lifetime-and-contextmanagers` for more info."""
143
151
//| ...
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 ) {
145
153
(void )n_args ;
146
- common_hal_cardputer_demuxkeymatrix_deinit (args [0 ]);
154
+ common_hal_keypad_demuxkeymatrix_deinit (args [0 ]);
147
155
return MP_ROM_NONE ;
148
156
}
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__ );
150
158
151
- STATIC void check_for_deinit (cardputer_demuxkeymatrix_obj_t * self ) {
159
+ STATIC void check_for_deinit (keypad_demuxkeymatrix_obj_t * self ) {
152
160
if (common_hal_keypad_deinited (self )) {
153
161
raise_deinited_error ();
154
162
}
@@ -174,8 +182,8 @@ STATIC void check_for_deinit(cardputer_demuxkeymatrix_obj_t *self) {
174
182
//| :rtype: Tuple[int]
175
183
//| """
176
184
//| ...
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 );
179
187
check_for_deinit (self );
180
188
181
189
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_
185
193
186
194
mp_uint_t row ;
187
195
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 );
189
197
190
198
mp_obj_t row_column [2 ];
191
199
row_column [0 ] = MP_OBJ_NEW_SMALL_INT (row );
192
200
row_column [1 ] = MP_OBJ_NEW_SMALL_INT (column );
193
201
194
202
return mp_obj_new_tuple (2 , row_column );
195
203
}
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 );
197
205
198
206
//| def row_column_to_key_number(self, row: int, column: int) -> int:
199
207
//| """Return the key number for a given row and column.
200
208
//| The key number is ``row * len(column_pins) + column``.
201
209
//| """
202
210
//| ...
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 );
205
213
check_for_deinit (self );
206
214
207
215
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 );
209
217
210
218
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 );
212
220
213
221
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 ));
215
223
}
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 );
217
225
218
226
//| events: EventQueue
219
227
//| """The `EventQueue` associated with this `Keys` object. (read-only)
220
228
//| """
221
229
//|
222
230
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 ) },
225
233
{ 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 ) },
227
235
228
236
{ MP_ROM_QSTR (MP_QSTR_events ), MP_ROM_PTR (& keypad_generic_events_obj ) },
229
237
{ MP_ROM_QSTR (MP_QSTR_key_count ), MP_ROM_PTR (& keypad_generic_key_count_obj ) },
230
238
{ 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 ) },
233
241
};
234
242
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
236
246
237
247
MP_DEFINE_CONST_OBJ_TYPE (
238
- cardputer_demuxkeymatrix_type ,
248
+ keypad_demuxkeymatrix_type ,
239
249
MP_QSTR_KeyMatrix ,
240
250
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
243
255
);
0 commit comments