/*
 * Copyright (c) 2009 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: Telephony Multimedia Service
 *
 */

#ifndef __TMSUTILITY_H__
#define __TMSUTILITY_H__

#include <e32std.h>
#include <tms.h>
#include <TelephonyAudioRouting.h>
#ifdef _DEBUG
#include <e32debug.h>
#endif

namespace TMS {

// DEBUG TRACE DEFINITIONS
#ifdef _DEBUG
#define TRACE_PRN_FN_ENT        RDebug::Printf("%s>ENTER", __PRETTY_FUNCTION__)
#define TRACE_PRN_FN_EXT        RDebug::Printf("%s>EXIT", __PRETTY_FUNCTION__)
#define TRACE_PRN_IF_ERR(err) if (err != KErrNone) RDebug::Printf( "%s>BREAK[%d]", __PRETTY_FUNCTION__, err )

#define TRACE_PRN_0(str)              RDebug::Print(str, this)
#define TRACE_PRN_1(str, val1)        RDebug::Print(str, this, val1)
#define TRACE_PRN_2(str, val1, val2)  RDebug::Print(str, this, val1, val2)

#define TRACE_PRN_N(str)              RDebug::Print(str)
#define TRACE_PRN_N1(str, val1)       RDebug::Print(str, val1)
#define TRACE_PRN_N2(str, val1, val2) RDebug::Print(str, val1, val2)
#else
#define TRACE_PRN_FN_ENT
#define TRACE_PRN_FN_EXT
#define TRACE_PRN_IF_ERR(err)
#define TRACE_PRN_0(str)
#define TRACE_PRN_1(str, val1)
#define TRACE_PRN_2(str, val1, val2)
#define TRACE_PRN_N(str)
#define TRACE_PRN_N1(str, val1)
#define TRACE_PRN_N2(str, val1, val2)
#endif //_DEBUG


// MACRO DEFINITIONS
#define RET_ERR_IF_ERR(err) if ( err != 0) return err;
#define RET_REASON_IF_ERR(s) if(s!=0) return s

#define TMSRESULT(result) TMSUtility::TMSResult(result)
#define TOTMSOUTPUT(output) TMSUtility::ToTMSOutput(output)
#define TOTAROUTPUT(output) TMSUtility::ToTAROutput(output)
#define TOFOURCC(format) TMSUtility::ToFourCC(format)
#define TOTMSFORMAT(fourcc) TMSUtility::FourCCToTMSFormat(fourcc)

_LIT(KTMSPanic, "TMS Panic!" );
#define PANIC(reason) User::Panic(KTMSPanic, reason)

// TMSUtility class
class TMSUtility
    {
public:
    IMPORT_C static gint TMSResult(const gint error);
    IMPORT_C static gint EtelToTMSResult(const gint error);
    IMPORT_C static TMSAudioOutput ToTMSOutput(
            CTelephonyAudioRouting::TAudioOutput taroutput);
    IMPORT_C static CTelephonyAudioRouting::TAudioOutput ToTAROutput(
            TMSAudioOutput output);
    IMPORT_C static TUint32 ToFourCC(TMSFormatType frmtType);
    IMPORT_C static TMSFormatType FourCCToTMSFormat(TUint32 fourcc);
    };

} //namespace TMS

#endif //__TMSUTILITY_H__

