1 #include "aos/kv.h"
2 
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 
7 #include "py/builtin.h"
8 #include "py/mperrno.h"
9 #include "py/obj.h"
10 #include "py/runtime.h"
11 #include "ulog/ulog.h"
12 
13 #define LOG_TAG "DRIVER_KV"
14 
15 #define KV_BUFFER_MAX_LEN 256
16 
obj_setStorageSync(size_t n_args,const mp_obj_t * args)17 STATIC mp_obj_t obj_setStorageSync(size_t n_args, const mp_obj_t *args)
18 {
19     LOGD(LOG_TAG, "entern  %s; n_args = %d;\n", __func__, n_args);
20     int ret = -1;
21     char *key;
22     char *value;
23     int32_t value_len = 0;
24 
25     if (n_args < 2) {
26         LOGE(LOG_TAG, "%s: args num is illegal :n_args = %d;\n", __func__, n_args);
27         return MP_ROM_INT(-EINVAL);
28     }
29 
30     key = (char *)mp_obj_str_get_str(args[0]);
31     value = (char *)mp_obj_str_get_str(args[1]);
32     value_len = strlen(value);
33 
34     ret = aos_kv_set(key, value, value_len, 1);
35     if (ret != 0) {
36         LOGE(LOG_TAG, "%s:aos_kv_set failed\n", __func__);
37     }
38     LOGD(LOG_TAG, "%s:out\n", __func__);
39 
40     return MP_ROM_INT(ret);
41 }
42 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(kv_obj_setStorageSync, 2, obj_setStorageSync);
43 
obj_getStorageSync(size_t n_args,const mp_obj_t * args)44 STATIC mp_obj_t obj_getStorageSync(size_t n_args, const mp_obj_t *args)
45 {
46     LOGD(LOG_TAG, "entern  %s; n_args = %d;\n", __func__, n_args);
47     int ret = -1;
48     int32_t value_len = KV_BUFFER_MAX_LEN;
49     char *key;
50     char *value;
51 
52     if (n_args < 1) {
53         LOGE(LOG_TAG, "%s: args num is illegal :n_args = %d;\n", __func__, n_args);
54         return MP_ROM_INT(-EINVAL);
55     }
56 
57     key = (char *)mp_obj_str_get_str(args[0]);
58     value = (char *)aos_malloc(KV_BUFFER_MAX_LEN);
59     if (value == NULL) {
60         LOGE(LOG_TAG, "allocate memory failed\n");
61         return MP_ROM_INT(-ENOMEM);
62     }
63 
64     ret = aos_kv_get(key, value, &value_len);
65     if (ret != 0) {
66         LOGE(LOG_TAG, "aos_kv_get failed key = %s;\n", key);
67         return MP_ROM_INT(ret);
68     }
69 
70     mp_obj_t val_str = mp_obj_new_str(value, strlen(value));
71 
72     LOGD(LOG_TAG, "%s:key = %s;value = %s;\n", __func__, key, value);
73     aos_free(value);
74     LOGD(LOG_TAG, "%s:out\n", __func__);
75 
76     return val_str;
77 }
78 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(kv_obj_getStorageSync, 1, obj_getStorageSync);
79 
obj_removeStorageSync(size_t n_args,const mp_obj_t * args)80 STATIC mp_obj_t obj_removeStorageSync(size_t n_args, const mp_obj_t *args)
81 {
82     LOGD(LOG_TAG, "entern  %s; n_args = %d;\n", __func__, n_args);
83     int ret = -1;
84     char *key;
85 
86     if (n_args < 1) {
87         LOGE(LOG_TAG, "%s: args num is illegal :n_args = %d;\n", __func__, n_args);
88         return MP_ROM_INT(-EINVAL);
89     }
90 
91     key = (char *)mp_obj_str_get_str(args[0]);
92     LOGD(LOG_TAG, "%s:key = %s;\n", __func__, key);
93 
94     ret = aos_kv_del(key);
95     if (ret != 0) {
96         LOGE(LOG_TAG, "kv delete item failed\n");
97         return MP_ROM_INT(ret);
98     }
99     LOGD(LOG_TAG, "%s:out\n", __func__);
100 
101     return MP_ROM_INT(ret);
102 }
103 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(kv_obj_removeStorageSync, 1, obj_removeStorageSync);
104 
105 STATIC const mp_rom_map_elem_t kv_module_globals_table[] = {
106     { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_kv) },
107     { MP_ROM_QSTR(MP_QSTR_setStorageSync), MP_ROM_PTR(&kv_obj_setStorageSync) },
108     { MP_ROM_QSTR(MP_QSTR_getStorageSync), MP_ROM_PTR(&kv_obj_getStorageSync) },
109     { MP_ROM_QSTR(MP_QSTR_removeStorageSync), MP_ROM_PTR(&kv_obj_removeStorageSync) },
110 };
111 
112 STATIC MP_DEFINE_CONST_DICT(kv_module_globals, kv_module_globals_table);
113 const mp_obj_module_t kv_module = {
114     .base = { &mp_type_module },
115     .globals = (mp_obj_dict_t *)&kv_module_globals,
116 };
117