Skip to content

Commit b566458

Browse files
committed
fix crash on user code exit
1 parent 0d3e81f commit b566458

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

ports/esp32s2/common-hal/ps2io/Ps2.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626

2727
#include "common-hal/ps2io/Ps2.h"
2828

29-
#include "py/runtime.h"
3029
#include "supervisor/port.h"
31-
#include "shared-bindings/ps2io/Ps2.h"
3230
#include "shared-bindings/microcontroller/__init__.h"
3331

3432
#define STATE_IDLE 0
@@ -259,6 +257,10 @@ void common_hal_ps2io_ps2_deinit(ps2io_ps2_obj_t* self) {
259257
self->data_pin = GPIO_NUM_MAX;
260258
}
261259

260+
void ps2_reset(void) {
261+
gpio_uninstall_isr_service();
262+
}
263+
262264
uint16_t common_hal_ps2io_ps2_get_len(ps2io_ps2_obj_t* self) {
263265
return self->bufcount;
264266
}

ports/esp32s2/common-hal/ps2io/Ps2.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,6 @@ typedef struct {
5555
uint8_t cmd_response;
5656
} ps2io_ps2_obj_t;
5757

58+
void ps2_reset(void);
59+
5860
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_PS2IO_PS2_H

ports/esp32s2/supervisor/port.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#include "common-hal/busio/I2C.h"
4242
#include "common-hal/busio/SPI.h"
4343
#include "common-hal/busio/UART.h"
44+
#include "common-hal/ps2io/Ps2.h"
4445
#include "common-hal/pulseio/PulseIn.h"
4546
#include "common-hal/pwmio/PWMOut.h"
4647
#include "common-hal/watchdog/WatchDogTimer.h"
@@ -104,6 +105,10 @@ void reset_port(void) {
104105
analogout_reset();
105106
#endif
106107

108+
#if CIRCUITPY_PS2IO
109+
ps2_reset();
110+
#endif
111+
107112
#if CIRCUITPY_PULSEIO
108113
esp32s2_peripherals_rmt_reset();
109114
pulsein_reset();

shared-bindings/ps2io/Ps2.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ STATIC void check_for_deinit(ps2io_ps2_obj_t *self) {
116116
//| ...
117117
//|
118118
STATIC mp_obj_t ps2io_ps2_obj___exit__(size_t n_args, const mp_obj_t *args) {
119-
(void)n_args;
120-
common_hal_ps2io_ps2_deinit(args[0]);
119+
mp_check_self(MP_OBJ_IS_TYPE(args[0], &ps2io_ps2_type));
120+
ps2io_ps2_obj_t *self = MP_OBJ_TO_PTR(args[0]);
121+
common_hal_ps2io_ps2_deinit(self);
121122
return mp_const_none;
122123
}
123124
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ps2io_ps2___exit___obj, 4, 4, ps2io_ps2_obj___exit__);

0 commit comments

Comments
 (0)