/*
* Component Name: Headset Simulator
* Author: Comarch S.A.
* Version: 1.0
* Copyright (c) 2010 Comarch S.A.
*
* This Software is submitted by Comarch S.A. to Symbian Foundation Limited on
* the basis of the Member Contribution Agreement entered between Comarch S.A.
* and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be
* used only in accordance with the terms and conditions of the Agreement.
* Any other usage, duplication or redistribution of this Software is not
* allowed without written permission of Comarch S.A.
*
*/
#ifndef HSREMOTECONTROLTOOLS_H
#define HSREMOTECONTROLTOOLS_H
#include <e32base.h>
#include "hsremoterequest.h"
/** Request package length */
const TInt KHsRemoteControlPackageLength = 128;
/** Request package header length */
const TInt KHsRemoteControlPackageTypeMaxLength = 2;
_LIT8(KHsRemoteControllerPackageDelim, ":");
/** Request package data */
typedef TBuf8 <KHsRemoteControlPackageLength> THsControlCommandData;
/**
* @brief Represents remote control request
*/
class THsRemoteControlCommand
{
public:
/**
* Constructor
*
* @param aData data
* @param aCommandType type of command
*/
THsRemoteControlCommand( THsControlCommandData& aData,
THsRemoteControlCommandType aCommandType );
public:
/**
* Getter for type of command
*
* @param aCmdType type
*/
void GetType( THsRemoteControlCommandType &aCmdType );
/**
* Getter for command's data
*
* @param aCmdData data
*
*/
void GetData( TDes8 &aCmdData );
/**
* Clones THsRemoteControlCommand object
*
* @param aCmdFrom source
* @param aCmdTo destination
*/
static void Copy( const THsRemoteControlCommand& aCmdFrom,
THsRemoteControlCommand& aCmdTo );
private:
/** Data */
THsControlCommandData &iData;
/** Type */
THsRemoteControlCommandType iType;
};
/**
* @brief Parser for remote control packages
*/
class CHsRemoteControlParser : public CBase
{
public:
/**
* Two-phased constructor.
*
* @return class instance
*/
static CHsRemoteControlParser* NewL();
/**
* Two-phased constructor.
*
* @return class instance
*/
static CHsRemoteControlParser* NewLC();
/**
* Destructor
*/
~CHsRemoteControlParser();
public:
/**
* Parses and transforms data into THsRemoteControlCommand object
*
* @param aText remote request package
* @param aCommand created command
*/
void ParseL( const TDesC8 &aText, THsRemoteControlCommand &aCommand );
private:
/**
* Constructor for performing 1st stage construction
*/
CHsRemoteControlParser();
/**
* Constructor for performing 2nd stage construction
*/
void ConstructL();
private:
/**
* Checks if package is proper
*
* @aData remote request package
* @return ETrue if OK, otherwise EFalse
*/
TBool IsPackageValid( const TDesC8 &aData );
/**
* Retrieves header part and data part of remote request package
*
* @param aData remote request package
* @param aTypePart header of the package
* @param aDataPart package's data
* @return error code value
*/
TInt SplitPackage( const TDesC8 &aData, TDes8 &aTypePart, TDes8 &aDataPart );
/**
* Transforms header of the package into THsRemoteControlCommandType
*
* @param aTypePart header of the package
* @param aCommandType header tranformed into THsRemoteControlCommandType object
* @return error code value
*/
TInt RecognizeType( const TDesC8 &aTypePart,
THsRemoteControlCommandType &aCommandType );
};
#endif // HSREMOTECONTROLTOOLS_H