1
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
5
Copyright (c) 2001-2007 Octasic Inc.
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.
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.
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
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.
27
$Octasic_Release: OCT612xAPI-01.00-PR49 $
29
$Octasic_Revision: 113 $
31
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
34
/***************************** INCLUDE FILES *******************************/
38
#include "oct6100api/oct6100_defines.h"
39
#include "oct6100api/oct6100_errors.h"
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"
50
#include "oct6100api/oct6100_interrupts_pub.h"
52
#include "oct6100api/oct6100_channel_pub.h"
53
#include "oct6100api/oct6100_chip_open_pub.h"
54
#include "oct6100api/oct6100_channel_inst.h"
56
#include "oct6100_chip_open_priv.h"
57
#include "oct6100_miscellaneous_priv.h"
58
#include "oct6100_tlv_priv.h"
60
/**************************** PRIVATE FUNCTIONS ****************************/
63
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
65
Function: Oct6100ApiProcessTlvRegion
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
71
The API will read this region until it finds a TLV type of 0 with
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.
80
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
81
#if !SKIP_Oct6100ApiProcessTlvRegion
82
UINT32 Oct6100ApiProcessTlvRegion(
83
tPOCT6100_INSTANCE_API f_pApiInstance )
85
tOCT6100_READ_PARAMS ReadParams;
89
UINT32 ulTlvTypeField;
90
UINT32 ulTlvLengthField;
91
UINT32 ulTlvWritingTimeoutCount = 0;
92
UINT32 ulConditionFlag = TRUE;
94
ReadParams.pProcessContext = f_pApiInstance->pProcessContext;
96
ReadParams.ulUserChipId = f_pApiInstance->pSharedInfo->ChipConfig.ulUserChipId;
97
ReadParams.pusReadData = &usReadData;
99
/* Set the address of the first TLV type. */
100
ReadParams.ulReadAddress = cOCT6100_TLV_BASE;
101
ReadParams.ulReadAddress += 2;
103
/* Wait for the TLV configuration to be configured in memory. */
104
while ( ulConditionFlag )
106
/* Read the TLV write done flag. */
107
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
108
if ( ulResult != cOCT6100_ERR_OK )
111
if ( usReadData & 0x1 )
114
ulTlvWritingTimeoutCount++;
115
if ( ulTlvWritingTimeoutCount == 0x100000 )
116
return cOCT6100_ERR_TLV_TIMEOUT;
119
/*======================================================================*/
120
/* Read the first 16 bits of the TLV type. */
122
ReadParams.ulReadAddress += 2;
123
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
124
if ( ulResult != cOCT6100_ERR_OK )
128
ulTlvTypeField = usReadData << 16;
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 )
137
ulTlvTypeField |= usReadData;
139
/*======================================================================*/
142
/*======================================================================*/
143
/* Now, read the TLV field length. */
145
ReadParams.ulReadAddress += 2;
146
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
147
if ( ulResult != cOCT6100_ERR_OK )
151
ulTlvLengthField = usReadData << 16;
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 )
160
ulTlvLengthField |= usReadData;
162
/* Modify the address to point at the TLV value field. */
163
ReadParams.ulReadAddress += 2;
165
/*======================================================================*/
167
/* Read the TLV value until the end of TLV region is reached. */
168
while( !((ulTlvTypeField == 0) && (ulTlvLengthField == 0)) )
170
ulResult = Oct6100ApiInterpretTlvEntry( f_pApiInstance,
173
ReadParams.ulReadAddress );
174
if ( ulResult != cOCT6100_ERR_OK )
177
/* Set the address to after the TLV value. */
178
ReadParams.ulReadAddress += ulTlvLengthField;
180
/*======================================================================*/
181
/* Read the first 16 bits of the TLV type. */
183
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
184
if ( ulResult != cOCT6100_ERR_OK )
188
ulTlvTypeField = usReadData << 16;
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 )
197
ulTlvTypeField |= usReadData;
199
/*======================================================================*/
202
/*======================================================================*/
203
/* Now, read the TLV field length. */
205
ReadParams.ulReadAddress += 2;
206
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
207
if ( ulResult != cOCT6100_ERR_OK )
211
ulTlvLengthField = usReadData << 16;
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 )
220
ulTlvLengthField |= usReadData;
222
ReadParams.ulReadAddress += 2;
224
/*======================================================================*/
227
return cOCT6100_ERR_OK;
232
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
234
Function: Oct6100ApiInterpretTlvEntry
236
Description: This function will interpret a TLV entry from the chip. All
237
known TLV types by the API are exhaustively listed here.
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.
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.
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 )
257
tOCT6100_READ_PARAMS ReadParams;
258
UINT32 ulResult = cOCT6100_ERR_OK;
261
UINT32 ulTempValue = 0;
263
ReadParams.pProcessContext = f_pApiInstance->pProcessContext;
265
ReadParams.ulUserChipId = f_pApiInstance->pSharedInfo->ChipConfig.ulUserChipId;
266
ReadParams.pusReadData = &usReadData;
268
/* Find out how to interpret the TLV value according to the TLV type. */
269
switch( f_ulTlvFieldType )
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 )
277
ReadParams.ulReadAddress = f_ulTlvValueAddress;
279
for( i = 0; i < (f_ulTlvFieldLength/2); i++ )
281
/* Perform the actual read. */
282
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
283
if ( ulResult != cOCT6100_ERR_OK )
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);
289
/* Modify the address. */
290
ReadParams.ulReadAddress += 2;
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 )
301
/* Perform the actual read. */
302
ulResult = Oct6100ApiReadDword( f_pApiInstance,
304
&f_pApiInstance->pSharedInfo->ImageInfo.ulBuildId );
305
if ( ulResult != cOCT6100_ERR_OK )
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 )
316
ulResult = Oct6100ApiReadDword( f_pApiInstance,
318
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemBase );
319
if ( ulResult != cOCT6100_ERR_OK )
322
f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemBase &= 0x0FFFFFFF;
324
/* Modify the base address to incorporate the external memory offset. */
325
f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemBase += cOCT6100_EXTERNAL_MEM_BASE_ADDRESS;
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 )
335
ulResult = Oct6100ApiReadDword( f_pApiInstance,
337
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainMemSize );
338
if ( ulResult != cOCT6100_ERR_OK )
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 )
349
ulResult = Oct6100ApiReadDword( f_pApiInstance,
351
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainIoMemOfst );
352
if ( ulResult != cOCT6100_ERR_OK )
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 )
363
ulResult = Oct6100ApiReadDword( f_pApiInstance,
365
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinCBMemOfst );
366
if ( ulResult != cOCT6100_ERR_OK )
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 )
377
ulResult = Oct6100ApiReadDword( f_pApiInstance,
379
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinCBMemSize );
380
if ( ulResult != cOCT6100_ERR_OK )
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 )
391
ulResult = Oct6100ApiReadDword( f_pApiInstance,
393
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSinCBMemOfst );
394
if ( ulResult != cOCT6100_ERR_OK )
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 )
405
ulResult = Oct6100ApiReadDword( f_pApiInstance,
407
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSinCBMemSize );
408
if ( ulResult != cOCT6100_ERR_OK )
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 )
419
ulResult = Oct6100ApiReadDword( f_pApiInstance,
421
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutCBMemOfst );
422
if ( ulResult != cOCT6100_ERR_OK )
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 )
433
ulResult = Oct6100ApiReadDword( f_pApiInstance,
435
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutCBMemSize );
436
if ( ulResult != cOCT6100_ERR_OK )
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 )
447
ulResult = Oct6100ApiReadDword( f_pApiInstance,
449
&f_pApiInstance->pSharedInfo->MemoryMap.ulFreeMemBaseAddress );
450
if ( ulResult != cOCT6100_ERR_OK )
453
f_pApiInstance->pSharedInfo->MemoryMap.ulFreeMemBaseAddress &= 0x0FFFFFFF;
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 )
464
ulResult = Oct6100ApiReadDword( f_pApiInstance,
466
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainIoStatsOfst );
467
if ( ulResult != cOCT6100_ERR_OK )
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 )
478
ulResult = Oct6100ApiReadDword( f_pApiInstance,
480
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainIoStatsSize );
481
if ( ulResult != cOCT6100_ERR_OK )
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 )
492
ulResult = Oct6100ApiReadDword( f_pApiInstance,
494
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanRootConfOfst );
495
if ( ulResult != cOCT6100_ERR_OK )
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 )
507
ulResult = Oct6100ApiReadDword( f_pApiInstance,
509
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinPlayoutMemOfst );
510
if ( ulResult != cOCT6100_ERR_OK )
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 )
521
ulResult = Oct6100ApiReadDword( f_pApiInstance,
523
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainRinPlayoutMemSize );
524
if ( ulResult != cOCT6100_ERR_OK )
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 )
535
ulResult = Oct6100ApiReadDword( f_pApiInstance,
537
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutPlayoutMemOfst );
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 )
547
ulResult = Oct6100ApiReadDword( f_pApiInstance,
549
&f_pApiInstance->pSharedInfo->MemoryMap.ulChanMainSoutPlayoutMemSize );
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 )
559
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
561
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinWritePtrOfst );
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 )
571
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
573
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinIgnoreSkipCleanOfst );
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 )
583
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
585
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinSkipPtrOfst );
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 )
595
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
597
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutWritePtrOfst );
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 )
607
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
609
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutIgnoreSkipCleanOfst );
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 )
619
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
621
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutSkipPtrOfst );
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 )
631
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
633
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinReadPtrOfst );
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 )
643
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
645
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutReadPtrOfst );
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 )
655
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
657
&f_pApiInstance->pSharedInfo->MemoryMap.ConferencingNoiseReductionOfst );
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 )
667
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
669
&f_pApiInstance->pSharedInfo->MemoryMap.AdaptiveNoiseReductionOfst );
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 )
679
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
681
&f_pApiInstance->pSharedInfo->MemoryMap.RinDcOffsetRemovalOfst );
683
/* Set flag indicating that the feature is present.*/
684
f_pApiInstance->pSharedInfo->ImageInfo.fRinDcOffsetRemoval = TRUE;
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 )
693
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
695
&f_pApiInstance->pSharedInfo->MemoryMap.SinDcOffsetRemovalOfst );
697
/* Set flag indicating that the feature is present.*/
698
f_pApiInstance->pSharedInfo->ImageInfo.fSinDcOffsetRemoval = TRUE;
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 )
707
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
709
&f_pApiInstance->pSharedInfo->MemoryMap.RinLevelControlOfst );
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 )
719
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
721
&f_pApiInstance->pSharedInfo->MemoryMap.SoutLevelControlOfst );
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 )
731
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
733
&f_pApiInstance->pSharedInfo->MemoryMap.ComfortNoiseModeOfst );
735
/* Set flag indicating that the feature is present.*/
736
f_pApiInstance->pSharedInfo->ImageInfo.fComfortNoise = TRUE;
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 )
745
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
747
&f_pApiInstance->pSharedInfo->MemoryMap.NlpControlFieldOfst );
749
/* Set flag indicating that the feature is present.*/
750
f_pApiInstance->pSharedInfo->ImageInfo.fNlpControl = TRUE;
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 )
759
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
761
&f_pApiInstance->pSharedInfo->MemoryMap.VadControlFieldOfst );
763
/* Set flag indicating that the feature is present.*/
764
f_pApiInstance->pSharedInfo->ImageInfo.fSilenceSuppression = TRUE;
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 )
773
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
775
&f_pApiInstance->pSharedInfo->MemoryMap.PouchTailDisplOfst );
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 )
785
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
787
&f_pApiInstance->pSharedInfo->MemoryMap.PouchBootInstructionOfst );
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 )
797
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
799
&f_pApiInstance->pSharedInfo->MemoryMap.PouchBootResultOfst );
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 )
809
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
811
&f_pApiInstance->pSharedInfo->MemoryMap.ToneDisablerControlOfst );
814
f_pApiInstance->pSharedInfo->ImageInfo.fToneDisabler = TRUE;
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 )
823
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
825
&f_pApiInstance->pSharedInfo->MemoryMap.TailDisplEnableOfst );
828
f_pApiInstance->pSharedInfo->ImageInfo.fTailDisplacement = TRUE;
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 )
837
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
839
&f_pApiInstance->pSharedInfo->MemoryMap.NlpTrivialFieldOfst );
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 )
850
ulResult = Oct6100ApiReadDword( f_pApiInstance,
855
f_pApiInstance->pSharedInfo->DebugInfo.usRecordMemIndex = (UINT16)( ulTempValue & 0xFFFF );
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 )
865
ulResult = Oct6100ApiReadDword( f_pApiInstance,
870
if ( ulTempValue == 0 )
871
f_pApiInstance->pSharedInfo->ImageInfo.fAdpcm = FALSE;
873
f_pApiInstance->pSharedInfo->ImageInfo.fAdpcm = TRUE;
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 )
883
ulResult = Oct6100ApiReadDword( f_pApiInstance,
888
if ( ulTempValue == 0 )
889
f_pApiInstance->pSharedInfo->ImageInfo.fConferencing = FALSE;
891
f_pApiInstance->pSharedInfo->ImageInfo.fConferencing = TRUE;
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 )
901
ulResult = Oct6100ApiReadDword( f_pApiInstance,
903
&f_pApiInstance->pSharedInfo->ImageInfo.ulToneProfileNumber );
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 )
914
UINT32 ulTailDispTempValue;
915
ulResult = Oct6100ApiReadDword( f_pApiInstance,
917
&ulTailDispTempValue );
919
ulTailDispTempValue += 1; /* Convert the value into milliseconds.*/
920
ulTailDispTempValue *= 16; /* value was given in multiple of 16 ms. */
922
if ( ulTailDispTempValue >= 128 )
923
f_pApiInstance->pSharedInfo->ImageInfo.usMaxTailDisplacement = (UINT16)( ulTailDispTempValue - 128 );
925
f_pApiInstance->pSharedInfo->ImageInfo.usMaxTailDisplacement = 0;
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 )
937
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
939
&f_pApiInstance->pSharedInfo->MemoryMap.AecFieldOfst );
943
f_pApiInstance->pSharedInfo->ImageInfo.fAecEnabled = TRUE;
945
/* Acoustic echo cancellation available! */
946
f_pApiInstance->pSharedInfo->ImageInfo.fAcousticEcho = TRUE;
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 )
956
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
958
&f_pApiInstance->pSharedInfo->MemoryMap.PcmLeakFieldOfst );
961
f_pApiInstance->pSharedInfo->ImageInfo.fNonLinearityBehaviorA = TRUE;
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 )
970
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
972
&f_pApiInstance->pSharedInfo->MemoryMap.DefaultErlFieldOfst );
976
f_pApiInstance->pSharedInfo->ImageInfo.fDefaultErl = TRUE;
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 )
986
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
988
&f_pApiInstance->pSharedInfo->MemoryMap.ToneRemovalFieldOfst );
992
f_pApiInstance->pSharedInfo->ImageInfo.fToneRemoval = TRUE;
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 )
1004
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1005
f_ulTlvValueAddress,
1006
&f_pApiInstance->pSharedInfo->MemoryMap.ChanMainIoMaxEchoPointOfst );
1010
f_pApiInstance->pSharedInfo->ImageInfo.fMaxEchoPoint = TRUE;
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 )
1020
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1021
f_ulTlvValueAddress,
1022
&f_pApiInstance->pSharedInfo->MemoryMap.NlpConvCapFieldOfst );
1026
f_pApiInstance->pSharedInfo->ImageInfo.fNonLinearityBehaviorB = TRUE;
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 )
1036
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1037
f_ulTlvValueAddress,
1038
&f_pApiInstance->pSharedInfo->DebugInfo.ulDebugEventSize );
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 )
1049
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1050
f_ulTlvValueAddress,
1053
f_pApiInstance->pSharedInfo->ImageInfo.fConferencingNoiseReduction = (UINT8)( ulTempValue & 0xFF );
1055
if ( f_pApiInstance->pSharedInfo->ImageInfo.fConferencingNoiseReduction == TRUE )
1057
/* Set flag indicating that the dominant speaker feature is present. */
1058
f_pApiInstance->pSharedInfo->ImageInfo.fDominantSpeakerEnabled = TRUE;
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 )
1070
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1071
f_ulTlvValueAddress,
1074
f_pApiInstance->pSharedInfo->ImageInfo.usMaxTailLength = (UINT16)( ulTempValue & 0xFFFF );
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 )
1085
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1086
f_ulTlvValueAddress,
1089
f_pApiInstance->pSharedInfo->ImageInfo.usMaxNumberOfChannels = (UINT16)( ulTempValue & 0xFFFF );
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 )
1100
/* Set flag indicating that the feature is present. */
1101
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1102
f_ulTlvValueAddress,
1104
f_pApiInstance->pSharedInfo->ImageInfo.fBufferPlayout = (UINT8)( ulTempValue & 0xFF );
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 )
1115
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1116
f_ulTlvValueAddress,
1117
&f_pApiInstance->pSharedInfo->MemoryMap.DominantSpeakerFieldOfst );
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 )
1128
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1129
f_ulTlvValueAddress,
1130
&f_pApiInstance->pSharedInfo->MemoryMap.PerChanTailDisplacementFieldOfst );
1132
f_pApiInstance->pSharedInfo->ImageInfo.fPerChannelTailDisplacement = TRUE;
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 )
1143
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1144
f_ulTlvValueAddress,
1147
f_pApiInstance->pSharedInfo->ImageInfo.fAdaptiveNoiseReduction = (UINT8)( ulTempValue & 0xFF );
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 )
1158
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1159
f_ulTlvValueAddress,
1162
f_pApiInstance->pSharedInfo->ImageInfo.fMusicProtection = (UINT8)( ulTempValue & 0xFF );
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 )
1173
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1174
f_ulTlvValueAddress,
1175
&f_pApiInstance->pSharedInfo->MemoryMap.AecDefaultErlFieldOfst );
1177
f_pApiInstance->pSharedInfo->ImageInfo.fAecDefaultErl = TRUE;
1182
case cOCT6100_TLV_TYPE_Z_ALC_TARGET_BOFF:
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 )
1189
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1190
f_ulTlvValueAddress,
1191
&f_pApiInstance->pSharedInfo->MemoryMap.RinAutoLevelControlTargetOfst );
1193
f_pApiInstance->pSharedInfo->ImageInfo.fRinAutoLevelControl = TRUE;
1198
case cOCT6100_TLV_TYPE_Y_ALC_TARGET_BOFF:
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 )
1205
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1206
f_ulTlvValueAddress,
1207
&f_pApiInstance->pSharedInfo->MemoryMap.SoutAutoLevelControlTargetOfst );
1209
f_pApiInstance->pSharedInfo->ImageInfo.fSoutAutoLevelControl = TRUE;
1214
case cOCT6100_TLV_TYPE_Z_HLC_TARGET_BOFF:
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 )
1221
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1222
f_ulTlvValueAddress,
1223
&f_pApiInstance->pSharedInfo->MemoryMap.RinHighLevelCompensationThresholdOfst );
1225
f_pApiInstance->pSharedInfo->ImageInfo.fRinHighLevelCompensation = TRUE;
1230
case cOCT6100_TLV_TYPE_Y_HLC_TARGET_BOFF:
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 )
1237
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1238
f_ulTlvValueAddress,
1239
&f_pApiInstance->pSharedInfo->MemoryMap.SoutHighLevelCompensationThresholdOfst );
1241
f_pApiInstance->pSharedInfo->ImageInfo.fSoutHighLevelCompensation = TRUE;
1246
case cOCT6100_TLV_TYPE_ALC_HLC_STATUS_BOFF:
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 )
1253
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1254
f_ulTlvValueAddress,
1255
&f_pApiInstance->pSharedInfo->MemoryMap.AlcHlcStatusOfst );
1257
f_pApiInstance->pSharedInfo->ImageInfo.fAlcHlcStatus = TRUE;
1262
case cOCT6100_TLV_TYPE_Z_PLAYOUT_HARD_SKIP_BOFF:
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 )
1269
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1270
f_ulTlvValueAddress,
1271
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutRinHardSkipOfst );
1273
f_pApiInstance->pSharedInfo->ImageInfo.fRinBufferPlayoutHardSkip = TRUE;
1278
case cOCT6100_TLV_TYPE_Y_PLAYOUT_HARD_SKIP_BOFF:
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 )
1285
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1286
f_ulTlvValueAddress,
1287
&f_pApiInstance->pSharedInfo->MemoryMap.PlayoutSoutHardSkipOfst );
1289
f_pApiInstance->pSharedInfo->ImageInfo.fSoutBufferPlayoutHardSkip = TRUE;
1294
case cOCT6100_TLV_TYPE_AFT_FIELD_BOFF:
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 )
1301
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1302
f_ulTlvValueAddress,
1303
&f_pApiInstance->pSharedInfo->MemoryMap.AftControlOfst );
1305
f_pApiInstance->pSharedInfo->ImageInfo.fAftControl = TRUE;
1310
case cOCT6100_TLV_TYPE_VOICE_DETECTED_STAT_BOFF:
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 )
1317
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1318
f_ulTlvValueAddress,
1319
&f_pApiInstance->pSharedInfo->MemoryMap.SinVoiceDetectedStatOfst );
1321
f_pApiInstance->pSharedInfo->ImageInfo.fSinVoiceDetectedStat = TRUE;
1326
case cOCT6100_TLV_TYPE_GAIN_APPLIED_RIN_STAT_BOFF:
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 )
1333
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1334
f_ulTlvValueAddress,
1335
&f_pApiInstance->pSharedInfo->MemoryMap.RinAppliedGainStatOfst );
1337
f_pApiInstance->pSharedInfo->ImageInfo.fRinAppliedGainStat = TRUE;
1342
case cOCT6100_TLV_TYPE_GAIN_APPLIED_SOUT_STAT_BOFF:
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 )
1349
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1350
f_ulTlvValueAddress,
1351
&f_pApiInstance->pSharedInfo->MemoryMap.SoutAppliedGainStatOfst );
1353
f_pApiInstance->pSharedInfo->ImageInfo.fSoutAppliedGainStat = TRUE;
1358
case cOCT6100_TLV_TYPE_MAX_ADAPT_ALE_BOFF:
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 )
1365
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1366
f_ulTlvValueAddress,
1367
&f_pApiInstance->pSharedInfo->MemoryMap.AdaptiveAleOfst );
1369
f_pApiInstance->pSharedInfo->ImageInfo.fListenerEnhancement = TRUE;
1374
case cOCT6100_TLV_TYPE_RIN_ANR_BOFF:
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 )
1381
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1382
f_ulTlvValueAddress,
1383
&f_pApiInstance->pSharedInfo->MemoryMap.RinAnrOfst );
1385
f_pApiInstance->pSharedInfo->ImageInfo.fRoutNoiseReduction = TRUE;
1389
case cOCT6100_TLV_TYPE_RIN_ANR_VALUE:
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 )
1396
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1397
f_ulTlvValueAddress,
1398
&f_pApiInstance->pSharedInfo->MemoryMap.RinAnrValOfst );
1400
f_pApiInstance->pSharedInfo->ImageInfo.fRoutNoiseReductionLevel = TRUE;
1404
case cOCT6100_TLV_TYPE_RIN_MUTE_BOFF:
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 )
1411
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1412
f_ulTlvValueAddress,
1413
&f_pApiInstance->pSharedInfo->MemoryMap.RinMuteOfst );
1415
f_pApiInstance->pSharedInfo->ImageInfo.fRinMute = TRUE;
1420
case cOCT6100_TLV_TYPE_SIN_MUTE_BOFF:
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 )
1427
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1428
f_ulTlvValueAddress,
1429
&f_pApiInstance->pSharedInfo->MemoryMap.SinMuteOfst );
1431
f_pApiInstance->pSharedInfo->ImageInfo.fSinMute = TRUE;
1436
case cOCT6100_TLV_TYPE_NUMBER_PLAYOUT_EVENTS:
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 )
1443
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1444
f_ulTlvValueAddress,
1447
f_pApiInstance->pSharedInfo->ImageInfo.byMaxNumberPlayoutEvents = (UINT8)( ulTempValue & 0xFF );
1452
case cOCT6100_TLV_TYPE_ANR_SNR_IMPROVEMENT_BOFF:
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 )
1459
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1460
f_ulTlvValueAddress,
1461
&f_pApiInstance->pSharedInfo->MemoryMap.AnrSnrEnhancementOfst );
1463
f_pApiInstance->pSharedInfo->ImageInfo.fAnrSnrEnhancement = TRUE;
1468
case cOCT6100_TLV_TYPE_ANR_AGRESSIVITY_BOFF:
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 )
1475
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1476
f_ulTlvValueAddress,
1477
&f_pApiInstance->pSharedInfo->MemoryMap.AnrVoiceNoiseSegregationOfst );
1479
f_pApiInstance->pSharedInfo->ImageInfo.fAnrVoiceNoiseSegregation = TRUE;
1484
case cOCT6100_TLV_TYPE_CHAN_TAIL_LENGTH_BOFF:
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 )
1491
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1492
f_ulTlvValueAddress,
1493
&f_pApiInstance->pSharedInfo->MemoryMap.PerChanTailLengthFieldOfst );
1495
f_pApiInstance->pSharedInfo->ImageInfo.fPerChannelTailLength = TRUE;
1500
case cOCT6100_TLV_TYPE_CHAN_VQE_TONE_DISABLING_BOFF:
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 )
1507
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1508
f_ulTlvValueAddress,
1509
&f_pApiInstance->pSharedInfo->MemoryMap.ToneDisablerVqeActivationDelayOfst );
1511
f_pApiInstance->pSharedInfo->ImageInfo.fToneDisablerVqeActivationDelay = TRUE;
1516
case cOCT6100_TLV_TYPE_AF_TAIL_DISP_VALUE_BOFF:
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 )
1523
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1524
f_ulTlvValueAddress,
1525
&f_pApiInstance->pSharedInfo->MemoryMap.AfTailDisplacementFieldOfst );
1527
f_pApiInstance->pSharedInfo->ImageInfo.fAfTailDisplacement = TRUE;
1533
case cOCT6100_TLV_TYPE_POUCH_COUNTER_BOFF:
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 )
1540
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1541
f_ulTlvValueAddress,
1542
&f_pApiInstance->pSharedInfo->MemoryMap.PouchCounterFieldOfst );
1544
f_pApiInstance->pSharedInfo->DebugInfo.fPouchCounter = TRUE;
1549
case cOCT6100_TLV_TYPE_AEC_TAIL_LENGTH_BOFF:
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 )
1556
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1557
f_ulTlvValueAddress,
1558
&f_pApiInstance->pSharedInfo->MemoryMap.AecTailLengthFieldOfst );
1560
f_pApiInstance->pSharedInfo->ImageInfo.fAecTailLength = TRUE;
1565
case cOCT6100_TLV_TYPE_MATRIX_DWORD_BASE:
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 )
1572
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1573
f_ulTlvValueAddress,
1574
&f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixBaseAddress );
1576
/* Mask the upper bits set by the firmware. */
1577
f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixBaseAddress &= 0x0FFFFFFF;
1579
/* Modify the base address to incorporate the external memory offset. */
1580
f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixBaseAddress += cOCT6100_EXTERNAL_MEM_BASE_ADDRESS;
1585
case cOCT6100_TLV_TYPE_DEBUG_CHAN_STATS_BYTE_SIZE:
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 )
1592
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1593
f_ulTlvValueAddress,
1594
&f_pApiInstance->pSharedInfo->DebugInfo.ulDebugChanStatsByteSize );
1599
case cOCT6100_TLV_TYPE_DEBUG_CHAN_LITE_STATS_BYTE_SIZE:
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 )
1606
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1607
f_ulTlvValueAddress,
1608
&f_pApiInstance->pSharedInfo->DebugInfo.ulDebugChanLiteStatsByteSize );
1613
case cOCT6100_TLV_TYPE_HOT_CHANNEL_SELECT_DWORD_BASE:
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 )
1620
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1621
f_ulTlvValueAddress,
1622
&f_pApiInstance->pSharedInfo->DebugInfo.ulHotChannelSelectBaseAddress );
1627
case cOCT6100_TLV_TYPE_MATRIX_TIMESTAMP_DWORD_BASE:
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 )
1634
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1635
f_ulTlvValueAddress,
1636
&f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixTimestampBaseAddress );
1641
case cOCT6100_TLV_TYPE_MATRIX_WP_DWORD_BASE:
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 )
1648
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1649
f_ulTlvValueAddress,
1650
&f_pApiInstance->pSharedInfo->DebugInfo.ulMatrixWpBaseAddress );
1655
case cOCT6100_TLV_TYPE_AF_WRITE_PTR_BYTE_OFFSET:
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 )
1662
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1663
f_ulTlvValueAddress,
1664
&f_pApiInstance->pSharedInfo->DebugInfo.ulAfWritePtrByteOffset );
1669
case cOCT6100_TLV_TYPE_RECORDED_PCM_EVENT_BYTE_SIZE:
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 )
1676
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1677
f_ulTlvValueAddress,
1678
&f_pApiInstance->pSharedInfo->DebugInfo.ulRecordedPcmEventByteSize );
1683
case cOCT6100_TLV_TYPE_IS_ISR_CALLED_BOFF:
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 )
1690
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1691
f_ulTlvValueAddress,
1692
&f_pApiInstance->pSharedInfo->MemoryMap.IsIsrCalledFieldOfst );
1694
f_pApiInstance->pSharedInfo->DebugInfo.fIsIsrCalledField = TRUE;
1699
case cOCT6100_TLV_TYPE_MUSIC_PROTECTION_ENABLE_BOFF:
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 )
1706
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1707
f_ulTlvValueAddress,
1708
&f_pApiInstance->pSharedInfo->MemoryMap.MusicProtectionFieldOfst );
1710
f_pApiInstance->pSharedInfo->ImageInfo.fMusicProtectionConfiguration = TRUE;
1715
case cOCT6100_TLV_TYPE_IDLE_CODE_DETECTION_ENABLE:
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 )
1722
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1723
f_ulTlvValueAddress,
1726
f_pApiInstance->pSharedInfo->ImageInfo.fIdleCodeDetection = (UINT8)( ulTempValue & 0xFF );
1731
case cOCT6100_TLV_TYPE_IDLE_CODE_DETECTION_BOFF:
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 )
1738
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1739
f_ulTlvValueAddress,
1740
&f_pApiInstance->pSharedInfo->MemoryMap.IdleCodeDetectionFieldOfst );
1742
f_pApiInstance->pSharedInfo->ImageInfo.fIdleCodeDetectionConfiguration = TRUE;
1747
case cOCT6100_TLV_TYPE_IMAGE_TYPE:
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 )
1754
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1755
f_ulTlvValueAddress,
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;
1763
f_pApiInstance->pSharedInfo->ImageInfo.byImageType = (UINT8)( ulTempValue & 0xFF );
1768
case cOCT6100_TLV_TYPE_MAX_WIRELINE_CHANNELS:
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 )
1775
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1776
f_ulTlvValueAddress,
1782
case cOCT6100_TLV_TYPE_AF_EVENT_CB_SIZE:
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 )
1789
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1790
f_ulTlvValueAddress,
1791
&f_pApiInstance->pSharedInfo->DebugInfo.ulAfEventCbByteSize );
1796
case cOCT6100_TLV_TYPE_BUFFER_PLAYOUT_SKIP_IN_EVENTS:
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 )
1803
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1804
f_ulTlvValueAddress,
1807
f_pApiInstance->pSharedInfo->ImageInfo.fBufferPlayoutSkipInEvents = TRUE;
1812
case cOCT6100_TLV_TYPE_ZZ_ENERGY_CHAN_STATS_BOFF:
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 )
1819
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1820
f_ulTlvValueAddress,
1821
&f_pApiInstance->pSharedInfo->MemoryMap.RinEnergyStatFieldOfst );
1823
f_pApiInstance->pSharedInfo->ImageInfo.fRinEnergyStat = TRUE;
1828
case cOCT6100_TLV_TYPE_YY_ENERGY_CHAN_STATS_BOFF:
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 )
1835
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1836
f_ulTlvValueAddress,
1837
&f_pApiInstance->pSharedInfo->MemoryMap.SoutEnergyStatFieldOfst );
1839
f_pApiInstance->pSharedInfo->ImageInfo.fSoutEnergyStat = TRUE;
1844
case cOCT6100_TLV_TYPE_DOUBLE_TALK_BEH_MODE:
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 )
1851
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1852
f_ulTlvValueAddress,
1855
if ( ulTempValue != 0 )
1856
f_pApiInstance->pSharedInfo->ImageInfo.fDoubleTalkBehavior = TRUE;
1858
f_pApiInstance->pSharedInfo->ImageInfo.fDoubleTalkBehavior = FALSE;
1864
case cOCT6100_TLV_TYPE_DOUBLE_TALK_BEH_MODE_BOFF:
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 )
1871
ulResult = Oct6100ApiTlvReadBitOffsetStruct( f_pApiInstance,
1872
f_ulTlvValueAddress,
1873
&f_pApiInstance->pSharedInfo->MemoryMap.DoubleTalkBehaviorFieldOfst );
1875
f_pApiInstance->pSharedInfo->ImageInfo.fDoubleTalkBehaviorFieldOfst = TRUE;
1880
case cOCT6100_TLV_TYPE_SOUT_NOISE_BLEACHING:
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 )
1887
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1888
f_ulTlvValueAddress,
1891
if ( ulTempValue != 0 )
1892
f_pApiInstance->pSharedInfo->ImageInfo.fSoutNoiseBleaching = TRUE;
1894
f_pApiInstance->pSharedInfo->ImageInfo.fSoutNoiseBleaching = FALSE;
1900
case cOCT6100_TLV_TYPE_NLP_STATISTICS:
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 )
1907
ulResult = Oct6100ApiReadDword( f_pApiInstance,
1908
f_ulTlvValueAddress,
1911
if ( ulTempValue != 0 )
1912
f_pApiInstance->pSharedInfo->ImageInfo.fSinLevel = TRUE;
1914
f_pApiInstance->pSharedInfo->ImageInfo.fSinLevel = FALSE;
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 );
1933
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
1935
Function: Oct6100ApiTlvCheckLengthField
1937
Description: This function validates the TLV length field.
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.
1946
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
1947
#if !SKIP_Oct6100ApiTlvCheckLengthField
1948
UINT32 Oct6100ApiTlvCheckLengthField(
1949
IN UINT32 f_ulTlvFieldLength,
1950
IN UINT32 f_ulMinLengthValue,
1951
IN UINT32 f_ulMaxLengthValue )
1953
/* Check if the value is too small. */
1954
if ( f_ulTlvFieldLength < f_ulMinLengthValue )
1955
return ( cOCT6100_ERR_FATAL_59 );
1957
/* Check if the value is too big. */
1958
if ( f_ulTlvFieldLength > f_ulMaxLengthValue )
1959
return ( cOCT6100_ERR_FATAL_5A );
1961
/* Check if the value is dword aligned. */
1962
if ( ( f_ulTlvFieldLength % 4 ) != 0 )
1963
return ( cOCT6100_ERR_OPEN_INVALID_TLV_LENGTH );
1965
return cOCT6100_ERR_OK;
1970
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
1972
Function: Oct6100ApiTlvReadBitOffsetStruct
1974
Description: This function extracts a bit offset structure from the TLV.
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.
1982
f_ulAddress Address where the read the TLV information.
1983
f_pBitOffsetStruct Pointer to a bit offset stucture.
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 )
1992
tOCT6100_READ_PARAMS ReadParams;
1996
UINT32 ulOffsetValue;
1999
ReadParams.pProcessContext = f_pApiInstance->pProcessContext;
2001
ReadParams.ulUserChipId = f_pApiInstance->pSharedInfo->ChipConfig.ulUserChipId;
2002
ReadParams.pusReadData = &usReadData;
2004
/*======================================================================*/
2005
/* Read the first 16 bits of the TLV field. */
2007
ReadParams.ulReadAddress = f_ulAddress;
2008
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
2009
if ( ulResult != cOCT6100_ERR_OK )
2013
ulOffsetValue = usReadData << 16;
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 )
2022
ulOffsetValue |= usReadData;
2024
/*======================================================================*/
2027
/*======================================================================*/
2028
/* Read the first 16 bits of the TLV field. */
2030
ReadParams.ulReadAddress += 2;
2031
mOCT6100_DRIVER_READ_API( ReadParams, ulResult );
2032
if ( ulResult != cOCT6100_ERR_OK )
2036
ulSizeValue = usReadData << 16;
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 )
2045
ulSizeValue |= usReadData;
2047
/*======================================================================*/
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);
2054
return cOCT6100_ERR_OK;