--- a/systemswstubs/ssyreference/src/ssyreferenceconfig.cpp Tue Sep 07 08:19:48 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,948 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Configuration implementation of this SSY
-*
-*/
-
-
-#include <sensrvsensorchannels.h>
-#include <sensrvchanneldatatypes.h>
-#include <sensrvtypes.h>
-#include <f32file.h>
-#include <gmxmldocument.h>
-#include <gmxmlelement.h>
-
-#include "ssyreferencecontrol.h"
-#include "ssyreferenceconfig.h"
-#include "ssyreferencetrace.h"
-
-
-// ======== CONSTANTS =======
-_LIT( KSsyReferenceCfgFileOrig, "Z:\\private\\1020507E\\reference\\SsyReferenceConfig.xml" );
-_LIT( KSsyReferenceCfgFileExt, "C:\\ssyreference\\SsyReferenceConfig.xml" );
-
-// Config file definitions
-
-// Maximum attribute lenghth
-const TInt KSsyRefMaxAttribLength = 20;
-
-// TAG DEFINITIONS
-_LIT( KSsyRefRootTag, "SsyReferenceConfig" ); // Ssy general information tag
-_LIT( KSsyRefGeneralInfoTag, "SsyGeneralInformation" ); // Ssy general information tag
-_LIT( KSsyRefChannelInfoGroupTag, "ChannelInformationGroup" ); // Channel information group tag
-_LIT( KSsyRefChannelItemTag, "ChannelItem" ); // Channel item tag
-_LIT( KSsyRefChannelDataTag, "ChannelData" ); // Channel data tag
-_LIT( KSsyRefChannelDataItemTag, "ChannelDataItem" ); // Channel data item tag
-
-_LIT( KSsyRefProperties, "Properties" ); // Properties tag
-_LIT( KSsyRefPropertyItem, "PropertyItem" ); // PropertyItem tag
-
-// Data item definitions
-_LIT( KSsyRefAxisDataItemTag, "SsyRefChannelDataAxis" ); // SsyRefChannelDataAxis data item tag
-_LIT( KSsyRefXAxis, "XAxis" ); // XAxis from SsyRefChannelDataAxis
-_LIT( KSsyRefYAxis, "YAxis" ); // YAxis from SsyRefChannelDataAxis
-_LIT( KSsyRefZAxis, "ZAxis" ); // ZAxis from SsyRefChannelDataAxis
-
-_LIT( KSsyRefTappingDataItemTag, "SsyRefChannelDataTapping" ); // SsyRefChannelDataTapping data item tag
-_LIT( KSsyRefDirection, "Direction" ); // Direction from SsyRefChannelDataTapping
-
-_LIT( KSsyRefProximityDataItemTag, "SsyRefChannelDataProximity" ); // SsyRefChannelDataProximity data item tag
-_LIT( KSsyRefProximityState, "ProximityState" ); // ProximityStatus from SsyRefChannelDataProximity
-
-_LIT( KSsyRefAmbientLightDataItemTag, "SsyRefChannelDataAmbientLight" ); // SsyRefChannelDataAmbientLight data item tag
-_LIT( KSsyRefAmbientLightState, "AmbientLightState" ); // AmbientLightStatus from SsyRefChannelDataAmbientLight
-
-_LIT( KSsyRefMagneticAxisDataItemTag, "SsyRefChannelDataMagneticAxis" ); // SsyRefChannelDataMagneticAxis data item tag
-_LIT( KSsyRefXAxisCalib, "XAxisCalib" ); // XAxis from SsyRefChannelDataMagneticAxis
-_LIT( KSsyRefYAxisCalib, "YAxisCalib" ); // YAxis from SsyRefChannelDataMagneticAxis
-_LIT( KSsyRefZAxisCalib, "ZAxisCalib" ); // ZAxis from SsyRefChannelDataMagneticAxis
-
-// ATTRIBUTE DEFINITIONS
-_LIT( KSsyRefChannelCount, "ChannelCount" ); // Channel count from ChannelInformationGroup
-_LIT( KSsyRefChannelId, "ChannelId" ); // Channel ID from ChannelItem
-_LIT( KSsyRefContextType, "ContextType" ); // Context type from ChannelItem
-_LIT( KSsyRefQuantity, "Quantity" ); // Quantity from ChannelItem
-_LIT( KSsyRefChannelType, "ChannelType" ); // ChannelType from ChannelItem
-_LIT( KSsyRefLocation, "Location" ); // Location from ChannelItem
-_LIT( KSsyRefVendorId, "Vendor" ); // Vendor from ChannelItem
-
-
-// Channel data item specific attribute definitions
-_LIT( KSsyRefStartInterval, "StartIntervalMs" ); // StartInterval from ChannelData
-_LIT( KSsyRefDataItemCount, "count" ); // count from ChannelDataItem
-_LIT( KSsyRefDataTypeID, "DataTypeId" ); // DataTypeId from ChannelDataItem
-_LIT( KSsyRefInterval, "IntervalMs" ); // IntervalMs from ChannelDataItem
-
-// Property spesific attributes
-_LIT( KSsyRefPropertyId, "PropertyId" ); // PropertyId from PropertyItem
-_LIT( KSsyRefArrayIndex, "ArrayIndex" ); // ArrayIndex from PropertyItem
-_LIT( KSsyRefItemIndex, "ItemIndex" ); // ItemIndex from PropertyItem
-_LIT( KSsyRefPropertyValue, "PropertyValue" ); // PropertyValue from PorpertyItem
-_LIT( KSsyRefPropertyType, "PropertyType" ); // PropertyType from PropertyItem
-_LIT( KSsyRefMaxValue, "MaxValue" ); // MaxValue from PropertyItem
-_LIT( KSsyRefMinValue, "MinValue" ); // MinValue from PorpertyItem
-_LIT( KSsyRefReadOnly, "ReadOnly" ); // ReadOnly from PropertyItem
-
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig C++ constructor
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceConfig::CSsyReferenceConfig() :
- CActive( EPriorityMuchLess )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::CSsyReferenceConfig()" ) ) );
- CActiveScheduler::Add( this );
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::CSsyReferenceConfig() - return" ) ) );
- }
-
-
-// ---------------------------------------------------------------------------
-// Symbian 2nd phase constructor
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::ConstructL()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ConstructL()" ) ) );
- // Create config file parser
- iConfigParser = CMDXMLParser::NewL( this );
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ConstructL() - return" ) ) );
- }
-
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::NewL
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceConfig* CSsyReferenceConfig::NewL()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::NewL()" ) ) );
- CSsyReferenceConfig* self = new ( ELeave ) CSsyReferenceConfig();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::NewL() - return" ) ) );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceConfig::~CSsyReferenceConfig()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::~CSsyReferenceConfig()" ) ) );
-
- if ( iConfigParser )
- {
- delete iConfigParser;
- iConfigParser = NULL;
- }
-
- if ( iGenralInfoElement )
- {
- delete iGenralInfoElement;
- iGenralInfoElement = NULL;
- }
-
- if ( iChannelGroupElement )
- {
- delete iChannelGroupElement;
- iChannelGroupElement = NULL;
- }
-
- if ( iSsyReferenceConfig )
- {
- delete iSsyReferenceConfig;
- iSsyReferenceConfig = NULL;
- }
-
- if ( iConfigFile )
- {
- delete iConfigFile;
- iConfigFile = NULL;
- }
-
- iChannelPairArray.Reset();
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::~CSsyReferenceConfig() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::InitConfig
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::InitConfigL()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::InitConfig()" ) ) );
-
- // Open config file
- RFs fileSession;
- User::LeaveIfError( fileSession.Connect() );
-
- // Locate extrenal file...
- RFile file;
- TInt err( file.Open( fileSession, KSsyReferenceCfgFileExt, EFileRead ) );
- file.Close();
-
- // Check is external file found
- if ( KErrNone == err )
- {
- // Use SSY with external configuration
- iConfigParser->ParseFile( fileSession, KSsyReferenceCfgFileExt );
- }
- else
- {
- // Use SSY with original configuration
-
- // Start parsing file and wait notification to ParseFileCompleteL
- // XML Parser takes ownership of the RFs and closes it when file is parsed
- iConfigParser->ParseFile( fileSession, KSsyReferenceCfgFileOrig );
- }
-
- iConfigFileParsed = EFalse;
-
- // This active object has very low priority since XML parser uses Active objects also,
- // so it is mandatory to let XML parser to complete sooner than this active object
- IssueRequest();
- iSchedulerWait.Start(); // Blocks until file is parsed
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::InitConfig() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::IssueRequest
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::IssueRequest( TInt aError )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::IssueRequest()" ) ) );
- // Provides synchronous function calls to be handled as asynchronous
- if ( !IsActive() )
- {
- SetActive();
- TRequestStatus *s = &iStatus;
- User::RequestComplete( s, aError );
- }
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::IssueRequest() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::RunL
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::RunL()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::RunL() - %i" ), iStatus.Int() ) );
-
- if ( iConfigFileParsed )
- {
- // Stop blocking
- iSchedulerWait.AsyncStop();
- }
- else
- {
- // Continue RunL loop
- IssueRequest();
- }
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::RunL() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::DoCancel
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::DoCancel()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::DoCancel()" ) ) );
-
- // Stop blocking
- iSchedulerWait.AsyncStop();
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::DoCancel() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CSsyReferenceConfig::RunError( TInt /*aError*/ )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::RunError()" ) ) );
-
- // Handle possible errors here and return KErrNone to prevent SSY from panic
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::RunError() - return" ) ) );
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::ParseFileCompleteL
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::ParseFileCompleteL()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ParseFileCompleteL()" ) ) );
-
- ERROR_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ParseFileCompleteL(): parse error=%d", iConfigParser->Error() ) ) );
-
- // if the parser fails with KErrNoMemory, increase the default heap size for SSY's (key 3) in the repository 1020507E.txt exported by this component
- __ASSERT_DEBUG( iConfigParser->ErrorSeverity() != EXMLFatal, User::Invariant() ); // OK to continue if not a fatal error
-
- // First get document
- iConfigFile = iConfigParser->DetachXMLDoc();
- // Then get document element
- CMDXMLElement* documentElement = iConfigFile->DocumentElement();
- // Get root element, 'SsyReferenceConfig'
- iSsyReferenceConfig = documentElement->FirstChildOfType( KSsyRefRootTag );
- // Get gereral information element
- iGenralInfoElement = iSsyReferenceConfig->FirstChildOfType( KSsyRefGeneralInfoTag );
- // Get channel information group element
- iChannelGroupElement = iSsyReferenceConfig->FirstChildOfType( KSsyRefChannelInfoGroupTag );
- // Get channel count
- iChannelCount = GetAttributeIntValue( *iChannelGroupElement, KSsyRefChannelCount );
-
- // No need to delete documentElement, it is owned by iConfigFile.
- documentElement = NULL;
- iConfigFileParsed = ETrue;
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ParseFileCompleteL() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetAttributeIntValue
-// ---------------------------------------------------------------------------
-//
-TInt CSsyReferenceConfig::GetAttributeIntValue( CMDXMLElement& aElement, const TDesC& aAttrib )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeIntValue()" ) ) );
- COMPONENT_TRACE( ( _L( " Element: %s", aElement.NodeName() ) ) );
- COMPONENT_TRACE( ( _L( " Attribute: %s", aAttrib ) ) );
-
- TInt intValue( 0 );
-
- // Check availability
- if ( aElement.IsAttributeSpecified( aAttrib ) )
- {
- // Buffer to where to read value
- TBufC<KSsyRefMaxAttribLength> buffer( KNullDesC );
- TPtrC ptr( buffer );
-
- // Read attribute value
- aElement.GetAttribute( aAttrib, ptr );
-
- // Cast literal value into TInt
- TLex lexValue( ptr );
- lexValue.Val( intValue );
- }
-
- COMPONENT_TRACE( ( _L( " IntValue: %i", intValue ) ) );
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeIntValue() - return" ) ) );
- return intValue;
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetAttributeStrValue
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::GetAttributeStrValue( CMDXMLElement& aElement, const TDesC& aAttrib, TDes8& aTarget )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeStrValue()" ) ) );
- COMPONENT_TRACE( ( _L( " Element: %s", aElement.NodeName() ) ) );
- COMPONENT_TRACE( ( _L( " Attribute: %s", aAttrib ) ) );
-
- // Check availability
- if ( aElement.IsAttributeSpecified( aAttrib ) )
- {
- // Buffer to where to read value
- TBufC<KSsyRefMaxAttribLength> buffer( KNullDesC );
- TPtrC ptr( buffer );
-
- // Read attribute value
- aElement.GetAttribute( aAttrib, ptr );
-
- // Copy string from 16-bit descriptor to 8-bit descriptor
- aTarget.Copy( ptr );
- }
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeStrValue() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetAttributeHexValue
-// ---------------------------------------------------------------------------
-//
-TUint CSsyReferenceConfig::GetAttributeHexValue( CMDXMLElement& aElement, const TDesC& aAttrib )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeHexValue()" ) ) );
- COMPONENT_TRACE( ( _L( " Element: %s", aElement.NodeName() ) ) );
- COMPONENT_TRACE( ( _L( " Attribute: %s", aAttrib ) ) );
-
- TUint32 hexValue( 0 );
-
- // Check availability
- if ( aElement.IsAttributeSpecified( aAttrib ) )
- {
- // Buffer to where to read value
- TBufC<KSsyRefMaxAttribLength> buffer( KNullDesC );
- TPtrC ptr( buffer );
-
- // Read attribute value
- aElement.GetAttribute( aAttrib, ptr );
-
- // Get bounded value and cast it into TUint32 (hex)
- TRadix radix( EHex );
- TUint limit( 0xFFFFFFFF );
-
- // Append string into Lex and skip first two characters, 0x
- TLex lexValue( ptr );
- lexValue.Inc( 2 );
-
- // Read value
- lexValue.BoundedVal( hexValue, radix, limit );
- }
-
- COMPONENT_TRACE( ( _L( " HexValue: %x", hexValue ) ) );
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeHexValue() - return" ) ) );
- return hexValue;
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetAttributeRealValue
-// ---------------------------------------------------------------------------
-//
-TReal CSsyReferenceConfig::GetAttributeRealValue( CMDXMLElement& aElement, const TDesC& aAttrib )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeRealValue()" ) ) );
- COMPONENT_TRACE( ( _L( " Element: %s", aElement.NodeName() ) ) );
- COMPONENT_TRACE( ( _L( " Attribute: %s", aAttrib ) ) );
-
- TReal realValue( 0 );
-
- // Check availability
- if ( aElement.IsAttributeSpecified( aAttrib ) )
- {
-
- // Buffer to where to read value
- TBufC<KSsyRefMaxAttribLength> buffer( KNullDesC );
- TPtrC ptr( buffer );
-
- // Read attribute value
- aElement.GetAttribute( aAttrib, ptr );
-
- // Cast literal value into TReal
- TLex lexValue( ptr );
- lexValue.Val( realValue );
- }
-
- COMPONENT_TRACE( ( _L( " IntValue: %i", realValue ) ) );
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetAttributeRealValue() - return" ) ) );
- return realValue;
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::ChannelCount
-// ---------------------------------------------------------------------------
-//
-TInt CSsyReferenceConfig::ChannelCount()
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ChannelCount() - %i" ), iChannelCount ) );
- return iChannelCount;
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GenerateChannels
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::GenerateChannels( RSensrvChannelInfoList& aChannelList )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GenerateChannels()" ) ) );
-
- // Initialize channel pair array
- TSsyRefChannelIdArray tempArray( iChannelCount );
- iChannelPairArray = tempArray;
-
- // Go through Channel group element and get all information
- TSensrvChannelInfo channelInfo;
- CMDXMLElement* channelElement = iChannelGroupElement->FirstChildOfType( KSsyRefChannelItemTag );
-
- while( channelElement )
- {
- // check is element correct type of node
- if ( channelElement->NodeType() == CMDXMLNode::EElementNode )
- {
- // read channel identifier
- iChannelPairArray.Append( TSsyRefChannelIdPair( GetAttributeIntValue( *channelElement, KSsyRefChannelId ) ) );
-
- // Read attributes
- channelInfo.iContextType = ( TSensrvContextType ) GetAttributeIntValue( *channelElement, KSsyRefContextType );
- channelInfo.iQuantity = ( TSensrvQuantity ) GetAttributeIntValue( *channelElement, KSsyRefQuantity );
- channelInfo.iChannelType = ( TSensrvChannelTypeId ) GetAttributeHexValue( *channelElement, KSsyRefChannelType );
- GetAttributeStrValue( *channelElement, KSsyRefLocation, channelInfo.iLocation );
- GetAttributeStrValue( *channelElement, KSsyRefVendorId, channelInfo.iVendorId );
- channelInfo.iChannelDataTypeId = ( TSensrvChannelDataTypeId ) GetAttributeHexValue( *channelElement, KSsyRefDataTypeID );
-
- // Calculate data item size based on channel type
- switch ( channelInfo.iChannelType )
- {
- case KSensrvChannelTypeIdAccelerometerXYZAxisData:
- {
- channelInfo.iDataItemSize = KSsyRefAxisDataItemSize;
- break;
- }
- case KSensrvChannelTypeIdProximityMonitor:
- {
- channelInfo.iDataItemSize = KSsyRefProximityDataItemSize;
- break;
- }
- case KSensrvChannelTypeIdAmbientLightData:
- {
- channelInfo.iDataItemSize = KSsyRefAmbientLightDataItemSize;
- break;
- }
- case KSensrvChannelTypeIdAccelerometerWakeupData:
- case KSensrvChannelTypeIdAccelerometerDoubleTappingData:
- {
- channelInfo.iDataItemSize = KSsyRefTappingDataItemSize;
- break;
- }
- case KSensrvChannelTypeIdMagnetometerXYZAxisData:
- {
- channelInfo.iDataItemSize = KSsyRefMagneticAxisDataItemSize;
- break;
- }
- default:
- {
- channelInfo.iDataItemSize = 0;
- break;
- }
- }
-
- // Append channel info to list
- aChannelList.Append( channelInfo );
- }
- channelElement = static_cast<CMDXMLElement*>( channelElement->NextSibling() );
- }
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GenerateChannels() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetChannelDataInformation
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::GetChannelDataInformationL(
- const TInt aSrvChannelId,
- TSsyRefDataItemArray& aDataItemList,
- TInt& aStartInterval )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetChannelDataInformation()" ) ) );
-
- // First, get correct config channel element corresponding to aSrvChannelId
- CMDXMLElement* channelElement = ChannelElement( aSrvChannelId );
-
- if ( channelElement )
- {
- // Channel element found, get channel data group element
- CMDXMLElement* groupElement = channelElement->FirstChildOfType( KSsyRefChannelDataTag );
-
- if ( groupElement )
- {
- // Get start interval
- aStartInterval = GetAttributeIntValue( *groupElement, KSsyRefStartInterval );
-
- // First, loop channel data items to get total count
- CMDXMLElement* dataItemElement = groupElement->FirstChildOfType( KSsyRefChannelDataItemTag );
-
- // Take channel data item type at this point. One channel can produce only one type of
- // channel data item
- TUint channelType( GetAttributeHexValue( *dataItemElement, KSsyRefDataTypeID ) );
-
- TInt channelItemCount( 0 ); // Total number of data items
- TInt definitionCount( 0 ); // Total number of different definitions
-
- // Go through elements and get counters
- while ( dataItemElement )
- {
- definitionCount++;
- channelItemCount = channelItemCount + GetAttributeIntValue( *dataItemElement, KSsyRefDataItemCount );
- // This will return NULL if no next sibling found
- dataItemElement = static_cast<CMDXMLElement*>( dataItemElement->NextSibling() );
- }
-
- // Now, start all over to get item information
- dataItemElement = groupElement->FirstChildOfType( KSsyRefChannelDataItemTag );
-
- // Create temp array now that we know the data item count
- TSsyRefDataItemArray tempArray( channelItemCount );
-
- for ( TInt i = 0; i < definitionCount; i++ )
- {
- // Check element type
- if ( dataItemElement->NodeType() == CMDXMLNode::EElementNode )
- {
- // First we get interval and count from channel item
- TInt interval( GetAttributeIntValue( *dataItemElement, KSsyRefInterval ) );
- TInt countOfType( GetAttributeIntValue( *dataItemElement, KSsyRefDataItemCount ) );
-
- // Read next child values to corresponding data type class
- switch ( channelType )
- {
- case TSensrvAccelerometerAxisData::KDataTypeId:
- {
- CMDXMLElement* axisDataElement = dataItemElement->FirstChildOfType( KSsyRefAxisDataItemTag );
- TInt axisX( GetAttributeIntValue( *axisDataElement, KSsyRefXAxis ) );
- TInt axisY( GetAttributeIntValue( *axisDataElement, KSsyRefYAxis ) );
- TInt axisZ( GetAttributeIntValue( *axisDataElement, KSsyRefZAxis ) );
-
- // Create channel data type item
- TSsyRefChannelDataAxis channelData( axisX, axisY, axisZ, interval );
- // add items into array
- for ( TInt k = 0; k < countOfType; k++ )
- {
- tempArray.Append( channelData );
- }
- break;
- }
- case TSensrvTappingData::KDataTypeId:
- {
- CMDXMLElement* tappingDataElement = dataItemElement->FirstChildOfType( KSsyRefTappingDataItemTag );
- TInt direction( GetAttributeHexValue( *tappingDataElement, KSsyRefDirection ) );
-
- // Create channel data type item
- TSsyRefChannelDataTapping channelData( direction, interval );
- // add items into array
- for ( TInt k = 0; k < countOfType; k++ )
- {
- tempArray.Append( channelData );
- }
- break;
- }
- case TSensrvProximityData::KDataTypeId:
- {
- CMDXMLElement* proximityDataElement = dataItemElement->FirstChildOfType( KSsyRefProximityDataItemTag );
- TInt state( GetAttributeIntValue( *proximityDataElement, KSsyRefProximityState ) );
-
- // Create channel data type item
- TSsyRefChannelDataProximity channelData( state, interval );
- // add items into array
- for ( TInt k = 0; k < countOfType; k++ )
- {
- tempArray.Append( channelData );
- }
- break;
- }
- case TSensrvAmbientLightData::KDataTypeId:
- {
- CMDXMLElement* ambientLightDataElement = dataItemElement->FirstChildOfType( KSsyRefAmbientLightDataItemTag );
- TInt state( GetAttributeIntValue( *ambientLightDataElement, KSsyRefAmbientLightState ) );
-
- // Create channel data type item
- TSsyRefChannelDataAmbientLight channelData( state, interval );
- // add items into array
- for ( TInt k = 0; k < countOfType; k++ )
- {
- tempArray.Append( channelData );
- }
- break;
- }
- case TSensrvMagnetometerAxisData::KDataTypeId:
- {
- CMDXMLElement* axisDataElement = dataItemElement->FirstChildOfType( KSsyRefMagneticAxisDataItemTag );
- TInt axisX( GetAttributeIntValue( *axisDataElement, KSsyRefXAxis ) );
- TInt axisY( GetAttributeIntValue( *axisDataElement, KSsyRefYAxis ) );
- TInt axisZ( GetAttributeIntValue( *axisDataElement, KSsyRefZAxis ) );
- TInt axisXCalib( GetAttributeIntValue( *axisDataElement, KSsyRefXAxisCalib ) );
- TInt axisYCalib( GetAttributeIntValue( *axisDataElement, KSsyRefYAxisCalib ) );
- TInt axisZCalib( GetAttributeIntValue( *axisDataElement, KSsyRefZAxisCalib ) );
-
- // Create channel data type item
- TSsyRefChannelDataMagneticAxis channelData( axisX, axisY, axisZ,
- axisXCalib, axisYCalib, axisZCalib, interval );
- // add items into array
- for ( TInt k = 0; k < countOfType; k++ )
- {
- tempArray.Append( channelData );
- }
- break;
- }
- default:
- {
- // Other data items are not supported
- User::Leave( KErrGeneral );
- }
- }
- }
-
- // Get next channel data item element
- dataItemElement = static_cast<CMDXMLElement*>( dataItemElement->NextSibling() );
- }
-
- // Compress temp array in case there were comments
- tempArray.Compress();
-
- // copy information to param array
- aDataItemList = tempArray;
- }
- else
- {
- User::Leave( KErrNotFound );
- }
- }
- else
- {
- User::Leave( KErrNotFound );
- }
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetChannelDataInformation() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetElementPropertiesL
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::GetElementPropertiesL(
- CMDXMLElement& aElement,
- RSensrvPropertyList& aPropertyList )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetElementPropertiesL()" ) ) );
-
- // First we need 'Properties' element
- CMDXMLElement* properties = aElement.FirstChildOfType( KSsyRefProperties );
-
- if ( !properties )
- {
- // Wrong element... or properties are not defined
- User::Leave( KErrNotFound );
- }
-
- // Get first property get started
- CMDXMLElement* propertyItem = properties->FirstChildOfType( KSsyRefPropertyItem );
- TInt propertyCount( 0 );
-
- // Loop properties to get count of properties
- while ( propertyItem )
- {
- propertyCount++;
- propertyItem = static_cast<CMDXMLElement*>( propertyItem->NextSibling() ); // returns NULL if next not found
- }
-
- if ( !propertyCount )
- {
- // Check that there are properties
- User::Leave( KErrNotFound );
- }
-
- // Temporary property list now that we know the property count
- RSensrvPropertyList tempList( propertyCount );
-
- // Start loop again from the start and read each property
- propertyItem = properties->FirstChildOfType( KSsyRefPropertyItem );
- for ( TInt i = 0; i < propertyCount; i++ )
- {
- // Check element type
- if ( propertyItem->NodeType() == CMDXMLNode::EElementNode )
- {
- // Read property values
- const TSensrvPropertyId propertyId( ( TSensrvPropertyId )GetAttributeHexValue( *propertyItem, KSsyRefPropertyId ) );
- const TInt itemIndex( GetAttributeIntValue( *propertyItem, KSsyRefItemIndex ) );
- const TBool readOnly( ( TBool )GetAttributeIntValue( *propertyItem, KSsyRefReadOnly ) );
- const TSensrvPropertyType propertyType( ( TSensrvPropertyType ) GetAttributeIntValue( *propertyItem, KSsyRefPropertyType ) );
-
- // Array index must be handled in different way as it is not mandatory. Little modification is needed as it may not exist in XML file
- TInt arrayIndex( ESensrvSingleProperty );
-
- // Extra check is needed, otherwise this value is always '0' when it should be 'ESensrvSingleProperty' by default
- if ( propertyItem->IsAttributeSpecified( KSsyRefArrayIndex ) )
- {
- // Attribute exists, now we can read the value
- arrayIndex = GetAttributeIntValue( *propertyItem, KSsyRefArrayIndex );
- }
-
- // Resolve type, get correct type value and append property into list
- switch ( propertyType )
- {
- case ESensrvIntProperty:
- {
- const TInt intValue( GetAttributeIntValue( *propertyItem, KSsyRefPropertyValue ) );
- const TInt maxValue( GetAttributeIntValue( *propertyItem, KSsyRefMaxValue ) );
- const TInt minValue( GetAttributeIntValue( *propertyItem, KSsyRefMinValue ) );
- TSensrvProperty property( propertyId, itemIndex, intValue, maxValue, minValue, readOnly, propertyType );
- property.SetArrayIndex( arrayIndex );
- tempList.Append( property );
- break;
- }
- case ESensrvRealProperty:
- {
- const TReal intValue( GetAttributeRealValue( *propertyItem, KSsyRefPropertyValue ) );
- const TReal maxValue( GetAttributeRealValue( *propertyItem, KSsyRefMaxValue ) );
- const TReal minValue( GetAttributeRealValue( *propertyItem, KSsyRefMinValue ) );
- TSensrvProperty property( propertyId, itemIndex, intValue, maxValue, minValue, readOnly, propertyType );
- property.SetArrayIndex( arrayIndex );
- tempList.Append( property );
- break;
- }
- case ESensrvBufferProperty:
- {
- TBuf8<KSensrvPropertyTextBufferSize> desValue;
- GetAttributeStrValue( *propertyItem, KSsyRefPropertyValue, desValue );
- TSensrvProperty property( propertyId, itemIndex, desValue, readOnly, propertyType );
- property.SetArrayIndex( arrayIndex );
- tempList.Append( property );
- break;
- }
- default:
- {
- // Unknown property type -> leave
- User::Leave( KErrArgument );
- }
- }
- }
-
- // Next property
- propertyItem = static_cast<CMDXMLElement*>( propertyItem->NextSibling() ); // returns NULL if next not found
- }
-
- // Compress temp list in case there were comment nodes
- tempList.Compress();
-
- // copy temp list to parameter list
- aPropertyList = tempList;
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetElementPropertiesL() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::ChannelElement
-// ---------------------------------------------------------------------------
-//
-CMDXMLElement* CSsyReferenceConfig::ChannelElement( const TInt aSrvChannelId )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ChannelElement()" ) ) );
-
- const TInt configId( ConfigChannelId( aSrvChannelId ) );
- TBool channelFound( EFalse );
-
- // Loop channel group and match configId for the channel ID in element
- CMDXMLElement* channelItemElement = iChannelGroupElement->FirstChildOfType( KSsyRefChannelItemTag );
-
- for ( TInt i = 0; i < iChannelCount || !channelFound; i++ )
- {
- TInt channelId( GetAttributeIntValue( *channelItemElement, KSsyRefChannelId ) );
- if ( configId == channelId )
- {
- // Channel found, no need to loop
- channelFound = ETrue;
- }
- else
- {
- // Take next channel
- channelItemElement = static_cast<CMDXMLElement*>( channelItemElement->NextSibling() );
- }
- }
-
- // If not found, return NULL
- if ( !channelFound )
- {
- channelItemElement = NULL;
- }
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ChannelElement() - return" ) ) );
- return channelItemElement;
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::UpdateChannelIds
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::UpdateChannelIds( RSensrvChannelInfoList aChannelList )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::UpdateChannelIds()" ) ) );
-
-
- if ( ChannelCount() == aChannelList.Count() )
- {
- for ( TInt i = 0; i < aChannelList.Count(); i++ )
- {
- iChannelPairArray[i].SetServerId( aChannelList[i].iChannelId );
- }
- }
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::UpdateChannelIds() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::ConfigChannelId
-// ---------------------------------------------------------------------------
-//
-TInt CSsyReferenceConfig::ConfigChannelId( const TInt aSrvChannelId ) const
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ConfigChannelId()" ) ) );
- TInt returnValue( 0 );
-
- for ( TInt i = 0; i < iChannelPairArray.Count(); i++ )
- {
- if ( iChannelPairArray[i].ServerId() == aSrvChannelId )
- {
- returnValue = iChannelPairArray[i].ConfigId();
- }
- }
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::ConfigChannelId() - return" ) ) );
- return returnValue;
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetSensorPropertiesL
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::GetSensorPropertiesL( RSensrvPropertyList& aPropertyList )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetSensorPropertiesL()" ) ) );
-
- // We already have SsyGeneralInformation element, read properties from that
- GetElementPropertiesL( *iGenralInfoElement, aPropertyList );
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetSensorPropertiesL() - return" ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceConfig::GetChannelPropertiesL
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceConfig::GetChannelPropertiesL(
- const TInt aSrvChannelId,
- RSensrvPropertyList& aPropertyList )
- {
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetChannelPropertiesL()" ) ) );
-
- // Get channel element first
- CMDXMLElement* channelElement = ChannelElement( aSrvChannelId );
-
- if ( !channelElement )
- {
- // Leave, channel element is not found
- User::Leave( KErrNotFound );
- }
-
- // Get properties of this channel element
- GetElementPropertiesL( *channelElement, aPropertyList );
-
- COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceConfig::GetChannelPropertiesL() - return" ) ) );
- }
-
-// End of file