accessoryservices/accessoryserver/src/accpolaudiodevicetopology/accpolaudiounitbase.cpp
changeset 0 4e1aa6a622a0
equal deleted inserted replaced
-1:000000000000 0:4e1aa6a622a0
       
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation for audio feature unit object.
       
    15 *
       
    16 */
       
    17 
       
    18 #include <accpolaudiounitbase.h>
       
    19 #include <accpolaudiotopologyobjectcon.h>
       
    20 #include <accpolvolumecontrol.h>
       
    21 #include <accpolmutecontrol.h>
       
    22 #include <accpolinputcontrol.h>
       
    23 #include "acc_debug.h"
       
    24 
       
    25 // -----------------------------------------------------------------------------
       
    26 // CAccPolAudioUnitBase::CAccPolAudioUnitBase
       
    27 // C++ default constructor can NOT contain any code, that
       
    28 // might leave.
       
    29 // -----------------------------------------------------------------------------
       
    30 //
       
    31 CAccPolAudioUnitBase::CAccPolAudioUnitBase(
       
    32     const TTopologyConObjectType aObjecType,
       
    33     CAccPolObjectCon* aObject ) :
       
    34     CAccPolObjectBase( aObjecType, aObject )
       
    35     {
       
    36     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::CAccPolAudioUnitBase() -Enter" );
       
    37     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::CAccPolAudioUnitBase() - Return" );
       
    38     }
       
    39 
       
    40 // -----------------------------------------------------------------------------
       
    41 // CAccPolAudioUnitBase::CAccPolAudioUnitBase
       
    42 // C++ default constructor can NOT contain any code, that
       
    43 // might leave.
       
    44 // -----------------------------------------------------------------------------
       
    45 //
       
    46 CAccPolAudioUnitBase::CAccPolAudioUnitBase( const TUint8 aUnitId,
       
    47     const TTopologyConObjectType aObjecType ) :
       
    48     CAccPolObjectBase( aObjecType )
       
    49     {
       
    50     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::CAccPolAudioUnitBase() - Enter" );
       
    51     iUnitId = aUnitId;
       
    52     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::CAccPolAudioUnitBase() - Return" );
       
    53     }
       
    54 
       
    55 // -----------------------------------------------------------------------------
       
    56 // CAccPolAudioUnitBase::CAccPolAudioUnitBase
       
    57 // C++ default constructor can NOT contain any code, that
       
    58 // might leave.
       
    59 // -----------------------------------------------------------------------------
       
    60 //
       
    61 CAccPolAudioUnitBase::CAccPolAudioUnitBase( const TUint8 aUnitId,
       
    62     const TUint8 aSourceId,
       
    63     const TTopologyConObjectType aObjecType ) :
       
    64     CAccPolObjectBase( aObjecType )
       
    65     {
       
    66     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::CAccPolAudioUnitBase() -Enter" );
       
    67     iUnitId = aUnitId;
       
    68     iSourceId.Append( aSourceId );
       
    69     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::CAccPolAudioUnitBase() - Return" );
       
    70     }
       
    71 
       
    72 // Destructor
       
    73 EXPORT_C CAccPolAudioUnitBase::~CAccPolAudioUnitBase()
       
    74     {
       
    75     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::~CAccPolAudioUnitBase() - Enter" );
       
    76     iSourceId.Close();
       
    77     TInt count = iAudioControls.Count();
       
    78     if( count > 0 )
       
    79         {
       
    80         for( TInt i = 0; i < count; i++ )
       
    81             {
       
    82             delete iAudioControls.operator[]( i );
       
    83             }
       
    84         }
       
    85     iAudioControls.Close();
       
    86     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::~CAccPolAudioUnitBase() - Return" );
       
    87     }
       
    88 
       
    89 // ---------------------------------------------------------------------------
       
    90 // CAccPolAudioUnitBase::operator()
       
    91 // ---------------------------------------------------------------------------
       
    92 //
       
    93 EXPORT_C CAccPolAudioUnitBase& CAccPolAudioUnitBase::operator=(
       
    94     const CAccPolAudioUnitBase& aAudioUnitBaseObject )
       
    95     {
       
    96     TRAP_IGNORE ( CopyL ( aAudioUnitBaseObject ) );
       
    97     
       
    98     return ( *this );
       
    99     }
       
   100 
       
   101 void CAccPolAudioUnitBase::CopyL ( const CAccPolAudioUnitBase& aAudioUnitBaseObject )
       
   102     {
       
   103     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::operator() - Enter" );
       
   104     // Copy base	
       
   105     CAccPolObjectBase::operator=( ( CAccPolObjectBase& )aAudioUnitBaseObject );
       
   106 
       
   107     //Copy Unit id
       
   108     iUnitId = aAudioUnitBaseObject.UnitId();
       
   109     RArray<TInt> sourceIds;
       
   110     CleanupClosePushL( sourceIds );
       
   111     
       
   112     //Copy source Ids
       
   113     aAudioUnitBaseObject.GetSourceIds( sourceIds );
       
   114 
       
   115     for( TInt i = 0; i < sourceIds.Count(); i++ )
       
   116         {
       
   117         iSourceId.AppendL( sourceIds.operator[]( i ) );
       
   118         }
       
   119 
       
   120     //Copy previous unit id
       
   121     iPreUnitId = aAudioUnitBaseObject.PreviousUnitId();
       
   122 
       
   123     //Copy audio controls.
       
   124     RPointerArray<CAccPolAudioControlBase> audioControls;
       
   125     CleanupClosePushL( audioControls );
       
   126     
       
   127     aAudioUnitBaseObject.GetAudioControlsL( audioControls );
       
   128     
       
   129     for( TInt j = 0; j < audioControls.Count(); j++ )
       
   130         {
       
   131         TUint8 objectType;
       
   132         objectType = audioControls.operator[]( j )->ObjectType();
       
   133 
       
   134         switch( objectType )
       
   135             {
       
   136             case EAccPolAudioVolumeControlObject:
       
   137                 {
       
   138                 CAccPolVolumeControl *volumeControl =
       
   139                     CAccPolVolumeControl::NewL();
       
   140                 CleanupStack::PushL( volumeControl );
       
   141                 *volumeControl
       
   142                     = *( CAccPolVolumeControl* )audioControls.operator[]( j );
       
   143                 iAudioControls.AppendL( volumeControl );
       
   144                 CleanupStack::Pop();
       
   145                 }
       
   146                 break;
       
   147 
       
   148             case EAccPolAudioMuteControlObject:
       
   149                 {
       
   150                 CAccPolMuteControl *muteControl = CAccPolMuteControl::NewL();
       
   151                 CleanupStack::PushL( muteControl );
       
   152                 *muteControl
       
   153                     = *( CAccPolMuteControl* )audioControls.operator[]( j );
       
   154                 iAudioControls.AppendL( muteControl );
       
   155                 CleanupStack::Pop();
       
   156                 }
       
   157                 break;
       
   158 
       
   159             case EAccPolAudioInputControlObject:
       
   160                 {
       
   161                 CAccPolInputControl *inputControl = CAccPolInputControl::NewL();
       
   162                 CleanupStack::PushL( inputControl );
       
   163                 *inputControl
       
   164                     = *( CAccPolInputControl* )audioControls.operator[]( j );
       
   165                 iAudioControls.AppendL( inputControl );
       
   166                 CleanupStack::Pop();
       
   167                 }
       
   168                 break;
       
   169 
       
   170             default:
       
   171                 {
       
   172                 User::Leave( KErrNotSupported );
       
   173                 }
       
   174                 break;
       
   175             }
       
   176         }
       
   177 
       
   178     CleanupStack::PopAndDestroy (); //audioControls...dont use ResetAndDestroy on this!
       
   179     CleanupStack::PopAndDestroy (); //sourceIds
       
   180         
       
   181     
       
   182     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::operator() - Return" );
       
   183     }
       
   184 
       
   185 // ---------------------------------------------------------------------------
       
   186 // CAccPolAudioUnitBase::PreviousUnitId
       
   187 // ---------------------------------------------------------------------------
       
   188 //
       
   189 TUint8 CAccPolAudioUnitBase::PreviousUnitId() const
       
   190     {
       
   191     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::PreviousUnitId() - Enter" );
       
   192     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::PreviousUnitId() - Return %d", iPreUnitId );
       
   193     return iPreUnitId;
       
   194     }
       
   195 
       
   196 // ---------------------------------------------------------------------------
       
   197 // CAccPolAudioUnitBase::SetPreviousUnitId
       
   198 // ---------------------------------------------------------------------------
       
   199 //
       
   200 void CAccPolAudioUnitBase::SetPreviousUnitId( TUint8 aPreUnitId )
       
   201     {
       
   202     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SetPreviousUnitId() - Enter" );
       
   203     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SetPreviousUnitId() - PreUnit Id %d", aPreUnitId );
       
   204     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SetPreviousUnitId() - Return" );
       
   205     iPreUnitId = aPreUnitId;
       
   206     }
       
   207 
       
   208 // ---------------------------------------------------------------------------
       
   209 // CAccPolAudioUnitBase::UnitId
       
   210 // ---------------------------------------------------------------------------
       
   211 //
       
   212 EXPORT_C TUint8 CAccPolAudioUnitBase::UnitId() const
       
   213     {
       
   214     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::UnitId() - Enter" );
       
   215     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::UnitId() - Return %d", iUnitId );
       
   216     return iUnitId;
       
   217     }
       
   218 
       
   219 // ---------------------------------------------------------------------------
       
   220 // CAccPolAudioUnitBase::SourceId
       
   221 // ---------------------------------------------------------------------------
       
   222 //
       
   223 EXPORT_C TUint8 CAccPolAudioUnitBase::SourceId() const
       
   224     {
       
   225     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SourceId() - Enter" );
       
   226     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SourceId() - Return %d", iSourceId.operator[]( 0 ) );
       
   227     return ( TUint8 )iSourceId.operator[]( 0 );
       
   228     }
       
   229 
       
   230 // ---------------------------------------------------------------------------
       
   231 // CAccPolAudioUnitBase::GetSourceIds
       
   232 // ---------------------------------------------------------------------------
       
   233 //
       
   234 EXPORT_C void CAccPolAudioUnitBase::GetSourceIds( RArray<TInt>& aSourceIds ) const
       
   235     {
       
   236     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SourceIds() - Enter" );
       
   237     TInt count = iSourceId.Count();
       
   238     for( TInt i = 0; i < count; i++ )
       
   239         {
       
   240         API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SourceIds() Return SourceId=%d", iSourceId.operator[]( i ) );
       
   241         aSourceIds.Append( ( TInt )iSourceId.operator[]( i ) );
       
   242         }
       
   243     }
       
   244 
       
   245 // ---------------------------------------------------------------------------
       
   246 // CAccPolAudioUnitBase::SourceIdCount
       
   247 // ---------------------------------------------------------------------------
       
   248 //
       
   249 EXPORT_C TInt CAccPolAudioUnitBase::SourceIdCount() const
       
   250     {
       
   251     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SourceIdCount() -Enter" );
       
   252     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::SourceIdCount() return count=%d", iSourceId.Count() );
       
   253     return iSourceId.Count();
       
   254     }
       
   255 
       
   256 // ---------------------------------------------------------------------------
       
   257 // CAccPolAudioUnitBase::AddSourceIdL
       
   258 // ---------------------------------------------------------------------------
       
   259 //
       
   260 EXPORT_C void CAccPolAudioUnitBase::AddSourceIdL( TUint8 aSourceId )
       
   261     {
       
   262     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::AddSourceIdL() Enter - Source Id=%d", aSourceId );
       
   263     iSourceId.AppendL( aSourceId );
       
   264     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::AddSourceIdL() - Return" );
       
   265     }
       
   266 
       
   267 // ---------------------------------------------------------------------------
       
   268 // CAccPolAudioUnitBase::GetAudioControlL
       
   269 // ---------------------------------------------------------------------------
       
   270 //
       
   271 EXPORT_C TBool CAccPolAudioUnitBase::GetAudioControlL(
       
   272     TTopologyConObjectType aObjectType,
       
   273     TUint32 aChannel,
       
   274     CAccPolAudioControlBase*& aAudioControl ) const
       
   275     {
       
   276     API_TRACE_2( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioControlL() - Object type=%d, Channel number=%d", aObjectType, aChannel );
       
   277     TBool bFound( EFalse );
       
   278     aAudioControl = NULL;
       
   279     if( aObjectType == EAccPolAudioVolumeControlObject || aObjectType
       
   280         == EAccPolAudioMuteControlObject )
       
   281         {
       
   282         TInt count = iAudioControls.Count();
       
   283         for( TInt i = 0; i < count; i++ )
       
   284             {
       
   285             if( iAudioControls.operator[]( i )->ObjectType() == aObjectType
       
   286                 && iAudioControls.operator[]( i )->Channel() == aChannel )
       
   287                 {
       
   288                 aAudioControl = iAudioControls.operator[]( i );
       
   289                 bFound = ETrue;
       
   290                 break;
       
   291                 }
       
   292             }
       
   293         }
       
   294     else
       
   295         {
       
   296         User::Leave( KErrGeneral );
       
   297         }
       
   298     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioControlL() - Return=%d", bFound );
       
   299     return bFound;
       
   300     }
       
   301 // ---------------------------------------------------------------------------
       
   302 // CAccPolAudioUnitBase::GetAudioControlsL
       
   303 // ---------------------------------------------------------------------------
       
   304 //
       
   305 EXPORT_C void CAccPolAudioUnitBase::GetAudioControlsL( TUint32 aChannel,
       
   306     RPointerArray<CAccPolAudioControlBase>& aAudioControls ) const
       
   307     {
       
   308     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioControlsL() - Channel number=%d", aChannel );
       
   309     TInt count = iAudioControls.Count();
       
   310     API_TRACE_1( "[AccFW: ACCPOLICY] CAccPolAudioUnitBase::GetAudioControlsL() - count=%d", count );
       
   311     for( TInt i = 0; i < count; i++ )
       
   312         {
       
   313         if( iAudioControls.operator[]( i )->Channel() == aChannel )
       
   314             {
       
   315             aAudioControls.AppendL( iAudioControls.operator[]( i ) );
       
   316             }
       
   317         }
       
   318     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioControlL() Return" );
       
   319     }
       
   320 
       
   321 // ---------------------------------------------------------------------------
       
   322 // CAccPolAudioUnitBase::GetAudioControlsL
       
   323 // ---------------------------------------------------------------------------
       
   324 //
       
   325 EXPORT_C void CAccPolAudioUnitBase::GetAudioControlsL(
       
   326     RPointerArray<CAccPolAudioControlBase>& aAudioControls ) const
       
   327     {
       
   328     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioControlsL() -Enter" );
       
   329     TInt count = iAudioControls.Count();
       
   330     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioControlsL() - count=%d", count );
       
   331     for( TInt i = 0; i < count; i++ )
       
   332         {
       
   333         aAudioControls.AppendL( iAudioControls.operator[]( i ) );
       
   334         }
       
   335     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioControlsL() - Return" );
       
   336     }
       
   337 
       
   338 // ---------------------------------------------------------------------------
       
   339 // CAccPolAudioUnitBase::GetAudioControlsL
       
   340 // ---------------------------------------------------------------------------
       
   341 //
       
   342 EXPORT_C TBool CAccPolAudioUnitBase::GetNextAudioUnitL(
       
   343     CAccPolAudioUnitBase*& aAudioUnit ) const
       
   344     {
       
   345     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetNextAudioUnitL() - Enter" );
       
   346     RPointerArray<CAccPolAudioUnitBase> audioUnits;
       
   347     TBool bFound = EFalse;
       
   348 
       
   349     reinterpret_cast<CAccPolAudioTopologyObjectCon*> ( iObjectContainer )->GetAudioUnitsL(
       
   350         audioUnits );
       
   351 
       
   352     TInt count = audioUnits.Count();
       
   353 
       
   354     aAudioUnit = NULL;
       
   355     for( TInt i = 0; i < count; i++ )
       
   356         {
       
   357 
       
   358         if( iSourceId.Count() != 0 ) //JNI
       
   359             {
       
   360             API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] SourceId - count=%d", iSourceId.Count() );
       
   361             TInt sourceid = iSourceId.operator[]( 0 );
       
   362             if( iSourceId.operator[]( 0 )
       
   363                 == audioUnits.operator[]( i )->UnitId() )
       
   364                 {
       
   365                 aAudioUnit = audioUnits.operator[]( i );
       
   366                 aAudioUnit->SetPreviousUnitId( UnitId() );
       
   367                 bFound = ETrue;
       
   368                 break;
       
   369                 }
       
   370             }
       
   371         }
       
   372 
       
   373     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetNextAudioUnitL() - Return=%d", bFound );
       
   374     return bFound;
       
   375     }
       
   376 
       
   377 // ---------------------------------------------------------------------------
       
   378 // CAccPolAudioUnitBase::GetAudioControlsL
       
   379 // ---------------------------------------------------------------------------
       
   380 //
       
   381 EXPORT_C TBool CAccPolAudioUnitBase::GetPreviousAudioUnitL(
       
   382     CAccPolAudioUnitBase*& aAudioUnit ) const
       
   383     {
       
   384     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetPreviousAudioUnitL() - Enter" );
       
   385     TBool bFound = EFalse;
       
   386     RPointerArray<CAccPolAudioUnitBase> audioUnits;
       
   387 
       
   388     reinterpret_cast<CAccPolAudioTopologyObjectCon*> ( iObjectContainer )->GetAudioUnitsL(
       
   389         audioUnits );
       
   390     TInt count = audioUnits.Count();
       
   391 
       
   392     aAudioUnit = NULL;
       
   393     for( TInt i = 0; i < count; i++ )
       
   394         {
       
   395         if( PreviousUnitId() == audioUnits.operator[]( i )->UnitId() )
       
   396             {
       
   397             aAudioUnit = audioUnits.operator[]( i );
       
   398             bFound = ETrue;
       
   399             break;
       
   400             }
       
   401         }
       
   402     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetPreviousAudioUnitL() - Return=%d", bFound );
       
   403     return bFound;
       
   404     }
       
   405 
       
   406 // ---------------------------------------------------------------------------
       
   407 // CAccPolAudioUnitBase::GetAudioControlsL
       
   408 // ---------------------------------------------------------------------------
       
   409 //
       
   410 EXPORT_C void CAccPolAudioUnitBase::GetAudioUnitListL(
       
   411     RPointerArray<CAccPolAudioUnitBase>& aAudioUnits ) const
       
   412     {
       
   413     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioUnitListL() - Enter" );
       
   414     RPointerArray<CAccPolAudioUnitBase> audioUnits;
       
   415 
       
   416     reinterpret_cast<CAccPolAudioTopologyObjectCon*> ( iObjectContainer )->GetAudioUnitsL(
       
   417         audioUnits );
       
   418     TInt audioUnitCount = audioUnits.Count();
       
   419     TInt sourceIdCount = iSourceId.Count();
       
   420     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioUnitListL() - Source id count=%d", sourceIdCount );
       
   421     for( TInt i = 0; i < sourceIdCount; i++ )
       
   422         {
       
   423         for( TInt j = 0; j < audioUnitCount; j++ )
       
   424             {
       
   425             if( iSourceId.operator[]( i )
       
   426                 == audioUnits.operator[]( j )->UnitId() )
       
   427                 {
       
   428                 aAudioUnits.AppendL( audioUnits.operator[]( j ) );
       
   429                 audioUnits.operator[]( j )->SetPreviousUnitId( UnitId() ); //JNI               
       
   430                 }
       
   431             }
       
   432         }
       
   433     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioUnitListL() - Return" );
       
   434     }
       
   435 
       
   436 // ---------------------------------------------------------------------------
       
   437 // CAccPolAudioUnitBase::AddControlL
       
   438 // ---------------------------------------------------------------------------
       
   439 //
       
   440 EXPORT_C void CAccPolAudioUnitBase::AddControlL(
       
   441     CAccPolAudioControlBase& aAudioControl )
       
   442     {
       
   443     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::AddControlL() - Enter" );
       
   444     aAudioControl.SetUnitId( iUnitId );
       
   445 
       
   446     TUint8 objectType;
       
   447     objectType = aAudioControl.ObjectType();
       
   448 
       
   449     switch( objectType )
       
   450         {
       
   451         case EAccPolAudioVolumeControlObject:
       
   452             {
       
   453             CAccPolVolumeControl *volumeControl = CAccPolVolumeControl::NewL();
       
   454             CleanupStack::PushL( volumeControl );
       
   455             *volumeControl = ( CAccPolVolumeControl& )aAudioControl;
       
   456             iAudioControls.AppendL( volumeControl );
       
   457             CleanupStack::Pop();
       
   458             }
       
   459             break;
       
   460 
       
   461         case EAccPolAudioMuteControlObject:
       
   462             {
       
   463             CAccPolMuteControl *muteControl = CAccPolMuteControl::NewL();
       
   464             CleanupStack::PushL( muteControl );
       
   465             *muteControl = ( CAccPolMuteControl& )aAudioControl;
       
   466             iAudioControls.AppendL( muteControl );
       
   467             CleanupStack::Pop();
       
   468             }
       
   469             break;
       
   470 
       
   471         case EAccPolAudioInputControlObject:
       
   472             {
       
   473             CAccPolInputControl *inputControl = CAccPolInputControl::NewL();
       
   474             CleanupStack::PushL( inputControl );
       
   475             *inputControl = ( CAccPolInputControl& )aAudioControl;
       
   476             iAudioControls.AppendL( inputControl );
       
   477             CleanupStack::Pop();
       
   478             }
       
   479             break;
       
   480 
       
   481         default:
       
   482             {
       
   483             User::Leave( KErrNotSupported );
       
   484             }
       
   485             break;
       
   486         }
       
   487 
       
   488     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::AddControlL() - Return" );
       
   489     }
       
   490 // ---------------------------------------------------------------------------
       
   491 // CAccPolObjectBase::ExternalizeBaseLd
       
   492 // ---------------------------------------------------------------------------
       
   493 //
       
   494 EXPORT_C void CAccPolAudioUnitBase::ExternalizeAudioUnitBaseL(
       
   495     RWriteStream& aStream ) const
       
   496     {
       
   497     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::ExternalizeAudioUnitBaseL() - Enter" );
       
   498     TInt count( KErrNone );
       
   499     //Add data
       
   500     aStream.WriteUint8L( iUnitId );
       
   501     count = iSourceId.Count();
       
   502     aStream.WriteInt8L( iSourceId.Count() );
       
   503     for( TInt i = 0; i < count; i++ )
       
   504         {
       
   505         aStream.WriteUint8L( ( TUint8 )iSourceId.operator[]( i ) );
       
   506         }
       
   507     count = iAudioControls.Count();
       
   508     aStream.WriteInt8L( count );
       
   509 
       
   510     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::ExternalizeAudioUnitBaseL - Unit id         = %d", iUnitId );
       
   511     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::ExternalizeAudioUnitBaseL - Source id count = %d", iSourceId.Count() );
       
   512     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::ExternalizeAudioUnitBaseL - Audio controls count = %d", iAudioControls.Count() );
       
   513 
       
   514     for( TInt i = 0; i < iAudioControls.Count(); i++ )
       
   515         {
       
   516         iAudioControls[i]->ExternalizeL( aStream );
       
   517         }
       
   518     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::ExternalizeBaseL - Return" );
       
   519     }
       
   520 
       
   521 // ---------------------------------------------------------------------------
       
   522 // CAccPolObjectBase::InternalizeBaseL
       
   523 // ---------------------------------------------------------------------------
       
   524 //
       
   525 EXPORT_C void CAccPolAudioUnitBase::InternalizeAudioUnitBaseL(
       
   526     RReadStream& aStream )
       
   527     {
       
   528     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::InternalizeAudioUnitBaseL() - Enter" );
       
   529     TInt count( KErrNone );
       
   530     iUnitId = aStream.ReadUint8L();
       
   531     count = aStream.ReadInt8L();
       
   532     for( TInt i = 0; i < count; i++ )
       
   533         {
       
   534         iSourceId.Append( ( TInt )aStream.ReadUint8L() );
       
   535         }
       
   536 
       
   537     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::InternalizeAudioUnitBaseL - Unit id         = %d", iUnitId );
       
   538     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::InternalizeAudioUnitBaseL - Source id count = %d", iSourceId.Count() );
       
   539 
       
   540     count = aStream.ReadInt8L();
       
   541     for( TInt i = 0; i < count; i++ )
       
   542         {
       
   543         //Object type
       
   544         TUint8 objectType = aStream.ReadUint8L();
       
   545         switch( objectType )
       
   546             {
       
   547             case EAccPolAudioVolumeControlObject:
       
   548                 {
       
   549                 CAccPolVolumeControl *volumeControl =
       
   550                     CAccPolVolumeControl::NewLC();
       
   551                 volumeControl->InternalizeL( aStream );
       
   552                 this->AddControlL( *volumeControl );
       
   553                 CleanupStack::PopAndDestroy( volumeControl );
       
   554                 }
       
   555                 break;
       
   556 
       
   557             case EAccPolAudioMuteControlObject:
       
   558                 {
       
   559                 CAccPolMuteControl *muteControl = CAccPolMuteControl::NewLC();
       
   560                 muteControl->InternalizeL( aStream );
       
   561                 this->AddControlL( *muteControl );
       
   562                 CleanupStack::PopAndDestroy( muteControl );
       
   563                 }
       
   564                 break;
       
   565 
       
   566             case EAccPolAudioInputControlObject:
       
   567                 {
       
   568                 CAccPolInputControl *inputControl =
       
   569                     CAccPolInputControl::NewLC();
       
   570                 inputControl->InternalizeL( aStream );
       
   571                 this->AddControlL( *inputControl );
       
   572                 CleanupStack::PopAndDestroy( inputControl );
       
   573                 }
       
   574                 break;
       
   575 
       
   576             default:
       
   577                 {
       
   578                 User::Leave( KErrNotSupported );
       
   579                 }
       
   580                 break;
       
   581             }
       
   582         }
       
   583     API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::InternalizeAudioUnitBaseL - Audio controls count = %d", iAudioControls.Count() );
       
   584 
       
   585     API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::InternalizeAudioUnitBaseL - Return" );
       
   586     }