~ubuntu-branches/ubuntu/quantal/zaptel/quantal

« back to all changes in this revision

Viewing changes to kernel/oct612x/octdeviceapi/oct6100api/oct6100_api/oct6100_tlv.c

  • Committer: Bazaar Package Importer
  • Author(s): Tzafrir Cohen
  • Date: 2008-08-28 22:58:23 UTC
  • mfrom: (11.1.11 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080828225823-r8bdunirm8hmc76m
Tags: 1:1.4.11~dfsg-2
* Patch xpp_fxs_power: Fixed an issue with hook detection of the Astribank
  FXS module.
* Don't fail init.d script if fxotune fails. This may happen if running it
  when Asterisk is already running.
* Bump standards version to 3.8.0.0 .
* Ignore false lintian warning ("m-a a-i" has "a a").
* Patch xpp_fxo_cid_always: do always pass PCM if that's what the user
  asked.
* Patch vzaphfc_proc_root_dir: fix vzaphfc on 2.6.26.
* Patch wcte12xp_flags: Proper time for irq save flags.
* Patch headers_2627: Fix location of semaphore.h for 2.6.27 .
* Patch xpp_fxs_dtmf_leak: Don't play DTMFs to the wrong channel.
* Patch wctdm_fix_alarm: Fix sending channel alarms.
* Patch device_class_2626: Fix building 2.6.26 (Closes: #493397).
* Using dh_lintian for lintian overrides, hence requiring debhelper 6.0.7.
* Lintian: we know we have direct changes. Too bad we're half-upstream :-(
* Fix doc-base section names. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
 
2
 
 
3
File: oct6100_tlv.c
 
4
 
 
5
    Copyright (c) 2001-2007 Octasic Inc.
 
6
    
 
7
Description: 
 
8
 
 
9
        This file contains the functions used to read information allowing the 
 
10
        API to know where all the features supported by this API version are 
 
11
        located in the chip's external memory.
 
12
 
 
13
This file is part of the Octasic OCT6100 GPL API . The OCT6100 GPL API  is 
 
14
free software; you can redistribute it and/or modify it under the terms of 
 
15
the GNU General Public License as published by the Free Software Foundation; 
 
16
either version 2 of the License, or (at your option) any later version.
 
17
 
 
18
The OCT6100 GPL API is distributed in the hope that it will be useful, but 
 
19
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 
20
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
 
21
for more details. 
 
22
 
 
23
You should have received a copy of the GNU General Public License 
 
24
along with the OCT6100 GPL API; if not, write to the Free Software 
 
25
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 
26
 
 
27
$Octasic_Release: OCT612xAPI-01.00-PR49 $
 
28
 
 
29
$Octasic_Revision: 113 $
 
30
 
 
31
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
 
32
 
 
33
 
 
34
/*****************************  INCLUDE FILES  *******************************/
 
35
 
 
36
#include "octdef.h"
 
37
 
 
38
#include "oct6100api/oct6100_defines.h"
 
39
#include "oct6100api/oct6100_errors.h"
 
40
 
 
41
#include "oct6100api/oct6100_apiud.h"
 
42
#include "oct6100api/oct6100_tlv_inst.h"
 
43
#include "oct6100api/oct6100_chip_open_inst.h"
 
44
#include "oct6100api/oct6100_chip_stats_inst.h"
 
45
#include "oct6100api/oct6100_interrupts_inst.h"
 
46
#include "oct6100api/oct6100_remote_debug_inst.h"
 
47
#include "oct6100api/oct6100_debug_inst.h"
 
48
#include "oct6100api/oct6100_api_inst.h"
 
49
 
 
50
#include "oct6100api/oct6100_interrupts_pub.h"
 
51
 
 
52
#include "oct6100api/oct6100_channel_pub.h"
 
53
#include "oct6100api/oct6100_chip_open_pub.h"
 
54
 
 
55
#include "oct6100_chip_open_priv.h"
 
56
#include "oct6100_miscellaneous_priv.h"
 
57
#include "oct6100_tlv_priv.h"
 
58
 
 
59
/****************************  PRIVATE FUNCTIONS  ****************************/
 
60
 
 
61
 
 
62
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
 
63
 
 
64
Function:               Oct6100ApiProcessTlvRegion
 
65
 
 
66
Description:    This function will read and interpret the TLV memory of the     chip
 
67
                                to obtain memory offsets and features available of the image
 
68
                                loaded into the chip.
 
69
 
 
70
                                The API will read this region until it finds a TLV type of 0 with 
 
71
                                a length of 0.
 
72
 
 
73
-------------------------------------------------------------------------------
 
74
|       Argument                |       Description
 
75
-------------------------------------------------------------------------------
 
76
f_pApiInstance                  Pointer to API instance. This memory is used to keep
 
77
                                                the present state of the chip and all its resources.
 
78
 
 
79
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
 
80
#if !SKIP_Oct6100ApiProcessTlvRegion
 
81
UINT32 Oct6100ApiProcessTlvRegion(
 
82
                                tPOCT6100_INSTANCE_API                  f_pApiInstance )
 
83
{
 
84
        tOCT6100_READ_PARAMS    ReadParams;
 
85
        UINT16  usReadData;
 
86
        UINT32  ulResult;
 
87
 
 
88
        UINT32  ulTlvTypeField;
 
89
        UINT32  ulTlvLengthField;
 
90
        UINT32  ulTlvWritingTimeoutCount = 0;
 
91
        UINT32  ulConditionFlag = TRUE;
 
92
 
 
93
        ReadParams.pProcessContext = f_pApiInstance->pProcessContext;
 
94
 
 
95
        ReadParams.ulUserChipId = f_pApiInstance->pSharedInfo->ChipConfig.ulUserChipId;
 
96
        ReadParams.pusReadData = &usReadData;
 
97
 
 
98
        /* Set the address of the first TLV type. */
 
99
        ReadParams.ulReadAddress  = cOCT6100_TLV_BASE;
 
100
        ReadParams.ulReadAddress += 2;
 
101
 
 
102
        /* Wait for the TLV configuration to be configured in memory. */
 
103
        while ( ulConditionFlag )
 
104
        {
 
105
                /* Read the TLV write done flag. */
 
106
                mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
107
                if ( ulResult != cOCT6100_ERR_OK )
 
108
                        return ulResult;
 
109
 
 
110
                if ( usReadData & 0x1 ) 
 
111
                        break;
 
112
 
 
113
                ulTlvWritingTimeoutCount++;
 
114
                if ( ulTlvWritingTimeoutCount == 0x100000 )
 
115
                        return cOCT6100_ERR_TLV_TIMEOUT;
 
116
        }
 
117
 
 
118
        /*======================================================================*/
 
119
        /* Read the first 16 bits of the TLV type. */
 
120
 
 
121
        ReadParams.ulReadAddress += 2;
 
122
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
123
        if ( ulResult != cOCT6100_ERR_OK )
 
124
                return ulResult;
 
125
        
 
126
        /* Save data. */
 
127
        ulTlvTypeField = usReadData << 16;
 
128
 
 
129
        /* Read the last word of the TLV type. */
 
130
        ReadParams.ulReadAddress += 2;
 
131
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
132
        if ( ulResult != cOCT6100_ERR_OK )
 
133
                return ulResult;
 
134
 
 
135
        /* Save data. */
 
136
        ulTlvTypeField |= usReadData;
 
137
                
 
138
        /*======================================================================*/
 
139
        
 
140
 
 
141
        /*======================================================================*/
 
142
        /* Now, read the TLV field length. */
 
143
 
 
144
        ReadParams.ulReadAddress += 2;
 
145
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
146
        if ( ulResult != cOCT6100_ERR_OK )
 
147
                return ulResult;
 
148
        
 
149
        /* Save data. */
 
150
        ulTlvLengthField = usReadData << 16;
 
151
 
 
152
        /* Read the last word of the TLV length. */
 
153
        ReadParams.ulReadAddress += 2;
 
154
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
155
        if ( ulResult != cOCT6100_ERR_OK )
 
156
                return ulResult;
 
157
 
 
158
        /* Save data. */
 
159
        ulTlvLengthField |= usReadData;
 
160
 
 
161
        /* Modify the address to point at the TLV value field. */
 
162
        ReadParams.ulReadAddress += 2;
 
163
                
 
164
        /*======================================================================*/
 
165
 
 
166
        /* Read the TLV value until the end of TLV region is reached. */
 
167
        while( !((ulTlvTypeField == 0) && (ulTlvLengthField == 0)) )
 
168
        {
 
169
                ulResult = Oct6100ApiInterpretTlvEntry( f_pApiInstance, 
 
170
                                                                                            ulTlvTypeField, 
 
171
                                                                                    ulTlvLengthField,
 
172
                                                                                                ReadParams.ulReadAddress );
 
173
                if ( ulResult != cOCT6100_ERR_OK )
 
174
                        return ulResult;
 
175
 
 
176
                /* Set the address to after the TLV value. */
 
177
                ReadParams.ulReadAddress += ulTlvLengthField;
 
178
 
 
179
                /*======================================================================*/
 
180
                /* Read the first 16 bits of the TLV type. */
 
181
 
 
182
                mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
183
                if ( ulResult != cOCT6100_ERR_OK )
 
184
                        return ulResult;
 
185
                
 
186
                /* Save data. */
 
187
                ulTlvTypeField = usReadData << 16;
 
188
 
 
189
                /* Read the last word of the TLV type. */
 
190
                ReadParams.ulReadAddress += 2;
 
191
                mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
192
                if ( ulResult != cOCT6100_ERR_OK )
 
193
                        return ulResult;
 
194
 
 
195
                /* Save data. */
 
196
                ulTlvTypeField |= usReadData;
 
197
                        
 
198
                /*======================================================================*/
 
199
 
 
200
                
 
201
                /*======================================================================*/
 
202
                /* Now, read the TLV field length. */
 
203
 
 
204
                ReadParams.ulReadAddress += 2;
 
205
                mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
206
                if ( ulResult != cOCT6100_ERR_OK )
 
207
                        return ulResult;
 
208
                
 
209
                /* Save data. */
 
210
                ulTlvLengthField = usReadData << 16;
 
211
 
 
212
                /* Read the last word of the TLV length. */
 
213
                ReadParams.ulReadAddress += 2;
 
214
                mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
215
                if ( ulResult != cOCT6100_ERR_OK )
 
216
                        return ulResult;
 
217
 
 
218
                /* Save data. */
 
219
                ulTlvLengthField |= usReadData;
 
220
 
 
221
                ReadParams.ulReadAddress += 2;
 
222
 
 
223
                /*======================================================================*/
 
224
        }
 
225
 
 
226
        return cOCT6100_ERR_OK;
 
227
}
 
228
#endif
 
229
 
 
230
 
 
231
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
 
232
 
 
233
Function:               Oct6100ApiInterpretTlvEntry
 
234
 
 
235
Description:    This function will interpret a TLV entry from the chip.  All
 
236
                                known TLV types by the API are exhaustively listed here.
 
237
 
 
238
-------------------------------------------------------------------------------
 
239
|       Argument                |       Description
 
240
-------------------------------------------------------------------------------
 
241
f_pApiInstance                  Pointer to API instance. This memory is used to keep
 
242
                                                the present state of the chip and all its resources.
 
243
 
 
244
f_ulTlvFieldType                Type of the TLV field to interpret.
 
245
f_ulTlvFieldLength              Byte length of the TLV field.
 
246
f_ulTlvValueAddress             Address where the data of the TLV block starts.
 
247
 
 
248
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
 
249
#if !SKIP_Oct6100ApiInterpretTlvEntry
 
250
UINT32 Oct6100ApiInterpretTlvEntry(
 
251
                                IN OUT  tPOCT6100_INSTANCE_API                  f_pApiInstance,
 
252
                                IN              UINT32                                                  f_ulTlvFieldType,
 
253
                                IN              UINT32                                                  f_ulTlvFieldLength,
 
254
                                IN              UINT32                                                  f_ulTlvValueAddress )
 
255
{
 
256
        tOCT6100_READ_PARAMS    ReadParams;
 
257
        UINT32  ulResult = cOCT6100_ERR_OK;
 
258
        UINT16  usReadData;
 
259
        UINT32  i;
 
260
        UINT32  ulTempValue = 0;
 
261
 
 
262
        ReadParams.pProcessContext = f_pApiInstance->pProcessContext;
 
263
 
 
264
        ReadParams.ulUserChipId = f_pApiInstance->pSharedInfo->ChipConfig.ulUserChipId;
 
265
        ReadParams.pusReadData = &usReadData;
 
266
 
 
267
        /* Find out how to interpret the TLV value according to the TLV type. */
 
268
        switch( f_ulTlvFieldType )
 
269
        {
 
270
        case cOCT6100_TLV_TYPE_VERSION_NUMBER:
 
271
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
272
                                                                                                  cOCT6100_TLV_MIN_LENGTH_VERSION_NUMBER, 
 
273
                                                                                                  cOCT6100_TLV_MAX_LENGTH_VERSION_NUMBER );
 
274
                if ( ulResult == cOCT6100_ERR_OK )
 
275
                {
 
276
                        ReadParams.ulReadAddress = f_ulTlvValueAddress;
 
277
 
 
278
                        for( i = 0; i < (f_ulTlvFieldLength/2); i++ )
 
279
                        {
 
280
                                /* Perform the actual read. */
 
281
                                mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
282
                                if ( ulResult != cOCT6100_ERR_OK )
 
283
                                        return ulResult;
 
284
 
 
285
                                f_pApiInstance->pSharedInfo->ImageInfo.szVersionNumber[ (i * 2) ] = (UINT8)((usReadData >> 8) & 0xFF);
 
286
                                f_pApiInstance->pSharedInfo->ImageInfo.szVersionNumber[ (i * 2) + 1 ] = (UINT8)((usReadData >> 0) & 0xFF);
 
287
 
 
288
                                /* Modify the address. */
 
289
                                ReadParams.ulReadAddress += 2;
 
290
                        }
 
291
                }
 
292
                break;
 
293
 
 
294
        case cOCT6100_TLV_TYPE_CUSTOMER_PROJECT_ID:
 
295
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
296
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CUSTOMER_PROJECT_ID, 
 
297
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CUSTOMER_PROJECT_ID );
 
298
                if ( ulResult == cOCT6100_ERR_OK )
 
299
                {
 
300
                        /* Perform the actual read. */
 
301
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
302
                                                                                           f_ulTlvValueAddress, 
 
303
                                                                                           &f_pApiInstance->pSharedInfo->ImageInfo.ulBuildId );
 
304
                        if ( ulResult != cOCT6100_ERR_OK )
 
305
                                return ulResult;
 
306
                }
 
307
                break;
 
308
 
 
309
        case cOCT6100_TLV_TYPE_CH0_MAIN_BASE_ADDRESS:
 
310
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
311
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH0_MAIN_BASE_ADDRESS, 
 
312
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH0_MAIN_BASE_ADDRESS );
 
