44 #define FORMAT_VERSION_NUM 4 45 #define FORMAT_ID_STRING "STB DB 01" 46 #define FORMAT_ID_STRING_SIZE 10 48 #define NUM_FIELDS(X) (sizeof(X) / sizeof(FIELD_ACCESS)) 51 #define DBA_GROUP_NAME_LEN 35 52 #define DBA_SERV_NAME_LEN 32 53 #define DBA_TIMER_NAME_LEN 255 54 #define DBA_FAVLIST_NAME_LEN 128 55 #define DBA_TIMER_ADDINFO_LEN 255 56 #define DBA_LNB_NAME_LEN 24 58 #define DBA_CRID_LEN 65 61 #define DBA_PROFILE_NAME_LEN 255 67 U8BIT id_str[FORMAT_ID_STRING_SIZE];
98 E_DBA_FIELD_TYPE type;
104 U16BIT nvm_bit_offset;
106 U16BIT ram_byte_offset;
107 U16BIT ram_byte_size;
108 U32BIT default_value;
120 static const FIELD_TYPE database_field_type[] =
122 {DBA_FIELD_PARENT, UNUM_TYPE},
123 {DBA_FIELD_REC_NAME, STR_TYPE},
124 {DBA_FIELD_ORIG_NET_ID, UNUM_TYPE},
125 {DBA_FIELD_NET_ID, UNUM_TYPE},
126 {DBA_FIELD_TRANSPORT_ID, UNUM_TYPE},
127 {DBA_FIELD_SERVICE_ID, UNUM_TYPE},
128 {DBA_FIELD_VERSION, UNUM_TYPE},
130 {DBA_FIELD_LNB_TYPE, UNUM_TYPE},
131 {DBA_FIELD_LNB_22K, UNUM_TYPE},
132 {DBA_FIELD_LNB_12V, UNUM_TYPE},
133 {DBA_FIELD_LNB_PULSEPOSN, UNUM_TYPE},
134 {DBA_FIELD_LNB_DISPOSN, UNUM_TYPE},
135 {DBA_FIELD_LNB_DISTONE, UNUM_TYPE},
136 {DBA_FIELD_LNB_DISCSWITCH, UNUM_TYPE},
137 {DBA_FIELD_LNB_DISUSWITCH, UNUM_TYPE},
138 {DBA_FIELD_LNB_DISSMATV, UNUM_TYPE},
139 {DBA_FIELD_LNB_DISREPEAT, UNUM_TYPE},
140 {DBA_FIELD_LNB_UNICABLEFREQ, UNUM_TYPE},
141 {DBA_FIELD_LNB_UNICABLECHAN, UNUM_TYPE},
142 {DBA_FIELD_LNB_POWER, UNUM_TYPE},
143 {DBA_FIELD_LNB_NAME, STR_TYPE},
145 {DBA_FIELD_SAT_DISH, UNUM_TYPE},
146 {DBA_FIELD_SAT_LONGWE, UNUM_TYPE},
147 {DBA_FIELD_SAT_LONGPOS, UNUM_TYPE},
149 {DBA_FIELD_TRAN_FREQ, UNUM_TYPE},
150 {DBA_FIELD_TRAN_SRATE, UNUM_TYPE},
151 {DBA_FIELD_TRAN_SIGNAL_STRENGTH, UNUM_TYPE},
152 {DBA_FIELD_TRAN_SIGNAL_QUALITY, UNUM_TYPE},
154 {DBA_FIELD_STRAN_POL, UNUM_TYPE},
155 {DBA_FIELD_STRAN_FEC, UNUM_TYPE},
156 {DBA_FIELD_STRAN_DVBS2, UNUM_TYPE},
157 {DBA_FIELD_STRAN_MODULATION, UNUM_TYPE},
159 {DBA_FIELD_TTRAN_MODE, UNUM_TYPE},
160 {DBA_FIELD_TTRAN_TERR_TYPE, UNUM_TYPE},
161 {DBA_FIELD_TTRAN_PLP_ID, UNUM_TYPE},
162 {DBA_FIELD_TTRAN_BWIDTH, UNUM_TYPE},
164 {DBA_FIELD_CTRAN_MODE, UNUM_TYPE},
166 {DBA_FIELD_SERV_ID, UNUM_TYPE},
167 {DBA_FIELD_SERV_TYPE, UNUM_TYPE},
168 {DBA_FIELD_SERV_LCN, UNUM_TYPE},
169 {DBA_FIELD_SERV_REQ_LCN, UNUM_TYPE},
170 {DBA_FIELD_SERV_HIDDEN, UNUM_TYPE},
171 {DBA_FIELD_SERV_SELECTABLE, UNUM_TYPE},
172 {DBA_FIELD_SERV_LOCKED, UNUM_TYPE},
173 {DBA_FIELD_SERV_SCHED_DISABLED, UNUM_TYPE},
174 {DBA_FIELD_SERV_NOWNEXT_DISABLED, UNUM_TYPE},
175 {DBA_FIELD_SERV_FAV_GROUPS, UNUM_TYPE},
176 {DBA_FIELD_SERV_FREESAT_ID, UNUM_TYPE},
177 {DBA_FIELD_SERV_REGION_ID, UNUM_TYPE},
178 {DBA_FIELD_SERV_LCN_EDITABLE, UNUM_TYPE},
179 {DBA_FIELD_SERV_DELETED, UNUM_TYPE},
181 {DBA_FIELD_TIMER_CRID, STR_TYPE},
182 {DBA_FIELD_TIMER_DISKID, UNUM_TYPE},
183 {DBA_FIELD_TIMER_OTHERCRID, STR_TYPE},
184 {DBA_FIELD_TIMER_HANDLE, UNUM_TYPE},
185 {DBA_FIELD_TIMER_STARTTIME, UNUM_TYPE},
186 {DBA_FIELD_TIMER_DURATION, UNUM_TYPE},
187 {DBA_FIELD_TIMER_TYPE, UNUM_TYPE},
188 {DBA_FIELD_TIMER_FREQUENCY, UNUM_TYPE},
189 {DBA_FIELD_TIMER_RAMPVOLUME, UNUM_TYPE},
190 {DBA_FIELD_TIMER_EVENTID, UNUM_TYPE},
191 {DBA_FIELD_TIMER_MISSED, UNUM_TYPE},
192 {DBA_FIELD_TIMER_EVENT_TRIGGERED, UNUM_TYPE},
193 {DBA_FIELD_TIMER_NOTIFY_TIME, UNUM_TYPE},
194 {DBA_FIELD_TIMER_ADDITIONAL_INFO, STR_TYPE},
195 {DBA_FIELD_TIMER_START_PADDING, UNUM_TYPE},
196 {DBA_FIELD_TIMER_END_PADDING, UNUM_TYPE},
197 {DBA_FIELD_TIMER_DO_NOT_DELETE, UNUM_TYPE},
199 {DBA_FIELD_CRID_SERIES, UNUM_TYPE},
200 {DBA_FIELD_CRID_RECOMMENDED, UNUM_TYPE},
201 {DBA_FIELD_CRID_EIT_DATE, UNUM_TYPE},
202 {DBA_FIELD_CRID_DO_NOT_DELETE, UNUM_TYPE},
204 {DBA_FIELD_FAVLIST_ID, UNUM_TYPE},
205 {DBA_FIELD_FAVLIST_INDEX, UNUM_TYPE},
206 {DBA_FIELD_FAVLIST_USER_DATA, UNUM_TYPE},
208 {DBA_FIELD_BAND_POLARITY, UNUM_TYPE},
209 {DBA_FIELD_BAND_MIN_FREQUENCY, UNUM_TYPE},
210 {DBA_FIELD_BAND_MAX_FREQUENCY, UNUM_TYPE},
211 {DBA_FIELD_BAND_LOCAL_OSC_FREQUENCY, UNUM_TYPE},
212 {DBA_FIELD_BAND_LNB_VOLTAGE, UNUM_TYPE},
213 {DBA_FIELD_BAND_22_KHZ, UNUM_TYPE}
223 {DBA_FIELD_LNB_TYPE, 0, 2, 0, 0, 0},
224 {DBA_FIELD_LNB_POWER, 2, 2, 0, 0, 0},
225 {DBA_FIELD_LNB_22K, 4, 1, 0, 0, 0},
226 {DBA_FIELD_LNB_12V, 5, 1, 0, 0, 0},
227 {DBA_FIELD_LNB_PULSEPOSN, 6, 1, 0, 0, 0},
228 {DBA_FIELD_LNB_DISPOSN, 7, 1, 0, 0, 0},
229 {DBA_FIELD_LNB_DISTONE, 8, 2, 0, 0, 0},
230 {DBA_FIELD_LNB_DISCSWITCH, 10, 3, 0, 0, 0},
231 {DBA_FIELD_LNB_DISUSWITCH, 13, 5, 0, 0, 0},
232 {DBA_FIELD_LNB_DISSMATV, 18, 1, 0, 0, 0},
233 {DBA_FIELD_LNB_DISREPEAT, 19, 4, 0, 0, 0},
234 {DBA_FIELD_LNB_UNICABLEFREQ, 23, 32, 0, 0, 0},
235 {DBA_FIELD_LNB_UNICABLECHAN, 55, 3, 0, 0, 0},
236 {DBA_FIELD_LNB_NAME, 64, (DBA_LNB_NAME_LEN * 8), 0, DBA_LNB_NAME_LEN, 0}
243 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
244 {DBA_FIELD_BAND_POLARITY, 16, 2, 0, 0, 0},
245 {DBA_FIELD_BAND_MIN_FREQUENCY, 18, 16, 0, 0, 0},
246 {DBA_FIELD_BAND_MAX_FREQUENCY, 34, 16, 0, 0, 0},
247 {DBA_FIELD_BAND_LOCAL_OSC_FREQUENCY, 50, 16, 0, 0, 0},
248 {DBA_FIELD_BAND_LNB_VOLTAGE, 66, 2, 0, 0, 0},
249 {DBA_FIELD_BAND_22_KHZ, 68, 1, 0, 0, 0}
256 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
257 {DBA_FIELD_SAT_DISH, 16, 16, 0, 0, 0},
258 {DBA_FIELD_SAT_LONGWE, 32, 1, 0, 0, 0},
259 {DBA_FIELD_SAT_LONGPOS, 33, 15, 0, 0, 0},
260 {DBA_FIELD_REC_NAME, 48, (DBA_GROUP_NAME_LEN * 8), 0, DBA_GROUP_NAME_LEN, 0}
267 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
268 {DBA_FIELD_NET_ID, 16, 16, 0, 0, 0},
269 {DBA_FIELD_VERSION, 32, 8, 0, 0, 0},
270 {DBA_FIELD_ORIG_NET_ID, 40, 16, 0, 0, 0},
271 {DBA_FIELD_PROFILE_TYPE, 56, 2, 0, 0, 0},
272 {DBA_FIELD_PROFILE_CAM_ID, 58, 32, 0, 0, 0},
273 {DBA_FIELD_OPERATOR_SEARCH, 90, 1, 0, 0, 0},
274 {DBA_FIELD_OP_SEARCH_DATE, 91, 16, 0, 0, 0},
275 {DBA_FIELD_OP_SEARCH_TIME, 107, 16, 0, 0, 0},
276 {DBA_FIELD_FAVLIST_ID, 123, 8, 0, 0, 0},
277 {DBA_FIELD_REC_NAME, 136, (DBA_GROUP_NAME_LEN * 8), 0, DBA_GROUP_NAME_LEN, 0},
278 {DBA_FIELD_PROFILE_NAME, 136 + (DBA_GROUP_NAME_LEN * 8), DBA_PROFILE_NAME_LEN * 8,
279 DBA_GROUP_NAME_LEN, DBA_PROFILE_NAME_LEN, 0}
286 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
287 {DBA_FIELD_TRAN_FREQ, 16, 32, 0, 0, 0},
288 {DBA_FIELD_TRAN_SRATE, 48, 16, 0, 0, 0},
289 {DBA_FIELD_STRAN_POL, 64, 2, 0, 0, 0},
290 {DBA_FIELD_STRAN_FEC, 66, 3, 0, 0, 0},
291 {DBA_FIELD_TRANSPORT_ID, 69, 16, 0, 0, 0},
292 {DBA_FIELD_ORIG_NET_ID, 85, 16, 0, 0, 0},
293 {DBA_FIELD_STRAN_MODULATION, 101, 2, 0, 0, 0},
294 {DBA_FIELD_STRAN_DVBS2, 103, 1, 0, 0, 0},
295 {DBA_FIELD_TRAN_SIGNAL_STRENGTH, 104, 8, 0, 0, 0},
296 {DBA_FIELD_VERSION, 112, 8, 0, 0, 0},
297 {DBA_FIELD_TRAN_SIGNAL_QUALITY, 120, 8, 0, 0, 0}
303 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
304 {DBA_FIELD_TRANSPORT_ID, 16, 16, 0, 0, 0},
305 {DBA_FIELD_ORIG_NET_ID, 32, 16, 0, 0, 0},
306 {DBA_FIELD_TRAN_FREQ, 48, 32, 0, 0, 0},
307 {DBA_FIELD_TTRAN_MODE, 80, 2, 0, 0, 0},
308 {DBA_FIELD_TTRAN_BWIDTH, 82, 3, 0, 0, 0},
309 {DBA_FIELD_TRAN_SIGNAL_STRENGTH, 85, 8, 0, 0, 0},
310 {DBA_FIELD_TTRAN_TERR_TYPE, 93, 2, 0, 0, 0},
311 {DBA_FIELD_TTRAN_PLP_ID, 95, 8, 0, 0, 0},
312 {DBA_FIELD_VERSION, 103, 8, 0, 0, 0},
313 {DBA_FIELD_TRAN_SIGNAL_QUALITY, 111, 8, 0, 0, 0}
319 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
320 {DBA_FIELD_TRANSPORT_ID, 16, 16, 0, 0, 0},
321 {DBA_FIELD_ORIG_NET_ID, 32, 16, 0, 0, 0},
322 {DBA_FIELD_TRAN_FREQ, 48, 32, 0, 0, 0},
323 {DBA_FIELD_TRAN_SRATE, 80, 16, 0, 0, 0},
324 {DBA_FIELD_CTRAN_MODE, 96, 3, 0, 0, 0},
325 {DBA_FIELD_TRAN_SIGNAL_STRENGTH, 99, 8, 0, 0, 0},
326 {DBA_FIELD_VERSION, 107, 8, 0, 0, 0},
327 {DBA_FIELD_TRAN_SIGNAL_QUALITY, 115, 8, 0, 0, 0}
333 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
334 {DBA_FIELD_SERV_ID, 16, 16, 0, 0, 0},
335 {DBA_FIELD_SERV_TYPE, 46, 8, 0, 0, 0},
336 {DBA_FIELD_SERV_LCN, 32, 14, 0, 0, 0},
337 {DBA_FIELD_SERV_REQ_LCN, 54, 16, 0, 0, 0},
338 {DBA_FIELD_SERV_FAV_GROUPS, 70, 8, 0, 0, 0},
339 {DBA_FIELD_SERV_HIDDEN, 78, 1, 0, 0, 0},
340 {DBA_FIELD_SERV_SELECTABLE, 79, 1, 0, 0, 0},
341 {DBA_FIELD_SERV_LOCKED, 80, 1, 0, 0, 0},
342 {DBA_FIELD_SERV_SCHED_DISABLED, 81, 1, 0, 0, 0},
343 {DBA_FIELD_SERV_NOWNEXT_DISABLED, 82, 1, 0, 0, 0},
344 {DBA_FIELD_SERV_FREESAT_ID, 83, 16, 0, 0, 0},
345 {DBA_FIELD_SERV_REGION_ID, 99, 16, 0, 0, 0},
346 {DBA_FIELD_SERV_LCN_EDITABLE, 115, 1, 0, 0, 0},
347 {DBA_FIELD_SERV_DELETED, 116, 1, 0, 0, 0},
348 {DBA_FIELD_REC_NAME, 120, (DBA_SERV_NAME_LEN * 8), 0, DBA_SERV_NAME_LEN, 0}
355 {DBA_FIELD_TIMER_HANDLE, 0, 32, 0, 0, 0},
356 {DBA_FIELD_TIMER_DISKID, 32, 16, 0, 0, 0},
357 {DBA_FIELD_TIMER_EVENTID, 48, 16, 0, 0, 0},
358 {DBA_FIELD_ORIG_NET_ID, 64, 16, 0, 0, 0},
359 {DBA_FIELD_TRANSPORT_ID, 80, 16, 0, 0, 0},
360 {DBA_FIELD_SERVICE_ID, 96, 16, 0, 0, 0},
361 {DBA_FIELD_TIMER_STARTTIME, 112, 32, 0, 0, 0},
362 {DBA_FIELD_TIMER_DURATION, 144, 32, 0, 0, 0},
363 {DBA_FIELD_TIMER_TYPE, 176, 4, 0, 0, 0},
364 {DBA_FIELD_TIMER_FREQUENCY, 180, 4, 0, 0, 0},
365 {DBA_FIELD_TIMER_RAMPVOLUME, 184, 1, 0, 0, 0},
366 {DBA_FIELD_TIMER_MISSED, 185, 1, 0, 0, 0},
367 {DBA_FIELD_CRID_RECOMMENDED, 186, 1, 0, 0, 0},
368 {DBA_FIELD_TIMER_EVENT_TRIGGERED, 187, 1, 0, 0, 0},
369 {DBA_FIELD_TIMER_NOTIFY_TIME, 188, 16, 0, 0, 0},
370 {DBA_FIELD_TIMER_START_PADDING, 204, 32, 0, 0, 0},
371 {DBA_FIELD_TIMER_END_PADDING, 236, 32, 0, 0, 0},
372 {DBA_FIELD_TIMER_DO_NOT_DELETE, 268, 1, 0, 0, 0},
373 {DBA_FIELD_REC_NAME, 272, (DBA_TIMER_NAME_LEN * 8), 0, DBA_TIMER_NAME_LEN, 0},
374 {DBA_FIELD_TIMER_CRID, 272 + (DBA_TIMER_NAME_LEN * 8), (DBA_CRID_LEN * 8),
375 DBA_TIMER_NAME_LEN, DBA_CRID_LEN, 0},
376 {DBA_FIELD_TIMER_OTHERCRID, 272 + (DBA_TIMER_NAME_LEN * 8) + (DBA_CRID_LEN * 8),
377 (DBA_CRID_LEN * 8), DBA_TIMER_NAME_LEN + DBA_CRID_LEN, DBA_CRID_LEN, 0},
378 {DBA_FIELD_TIMER_ADDITIONAL_INFO, 272 + (DBA_TIMER_NAME_LEN * 8) + (DBA_CRID_LEN * 8) + (DBA_CRID_LEN * 8),
379 (DBA_TIMER_ADDINFO_LEN * 8), DBA_TIMER_NAME_LEN + DBA_CRID_LEN + DBA_CRID_LEN, DBA_TIMER_ADDINFO_LEN, 0}
386 {DBA_FIELD_CRID_EIT_DATE, 0, 16, 0, 0, 0},
387 {DBA_FIELD_TIMER_STARTTIME, 16, 32, 0, 0, 0},
388 {DBA_FIELD_SERVICE_ID, 48, 16, 0, 0, 0},
389 {DBA_FIELD_CRID_SERIES, 64, 1, 0, 0, 0},
390 {DBA_FIELD_CRID_RECOMMENDED, 65, 1, 0, 0, 0},
391 {DBA_FIELD_CRID_DO_NOT_DELETE, 66, 1, 0, 0, 0},
392 {DBA_FIELD_REC_NAME, 72, (DBA_TIMER_NAME_LEN * 8), 0, DBA_TIMER_NAME_LEN, 0},
393 {DBA_FIELD_TIMER_CRID, 72 + (DBA_TIMER_NAME_LEN * 8), (DBA_CRID_LEN * 8),
394 DBA_TIMER_NAME_LEN, DBA_CRID_LEN, 0}
401 {DBA_FIELD_FAVLIST_ID, 0, 8, 0, 0, 0},
402 {DBA_FIELD_FAVLIST_INDEX, 8, 8, 0, 0, 0},
403 {DBA_FIELD_FAVLIST_USER_DATA, 16, 32, 0, 0, 0},
404 {DBA_FIELD_REC_NAME, 48, (DBA_FAVLIST_NAME_LEN * 8), 0, DBA_FAVLIST_NAME_LEN, 0}
411 {DBA_FIELD_PARENT, 0, 16, 0, 0, 0},
412 {DBA_FIELD_FAVLIST_ID, 16, 8, 0, 0, 0},
413 {DBA_FIELD_FAVLIST_INDEX, 24, 16, 0, 0, 0}
419 {DBA_FIELD_PROFILE_CAM_ID, 0, 32, 0, 0, 0},
420 {DBA_FIELD_TIMER_HANDLE, 32, 32, 0, 0, 0}
427 static const RECORD_ACCESS database_access_lut[DBA_NUM_RECORDS] =
429 {NUM_FIELDS(nvm_lnb_rec), nvm_lnb_rec},
430 {NUM_FIELDS(nvm_sat_rec), nvm_sat_rec},
431 {NUM_FIELDS(nvm_net_rec), nvm_net_rec},
432 {NUM_FIELDS(nvm_stran_rec), nvm_stran_rec},
433 {NUM_FIELDS(nvm_ttran_rec), nvm_ttran_rec},
434 {NUM_FIELDS(nvm_ctran_rec), nvm_ctran_rec},
435 {NUM_FIELDS(nvm_serv_rec), nvm_serv_rec},
436 {NUM_FIELDS(nvm_timer_rec), nvm_timer_rec},
437 {NUM_FIELDS(nvm_crid_rec), nvm_crid_rec},
438 {NUM_FIELDS(nvm_fav_list_rec), nvm_fav_list_rec},
439 {NUM_FIELDS(nvm_fav_serv_rec), nvm_fav_serv_rec},
440 {NUM_FIELDS(nvm_lnb_band_rec), nvm_lnb_band_rec},
441 {NUM_FIELDS(nvm_cicam_timer), nvm_cicam_timer}
445 static BOOLEAN dba_initialised = FALSE;
446 static void *dba_sem;
447 static U8BIT version_string[FORMAT_ID_STRING_SIZE + 1];
449 static U8BIT *backup_database;
453 static BOOLEAN ReadFormat(U8BIT *data_ptr, U8BIT *version);
454 static void WriteFormat(U8BIT *data_ptr);
455 static void BuildDatabase(U8BIT *data_ptr);
456 static void ConvertDatabase(U8BIT *data_ptr);
457 static void ClearDatabase(
void);
459 static U8BIT GetFieldType(U16BIT field_id);
460 static U16BIT GetNVMRecSize(U8BIT rec_id);
461 static U16BIT GetRAMRecSize(U8BIT rec_id);
463 static BOOLEAN GetNVMFieldParams(U8BIT rec_id, U16BIT field_id, U16BIT *offset, U16BIT *size);
464 static BOOLEAN GetRAMFieldParams(U8BIT rec_id, U16BIT field_id, U16BIT *offset, U16BIT *size);
466 static void AddToNVMList(
void *rec_ptr);
467 static void SetStartNVMList(U8BIT rec_id, U16BIT block_no);
468 static U16BIT GetStartNVMList(U8BIT *data_ptr, U8BIT rec_id);
469 static void RemoveFromNVMList(
void *rec_ptr);
471 static void DestroyRecord(
void *rec_ptr);
486 if (!dba_initialised)
491 dba_initialised = TRUE;
496 backup_database = NULL;
501 return(dba_initialised);
520 if (backup_database != NULL)
523 backup_database = NULL;
526 dba_initialised = FALSE;
552 USE_UNWANTED_PARAM(pathname);
562 for (i = 0; i < DBA_NUM_RECORDS; i++)
565 for (j = 0; j < database_access_lut[i].num_fields; j++)
567 if (database_access_lut[i].field[j].nvm_bit_size > 0)
593 if (ram_cache != NULL)
598 if (ReadFormat(ram_cache, &version))
601 if (version == FORMAT_VERSION_NUM)
607 BuildDatabase(ram_cache);
612 memset(ram_cache, 0xff, fsize);
614 WriteFormat(ram_cache);
616 BuildDatabase(ram_cache);
623 ConvertDatabase(ram_cache);
624 BuildDatabase(ram_cache);
631 memset(ram_cache, 0xff, fsize);
633 WriteFormat(ram_cache);
635 BuildDatabase(ram_cache);
647 memset(ram_cache, 0xff, fsize);
649 WriteFormat(ram_cache);
651 BuildDatabase(ram_cache);
732 USE_UNWANTED_PARAM(pathname);
736 if (backup_database != NULL)
740 backup_database = NULL;
750 if ((backup_database = (U8BIT *)
STB_GetMemory(db_size)) != NULL)
752 memcpy(backup_database, current_db, db_size);
768 BOOLEAN retval = FALSE;
775 if ((backup_database != NULL) && (current_db != NULL))
791 BOOLEAN retval = FALSE;
799 if ((backup_database != NULL) && (current_db != NULL))
805 memcpy(current_db, backup_database, db_size);
808 STB_NVMChanged(TRUE);
826 if (backup_database != NULL)
829 backup_database = NULL;
843 USE_UNWANTED_PARAM(xml_pathname);
858 USE_UNWANTED_PARAM(xml_pathname);
897 strncpy((
char *)version_string, (
char *)db_format.id_str, FORMAT_ID_STRING_SIZE + 1);
901 version_string[0] =
'\0';
906 return(version_string);
923 if (max_size != NULL)
942 U16BIT nvm_size, ram_size, nvm_block;
943 U16BIT field_offset, field_size;
950 if (dba_initialised && (record_id < DBA_NUM_RECORDS) )
952 nvm_size = GetNVMRecSize(record_id);
953 ram_size = GetRAMRecSize(record_id);
960 if (nvm_block != NVM_INVALID_BLOCK_ID)
972 AddToNVMList(rec_ptr);
977 if (GetNVMFieldParams(record_id, DBA_FIELD_PARENT, &field_offset,
986 if (GetNVMFieldParams(record_id, DBA_FIELD_PARENT, &field_offset,
990 NVM_INVALID_BLOCK_ID);
1021 if (dba_initialised && (record != NULL))
1024 count = DBA_NUM_RECORDS - 1;
1028 while (crec_ptr != NULL)
1031 DestroyRecord(crec_ptr);
1032 crec_ptr = cnext_ptr;
1039 DestroyRecord(record);
1061 if (dba_initialised && (record_id < DBA_NUM_RECORDS))
1085 U16BIT field_offset, field_size;
1089 ASSERT(record != NULL);
1091 if (dba_initialised && (record != NULL))
1102 link_val = NVM_INVALID_BLOCK_ID;
1109 if (GetRAMFieldParams(rec_id, DBA_FIELD_PARENT, &field_offset, &field_size))
1114 if (GetNVMFieldParams(rec_id, DBA_FIELD_PARENT, &field_offset, &field_size))
1135 ASSERT(record != NULL);
1137 if (dba_initialised && (record != NULL))
1162 USE_UNWANTED_PARAM(record);
1178 U16BIT field_size, field_offset;
1183 ASSERT(record != NULL);
1187 if (dba_initialised)
1191 type = GetFieldType(field_id);
1192 if (type != STR_TYPE)
1195 if (GetRAMFieldParams(rec_id, field_id, &field_offset, &field_size))
1201 if (GetNVMFieldParams(rec_id, field_id, &field_offset, &field_size))
1230 U16BIT field_size, field_offset;
1235 ASSERT(record != NULL);
1239 if (dba_initialised)
1243 type = GetFieldType(field_id);
1244 if (type == STR_TYPE)
1247 if (GetRAMFieldParams(rec_id, field_id, &field_offset, &field_size))
1249 if (num_bytes < field_size)
1251 field_size = num_bytes;
1258 if (GetNVMFieldParams(rec_id, field_id, &field_offset, &field_size))
1261 if ((num_bytes * 8) < field_size)
1263 field_size = num_bytes * 8;
1267 field_size,
string);
1297 USE_UNWANTED_PARAM(record);
1298 USE_UNWANTED_PARAM(field_id);
1299 USE_UNWANTED_PARAM(lang_code);
1300 USE_UNWANTED_PARAM(
string);
1301 USE_UNWANTED_PARAM(num_bytes);
1323 USE_UNWANTED_PARAM(record);
1324 USE_UNWANTED_PARAM(field_id);
1325 USE_UNWANTED_PARAM(data);
1326 USE_UNWANTED_PARAM(num_bytes);
1344 U16BIT field_size, field_offset;
1349 ASSERT(record != NULL);
1350 ASSERT(value != NULL);
1354 if (dba_initialised)
1358 type = GetFieldType(field_id);
1359 if (type != STR_TYPE)
1362 if (GetRAMFieldParams(rec_id, field_id, &field_offset, &field_size))
1370 if (GetNVMFieldParams(rec_id, field_id, &field_offset, &field_size))
1403 U16BIT field_size, field_offset;
1408 ASSERT(record != NULL);
1412 if (dba_initialised)
1416 type = GetFieldType(field_id);
1417 if (type == STR_TYPE)
1420 if (GetRAMFieldParams(rec_id, field_id, &field_offset, &field_size))
1428 if (GetNVMFieldParams(rec_id, field_id, &field_offset, &field_size))
1431 field_offset, field_size);
1436 if (*
string != NULL)
1466 USE_UNWANTED_PARAM(record);
1467 USE_UNWANTED_PARAM(field_id);
1468 USE_UNWANTED_PARAM(lang_code);
1469 USE_UNWANTED_PARAM(
string);
1470 USE_UNWANTED_PARAM(num_bytes);
1493 USE_UNWANTED_PARAM(record);
1494 USE_UNWANTED_PARAM(field_id);
1495 USE_UNWANTED_PARAM(data);
1496 USE_UNWANTED_PARAM(num_bytes);
1538 if (block_size < num_bytes)
1540 num_bytes = block_size;
1545 bytes_read = num_bytes;
1577 static BOOLEAN ReadFormat(U8BIT *data_ptr, U8BIT *version)
1580 BOOLEAN retval = FALSE;
1582 FUNCTION_START(ReadFormat);
1585 memcpy((
void *)&db_format, (
void *)data_ptr, (
size_t)
sizeof(
DATABASE_FORMAT));
1591 if (strcmp((
char *)db_format.id_str, (
char *)FORMAT_ID_STRING) == 0)
1594 *version = db_format.version;
1599 FUNCTION_FINISH(ReadFormat);
1604 static void WriteFormat(U8BIT *data_ptr)
1607 U8BIT fcount[DBA_NUM_RECORDS];
1614 FUNCTION_START(WriteFormat);
1619 for (i = 0; i < DBA_NUM_RECORDS; i++)
1622 for (j = 0; j < database_access_lut[i].num_fields; j++)
1624 if (database_access_lut[i].field[j].nvm_bit_size > 0)
1638 memset(&db_format, 0,
sizeof(db_format));
1639 strncpy((
char *)db_format.id_str, (
char *)FORMAT_ID_STRING, FORMAT_ID_STRING_SIZE);
1640 db_format.version = FORMAT_VERSION_NUM;
1642 memcpy((
void *)data_ptr, (
void *)&db_format, (
size_t)
sizeof(
DATABASE_FORMAT));
1649 db_desc.num_records = rcount;
1650 db_desc.padding[0] = 0;
1655 for (i = 0; i < DBA_NUM_RECORDS; i++)
1660 rec_desc.record_id = i;
1661 rec_desc.num_fields = fcount[i];
1668 for (j = 0; j < database_access_lut[i].num_fields; j++)
1670 if (database_access_lut[i].field[j].nvm_bit_size > 0)
1676 STB_SetBE16Bit(&fld_desc.field_offset, database_access_lut[i].field[j].nvm_bit_offset);
1677 fld_desc.field_size = database_access_lut[i].field[j].nvm_bit_size;
1678 fld_desc.padding[0] = 0;
1679 memcpy((
void *)data_ptr, (
void *)&fld_desc, (
size_t)
sizeof(
FIELD_DESCRIPTOR));
1686 FUNCTION_FINISH(WriteFormat);
1689 static void BuildDatabase(U8BIT *data_ptr)
1692 U16BIT offset, size, field_id;
1697 BOOLEAN reset_ram_access = FALSE;
1699 FUNCTION_START(BuildDatabase);
1705 reset_ram_access = TRUE;
1712 for (rec_id = 0; rec_id < DBA_NUM_RECORDS; rec_id++)
1715 nvm_blk = GetStartNVMList(data_ptr, rec_id);
1716 while (nvm_blk != NVM_INVALID_BLOCK_ID)
1719 if (GetNVMFieldParams(rec_id, DBA_FIELD_PARENT, &offset, &size))
1731 if (rec_ptr != NULL)
1734 for (i = 0; i < database_access_lut[rec_id].num_fields; i++)
1736 field_id = database_access_lut[rec_id].field[i].field_id;
1737 if (GetNVMFieldParams(rec_id, field_id, &offset, &size))
1739 type = GetFieldType(field_id);
1746 GetRAMFieldParams(rec_id, field_id, &offset, &size))
1755 if ((str != NULL) &&
1756 GetRAMFieldParams(rec_id, field_id, &offset, &size))
1773 if (reset_ram_access)
1779 FUNCTION_FINISH(BuildDatabase);
1782 static void ConvertDatabase(U8BIT *data_ptr)
1792 FUNCTION_START(ConvertDatabase);
1799 db_desc.num_records = db_ptr->num_records;
1804 if ((rec_desc != NULL) && (fld_desc != NULL))
1807 for (i = 0; i < db_desc.num_records; i++)
1809 rec_desc[i].record_id = rd_ptr->record_id;
1810 rec_desc[i].num_fields = rd_ptr->num_fields;
1815 if (fld_desc[i] != NULL)
1817 for (j = 0; j < rec_desc[i].num_fields; j++)
1823 fld_desc[i][j].field_offset =
STB_GetBE16Bit(&fd_ptr->field_offset);
1824 fld_desc[i][j].field_size = fd_ptr->field_size;
1833 if (fld_desc != NULL)
1835 for (i = 0; i < db_desc.num_records; i++)
1843 FUNCTION_FINISH(ConvertDatabase);
1846 static void ClearDatabase(
void)
1849 U16BIT field_id, field_offset, field_size;
1853 FUNCTION_START(ClearDatabase);
1856 for (rec_id = 0; rec_id < DBA_NUM_RECORDS; rec_id++)
1858 for (i = 0; i < database_access_lut[rec_id].num_fields; i++)
1860 field_id = database_access_lut[rec_id].field[i].field_id;
1861 if (GetFieldType(field_id) == PTR_TYPE)
1863 if (GetRAMFieldParams(rec_id, field_id, &field_offset, &field_size))
1865 ASSERT(field_size ==
sizeof(
void*));
1868 while (rec_ptr != NULL)
1882 FUNCTION_FINISH(ClearDatabase);
1885 static U8BIT GetFieldType(U16BIT field_id)
1888 U16BIT num_fields =
sizeof(database_field_type) /
sizeof(database_field_type[0]);
1891 FUNCTION_START(GetFieldType);
1894 for (i = 0; i < num_fields; i++)
1896 if (database_field_type[i].field_id == field_id)
1898 ret_val = (U8BIT)database_field_type[i].type;
1903 FUNCTION_FINISH(GetFieldType);
1908 static U16BIT GetNVMRecSize(U8BIT rec_id)
1910 U16BIT rec_size, max_size;
1913 FUNCTION_START(GetNVMRecSize);
1917 for (i = 0; i < database_access_lut[rec_id].num_fields; i++)
1919 rec_size = database_access_lut[rec_id].field[i].nvm_bit_offset;
1920 rec_size += (U16BIT)database_access_lut[rec_id].field[i].nvm_bit_size;
1921 if (rec_size > max_size)
1923 max_size = rec_size;
1928 if ((max_size % 8) > 0)
1930 max_size += (8 - (max_size % 8));
1934 max_size = (max_size >> 3);
1936 FUNCTION_FINISH(GetNVMRecSize);
1941 static U16BIT GetRAMRecSize(U8BIT rec_id)
1943 U16BIT rec_size, max_size;
1946 FUNCTION_START(GetRAMRecSize);
1950 for (i = 0; i < database_access_lut[rec_id].num_fields; i++)
1952 rec_size = database_access_lut[rec_id].field[i].ram_byte_offset;
1953 rec_size += (U16BIT)database_access_lut[rec_id].field[i].ram_byte_size;
1954 if (rec_size > max_size)
1956 max_size = rec_size;
1960 FUNCTION_FINISH(GetRAMRecSize);
1965 static BOOLEAN GetNVMFieldParams(U8BIT rec_id, U16BIT field_id, U16BIT *offset, U16BIT *size)
1968 BOOLEAN ret_val = FALSE;
1970 FUNCTION_START(GetNVMFieldParams);
1972 ASSERT(rec_id < DBA_NUM_RECORDS);
1973 ASSERT(offset != NULL);
1974 ASSERT(size != NULL);
1976 for (i = 0; i < database_access_lut[rec_id].num_fields; i++)
1978 if (database_access_lut[rec_id].field[i].field_id == field_id)
1980 *offset = database_access_lut[rec_id].field[i].nvm_bit_offset;
1981 *size = database_access_lut[rec_id].field[i].nvm_bit_size;
1990 FUNCTION_FINISH(GetNVMFieldParams);
1995 static BOOLEAN GetRAMFieldParams(U8BIT rec_id, U16BIT field_id, U16BIT *offset, U16BIT *size)
1998 BOOLEAN ret_val = FALSE;
2000 FUNCTION_START(GetRAMFieldParams);
2002 ASSERT(rec_id < DBA_NUM_RECORDS);
2003 ASSERT(offset != NULL);
2004 ASSERT(size != NULL);
2006 for (i = 0; i < database_access_lut[rec_id].num_fields; i++)
2008 if (database_access_lut[rec_id].field[i].field_id == field_id)
2010 *offset = database_access_lut[rec_id].field[i].ram_byte_offset;
2011 *size = database_access_lut[rec_id].field[i].ram_byte_size;
2020 FUNCTION_FINISH(GetRAMFieldParams);
2025 static void AddToNVMList(
void *rec_ptr)
2030 FUNCTION_START(AddToNVMList);
2032 ASSERT(rec_ptr != NULL);
2038 SetStartNVMList(rec_id, nvm_block);
2047 FUNCTION_FINISH(AddToNVMList);
2050 static void SetStartNVMList(U8BIT rec_id, U16BIT block_no)
2057 FUNCTION_START(SetStartNVMList);
2059 ASSERT(rec_id < DBA_NUM_RECORDS);
2065 for (i = 0; i < db_desc.num_records; i++)
2069 if (rec_desc.record_id == rec_id)
2083 FUNCTION_FINISH(SetStartNVMList);
2086 static U16BIT GetStartNVMList(U8BIT *data_ptr, U8BIT rec_id)
2092 U16BIT ret_val = NVM_INVALID_BLOCK_ID;
2094 FUNCTION_START(GetStartNVMList);
2096 ASSERT(rec_id < DBA_NUM_RECORDS);
2098 if (data_ptr == NULL)
2105 for (i = 0; i < db_desc.num_records; i++)
2109 if (rec_desc.record_id == rec_id)
2128 for (i = 0; i < db_desc.num_records; i++)
2131 if (rec_desc.record_id == rec_id)
2143 FUNCTION_FINISH(GetStartNVMList);
2148 static void RemoveFromNVMList(
void *rec_ptr)
2152 FUNCTION_START(RemoveFromNVMList);
2154 ASSERT(rec_ptr != NULL);
2166 FUNCTION_FINISH(RemoveFromNVMList);
2169 static void DestroyRecord(
void *rec_ptr)
2172 U16BIT nvm_block, field_id, field_offset, field_size;
2175 FUNCTION_START(DestroyRecord);
2177 ASSERT(rec_ptr != NULL);
2181 for (i = 0; i < database_access_lut[rec_id].num_fields; i++)
2183 field_id = database_access_lut[rec_id].field[i].field_id;
2184 if (GetFieldType(field_id) == PTR_TYPE)
2186 if (GetRAMFieldParams(rec_id, field_id, &field_offset, &field_size))
2188 ASSERT(field_size ==
sizeof(
void*));
2191 if (field_val != NULL)
2201 if (nvm_block != NVM_INVALID_BLOCK_ID)
2204 RemoveFromNVMList(rec_ptr);
2213 FUNCTION_FINISH(DestroyRecord);
U32BIT STB_GetNVMRecordNumber(U16BIT block_no, U16BIT offset, U16BIT size)
Reads the specified value of a field from a NVM record.
U16BIT STB_GetNextNVMBlock(U16BIT block_no)
Returns the block number of the next NVM record pointed to by the NVM record starting at the specifie...
U16BIT STB_GetRAMRecordNVMBlock(void *rec_ptr)
Returns NVM block number for given record pointer.
BOOLEAN DBA_ImportFromXML(U8BIT *xml_pathname)
Imports records from the given XML file into the working database. If a record already exists in the ...
void * DBA_CreateRecord(U32BIT record_id, void *parent)
Creates a new record of the given type, adding it to the database as a child of the given parent reco...
void * STB_GetMemory(U32BIT bytes)
Attempts to allocate memory from the heap.
void STB_DestroyNVMRecord(U16BIT block_no)
Destroys NVM record by marking all NVM blocks used by the record as invalid.
NVM database access defines, structures and functions.
void STB_NVMInitialise(void)
Initialises NVM control.
BOOLEAN STB_CheckNVMDatabaseIntegrity(void)
Reads each database block from NVM and checks its checksum. If the data has already been read into th...
BOOLEAN DBA_SaveDatabase(void)
Saves any changes made to the working database to non-volatile storage. If saving to a file...
BOOLEAN STB_NVMSTBRead(U32BIT offset, U32BIT bytes, U8BIT *dest_addr)
Reads bytes from the given position of the STB area of NVM.
BOOLEAN DBA_RestoreDatabase(void)
Restores the working database from a previously made backup copy.
Header file - Function prototypes for RAM database.
BOOLEAN DBA_BackupDatabase(U8BIT *pathname)
Creates a backup copy of the working database. Whether the backup database is saved to non-volatile s...
void * STB_GetRAMRecordParent(void *rec_ptr)
Returns parent pointer for given record pointer.
void * STB_OSCreateSemaphore(void)
Create a Semaphore.
U8BIT * STB_GetNVMRecordString(U16BIT block_no, U16BIT offset, U16BIT size)
Reads string of a field from a NVM record.
void STB_SetNVMRecordString(U16BIT block_no, U16BIT offset, U16BIT size, U8BIT *string)
Writes the specified value into a field of a NVM record.
void STB_NVMSave(void)
Saves the RAM cache data to NVM.
void * STB_GetRAMRecordPointer(void *rec_ptr, U16BIT offset)
Reads the specified value of a field from a RAM record.
BOOLEAN DBA_SetFieldLangString(void *record, U32BIT field_id, U32BIT lang_code, U8BIT *string, U16BIT num_bytes)
Set the string value of a record's field. The function will fail if the record doesn't exist...
void STB_SetRAMRecordString(void *rec_ptr, U16BIT offset, U16BIT size, U8BIT *string)
Writes the specified string into a field of a RAM record.
U32BIT DBA_DataBlockSize(U32BIT data_block_id)
Returns the number of bytes available for the given data block.
void DBA_SaveRecord(void *record)
Forces a record to be saved to non-volatile storage. Depending on the implementation, this function may not do anything if the data is updated to non-volatile storage as any records and/or fields are created or updated.
void DBA_EraseBackupDatabase(void)
Erases the backup copy of the database. If data was stored in non-volatile storage then this should b...
void STB_SetBE16Bit(U16BIT *addr, U16BIT value)
Stores 16bit int in address, forcing value to be stored in Big endian format.
BOOLEAN DBA_GetFieldData(void *record, U32BIT field_id, U8BIT **data, U16BIT *num_bytes)
Gets the data of a record's field. The function will fail if the record doesn't exist, the record doesn't include the given field, or the field isn't a data field. The pointer to the data returned will be to the data held by the database, so the data must not be changed.
void STB_InitNVMAccess(U16BIT offset)
Initialises parameters needed for NVM block access.
Header file - Function prototypes for NVM control.
U32BIT DBA_DatabaseFileSize(U32BIT *max_size)
Returns the size in bytes of the database as stored in non-volatile storage.
void STB_OSSemaphoreSignal(void *semaphore)
Signal a Semaphore to Release it by decrementing its counter.
BOOLEAN DBA_LoadDatabase(U8BIT *pathname)
Reads a database from non-volatile storage, creating any structures in memory that will be required t...
BOOLEAN DBA_DataBlockWrite(U32BIT data_block_id, U8BIT *data, U32BIT num_bytes)
Writes a block of data into the database from the given buffer.
void * STB_CreateRAMRecord(U8BIT rec_id, U16BIT size, U16BIT nvm_block, void *parent)
Creates a record of the type given in RAM (mallocs block).
void STB_OSDeleteSemaphore(void *semaphore)
Delete a Semaphore.
BOOLEAN DBA_GetFieldLangString(void *record, U32BIT field_id, U32BIT lang_code, U8BIT **string, U16BIT *num_bytes)
Gets the string value of a record's field. The function will fail if the record doesn't exist...
void STB_SetNVMRecordNumber(U16BIT block_no, U16BIT offset, U16BIT size, U32BIT value)
Writes the specified value into a field of a NVM record.
Header file - Function prototypes for NVM database.
void STB_OSSemaphoreWait(void *semaphore)
Wait on Semaphore Indefinity or Until Released.
void STB_SetRAMRecordParent(void *rec_ptr, void *parent)
Sets parent pointer for given record pointer.
U8BIT STB_CalcChecksum(U8BIT *data_ptr, U32BIT data_size)
Calculates the checksum to zero for the data block provided.
U32BIT STB_GetRAMRecordNumber(void *rec_ptr, U16BIT offset, U16BIT size)
Reads the specified value of a field from a RAM record.
BOOLEAN DBA_ExportToXML(U8BIT *xml_pathname)
Export the working database to an XML file.
void STB_SetNextNVMBlock(U16BIT block_no, U16BIT next_block)
Repairs NVM linked list by pointing the NVM record starting at the specified block number to the reco...
void STB_FreeMemory(void *addr)
Releases previously allocated heap memory.
U8BIT * STB_GetRAMRecordString(void *rec_ptr, U16BIT offset, U16BIT size)
Reads the specified value of a field from a RAM record.
U8BIT * DBA_DatabaseVersion(void)
Returns a version string representing the working database.
BOOLEAN DBA_GetFieldString(void *record, U32BIT field_id, U8BIT **string, U16BIT *num_bytes)
Gets the string value of a record's field. The function will fail if the record doesn't exist...
void STB_InitRAMAccess(void)
Initialises parameters needed for RAM record access.
U16BIT STB_GetRAMRecordNextNVMBlock(void *rec_ptr)
Returns NVM block number for next record of given pointer.
BOOLEAN STB_NVMDataBlockRead(U32BIT data_block_id, U32BIT num_bytes, U8BIT *dest_addr)
Reads data bytes for the given data block from NVM.
U32BIT STB_NVMGetDataBlockSize(U32BIT data_block_id)
Returns the number of bytes of data stored for the given data block.
U16BIT STB_GetBE16Bit(U16BIT *addr)
Returns 16bit int from address, assuming value is stored in Big endian format.
BOOLEAN DBA_Initialise(void)
Performs any initialisation required prior to the database being loaded.
BOOLEAN DBA_SetFieldString(void *record, U32BIT field_id, U8BIT *string, U16BIT num_bytes)
Set the string value of a record's field. The function will fail if the record doesn't exist...
Debug functions header file.
void * STB_FindRAMRecordFromId(U8BIT rec_id, void *parent, void *last_rec)
Returns pointer to RAM structure for the given record type. Finds the next record in the list after t...
Database access defines, structures and public functions.
void * DBA_FindRecord(U32BIT record_id, void *parent, void *last_rec)
Finds the next record, of the given type, that comes after last_rec. last_rec must be the same type o...
U16BIT STB_CreateNVMRecord(U8BIT rec_id, U16BIT size)
Creates a record of the type given in NVM by overwriting invalid blocks.
void STB_PurgeRAMRecords(void)
Initialises RAM database by destroying all records and linked lists.
void STB_SetRAMRecordNumber(void *rec_ptr, U16BIT offset, U16BIT size, U32BIT value)
Writes the specified value into a field of a RAM record.
BOOLEAN DBA_CanRestoreDatabase(void)
Checks whether the working database can be restored from a backup copy.
Header for STB unicode string handling routines.
U8BIT STB_GetRAMRecordId(void *rec_ptr)
Returns record type id for given record pointer.
void STB_WriteNVMData(U16BIT offset, U16BIT size, U8BIT *data_ptr)
Writes the given data to NVM.
U32BIT STB_GetNumBytesInString(U8BIT *string_ptr)
Determines the no of bytes of the given string.
U32BIT DBA_DataBlockRead(U32BIT data_block_id, U8BIT *data, U32BIT num_bytes)
Read a block of data from the database into the given buffer.
void STB_InitNVMMap(void)
Initialises parameters needed for NVM block access (calcs num blocks if required) ...
U16BIT STB_GetNVMBlocksUsed(void)
Returns total number of NVM database blocks in use.
BOOLEAN STB_ReadNVMData(U16BIT offset, U16BIT size, U8BIT *data_ptr)
Reads data from the NVM into the given buffer.
Header file - Function prototypes for operating system.
System Wide Global Technical Data Type Definitions.
BOOLEAN DBA_SetFieldValue(void *record, U32BIT field_id, U32BIT value)
Set the value of a record's field. The function will fail if the record doesn't exist, the record doesn't include the given field, or the field is a string value.
U16BIT STB_GetNVMBlockCount(void)
Returns total number of NVM database blocks.
BOOLEAN STB_CheckChecksum(U8BIT *data_ptr, U32BIT data_size)
Validates the checksum to zero for the block pointer provided.
Header file - Function prototypes for check sum calcs.
BOOLEAN DBA_SetFieldData(void *record, U32BIT field_id, U8BIT *data, U16BIT num_bytes)
Set a variable amount of data of a record's field. The function will fail if the record doesn't exist...
U16BIT STB_GetRAMRecordPrevNVMBlock(void *rec_ptr)
Returns NVM block number for previous record of given pointer.
BOOLEAN STB_NVMSTBWrite(U32BIT offset, U32BIT bytes, U8BIT *src_addr)
Writes bytes into the given position of the STB area of NVM.
Header file - Function prototypes for heap memory.
void DBA_DestroyRecord(void *record)
Destroys the given record, removing it from the database and freeing any memory associated with it...
BOOLEAN DBA_ClearDatabase(void)
Clears the working database of all records. Following this call, it should still be possible to acces...
void STB_SetNVMAccessRAM(U8BIT *ram_ptr)
Sets all DB NVM access to RAM block supplied instead of NVM (cancel if NULL).
BOOLEAN STB_NVMDataBlockWrite(U32BIT data_block_id, U32BIT num_bytes, U8BIT *src_addr)
Writes data bytes for the given data block to NVM.
void DBA_LockDatabase(void)
Locks the database to prevent access from other threads or processes.
U32BIT STB_NVMGetSTBSize(void)
Returns size of STB database storage are (in bytes).
void DBA_UnlockDatabase(void)
Unlocks the database to allow other threads or processes to access it.
BOOLEAN DBA_GetFieldValue(void *record, U32BIT field_id, U32BIT *value)
Gets the value of a record's field. The function will fail if the record doesn't exist, the record doesn't include the given field, or the field is a string value.
void DBA_Terminate(void)
Releases any resources acquired by initialisation and clears any currently loaded database...
void STB_DestroyRAMRecord(void *rec_ptr)
Destroys record given in RAM (frees block).
void STB_NVMFlushCache(BOOLEAN clear)
Flush cached changes.
void DBA_SetRecordParent(void *record, void *parent)
Set of change the parent of the given record.
void * STB_FindRAMRecordFromNVMBlock(U16BIT nvm_block)
Returns pointer to RAM structure which relates to the given NVM record block no.
U16BIT STB_GetNVMBlockSize(void)
Returns the size of an NVM database block, in bytes.
U8BIT * STB_GetNVMAccessRAM(void)
Returns the current RAM pointer used for DB NVM access.
void * DBA_GetRecordParent(void *record)
Returns the handle to the parent of the given record.