From 89b3c8bb7fa13e92ffeb75714be230285af9ddc4 Mon Sep 17 00:00:00 2001 From: "freddy.li" Date: Sat, 13 Nov 2021 15:00:51 +0800 Subject: [PATCH 1/3] Fixed a bug in SecureData functionality --- ports/quectel/core/source/modsecuredata.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ports/quectel/core/source/modsecuredata.c b/ports/quectel/core/source/modsecuredata.c index 054ac17..da8dc82 100644 --- a/ports/quectel/core/source/modsecuredata.c +++ b/ports/quectel/core/source/modsecuredata.c @@ -73,7 +73,8 @@ STATIC mp_obj_t qpy_securedata_read(size_t n_args, const mp_obj_t *pos_args, mp_ return mp_obj_new_int(ret); } - strncpy((char *)bufinfo.buf, (char *)sec_data.pBuffer,strlen((char *)sec_data.pBuffer)); + //strncpy((char *)bufinfo.buf, (char *)sec_data.pBuffer,strlen((char *)sec_data.pBuffer)); + memcpy((char *)bufinfo.buf, (char *)sec_data.pBuffer, ret); if (sec_data.pBuffer) { free(sec_data.pBuffer); -- Gitee From 4d01fc5471c35694e7c1820ce2cb01df6188e611 Mon Sep 17 00:00:00 2001 From: "freddy.li" Date: Sat, 13 Nov 2021 15:03:44 +0800 Subject: [PATCH 2/3] Optimized stopping scripts of CTRL_C --- lib/utils/pyexec.c | 8 ++++++-- ports/quectel/core/source/modexample.c | 2 -- ports/quectel/core/source/quecpython.c | 2 -- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/utils/pyexec.c b/lib/utils/pyexec.c index 450604a..f66e6e7 100644 --- a/lib/utils/pyexec.c +++ b/lib/utils/pyexec.c @@ -704,8 +704,9 @@ friendly_repl_reset: } } } - + MAINPY_RUNNING_FLAG_SET(); ret = parse_compile_execute(&line, parse_input_kind, EXEC_FLAG_ALLOW_DEBUGGING | EXEC_FLAG_IS_REPL | EXEC_FLAG_SOURCE_IS_VSTR); + MAINPY_RUNNING_FLAG_CLEAR(); if (ret & PYEXEC_FORCED_EXIT) { return ret; } @@ -728,7 +729,10 @@ int pyexec_file_if_exists(const char *filename) { if (mp_import_stat(filename) != MP_IMPORT_STAT_FILE) { return 1; // success (no file is the same as an empty file executing without fail) } - return pyexec_file(filename); + if(IS_PYTHON_MAIN_THREAD()) {MAINPY_RUNNING_FLAG_SET();} + int ret = pyexec_file(filename); + if(IS_PYTHON_MAIN_THREAD()) {MAINPY_RUNNING_FLAG_CLEAR();} + return ret; } #if MICROPY_MODULE_FROZEN diff --git a/ports/quectel/core/source/modexample.c b/ports/quectel/core/source/modexample.c index 97c3d08..8451e86 100644 --- a/ports/quectel/core/source/modexample.c +++ b/ports/quectel/core/source/modexample.c @@ -120,9 +120,7 @@ STATIC mp_obj_t example_exec(const mp_obj_t arg0) { snprintf(fname, sizeof(fname), "%s", (char *)bufinfo.buf); } - MAINPY_RUNNING_FLAG_SET(); ret = pyexec_file_if_exists(fname); - MAINPY_RUNNING_FLAG_CLEAR(); } if ( ret == -1 ) { diff --git a/ports/quectel/core/source/quecpython.c b/ports/quectel/core/source/quecpython.c index 9c63bde..d52903d 100644 --- a/ports/quectel/core/source/quecpython.c +++ b/ports/quectel/core/source/quecpython.c @@ -179,9 +179,7 @@ soft_reset: pyexec_frozen_module("_boot.py"); #endif if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL && MAINPY_INTERRUPT_BY_KBD_FLAG_FALSE()) { - MAINPY_RUNNING_FLAG_SET(); int ret = pyexec_file_if_exists("/usr/main.py"); - MAINPY_RUNNING_FLAG_CLEAR(); if(RET_KBD_INTERRUPT == ret) { MAINPY_INTERRUPT_BY_KBD_FLAG_SET(); -- Gitee From 51a36c7e0ed6bfaf6a3e4aaec5010f656fbfdc9a Mon Sep 17 00:00:00 2001 From: "freddy.li" Date: Sat, 13 Nov 2021 15:05:40 +0800 Subject: [PATCH 3/3] Optimization of a single object to avoid repeated instantiation --- ports/quectel/core/source/audio_record.c | 9 ++++++++- ports/quectel/core/source/modfota.c | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ports/quectel/core/source/audio_record.c b/ports/quectel/core/source/audio_record.c index 0186e49..076b6d9 100644 --- a/ports/quectel/core/source/audio_record.c +++ b/ports/quectel/core/source/audio_record.c @@ -57,6 +57,7 @@ typedef struct _audio_record_obj_t { audio_record_obj_t *self_cur = NULL; +static audio_record_obj_t *record_self_obj = NULL; static c_callback_t *g_record_callback; static c_callback_t *callback_cur; @@ -75,7 +76,12 @@ STATIC mp_obj_t audio_record_make_new(const mp_obj_type_t *type, size_t n_args, { mp_arg_check_num(n_args, n_kw, 0, 1, true); - audio_record_obj_t *self = m_new_obj_with_finaliser(audio_record_obj_t); + if (record_self_obj == NULL) + { + record_self_obj = m_new_obj_with_finaliser(audio_record_obj_t); + } + audio_record_obj_t *self = record_self_obj; + self->base.type = &audio_record_type; self->isbusy = 0; @@ -826,6 +832,7 @@ STATIC mp_obj_t helios_audio_deinit(mp_obj_t self_in) Helios_OSTimer_Delete(self->rec_timer); } + record_self_obj = NULL; g_record_callback = NULL; callback_cur = NULL; record_state = 0; diff --git a/ports/quectel/core/source/modfota.c b/ports/quectel/core/source/modfota.c index d72c37d..2a7d0c2 100644 --- a/ports/quectel/core/source/modfota.c +++ b/ports/quectel/core/source/modfota.c @@ -42,10 +42,15 @@ typedef struct _fota_obj_t { }fota_obj_t; const mp_obj_type_t mp_fota_type; +static fota_obj_t *fota_self_obj = NULL; STATIC mp_obj_t fota_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - fota_obj_t *self = m_new_obj_with_finaliser(fota_obj_t); + if (fota_self_obj == NULL) + { + fota_self_obj = m_new_obj_with_finaliser(fota_obj_t); + } + fota_obj_t *self = fota_self_obj; self->base.type = &mp_fota_type; self->ctx = Helios_Fota_Init(); @@ -220,6 +225,7 @@ STATIC mp_obj_t fota___del__(mp_obj_t self_in) Helios_Fota_Deinit(self->ctx); fota_callback = NULL; + fota_self_obj = NULL; return mp_obj_new_int(0); } -- Gitee