313
                if ( ulResult == cOCT6100_ERR_OK )
 
314
                {
 
315
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
316
                                                                                           f_ulTlvValueAddress, 
 
317
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemBase );
 
318
                        if ( ulResult != cOCT6100_ERR_OK )
 
319
                                return ulResult;
 
320
 
 
321
                        f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemBase &= 0x0FFFFFFF;                 
 
322
 
 
323
                        /* Modify the base address to incorporate the external memory offset. */
 
324
                        f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemBase += cOCT6100_EXTERNAL_MEM_BASE_ADDRESS;
 
325
                }
 
326
                break;
 
327
 
 
328
        case cOCT6100_TLV_TYPE_CH_MAIN_SIZE:
 
329
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
330
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_SIZE, 
 
331
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_SIZE );
 
332
                if ( ulResult == cOCT6100_ERR_OK )
 
333
                {
 
334
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
335
                                                                                           f_ulTlvValueAddress, 
 
336
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemSize );
 
337
                        if ( ulResult != cOCT6100_ERR_OK )
 
338
                                return ulResult;
 
339
                }
 
340
                break;
 
341
 
 
342
        case cOCT6100_TLV_TYPE_CH_MAIN_IO_OFFSET:
 
343
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
344
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_IO_OFFSET, 
 
345
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_IO_OFFSET );
 
346
                if ( ulResult == cOCT6100_ERR_OK )
 
347
                {
 
348
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
349
                                                                                           f_ulTlvValueAddress, 
 
350
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainIoMemOfst );
 
351
                        if ( ulResult != cOCT6100_ERR_OK )
 
352
                                return ulResult;
 
353
                }
 
354
                break;
 
355
 
 
356
        case cOCT6100_TLV_TYPE_CH_MAIN_ZCB_OFFSET:
 
357
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
358
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_ZCB_OFFSET, 
 
359
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_ZCB_OFFSET );
 
360
                if ( ulResult == cOCT6100_ERR_OK )
 
361
                {
 
362
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
363
                                                                                           f_ulTlvValueAddress, 
 
364
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinCBMemOfst );
 
365
                        if ( ulResult != cOCT6100_ERR_OK )
 
366
                                return ulResult;
 
367
                }
 
368
                break;
 
369
 
 
370
        case cOCT6100_TLV_TYPE_CH_MAIN_ZCB_SIZE:
 
371
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
372
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_ZCB_SIZE, 
 
373
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_ZCB_SIZE );
 
374
                if ( ulResult == cOCT6100_ERR_OK )
 
375
                {
 
376
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
377
                                                                                           f_ulTlvValueAddress, 
 
378
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinCBMemSize );
 
379
                        if ( ulResult != cOCT6100_ERR_OK )
 
380
                                return ulResult;
 
381
                }
 
382
                break;
 
383
 
 
384
        case cOCT6100_TLV_TYPE_CH_MAIN_XCB_OFFSET:
 
385
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
386
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_XCB_OFFSET, 
 
387
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_XCB_OFFSET );
 
388
                if ( ulResult == cOCT6100_ERR_OK )
 
389
                {
 
390
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
391
                                                                                           f_ulTlvValueAddress, 
 
392
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSinCBMemOfst );
 
393
                        if ( ulResult != cOCT6100_ERR_OK )
 
394
                                return ulResult;
 
395
                }
 
396
                break;
 
397
 
 
398
        case cOCT6100_TLV_TYPE_CH_MAIN_XCB_SIZE:
 
399
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
400
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_XCB_SIZE, 
 
401
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_XCB_SIZE );
 
402
                if ( ulResult == cOCT6100_ERR_OK )
 
403
                {
 
404
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
405
                                                                                           f_ulTlvValueAddress, 
 
406
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSinCBMemSize );
 
407
                        if ( ulResult != cOCT6100_ERR_OK )
 
408
                                return ulResult;
 
409
                }
 
410
                break;
 
411
 
 
412
        case cOCT6100_TLV_TYPE_CH_MAIN_YCB_OFFSET:
 
413
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
414
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_YCB_OFFSET, 
 
415
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_YCB_OFFSET );
 
416
                if ( ulResult == cOCT6100_ERR_OK )
 
417
                {
 
418
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
419
                                                                                           f_ulTlvValueAddress, 
 
420
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutCBMemOfst );
 
421
                        if ( ulResult != cOCT6100_ERR_OK )
 
422
                                return ulResult;
 
423
                }
 
424
                break;
 
425
 
 
426
        case cOCT6100_TLV_TYPE_CH_MAIN_YCB_SIZE:
 
427
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
428
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_MAIN_YCB_SIZE, 
 
429
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_MAIN_YCB_SIZE );
 
430
                if ( ulResult == cOCT6100_ERR_OK )
 
431
                {
 
432
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
433
                                                                                           f_ulTlvValueAddress, 
 
434
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutCBMemSize );
 
435
                        if ( ulResult != cOCT6100_ERR_OK )
 
436
                                return ulResult;
 
437
                }
 
438
                break;
 
439
 
 
440
        case cOCT6100_TLV_TYPE_FREE_MEM_BASE_ADDRESS:
 
441
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
442
                                                                                                  cOCT6100_TLV_MIN_LENGTH_FREE_MEM_BASE_ADDRESS, 
 
443
                                                                                                  cOCT6100_TLV_MAX_LENGTH_FREE_MEM_BASE_ADDRESS );
 
444
                if ( ulResult == cOCT6100_ERR_OK )
 
445
                {
 
446
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
447
                                                                                           f_ulTlvValueAddress, 
 
448
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulFreeMemBaseAddress );
 
449
                        if ( ulResult != cOCT6100_ERR_OK )
 
450
                                return ulResult;
 
451
 
 
452
                        f_pApiInstance->pSharedInfo->MemoryMap.ulFreeMemBaseAddress &= 0x0FFFFFFF;
 
453
 
 
454
                }
 
455
                break;
 
456
 
 
457
        case cOCT6100_TLV_TYPE_CHAN_MAIN_IO_STATS_OFFSET:
 
458
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
459
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CHAN_MAIN_IO_STATS_OFFSET, 
 
460
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CHAN_MAIN_IO_STATS_OFFSET );
 
461
                if ( ulResult == cOCT6100_ERR_OK )
 
462
                {
 
463
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
464
                                                                                           f_ulTlvValueAddress, 
 
465
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainIoStatsOfst );
 
466
                        if ( ulResult != cOCT6100_ERR_OK )
 
467
                                return ulResult;
 
468
                }
 
469
                break;
 
470
 
 
471
        case cOCT6100_TLV_TYPE_CHAN_MAIN_IO_STATS_SIZE:
 
472
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
473
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CHAN_MAIN_IO_STATS_OFFSET, 
 
474
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CHAN_MAIN_IO_STATS_OFFSET );
 
475
                if ( ulResult == cOCT6100_ERR_OK )
 
476
                {
 
477
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
478
                                                                                           f_ulTlvValueAddress, 
 
479
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainIoStatsSize );
 
480
                        if ( ulResult != cOCT6100_ERR_OK )
 
481
                                return ulResult;
 
482
                }
 
483
                break;
 
484
 
 
485
        case cOCT6100_TLV_TYPE_CH_ROOT_CONF_OFFSET:
 
486
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
487
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CH_ROOT_CONF_OFFSET, 
 
488
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CH_ROOT_CONF_OFFSET );
 
489
                if ( ulResult == cOCT6100_ERR_OK )
 
490
                {
 
491
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
492
                                                                                           f_ulTlvValueAddress, 
 
493
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanRootConfOfst );
 
494
                        if ( ulResult != cOCT6100_ERR_OK )
 
495
                                return ulResult;
 
496
                }
 
497
                break;
 
498
 
 
499
        
 
500
        case cOCT6100_TLV_TYPE_POA_CH_MAIN_ZPO_OFFSET:
 
501
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
502
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_CH_MAIN_ZPO_OFFSET, 
 
503
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_CH_MAIN_ZPO_OFFSET );
 
504
                if ( ulResult == cOCT6100_ERR_OK )
 
505
                {
 
506
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
507
                                                                                           f_ulTlvValueAddress, 
 
508
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinPlayoutMemOfst );
 
509
                        if ( ulResult != cOCT6100_ERR_OK )
 
510
                                return ulResult;
 
511
                }
 
512
                break;
 
513
 
 
514
        case cOCT6100_TLV_TYPE_POA_CH_MAIN_ZPO_SIZE:
 
515
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
516
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_CH_MAIN_ZPO_SIZE, 
 
517
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_CH_MAIN_ZPO_SIZE );
 
518
                if ( ulResult == cOCT6100_ERR_OK )
 
519
                {
 
520
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
521
                                                                                           f_ulTlvValueAddress, 
 
522
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinPlayoutMemSize );
 
523
                        if ( ulResult != cOCT6100_ERR_OK )
 
524
                                return ulResult;
 
525
                }
 
526
                break;
 
527
 
 
528
        case cOCT6100_TLV_TYPE_POA_CH_MAIN_YPO_OFFSET:
 
529
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
530
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_CH_MAIN_YPO_OFFSET, 
 
531
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_CH_MAIN_YPO_OFFSET );
 
532
                if ( ulResult == cOCT6100_ERR_OK )
 
533
                {
 
534
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
535
                                                                                           f_ulTlvValueAddress, 
 
536
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutPlayoutMemOfst );
 
537
                }
 
538
                break;
 
539
 
 
540
        case cOCT6100_TLV_TYPE_POA_CH_MAIN_YPO_SIZE:
 
541
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
542
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_CH_MAIN_YPO_SIZE, 
 
543
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_CH_MAIN_YPO_SIZE );
 
544
                if ( ulResult == cOCT6100_ERR_OK )
 
545
                {
 
546
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
547
                                                                                           f_ulTlvValueAddress, 
 
548
                                                                                           &f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutPlayoutMemSize );
 
549
                }
 
550
                break;
 
551
 
 
552
        case cOCT6100_TLV_TYPE_POA_BOFF_RW_ZWP:
 
553
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
554
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RW_ZWP, 
 
555
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RW_ZWP );
 
556
                if ( ulResult == cOCT6100_ERR_OK )
 
