1  /*
2   * Copyright (C) 2015-2017 Alibaba Group Holding Limited
3   */
4  
5  #ifndef KV_API_H
6  #define KV_API_H
7  
8  #ifdef __cplusplus
9  extern "C" {
10  #endif
11  
12  #include <stdint.h>
13  
14  /* Key-value function return code description */
15  #define KV_OK                 0     /* Successed */
16  #define KV_LOOP_CONTINUE      10000 /* Loop Continue */
17  #define KV_ERR_NO_SPACE      -10001 /* The space is out of range */
18  #define KV_ERR_INVALID_PARAM -10002 /* The parameter is invalid */
19  #define KV_ERR_MALLOC_FAILED -10003 /* The os memory malloc error */
20  #define KV_ERR_NOT_FOUND     -10004 /* Could not found the item */
21  #define KV_ERR_FLASH_READ    -10005 /* The flash read operation error */
22  #define KV_ERR_FLASH_WRITE   -10006 /* The flash write operation error */
23  #define KV_ERR_FLASH_ERASE   -10007 /* The flash erase operation error */
24  #define KV_ERR_OS_LOCK       -10008 /* The error related to os lock */
25  #define KV_ERR_OS_SEM        -10009 /* The error related to os semaphose */
26  
27  #define KV_ERR_ENCRYPT       -10010 /* Data encryption error */
28  #define KV_ERR_DECRYPT       -10011 /* Data decryption error */
29  #define KV_ERR_NOT_SUPPORT   -10012 /* The function is not support yet */
30  
31  /**
32   * @brief Initialize the kv module
33   *
34   * @retrun 0 on success, otherwise will be failed.
35   *
36   */
37  int32_t kv_init(void);
38  
39  /**
40   * @brief De-initialize the kv module
41   *
42   * @retrun none
43   */
44  void kv_deinit(void);
45  
46  /**
47   * Add a new KV pair.
48   *
49   * @param[in]  key    the key of the KV pair.
50   * @param[in]  val    the value of the KV pair.
51   * @param[in]  len    the length of the value.
52   *
53   * @return  0 on success, negative error on failure.
54   */
55  int32_t kv_item_set(const char *key, const void *val, int32_t len);
56  
57  /**
58   * Get the KV pair's value stored in buffer by its key.
59   *
60   * @note: the buffer_len should be larger than the real length of the value,
61   *        otherwise buffer would be NULL.
62   *
63   * @param[in]      key         the key of the KV pair to get.
64   * @param[out]     buffer      the memory to store the value.
65   * @param[in-out]  buffer_len  in: the length of the input buffer.
66   *                             out: the real length of the value.
67   *
68   * @return  0 on success, negative error on failure.
69   */
70  int32_t kv_item_get(const char *key, void *buffer, int32_t *buffer_len);
71  
72  /**
73   * Delete the KV pair by its key.
74   *
75   * @param[in]  key  the key of the KV pair to delete.
76   *
77   * @return  0 on success, negative error on failure.
78   */
79  int32_t kv_item_delete(const char *key);
80  
81  /**
82   * Delete the KV pair by its prefix.
83   *
84   * @param[in]  prefix  the prefix of the kv pair which is need to delete.
85   *
86   * @return  0 on success, negative error on failure.
87   */
88  int32_t kv_item_delete_by_prefix(const char *prefix);
89  
90  /**
91   * Add a new KV pair (secure mode).
92   *
93   * @param[in]  key    the key of the KV pair.
94   * @param[in]  val    the value of the KV pair.
95   * @param[in]  len    the length of the value.
96   *
97   * @return  0 on success, negative error on failure.
98   */
99  int32_t kv_item_secure_set(const char *key, const void *val, int32_t len);
100  
101  /**
102   * Get the KV pair's value stored in buffer by its key. (secure mode)
103   *
104   * @note: the buffer_len should be larger than the real length of the value,
105   *        otherwise buffer would be NULL.
106   *
107   * @param[in]      key         the key of the KV pair to get.
108   * @param[out]     buffer      the memory to store the value.
109   * @param[in-out]  buffer_len  in: the length of the input buffer.
110   *                             out: the real length of the value.
111   *
112   * @return  0 on success, negative error on failure.
113   */
114  int32_t kv_item_secure_get(const char *key, void *buffer, int32_t *buffer_len);
115  
116  #ifdef __cplusplus
117  }
118  #endif
119  
120  #endif  /* KV_API_H */
121  
122