comparison src/aci2/aci/db.h @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
comparison
equal deleted inserted replaced
2:c41a534f33c6 3:93999a60b835
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : PHB
4 | Modul : DBM
5 +-----------------------------------------------------------------------------
6 | Copyright 2005 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +-----------------------------------------------------------------------------
17 | Purpose : Interface betweeen ACI_SIM and DBM module
18 +-----------------------------------------------------------------------------
19 */
20 #ifndef DB_H
21 #define DB_H
22
23 #include "typedefs.h"
24 #define DB_MAX_AFFECTED 5 /* As per architecture document */
25
26 #define MAX_DBs 2 /* This needs to increased if DBM is used
27 for storing new databases (say SMSs) */
28
29 #define MAX_NUM_FILES 255 /* As per architecture document */
30
31 #define MAX_NUM_OF_SORT_INDEXS 4 /* As per architecture document */
32
33 #define MAX_NUM_RECORDS 254 /* As per architecture document */
34
35 #define INVALID_FIELD_ID 0xFFFF
36
37 #define INVALID_SORT_INDEX 0xFF
38
39 /* Insertion sort is available */
40 #define INSERTION_SORT
41
42 /*
43 Database type
44 */
45 typedef enum
46 {
47
48 DB_UNMANAGED, /* Not managed (1:1 slave of another file) */
49 DB_FREELIST, /* Fast free list maintained */
50
51 } T_DB_TYPE;
52
53 /*
54 Database affected records (History log)
55 */
56 typedef struct
57 {
58
59 USHORT entries; /* Number of affected entries */
60 USHORT field_id[DB_MAX_AFFECTED]; /* Elementary file, e.g. EF_ADN */
61 USHORT record[DB_MAX_AFFECTED]; /* Corresponding record within elementary file*/
62
63 } T_DB_CHANGED;
64
65 /*
66 Database Information
67 */
68 typedef struct
69 {
70 BOOL clean; /* Database consistent */
71 BOOL tracked; /* Tracked for external storage device */
72 } T_DB_INFO;
73
74 /*
75 File Information
76 */
77 typedef struct
78 {
79
80 BOOL clean; /* Database consistent */
81 T_DB_TYPE entry_type; /* Type of database field */
82 USHORT record_size; /* Record size */
83 USHORT num_records; /* Number of records */
84 USHORT used_records; /* Number of used records */
85
86 } T_DB_INFO_FIELD;
87
88 /*
89 Search node
90 Note: This node is internal to DBM.
91 */
92 typedef struct
93 {
94
95 UBYTE top;
96 UBYTE bottom;
97
98 } T_DB_SEARCH_NODE;
99
100 /*
101 Database return codes
102 */
103 typedef enum
104 {
105
106 DB_OK = 0, /* Execution of command completed */
107 DB_FAIL = -1, /* Execution of command failed within db */
108 DB_FAIL_FS = -2, /* Unexpected failure of FFS */
109 DB_FULL = -3, /* Database is full */
110 DB_INVALID_DB = -4, /* Database handle not known */
111 DB_INVALID_FIELD = -5, /* Invalid index requested */
112 DB_INVALID_RECORD = -6, /* Invalid record requested */
113 DB_INVALID_INDEX = -7, /* Invalid index requested */
114 DB_INVALID_SIZE = -8, /* Invalid size given */
115 DB_EMPTY_RECORD = -9, /* Attempted to read a free record */
116
117 /* Architecture document need to be updated for following constants */
118
119 DB_EXISTS = -10,/* Database already exists */
120 DB_FIELD_EXISTS = -11,/* Elementary file already exists */
121 DB_HISTORY_FULL = -12,/* Change log full */
122 DB_NOT_INITIALISED = -13,/* Database not initialised */
123 DB_IN_USE = -14,/* Database in use */
124 DB_RECORD_NOT_FOUND = -15 /* Record not found */
125
126 } T_DB_CODE;
127
128
129 /*
130 This function is used in db_create_index
131 */
132
133 typedef int (*T_COMP_FUNC)( int db_handle,
134 USHORT field_id,
135 USHORT record_1,
136 USHORT record_2,
137 ULONG flags );
138
139 /*
140 This function is used for db_search
141 */
142
143 typedef int (*T_SEARCH_FUNC)( ULONG Flags,
144 const UBYTE* Search_tag,
145 int db_handle,
146 USHORT field_id,
147 USHORT record_num );
148
149 /*
150 Interface Functions
151 */
152
153 EXTERN void db_init ( void );
154
155 EXTERN int db_create ( const char* directory,
156 UBYTE num_of_fields,
157 BOOL tracked );
158
159 EXTERN int db_open ( const char* directory );
160
161 EXTERN T_DB_CODE db_create_field ( int db_handle,
162 T_DB_TYPE db_type,
163 USHORT field_id,
164 USHORT record_size,
165 USHORT num_of_records );
166
167 EXTERN int db_write_record ( int db_handle,
168 USHORT field_id,
169 USHORT record_num,
170 USHORT offset,
171 USHORT length,
172 const UBYTE* buffer );
173
174 /*
175 1) If ACI would like to use incremental sort, it needs to call
176 db_update_index at end of writing/deleting the record(s).
177 If the index does not exist, it would be created.
178
179 Note that ACI can call this function after every record or
180 after 'n' records (n>1) and DB would process it properly.
181
182 2) If ACI would like to use quick sort, it can go for db_create_index
183 at any moment.
184
185 db_create_index is compatible with db_update_index and vice versa.
186
187 */
188 EXTERN T_DB_CODE db_create_index ( int db_handle,
189 USHORT field_id,
190 UBYTE sort_index,
191 T_COMP_FUNC compare_function,
192 ULONG flags );
193
194 #ifdef INSERTION_SORT
195 EXTERN T_DB_CODE db_update_index ( int db_handle,
196 USHORT field_id,
197 UBYTE sort_index,
198 T_COMP_FUNC compare_function,
199 ULONG flags );
200 #endif /* INSERTION_SORT */
201
202 EXTERN T_DB_CODE db_get_phy_from_idx ( int db_handle,
203 USHORT field_id,
204 UBYTE sort_index,
205 USHORT order_num );
206
207 EXTERN T_DB_CODE db_flush (int db_handle);
208
209 EXTERN int db_read_record ( int db_handle,
210 USHORT field_id,
211 USHORT record_num,
212 USHORT offset,
213 USHORT length,
214 UBYTE* buffer );
215
216 EXTERN T_DB_CODE db_read_change_log ( int db_handle,
217 T_DB_CHANGED* changed);
218
219 EXTERN T_DB_CODE db_delete_record ( int db_handle,
220 USHORT field_id,
221 USHORT record_num );
222
223 EXTERN T_DB_CODE db_info ( int db_handle,
224 T_DB_INFO* db_info );
225
226 EXTERN T_DB_CODE db_info_field ( int db_handle,
227 USHORT field_id,
228 T_DB_INFO_FIELD* info_field );
229
230 EXTERN int db_find_free_record ( int db_handle,
231 USHORT field_id );
232
233 EXTERN T_DB_CODE db_field_changed ( int db_handle,
234 USHORT field_id,
235 BOOL* changed );
236
237 EXTERN T_DB_CODE db_record_empty ( int db_handle,
238 USHORT field_id,
239 USHORT record_num,
240 BOOL* empty );
241
242 EXTERN int db_search ( int db_handle,
243 USHORT field_id,
244 UBYTE sort_index,
245 UBYTE* order_num,
246 T_SEARCH_FUNC search_function,
247 ULONG flags,
248 const UBYTE* search_tag );
249
250 EXTERN int db_get_last_fs_error ( void );
251
252 EXTERN T_DB_CODE db_close ( int db_handle );
253
254 EXTERN void db_exit ( void );
255
256 EXTERN T_DB_CODE db_remove_index ( int db_handle,
257 USHORT field_id,
258 UBYTE sort_index );
259
260 EXTERN T_DB_CODE db_remove_field ( int db_handle,
261 USHORT field_id );
262
263 EXTERN T_DB_CODE db_remove ( const char* directory );
264
265 #endif