557
                {
 
558
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
559
                                                                                                                 f_ulTlvValueAddress, 
 
560
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinWritePtrOfst );
 
561
                }
 
562
                break;
 
563
 
 
564
        case cOCT6100_TLV_TYPE_POA_BOFF_RW_ZIS:
 
565
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
566
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RW_ZIS, 
 
567
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RW_ZIS );
 
568
                if ( ulResult == cOCT6100_ERR_OK )
 
569
                {
 
570
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
571
                                                                                                                 f_ulTlvValueAddress, 
 
572
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinIgnoreSkipCleanOfst );
 
573
                }
 
574
                break;
 
575
 
 
576
        case cOCT6100_TLV_TYPE_POA_BOFF_RW_ZSP:
 
577
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
578
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RW_ZSP, 
 
579
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RW_ZSP );
 
580
                if ( ulResult == cOCT6100_ERR_OK )
 
581
                {
 
582
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
583
                                                                                                                 f_ulTlvValueAddress, 
 
584
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinSkipPtrOfst );
 
585
                }
 
586
                break;
 
587
 
 
588
        case cOCT6100_TLV_TYPE_POA_BOFF_RW_YWP:
 
589
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
590
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RW_YWP, 
 
591
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RW_YWP );
 
592
                if ( ulResult == cOCT6100_ERR_OK )
 
593
                {
 
594
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
595
                                                                                                                 f_ulTlvValueAddress, 
 
596
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutWritePtrOfst );
 
597
                }
 
598
                break;
 
599
 
 
600
        case cOCT6100_TLV_TYPE_POA_BOFF_RW_YIS:
 
601
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
602
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RW_YIS, 
 
603
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RW_YIS );
 
604
                if ( ulResult == cOCT6100_ERR_OK )
 
605
                {
 
606
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
607
                                                                                                                 f_ulTlvValueAddress, 
 
608
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutIgnoreSkipCleanOfst );
 
609
                }
 
610
                break;
 
611
 
 
612
        case cOCT6100_TLV_TYPE_POA_BOFF_RW_YSP:
 
613
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
614
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RW_YSP, 
 
615
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RW_YSP );
 
616
                if ( ulResult == cOCT6100_ERR_OK )
 
617
                {
 
618
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
619
                                                                                                                 f_ulTlvValueAddress, 
 
620
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutSkipPtrOfst );
 
621
                }
 
622
                break;
 
623
 
 
624
        case cOCT6100_TLV_TYPE_POA_BOFF_RO_ZRP:
 
625
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
626
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RO_ZRP, 
 
627
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RO_ZRP );
 
628
                if ( ulResult == cOCT6100_ERR_OK )
 
629
                {
 
630
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
631
                                                                                                                 f_ulTlvValueAddress, 
 
632
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinReadPtrOfst );
 
633
                }
 
634
                break;
 
635
 
 
636
        case cOCT6100_TLV_TYPE_POA_BOFF_RO_YRP:
 
637
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
638
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POA_BOFF_RO_YRP, 
 
639
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POA_BOFF_RO_YRP );
 
640
                if ( ulResult == cOCT6100_ERR_OK )
 
641
                {
 
642
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
643
                                                                                                                 f_ulTlvValueAddress, 
 
644
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutReadPtrOfst );
 
645
                }
 
646
                break;
 
647
 
 
648
        case cOCT6100_TLV_TYPE_CNR_CONF_BOFF_RW_ENABLE:
 
649
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
650
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CNR_CONF_BOFF_RW_ENABLE, 
 
651
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CNR_CONF_BOFF_RW_ENABLE );
 
652
                if ( ulResult == cOCT6100_ERR_OK )
 
653
                {
 
654
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
655
                                                                                                                 f_ulTlvValueAddress, 
 
656
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.ConferencingNoiseReductionOfst );
 
657
                }
 
658
                break;
 
659
 
 
660
        case cOCT6100_TLV_TYPE_ANR_CONF_BOFF_RW_ENABLE:
 
661
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
662
                                                                                                  cOCT6100_TLV_MIN_LENGTH_ANR_CONF_BOFF_RW_ENABLE, 
 
663
                                                                                                  cOCT6100_TLV_MAX_LENGTH_ANR_CONF_BOFF_RW_ENABLE );
 
664
                if ( ulResult == cOCT6100_ERR_OK )
 
665
                {
 
666
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
667
                                                                                                                 f_ulTlvValueAddress, 
 
668
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AdaptiveNoiseReductionOfst );
 
669
                }
 
670
                break;
 
671
 
 
672
        case cOCT6100_TLV_TYPE_HZ_CONF_BOFF_RW_ENABLE:
 
673
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
674
                                                                                                  cOCT6100_TLV_MIN_LENGTH_HZ_CONF_BOFF_RW_ENABLE, 
 
675
                                                                                                  cOCT6100_TLV_MAX_LENGTH_HZ_CONF_BOFF_RW_ENABLE );
 
676
                if ( ulResult == cOCT6100_ERR_OK )
 
677
                {
 
678
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
679
                                                                                                                 f_ulTlvValueAddress, 
 
680
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinDcOffsetRemovalOfst );
 
681
                }
 
682
                /* Set flag indicating that the feature is present.*/
 
683
                f_pApiInstance->pSharedInfo->ImageInfo.fRinDcOffsetRemoval = TRUE;
 
684
                break;
 
685
 
 
686
        case cOCT6100_TLV_TYPE_HX_CONF_BOFF_RW_ENABLE:
 
687
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
688
                                                                                                  cOCT6100_TLV_MIN_LENGTH_HX_CONF_BOFF_RW_ENABLE, 
 
689
                                                                                                  cOCT6100_TLV_MAX_LENGTH_HX_CONF_BOFF_RW_ENABLE );
 
690
                if ( ulResult == cOCT6100_ERR_OK )
 
691
                {
 
692
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
693
                                                                                                                 f_ulTlvValueAddress, 
 
694
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.SinDcOffsetRemovalOfst );
 
695
                }
 
696
                /* Set flag indicating that the feature is present.*/
 
697
                f_pApiInstance->pSharedInfo->ImageInfo.fSinDcOffsetRemoval = TRUE;
 
698
                break;
 
699
 
 
700
        case cOCT6100_TLV_TYPE_LCA_Z_CONF_BOFF_RW_GAIN:
 
701
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
702
                                                                                                  cOCT6100_TLV_MIN_LENGTH_LCA_Z_CONF_BOFF_RW_GAIN, 
 
703
                                                                                                  cOCT6100_TLV_MAX_LENGTH_LCA_Z_CONF_BOFF_RW_GAIN );
 
704
                if ( ulResult == cOCT6100_ERR_OK )
 
705
                {
 
706
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
707
                                                                                                                 f_ulTlvValueAddress, 
 
708
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinLevelControlOfst );
 
709
                }
 
710
                break;
 
711
 
 
712
        case cOCT6100_TLV_TYPE_LCA_Y_CONF_BOFF_RW_GAIN:
 
713
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
714
                                                                                                  cOCT6100_TLV_MIN_LENGTH_LCA_Y_CONF_BOFF_RW_GAIN, 
 
715
                                                                                                  cOCT6100_TLV_MAX_LENGTH_LCA_Y_CONF_BOFF_RW_GAIN );
 
716
                if ( ulResult == cOCT6100_ERR_OK )
 
717
                {
 
718
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
719
                                                                                                                 f_ulTlvValueAddress, 
 
720
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.SoutLevelControlOfst );
 
721
                }
 
722
                break;
 
723
 
 
724
        case cOCT6100_TLV_TYPE_CNA_CONF_BOFF_RW_ENABLE:
 
725
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
726
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CNA_CONF_BOFF_RW_ENABLE, 
 
727
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CNA_CONF_BOFF_RW_ENABLE );
 
728
                if ( ulResult == cOCT6100_ERR_OK )
 
729
                {
 
730
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
731
                                                                                                                 f_ulTlvValueAddress, 
 
732
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.ComfortNoiseModeOfst );
 
733
                }
 
734
                /* Set flag indicating that the feature is present.*/
 
735
                f_pApiInstance->pSharedInfo->ImageInfo.fComfortNoise = TRUE;
 
736
                break;
 
737
 
 
738
        case cOCT6100_TLV_TYPE_NOA_CONF_BOFF_RW_ENABLE:
 
739
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
740
                                                                                                  cOCT6100_TLV_MIN_LENGTH_NOA_CONF_BOFF_RW_ENABLE, 
 
741
                                                                                                  cOCT6100_TLV_MAX_LENGTH_NOA_CONF_BOFF_RW_ENABLE );
 
742
                if ( ulResult == cOCT6100_ERR_OK )
 
743
                {
 
744
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
745
                                                                                                                 f_ulTlvValueAddress, 
 
746
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.NlpControlFieldOfst );
 
747
                }
 
748
                /* Set flag indicating that the feature is present.*/
 
749
                f_pApiInstance->pSharedInfo->ImageInfo.fNlpControl = TRUE;
 
750
                break;
 
751
 
 
752
        case cOCT6100_TLV_TYPE_VFA_CONF_BOFF_RW_ENABLE:
 
753
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
754
                                                                                                  cOCT6100_TLV_MIN_LENGTH_VFA_CONF_BOFF_RW_ENABLE, 
 
755
                                                                                                  cOCT6100_TLV_MAX_LENGTH_VFA_CONF_BOFF_RW_ENABLE );
 
756
                if ( ulResult == cOCT6100_ERR_OK )
 
757
                {
 
758
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
759
                                                                                                                 f_ulTlvValueAddress, 
 
760
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.VadControlFieldOfst );
 
761
                }
 
762
                /* Set flag indicating that the feature is present.*/
 
763
                f_pApiInstance->pSharedInfo->ImageInfo.fSilenceSuppression = TRUE;
 
764
                break;
 
765
 
 
766
        case cOCT6100_TLV_TYPE_TLA_MAIN_IO_BOFF_RW_TAIL_DISP:
 
767
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
768
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TLA_MAIN_IO_BOFF_RW_TAIL_DISP, 
 
769
                                                                                                  cOCT6100_TLV_MAX_LENGTH_TLA_MAIN_IO_BOFF_RW_TAIL_DISP );
 
770
                if ( ulResult == cOCT6100_ERR_OK )
 
771
                {
 
772
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
773
                                                                                                                 f_ulTlvValueAddress, 
 
774
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PouchTailDisplOfst );
 
775
                }
 
776
                break;
 
777
 
 
778
        case cOCT6100_TLV_TYPE_BOOTA_POUCH_BOFF_RW_BOOT_INST:
 
779
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
780
                                                                                                  cOCT6100_TLV_MIN_LENGTH_BOOTA_POUCH_BOFF_RW_BOOT_INST, 
 
781
                                                                                                  cOCT6100_TLV_MAX_LENGTH_BOOTA_POUCH_BOFF_RW_BOOT_INST );
 
782
                if ( ulResult == cOCT6100_ERR_OK )
 
783
                {
 
784
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
785
                                                                                                                 f_ulTlvValueAddress, 
 
786
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PouchBootInstructionOfst );
 
787
                }
 
788
                break;
 
789
 
 
790
        case cOCT6100_TLV_TYPE_BOOTA_POUCH_BOFF_RW_BOOT_RESULT:
 
791
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
792
                                                                                                  cOCT6100_TLV_MIN_LENGTH_BOOTA_POUCH_BOFF_RW_BOOT_RESULT, 
 
793
                                                                                                  cOCT6100_TLV_MAX_LENGTH_BOOTA_POUCH_BOFF_RW_BOOT_RESULT );
 
794
                if ( ulResult == cOCT6100_ERR_OK )
 
795
                {
 
796
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
797
                                                                                                                 f_ulTlvValueAddress, 
 
798
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PouchBootResultOfst );
 
799
                }
 
800
                break;
 
801
 
 
802
        case cOCT6100_TLV_TYPE_TDM_CONF_BOFF_RW_ENABLE:
 
803
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
804
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TDM_CONF_BOFF_RW_ENABLE, 
 
805
                                                                                                  cOCT6100_TLV_MAX_LENGTH_TDM_CONF_BOFF_RW_ENABLE );
 
806
                if ( ulResult == cOCT6100_ERR_OK )
 
807
                {
 
808
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
809
                                                                                                                 f_ulTlvValueAddress, 
 
810
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.ToneDisablerControlOfst );
 
811
                }
 
812
 
 
813
                f_pApiInstance->pSharedInfo->ImageInfo.fToneDisabler = TRUE;
 
814
                break;
 
815
        
 
816
        case cOCT6100_TLV_TYPE_DIS_CONF_BOFF_RW_ENABLE:
 
