Merge branch 'master' into add/iotcloud

This commit is contained in:
dreamcmi 2022-12-23 15:14:28 +08:00
commit 3c61a38e6d
40 changed files with 417 additions and 157 deletions

View File

@ -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

View File

@ -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())

View File

@ -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());
}
/*

View File

@ -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 = (char*)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_getBytesSize(self, "writeData");
pika_dev* dev = _get_dev(self);
pika_hal_write(dev, data, len);
}

View File

@ -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;
}
@ -181,8 +183,9 @@ 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;
}
@ -192,7 +195,9 @@ 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;
}

View File

@ -58,12 +58,23 @@ 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 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;
typedef enum {
@ -98,12 +109,17 @@ 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;
typedef uint32_t PIKA_HAL_IIC_SLAVE_ADDR;

View File

@ -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();
}

View File

@ -1,11 +1,12 @@
#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
obj_setSysOut(self, "base64.b64decode input not bytes");
}
uint8_t* input_buff = arg_getBytes(s);
@ -20,14 +21,15 @@ 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
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"),

View File

@ -0,0 +1,2 @@
def b64encode(s: any) -> any: ...
def b64decode(s: any) -> any: ...

9
package/base64/base64.py Normal file
View File

@ -0,0 +1,9 @@
import _base64
def b64encode(s: any):
return _base64.b64encode(s)
def b64decode(s: any):
return _base64.b64decode(s)

View File

@ -1,2 +0,0 @@
def b64encode(self, s:any) -> any: ...
def b64decode(self, s:any) -> any: ...

View File

@ -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,26 +37,25 @@ 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);
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);
} else if (strcmp(digestmod, "hmac-sha1") == 0 ||
strcmp(digestmod, "HMAC-SHA1") == 0) {
init_buff(self, PIKA_HMAC_MD5);
} 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);
} else if (strcmp(digestmod, "hmac-sha256") == 0 ||
strcmp(digestmod, "HMAC-SHA256") == 0) {
init_buff(self, PIKA_HMAC_SHA1);
} 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);
} else {
obj_setErrorCode(self, -2); // io error
obj_setSysOut(self, "hmac.new() not support mode");

View File

@ -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

View File

@ -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);

View File

@ -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"
@ -460,4 +463,7 @@ releases = [ "v0.0.1 5c45cba0c39d447fbe7a4a082ee3170188c3bcb7" ]
[[packages]]
name = "base64"
releases = [ "v0.0.1 1ae3ac23759fb2b5e0f77866af40986ac94e356d" ]
releases = [
"v0.0.1 1ae3ac23759fb2b5e0f77866af40986ac94e356d",
"v1.0.0 29ad2b44817c5a72ace9f6d09cea7df6beb516f9"
]

View File

@ -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.fn_pos_kw_issue2"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",

View File

@ -0,0 +1,2 @@
def b64encode(s: any) -> any: ...
def b64decode(s: any) -> any: ...

View File

@ -0,0 +1,9 @@
import _base64
def b64encode(s: any):
return _base64.b64encode(s)
def b64decode(s: any):
return _base64.b64decode(s)

View File

@ -1,2 +0,0 @@
def b64encode(self, s:any) -> any: ...
def b64decode(self, s:any) -> any: ...

View File

@ -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

View File

@ -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,15 +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
}
#include <sys/time.h>
void PikaStdDevice_Time_platformGetTick(PikaObj* self) {
struct timeval tv;
gettimeofday(&tv, NULL);
obj_setInt(self,"tick", tv.tv_sec);
obj_setInt(self, "tick", __platform_get_tick_ms());
}
/*

View File

@ -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 = (char*)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_getBytesSize(self, "writeData");
pika_dev* dev = _get_dev(self);
pika_hal_write(dev, data, len);
}

View File

@ -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;
}
@ -181,8 +183,9 @@ 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;
}
@ -192,7 +195,9 @@ 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;
}

View File

@ -58,12 +58,23 @@ 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 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;
typedef enum {
@ -98,12 +109,17 @@ 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;
typedef uint32_t PIKA_HAL_IIC_SLAVE_ADDR;

View File

@ -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();
}

View File

@ -1,11 +1,12 @@
#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
obj_setSysOut(self, "base64.b64decode input not bytes");
}
uint8_t* input_buff = arg_getBytes(s);
@ -20,14 +21,15 @@ 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
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"),

View File

@ -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();
}
}

View File

@ -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,26 +37,25 @@ 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);
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);
} else if (strcmp(digestmod, "hmac-sha1") == 0 ||
strcmp(digestmod, "HMAC-SHA1") == 0) {
init_buff(self, PIKA_HMAC_MD5);
} 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);
} else if (strcmp(digestmod, "hmac-sha256") == 0 ||
strcmp(digestmod, "HMAC-SHA256") == 0) {
init_buff(self, PIKA_HMAC_SHA1);
} 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);
} else {
obj_setErrorCode(self, -2); // io error
obj_setSysOut(self, "hmac.new() not support mode");

View File

@ -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);

View File

@ -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);

View File

@ -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;
}
@ -248,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) {
}
}

View File

@ -168,9 +168,15 @@ 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);
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

View File

@ -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;
@ -851,21 +847,35 @@ 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
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);
}
}
if (f->kw == NULL || default_arg == NULL) {
/* 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, ',');
}
return arg_name;
@ -984,20 +994,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 */
@ -1090,7 +1092,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;
}
@ -1138,8 +1140,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);
@ -1240,7 +1241,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);
@ -1527,8 +1528,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));

View File

@ -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/22 15:33:13"

View File

@ -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) {

View File

@ -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);
@ -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_getArgByidex(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);

View File

@ -2440,6 +2440,42 @@ 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 */
EXPECT_STREQ(log_buff[0], "3 2\r\n");
/* deinit */
obj_deinit(pikaMain);
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
TEST_END

View File

@ -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);

View File

@ -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);
}

View File

@ -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())