1 /*
2  * Copyright (C) 2004-2010 NXP Software
3  * Copyright (C) 2010 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /****************************************************************************************/
19 /*                                                                                      */
20 /*  Header file defining the standard LifeVibes types for use in the application layer  */
21 /*  interface of all LifeVibes modules                                                  */
22 /*                                                                                      */
23 /****************************************************************************************/
24 
25 #ifndef LVM_TYPES_H
26 #define LVM_TYPES_H
27 
28 #include <stdint.h>
29 
30 /****************************************************************************************/
31 /*                                                                                      */
32 /*  definitions                                                                         */
33 /*                                                                                      */
34 /****************************************************************************************/
35 
36 #define LVM_NULL                0                   /* NULL pointer */
37 
38 #define LVM_TRUE                1                   /* Booleans */
39 #define LVM_FALSE               0
40 
41 #define LVM_MAXINT_8            127                 /* Maximum positive integer size */
42 #define LVM_MAXINT_16           32767
43 #define LVM_MAXINT_32           2147483647
44 #define LVM_MAXENUM             2147483647
45 
46 #define LVM_MODULEID_MASK       0xFF00              /* Mask to extract the calling module ID from callbackId */
47 #define LVM_EVENTID_MASK        0x00FF              /* Mask to extract the callback event from callbackId */
48 
49 /* Memory table*/
50 #define LVM_MEMREGION_PERSISTENT_SLOW_DATA      0   /* Offset to the instance memory region */
51 #define LVM_MEMREGION_PERSISTENT_FAST_DATA      1   /* Offset to the persistent data memory region */
52 #define LVM_MEMREGION_PERSISTENT_FAST_COEF      2   /* Offset to the persistent coefficient memory region */
53 #define LVM_MEMREGION_TEMPORARY_FAST            3   /* Offset to temporary memory region */
54 
55 #define LVM_NR_MEMORY_REGIONS                   4   /* Number of memory regions */
56 
57 /* Memory partition type */
58 #define LVM_MEM_PARTITION0      0                   /* 1st memory partition */
59 #define LVM_MEM_PARTITION1      1                   /* 2nd memory partition */
60 #define LVM_MEM_PARTITION2      2                   /* 3rd memory partition */
61 #define LVM_MEM_PARTITION3      3                   /* 4th memory partition */
62 
63 /* Use type */
64 #define LVM_MEM_PERSISTENT      0                   /* Persistent memory type */
65 #define LVM_MEM_SCRATCH         4                   /* Scratch  memory type */
66 
67 /* Access type */
68 #define LVM_MEM_INTERNAL        0                   /* Internal (fast) access memory */
69 #define LVM_MEM_EXTERNAL        8                   /* External (slow) access memory */
70 
71 /* Platform specific */
72 #define LVM_PERSISTENT          (LVM_MEM_PARTITION0+LVM_MEM_PERSISTENT+LVM_MEM_INTERNAL)
73 #define LVM_PERSISTENT_DATA     (LVM_MEM_PARTITION1+LVM_MEM_PERSISTENT+LVM_MEM_INTERNAL)
74 #define LVM_PERSISTENT_COEF     (LVM_MEM_PARTITION2+LVM_MEM_PERSISTENT+LVM_MEM_INTERNAL)
75 #define LVM_SCRATCH             (LVM_MEM_PARTITION3+LVM_MEM_SCRATCH+LVM_MEM_INTERNAL)
76 
77 /****************************************************************************************/
78 /*                                                                                      */
79 /*  Basic types                                                                         */
80 /*                                                                                      */
81 /****************************************************************************************/
82 
83 typedef     char                LVM_CHAR;           /* ASCII character */
84 
85 typedef     int8_t              LVM_INT8;           /* Signed 8-bit word */
86 typedef     uint8_t             LVM_UINT8;          /* Unsigned 8-bit word */
87 
88 typedef     int16_t             LVM_INT16;          /* Signed 16-bit word */
89 typedef     uint16_t            LVM_UINT16;         /* Unsigned 16-bit word */
90 
91 typedef     int32_t             LVM_INT32;          /* Signed 32-bit word */
92 typedef     uint32_t            LVM_UINT32;         /* Unsigned 32-bit word */
93 typedef     int64_t             LVM_INT64;          /* Signed 64-bit word */
94 
95 #define LVM_MAXFLOAT            1.f
96 
97 typedef     float               LVM_FLOAT;          /* single precision floating point */
98 
99 // Select whether we expose int16_t or float buffers.
100 
101 #define    EFFECT_BUFFER_FORMAT AUDIO_FORMAT_PCM_FLOAT
102 typedef     float               effect_buffer_t;
103 
104 
105 #ifdef SUPPORT_MC
106 #define LVM_MAX_CHANNELS 8 // FCC_8
107 #else
108 #define LVM_MAX_CHANNELS 2 // FCC_2
109 #endif
110 
111 /****************************************************************************************/
112 /*                                                                                      */
113 /*  Standard Enumerated types                                                           */
114 /*                                                                                      */
115 /****************************************************************************************/
116 
117 /* Operating mode */
118 typedef enum
119 {
120     LVM_MODE_OFF    = 0,
121     LVM_MODE_ON     = 1,
122     LVM_MODE_DUMMY  = LVM_MAXENUM
123 } LVM_Mode_en;
124 
125 /* Format */
126 typedef enum
127 {
128     LVM_STEREO          = 0,
129     LVM_MONOINSTEREO    = 1,
130     LVM_MONO            = 2,
131 #ifdef SUPPORT_MC
132     LVM_MULTICHANNEL    = 3,
133 #endif
134     LVM_SOURCE_DUMMY    = LVM_MAXENUM
135 } LVM_Format_en;
136 
137 /* LVM sampling rates */
138 typedef enum
139 {
140     LVM_FS_8000  = 0,
141     LVM_FS_11025 = 1,
142     LVM_FS_12000 = 2,
143     LVM_FS_16000 = 3,
144     LVM_FS_22050 = 4,
145     LVM_FS_24000 = 5,
146     LVM_FS_32000 = 6,
147     LVM_FS_44100 = 7,
148     LVM_FS_48000 = 8,
149     LVM_FS_88200 = 9,
150     LVM_FS_96000 = 10,
151     LVM_FS_176400 = 11,
152     LVM_FS_192000 = 12,
153     LVM_FS_INVALID = LVM_MAXENUM-1,
154     LVM_FS_DUMMY = LVM_MAXENUM
155 } LVM_Fs_en;
156 
157 /* Memory Types */
158 typedef enum
159 {
160     LVM_PERSISTENT_SLOW_DATA    = LVM_MEMREGION_PERSISTENT_SLOW_DATA,
161     LVM_PERSISTENT_FAST_DATA    = LVM_MEMREGION_PERSISTENT_FAST_DATA,
162     LVM_PERSISTENT_FAST_COEF    = LVM_MEMREGION_PERSISTENT_FAST_COEF,
163     LVM_TEMPORARY_FAST          = LVM_MEMREGION_TEMPORARY_FAST,
164     LVM_MEMORYTYPE_DUMMY        = LVM_MAXENUM
165 } LVM_MemoryTypes_en;
166 
167 /* Memory region definition */
168 typedef struct
169 {
170     LVM_UINT32                  Size;                   /* Region size in bytes */
171     LVM_MemoryTypes_en          Type;                   /* Region type */
172     void                        *pBaseAddress;          /* Pointer to the region base address */
173 } LVM_MemoryRegion_st;
174 
175 /* Memory table containing the region definitions */
176 typedef struct
177 {
178     LVM_MemoryRegion_st         Region[LVM_NR_MEMORY_REGIONS];  /* One definition for each region */
179 } LVM_MemoryTable_st;
180 
181 /****************************************************************************************/
182 /*                                                                                      */
183 /*  Standard Function Prototypes                                                        */
184 /*                                                                                      */
185 /****************************************************************************************/
186 typedef LVM_INT32 (*LVM_Callback)(void          *pCallbackData,     /* Pointer to the callback data structure */
187                                   void          *pGeneralPurpose,   /* General purpose pointer (e.g. to a data structure needed in the callback) */
188                                   LVM_INT16     GeneralPurpose );   /* General purpose variable (e.g. to be used as callback ID) */
189 
190 /****************************************************************************************/
191 /*                                                                                      */
192 /*  End of file                                                                         */
193 /*                                                                                      */
194 /****************************************************************************************/
195 
196 #endif  /* LVM_TYPES_H */
197