817
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
818
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DIS_CONF_BOFF_RW_ENABLE, 
 
819
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DIS_CONF_BOFF_RW_ENABLE );
 
820
                if ( ulResult == cOCT6100_ERR_OK )
 
821
                {
 
822
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
823
                                                                                                                 f_ulTlvValueAddress, 
 
824
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.TailDisplEnableOfst );
 
825
                }
 
826
 
 
827
                f_pApiInstance->pSharedInfo->ImageInfo.fTailDisplacement = TRUE;
 
828
                break;
 
829
        
 
830
        case cOCT6100_TLV_TYPE_NT_CONF_BOFF_RW_ENABLE:
 
831
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
832
                                                                                                  cOCT6100_TLV_MIN_LENGTH_NT_CONF_BOFF_RW_ENABLE, 
 
833
                                                                                                  cOCT6100_TLV_MAX_LENGTH_NT_CONF_BOFF_RW_ENABLE );
 
834
                if ( ulResult == cOCT6100_ERR_OK )
 
835
                {
 
836
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
837
                                                                                                                 f_ulTlvValueAddress, 
 
838
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.NlpTrivialFieldOfst );
 
839
                }
 
840
 
 
841
                break;
 
842
 
 
843
        case cOCT6100_TLV_TYPE_DEBUG_CHAN_INDEX_VALUE:
 
844
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
845
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DEBUG_CHAN_INDEX_VALUE, 
 
846
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DEBUG_CHAN_INDEX_VALUE );
 
847
                if ( ulResult == cOCT6100_ERR_OK )
 
848
                {
 
849
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
850
                                                                                        f_ulTlvValueAddress, 
 
851
                                                                                        &ulTempValue );
 
852
                }
 
853
 
 
854
                f_pApiInstance->pSharedInfo->DebugInfo.usRecordMemIndex = (UINT16)( ulTempValue & 0xFFFF );
 
855
 
 
856
                break;
 
857
 
 
858
        case cOCT6100_TLV_TYPE_ADPCM_ENABLE:
 
859
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
860
                                                                                                  cOCT6100_TLV_MIN_LENGTH_ADPCM_ENABLE, 
 
861
                                                                                                  cOCT6100_TLV_MAX_LENGTH_ADPCM_ENABLE );
 
862
                if ( ulResult == cOCT6100_ERR_OK )
 
863
                {
 
864
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
865
                                                                                        f_ulTlvValueAddress, 
 
866
                                                                                        &ulTempValue );
 
867
                }
 
868
 
 
869
                if ( ulTempValue == 0 )
 
870
                        f_pApiInstance->pSharedInfo->ImageInfo.fAdpcm = FALSE;
 
871
                else
 
872
                        f_pApiInstance->pSharedInfo->ImageInfo.fAdpcm = TRUE;
 
873
                
 
874
                break;
 
875
 
 
876
        case cOCT6100_TLV_TYPE_CONFERENCING_ENABLE:
 
877
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
878
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CONFERENCING_ENABLE, 
 
879
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CONFERENCING_ENABLE );
 
880
                if ( ulResult == cOCT6100_ERR_OK )
 
881
                {
 
882
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
883
                                                                                        f_ulTlvValueAddress, 
 
884
                                                                                        &ulTempValue );
 
885
                }
 
886
 
 
887
                if ( ulTempValue == 0 )
 
888
                        f_pApiInstance->pSharedInfo->ImageInfo.fConferencing = FALSE;
 
889
                else
 
890
                        f_pApiInstance->pSharedInfo->ImageInfo.fConferencing = TRUE;
 
891
                
 
892
                break;
 
893
 
 
894
        case cOCT6100_TLV_TYPE_TONE_DETECTOR_PROFILE:
 
895
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
896
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TONE_DETECTOR_PROFILE, 
 
897
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TONE_DETECTOR_PROFILE );
 
898
                if ( ulResult == cOCT6100_ERR_OK )
 
899
                {
 
900
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
901
                                                                                        f_ulTlvValueAddress, 
 
902
                                                                                        &f_pApiInstance->pSharedInfo->ImageInfo.ulToneProfileNumber );
 
903
                }
 
904
 
 
905
                break;
 
906
 
 
907
        case cOCT6100_TLV_TYPE_MAX_TAIL_DISPLACEMENT:
 
908
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
909
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MAX_TAIL_DISPLACEMENT, 
 
910
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MAX_TAIL_DISPLACEMENT );
 
911
                if ( ulResult == cOCT6100_ERR_OK )
 
912
                {
 
913
                        UINT32  ulTailDispTempValue;
 
914
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
915
                                                                                        f_ulTlvValueAddress, 
 
916
                                                                                        &ulTailDispTempValue );
 
917
 
 
918
                        ulTailDispTempValue += 1;               /* Convert the value into milliseconds.*/
 
919
                        ulTailDispTempValue *= 16;              /* value was given in multiple of 16 ms. */
 
920
 
 
921
                        if ( ulTailDispTempValue >= 128 )
 
922
                                f_pApiInstance->pSharedInfo->ImageInfo.usMaxTailDisplacement = (UINT16)( ulTailDispTempValue - 128 );
 
923
                        else
 
924
                                f_pApiInstance->pSharedInfo->ImageInfo.usMaxTailDisplacement = 0;
 
925
 
 
926
                }       
 
927
 
 
928
                break;
 
929
 
 
930
        case cOCT6100_TLV_TYPE_AEC_CONF_BOFF_RW_ENABLE:
 
931
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
932
                                                                                                  cOCT6100_TLV_MIN_LENGTH_AEC_CONF_BOFF_RW_ENABLE, 
 
933
                                                                                                  cOCT6100_TLV_MAX_LENGTH_AEC_CONF_BOFF_RW_ENABLE );
 
934
                if ( ulResult == cOCT6100_ERR_OK )
 
935
                {
 
936
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
937
                                                                                                                 f_ulTlvValueAddress, 
 
938
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AecFieldOfst );
 
939
                }
 
940
        
 
941
                /* Set the flag. */
 
942
                f_pApiInstance->pSharedInfo->ImageInfo.fAecEnabled = TRUE;
 
943
 
 
944
                /* Acoustic echo cancellation available! */
 
945
                f_pApiInstance->pSharedInfo->ImageInfo.fAcousticEcho = TRUE;
 
946
 
 
947
                break;
 
948
 
 
949
        case cOCT6100_TLV_TYPE_PCM_LEAK_CONF_BOFF_RW:
 
950
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
951
                                                                                                  cOCT6100_TLV_MIN_LENGTH_PCM_LEAK_CONF_BOFF_RW, 
 
952
                                                                                                  cOCT6100_TLV_MAX_LENGTH_PCM_LEAK_CONF_BOFF_RW );
 
953
                if ( ulResult == cOCT6100_ERR_OK )
 
954
                {
 
955
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
956
                                                                                                                 f_ulTlvValueAddress, 
 
957
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PcmLeakFieldOfst );
 
958
                }
 
959
 
 
960
                f_pApiInstance->pSharedInfo->ImageInfo.fNonLinearityBehaviorA = TRUE;
 
961
                break;
 
962
 
 
963
        case cOCT6100_TLV_TYPE_DEFAULT_ERL_CONF_BOFF_RW:
 
964
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
965
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DEFAULT_ERL_CONF_BOFF_RW, 
 
966
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DEFAULT_ERL_CONF_BOFF_RW );
 
967
                if ( ulResult == cOCT6100_ERR_OK )
 
968
                {
 
969
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
970
                                                                                                                 f_ulTlvValueAddress, 
 
971
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.DefaultErlFieldOfst );
 
972
                }
 
973
        
 
974
                /* Set the flag. */
 
975
                f_pApiInstance->pSharedInfo->ImageInfo.fDefaultErl = TRUE;
 
976
 
 
977
                break;
 
978
 
 
979
        case cOCT6100_TLV_TYPE_TONE_REM_CONF_BOFF_RW_ENABLE:
 
980
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
981
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TONE_REM_CONF_BOFF_RW_ENABLE, 
 
982
                                                                                                  cOCT6100_TLV_MAX_LENGTH_TONE_REM_CONF_BOFF_RW_ENABLE );
 
983
                if ( ulResult == cOCT6100_ERR_OK )
 
984
                {
 
985
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
986
                                                                                                                 f_ulTlvValueAddress, 
 
987
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.ToneRemovalFieldOfst );
 
988
                }
 
989
        
 
990
                /* Set the flag. */
 
991
                f_pApiInstance->pSharedInfo->ImageInfo.fToneRemoval = TRUE;
 
992
 
 
993
                break;
 
994
 
 
995
 
 
996
 
 
997
        case cOCT6100_TLV_TYPE_TLA_MAIN_IO_BOFF_RW_MAX_ECHO_POINT:
 
998
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
999
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TLA_MAIN_IO_BOFF_RW_MAX_ECHO_POINT, 
 
1000
                                                                                                  cOCT6100_TLV_MAX_LENGTH_TLA_MAIN_IO_BOFF_RW_MAX_ECHO_POINT );
 
1001
                if ( ulResult == cOCT6100_ERR_OK )
 
1002
                {
 
1003
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1004
                                                                                                                 f_ulTlvValueAddress, 
 
1005
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.ChanMainIoMaxEchoPointOfst );
 
1006
                }
 
1007
        
 
1008
                /* Set the flag. */
 
1009
                f_pApiInstance->pSharedInfo->ImageInfo.fMaxEchoPoint = TRUE;
 
1010
 
 
1011
                break;
 
1012
 
 
1013
        case cOCT6100_TLV_TYPE_NLP_CONV_CAP_CONF_BOFF_RW:
 
1014
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1015
                                                                                                  cOCT6100_TLV_MIN_LENGTH_NLP_CONV_CAP_CONF_BOFF_RW, 
 
1016
                                                                                                  cOCT6100_TLV_MAX_LENGTH_NLP_CONV_CAP_CONF_BOFF_RW );
 
1017
                if ( ulResult == cOCT6100_ERR_OK )
 
1018
                {
 
1019
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1020
                                                                                                                 f_ulTlvValueAddress, 
 
1021
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.NlpConvCapFieldOfst );
 
1022
                }
 
1023
        
 
1024
                /* Set the flag. */
 
1025
                f_pApiInstance->pSharedInfo->ImageInfo.fNonLinearityBehaviorB = TRUE;
 
1026
 
 
1027
                break;
 
1028
 
 
1029
        case cOCT6100_TLV_TYPE_MATRIX_EVENT_SIZE:
 
1030
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1031
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MATRIX_EVENT_SIZE, 
 
1032
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MATRIX_EVENT_SIZE );
 
1033
                if ( ulResult == cOCT6100_ERR_OK )
 
1034
                {
 
1035
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1036
                                                                                        f_ulTlvValueAddress, 
 
1037
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulDebugEventSize );
 
1038
                }
 
1039
 
 
1040
                break;
 
1041
 
 
1042
        case cOCT6100_TLV_TYPE_CNR_RW_ENABLE:
 
1043
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1044
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CNR_RW_ENABLE, 
 
1045
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CNR_RW_ENABLE );
 
1046
                if ( ulResult == cOCT6100_ERR_OK )
 
1047
                {
 
1048
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1049
                                                                                        f_ulTlvValueAddress, 
 
1050
                                                                                        &ulTempValue );
 
1051
 
 
1052
                        f_pApiInstance->pSharedInfo->ImageInfo.fConferencingNoiseReduction = (UINT8)( ulTempValue & 0xFF );
 
1053
 
 
1054
                        if ( f_pApiInstance->pSharedInfo->ImageInfo.fConferencingNoiseReduction == TRUE )
 
1055
                        {
 
1056
                                /* Set flag indicating that the dominant speaker feature is present. */
 
1057
                                f_pApiInstance->pSharedInfo->ImageInfo.fDominantSpeakerEnabled = TRUE;
 
1058
                        }
 
1059
                }
 
1060
 
 
1061
                break;
 
1062
 
 
1063
        case cOCT6100_TLV_TYPE_MAX_TAIL_LENGTH_RW_ENABLE:
 
1064
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1065
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MAX_TAIL_LENGTH_RW_ENABLE, 
 
1066
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MAX_TAIL_LENGTH_RW_ENABLE );
 
1067
                if ( ulResult == cOCT6100_ERR_OK )
 
1068
                {
 
1069
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1070
                                                                                        f_ulTlvValueAddress, 
 
1071
                                                                                        &ulTempValue );
 
1072
 
 
1073
                        f_pApiInstance->pSharedInfo->ImageInfo.usMaxTailLength = (UINT16)( ulTempValue & 0xFFFF );
 
