comparison g23m-aci/aci/db.h @ 0:75a11d740a02

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