1 /*
2 * Copyright (c) 2016, Texas Instruments Incorporated
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33 \r
34 #ifndef _MSSLOC_H\r
35 #define _MSSLOC_H\r
36 \r
37 //#include <ti/mas/aer/mss.h>\r
38 \r
39 #include "../mss.h"\r
40 \r
41 /* MSS states */\r
42 enum {\r
43 MSS_CLOSED = 0,\r
44 MSS_OPEN = 1\r
45 };\r
46 \r
47 \r
48 #define MSS_STATE_BIT_SWITCH_SRC 0x0001\r
49 \r
50 #define MSS_FRAME_SIZE_8KHZ 80 /* samples */\r
51 #define MSS_NUM_SAMP_1MS_8KHZ 8 /* samples per msec at 8kHz */\r
52 #define MSS_FADE_PHA_INIT 0xC0000000 /* Q31 initial phase of crossfade:\r
53 -1/2 corresponding to -pi/2 */\r
54 \r
55 typedef struct mssParams_s {\r
56 tint switch_threshold;\r
57 tint switch_duration;\r
58 tint switch_hangover;\r
59 } mssParams_t;\r
60 \r
61 typedef struct mssInst_s {\r
62 tint state; /* MSS_CLOSED or MSS_OPEN */\r
63 void * handle; /* MSS instance handle */\r
64 \r
65 mssParams_t params;\r
66 mssSrc_t cur_src;\r
67 mssSrc_t new_src;\r
68 tword *svd;\r
69 \r
70 tint num_src_per_group[mss_MAX_NUM_SRC_TYPES];\r
71 tint modes_bf;\r
72 tint state_bf;\r
73 \r
74 LFract crossfade_phase;\r
75 LFract crossfade_phase_inc;\r
76 tint crossfade_cnt;\r
77 tint switch_hang_cnt;\r
78 tint svd_size;\r
79 tint max_sampling_rate;\r
80 tint sampling_rate;\r
81 tint frame_size;\r
82 tint num_mic_array;\r
83 \r
84 tint switch_src_cnt;\r
85 tuint ramp_up;\r
86 Fract ramp_alpha;\r
87 \r
88 /* for debugging only */\r
89 mssSrc_t temp_src; \r
90 Fract gain_in; \r
91 Fract gain_out; \r
92 } mssInst_t;\r
93 \r
94 /* MSS control bitfield macros */\r
95 #define mss_setbit(field,b) ( (field) |= ( b))\r
96 #define mss_clrbit(field,b) ( (field) &= (~(b)))\r
97 #define mss_chkbit(field,b) (((field) & ( b)) == (b))\r
98 \r
99 /* min, max macros */\r
100 #define mss_MAX(x,y) ( ((x) > (y)) ? (x) : (y) )\r
101 #define mss_MIN(x,y) ( ((x) < (y)) ? (x) : (y) )\r
102 \r
103 /* Size align to L2 power of 2: for L2=3 floor((x+7)/8)*8 */\r
104 #define mss_SIZE_ALIGN(x,L2) (((L2) < 1) ? (x) : (((x) + ( (1<<(L2)) - 1 )) & ((~0uL)<<(L2))))\r
105 \r
106 void mss_src_selection(mssInst_t *inst, void *mic_fix[], void *mic_rem[], \r
107 void *mic_cln[]);\r
108 void mss_src_output(mssInst_t *inst, void *out, void *mic_fix[], \r
109 void *mic_rem[], void *mic_cln[]);\r
110 tint mss_src_validation(mssInst_t *inst, void *rx_out_sync, void *mic_fix[],\r
111 void *mic_rem[], void *mic_cln[], void *mic_arr[], void *beam[]);\r
112 void * mss_get_first_src(mssInst_t *inst, void *mic_fix[], void *mic_rem[], \r
113 void *mic_cln[]);\r
114 \r
115 #endif\r
116 /* Nothing past this point */\r