1074
                }
 
1075
 
 
1076
                break;
 
1077
                
 
1078
        case cOCT6100_TLV_TYPE_MAX_NUMBER_OF_CHANNELS:
 
1079
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1080
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MAX_NUMBER_OF_CHANNELS, 
 
1081
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MAX_NUMBER_OF_CHANNELS );
 
1082
                if ( ulResult == cOCT6100_ERR_OK )
 
1083
                {
 
1084
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1085
                                                                                        f_ulTlvValueAddress, 
 
1086
                                                                                        &ulTempValue );
 
1087
 
 
1088
                        f_pApiInstance->pSharedInfo->ImageInfo.usMaxNumberOfChannels = (UINT16)( ulTempValue & 0xFFFF );
 
1089
                }
 
1090
 
 
1091
                break;
 
1092
 
 
1093
        case cOCT6100_TLV_TYPE_PLAYOUT_ENABLE:
 
1094
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1095
                                                                                                  cOCT6100_TLV_MIN_LENGTH_PLAYOUT_ENABLE, 
 
1096
                                                                                                  cOCT6100_TLV_MAX_LENGTH_PLAYOUT_ENABLE );
 
1097
                if ( ulResult == cOCT6100_ERR_OK )
 
1098
                {
 
1099
                        /* Set flag indicating that the feature is present. */
 
1100
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1101
                                                                                        f_ulTlvValueAddress, 
 
1102
                                                                                        &ulTempValue );
 
1103
                        f_pApiInstance->pSharedInfo->ImageInfo.fBufferPlayout = (UINT8)( ulTempValue & 0xFF );
 
1104
                }
 
1105
 
 
1106
                break;
 
1107
 
 
1108
        case cOCT6100_TLV_TYPE_DOMINANT_SPEAKER_BOFF_RW_ENABLE:
 
1109
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1110
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DOMINANT_SPEAKER_BOFF_RW_ENABLE, 
 
1111
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DOMINANT_SPEAKER_BOFF_RW_ENABLE );
 
1112
                if ( ulResult == cOCT6100_ERR_OK )
 
1113
                {
 
1114
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1115
                                                                                                                 f_ulTlvValueAddress, 
 
1116
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.DominantSpeakerFieldOfst );
 
1117
                }
 
1118
 
 
1119
                break;
 
1120
                
 
1121
        case cOCT6100_TLV_TYPE_TAIL_DISP_CONF_BOFF_RW_ENABLE:
 
1122
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1123
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TAIL_DISP_CONF_BOFF_RW_ENABLE, 
 
1124
                                                                                                  cOCT6100_TLV_MAX_LENGTH_TAIL_DISP_CONF_BOFF_RW_ENABLE );
 
1125
                if ( ulResult == cOCT6100_ERR_OK )
 
1126
                {
 
1127
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1128
                                                                                                                 f_ulTlvValueAddress, 
 
1129
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PerChanTailDisplacementFieldOfst );
 
1130
 
 
1131
                        f_pApiInstance->pSharedInfo->ImageInfo.fPerChannelTailDisplacement = TRUE;
 
1132
                }
 
1133
                
 
1134
                break;
 
1135
 
 
1136
        case cOCT6100_TLV_TYPE_ANR_RW_ENABLE:
 
1137
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1138
                                                                                                  cOCT6100_TLV_MIN_LENGTH_ANR_RW_ENABLE, 
 
1139
                                                                                                  cOCT6100_TLV_MAX_LENGTH_ANR_RW_ENABLE );
 
1140
                if ( ulResult == cOCT6100_ERR_OK )
 
1141
                {
 
1142
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1143
                                                                                        f_ulTlvValueAddress, 
 
1144
                                                                                        &ulTempValue );
 
1145
 
 
1146
                        f_pApiInstance->pSharedInfo->ImageInfo.fAdaptiveNoiseReduction = (UINT8)( ulTempValue & 0xFF );
 
1147
                }
 
1148
 
 
1149
                break;
 
1150
 
 
1151
        case cOCT6100_TLV_TYPE_MUSIC_PROTECTION_RW_ENABLE:
 
1152
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1153
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MUSIC_PROTECTION_RW_ENABLE, 
 
1154
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MUSIC_PROTECTION_RW_ENABLE );
 
1155
                if ( ulResult == cOCT6100_ERR_OK )
 
1156
                {
 
1157
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1158
                                                                                        f_ulTlvValueAddress, 
 
1159
                                                                                        &ulTempValue );
 
1160
 
 
1161
                        f_pApiInstance->pSharedInfo->ImageInfo.fMusicProtection = (UINT8)( ulTempValue & 0xFF );
 
1162
                }
 
1163
 
 
1164
                break;
 
1165
 
 
1166
        case cOCT6100_TLV_TYPE_AEC_DEFAULT_ERL_BOFF:
 
1167
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1168
                                                                                                  cOCT6100_TLV_MIN_LENGTH_AEC_DEFAULT_ERL_BOFF_RW_ENABLE, 
 
1169
                                                                                                  cOCT6100_TLV_MAX_LENGTH_AEC_DEFAULT_ERL_BOFF_RW_ENABLE );
 
1170
                if ( ulResult == cOCT6100_ERR_OK )
 
1171
                {
 
1172
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1173
                                                                                                                 f_ulTlvValueAddress, 
 
1174
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AecDefaultErlFieldOfst );
 
1175
 
 
1176
                        f_pApiInstance->pSharedInfo->ImageInfo.fAecDefaultErl = TRUE;
 
1177
                }
 
1178
 
 
1179
                break;
 
1180
 
 
1181
        case cOCT6100_TLV_TYPE_Z_ALC_TARGET_BOFF:
 
1182
 
 
1183
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1184
                                                                                                  cOCT6100_TLV_MIN_LENGTH_Z_ALC_TARGET_BOFF_RW_ENABLE, 
 
1185
                                                                                                  cOCT6100_TLV_MAX_LENGTH_Z_ALC_TARGET_BOFF_RW_ENABLE );
 
1186
                if ( ulResult == cOCT6100_ERR_OK )
 
1187
                {
 
1188
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1189
                                                                                                                 f_ulTlvValueAddress, 
 
1190
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinAutoLevelControlTargetOfst );
 
1191
 
 
1192
                        f_pApiInstance->pSharedInfo->ImageInfo.fRinAutoLevelControl = TRUE;
 
1193
                }
 
1194
 
 
1195
                break;
 
1196
 
 
1197
        case cOCT6100_TLV_TYPE_Y_ALC_TARGET_BOFF:
 
1198
 
 
1199
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1200
                                                                                                  cOCT6100_TLV_MIN_LENGTH_Y_ALC_TARGET_BOFF_RW_ENABLE, 
 
1201
                                                                                                  cOCT6100_TLV_MAX_LENGTH_Y_ALC_TARGET_BOFF_RW_ENABLE );
 
1202
                if ( ulResult == cOCT6100_ERR_OK )
 
1203
                {
 
1204
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1205
                                                                                                                 f_ulTlvValueAddress, 
 
1206
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.SoutAutoLevelControlTargetOfst );
 
1207
 
 
1208
                        f_pApiInstance->pSharedInfo->ImageInfo.fSoutAutoLevelControl = TRUE;
 
1209
                }
 
1210
 
 
1211
                break;
 
1212
 
 
1213
        case cOCT6100_TLV_TYPE_Z_HLC_TARGET_BOFF:
 
1214
 
 
1215
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1216
                                                                                                  cOCT6100_TLV_MIN_LENGTH_Z_HLC_TARGET_BOFF_RW_ENABLE, 
 
1217
                                                                                                  cOCT6100_TLV_MAX_LENGTH_Z_HLC_TARGET_BOFF_RW_ENABLE );
 
1218
                if ( ulResult == cOCT6100_ERR_OK )
 
1219
                {
 
1220
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1221
                                                                                                                 f_ulTlvValueAddress, 
 
1222
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinHighLevelCompensationThresholdOfst );
 
1223
 
 
1224
                        f_pApiInstance->pSharedInfo->ImageInfo.fRinHighLevelCompensation = TRUE;
 
1225
                }
 
1226
 
 
1227
                break;
 
1228
 
 
1229
        case cOCT6100_TLV_TYPE_Y_HLC_TARGET_BOFF:
 
1230
 
 
1231
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1232
                                                                                                  cOCT6100_TLV_MIN_LENGTH_Y_HLC_TARGET_BOFF_RW_ENABLE, 
 
1233
                                                                                                  cOCT6100_TLV_MAX_LENGTH_Y_HLC_TARGET_BOFF_RW_ENABLE );
 
1234
                if ( ulResult == cOCT6100_ERR_OK )
 
1235
                {
 
1236
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1237
                                                                                                                 f_ulTlvValueAddress, 
 
1238
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.SoutHighLevelCompensationThresholdOfst );
 
1239
 
 
1240
                        f_pApiInstance->pSharedInfo->ImageInfo.fSoutHighLevelCompensation = TRUE;
 
1241
                }
 
1242
 
 
1243
                break;
 
1244
 
 
1245
        case cOCT6100_TLV_TYPE_ALC_HLC_STATUS_BOFF:
 
1246
 
 
1247
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1248
                                                                                                  cOCT6100_TLV_MIN_LENGTH_ALC_HLC_STATUS_BOFF_RW_ENABLE, 
 
1249
                                                                                                  cOCT6100_TLV_MAX_LENGTH_ALC_HLC_STATUS_BOFF_RW_ENABLE );
 
1250
                if ( ulResult == cOCT6100_ERR_OK )
 
1251
                {
 
1252
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1253
                                                                                                                 f_ulTlvValueAddress, 
 
1254
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AlcHlcStatusOfst );
 
1255
 
 
1256
                        f_pApiInstance->pSharedInfo->ImageInfo.fAlcHlcStatus = TRUE;
 
1257
                }
 
1258
 
 
1259
                break;
 
1260
 
 
1261
        case cOCT6100_TLV_TYPE_Z_PLAYOUT_HARD_SKIP_BOFF:
 
1262
 
 
1263
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1264
                                                                                                  cOCT6100_TLV_MIN_LENGTH_Z_PLAYOUT_HARD_SKIP_BOFF_RW, 
 
1265
                                                                                                  cOCT6100_TLV_MAX_LENGTH_Z_PLAYOUT_HARD_SKIP_BOFF_RW );
 
1266
                if ( ulResult == cOCT6100_ERR_OK )
 
1267
                {
 
1268
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1269
                                                                                                                 f_ulTlvValueAddress, 
 
1270
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinHardSkipOfst );
 
1271
 
 
1272
                        f_pApiInstance->pSharedInfo->ImageInfo.fRinBufferPlayoutHardSkip = TRUE;
 
1273
                }
 
1274
 
 
1275
                break;
 
1276
 
 
1277
        case cOCT6100_TLV_TYPE_Y_PLAYOUT_HARD_SKIP_BOFF:
 
1278
 
 
1279
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1280
                                                                                                  cOCT6100_TLV_MIN_LENGTH_Y_PLAYOUT_HARD_SKIP_BOFF_RW, 
 
1281
                                                                                                  cOCT6100_TLV_MAX_LENGTH_Y_PLAYOUT_HARD_SKIP_BOFF_RW );
 
1282
                if ( ulResult == cOCT6100_ERR_OK )
 
1283
                {
 
1284
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1285
                                                                                                                 f_ulTlvValueAddress, 
 
1286
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutHardSkipOfst );
 
1287
 
 
1288
                        f_pApiInstance->pSharedInfo->ImageInfo.fSoutBufferPlayoutHardSkip = TRUE;
 
1289
                }
 
1290
 
 
1291
                break;
 
1292
                
 
1293
        case cOCT6100_TLV_TYPE_AFT_FIELD_BOFF:
 
1294
 
 
1295
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1296
                                                                                                  cOCT6100_TLV_MIN_LENGTH_AFT_FIELD_BOFF_RW, 
 
1297
                                                                                                  cOCT6100_TLV_MAX_LENGTH_AFT_FIELD_BOFF_RW );
 
1298
                if ( ulResult == cOCT6100_ERR_OK )
 
1299
                {
 
1300
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1301
                                                                                                                 f_ulTlvValueAddress, 
 
1302
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AftControlOfst );
 
1303
 
 
1304
                        f_pApiInstance->pSharedInfo->ImageInfo.fAftControl = TRUE;
 
1305
                }
 
1306
 
 
1307
                break;
 
1308
 
 
1309
        case cOCT6100_TLV_TYPE_VOICE_DETECTED_STAT_BOFF:
 
