/*
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
* which accompanies this distribution, and is available
* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  The channel basic information
*
*/


#ifndef SENSRVCHANNELINFO_H
#define SENSRVCHANNELINFO_H

#include <e32base.h>
#include <sensrvtypes.h>
/**
 *  The TSensrvChannelInfo class is a data class that holds information about a sensor channel.
 *
 *  It also provides simple helper methods that allow users to determine if the class is complete
 *  and if one instance of this class matches another.
 *
 *  @lib sensrvutil.lib
 *  @since S60 5.0
 */
NONSHARABLE_CLASS( TSensrvChannelInfo )
    {
public:
    
    /**
    * Default Constructor
    *
    * @since S60 5.0
    */      
    IMPORT_C TSensrvChannelInfo();
      
    /**
    * Constructor
    * 
    * This constructor is for use with CSensrvChannelFinder::FindChannelsL(). It sets the ChannelId
    * and DataItemSize to zero.
    *
    * @since S60 5.0
    * @param  aContextType Channel context type. Set to a value from TSensrvContextType.
    * @param  aQuantity Channel quantity. Set to a value from TSensrvQuantity.
    * @param  aChannelType Channel type id. This is a uid.
    * @param  aLocation Channel physical location.
    * @param  aVendorId Channel vendor name.
    * @param  aChannelDataTypeId Channel data type Id. This is a uid.
    * @see TSensrvContextType
    * @see TSensrvQuantity
    */          
    IMPORT_C TSensrvChannelInfo( TInt aContextType, 
                                 TInt aQuantity, 
                                 TSensrvChannelTypeId aChannelType,
                                 const TDesC8& aLocation,
                                 const TDesC8& aVendorId,
                                 TSensrvChannelDataTypeId aChannelDataTypeId ); 

    /**
    * Constructor
    *
    * @since S60 5.0
    * @param aChannelId Channel identifier
    * @param  aContextType Channel context type. Set to a value from TSensrvContextType.
    * @param  aQuantity Channel quantity. Set to a value from TSensrvQuantity.
    * @param  aChannelType Channel type id. This is a uid.
    * @param  aLocation Channel physical location.
    * @param  aVendorId Channel vendor name.
    * @param  aDataItemSize Data item size for channel specific data
    * @param  aChannelDataTypeId Channel data type Id. This is a uid.
    * @see    TSensrvContextType
    * @see    TSensrvQuantity 
    */          
    IMPORT_C TSensrvChannelInfo( TSensrvChannelId aChannelId, 
                                 TInt aContextType, 
                                 TInt aQuantity, 
                                 TSensrvChannelTypeId aChannelType,
                                 const TDesC8& aLocation,
                                 const TDesC8& aVendorId, 
                                 TInt aDataItemSize,
                                 TSensrvChannelDataTypeId aChannelDataTypeId ); 
      
    /**
    * Copy constructor
    * 
    * @since S60 5.0
    * @param  aChannelInfo Instance to be copied
    */    
    IMPORT_C TSensrvChannelInfo( const TSensrvChannelInfo& aChannelInfo );
    
public:     
    
    /**
    * Checks if this instance matches supplied instance. Fields that are zero or empty are ignored.
    * Channel Id, Data Item Size and Reserved fields are ignored.
    * 
    * @since S60 5.0
    * @param  aInfo Instance to be matched against this instance.
    * @return ETrue if there is a match, otherwise EFalse
    */  
    IMPORT_C TBool IsMatch( const TSensrvChannelInfo &aInfo ) const;
          
    /**
    * Checks that channel information in this object is complete. Complete means no zero or empty fields.
    * Channel Id, Data Item Size and the Reserved fields are ignored.
    * 
    * @since S60 5.0
    * @return ETrue if channel information is complete.
    */
    IMPORT_C TBool IsComplete() const;

public:
    /**
    * Channel Identifier
    */
    TSensrvChannelId iChannelId;

    /**
    * Context type
    * @see TSensrvContextType
    */
    TInt iContextType;

    /**
    * Quantity
    * @see TSensrvQuantity
    */
    TInt iQuantity;    

    /**
    * Channel type identifier
    * 
    * Identifies the channel type and therefore the content of the channel. This value is a uid and is
    * unique among all channels. See sensor channel specific header files.
    */
    TSensrvChannelTypeId iChannelType;
    
    /**
    * Location of the of the channel. This is a free format string
    */
    TBuf8<KSensrvLocationLength> iLocation;

    /**
    * Vendor name of the channel provider. This is a free format string and is not to be confused with
    * Vendor Id unique Uid's.
    */
    TBuf8<KSensrvVendorIdLength> iVendorId;

    /**
    * Size of the data item delivered by the channel
    */
    TInt iDataItemSize;
    
private:
    TInt iReserved3;
    
public:
    /**
    * Identifies the channel data type. This value is a uid and is unique among all channels. See sensor
    * channel specific header files.
    */      
    TSensrvChannelDataTypeId iChannelDataTypeId;
    
private:
    TInt iReserved;
    TInt iReserved2;
    };



#endif // SENSRVCHANNELINFO_H
