summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormicroDev <70126934+microDev1@users.noreply.github.com>2020-11-19 11:44:22 +0530
committermicroDev <70126934+microDev1@users.noreply.github.com>2020-11-19 11:44:22 +0530
commitb56645808c88cca22a42cb66ed7b3ddc8383436a (patch)
tree983e5d3b929585fec0d847e3bc48338eb47c1987
parent0d3e81f969adc6d8744e8e720ec4b01848a8fa6c (diff)
fix crash on user code exit
-rw-r--r--ports/esp32s2/common-hal/ps2io/Ps2.c6
-rw-r--r--ports/esp32s2/common-hal/ps2io/Ps2.h2
-rw-r--r--ports/esp32s2/supervisor/port.c5
-rw-r--r--shared-bindings/ps2io/Ps2.c5
4 files changed, 14 insertions, 4 deletions
diff --git a/ports/esp32s2/common-hal/ps2io/Ps2.c b/ports/esp32s2/common-hal/ps2io/Ps2.c
index 9c19ea950..56199f4cb 100644
--- a/ports/esp32s2/common-hal/ps2io/Ps2.c
+++ b/ports/esp32s2/common-hal/ps2io/Ps2.c
@@ -26,9 +26,7 @@
#include "common-hal/ps2io/Ps2.h"
-#include "py/runtime.h"
#include "supervisor/port.h"
-#include "shared-bindings/ps2io/Ps2.h"
#include "shared-bindings/microcontroller/__init__.h"
#define STATE_IDLE 0
@@ -259,6 +257,10 @@ void common_hal_ps2io_ps2_deinit(ps2io_ps2_obj_t* self) {
self->data_pin = GPIO_NUM_MAX;
}
+void ps2_reset(void) {
+ gpio_uninstall_isr_service();
+}
+
uint16_t common_hal_ps2io_ps2_get_len(ps2io_ps2_obj_t* self) {
return self->bufcount;
}
diff --git a/ports/esp32s2/common-hal/ps2io/Ps2.h b/ports/esp32s2/common-hal/ps2io/Ps2.h
index eb93829b4..497952b25 100644
--- a/ports/esp32s2/common-hal/ps2io/Ps2.h
+++ b/ports/esp32s2/common-hal/ps2io/Ps2.h
@@ -55,4 +55,6 @@ typedef struct {
uint8_t cmd_response;
} ps2io_ps2_obj_t;
+void ps2_reset(void);
+
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_PS2IO_PS2_H
diff --git a/ports/esp32s2/supervisor/port.c b/ports/esp32s2/supervisor/port.c
index 47d0c7f46..f66a8511a 100644
--- a/ports/esp32s2/supervisor/port.c
+++ b/ports/esp32s2/supervisor/port.c
@@ -41,6 +41,7 @@
#include "common-hal/busio/I2C.h"
#include "common-hal/busio/SPI.h"
#include "common-hal/busio/UART.h"
+#include "common-hal/ps2io/Ps2.h"
#include "common-hal/pulseio/PulseIn.h"
#include "common-hal/pwmio/PWMOut.h"
#include "common-hal/watchdog/WatchDogTimer.h"
@@ -104,6 +105,10 @@ void reset_port(void) {
analogout_reset();
#endif
+#if CIRCUITPY_PS2IO
+ ps2_reset();
+#endif
+
#if CIRCUITPY_PULSEIO
esp32s2_peripherals_rmt_reset();
pulsein_reset();
diff --git a/shared-bindings/ps2io/Ps2.c b/shared-bindings/ps2io/Ps2.c
index 0977e08ff..07fa5cebb 100644
--- a/shared-bindings/ps2io/Ps2.c
+++ b/shared-bindings/ps2io/Ps2.c
@@ -116,8 +116,9 @@ STATIC void check_for_deinit(ps2io_ps2_obj_t *self) {
//| ...
//|
STATIC mp_obj_t ps2io_ps2_obj___exit__(size_t n_args, const mp_obj_t *args) {
- (void)n_args;
- common_hal_ps2io_ps2_deinit(args[0]);
+ mp_check_self(MP_OBJ_IS_TYPE(args[0], &ps2io_ps2_type));
+ ps2io_ps2_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+ common_hal_ps2io_ps2_deinit(self);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ps2io_ps2___exit___obj, 4, 4, ps2io_ps2_obj___exit__);