1310
 
 
1311
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1312
                                                                                                  cOCT6100_TLV_MIN_LENGTH_VOICE_DETECTED_STAT_BOFF_RW, 
 
1313
                                                                                                  cOCT6100_TLV_MAX_LENGTH_VOICE_DETECTED_STAT_BOFF_RW );
 
1314
                if ( ulResult == cOCT6100_ERR_OK )
 
1315
                {
 
1316
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1317
                                                                                                                 f_ulTlvValueAddress, 
 
1318
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.SinVoiceDetectedStatOfst );
 
1319
 
 
1320
                        f_pApiInstance->pSharedInfo->ImageInfo.fSinVoiceDetectedStat = TRUE;
 
1321
                }
 
1322
 
 
1323
                break;
 
1324
 
 
1325
        case cOCT6100_TLV_TYPE_GAIN_APPLIED_RIN_STAT_BOFF:
 
1326
 
 
1327
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1328
                                                                                                  cOCT6100_TLV_MIN_LENGTH_GAIN_APPLIED_RIN_STAT_BOFF_RW, 
 
1329
                                                                                                  cOCT6100_TLV_MAX_LENGTH_GAIN_APPLIED_RIN_STAT_BOFF_RW );
 
1330
                if ( ulResult == cOCT6100_ERR_OK )
 
1331
                {
 
1332
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1333
                                                                                                                 f_ulTlvValueAddress, 
 
1334
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinAppliedGainStatOfst );
 
1335
 
 
1336
                        f_pApiInstance->pSharedInfo->ImageInfo.fRinAppliedGainStat = TRUE;
 
1337
                }
 
1338
 
 
1339
                break;
 
1340
 
 
1341
        case cOCT6100_TLV_TYPE_GAIN_APPLIED_SOUT_STAT_BOFF:
 
1342
 
 
1343
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1344
                                                                                                  cOCT6100_TLV_MIN_LENGTH_GAIN_APPLIED_SOUT_STAT_BOFF_RW, 
 
1345
                                                                                                  cOCT6100_TLV_MAX_LENGTH_GAIN_APPLIED_SOUT_STAT_BOFF_RW );
 
1346
                if ( ulResult == cOCT6100_ERR_OK )
 
1347
                {
 
1348
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1349
                                                                                                                 f_ulTlvValueAddress, 
 
1350
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.SoutAppliedGainStatOfst );
 
1351
 
 
1352
                        f_pApiInstance->pSharedInfo->ImageInfo.fSoutAppliedGainStat = TRUE;
 
1353
                }
 
1354
 
 
1355
                break;
 
1356
                
 
1357
        case cOCT6100_TLV_TYPE_MAX_ADAPT_ALE_BOFF:
 
1358
 
 
1359
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1360
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MAX_ADAPT_ALE_BOFF_RW, 
 
1361
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MAX_ADAPT_ALE_BOFF_RW );
 
1362
                if ( ulResult == cOCT6100_ERR_OK )
 
1363
                {
 
1364
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1365
                                                                                                                 f_ulTlvValueAddress, 
 
1366
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AdaptiveAleOfst );
 
1367
 
 
1368
                        f_pApiInstance->pSharedInfo->ImageInfo.fListenerEnhancement = TRUE;
 
1369
                }
 
1370
 
 
1371
                break;
 
1372
                
 
1373
        case cOCT6100_TLV_TYPE_RIN_ANR_BOFF:
 
1374
 
 
1375
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1376
                                                                                                  cOCT6100_TLV_MIN_LENGTH_RIN_ANR_BOFF_RW, 
 
1377
                                                                                                  cOCT6100_TLV_MAX_LENGTH_RIN_ANR_BOFF_RW );
 
1378
                if ( ulResult == cOCT6100_ERR_OK )
 
1379
                {
 
1380
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1381
                                                                                                                 f_ulTlvValueAddress, 
 
1382
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinAnrOfst );
 
1383
 
 
1384
                        f_pApiInstance->pSharedInfo->ImageInfo.fRoutNoiseReduction = TRUE;
 
1385
                }
 
1386
 
 
1387
                break;
 
1388
        case cOCT6100_TLV_TYPE_RIN_ANR_VALUE:
 
1389
                
 
1390
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1391
                                                                                                  cOCT6100_TLV_MIN_LENGTH_RIN_ANR_VALUE_RW, 
 
1392
                                                                                                  cOCT6100_TLV_MAX_LENGTH_RIN_ANR_VALUE_RW );
 
1393
                if ( ulResult == cOCT6100_ERR_OK )
 
1394
                {
 
1395
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1396
                                                                                                                 f_ulTlvValueAddress, 
 
1397
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinAnrValOfst );
 
1398
 
 
1399
                        f_pApiInstance->pSharedInfo->ImageInfo.fRoutNoiseReductionLevel = TRUE;
 
1400
                }
 
1401
 
 
1402
                break;
 
1403
        case cOCT6100_TLV_TYPE_RIN_MUTE_BOFF:
 
1404
 
 
1405
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1406
                                                                                                  cOCT6100_TLV_MIN_LENGTH_RIN_MUTE_BOFF_RW, 
 
1407
                                                                                                  cOCT6100_TLV_MAX_LENGTH_RIN_MUTE_BOFF_RW );
 
1408
                if ( ulResult == cOCT6100_ERR_OK )
 
1409
                {
 
1410
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1411
                                                                                                                 f_ulTlvValueAddress, 
 
1412
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.RinMuteOfst );
 
1413
 
 
1414
                        f_pApiInstance->pSharedInfo->ImageInfo.fRinMute = TRUE;
 
1415
                }
 
1416
 
 
1417
                break;
 
1418
 
 
1419
        case cOCT6100_TLV_TYPE_SIN_MUTE_BOFF:
 
1420
 
 
1421
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1422
                                                                                                  cOCT6100_TLV_MIN_LENGTH_SIN_MUTE_BOFF_RW, 
 
1423
                                                                                                  cOCT6100_TLV_MAX_LENGTH_SIN_MUTE_BOFF_RW );
 
1424
                if ( ulResult == cOCT6100_ERR_OK )
 
1425
                {
 
1426
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1427
                                                                                                                 f_ulTlvValueAddress, 
 
1428
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.SinMuteOfst );
 
1429
 
 
1430
                        f_pApiInstance->pSharedInfo->ImageInfo.fSinMute = TRUE;
 
1431
                }
 
1432
 
 
1433
                break;
 
1434
                
 
1435
        case cOCT6100_TLV_TYPE_NUMBER_PLAYOUT_EVENTS:
 
1436
                
 
1437
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1438
                                                                                                  cOCT6100_TLV_MIN_LENGTH_NUMBER_PLAYOUT_EVENTS, 
 
1439
                                                                                                  cOCT6100_TLV_MAX_LENGTH_NUMBER_PLAYOUT_EVENTS );
 
1440
                if ( ulResult == cOCT6100_ERR_OK )
 
1441
                {
 
1442
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1443
                                                                                        f_ulTlvValueAddress, 
 
1444
                                                                                        &ulTempValue );
 
1445
 
 
1446
                        f_pApiInstance->pSharedInfo->ImageInfo.byMaxNumberPlayoutEvents = (UINT8)( ulTempValue & 0xFF );
 
1447
                }
 
1448
 
 
1449
                break;
 
1450
 
 
1451
        case cOCT6100_TLV_TYPE_ANR_SNR_IMPROVEMENT_BOFF:
 
1452
 
 
1453
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1454
                                                                                                  cOCT6100_TLV_MIN_LENGTH_ANR_SNR_IMPROVEMENT_BOFF_RW, 
 
1455
                                                                                                  cOCT6100_TLV_MAX_LENGTH_ANR_SNR_IMPROVEMENT_BOFF_RW );
 
1456
                if ( ulResult == cOCT6100_ERR_OK )
 
1457
                {
 
1458
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1459
                                                                                                                 f_ulTlvValueAddress, 
 
1460
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AnrSnrEnhancementOfst );
 
1461
 
 
1462
                        f_pApiInstance->pSharedInfo->ImageInfo.fAnrSnrEnhancement = TRUE;
 
1463
                }
 
1464
 
 
1465
                break;
 
1466
 
 
1467
        case cOCT6100_TLV_TYPE_ANR_AGRESSIVITY_BOFF:
 
1468
 
 
1469
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1470
                                                                                                  cOCT6100_TLV_MIN_LENGTH_ANR_AGRESSIVITY_BOFF_RW, 
 
1471
                                                                                                  cOCT6100_TLV_MAX_LENGTH_ANR_AGRESSIVITY_BOFF_RW );
 
1472
                if ( ulResult == cOCT6100_ERR_OK )
 
1473
                {
 
1474
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1475
                                                                                                                 f_ulTlvValueAddress, 
 
1476
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AnrVoiceNoiseSegregationOfst );
 
1477
 
 
1478
                        f_pApiInstance->pSharedInfo->ImageInfo.fAnrVoiceNoiseSegregation = TRUE;
 
1479
                }
 
1480
 
 
1481
                break;
 
1482
 
 
1483
        case cOCT6100_TLV_TYPE_CHAN_TAIL_LENGTH_BOFF:
 
1484
 
 
1485
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1486
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CHAN_TAIL_LENGTH_BOFF, 
 
1487
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CHAN_TAIL_LENGTH_BOFF );
 
1488
                if ( ulResult == cOCT6100_ERR_OK )
 
1489
                {
 
1490
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1491
                                                                                                                 f_ulTlvValueAddress, 
 
1492
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PerChanTailLengthFieldOfst );
 
1493
 
 
1494
                        f_pApiInstance->pSharedInfo->ImageInfo.fPerChannelTailLength = TRUE;
 
1495
                }
 
1496
 
 
1497
                break;
 
1498
 
 
1499
        case cOCT6100_TLV_TYPE_CHAN_VQE_TONE_DISABLING_BOFF:
 
1500
 
 
1501
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1502
                                                                                                  cOCT6100_TLV_MIN_LENGTH_CHAN_VQE_TONE_DIS_BOFF, 
 
1503
                                                                                                  cOCT6100_TLV_MAX_LENGTH_CHAN_VQE_TONE_DIS_BOFF );
 
1504
                if ( ulResult == cOCT6100_ERR_OK )
 
1505
                {
 
1506
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1507
                                                                                                                 f_ulTlvValueAddress, 
 
1508
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.ToneDisablerVqeActivationDelayOfst );
 
1509
 
 
1510
                        f_pApiInstance->pSharedInfo->ImageInfo.fToneDisablerVqeActivationDelay = TRUE;
 
1511
                }
 
1512
 
 
1513
                break;
 
1514
 
 
1515
        case cOCT6100_TLV_TYPE_AF_TAIL_DISP_VALUE_BOFF:
 
1516
 
 
1517
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1518
                                                                                                  cOCT6100_TLV_MIN_LENGTH_AF_TAIL_DISP_VALUE_BOFF, 
 
1519
                                                                                                  cOCT6100_TLV_MAX_LENGTH_AF_TAIL_DISP_VALUE_BOFF );
 
1520
                if ( ulResult == cOCT6100_ERR_OK )
 
1521
                {
 
1522
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1523
                                                                                                                 f_ulTlvValueAddress, 
 
1524
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AfTailDisplacementFieldOfst );
 
1525
 
 
1526
                        f_pApiInstance->pSharedInfo->ImageInfo.fAfTailDisplacement = TRUE;
 
1527
                }
 
1528
 
 
1529
                break;
 
1530
 
 
1531
 
 
1532
        case cOCT6100_TLV_TYPE_POUCH_COUNTER_BOFF:
 
1533
 
 
1534
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1535
                                                                                                  cOCT6100_TLV_MIN_LENGTH_POUCH_COUNTER_BOFF, 
 
1536
                                                                                                  cOCT6100_TLV_MAX_LENGTH_POUCH_COUNTER_BOFF );
 
1537
                if ( ulResult == cOCT6100_ERR_OK )
 
1538
                {
 
1539
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1540
                                                                                                                 f_ulTlvValueAddress, 
 
1541
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.PouchCounterFieldOfst );
 
1542
 
 
1543
                        f_pApiInstance->pSharedInfo->DebugInfo.fPouchCounter = TRUE;
 
1544
                }
 
1545
 
 
1546
                break;
 
1547
 
 
1548
        case cOCT6100_TLV_TYPE_AEC_TAIL_LENGTH_BOFF:
 
1549
 
 
1550
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1551
                                                                                                  cOCT6100_TLV_MIN_LENGTH_AEC_TAIL_BOFF, 
 
1552
                                                                                                  cOCT6100_TLV_MAX_LENGTH_AEC_TAIL_BOFF );
 
