Goodix
GR551x API Reference  V1_6_06_B5676
gr55xx_nvds.h
Go to the documentation of this file.
1 /**
2  ******************************************************************************
3  *
4  * @file gr55xx_nvds.h
5  *
6  * @brief NVDS API
7  *
8  ******************************************************************************
9  * @attention
10  #####Copyright (c) 2019 GOODIX
11  All rights reserved.
12 
13  Redistribution and use in source and binary forms, with or without
14  modification, are permitted provided that the following conditions are met:
15  * Redistributions of source code must retain the above copyright
16  notice, this list of conditions and the following disclaimer.
17  * Redistributions in binary form must reproduce the above copyright
18  notice, this list of conditions and the following disclaimer in the
19  documentation and/or other materials provided with the distribution.
20  * Neither the name of GOODIX nor the names of its contributors may be used
21  to endorse or promote products derived from this software without
22  specific prior written permission.
23 
24  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  POSSIBILITY OF SUCH DAMAGE.
35  *****************************************************************************************
36  */
37 
38 /**
39  * @addtogroup SYSTEM
40  * @{
41  */
42  /**
43  @addtogroup NVDS Non-Volatile Data Storage
44  @{
45  @brief Definitions and prototypes for the NVDS interface.
46  */
47 
48 #ifndef __GR55XX_NVDS_H__
49 #define __GR55XX_NVDS_H__
50 
51 #include <stdint.h>
52 #include <stdbool.h>
53 
54 /** @addtogroup NVDS_DEFINES Defines
55  * @{ */
56 #define NV_TAGCAT_APP 0x4000 /**< NVDS tag mask for user application. */
57 
58 /**@brief Get NVDS tag for user application.
59  * The values of Tag 0x0000 and 0xFFFF are invalid. idx should not be used
60  * as the parameter of NVDS APIs directly. The range of idx is 0x0001~0x3FFF.
61  */
62 #define NV_TAG_APP(idx) (NV_TAGCAT_APP | ((idx) & 0x3FFF))
63 /** @} */
64 
65 /**@addtogroup NVDS_ENUMERATIONS Enumerations
66  * @{ */
67 /**@brief NVDS Returned Status. */
69 {
70  NVDS_SUCCESS, /**< NVDS succeeds. */
71  NVDS_FAIL, /**< NVDS failed. */
72  NVDS_TAG_NOT_EXISTED, /**< NVDS tag does not exist. */
73  NVDS_SPACE_NOT_ENOUGH, /**< NVDS space is not enough. */
74  NVDS_LENGTH_OUT_OF_RANGE, /**< NVDS length out of range. */
75  NVDS_INVALID_PARA, /**< NVDS invalid params. */
76  NVDS_INVALID_START_ADDR, /**< NVDS invalid start address. */
77  NVDS_INVALID_SECTORS, /**< NVDS invalid sector. */
78  NVDS_COMPACT_FAILED, /**< NVDS failed to compact sectors. */
79  NVDS_STORAGE_ACCESS_FAILED /**< NVDS failed to access storage. */
80 };
81 /** @} */
82 
83 /**@addtogroup NVDS_STRUCTURES Structures
84  * @{ */
85 /**@brief NVDS Item tag. */
86 typedef uint16_t NvdsTag_t;
87 /** @} */
88 
89 
90 /** @addtogroup NVDS_FUNCTIONS Functions
91  * @{ */
92 /**
93  ****************************************************************************************
94  * @brief Initialize the sectors for NVDS.
95  *
96  * @note NVDS locates in the last sector of Flash.
97  *
98  * @param[in] start_addr: Start address of NVDS area. If the value equals zero,
99  NVDS area will locate in the last sector(s) in flash
100  memory. If the value does not equal zero, it must be
101  sector-aligned.
102  * @param[in] sectors: The number of sectors.
103  *
104  * @return ::NVDS_SUCCESS if successful.
105  * @return error code in ::NVDS_STATUS if not successful.
106  ****************************************************************************************
107  */
108 uint8_t nvds_init(uint32_t start_addr, uint8_t sectors);
109 
110 /**
111  ****************************************************************************************
112  * @brief Read data from NVDS.
113  *
114  * @param[in] tag: Valid NVDS item tag.
115  * @param[in,out] p_len: Pointer to the length of data.
116  * @param[out] p_buf: Data is read into the buffer.
117  *
118  * @return ::NVDS_SUCCESS if successful.
119  * @return error code in ::NVDS_STATUS if not successful.
120  ****************************************************************************************
121  */
122 uint8_t nvds_get(NvdsTag_t tag, uint16_t *p_len, uint8_t *p_buf);
123 
124 /**
125  ****************************************************************************************
126  * @brief Write data to NVDS. If the tag does not exist, create one.
127  *
128  * @param[in] tag: Valid NVDS item tag.
129  * @param[in] len: Length of data to be written.
130  * @param[in] p_buf: Data to be written.
131  *
132  * @return ::NVDS_SUCCESS: if successful.
133  * @return error code in ::NVDS_STATUS if not successful.
134  ****************************************************************************************
135  */
136 uint8_t nvds_put(NvdsTag_t tag, uint16_t len, const uint8_t *p_buf);
137 
138 /**
139  ****************************************************************************************
140  * @brief Delete a tag in NVDS
141  *
142  * @param[in] tag: The tag to be deleted.
143  *
144  * @return NVDS_SUCCESS: If the deletion is successful.
145  * @return Error code in ::NVDS_STATUS if not successful.
146  ****************************************************************************************
147  */
148 uint8_t nvds_del(NvdsTag_t tag);
149 
150 /**
151  ****************************************************************************************
152  * @brief Get the length of a tag in NVDS
153  *
154  * @param[in] tag: The tag to get the length.
155  *
156  * @return length: if tag exists.
157  * @return 0: if tag does not exist.
158  ****************************************************************************************
159  */
161 /** @} */
162 
163 #endif
164 
165 /** @} */
166 /** @} */
167 
nvds_del
uint8_t nvds_del(NvdsTag_t tag)
Delete a tag in NVDS.
NVDS_SPACE_NOT_ENOUGH
@ NVDS_SPACE_NOT_ENOUGH
NVDS space is not enough.
Definition: gr55xx_nvds.h:73
NVDS_COMPACT_FAILED
@ NVDS_COMPACT_FAILED
NVDS failed to compact sectors.
Definition: gr55xx_nvds.h:78
NVDS_LENGTH_OUT_OF_RANGE
@ NVDS_LENGTH_OUT_OF_RANGE
NVDS length out of range.
Definition: gr55xx_nvds.h:74
NVDS_INVALID_PARA
@ NVDS_INVALID_PARA
NVDS invalid params.
Definition: gr55xx_nvds.h:75
NVDS_STORAGE_ACCESS_FAILED
@ NVDS_STORAGE_ACCESS_FAILED
NVDS failed to access storage.
Definition: gr55xx_nvds.h:79
NVDS_INVALID_SECTORS
@ NVDS_INVALID_SECTORS
NVDS invalid sector.
Definition: gr55xx_nvds.h:77
NVDS_FAIL
@ NVDS_FAIL
NVDS failed.
Definition: gr55xx_nvds.h:71
nvds_put
uint8_t nvds_put(NvdsTag_t tag, uint16_t len, const uint8_t *p_buf)
Write data to NVDS.
nvds_tag_length
uint16_t nvds_tag_length(NvdsTag_t tag)
Get the length of a tag in NVDS.
NVDS_STATUS
NVDS_STATUS
NVDS Returned Status.
Definition: gr55xx_nvds.h:69
NVDS_SUCCESS
@ NVDS_SUCCESS
NVDS succeeds.
Definition: gr55xx_nvds.h:70
NVDS_TAG_NOT_EXISTED
@ NVDS_TAG_NOT_EXISTED
NVDS tag does not exist.
Definition: gr55xx_nvds.h:72
nvds_init
uint8_t nvds_init(uint32_t start_addr, uint8_t sectors)
Initialize the sectors for NVDS.
nvds_get
uint8_t nvds_get(NvdsTag_t tag, uint16_t *p_len, uint8_t *p_buf)
Read data from NVDS.
NVDS_INVALID_START_ADDR
@ NVDS_INVALID_START_ADDR
NVDS invalid start address.
Definition: gr55xx_nvds.h:76
NvdsTag_t
uint16_t NvdsTag_t
NVDS Item tag.
Definition: gr55xx_nvds.h:86