diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/aci/db.h	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,265 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  PHB 
+|  Modul   :  DBM
++----------------------------------------------------------------------------- 
+|  Copyright 2005 Texas Instruments Berlin, AG 
+|                 All rights reserved. 
+| 
+|                 This file is confidential and a trade secret of Texas 
+|                 Instruments Berlin, AG 
+|                 The receipt of or possession of this file does not convey 
+|                 any rights to reproduce or disclose its contents or to 
+|                 manufacture, use, or sell anything it may describe, in 
+|                 whole, or in part, without the specific written consent of 
+|                 Texas Instruments Berlin, AG. 
++----------------------------------------------------------------------------- 
+|  Purpose :  Interface betweeen ACI_SIM and DBM module
++----------------------------------------------------------------------------- 
+*/ 
+#ifndef DB_H
+#define DB_H
+
+#include "typedefs.h"
+#define DB_MAX_AFFECTED	5           /* As per architecture document */
+
+#define MAX_DBs					        2   /* This needs to increased if DBM is used 
+                                       for storing new databases (say SMSs)   */
+
+#define MAX_NUM_FILES			      255 /* As per architecture document           */
+
+#define MAX_NUM_OF_SORT_INDEXS	4   /* As per architecture document           */ 
+
+#define MAX_NUM_RECORDS			    254 /* As per architecture document           */
+
+#define INVALID_FIELD_ID        0xFFFF  
+
+#define INVALID_SORT_INDEX      0xFF  
+
+/* Insertion sort is available */
+#define INSERTION_SORT
+
+/* 
+    Database type 
+ */
+typedef enum
+{
+
+  DB_UNMANAGED,	/* Not managed (1:1 slave of another file)	*/
+  DB_FREELIST,	/* Fast free list maintained			        	*/
+
+} T_DB_TYPE;
+
+/* 
+    Database affected records (History log) 
+ */
+typedef struct
+{
+
+  USHORT entries;					            /* Number of affected entries	                */
+  USHORT field_id[DB_MAX_AFFECTED];	  /* Elementary file, e.g. EF_ADN               */
+  USHORT record[DB_MAX_AFFECTED];	    /* Corresponding record within elementary file*/
+
+} T_DB_CHANGED;
+
+/* 
+    Database Information 
+ */
+typedef struct
+{
+  BOOL clean;	  /* Database consistent					        */
+  BOOL tracked;	/* Tracked for external storage device	*/  	
+} T_DB_INFO;
+
+/* 
+    File Information 
+ */
+typedef struct
+{
+
+  BOOL        clean;			      /* Database consistent		*/
+  T_DB_TYPE   entry_type;	      /* Type of database field	*/
+  USHORT      record_size;      /* Record size				    */
+  USHORT      num_records;	    /* Number of records		  */
+  USHORT      used_records;	    /* Number of used records	*/
+
+} T_DB_INFO_FIELD;
+
+/* 
+    Search node
+    Note: This node is internal to DBM.
+ */
+typedef struct
+{
+
+  UBYTE top;
+  UBYTE bottom;
+
+} T_DB_SEARCH_NODE;
+
+/* 
+    Database return codes 
+ */ 
+typedef enum
+{
+
+  DB_OK					        =  0,	/* Execution of command completed         */
+  DB_FAIL				        = -1,	/* Execution of command failed within db  */
+  DB_FAIL_FS			      = -2,	/* Unexpected failure of FFS              */
+  DB_FULL				        = -3,	/* Database is full                       */
+  DB_INVALID_DB			    = -4,	/* Database handle not known              */
+  DB_INVALID_FIELD		  = -5,	/* Invalid index requested                */
+  DB_INVALID_RECORD		  = -6,	/* Invalid record requested               */
+  DB_INVALID_INDEX		  = -7,	/* Invalid index requested                */
+  DB_INVALID_SIZE		    = -8,	/* Invalid size given                     */
+  DB_EMPTY_RECORD		    = -9,	/* Attempted to read a free record		    */
+
+/* Architecture document need to be updated for following constants     */
+
+  DB_EXISTS				      = -10,/* Database already exists		            */
+  DB_FIELD_EXISTS		    = -11,/* Elementary file already exists         */ 
+  DB_HISTORY_FULL		    = -12,/* Change log full				                */
+  DB_NOT_INITIALISED    = -13,/* Database not initialised               */
+  DB_IN_USE             = -14,/* Database in use                        */
+  DB_RECORD_NOT_FOUND   = -15 /* Record not found                       */
+
+} T_DB_CODE;
+
+
+/* 
+   This function is used in db_create_index
+ */
+
+typedef int (*T_COMP_FUNC)( int db_handle, 
+                            USHORT field_id, 
+                            USHORT record_1, 
+                            USHORT record_2,
+                            ULONG  flags );
+
+/* 
+   This function is used for db_search
+ */
+
+typedef int (*T_SEARCH_FUNC)( ULONG Flags, 
+                              const UBYTE* Search_tag, 
+                              int db_handle, 
+                              USHORT field_id,
+                              USHORT record_num );
+
+/* 
+    Interface Functions 
+ */
+
+EXTERN void db_init ( void );
+
+EXTERN int db_create ( const char* directory,
+                       UBYTE       num_of_fields,
+                       BOOL        tracked );
+
+EXTERN int db_open ( const char* directory );
+
+EXTERN T_DB_CODE db_create_field ( int        db_handle, 
+                                   T_DB_TYPE  db_type, 
+                                   USHORT     field_id,
+                                   USHORT     record_size, 
+                                   USHORT     num_of_records );
+
+EXTERN int db_write_record ( int          db_handle, 
+                             USHORT       field_id, 
+                             USHORT       record_num, 
+                             USHORT       offset, 
+                             USHORT       length, 
+                             const UBYTE* buffer );
+
+/* 
+1) If ACI would like to use incremental sort, it needs to call
+   db_update_index at end of writing/deleting the record(s).
+   If the index does not exist, it would be created.
+ 
+   Note that ACI can call this function after every record or
+   after 'n' records (n>1) and DB would process it properly.
+ 
+2) If ACI would like to use quick sort, it can go for db_create_index
+   at any moment. 
+ 
+   db_create_index is compatible with db_update_index and vice versa.
+
+*/
+EXTERN T_DB_CODE db_create_index ( int          db_handle, 
+                                   USHORT       field_id, 
+                                   UBYTE        sort_index, 
+                                   T_COMP_FUNC  compare_function, 
+                                   ULONG        flags );
+
+#ifdef INSERTION_SORT
+EXTERN T_DB_CODE db_update_index ( int          db_handle, 
+                                   USHORT       field_id, 
+                                   UBYTE        sort_index, 
+                                   T_COMP_FUNC  compare_function, 
+                                   ULONG        flags );
+#endif /* INSERTION_SORT */
+
+EXTERN T_DB_CODE db_get_phy_from_idx ( int    db_handle, 
+                                       USHORT field_id, 
+                                       UBYTE  sort_index, 
+                                       USHORT order_num );
+
+EXTERN T_DB_CODE db_flush (int db_handle);
+
+EXTERN int db_read_record ( int     db_handle, 
+                            USHORT  field_id, 
+                            USHORT  record_num, 
+                            USHORT  offset, 
+                            USHORT  length, 
+                            UBYTE*  buffer );
+
+EXTERN T_DB_CODE db_read_change_log ( int           db_handle, 
+                                      T_DB_CHANGED* changed);
+
+EXTERN T_DB_CODE db_delete_record ( int    db_handle,
+                                    USHORT field_id, 
+                                    USHORT record_num );
+
+EXTERN T_DB_CODE db_info ( int        db_handle, 
+                           T_DB_INFO* db_info );
+
+EXTERN T_DB_CODE db_info_field ( int              db_handle,	
+                                 USHORT           field_id, 
+                                 T_DB_INFO_FIELD* info_field );
+
+EXTERN int db_find_free_record	( int    db_handle,
+                                  USHORT field_id );
+
+EXTERN T_DB_CODE db_field_changed ( int    db_handle, 
+                                    USHORT field_id,
+                                    BOOL*  changed );
+
+EXTERN T_DB_CODE db_record_empty ( int    db_handle,
+                                   USHORT field_id,
+                                   USHORT record_num,
+                                   BOOL*  empty );
+
+EXTERN int db_search ( int               db_handle, 
+                       USHORT            field_id, 
+                       UBYTE             sort_index, 
+                       UBYTE*            order_num,
+                       T_SEARCH_FUNC     search_function, 
+                       ULONG             flags, 
+                       const UBYTE*      search_tag );
+
+EXTERN int db_get_last_fs_error ( void );
+
+EXTERN T_DB_CODE db_close ( int db_handle );
+
+EXTERN void db_exit ( void );
+
+EXTERN T_DB_CODE db_remove_index	( int    db_handle,
+                                    USHORT field_id,
+                                    UBYTE  sort_index );
+
+EXTERN T_DB_CODE db_remove_field ( int    db_handle, 
+                                   USHORT field_id );
+
+EXTERN T_DB_CODE db_remove ( const char* directory );
+
+#endif