1553
                if ( ulResult == cOCT6100_ERR_OK )
 
1554
                {
 
1555
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1556
                                                                                                                 f_ulTlvValueAddress, 
 
1557
                                                                                                                 &f_pApiInstance->pSharedInfo->MemoryMap.AecTailLengthFieldOfst );
 
1558
 
 
1559
                        f_pApiInstance->pSharedInfo->ImageInfo.fAecTailLength = TRUE;
 
1560
                }
 
1561
 
 
1562
                break;
 
1563
 
 
1564
        case cOCT6100_TLV_TYPE_MATRIX_DWORD_BASE:
 
1565
                
 
1566
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1567
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MATRIX_DWORD_BASE, 
 
1568
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MATRIX_DWORD_BASE );
 
1569
                if ( ulResult == cOCT6100_ERR_OK )
 
1570
                {
 
1571
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1572
                                                                                        f_ulTlvValueAddress, 
 
1573
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixBaseAddress );
 
1574
 
 
1575
                        /* Mask the upper bits set by the firmware. */
 
1576
                        f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixBaseAddress &= 0x0FFFFFFF;                       
 
1577
 
 
1578
                        /* Modify the base address to incorporate the external memory offset. */
 
1579
                        f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixBaseAddress += cOCT6100_EXTERNAL_MEM_BASE_ADDRESS;
 
1580
                }
 
1581
 
 
1582
                break;
 
1583
 
 
1584
        case cOCT6100_TLV_TYPE_DEBUG_CHAN_STATS_BYTE_SIZE:
 
1585
                
 
1586
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1587
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DEBUG_CHAN_STATS_BYTE_SIZE, 
 
1588
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DEBUG_CHAN_STATS_BYTE_SIZE );
 
1589
                if ( ulResult == cOCT6100_ERR_OK )
 
1590
                {
 
1591
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1592
                                                                                        f_ulTlvValueAddress, 
 
1593
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulDebugChanStatsByteSize );
 
1594
                }
 
1595
 
 
1596
                break;
 
1597
 
 
1598
        case cOCT6100_TLV_TYPE_DEBUG_CHAN_LITE_STATS_BYTE_SIZE:
 
1599
                
 
1600
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1601
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DEBUG_CHAN_LITE_STATS_BYTE_SIZE, 
 
1602
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DEBUG_CHAN_LITE_STATS_BYTE_SIZE );
 
1603
                if ( ulResult == cOCT6100_ERR_OK )
 
1604
                {
 
1605
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1606
                                                                                        f_ulTlvValueAddress, 
 
1607
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulDebugChanLiteStatsByteSize );
 
1608
                }
 
1609
 
 
1610
                break;
 
1611
 
 
1612
        case cOCT6100_TLV_TYPE_HOT_CHANNEL_SELECT_DWORD_BASE:
 
1613
                
 
1614
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1615
                                                                                                  cOCT6100_TLV_MIN_LENGTH_HOT_CHANNEL_SELECT_DWORD_BASE, 
 
1616
                                                                                                  cOCT6100_TLV_MAX_LENGTH_HOT_CHANNEL_SELECT_DWORD_BASE );
 
1617
                if ( ulResult == cOCT6100_ERR_OK )
 
1618
                {
 
1619
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1620
                                                                                        f_ulTlvValueAddress, 
 
1621
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulHotChannelSelectBaseAddress );
 
1622
                }
 
1623
 
 
1624
                break;
 
1625
 
 
1626
        case cOCT6100_TLV_TYPE_MATRIX_TIMESTAMP_DWORD_BASE:
 
1627
                
 
1628
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1629
                                                                                                  cOCT6100_TLV_MIN_LENGTH_TIMESTAMP_DWORD_BASE, 
 
1630
                                                                                                  cOCT6100_TLV_MAX_LENGTH_TIMESTAMP_DWORD_BASE );
 
1631
                if ( ulResult == cOCT6100_ERR_OK )
 
1632
                {
 
1633
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1634
                                                                                        f_ulTlvValueAddress, 
 
1635
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixTimestampBaseAddress );
 
1636
                }
 
1637
 
 
1638
                break;
 
1639
 
 
1640
        case cOCT6100_TLV_TYPE_MATRIX_WP_DWORD_BASE:
 
1641
                
 
1642
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1643
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MATRIX_WP_DWORD_BASE, 
 
1644
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MATRIX_WP_DWORD_BASE );
 
1645
                if ( ulResult == cOCT6100_ERR_OK )
 
1646
                {
 
1647
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1648
                                                                                        f_ulTlvValueAddress, 
 
1649
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixWpBaseAddress );
 
1650
                }
 
1651
 
 
1652
                break;
 
1653
 
 
1654
        case cOCT6100_TLV_TYPE_AF_WRITE_PTR_BYTE_OFFSET:
 
1655
                
 
1656
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1657
                                                                                                  cOCT6100_TLV_MIN_LENGTH_AF_WRITE_PTR_BYTE_OFFSET, 
 
1658
                                                                                                  cOCT6100_TLV_MAX_LENGTH_AF_WRITE_PTR_BYTE_OFFSET );
 
1659
                if ( ulResult == cOCT6100_ERR_OK )
 
1660
                {
 
1661
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1662
                                                                                        f_ulTlvValueAddress, 
 
1663
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulAfWritePtrByteOffset );
 
1664
                }
 
1665
 
 
1666
                break;
 
1667
 
 
1668
        case cOCT6100_TLV_TYPE_RECORDED_PCM_EVENT_BYTE_SIZE:
 
1669
                
 
1670
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1671
                                                                                                  cOCT6100_TLV_MIN_LENGTH_RECORDED_PCM_EVENT_BYTE_SIZE, 
 
1672
                                                                                                  cOCT6100_TLV_MAX_LENGTH_RECORDED_PCM_EVENT_BYTE_SIZE );
 
1673
                if ( ulResult == cOCT6100_ERR_OK )
 
1674
                {
 
1675
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1676
                                                                                        f_ulTlvValueAddress, 
 
1677
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulRecordedPcmEventByteSize );
 
1678
                }
 
1679
 
 
1680
                break;
 
1681
 
 
1682
        case cOCT6100_TLV_TYPE_IS_ISR_CALLED_BOFF:
 
1683
                
 
1684
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1685
                                                                                                  cOCT6100_TLV_MIN_LENGTH_IS_ISR_CALLED_BOFF, 
 
1686
                                                                                                  cOCT6100_TLV_MAX_LENGTH_IS_ISR_CALLED_BOFF );
 
1687
                if ( ulResult == cOCT6100_ERR_OK )
 
1688
                {
 
1689
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1690
                                                                                        f_ulTlvValueAddress, 
 
1691
                                                                                        &f_pApiInstance->pSharedInfo->MemoryMap.IsIsrCalledFieldOfst );
 
1692
 
 
1693
                        f_pApiInstance->pSharedInfo->DebugInfo.fIsIsrCalledField = TRUE;
 
1694
                }
 
1695
 
 
1696
                break;
 
1697
 
 
1698
        case cOCT6100_TLV_TYPE_MUSIC_PROTECTION_ENABLE_BOFF:
 
1699
                
 
1700
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1701
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MUSIC_PROTECTION_ENABLE_BOFF, 
 
1702
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MUSIC_PROTECTION_ENABLE_BOFF );
 
1703
                if ( ulResult == cOCT6100_ERR_OK )
 
1704
                {
 
1705
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1706
                                                                                        f_ulTlvValueAddress, 
 
1707
                                                                                        &f_pApiInstance->pSharedInfo->MemoryMap.MusicProtectionFieldOfst );
 
1708
 
 
1709
                        f_pApiInstance->pSharedInfo->ImageInfo.fMusicProtectionConfiguration = TRUE;
 
1710
                }
 
1711
 
 
1712
                break;
 
1713
 
 
1714
        case cOCT6100_TLV_TYPE_IDLE_CODE_DETECTION_ENABLE:
 
1715
                
 
1716
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1717
                                                                                                  cOCT6100_TLV_MIN_LENGTH_IDLE_CODE_DETECTION, 
 
1718
                                                                                                  cOCT6100_TLV_MAX_LENGTH_IDLE_CODE_DETECTION );
 
1719
                if ( ulResult == cOCT6100_ERR_OK )
 
1720
                {
 
1721
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1722
                                                                                        f_ulTlvValueAddress, 
 
1723
                                                                                        &ulTempValue );
 
1724
 
 
1725
                        f_pApiInstance->pSharedInfo->ImageInfo.fIdleCodeDetection = (UINT8)( ulTempValue & 0xFF );
 
1726
                }
 
1727
 
 
1728
                break;
 
1729
                
 
1730
        case cOCT6100_TLV_TYPE_IDLE_CODE_DETECTION_BOFF:
 
1731
                
 
1732
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1733
                                                                                                  cOCT6100_TLV_MIN_LENGTH_IDLE_CODE_DETECTION_BOFF, 
 
1734
                                                                                                  cOCT6100_TLV_MAX_LENGTH_IDLE_CODE_DETECTION_BOFF );
 
1735
                if ( ulResult == cOCT6100_ERR_OK )
 
1736
                {
 
1737
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1738
                                                                                        f_ulTlvValueAddress, 
 
1739
                                                                                        &f_pApiInstance->pSharedInfo->MemoryMap.IdleCodeDetectionFieldOfst );
 
1740
 
 
1741
                        f_pApiInstance->pSharedInfo->ImageInfo.fIdleCodeDetectionConfiguration = TRUE;
 
1742
                }
 
1743
 
 
1744
                break;
 
1745
 
 
1746
        case cOCT6100_TLV_TYPE_IMAGE_TYPE:
 
1747
                
 
1748
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1749
                                                                                                  cOCT6100_TLV_MIN_LENGTH_IMAGE_TYPE, 
 
1750
                                                                                                  cOCT6100_TLV_MAX_LENGTH_IMAGE_TYPE );
 
1751
                if ( ulResult == cOCT6100_ERR_OK )
 
1752
                {
 
1753
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1754
                                                                                        f_ulTlvValueAddress, 
 
1755
                                                                                        &ulTempValue );
 
1756
 
 
1757
                        /* Check if read image type value is what's expected. */
 
1758
                        if ( ( ulTempValue != cOCT6100_IMAGE_TYPE_WIRELINE )
 
1759
                                && ( ulTempValue != cOCT6100_IMAGE_TYPE_COMBINED ) )
 
1760
                                return cOCT6100_ERR_FATAL_E9;
 
1761
 
 
1762
                        f_pApiInstance->pSharedInfo->ImageInfo.byImageType = (UINT8)( ulTempValue & 0xFF );
 
1763
                }
 
1764
 
 
1765
                break;
 
1766
 
 
1767
        case cOCT6100_TLV_TYPE_MAX_WIRELINE_CHANNELS:
 
1768
                
 
1769
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1770
                                                                                                  cOCT6100_TLV_MIN_LENGTH_MAX_WIRELINE_CHANNELS, 
 
1771
                                                                                                  cOCT6100_TLV_MAX_LENGTH_MAX_WIRELINE_CHANNELS );
 
1772
                if ( ulResult == cOCT6100_ERR_OK )
 
1773
                {
 
1774
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1775
                                                                                        f_ulTlvValueAddress, 
 
1776
                                                                                        &ulTempValue );
 
1777
                }
 
1778
 
 
1779
                break;
 
1780
                
 
1781
        case cOCT6100_TLV_TYPE_AF_EVENT_CB_SIZE:
 
1782
                
 
1783
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1784
                                                                                                  cOCT6100_TLV_MIN_LENGTH_AF_EVENT_CB_BYTE_SIZE, 
 
1785
                                                                                                  cOCT6100_TLV_MAX_LENGTH_AF_EVENT_CB_BYTE_SIZE );
 
1786
                if ( ulResult == cOCT6100_ERR_OK )
 
1787
                {
 
1788
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1789
                                                                                        f_ulTlvValueAddress, 
 
1790
                                                                                        &f_pApiInstance->pSharedInfo->DebugInfo.ulAfEventCbByteSize );
 
1791
                }
 
1792
 
 
1793
                break;
 
1794
 
 
1795
        case cOCT6100_TLV_TYPE_BUFFER_PLAYOUT_SKIP_IN_EVENTS:
 
1796
                
 
1797
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1798
                                                                                                  cOCT6100_TLV_MIN_LENGTH_BUFFER_PLAYOUT_SKIP_IN_EVENTS, 
 
1799
                                                                                                  cOCT6100_TLV_MAX_LENGTH_BUFFER_PLAYOUT_SKIP_IN_EVENTS );
 
