From 765d32483f714189a104a71e9f82ecdc2ff3ea63 Mon Sep 17 00:00:00 2001 From: lyon Date: Sat, 17 Dec 2022 16:02:59 +0800 Subject: [PATCH 01/20] add __platform_panic_hanlde --- .../pikascript-lib/PikaStdDevice/pika_hal.c | 8 +++++--- .../pikascript/pikascript-lib/ctypes/ctypes.c | 3 +-- src/PikaObj.h | 2 +- src/PikaPlatform.c | 5 +++++ src/PikaPlatform.h | 3 +++ src/PikaVM.c | 18 ++++++------------ src/PikaVersion.h | 2 +- test/hal-test.cpp | 12 +++++++++++- 8 files changed, 33 insertions(+), 20 deletions(-) diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c index f2ff8e0d4..1b241f88c 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c @@ -53,6 +53,7 @@ __exit: __platform_printf("Error: dev_open failed.\r\n"); if (dev->ioctl_config) { pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev_type)); + dev->ioctl_config = NULL; } if (dev) { pikaFree(dev, sizeof(pika_dev)); @@ -71,11 +72,12 @@ int pika_hal_close(pika_dev* dev) { } ret = impl->close(dev); __exit: - if (NULL != dev) { - pikaFree(dev, sizeof(pika_dev)); - } if (NULL != dev->ioctl_config) { pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev->type)); + dev->ioctl_config = NULL; + } + if (NULL != dev) { + pikaFree(dev, sizeof(pika_dev)); } return ret; } diff --git a/port/linux/package/pikascript/pikascript-lib/ctypes/ctypes.c b/port/linux/package/pikascript/pikascript-lib/ctypes/ctypes.c index d0acb7564..c9bd5222a 100644 --- a/port/linux/package/pikascript/pikascript-lib/ctypes/ctypes.c +++ b/port/linux/package/pikascript/pikascript-lib/ctypes/ctypes.c @@ -98,7 +98,6 @@ void ctypes_c_buffer___init__(PikaObj *self, Arg* value, int size){ strGetSize((char*)value_buffer) + 1); } else { __platform_printf("value type is not support!"); - while (1) - ; + __platform_panic_handle(); } } diff --git a/src/PikaObj.h b/src/PikaObj.h index 5d885d8e1..d1e89320b 100644 --- a/src/PikaObj.h +++ b/src/PikaObj.h @@ -388,7 +388,7 @@ static inline uint8_t obj_refcntNow(PikaObj* self) { #define WEAK_FUNCTION_NEED_OVERRIDE_ERROR(_) \ __platform_printf("Error: weak function `%s()` need override.\r\n", \ __FUNCTION__); \ - while (1) + __platform_panic_handle(); char* obj_cacheStr(PikaObj* self, char* str); PikaObj* _arg_to_obj(Arg* self, PIKA_BOOL* pIsTemp); diff --git a/src/PikaPlatform.c b/src/PikaPlatform.c index 7912a8cea..7a8ae2c6a 100644 --- a/src/PikaPlatform.c +++ b/src/PikaPlatform.c @@ -65,6 +65,11 @@ PIKA_WEAK void __platform_error_handle() { return; } +PIKA_WEAK void __platform_panic_handle() { + while (1) { + }; +} + PIKA_WEAK uint8_t __is_locked_pikaMemory(void) { return 0; } diff --git a/src/PikaPlatform.h b/src/PikaPlatform.h index e387254a4..8233bb743 100644 --- a/src/PikaPlatform.h +++ b/src/PikaPlatform.h @@ -168,6 +168,9 @@ long __platform_ftell(FILE* stream); /* error */ void __platform_error_handle(void); +/* panic */ +void __platform_panic_handle(void); + void __pks_hook_instruct(void); PIKA_BOOL __pks_hook_arg_cache_filter(void* self); PIKA_WEAK void __platform_thread_delay(void); diff --git a/src/PikaVM.c b/src/PikaVM.c index 66298280a..b7d86734c 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -65,8 +65,7 @@ static PIKA_BOOL _cq_isFull(volatile EventCQ* cq) { void VMSignal_deinit(void) { #if !PIKA_EVENT_ENABLE __platform_printf("PIKA_EVENT_ENABLE is not enable"); - while (1) { - }; + __platform_panic_handle(); #else for (int i = 0; i < PIKA_EVENT_LIST_SIZE; i++) { if (NULL != PikaVMSignal.cq.res[i]) { @@ -82,8 +81,7 @@ PIKA_RES VMSignal_pushEvent(PikaEventListener* lisener, int eventSignal) { #if !PIKA_EVENT_ENABLE __platform_printf("PIKA_EVENT_ENABLE is not enable"); - while (1) { - }; + __platform_panic_handle(); #else /* push to event_cq_buff */ if (_cq_isFull(&PikaVMSignal.cq)) { @@ -107,8 +105,7 @@ PIKA_RES VMSignal_popEvent(PikaEventListener** lisener_p, int* head) { #if !PIKA_EVENT_ENABLE __platform_printf("PIKA_EVENT_ENABLE is not enable"); - while (1) { - }; + __platform_panic_handle(); #else /* pop from event_cq_buff */ if (_cq_isEmpty(&PikaVMSignal.cq)) { @@ -126,8 +123,7 @@ PIKA_RES VMSignal_popEvent(PikaEventListener** lisener_p, void VMSignale_pickupEvent(void) { #if !PIKA_EVENT_ENABLE __platform_printf("PIKA_EVENT_ENABLE is not enable"); - while (1) { - }; + __platform_panic_handle(); #else PikaObj* event_lisener; uint32_t event_id; @@ -1138,8 +1134,7 @@ static int VMState_loadArgsFromMethodArg(VMState* vm, __platform_printf( "OverflowError: type list is too long, please use bigger " "PIKA_LINE_BUFF_SIZE\r\n"); - while (1) - ; + __platform_panic_handle(); } f.method_type = arg_getType(method_arg); @@ -1527,8 +1522,7 @@ static Arg* VM_instruction_handler_RUN(PikaObj* self, __platform_printf( "[ERROR] Too many args in RUN instruction, please use bigger " "#define PIKA_ARG_NUM_MAX\n"); - while (1) { - } + __platform_panic_handle(); } for (int i = 0; i < n_arg; i++) { stack_tmp[i] = stack_popArg_alloc(&(vm->stack)); diff --git a/src/PikaVersion.h b/src/PikaVersion.h index a22997e51..54bc29906 100644 --- a/src/PikaVersion.h +++ b/src/PikaVersion.h @@ -2,4 +2,4 @@ #define PIKA_VERSION_MINOR 11 #define PIKA_VERSION_MICRO 9 -#define PIKA_EDIT_TIME "2022/12/17 15:47:06" +#define PIKA_EDIT_TIME "2022/12/17 16:02:58" diff --git a/test/hal-test.cpp b/test/hal-test.cpp index 498417258..1429c9488 100644 --- a/test/hal-test.cpp +++ b/test/hal-test.cpp @@ -1,9 +1,19 @@ #include "test_common.h" extern "C" { #include "../package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h" + +int pika_hal_platform_GPIO_open(pika_dev* dev, char* name){ + return 0; } +int pika_hal_platform_GPIO_close(pika_dev* dev){ + return 0; +} + +} + + TEST(hal, open) { pika_dev* io = pika_hal_open(PIKA_HAL_GPIO, "PA10"); - EXPECT_EQ(0, (uintptr_t)io); + pika_hal_close(io); } From c402e1bb69cc1fd2491ddb966997afbf01cd718c Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Sun, 18 Dec 2022 15:33:42 +0800 Subject: [PATCH 02/20] fix base64.encode buffer too small --- package/base64/base64.c | 4 +++- port/linux/package/pikascript/pikascript-lib/base64/base64.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/package/base64/base64.c b/package/base64/base64.c index b2064b785..4368f5e31 100644 --- a/package/base64/base64.c +++ b/package/base64/base64.c @@ -6,6 +6,7 @@ Arg* base64_b64decode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error + obj_setSysOut(self, "base64.b64decode input not bytes"); } uint8_t* input_buff = arg_getBytes(s); @@ -24,10 +25,11 @@ Arg* base64_b64encode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error + obj_setSysOut(self, "base64.b64encode input not bytes"); } uint8_t* input_buff = arg_getBytes(s); size_t input_len = arg_getBytesSize(s); - obj_setBytes(self, "__de_buff", NULL, (size_t)(input_len * 1.5)); + obj_setBytes(self, "__de_buff", NULL, (size_t)(input_len * 2)); uint8_t* output_buff = obj_getBytes(self, "__de_buff"); size_t output_len = 0; mbedtls_base64_encode(output_buff, obj_getBytesSize(self, "__de_buff"), diff --git a/port/linux/package/pikascript/pikascript-lib/base64/base64.c b/port/linux/package/pikascript/pikascript-lib/base64/base64.c index b2064b785..4368f5e31 100644 --- a/port/linux/package/pikascript/pikascript-lib/base64/base64.c +++ b/port/linux/package/pikascript/pikascript-lib/base64/base64.c @@ -6,6 +6,7 @@ Arg* base64_b64decode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error + obj_setSysOut(self, "base64.b64decode input not bytes"); } uint8_t* input_buff = arg_getBytes(s); @@ -24,10 +25,11 @@ Arg* base64_b64encode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error + obj_setSysOut(self, "base64.b64encode input not bytes"); } uint8_t* input_buff = arg_getBytes(s); size_t input_len = arg_getBytesSize(s); - obj_setBytes(self, "__de_buff", NULL, (size_t)(input_len * 1.5)); + obj_setBytes(self, "__de_buff", NULL, (size_t)(input_len * 2)); uint8_t* output_buff = obj_getBytes(self, "__de_buff"); size_t output_len = 0; mbedtls_base64_encode(output_buff, obj_getBytesSize(self, "__de_buff"), From f06a26299574a8ef84991d48369edf0a88505857 Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Sun, 18 Dec 2022 15:38:31 +0800 Subject: [PATCH 03/20] optimize hmac memory usage --- package/hmac/_hmac_HMAC.c | 25 +++++++++++-------- .../pikascript-lib/hmac/_hmac_HMAC.c | 25 +++++++++++-------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/package/hmac/_hmac_HMAC.c b/package/hmac/_hmac_HMAC.c index 4b3a9ea16..ca983a349 100644 --- a/package/hmac/_hmac_HMAC.c +++ b/package/hmac/_hmac_HMAC.c @@ -10,15 +10,21 @@ enum { static void hmac_to_hex(uint8_t* s, int l, uint8_t* d); +static void init_buff(PikaObj* self, size_t h) { + obj_setBytes(self, "_buff", NULL, h); + obj_setBytes(self, "_hexbuff", NULL, (h * 2)); + memset(obj_getBytes(self, "_buff"), 0, h); + memset(obj_getBytes(self, "_hexbuff"), 0, (h * 2)); +} + void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { ArgType t; t = arg_getType(key); - if (ARG_TYPE_NONE != t) { - if (ARG_TYPE_BYTES != t) { - obj_setErrorCode(self, -2); // io error - obj_setSysOut(self, "hmac.new() key type error"); - } + if (ARG_TYPE_BYTES != t) { + obj_setErrorCode(self, -2); // io error + obj_setSysOut(self, "hmac.new() key type error"); } + t = arg_getType(msg); if (ARG_TYPE_NONE != t) { if (ARG_TYPE_BYTES != t) { @@ -31,11 +37,7 @@ void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { uint8_t* key_data = arg_getBytes(key); size_t msg_len = arg_getBytesSize(msg); uint8_t* msg_data = arg_getBytes(msg); - obj_setInt(self, "_digest_flags", 0); // flag - obj_setBytes(self, "_buff", NULL, PIKA_HMAC_SHA256); // digest buff - obj_setBytes(self, "_hexbuff", NULL, PIKA_HMAC_SHA256 * 2); - memset(obj_getBytes(self, "_buff"), 0, PIKA_HMAC_SHA256); - memset(obj_getBytes(self, "_hexbuff"), 0, PIKA_HMAC_SHA256 * 2); + obj_setInt(self, "_digest_flags", 0); // flag mbedtls_md_context_t ctx; mbedtls_md_init(&ctx); @@ -43,14 +45,17 @@ void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { strcmp(digestmod, "HMAC-MD5") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_MD5), 1); obj_setInt(self, "_mode", PIKA_HMAC_MD5); + init_buff(self, PIKA_HMAC_MD5); } else if (strcmp(digestmod, "hmac-sha1") == 0 || strcmp(digestmod, "HMAC-SHA1") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA1); + init_buff(self, PIKA_HMAC_SHA1); } else if (strcmp(digestmod, "hmac-sha256") == 0 || strcmp(digestmod, "HMAC-SHA256") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA256); + init_buff(self, PIKA_HMAC_SHA256); } else { obj_setErrorCode(self, -2); // io error obj_setSysOut(self, "hmac.new() not support mode"); diff --git a/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c b/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c index 4b3a9ea16..ca983a349 100644 --- a/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c +++ b/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c @@ -10,15 +10,21 @@ enum { static void hmac_to_hex(uint8_t* s, int l, uint8_t* d); +static void init_buff(PikaObj* self, size_t h) { + obj_setBytes(self, "_buff", NULL, h); + obj_setBytes(self, "_hexbuff", NULL, (h * 2)); + memset(obj_getBytes(self, "_buff"), 0, h); + memset(obj_getBytes(self, "_hexbuff"), 0, (h * 2)); +} + void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { ArgType t; t = arg_getType(key); - if (ARG_TYPE_NONE != t) { - if (ARG_TYPE_BYTES != t) { - obj_setErrorCode(self, -2); // io error - obj_setSysOut(self, "hmac.new() key type error"); - } + if (ARG_TYPE_BYTES != t) { + obj_setErrorCode(self, -2); // io error + obj_setSysOut(self, "hmac.new() key type error"); } + t = arg_getType(msg); if (ARG_TYPE_NONE != t) { if (ARG_TYPE_BYTES != t) { @@ -31,11 +37,7 @@ void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { uint8_t* key_data = arg_getBytes(key); size_t msg_len = arg_getBytesSize(msg); uint8_t* msg_data = arg_getBytes(msg); - obj_setInt(self, "_digest_flags", 0); // flag - obj_setBytes(self, "_buff", NULL, PIKA_HMAC_SHA256); // digest buff - obj_setBytes(self, "_hexbuff", NULL, PIKA_HMAC_SHA256 * 2); - memset(obj_getBytes(self, "_buff"), 0, PIKA_HMAC_SHA256); - memset(obj_getBytes(self, "_hexbuff"), 0, PIKA_HMAC_SHA256 * 2); + obj_setInt(self, "_digest_flags", 0); // flag mbedtls_md_context_t ctx; mbedtls_md_init(&ctx); @@ -43,14 +45,17 @@ void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { strcmp(digestmod, "HMAC-MD5") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_MD5), 1); obj_setInt(self, "_mode", PIKA_HMAC_MD5); + init_buff(self, PIKA_HMAC_MD5); } else if (strcmp(digestmod, "hmac-sha1") == 0 || strcmp(digestmod, "HMAC-SHA1") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA1); + init_buff(self, PIKA_HMAC_SHA1); } else if (strcmp(digestmod, "hmac-sha256") == 0 || strcmp(digestmod, "HMAC-SHA256") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA256); + init_buff(self, PIKA_HMAC_SHA256); } else { obj_setErrorCode(self, -2); // io error obj_setSysOut(self, "hmac.new() not support mode"); From a8bd50cfae082eea704c94f7c7a4171c2b1e6fe5 Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Sun, 18 Dec 2022 15:40:37 +0800 Subject: [PATCH 04/20] hmac compatible cpython input parameters --- examples/hmac/test_hmac.py | 6 +++--- package/hmac/_hmac_HMAC.c | 12 ++++++------ package/hmac/hmac.py | 2 +- port/linux/package/pikascript/hmac.py | 2 +- .../pikascript/pikascript-lib/hmac/_hmac_HMAC.c | 12 ++++++------ test/python/hmac/test_hmac.py | 6 +++--- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/hmac/test_hmac.py b/examples/hmac/test_hmac.py index f4232db47..1db0b1013 100644 --- a/examples/hmac/test_hmac.py +++ b/examples/hmac/test_hmac.py @@ -3,14 +3,14 @@ import hmac secret = "0123456789" payload = "helloworld" -h = hmac.new(secret.encode(),digestmod="hmac-md5") +h = hmac.new(secret.encode(),digestmod="md5") h.update(payload.encode()) print("hmac-md5:",h.hexdigest()) -h = hmac.new(secret.encode(),digestmod="hmac-sha1") +h = hmac.new(secret.encode(),digestmod="sha1") h.update(payload.encode()) print("hmac-sha1:",h.hexdigest()) -h = hmac.new(secret.encode(),digestmod="hmac-sha256") +h = hmac.new(secret.encode(),digestmod="sha256") h.update(payload.encode()) print("hmac-sha256:",h.hexdigest()) diff --git a/package/hmac/_hmac_HMAC.c b/package/hmac/_hmac_HMAC.c index ca983a349..02425a242 100644 --- a/package/hmac/_hmac_HMAC.c +++ b/package/hmac/_hmac_HMAC.c @@ -41,18 +41,18 @@ void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { mbedtls_md_context_t ctx; mbedtls_md_init(&ctx); - if (strcmp(digestmod, "hmac-md5") == 0 || - strcmp(digestmod, "HMAC-MD5") == 0) { + if (strcmp(digestmod, "md5") == 0 || + strcmp(digestmod, "MD5") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_MD5), 1); obj_setInt(self, "_mode", PIKA_HMAC_MD5); init_buff(self, PIKA_HMAC_MD5); - } else if (strcmp(digestmod, "hmac-sha1") == 0 || - strcmp(digestmod, "HMAC-SHA1") == 0) { + } else if (strcmp(digestmod, "sha1") == 0 || + strcmp(digestmod, "SHA1") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA1); init_buff(self, PIKA_HMAC_SHA1); - } else if (strcmp(digestmod, "hmac-sha256") == 0 || - strcmp(digestmod, "HMAC-SHA256") == 0) { + } else if (strcmp(digestmod, "sha256") == 0 || + strcmp(digestmod, "SHA256") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA256); init_buff(self, PIKA_HMAC_SHA256); diff --git a/package/hmac/hmac.py b/package/hmac/hmac.py index a632ce8ed..36836f6a2 100644 --- a/package/hmac/hmac.py +++ b/package/hmac/hmac.py @@ -1,6 +1,6 @@ import _hmac -def new(key:any, msg=None, digestmod="hmac-md5") -> _hmac.HMAC: +def new(key:any, msg=None, digestmod="md5") -> _hmac.HMAC: hmac = _hmac.HMAC() hmac.new(key, msg, digestmod) return hmac diff --git a/port/linux/package/pikascript/hmac.py b/port/linux/package/pikascript/hmac.py index a632ce8ed..36836f6a2 100644 --- a/port/linux/package/pikascript/hmac.py +++ b/port/linux/package/pikascript/hmac.py @@ -1,6 +1,6 @@ import _hmac -def new(key:any, msg=None, digestmod="hmac-md5") -> _hmac.HMAC: +def new(key:any, msg=None, digestmod="md5") -> _hmac.HMAC: hmac = _hmac.HMAC() hmac.new(key, msg, digestmod) return hmac diff --git a/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c b/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c index ca983a349..02425a242 100644 --- a/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c +++ b/port/linux/package/pikascript/pikascript-lib/hmac/_hmac_HMAC.c @@ -41,18 +41,18 @@ void _hmac_HMAC_new(PikaObj* self, Arg* key, Arg* msg, char* digestmod) { mbedtls_md_context_t ctx; mbedtls_md_init(&ctx); - if (strcmp(digestmod, "hmac-md5") == 0 || - strcmp(digestmod, "HMAC-MD5") == 0) { + if (strcmp(digestmod, "md5") == 0 || + strcmp(digestmod, "MD5") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_MD5), 1); obj_setInt(self, "_mode", PIKA_HMAC_MD5); init_buff(self, PIKA_HMAC_MD5); - } else if (strcmp(digestmod, "hmac-sha1") == 0 || - strcmp(digestmod, "HMAC-SHA1") == 0) { + } else if (strcmp(digestmod, "sha1") == 0 || + strcmp(digestmod, "SHA1") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA1); init_buff(self, PIKA_HMAC_SHA1); - } else if (strcmp(digestmod, "hmac-sha256") == 0 || - strcmp(digestmod, "HMAC-SHA256") == 0) { + } else if (strcmp(digestmod, "sha256") == 0 || + strcmp(digestmod, "SHA256") == 0) { mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1); obj_setInt(self, "_mode", PIKA_HMAC_SHA256); init_buff(self, PIKA_HMAC_SHA256); diff --git a/test/python/hmac/test_hmac.py b/test/python/hmac/test_hmac.py index f4232db47..1db0b1013 100644 --- a/test/python/hmac/test_hmac.py +++ b/test/python/hmac/test_hmac.py @@ -3,14 +3,14 @@ import hmac secret = "0123456789" payload = "helloworld" -h = hmac.new(secret.encode(),digestmod="hmac-md5") +h = hmac.new(secret.encode(),digestmod="md5") h.update(payload.encode()) print("hmac-md5:",h.hexdigest()) -h = hmac.new(secret.encode(),digestmod="hmac-sha1") +h = hmac.new(secret.encode(),digestmod="sha1") h.update(payload.encode()) print("hmac-sha1:",h.hexdigest()) -h = hmac.new(secret.encode(),digestmod="hmac-sha256") +h = hmac.new(secret.encode(),digestmod="sha256") h.update(payload.encode()) print("hmac-sha256:",h.hexdigest()) From fd6d39143c395dab61d256ef0c51d2da594f9f0a Mon Sep 17 00:00:00 2001 From: lyon Date: Mon, 19 Dec 2022 16:56:53 +0800 Subject: [PATCH 05/20] support uart for std by pika_hal --- package/PikaStdDevice/PikaStdDevice_UART.c | 60 +++++++++++++++++-- package/PikaStdDevice/pika_hal.c | 8 ++- .../PikaStdDevice/PikaStdDevice_UART.c | 60 +++++++++++++++++-- 3 files changed, 113 insertions(+), 15 deletions(-) diff --git a/package/PikaStdDevice/PikaStdDevice_UART.c b/package/PikaStdDevice/PikaStdDevice_UART.c index 0d491b3ad..301a08b5f 100644 --- a/package/PikaStdDevice/PikaStdDevice_UART.c +++ b/package/PikaStdDevice/PikaStdDevice_UART.c @@ -48,24 +48,72 @@ void PikaStdDevice_UART_writeBytes(PikaObj* self, uint8_t* data, int length) { obj_runNativeMethod(self, "platformWriteBytes", NULL); } +static pika_dev* _get_dev(PikaObj* self) { + pika_dev* dev = obj_getPtr(self, "pika_dev"); + if (NULL != dev) { + return dev; + } + int id = obj_getInt(self, "id"); + char id_str[32] = {0}; + sprintf(id_str, "%d", id); + dev = pika_hal_open(PIKA_HAL_UART, id_str); + if (NULL == dev) { + __platform_printf("Error: open UART '%s' failed.\r\n", id_str); + } + obj_setPtr(self, "pika_dev", dev); + return dev; +} + void PikaStdDevice_UART_platformEnable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + pika_dev* dev = _get_dev(self); + if (NULL == dev) { + __platform_printf("Error: open UART '%d' failed.\r\n", + obj_getInt(self, "id")); + return; + } + pika_hal_UART_config cfg = {0}; + cfg.baudrate = obj_getInt(self, "baudRate"); + pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg); + pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE); } + void PikaStdDevice_UART_platformRead(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + int len = obj_getInt(self, "length"); + obj_setBytes(self, "_readData", NULL, len + 1); + char* buff = obj_getBytes(self, "_readData"); + pika_dev* dev = _get_dev(self); + pika_hal_read(dev, buff, len); + obj_setStr(self, "readData", buff); } + void PikaStdDevice_UART_platformWrite(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + char* data = obj_getStr(self, "writeData"); + pika_dev* dev = _get_dev(self); + pika_hal_write(dev, data, strlen(data)); } void PikaStdDevice_UART_platformDisable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + pika_dev* dev = _get_dev(self); + if (NULL == dev) { + __platform_printf("Error: open UART '%d' failed.\r\n", + obj_getInt(self, "id")); + return; + } + pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE); } void PikaStdDevice_UART_platformReadBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + int len = obj_getInt(self, "length"); + obj_setBytes(self, "_readData", NULL, len + 1); + uint8_t* buff = obj_getBytes(self, "_readData"); + pika_dev* dev = _get_dev(self); + pika_hal_read(dev, buff, len); + obj_setBytes(self, "readData", buff, len); } void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + uint8_t* data = obj_getBytes(self, "writeData"); + int len = obj_getBytesLen(self, "writeData"); + pika_dev* dev = _get_dev(self); + pika_hal_write(dev, data, len); } diff --git a/package/PikaStdDevice/pika_hal.c b/package/PikaStdDevice/pika_hal.c index f2ff8e0d4..1b241f88c 100644 --- a/package/PikaStdDevice/pika_hal.c +++ b/package/PikaStdDevice/pika_hal.c @@ -53,6 +53,7 @@ __exit: __platform_printf("Error: dev_open failed.\r\n"); if (dev->ioctl_config) { pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev_type)); + dev->ioctl_config = NULL; } if (dev) { pikaFree(dev, sizeof(pika_dev)); @@ -71,11 +72,12 @@ int pika_hal_close(pika_dev* dev) { } ret = impl->close(dev); __exit: - if (NULL != dev) { - pikaFree(dev, sizeof(pika_dev)); - } if (NULL != dev->ioctl_config) { pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev->type)); + dev->ioctl_config = NULL; + } + if (NULL != dev) { + pikaFree(dev, sizeof(pika_dev)); } return ret; } diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c index 0d491b3ad..301a08b5f 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c @@ -48,24 +48,72 @@ void PikaStdDevice_UART_writeBytes(PikaObj* self, uint8_t* data, int length) { obj_runNativeMethod(self, "platformWriteBytes", NULL); } +static pika_dev* _get_dev(PikaObj* self) { + pika_dev* dev = obj_getPtr(self, "pika_dev"); + if (NULL != dev) { + return dev; + } + int id = obj_getInt(self, "id"); + char id_str[32] = {0}; + sprintf(id_str, "%d", id); + dev = pika_hal_open(PIKA_HAL_UART, id_str); + if (NULL == dev) { + __platform_printf("Error: open UART '%s' failed.\r\n", id_str); + } + obj_setPtr(self, "pika_dev", dev); + return dev; +} + void PikaStdDevice_UART_platformEnable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + pika_dev* dev = _get_dev(self); + if (NULL == dev) { + __platform_printf("Error: open UART '%d' failed.\r\n", + obj_getInt(self, "id")); + return; + } + pika_hal_UART_config cfg = {0}; + cfg.baudrate = obj_getInt(self, "baudRate"); + pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg); + pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE); } + void PikaStdDevice_UART_platformRead(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + int len = obj_getInt(self, "length"); + obj_setBytes(self, "_readData", NULL, len + 1); + char* buff = obj_getBytes(self, "_readData"); + pika_dev* dev = _get_dev(self); + pika_hal_read(dev, buff, len); + obj_setStr(self, "readData", buff); } + void PikaStdDevice_UART_platformWrite(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + char* data = obj_getStr(self, "writeData"); + pika_dev* dev = _get_dev(self); + pika_hal_write(dev, data, strlen(data)); } void PikaStdDevice_UART_platformDisable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + pika_dev* dev = _get_dev(self); + if (NULL == dev) { + __platform_printf("Error: open UART '%d' failed.\r\n", + obj_getInt(self, "id")); + return; + } + pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE); } void PikaStdDevice_UART_platformReadBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + int len = obj_getInt(self, "length"); + obj_setBytes(self, "_readData", NULL, len + 1); + uint8_t* buff = obj_getBytes(self, "_readData"); + pika_dev* dev = _get_dev(self); + pika_hal_read(dev, buff, len); + obj_setBytes(self, "readData", buff, len); } void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + uint8_t* data = obj_getBytes(self, "writeData"); + int len = obj_getBytesLen(self, "writeData"); + pika_dev* dev = _get_dev(self); + pika_hal_write(dev, data, len); } From 559e408129970e852d0909aff2895942da8fc3cd Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Tue, 20 Dec 2022 22:11:49 +0800 Subject: [PATCH 06/20] update_toml --- packages.toml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages.toml b/packages.toml index 0dfd56c96..f922ac4a7 100644 --- a/packages.toml +++ b/packages.toml @@ -445,7 +445,10 @@ releases = [ [[packages]] name = "hmac" -releases = [ "v1.0.0 ca8fe36d68be16722317860394fdf78c620e3e2d" ] +releases = [ + "v1.0.0 ca8fe36d68be16722317860394fdf78c620e3e2d", + "v1.0.1 d75ce00c377e48c6058bbe1f824474802383e5e7" +] [[packages]] name = "BLIOT" From 0e829579b1932744c922dc6b024ab3c7ff319289 Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Tue, 20 Dec 2022 22:12:25 +0800 Subject: [PATCH 07/20] update_toml --- packages.toml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages.toml b/packages.toml index 0dfd56c96..18c70d81a 100644 --- a/packages.toml +++ b/packages.toml @@ -460,4 +460,7 @@ releases = [ "v0.0.1 5c45cba0c39d447fbe7a4a082ee3170188c3bcb7" ] [[packages]] name = "base64" -releases = [ "v0.0.1 1ae3ac23759fb2b5e0f77866af40986ac94e356d" ] +releases = [ + "v0.0.1 1ae3ac23759fb2b5e0f77866af40986ac94e356d", + "v1.0.0 d75ce00c377e48c6058bbe1f824474802383e5e7" +] From fce67d309d16c3608b896d1911a590141387984f Mon Sep 17 00:00:00 2001 From: lyon Date: Tue, 20 Dec 2022 22:44:39 +0800 Subject: [PATCH 08/20] use WEAK for std.time --- package/PikaStdDevice/PikaStdDevice_Time.c | 7 +++---- package/PikaStdDevice/PikaStdDevice_UART.c | 4 ++-- .../PikaStdDevice/PikaStdDevice_Time.c | 7 +++---- .../PikaStdDevice/PikaStdDevice_UART.c | 4 ++-- src/PikaPlatform.c | 18 ++++++++++++++++++ src/PikaPlatform.h | 5 ++++- 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/package/PikaStdDevice/PikaStdDevice_Time.c b/package/PikaStdDevice/PikaStdDevice_Time.c index 50ca25e47..caa8ae5ce 100644 --- a/package/PikaStdDevice/PikaStdDevice_Time.c +++ b/package/PikaStdDevice/PikaStdDevice_Time.c @@ -14,7 +14,7 @@ void PikaStdDevice_Time_sleep_ms(PikaObj* self, int ms) { #elif defined(_WIN32) Sleep(ms); #else - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + __platform_sleep_ms(ms); #endif } void PikaStdDevice_Time_sleep_s(PikaObj* self, int s) { @@ -23,13 +23,12 @@ void PikaStdDevice_Time_sleep_s(PikaObj* self, int s) { #elif defined(_WIN32) Sleep(s * 1000); #else - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + __platform_sleep_s(s); #endif } void PikaStdDevice_Time_platformGetTick(PikaObj* self) { - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platformGetTick() need to be override."); + obj_setInt(self, "tick", __platform_get_tick_ms()); } /* diff --git a/package/PikaStdDevice/PikaStdDevice_UART.c b/package/PikaStdDevice/PikaStdDevice_UART.c index 301a08b5f..7b3a22dad 100644 --- a/package/PikaStdDevice/PikaStdDevice_UART.c +++ b/package/PikaStdDevice/PikaStdDevice_UART.c @@ -80,7 +80,7 @@ void PikaStdDevice_UART_platformEnable(PikaObj* self) { void PikaStdDevice_UART_platformRead(PikaObj* self) { int len = obj_getInt(self, "length"); obj_setBytes(self, "_readData", NULL, len + 1); - char* buff = obj_getBytes(self, "_readData"); + char* buff = (char*)obj_getBytes(self, "_readData"); pika_dev* dev = _get_dev(self); pika_hal_read(dev, buff, len); obj_setStr(self, "readData", buff); @@ -113,7 +113,7 @@ void PikaStdDevice_UART_platformReadBytes(PikaObj* self) { void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) { uint8_t* data = obj_getBytes(self, "writeData"); - int len = obj_getBytesLen(self, "writeData"); + int len = obj_getBytesSize(self, "writeData"); pika_dev* dev = _get_dev(self); pika_hal_write(dev, data, len); } diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c index 50ca25e47..caa8ae5ce 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c @@ -14,7 +14,7 @@ void PikaStdDevice_Time_sleep_ms(PikaObj* self, int ms) { #elif defined(_WIN32) Sleep(ms); #else - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + __platform_sleep_ms(ms); #endif } void PikaStdDevice_Time_sleep_s(PikaObj* self, int s) { @@ -23,13 +23,12 @@ void PikaStdDevice_Time_sleep_s(PikaObj* self, int s) { #elif defined(_WIN32) Sleep(s * 1000); #else - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); + __platform_sleep_s(s); #endif } void PikaStdDevice_Time_platformGetTick(PikaObj* self) { - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platformGetTick() need to be override."); + obj_setInt(self, "tick", __platform_get_tick_ms()); } /* diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c index 301a08b5f..7b3a22dad 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c @@ -80,7 +80,7 @@ void PikaStdDevice_UART_platformEnable(PikaObj* self) { void PikaStdDevice_UART_platformRead(PikaObj* self) { int len = obj_getInt(self, "length"); obj_setBytes(self, "_readData", NULL, len + 1); - char* buff = obj_getBytes(self, "_readData"); + char* buff = (char*)obj_getBytes(self, "_readData"); pika_dev* dev = _get_dev(self); pika_hal_read(dev, buff, len); obj_setStr(self, "readData", buff); @@ -113,7 +113,7 @@ void PikaStdDevice_UART_platformReadBytes(PikaObj* self) { void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) { uint8_t* data = obj_getBytes(self, "writeData"); - int len = obj_getBytesLen(self, "writeData"); + int len = obj_getBytesSize(self, "writeData"); pika_dev* dev = _get_dev(self); pika_hal_write(dev, data, len); } diff --git a/src/PikaPlatform.c b/src/PikaPlatform.c index 7a8ae2c6a..7e77b866e 100644 --- a/src/PikaPlatform.c +++ b/src/PikaPlatform.c @@ -253,3 +253,21 @@ PIKA_WEAK PIKA_BOOL __pks_hook_arg_cache_filter(void* self) { PIKA_WEAK void __platform_thread_delay(void) { return; } + +PIKA_WEAK uint64_t __platform_get_tick_ms(void){ + __platform_printf("Error: __platform_get_tick_ms need implementation!\r\n"); + while (1) { + } +} + +PIKA_WEAK void __platform_sleep_ms(uint32_t ms){ + __platform_printf("Error: __platform_sleep_ms need implementation!\r\n"); + while (1) { + } +} + +PIKA_WEAK void __platform_sleep_s(uint32_t s){ + __platform_printf("Error: __platform_sleep_s need implementation!\r\n"); + while (1) { + } +} diff --git a/src/PikaPlatform.h b/src/PikaPlatform.h index 8233bb743..2107138a8 100644 --- a/src/PikaPlatform.h +++ b/src/PikaPlatform.h @@ -173,7 +173,10 @@ void __platform_panic_handle(void); void __pks_hook_instruct(void); PIKA_BOOL __pks_hook_arg_cache_filter(void* self); -PIKA_WEAK void __platform_thread_delay(void); +void __platform_thread_delay(void); +uint64_t __platform_get_tick_ms(void); +void __platform_sleep_ms(uint32_t ms); +void __platform_sleep_s(uint32_t s); #if PIKA_FLOAT_TYPE_DOUBLE #define pika_float double From 3afd92608a02c4a7cbc8d60b6fcfb09f1cb0c20a Mon Sep 17 00:00:00 2001 From: lyon Date: Wed, 21 Dec 2022 00:13:19 +0800 Subject: [PATCH 09/20] fix typo of getArgByIndex --- package/PikaStdLib/PikaStdData_Dict.c | 16 ++++++++-------- port/linux/.vscode/launch.json | 2 +- .../PikaStdLib/PikaStdData_Dict.c | 16 ++++++++-------- src/PikaVM.c | 2 +- src/dataArgs.c | 2 +- src/dataArgs.h | 2 +- test/VM-test.cpp | 17 +++++++++++++++++ test/args-test.cpp | 4 ++-- 8 files changed, 39 insertions(+), 22 deletions(-) diff --git a/package/PikaStdLib/PikaStdData_Dict.c b/package/PikaStdLib/PikaStdData_Dict.c index 0423fabfa..63447c256 100644 --- a/package/PikaStdLib/PikaStdData_Dict.c +++ b/package/PikaStdLib/PikaStdData_Dict.c @@ -40,7 +40,7 @@ Arg* PikaStdData_Dict___iter__(PikaObj* self) { Arg* PikaStdData_Dict___next__(PikaObj* self) { int __iter_i = args_getInt(self->list, "__iter_i"); PikaDict* keys = obj_getPtr(self, "_keys"); - Arg* res = arg_copy(args_getArgByidex(&keys->super, __iter_i)); + Arg* res = arg_copy(args_getArgByIndex(&keys->super, __iter_i)); if (NULL == res) { return arg_newNull(); } @@ -91,7 +91,7 @@ Arg* PikaStdData_dict_keys___next__(PikaObj* self) { int __iter_i = args_getInt(self->list, "__iter_i"); PikaObj* dictptr = obj_getPtr(self, "dictptr"); PikaDict* keys = obj_getPtr(dictptr, "_keys"); - Arg* res = arg_copy(args_getArgByidex(&keys->super, __iter_i)); + Arg* res = arg_copy(args_getArgByIndex(&keys->super, __iter_i)); if (NULL == res) { return arg_newNull(); } @@ -107,7 +107,7 @@ char* PikaStdData_dict_keys___str__(PikaObj* self) { int i = 0; while (PIKA_TRUE) { - Arg* item = args_getArgByidex(&keys->super, i); + Arg* item = args_getArgByIndex(&keys->super, i); if (NULL == item) { break; } @@ -141,8 +141,8 @@ char* PikaStdData_Dict___str__(PikaObj* self) { int i = 0; while (PIKA_TRUE) { - Arg* item_key = args_getArgByidex(&keys->super, i); - Arg* item_val = args_getArgByidex(&dict->super, i); + Arg* item_key = args_getArgByIndex(&keys->super, i); + Arg* item_val = args_getArgByIndex(&dict->super, i); if (NULL == item_key) { break; } @@ -186,7 +186,7 @@ int PikaStdData_dict_keys___len__(PikaObj* self) { int dict_contains(PikaDict* dict, Arg* key) { int i = 0; while (PIKA_TRUE) { - Arg* item = args_getArgByidex(&dict->super, i); + Arg* item = args_getArgByIndex(&dict->super, i); if (NULL == item) { break; } @@ -219,8 +219,8 @@ Arg* PikaStdData_dict_items___next__(PikaObj* self) { PikaObj* dictptr = obj_getPtr(self, "dictptr"); PikaDict* keys = obj_getPtr(dictptr, "_keys"); PikaDict* dict = obj_getPtr(dictptr, "dict"); - Arg* key = args_getArgByidex(&keys->super, __iter_i); - Arg* val = args_getArgByidex(&dict->super, __iter_i); + Arg* key = args_getArgByIndex(&keys->super, __iter_i); + Arg* val = args_getArgByIndex(&dict->super, __iter_i); if (NULL == key) { return arg_newNull(); } diff --git a/port/linux/.vscode/launch.json b/port/linux/.vscode/launch.json index 3e2d3067c..dae3e3925 100644 --- a/port/linux/.vscode/launch.json +++ b/port/linux/.vscode/launch.json @@ -11,7 +11,7 @@ "program": "${workspaceFolder}/build/test/pikascript_test", // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain", "args": [ - // "--gtest_filter=parser.not_in" + // "--gtest_filter=vm.class_keyword" ], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_Dict.c b/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_Dict.c index 0423fabfa..63447c256 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_Dict.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_Dict.c @@ -40,7 +40,7 @@ Arg* PikaStdData_Dict___iter__(PikaObj* self) { Arg* PikaStdData_Dict___next__(PikaObj* self) { int __iter_i = args_getInt(self->list, "__iter_i"); PikaDict* keys = obj_getPtr(self, "_keys"); - Arg* res = arg_copy(args_getArgByidex(&keys->super, __iter_i)); + Arg* res = arg_copy(args_getArgByIndex(&keys->super, __iter_i)); if (NULL == res) { return arg_newNull(); } @@ -91,7 +91,7 @@ Arg* PikaStdData_dict_keys___next__(PikaObj* self) { int __iter_i = args_getInt(self->list, "__iter_i"); PikaObj* dictptr = obj_getPtr(self, "dictptr"); PikaDict* keys = obj_getPtr(dictptr, "_keys"); - Arg* res = arg_copy(args_getArgByidex(&keys->super, __iter_i)); + Arg* res = arg_copy(args_getArgByIndex(&keys->super, __iter_i)); if (NULL == res) { return arg_newNull(); } @@ -107,7 +107,7 @@ char* PikaStdData_dict_keys___str__(PikaObj* self) { int i = 0; while (PIKA_TRUE) { - Arg* item = args_getArgByidex(&keys->super, i); + Arg* item = args_getArgByIndex(&keys->super, i); if (NULL == item) { break; } @@ -141,8 +141,8 @@ char* PikaStdData_Dict___str__(PikaObj* self) { int i = 0; while (PIKA_TRUE) { - Arg* item_key = args_getArgByidex(&keys->super, i); - Arg* item_val = args_getArgByidex(&dict->super, i); + Arg* item_key = args_getArgByIndex(&keys->super, i); + Arg* item_val = args_getArgByIndex(&dict->super, i); if (NULL == item_key) { break; } @@ -186,7 +186,7 @@ int PikaStdData_dict_keys___len__(PikaObj* self) { int dict_contains(PikaDict* dict, Arg* key) { int i = 0; while (PIKA_TRUE) { - Arg* item = args_getArgByidex(&dict->super, i); + Arg* item = args_getArgByIndex(&dict->super, i); if (NULL == item) { break; } @@ -219,8 +219,8 @@ Arg* PikaStdData_dict_items___next__(PikaObj* self) { PikaObj* dictptr = obj_getPtr(self, "dictptr"); PikaDict* keys = obj_getPtr(dictptr, "_keys"); PikaDict* dict = obj_getPtr(dictptr, "dict"); - Arg* key = args_getArgByidex(&keys->super, __iter_i); - Arg* val = args_getArgByidex(&dict->super, __iter_i); + Arg* key = args_getArgByIndex(&keys->super, __iter_i); + Arg* val = args_getArgByIndex(&dict->super, __iter_i); if (NULL == key) { return arg_newNull(); } diff --git a/src/PikaVM.c b/src/PikaVM.c index b7d86734c..521473573 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -1086,7 +1086,7 @@ static int _get_n_input_with_unpack(VMState* vm) { PikaDict* dict = obj_getPtr(obj, "dict"); int i_item = 0; while (PIKA_TRUE) { - Arg* item_val = args_getArgByidex(&dict->super, i_item); + Arg* item_val = args_getArgByIndex(&dict->super, i_item); if (NULL == item_val) { break; } diff --git a/src/dataArgs.c b/src/dataArgs.c index 04885be3b..64585c416 100644 --- a/src/dataArgs.c +++ b/src/dataArgs.c @@ -411,7 +411,7 @@ Arg* args_getArg(Args* self, char* name) { return (Arg*)node; } -Arg* args_getArgByidex(Args* self, int index) { +Arg* args_getArgByIndex(Args* self, int index) { pika_assert(NULL != self); LinkNode* nodeNow = self->firstNode; if (NULL == nodeNow) { diff --git a/src/dataArgs.h b/src/dataArgs.h index 81cb6d9de..47eb08afe 100644 --- a/src/dataArgs.h +++ b/src/dataArgs.h @@ -112,7 +112,7 @@ PIKA_RES args_foreach(Args* self, char* args_getBuff(Args* self, int32_t size); PIKA_RES args_pushArg(Args* self, Arg* arg); PIKA_RES args_pushArg_name(Args* self, char* name, Arg* arg); -Arg* args_getArgByidex(Args* self, int index); +Arg* args_getArgByIndex(Args* self, int index); void* args_getHeapStruct(Args* self, char* name); PIKA_RES args_removeArg_notDeinitArg(Args* self, Arg* argNow); uint8_t* args_getBytes(Args* self, char* name); diff --git a/test/VM-test.cpp b/test/VM-test.cpp index 2575ed4ae..97e5be1f2 100644 --- a/test/VM-test.cpp +++ b/test/VM-test.cpp @@ -2440,6 +2440,23 @@ TEST(vm, def_not_in) { EXPECT_EQ(pikaMemNow(), 0); } +TEST(vm, fn_pos_kw_issue1) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); + /* run */ + __platform_printf("BEGIN\r\n"); + obj_run(pikaMain, + "def new(a=1, b=2):\n" + " print(a, b)\n" + "new(3, b = 2)\n"); + /* collect */ + /* assert */ + /* deinit */ + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} + #endif TEST_END \ No newline at end of file diff --git a/test/args-test.cpp b/test/args-test.cpp index a0914bd0a..17a02bb5e 100644 --- a/test/args-test.cpp +++ b/test/args-test.cpp @@ -169,8 +169,8 @@ TEST(args, index) { args_pushArg(args, arg_newInt(1)); args_pushArg(args, arg_newFloat(2.4)); - int a = arg_getInt(args_getArgByidex(args, 1)); - float b = arg_getFloat(args_getArgByidex(args, 0)); + int a = arg_getInt(args_getArgByIndex(args, 1)); + float b = arg_getFloat(args_getArgByIndex(args, 0)); /* assert */ EXPECT_EQ(a, 1); EXPECT_FLOAT_EQ(b, 2.4); From 1ceb015391a2bc9aefcef71f566f2d87253e3dac Mon Sep 17 00:00:00 2001 From: lyon Date: Wed, 21 Dec 2022 00:26:01 +0800 Subject: [PATCH 10/20] fix load err when fn(pos, kw=xxx) --- port/linux/.vscode/launch.json | 2 +- src/PikaVM.c | 34 +++++++++++++++++++--------------- test/VM-test.cpp | 2 ++ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/port/linux/.vscode/launch.json b/port/linux/.vscode/launch.json index dae3e3925..cf73cad2f 100644 --- a/port/linux/.vscode/launch.json +++ b/port/linux/.vscode/launch.json @@ -11,7 +11,7 @@ "program": "${workspaceFolder}/build/test/pikascript_test", // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain", "args": [ - // "--gtest_filter=vm.class_keyword" + // "--gtest_filter=vm.fn_pos_kw_issue1" ], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/src/PikaVM.c b/src/PikaVM.c index 521473573..89cd94a0a 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -847,7 +847,8 @@ Arg* obj_runMethodArg(PikaObj* self, static char* _kw_to_default_all(FunctionArgsInfo* f, char* arg_name, int* argc, - Arg* argv[]) { + Arg* argv[], + Arg* call_arg) { #if PIKA_NANO return arg_name; #endif @@ -861,6 +862,17 @@ static char* _kw_to_default_all(FunctionArgsInfo* f, argv[(*argc)++] = arg_new; pikaDict_removeArg(f->kw, default_arg); } + } else { + /* can not load defalut from kw */ + if (NULL != call_arg && f->is_default) { + /* load default from pos */ + if (f->i_arg > f->n_positional) { + arg_setNameHash(call_arg, + hash_time33EndWith(arg_name, ':')); + argv[(*argc)++] = call_arg; + return (char*)1; + } + } } arg_name = strPopLastToken(f->type_list, ','); } @@ -980,20 +992,12 @@ static void _load_call_arg(VMState* vm, } } char* arg_name = strPopLastToken(f->type_list, ','); - /* load default from pos */ - if (f->i_arg > f->n_positional) { - if (f->is_default) { - if (arg_name[strlen(arg_name) - 1] == '=') { - /* found default arg*/ - arg_name[strlen(arg_name) - 1] = '\0'; - arg_setNameHash(call_arg, hash_time33EndWith(arg_name, ':')); - argv[(*argc)++] = call_arg; - } - return; - } - } /* load default from kw */ - arg_name = _kw_to_default_all(f, arg_name, argc, argv); + arg_name = _kw_to_default_all(f, arg_name, argc, argv, call_arg); + if (((char*)1) == arg_name) { + /* load default from pos */ + return; + } /* load position arg */ if (_kw_to_pos_one(f, arg_name, argc, argv)) { /* load pos from kw */ @@ -1235,7 +1239,7 @@ static int VMState_loadArgsFromMethodArg(VMState* vm, #if !PIKA_NANO_ENABLE if (strIsContain(f.type_list, '=')) { char* arg_name = strPopLastToken(f.type_list, ','); - _kw_to_default_all(&f, arg_name, &argc, argv); + _kw_to_default_all(&f, arg_name, &argc, argv, NULL); } /* load kw to pos */ _kw_to_pos_all(&f, &argc, argv); diff --git a/test/VM-test.cpp b/test/VM-test.cpp index 97e5be1f2..c2dbdc094 100644 --- a/test/VM-test.cpp +++ b/test/VM-test.cpp @@ -2452,11 +2452,13 @@ TEST(vm, fn_pos_kw_issue1) { "new(3, b = 2)\n"); /* collect */ /* assert */ + EXPECT_STREQ(log_buff[0], "3 2\r\n"); /* deinit */ obj_deinit(pikaMain); EXPECT_EQ(pikaMemNow(), 0); } + #endif TEST_END \ No newline at end of file From 67b56c9be40b6c1682e1834b1fb8fe17a3366e00 Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Wed, 21 Dec 2022 13:04:06 +0800 Subject: [PATCH 11/20] fix socket PIKA_LWIP_ENABLE macro --- package/socket/PikaPlatform_socket.c | 6 +++--- .../pikascript/pikascript-lib/socket/PikaPlatform_socket.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package/socket/PikaPlatform_socket.c b/package/socket/PikaPlatform_socket.c index 753f5aedb..482d7a74b 100644 --- a/package/socket/PikaPlatform_socket.c +++ b/package/socket/PikaPlatform_socket.c @@ -71,7 +71,7 @@ PIKA_WEAK int __platform_recv(int __fd, void* __buf, size_t __n, int __flags) { /* gethostname */ PIKA_WEAK int __platform_gethostname(char* __name, size_t __len) { -#if defined(__linux__) +#if defined(__linux__) || PIKA_LWIP_ENABLE return gethostname(__name, __len); #else WEAK_FUNCTION_NEED_OVERRIDE_ERROR(); @@ -110,7 +110,7 @@ PIKA_WEAK int __platform_setsockopt(int __fd, } PIKA_WEAK int __platform_fcntl(int fd, int cmd, long arg) { -#ifdef __linux__ +#if defined(__linux__) || PIKA_LWIP_ENABLE return fcntl(fd, cmd, arg); #else WEAK_FUNCTION_NEED_OVERRIDE_ERROR(); @@ -119,7 +119,7 @@ PIKA_WEAK int __platform_fcntl(int fd, int cmd, long arg) { /* os file API */ PIKA_WEAK int __platform_close(int __fd) { -#ifdef __linux__ +#if defined(__linux__) || PIKA_LWIP_ENABLE return close(__fd); #elif PIKA_FREERTOS_ENABLE return closesocket(__fd); diff --git a/port/linux/package/pikascript/pikascript-lib/socket/PikaPlatform_socket.c b/port/linux/package/pikascript/pikascript-lib/socket/PikaPlatform_socket.c index 753f5aedb..482d7a74b 100644 --- a/port/linux/package/pikascript/pikascript-lib/socket/PikaPlatform_socket.c +++ b/port/linux/package/pikascript/pikascript-lib/socket/PikaPlatform_socket.c @@ -71,7 +71,7 @@ PIKA_WEAK int __platform_recv(int __fd, void* __buf, size_t __n, int __flags) { /* gethostname */ PIKA_WEAK int __platform_gethostname(char* __name, size_t __len) { -#if defined(__linux__) +#if defined(__linux__) || PIKA_LWIP_ENABLE return gethostname(__name, __len); #else WEAK_FUNCTION_NEED_OVERRIDE_ERROR(); @@ -110,7 +110,7 @@ PIKA_WEAK int __platform_setsockopt(int __fd, } PIKA_WEAK int __platform_fcntl(int fd, int cmd, long arg) { -#ifdef __linux__ +#if defined(__linux__) || PIKA_LWIP_ENABLE return fcntl(fd, cmd, arg); #else WEAK_FUNCTION_NEED_OVERRIDE_ERROR(); @@ -119,7 +119,7 @@ PIKA_WEAK int __platform_fcntl(int fd, int cmd, long arg) { /* os file API */ PIKA_WEAK int __platform_close(int __fd) { -#ifdef __linux__ +#if defined(__linux__) || PIKA_LWIP_ENABLE return close(__fd); #elif PIKA_FREERTOS_ENABLE return closesocket(__fd); From e524c2b6ad6c6ca67ba5aeed1cd500f7f67315f0 Mon Sep 17 00:00:00 2001 From: lyon Date: Wed, 21 Dec 2022 13:08:42 +0800 Subject: [PATCH 12/20] fix fn_pos_kw_issus2 --- port/linux/.vscode/launch.json | 2 +- src/PikaVM.c | 6 ++++-- test/VM-test.cpp | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/port/linux/.vscode/launch.json b/port/linux/.vscode/launch.json index cf73cad2f..c5a12a310 100644 --- a/port/linux/.vscode/launch.json +++ b/port/linux/.vscode/launch.json @@ -11,7 +11,7 @@ "program": "${workspaceFolder}/build/test/pikascript_test", // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain", "args": [ - // "--gtest_filter=vm.fn_pos_kw_issue1" + "--gtest_filter=vm.fn_pos_kw_issue2" ], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/src/PikaVM.c b/src/PikaVM.c index 89cd94a0a..831fd4916 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -854,15 +854,17 @@ static char* _kw_to_default_all(FunctionArgsInfo* f, #endif while (strIsContain(arg_name, '=')) { strPopLastToken(arg_name, '='); + Arg* default_arg = NULL; /* load default arg from kws */ if (f->kw != NULL) { - Arg* default_arg = pikaDict_getArg(f->kw, arg_name); + default_arg = pikaDict_getArg(f->kw, arg_name); if (default_arg != NULL) { Arg* arg_new = arg_copy(default_arg); argv[(*argc)++] = arg_new; pikaDict_removeArg(f->kw, default_arg); } - } else { + } + if (f->kw == NULL || default_arg == NULL) { /* can not load defalut from kw */ if (NULL != call_arg && f->is_default) { /* load default from pos */ diff --git a/test/VM-test.cpp b/test/VM-test.cpp index c2dbdc094..3ee86e6c5 100644 --- a/test/VM-test.cpp +++ b/test/VM-test.cpp @@ -2458,6 +2458,23 @@ TEST(vm, fn_pos_kw_issue1) { EXPECT_EQ(pikaMemNow(), 0); } +TEST(vm, fn_pos_kw_issue2) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); + /* run */ + __platform_printf("BEGIN\r\n"); + obj_run(pikaMain, + "def new(key:any, msg=None, digestmod=\"md5\"):\n" + " print(key, msg, digestmod)\n" + "new('123','456',digestmod=\"md5\")\n"); + /* collect */ + /* assert */ + EXPECT_STREQ(log_buff[0], "123 456 md5\r\n"); + /* deinit */ + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} #endif From f400b027d972bc4e1f9c953536c3d6caaf268215 Mon Sep 17 00:00:00 2001 From: lyon Date: Thu, 22 Dec 2022 14:22:39 +0800 Subject: [PATCH 13/20] add HAL_EVENT_CALLBACK_ENA config --- package/PikaStdDevice/pika_hal.c | 4 ++++ package/PikaStdDevice/pika_hal.h | 8 ++++++++ .../pikascript/pikascript-lib/PikaStdDevice/pika_hal.c | 4 ++++ .../pikascript/pikascript-lib/PikaStdDevice/pika_hal.h | 8 ++++++++ 4 files changed, 24 insertions(+) diff --git a/package/PikaStdDevice/pika_hal.c b/package/PikaStdDevice/pika_hal.c index 1b241f88c..7350a9ce1 100644 --- a/package/PikaStdDevice/pika_hal.c +++ b/package/PikaStdDevice/pika_hal.c @@ -185,6 +185,8 @@ int pika_hal_GPIO_ioctl_merge_config(pika_hal_GPIO_config* dst, _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_GPIO_SPEED_10M); _IOCTL_CONFIG_USE_DEFAULT(event_callback_rising, NULL); _IOCTL_CONFIG_USE_DEFAULT(event_callback_falling, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, + PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; } @@ -195,6 +197,8 @@ int pika_hal_UART_ioctl_merge_config(pika_hal_UART_config* dst, _IOCTL_CONFIG_USE_DEFAULT(stop_bits, PIKA_HAL_UART_STOP_BITS_1); _IOCTL_CONFIG_USE_DEFAULT(parity, PIKA_HAL_UART_PARITY_NONE); _IOCTL_CONFIG_USE_DEFAULT(event_callback_rx, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, + PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; } diff --git a/package/PikaStdDevice/pika_hal.h b/package/PikaStdDevice/pika_hal.h index 69df5ab3c..561828423 100644 --- a/package/PikaStdDevice/pika_hal.h +++ b/package/PikaStdDevice/pika_hal.h @@ -58,12 +58,19 @@ typedef enum { PIKA_HAL_GPIO_SPEED_100M = 100000000, } PIKA_HAL_GPIO_SPEED; +typedef enum { + _PIKA_HAL_EVENT_CALLBACK_ENA_UNUSED = 0, + PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE, + PIKA_HAL_EVENT_CALLBACK_ENA_DISABLE, +} PIKA_HAL_EVENT_CALLBACK_ENA; + typedef struct { PIKA_HAL_GPIO_DIR dir; PIKA_HAL_GPIO_PULL pull; PIKA_HAL_GPIO_SPEED speed; void (*event_callback_rising)(pika_dev* dev); void (*event_callback_falling)(pika_dev* dev); + PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_GPIO_config; typedef enum { @@ -104,6 +111,7 @@ typedef struct { PIKA_HAL_UART_STOP_BITS stop_bits; PIKA_HAL_UART_PARITY parity; void (*event_callback_rx)(pika_dev* dev); + PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_UART_config; typedef uint32_t PIKA_HAL_IIC_SLAVE_ADDR; diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c index 1b241f88c..7350a9ce1 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c @@ -185,6 +185,8 @@ int pika_hal_GPIO_ioctl_merge_config(pika_hal_GPIO_config* dst, _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_GPIO_SPEED_10M); _IOCTL_CONFIG_USE_DEFAULT(event_callback_rising, NULL); _IOCTL_CONFIG_USE_DEFAULT(event_callback_falling, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, + PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; } @@ -195,6 +197,8 @@ int pika_hal_UART_ioctl_merge_config(pika_hal_UART_config* dst, _IOCTL_CONFIG_USE_DEFAULT(stop_bits, PIKA_HAL_UART_STOP_BITS_1); _IOCTL_CONFIG_USE_DEFAULT(parity, PIKA_HAL_UART_PARITY_NONE); _IOCTL_CONFIG_USE_DEFAULT(event_callback_rx, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, + PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; } diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h index 69df5ab3c..561828423 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h @@ -58,12 +58,19 @@ typedef enum { PIKA_HAL_GPIO_SPEED_100M = 100000000, } PIKA_HAL_GPIO_SPEED; +typedef enum { + _PIKA_HAL_EVENT_CALLBACK_ENA_UNUSED = 0, + PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE, + PIKA_HAL_EVENT_CALLBACK_ENA_DISABLE, +} PIKA_HAL_EVENT_CALLBACK_ENA; + typedef struct { PIKA_HAL_GPIO_DIR dir; PIKA_HAL_GPIO_PULL pull; PIKA_HAL_GPIO_SPEED speed; void (*event_callback_rising)(pika_dev* dev); void (*event_callback_falling)(pika_dev* dev); + PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_GPIO_config; typedef enum { @@ -104,6 +111,7 @@ typedef struct { PIKA_HAL_UART_STOP_BITS stop_bits; PIKA_HAL_UART_PARITY parity; void (*event_callback_rx)(pika_dev* dev); + PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_UART_config; typedef uint32_t PIKA_HAL_IIC_SLAVE_ADDR; From 2bf121afcb5fdee15d35030b23be93d2fb936095 Mon Sep 17 00:00:00 2001 From: lyon Date: Thu, 22 Dec 2022 14:54:51 +0800 Subject: [PATCH 14/20] use EVENT_SIGNAL on event_callback --- package/PikaStdDevice/pika_hal.c | 5 ++--- package/PikaStdDevice/pika_hal.h | 14 +++++++++++--- .../pikascript-lib/PikaStdDevice/pika_hal.c | 5 ++--- .../pikascript-lib/PikaStdDevice/pika_hal.h | 14 +++++++++++--- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/package/PikaStdDevice/pika_hal.c b/package/PikaStdDevice/pika_hal.c index 7350a9ce1..c8a975dfd 100644 --- a/package/PikaStdDevice/pika_hal.c +++ b/package/PikaStdDevice/pika_hal.c @@ -183,8 +183,7 @@ int pika_hal_GPIO_ioctl_merge_config(pika_hal_GPIO_config* dst, // printf("after merge: dst->dir=%d, src->dir=%d\r\n", dst->dir, src->dir); _IOCTL_CONFIG_USE_DEFAULT(pull, PIKA_HAL_GPIO_PULL_NONE); _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_GPIO_SPEED_10M); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_rising, NULL); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_falling, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback, NULL); _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; @@ -196,7 +195,7 @@ int pika_hal_UART_ioctl_merge_config(pika_hal_UART_config* dst, _IOCTL_CONFIG_USE_DEFAULT(data_bits, PIKA_HAL_UART_DATA_BITS_8); _IOCTL_CONFIG_USE_DEFAULT(stop_bits, PIKA_HAL_UART_STOP_BITS_1); _IOCTL_CONFIG_USE_DEFAULT(parity, PIKA_HAL_UART_PARITY_NONE); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_rx, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback, NULL); _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; diff --git a/package/PikaStdDevice/pika_hal.h b/package/PikaStdDevice/pika_hal.h index 561828423..70cc5d22c 100644 --- a/package/PikaStdDevice/pika_hal.h +++ b/package/PikaStdDevice/pika_hal.h @@ -64,12 +64,16 @@ typedef enum { PIKA_HAL_EVENT_CALLBACK_ENA_DISABLE, } PIKA_HAL_EVENT_CALLBACK_ENA; +typedef enum { + PIKA_HAL_GPIO_EVENT_SIGNAL_RISING, + PIKA_HAL_GPIO_EVENT_SIGNAL_FALLING, +} PIKA_HAL_GPIO_EVENT_SIGNAL; + typedef struct { PIKA_HAL_GPIO_DIR dir; PIKA_HAL_GPIO_PULL pull; PIKA_HAL_GPIO_SPEED speed; - void (*event_callback_rising)(pika_dev* dev); - void (*event_callback_falling)(pika_dev* dev); + void (*event_callback)(pika_dev* dev, PIKA_HAL_GPIO_EVENT_SIGNAL signal); PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_GPIO_config; @@ -105,12 +109,16 @@ typedef enum { PIKA_HAL_UART_PARITY_EVEN, } PIKA_HAL_UART_PARITY; +typedef enum { + PIKA_HAL_UART_EVENT_SIGNAL_RX, +} PIKA_HAL_UART_EVENT_SIGNAL; + typedef struct { PIKA_HAL_UART_BAUDRATE baudrate; PIKA_HAL_UART_DATA_BITS data_bits; PIKA_HAL_UART_STOP_BITS stop_bits; PIKA_HAL_UART_PARITY parity; - void (*event_callback_rx)(pika_dev* dev); + void (*event_callback)(pika_dev* dev, PIKA_HAL_UART_EVENT_SIGNAL signal); PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_UART_config; diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c index 7350a9ce1..c8a975dfd 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c @@ -183,8 +183,7 @@ int pika_hal_GPIO_ioctl_merge_config(pika_hal_GPIO_config* dst, // printf("after merge: dst->dir=%d, src->dir=%d\r\n", dst->dir, src->dir); _IOCTL_CONFIG_USE_DEFAULT(pull, PIKA_HAL_GPIO_PULL_NONE); _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_GPIO_SPEED_10M); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_rising, NULL); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_falling, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback, NULL); _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; @@ -196,7 +195,7 @@ int pika_hal_UART_ioctl_merge_config(pika_hal_UART_config* dst, _IOCTL_CONFIG_USE_DEFAULT(data_bits, PIKA_HAL_UART_DATA_BITS_8); _IOCTL_CONFIG_USE_DEFAULT(stop_bits, PIKA_HAL_UART_STOP_BITS_1); _IOCTL_CONFIG_USE_DEFAULT(parity, PIKA_HAL_UART_PARITY_NONE); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_rx, NULL); + _IOCTL_CONFIG_USE_DEFAULT(event_callback, NULL); _IOCTL_CONFIG_USE_DEFAULT(event_callback_enable, PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); return 0; diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h index 561828423..70cc5d22c 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h @@ -64,12 +64,16 @@ typedef enum { PIKA_HAL_EVENT_CALLBACK_ENA_DISABLE, } PIKA_HAL_EVENT_CALLBACK_ENA; +typedef enum { + PIKA_HAL_GPIO_EVENT_SIGNAL_RISING, + PIKA_HAL_GPIO_EVENT_SIGNAL_FALLING, +} PIKA_HAL_GPIO_EVENT_SIGNAL; + typedef struct { PIKA_HAL_GPIO_DIR dir; PIKA_HAL_GPIO_PULL pull; PIKA_HAL_GPIO_SPEED speed; - void (*event_callback_rising)(pika_dev* dev); - void (*event_callback_falling)(pika_dev* dev); + void (*event_callback)(pika_dev* dev, PIKA_HAL_GPIO_EVENT_SIGNAL signal); PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_GPIO_config; @@ -105,12 +109,16 @@ typedef enum { PIKA_HAL_UART_PARITY_EVEN, } PIKA_HAL_UART_PARITY; +typedef enum { + PIKA_HAL_UART_EVENT_SIGNAL_RX, +} PIKA_HAL_UART_EVENT_SIGNAL; + typedef struct { PIKA_HAL_UART_BAUDRATE baudrate; PIKA_HAL_UART_DATA_BITS data_bits; PIKA_HAL_UART_STOP_BITS stop_bits; PIKA_HAL_UART_PARITY parity; - void (*event_callback_rx)(pika_dev* dev); + void (*event_callback)(pika_dev* dev, PIKA_HAL_UART_EVENT_SIGNAL signal); PIKA_HAL_EVENT_CALLBACK_ENA event_callback_enable; } pika_hal_UART_config; From f266440a77ee34b4b11c17c5c88751eeee5007f9 Mon Sep 17 00:00:00 2001 From: lyon Date: Thu, 22 Dec 2022 15:30:48 +0800 Subject: [PATCH 15/20] fix args_getArgByIndex --- src/dataArgs.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/dataArgs.h b/src/dataArgs.h index 47eb08afe..f7ec3b227 100644 --- a/src/dataArgs.h +++ b/src/dataArgs.h @@ -112,7 +112,6 @@ PIKA_RES args_foreach(Args* self, char* args_getBuff(Args* self, int32_t size); PIKA_RES args_pushArg(Args* self, Arg* arg); PIKA_RES args_pushArg_name(Args* self, char* name, Arg* arg); -Arg* args_getArgByIndex(Args* self, int index); void* args_getHeapStruct(Args* self, char* name); PIKA_RES args_removeArg_notDeinitArg(Args* self, Arg* argNow); uint8_t* args_getBytes(Args* self, char* name); From e891b5bed5ffb928fe32a8eabfbee80a26f7d07f Mon Sep 17 00:00:00 2001 From: lyon Date: Thu, 22 Dec 2022 15:33:15 +0800 Subject: [PATCH 16/20] fix type of args_getArgByIndex --- src/PikaVersion.h | 2 +- src/dataArgs.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PikaVersion.h b/src/PikaVersion.h index 54bc29906..dc2a686c9 100644 --- a/src/PikaVersion.h +++ b/src/PikaVersion.h @@ -2,4 +2,4 @@ #define PIKA_VERSION_MINOR 11 #define PIKA_VERSION_MICRO 9 -#define PIKA_EDIT_TIME "2022/12/17 16:02:58" +#define PIKA_EDIT_TIME "2022/12/22 15:33:13" diff --git a/src/dataArgs.h b/src/dataArgs.h index f7ec3b227..7239f9551 100644 --- a/src/dataArgs.h +++ b/src/dataArgs.h @@ -41,7 +41,7 @@ void args_init(Args* self, Args* args); int32_t args_getSize(Args* self); LinkNode* args_getNode(Args* self, char* name); -Arg* args_getArgByIndex(Args* self, int32_t index); +Arg* args_getArgByIndex(Args* self, int index); Arg* args_getArg(Args* self, char* name); PIKA_RES args_removeArg(Args* self, Arg* argNow); PIKA_RES args_moveArg(Args* self, Args* dict, Arg* arg); From a49dec9f12b9de3cda2e7b908a12d1d42b76e2f3 Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Thu, 22 Dec 2022 16:28:25 +0800 Subject: [PATCH 17/20] rename base64.pyi to _base64.pyi --- package/base64/{base64.c => _base64.c} | 6 +++--- package/base64/_base64.pyi | 2 ++ package/base64/base64.py | 9 +++++++++ package/base64/base64.pyi | 2 -- port/linux/package/pikascript/_base64.pyi | 2 ++ port/linux/package/pikascript/base64.py | 9 +++++++++ .../pikascript-lib/base64/{base64.c => _base64.c} | 6 +++--- 7 files changed, 28 insertions(+), 8 deletions(-) rename package/base64/{base64.c => _base64.c} (92%) create mode 100644 package/base64/_base64.pyi create mode 100644 package/base64/base64.py delete mode 100644 package/base64/base64.pyi create mode 100644 port/linux/package/pikascript/_base64.pyi create mode 100644 port/linux/package/pikascript/base64.py rename port/linux/package/pikascript/pikascript-lib/base64/{base64.c => _base64.c} (92%) diff --git a/package/base64/base64.c b/package/base64/_base64.c similarity index 92% rename from package/base64/base64.c rename to package/base64/_base64.c index 4368f5e31..986a634fb 100644 --- a/package/base64/base64.c +++ b/package/base64/_base64.c @@ -1,8 +1,8 @@ -#include "base64.h" +#include "_base64.h" #include "mbedtls/base64.h" -Arg* base64_b64decode(PikaObj* self, Arg* s) { +Arg* _base64_b64decode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error @@ -21,7 +21,7 @@ Arg* base64_b64decode(PikaObj* self, Arg* s) { return r; } -Arg* base64_b64encode(PikaObj* self, Arg* s) { +Arg* _base64_b64encode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error diff --git a/package/base64/_base64.pyi b/package/base64/_base64.pyi new file mode 100644 index 000000000..a59462791 --- /dev/null +++ b/package/base64/_base64.pyi @@ -0,0 +1,2 @@ +def b64encode(s: any) -> any: ... +def b64decode(s: any) -> any: ... diff --git a/package/base64/base64.py b/package/base64/base64.py new file mode 100644 index 000000000..3428e7ee9 --- /dev/null +++ b/package/base64/base64.py @@ -0,0 +1,9 @@ +import _base64 + + +def b64encode(s: any): + return _base64.b64encode(s) + + +def b64decode(s: any): + return _base64.b64decode(s) diff --git a/package/base64/base64.pyi b/package/base64/base64.pyi deleted file mode 100644 index df03b5daa..000000000 --- a/package/base64/base64.pyi +++ /dev/null @@ -1,2 +0,0 @@ -def b64encode(self, s:any) -> any: ... -def b64decode(self, s:any) -> any: ... diff --git a/port/linux/package/pikascript/_base64.pyi b/port/linux/package/pikascript/_base64.pyi new file mode 100644 index 000000000..a59462791 --- /dev/null +++ b/port/linux/package/pikascript/_base64.pyi @@ -0,0 +1,2 @@ +def b64encode(s: any) -> any: ... +def b64decode(s: any) -> any: ... diff --git a/port/linux/package/pikascript/base64.py b/port/linux/package/pikascript/base64.py new file mode 100644 index 000000000..3428e7ee9 --- /dev/null +++ b/port/linux/package/pikascript/base64.py @@ -0,0 +1,9 @@ +import _base64 + + +def b64encode(s: any): + return _base64.b64encode(s) + + +def b64decode(s: any): + return _base64.b64decode(s) diff --git a/port/linux/package/pikascript/pikascript-lib/base64/base64.c b/port/linux/package/pikascript/pikascript-lib/base64/_base64.c similarity index 92% rename from port/linux/package/pikascript/pikascript-lib/base64/base64.c rename to port/linux/package/pikascript/pikascript-lib/base64/_base64.c index 4368f5e31..986a634fb 100644 --- a/port/linux/package/pikascript/pikascript-lib/base64/base64.c +++ b/port/linux/package/pikascript/pikascript-lib/base64/_base64.c @@ -1,8 +1,8 @@ -#include "base64.h" +#include "_base64.h" #include "mbedtls/base64.h" -Arg* base64_b64decode(PikaObj* self, Arg* s) { +Arg* _base64_b64decode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error @@ -21,7 +21,7 @@ Arg* base64_b64decode(PikaObj* self, Arg* s) { return r; } -Arg* base64_b64encode(PikaObj* self, Arg* s) { +Arg* _base64_b64encode(PikaObj* self, Arg* s) { ArgType t = arg_getType(s); if (ARG_TYPE_BYTES != t) { obj_setErrorCode(self, -2); // io error From 29ad2b44817c5a72ace9f6d09cea7df6beb516f9 Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Thu, 22 Dec 2022 16:36:49 +0800 Subject: [PATCH 18/20] rm old base64.pyi --- port/linux/package/pikascript/base64.pyi | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 port/linux/package/pikascript/base64.pyi diff --git a/port/linux/package/pikascript/base64.pyi b/port/linux/package/pikascript/base64.pyi deleted file mode 100644 index df03b5daa..000000000 --- a/port/linux/package/pikascript/base64.pyi +++ /dev/null @@ -1,2 +0,0 @@ -def b64encode(self, s:any) -> any: ... -def b64decode(self, s:any) -> any: ... From 23be8b583f1e374f3823e4d47383ed9645dc789e Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Thu, 22 Dec 2022 16:37:29 +0800 Subject: [PATCH 19/20] fix base64 release --- packages.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages.toml b/packages.toml index 4863c71c2..4a5208630 100644 --- a/packages.toml +++ b/packages.toml @@ -465,5 +465,5 @@ releases = [ "v0.0.1 5c45cba0c39d447fbe7a4a082ee3170188c3bcb7" ] name = "base64" releases = [ "v0.0.1 1ae3ac23759fb2b5e0f77866af40986ac94e356d", - "v1.0.0 d75ce00c377e48c6058bbe1f824474802383e5e7" + "v1.0.0 29ad2b44817c5a72ace9f6d09cea7df6beb516f9" ] From 537958d1c42270d4ec0c84afeca171c55d860151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=82?= Date: Thu, 22 Dec 2022 13:18:13 +0000 Subject: [PATCH 20/20] add examples/Device/GPIO_CALLBCK.py. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李昂 --- examples/Device/GPIO_CALLBCK.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 examples/Device/GPIO_CALLBCK.py diff --git a/examples/Device/GPIO_CALLBCK.py b/examples/Device/GPIO_CALLBCK.py new file mode 100644 index 000000000..284421d9f --- /dev/null +++ b/examples/Device/GPIO_CALLBCK.py @@ -0,0 +1,15 @@ +import PikaStdDevice as std +print('hello pikascript') + +io = std.GPIO() +io.setPin('P4') +io.setMode('in') +io.enable() + +def cb1(signal): + print('cb1', signal) + +io.addEventCallBack(cb1, io.SIGNAL_FALLING) + +while True: + pass