~vibhavp/ubuntu/raring/dahdi-tools/merge-from-debian

« back to all changes in this revision

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

  • Committer: Vibhav Pant
  • Date: 2012-12-26 17:23:16 UTC
  • mfrom: (2.1.6 sid)
  • Revision ID: vibhavp@gmail.com-20121226172316-o2jojsfcnr0aqrme
* Merge from Debian unstable. Remaining changes:
  - Bug Fix: If linux-headers are not installed, don't block, and print
    information for the user.
  - added debian/dahdi.postinst
  - added --error-handler=init_failed to debian/rules
  - debian/control: Added gawk as dependency for dkms build (LP: #493304)
  - Changes from Debian:
    - debian/control: Change Maintainer
    - debian/control: Removed Uploaders field.
    - debian/control: Removed Debian Vcs-Svn entry and replaced with
      ubuntu-voip Vcs-Bzr, to reflect divergence in packages.
    - debian/control: Package dahdi Depends on dahdi-dkms | dahdi-source 

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