1800
                if ( ulResult == cOCT6100_ERR_OK )
 
1801
                {
 
1802
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1803
                                                                                        f_ulTlvValueAddress, 
 
1804
                                                                                        &ulTempValue );
 
1805
 
 
1806
                        f_pApiInstance->pSharedInfo->ImageInfo.fBufferPlayoutSkipInEvents = TRUE;
 
1807
                }
 
1808
 
 
1809
                break;
 
1810
                
 
1811
        case cOCT6100_TLV_TYPE_ZZ_ENERGY_CHAN_STATS_BOFF:
 
1812
                
 
1813
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1814
                                                                                                  cOCT6100_TLV_MIN_LENGTH_ZZ_ENERGY_CHAN_STATS_BOFF, 
 
1815
                                                                                                  cOCT6100_TLV_MAX_LENGTH_ZZ_ENERGY_CHAN_STATS_BOFF );
 
1816
                if ( ulResult == cOCT6100_ERR_OK )
 
1817
                {
 
1818
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1819
                                                                                        f_ulTlvValueAddress, 
 
1820
                                                                                        &f_pApiInstance->pSharedInfo->MemoryMap.RinEnergyStatFieldOfst );
 
1821
 
 
1822
                        f_pApiInstance->pSharedInfo->ImageInfo.fRinEnergyStat = TRUE;
 
1823
                }
 
1824
 
 
1825
                break;
 
1826
 
 
1827
        case cOCT6100_TLV_TYPE_YY_ENERGY_CHAN_STATS_BOFF:
 
1828
                
 
1829
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1830
                                                                                                  cOCT6100_TLV_MIN_LENGTH_YY_ENERGY_CHAN_STATS_BOFF, 
 
1831
                                                                                                  cOCT6100_TLV_MAX_LENGTH_YY_ENERGY_CHAN_STATS_BOFF );
 
1832
                if ( ulResult == cOCT6100_ERR_OK )
 
1833
                {
 
1834
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1835
                                                                                        f_ulTlvValueAddress, 
 
1836
                                                                                        &f_pApiInstance->pSharedInfo->MemoryMap.SoutEnergyStatFieldOfst );
 
1837
 
 
1838
                        f_pApiInstance->pSharedInfo->ImageInfo.fSoutEnergyStat = TRUE;
 
1839
                }
 
1840
 
 
1841
                break;
 
1842
 
 
1843
        case cOCT6100_TLV_TYPE_DOUBLE_TALK_BEH_MODE:
 
1844
                
 
1845
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1846
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DOUBLE_TALK_BEH_MODE, 
 
1847
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DOUBLE_TALK_BEH_MODE );
 
1848
                if ( ulResult == cOCT6100_ERR_OK )
 
1849
                {
 
1850
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1851
                                                                                        f_ulTlvValueAddress, 
 
1852
                                                                                        &ulTempValue );
 
1853
 
 
1854
                        if ( ulTempValue != 0 )
 
1855
                                f_pApiInstance->pSharedInfo->ImageInfo.fDoubleTalkBehavior = TRUE;
 
1856
                        else
 
1857
                                f_pApiInstance->pSharedInfo->ImageInfo.fDoubleTalkBehavior = FALSE;
 
1858
 
 
1859
                }
 
1860
 
 
1861
                break;
 
1862
 
 
1863
        case cOCT6100_TLV_TYPE_DOUBLE_TALK_BEH_MODE_BOFF:
 
1864
                
 
1865
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1866
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DOUBLE_TALK_BEH_MODE_BOFF, 
 
1867
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DOUBLE_TALK_BEH_MODE_BOFF );
 
1868
                if ( ulResult == cOCT6100_ERR_OK )
 
1869
                {
 
1870
                        ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
 
1871
                                                                                        f_ulTlvValueAddress, 
 
1872
                                                                                        &f_pApiInstance->pSharedInfo->MemoryMap.DoubleTalkBehaviorFieldOfst );
 
1873
 
 
1874
                        f_pApiInstance->pSharedInfo->ImageInfo.fDoubleTalkBehaviorFieldOfst = TRUE;
 
1875
                }
 
1876
 
 
1877
                break;
 
1878
 
 
1879
        case cOCT6100_TLV_TYPE_SOUT_NOISE_BLEACHING:
 
1880
 
 
1881
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1882
                                                                                                  cOCT6100_TLV_MIN_LENGTH_SOUT_NOISE_BLEACHING, 
 
1883
                                                                                                  cOCT6100_TLV_MAX_LENGTH_SOUT_NOISE_BLEACHING );
 
1884
                if ( ulResult == cOCT6100_ERR_OK )
 
1885
                {
 
1886
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1887
                                                                                        f_ulTlvValueAddress, 
 
1888
                                                                                        &ulTempValue );
 
1889
 
 
1890
                        if ( ulTempValue != 0 )
 
1891
                                f_pApiInstance->pSharedInfo->ImageInfo.fSoutNoiseBleaching = TRUE;
 
1892
                        else
 
1893
                                f_pApiInstance->pSharedInfo->ImageInfo.fSoutNoiseBleaching = FALSE;
 
1894
 
 
1895
                }
 
1896
 
 
1897
                break;
 
1898
 
 
1899
        case cOCT6100_TLV_TYPE_NLP_STATISTICS:
 
1900
 
 
1901
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength, 
 
1902
                                                                                                  cOCT6100_TLV_MIN_LENGTH_NLP_STATISTICS, 
 
1903
                                                                                                  cOCT6100_TLV_MAX_LENGTH_NLP_STATISTICS );
 
1904
                if ( ulResult == cOCT6100_ERR_OK )
 
1905
                {
 
1906
                        ulResult = Oct6100ApiReadDword( f_pApiInstance,
 
1907
                                                                                        f_ulTlvValueAddress, 
 
1908
                                                                                        &ulTempValue );
 
1909
 
 
1910
                        if ( ulTempValue != 0 )
 
1911
                                f_pApiInstance->pSharedInfo->ImageInfo.fSinLevel = TRUE;
 
1912
                        else
 
1913
                                f_pApiInstance->pSharedInfo->ImageInfo.fSinLevel = FALSE;
 
1914
 
 
1915
                }
 
1916
 
 
1917
                break;
 
1918
 
 
1919
        default:        
 
1920
                /* Unknown TLV type field... check default length and nothing else. */
 
1921
                ulResult = Oct6100ApiTlvCheckLengthField( f_ulTlvFieldLength,
 
1922
                                                                                                  cOCT6100_TLV_MIN_LENGTH_DEFAULT,
 
1923
                                                                                                  cOCT6100_TLV_MAX_LENGTH_DEFAULT );
 
1924
                break;
 
1925
        }
 
1926
        
 
1927
        return ulResult;
 
1928
}
 
1929
#endif
 
1930
 
 
1931
 
 
1932
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
 
1933
 
 
1934
Function:               Oct6100ApiTlvCheckLengthField
 
1935
 
 
1936
Description:    This function validates the TLV length field.
 
1937
 
 
1938
-------------------------------------------------------------------------------
 
1939
|       Argument                |       Description
 
1940
-------------------------------------------------------------------------------
 
1941
f_ulTlvFieldLength              Length field read from the TLV.
 
1942
f_ulMinLengthValue              Minimum value supported for the TLV.
 
1943
f_ulMaxLengthValue              Maximum value supported for the TLV.
 
1944
 
 
1945
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
 
1946
#if !SKIP_Oct6100ApiTlvCheckLengthField
 
1947
UINT32 Oct6100ApiTlvCheckLengthField( 
 
1948
                                IN              UINT32                          f_ulTlvFieldLength,
 
1949
                                IN              UINT32                          f_ulMinLengthValue,
 
1950
                                IN              UINT32                          f_ulMaxLengthValue )
 
1951
{
 
1952
        /* Check if the value is too small. */
 
1953
        if ( f_ulTlvFieldLength < f_ulMinLengthValue )
 
1954
                return ( cOCT6100_ERR_FATAL_59 );
 
1955
 
 
1956
        /* Check if the value is too big. */
 
1957
        if ( f_ulTlvFieldLength > f_ulMaxLengthValue )
 
1958
                return ( cOCT6100_ERR_FATAL_5A );
 
1959
 
 
1960
        /* Check if the value is dword aligned. */
 
1961
        if ( ( f_ulTlvFieldLength % 4 ) != 0 )
 
1962
                return ( cOCT6100_ERR_OPEN_INVALID_TLV_LENGTH );
 
1963
        
 
1964
        return cOCT6100_ERR_OK;
 
1965
}
 
1966
#endif
 
1967
 
 
1968
 
 
1969
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
 
1970
 
 
1971
Function:               Oct6100ApiTlvReadBitOffsetStruct
 
1972
 
 
1973
Description:    This function extracts a bit offset structure from the TLV.
 
1974
 
 
1975
-------------------------------------------------------------------------------
 
1976
|       Argument                |       Description
 
1977
-------------------------------------------------------------------------------
 
1978
f_pApiInstance                  Pointer to API instance. This memory is used to keep the
 
1979
                                                present state of the chip and all its resources.
 
1980
 
 
1981
f_ulAddress                             Address where the read the TLV information.
 
1982
f_pBitOffsetStruct              Pointer to a bit offset stucture.
 
1983
 
 
1984
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
 
1985
#if !SKIP_Oct6100ApiTlvReadBitOffsetStruct
 
1986
UINT32 Oct6100ApiTlvReadBitOffsetStruct( 
 
1987
                                IN OUT  tPOCT6100_INSTANCE_API                  f_pApiInstance,
 
1988
                                IN              UINT32                                                  f_ulAddress,
 
1989
                                OUT             tPOCT6100_TLV_OFFSET                    f_pBitOffsetStruct )
 
1990
{
 
1991
        tOCT6100_READ_PARAMS    ReadParams;
 
1992
        UINT16  usReadData;
 
1993
        
 
1994
        UINT32  ulResult;
 
1995
        UINT32  ulOffsetValue;
 
1996
        UINT32  ulSizeValue;
 
1997
 
 
1998
        ReadParams.pProcessContext = f_pApiInstance->pProcessContext;
 
1999
 
 
2000
        ReadParams.ulUserChipId = f_pApiInstance->pSharedInfo->ChipConfig.ulUserChipId;
 
2001
        ReadParams.pusReadData = &usReadData;
 
2002
 
 
2003
        /*======================================================================*/
 
2004
        /* Read the first 16 bits of the TLV field. */
 
2005
 
 
2006
        ReadParams.ulReadAddress = f_ulAddress;
 
2007
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
2008
        if ( ulResult != cOCT6100_ERR_OK )
 
2009
                return ulResult;
 
2010
        
 
2011
        /* Save data. */
 
2012
        ulOffsetValue = usReadData << 16;
 
2013
 
 
2014
        /* Read the last word of the TLV type. */
 
2015
        ReadParams.ulReadAddress += 2;
 
2016
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
2017
        if ( ulResult != cOCT6100_ERR_OK )
 
2018
                return ulResult;
 
2019
 
 
2020
        /* Save data. */
 
2021
        ulOffsetValue |= usReadData;
 
2022
                
 
2023
        /*======================================================================*/
 
2024
        
 
2025
 
 
2026
        /*======================================================================*/
 
2027
        /* Read the first 16 bits of the TLV field. */
 
2028
 
 
2029
        ReadParams.ulReadAddress += 2;
 
2030
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
2031
        if ( ulResult != cOCT6100_ERR_OK )
 
2032
                return ulResult;
 
2033
        
 
2034
        /* Save data. */
 
2035
        ulSizeValue = usReadData << 16;
 
2036
 
 
2037
        /* Read the last word of the TLV type. */
 
2038
        ReadParams.ulReadAddress += 2;
 
2039
        mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
 
2040
        if ( ulResult != cOCT6100_ERR_OK )
 
2041
                return ulResult;
 
2042
 
 
2043
        /* Save data. */
 
2044
        ulSizeValue |= usReadData;
 
2045
 
 
2046
        /*======================================================================*/
 
2047
 
 
2048
        /* Set the structure fields. */
 
2049
        f_pBitOffsetStruct->usDwordOffset = (UINT16)(ulOffsetValue / 32);
 
2050
        f_pBitOffsetStruct->byBitOffset   = (UINT8) (32 - (ulOffsetValue % 32) - ulSizeValue);
 
2051
        f_pBitOffsetStruct->byFieldSize   = (UINT8) (ulSizeValue);
 
2052
 
 
2053
        return cOCT6100_ERR_OK;
 
2054
}
 
2055
#endif