44//
55// SPDX-License-Identifier: MIT
66
7+ #include "board.h"
78#include "keymap.h"
89#include "supervisor/board.h"
910#include "supervisor/shared/serial.h"
1314#include "shared-bindings/microcontroller/Pin.h"
1415#include "shared-module/displayio/__init__.h"
1516#include "shared-module/displayio/mipi_constants.h"
17+ #include "shared-module/os/__init__.h"
1618#include "shared-bindings/board/__init__.h"
17- #include "shared-bindings/keypad_demux/DemuxKeyMatrix.h"
1819#include "shared-bindings/keypad/EventQueue.h"
1920#include "shared-bindings/keypad/Event.h"
2021#include "supervisor/shared/reload.h"
2324#include "shared/runtime/interrupt_char.h"
2425
2526keypad_demux_demuxkeymatrix_obj_t board_keyboard ;
27+ bool board_keyboard_serial_enabled = false;
2628
2729void update_keyboard (keypad_eventqueue_obj_t * queue );
2830void keyboard_seq (const char * seq );
@@ -123,7 +125,7 @@ void board_init(void) {
123125}
124126
125127void board_serial_init () {
126- ringbuf_init ( & keyqueue , ( uint8_t * ) keybuf , sizeof ( keybuf )) ;
128+ board_keyboard . base . type = & keypad_demux_demuxkeymatrix_type ;
127129 common_hal_keypad_demux_demuxkeymatrix_construct (
128130 & board_keyboard , // self
129131 3 , // num_row_addr_pins
@@ -135,16 +137,30 @@ void board_serial_init() {
135137 2 // debounce_threshold
136138 );
137139 demuxkeymatrix_never_reset (& board_keyboard );
138- common_hal_keypad_eventqueue_set_event_handler (board_keyboard .events , update_keyboard );
139140
141+ // Wire the keyboard input to serial input (sys.stdin)
142+ // unless M5STACK_CARDPUTER_KEYBOARD_SERIAL=0 in /settings.toml
143+ mp_int_t enable_keyboard_serial ;
144+ os_getenv_err_t enable_keyboard_err = common_hal_os_getenv_int ("M5STACK_CARDPUTER_KEYBOARD_SERIAL" , & enable_keyboard_serial );
145+ board_keyboard_serial_enabled = (enable_keyboard_err != GETENV_OK ) || enable_keyboard_serial > 0 ;
146+ if (!board_keyboard_serial_enabled ) {
147+ return ;
148+ }
149+
150+ ringbuf_init (& keyqueue , (uint8_t * )keybuf , sizeof (keybuf ));
151+ common_hal_keypad_eventqueue_set_event_handler (board_keyboard .events , update_keyboard );
140152}
141153
142154bool board_serial_connected () {
143- return true ;
155+ return board_keyboard_serial_enabled ;
144156}
145157
146158uint32_t board_serial_bytes_available () {
147- return ringbuf_num_filled (& keyqueue );
159+ if (board_keyboard_serial_enabled ) {
160+ return ringbuf_num_filled (& keyqueue );
161+ } else {
162+ return 0 ;
163+ }
148164}
149165
150166void keyboard_seq (const char * seq ) {
@@ -219,7 +235,11 @@ void update_keyboard(keypad_eventqueue_obj_t *queue) {
219235}
220236
221237char board_serial_read () {
222- return ringbuf_get (& keyqueue );
238+ if (board_keyboard_serial_enabled ) {
239+ return ringbuf_get (& keyqueue );
240+ } else {
241+ return 0 ;
242+ }
223243}
224244
225245// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
0 commit comments