summaryrefslogtreecommitdiff
path: root/include_protected/persistence_client_library_db_access.h
blob: ca101bddc8cbb800c9f4791a48f866689c765c57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#ifndef PERSISTENCE_CLIENT_LIBRARY_DB_ACCESS_H
#define PERSISTENCE_CLIENT_LIBRARY_DB_ACCESS_H

/******************************************************************************
 * Project         Persistency
 * (c) copyright   2012
 * Company         XS Embedded GmbH
 *****************************************************************************/
/******************************************************************************
 * This Source Code Form is subject to the terms of the
 * Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed
 * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
******************************************************************************/
 /**
 * @file           persistence_client_library_data_access.h
 * @ingroup        Persistence client library
 * @author         Ingo Huerner
 * @brief          Header of the persistence client library database access.
 *                 Library provides an API to access persistent data
 * @see            
 */

#ifdef __cplusplus
extern "C" {
#endif

#define  PERSIST_DATA_ACCESS_INTERFACE_VERSION   (0x04020000U)


#include "persistence_client_library_data_organization.h"
#include "persistence_client_library_rc_table.h"
#include "../include/persistence_client_library_key.h"



/**
 * @brief write data to a key
 *
 * @param dbPath the path to the database where the key is in 
 * @param key the database key
 * @param info persistence information
 * @param buffer the buffer holding the data
 * @param buffer_size the size of the buffer
 *
 * @return the number of bytes written or a negative value if an error occured with the following error codes:
 *   EPERS_SETDTAFAILED  EPERS_NOPRCTABLE  EPERS_NOKEYDATA  EPERS_NOKEY
 */
int pers_db_write_key(char* dbPath, char* key, PersistenceInfo_s* info, unsigned char* buffer, unsigned int buffer_size);



/**
 * @brief get data of a key
 *
 * @param dbPath the path to the database where the key is in
 * @param key the database key
 * @param info persistence information
 * @param buffer the buffer holding the data
 * @param buffer_size the size of the buffer
 *
 * @return the number of bytes read or a negative value if an error occured with the following error codes:
 *  EPERS_NOPRCTABLE  EPERS_NOKEYDATA  EPERS_NOKEY
 */
int pers_db_read_key(char* dbPath, char* key, PersistenceInfo_s* info, unsigned char* buffer, unsigned int buffer_size);



/**
 * @brief get the size of the data from a given key
 *
 * @param dbPath the path to the database where the key is in
 * @param key the database key
 * @param info persistence information
 *
 * @return size of data in bytes read from the key or on error a negative value with the following error codes:
 *  EPERS_NOPRCTABLE or EPERS_NOKEY
 */
int pers_db_get_key_size(char* dbPath, char* key, PersistenceInfo_s* info);



/**
 * @brief delete data
 *
 * @param dbPath the path to the database where the key is in
 * @param key the database key to register on
 * @param info persistence information
 *
 * @return 0 if deletion was successfull;
 *         or an error code: EPERS_DB_KEY_SIZE, EPERS_NOPRCTABLE, EPERS_DB_ERROR_INTERNAL or EPERS_NOPLUGINFUNCT
 */
int pers_db_delete_key(char* dbPath, char* key, PersistenceInfo_s* info);



/**
 * @brief close the database for the given storage type
 *
 * @param info persistence information
 */
void pers_db_close(PersistenceInfo_s* info);



/**
 * @brief close all databases
 */
void pers_db_close_all();



/**
 * @brief register for change notifications of a key
 *
 * @param dbPath the path to the database where the key is in
 * @param key the database key to register on
 *
 * @return 0 of registration was successfull; -1 if registration failes
 */
int persistence_reg_notify_on_change(char* dbPath, char* key, unsigned int ldbid, unsigned int user_no, unsigned int seat_no,
                                     pclChangeNotifyCallback_t callback);



/**
 * @brief send a notification signal
 *
 * @param key the database key to register on
 * @param context the database context
 * @param reason the reason of the signal, values see pclNotifyStatus_e.
 *
 * @return 0 of registration was successfull; -1 if registration failes
 */
int pers_send_Notification_Signal(const char* key, PersistenceDbContext_s* context, pclNotifyStatus_e reason);

//---------------------------------------------------------------------------------------------
// C U R S O R    F U N C T I O N S
//---------------------------------------------------------------------------------------------

/**
 * @brief create a cursor to a DB ; if success, the cursor points to (-1)
 * to access the first entry in DB, call persistence_db_cursor_next
 *
 * @param dbPath[in] absolute path to the database
 *
 * @return handler to the DB (to be used in successive calls) or error code (< 0)
 */
int pers_db_cursor_create(char* dbPath);

/**
 * @brief move cursor to the next position
 *
 * @param handlerDB[in] handler to DB (obtained with persistence_db_cursor_create())
 *
 * @return 0 for success, negative value in case of error (check against EPERS_LAST_ENTRY_IN_DB)
 */
int pers_db_cursor_next(unsigned int handlerDB);

/**
 * @brief get the name of the key pointed by the cursor associated with the database
 *
 * @param handlerDB[in] handler to DB (obtained with persistence_db_cursor_create())
 * @param bufKeyName_out[out] buffer where to pass the name of the key
 * @param bufSize[out] size of bufKeyName_out
 *
 * @return read size (if >= 0), error other way
 */
int pers_db_cursor_get_key(unsigned int handlerDB, char * bufKeyName_out, int bufSize) ;

/**
 * @brief get the data of the key pointed by the cursor associated with the database
 *
 * @param handlerDB[in] handler to DB (obtained with persistence_db_cursor_create())
 * @param bufKeyData_out[out] buffer where to pass the data of the key
 * @param bufSize[out] size of bufKeyData_out
 *
 * @return read size (if >= 0), error other way
 */
int pers_db_cursor_get_data(unsigned int handlerDB, char * bufData_out, int bufSize) ;

/**
 * @brief get the data size of the key pointed by the cursor associated with the database
 *
 * @param handlerDB[in] handler to DB (obtained with persistence_db_cursor_create())
 *
 * @return positive value for data size, negative value for error
 */
int pers_db_cursor_get_data_size(unsigned int handlerDB) ;


/**
 * @brief remove the cursor
 *
 * @param handlerDB[in] handler to DB (obtained with persistence_db_cursor_create())
 *
 * @return 0 for success, negative value in case of error
 */
int pers_db_cursor_destroy(unsigned int handlerDB) ;


#ifdef __cplusplus
}
#endif

#endif /* PERSISTENCY_CLIENT_LIBRARY_DB_ACCESS_H */