diff -r e54443a6878c -r 0e5a77c79f1e tracesrv/reference/sf/adapt/osrndtools.nokia/xtiv2/drivers/src/xtitx.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracesrv/reference/sf/adapt/osrndtools.nokia/xtiv2/drivers/src/xtitx.cpp Mon Oct 25 18:15:05 2010 +0100 @@ -0,0 +1,567 @@ +/* +* Copyright (c) 2010 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: +* +*/ + + +/** @file + +XtiTx + +*///========================================================================= + + +//- Include Files ---------------------------------------------------------- + +#include +#include +#include "xtitx.h" +//- Namespace --------------------------------------------------------------- + +//- Using ------------------------------------------------------------------- + + +//- External Data ----------------------------------------------------------- + + +//- External Function Prototypes -------------------------------------------- + + +//- Constants --------------------------------------------------------------- + +// Definitions for XTI + +const TUint8 KHwOsmoMsgAsciiPrintfLE = 0xC3; +const TUint32 KHwOsmoChannelSize = 0x40L; + +const TInt KBitRateBufferSize = 20; +const TUint8 KDataLengthAck = 0x01; +const TUint8 KDataMsgAck = 0x02; + +const TUint32 KHwOsmoControlOutputAddress = KRapRegXTIOSMO + ( KOsmoTraceControlChannel * KXtiChannelSize ); + +const TUint32 KHwOsmoSymbianChannel0Address = KRapRegXTIOSMO + ( KOsmoSymbianSystemChannel0 * KXtiChannelSize ); + +const TUint32 KHwOsmoSymbianChannel1Address = KRapRegXTIOSMO + ( KOsmoSymbianSystemChannel1 * KXtiChannelSize ); + +const TUint32 KHwOsmoTraceBoxConfigAddress = KRapRegXTIOSMO + ( KOsmoTraceBoxConfigChannel * KHwOsmoChannelSize ); + +const TUint32 KHwOsmoReceptionAckAddress = KRapRegXTIOSMO + ( KOsmosReceptionAckChannel * KHwOsmoChannelSize ); + + +//- Macros ------------------------------------------------------------------ + + +//- Global and Local Variables ---------------------------------------------- + +XtiTx* XtiTx::iXtiTxPtr = NULL; + +//- Local Function Prototypes ----------------------------------------------- + + +//=========================================================================== + +//- Local Functions --------------------------------------------------------- + +//=========================================================================== + +//- Member Functions -------------------------------------------------------- + +/* +----------------------------------------------------------------------------- + + XtiTx + + XtiTx + + Constructor +----------------------------------------------------------------------------- +*/ + +XtiTx::XtiTx() + : iSymbianChannel0Open( EFalse ) + ,iSymbianChannel1Open( EFalse ) + ,iTraceEnabled( EFalse ) + { + } + + +/* +----------------------------------------------------------------------------- + XtiTx + + ~XtiTx + + Destructor +----------------------------------------------------------------------------- +*/ +XtiTx::~XtiTx() + { + } + +/* +---------------------------------------------------------------------------- + + XtiTx + + Instance + + Return an instance to XtiTx interface. This method returns the + only XtiTx instance system can have, it is not possible to create + new instances of this class. + + Return Values: iXtiTxPtr* An instance to XtiTx class + +----------------------------------------------------------------------------- +*/ +XtiTx* XtiTx::Instance( ) + { + // Allow only 1 instance of XtiTx to exists at any time + if ( iXtiTxPtr == NULL ) + { + iXtiTxPtr = new XtiTx(); + if( iXtiTxPtr != NULL ) + { + if( iXtiTxPtr->CheckRDC() ) + { + iXtiTxPtr->iTraceEnabled = ETrue; + } + else + { + iXtiTxPtr->iTraceEnabled = EFalse; + } + } + } + return iXtiTxPtr; + } + + + +/* +---------------------------------------------------------------------------- + + XtiTx + + StartWrite + + Start writing data to Symbian XTI channel. This method must be called before WriteData8, WriteData16 or + WriteData32 can be used. + + @param aChannel XTI channel number. Must be KOsmoSymbianSystemChannel0 or KOsmoSymbianSystemChannel1 + + @param aMessageId XTI message ID. Defines what type of messages are sent. + Must be KOsmoMsgSymbianTrace or KOsmoMsgAsciiPrintf. + + Return Values: KErrNone, if succesfull. Otherwise KErrGeneral + +----------------------------------------------------------------------------- +*/ +EXPORT_C TInt XtiTx::StartWrite( TUint8 aChannel, TUint8 aMessageId ) + { + TInt ret( KErrNone ); + // Message type must be MCU Symbian trace message or MCU ASCII printf message + if( CheckMessageIdForStartWrite(aMessageId) && iXtiTxPtr->iTraceEnabled ) + { + // OSMO channel must be 224 or 225 + if( aChannel == KOsmoSymbianSystemChannel0 ) + { + // Check that the channel is free + if( iXtiTxPtr->iSymbianChannel0Open == EFalse ) + { + // Open the channel + TRap::SetRegister8( aMessageId, KHwOsmoSymbianChannel0Address ); + iXtiTxPtr->iSymbianChannel0Open = ETrue; + } + else + { + ret = KErrGeneral; + } + } + else if( aChannel == KOsmoSymbianSystemChannel1 ) + { + // Check that the channel is free + if( iXtiTxPtr->iSymbianChannel1Open == EFalse ) + { + // Open the channel + TRap::SetRegister8( aMessageId, KHwOsmoSymbianChannel1Address ); + iXtiTxPtr->iSymbianChannel1Open = ETrue; + } + else + { + ret = KErrGeneral; + } + } + else + { + ret = KErrGeneral; + } + } + else + { + ret = KErrGeneral; + } + return ret; + } + +/* +---------------------------------------------------------------------------- + + XtiTx + + StopWrite + + Stop writing data to Symbian XTI channel which has been started by method StartWrite(). + + Return Values: KErrNone, if succesfull. Otherwise KErrGeneral + +----------------------------------------------------------------------------- +*/ +EXPORT_C TInt XtiTx::StopWrite( TUint8 aChannel ) + { + TInt ret( KErrNone ); + + // OSMO channel must be 224 or 225 + if( aChannel == KOsmoSymbianSystemChannel0 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel0Open ) + { + // close the channel + TRap::SetRegister8( KOsmoSymbianSystemChannel0, KHwOsmoControlOutputAddress ); + iXtiTxPtr->iSymbianChannel0Open = EFalse; + } + else + { + ret = KErrGeneral; + } + } + else if( aChannel == KOsmoSymbianSystemChannel1 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel1Open ) + { + // close the channel + TRap::SetRegister8( KOsmoSymbianSystemChannel1, KHwOsmoControlOutputAddress ); + iXtiTxPtr->iSymbianChannel1Open = EFalse; + } + else + { + ret = KErrGeneral; + } + } + else + { + ret = KErrGeneral; + } + return ret; + } + +/* +---------------------------------------------------------------------------- + + XtiTx + + WriteData8 + + Write 8 bits data to KOsmoSymbianSystemChannel0 or KOsmoSymbianSystemChannel1 + XTI channel in KOsmoMsgSymbianTrace or KOsmoMsgAsciiPrintf message format. + Before using this method XTI channel and message type must be defined with + method XtiTx::StartWrite(). + + @param aData Data to be written + +----------------------------------------------------------------------------- +*/ +EXPORT_C void XtiTx::WriteData8( TUint8 aChannel, TUint8 aData ) + { + // OSMO channel must be 224 or 225 + if( aChannel == KOsmoSymbianSystemChannel0 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel0Open ) + { + // Send data + TRap::SetRegister8( aData, KHwOsmoSymbianChannel0Address ); + } + } + else if( aChannel == KOsmoSymbianSystemChannel1 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel1Open ) + { + // Send data + TRap::SetRegister8( aData, KHwOsmoSymbianChannel1Address ); + } + } + } + + +/* +---------------------------------------------------------------------------- + + XtiTx + + WriteData16 + + Write 16 bits data to KOsmoSymbianSystemChannel0 or KOsmoSymbianSystemChannel1 + XTI channel in KOsmoMsgSymbianTrace or KOsmoMsgAsciiPrintf message format. + Before using this method XTI channel and message type must be defined with + method XtiTx::StartWrite(). + + @param aData Data to be written + +----------------------------------------------------------------------------- +*/ +EXPORT_C void XtiTx::WriteData16( TUint8 aChannel, TUint16 aData ) + { + // OSMO channel must be 224 or 225 + if( aChannel == KOsmoSymbianSystemChannel0 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel0Open ) + { + // Send data + TRap::SetRegister16( aData, KHwOsmoSymbianChannel0Address ); + } + } + else if( aChannel == KOsmoSymbianSystemChannel1 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel1Open ) + { + // Send data + TRap::SetRegister16( aData, KHwOsmoSymbianChannel1Address ); + } + } + } + + +/* +---------------------------------------------------------------------------- + + XtiTx + + WriteData32 + + Write 32 bits data to KOsmoSymbianSystemChannel0 or KOsmoSymbianSystemChannel1 + XTI channel in KOsmoMsgSymbianTrace or KOsmoMsgAsciiPrintf message format. + Before using this method XTI channel and message type must be defined with + method XtiTx::StartWrite(). + + @param aData Data to be written + +----------------------------------------------------------------------------- +*/ +EXPORT_C void XtiTx::WriteData32( TUint8 aChannel, TUint32 aData ) + { + // OSMO channel must be 224 or 225 + if( aChannel == KOsmoSymbianSystemChannel0 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel0Open ) + { + // Send data + TRap::SetRegister32( aData, KHwOsmoSymbianChannel0Address ); + } + } + else if( aChannel == KOsmoSymbianSystemChannel1 ) + { + // Check that the channel is opened + if( iXtiTxPtr->iSymbianChannel1Open ) + { + // Send data + TRap::SetRegister32( aData, KHwOsmoSymbianChannel1Address ); + } + } + } + +/* +---------------------------------------------------------------------------- + + XtiTx + + SetBitRate + + Sends set bit rate command to Musti + + @param aBitRate Uart bit rate + +----------------------------------------------------------------------------- +*/ +EXPORT_C void XtiTx::SetBitRate( TUint aBitRate ) + { + if( iXtiTxPtr->iTraceEnabled ) + { + TBuf8 string; + + string.Append(_L("!B")); + string.AppendNum( aBitRate, EDecimal ); + + // Send Symbian trace activation message + TRap::SetRegister8( KHwOsmoMsgAsciiPrintfLE, KHwOsmoTraceBoxConfigAddress ); + + // Send data + for (TInt i = 0; i < string.Length(); i++ ) + { + TRap::SetRegister8( string[i], KHwOsmoTraceBoxConfigAddress ); + } + + // Complete message + TRap::SetRegister8( KOsmoTraceBoxConfigChannel, KHwOsmoControlOutputAddress ); + } + } + +/* +---------------------------------------------------------------------------- + + XtiTx + + SendDataLenAckMsg + + Sends acknowledgement for data length message to Musti + +----------------------------------------------------------------------------- +*/ +EXPORT_C void XtiTx::SendDataLenAckMsg( ) + { + if( iXtiTxPtr->iTraceEnabled ) + { + // Send Symbian trace activation message + TRap::SetRegister8( KHwOsmoMsgAsciiPrintfLE, KHwOsmoReceptionAckAddress ); + TRap::SetRegister8( KDataLengthAck, KHwOsmoReceptionAckAddress ); + // Complete message + TRap::SetRegister8( KOsmosReceptionAckChannel, KHwOsmoControlOutputAddress ); + } + } + +/* +---------------------------------------------------------------------------- + + XtiTx + + SendDataLenAckMsg + + Sends acknowledgement for data message to Musti + +----------------------------------------------------------------------------- +*/ +EXPORT_C void XtiTx::SendDataRxAckMsg( ) + { + if( iXtiTxPtr->iTraceEnabled ) + { + // Send Symbian trace activation message + TRap::SetRegister8( KHwOsmoMsgAsciiPrintfLE, KHwOsmoReceptionAckAddress ); + TRap::SetRegister8( KDataMsgAck, KHwOsmoReceptionAckAddress ); + // Complete message + TRap::SetRegister8( KOsmosReceptionAckChannel, KHwOsmoControlOutputAddress ); + } + } + +/* +---------------------------------------------------------------------------- + + XtiTx + + IsTraceEnabled + + Returns the flag that tells if traces are enabled + + @Return EFalse if traces not enabled in RDC, otherwise true + +----------------------------------------------------------------------------- +*/ + + +EXPORT_C TBool XtiTx::IsTraceEnabled() + { + return iXtiTxPtr != NULL && iXtiTxPtr->iTraceEnabled; + } + + +/* +---------------------------------------------------------------------------- + + XtiTx + + CheckMessageIdForStartWrite + + Checks message ID is valid for writing + + @param aMessageId XTI message ID. Defines what type of messages are sent. + Must be KOsmoMsgSymbianTrace, KOsmoMsgAsciiPrintf, or KOsmoMsgPhoneFormatted. + + @Return EFalse if traces not enabled in RDC, otherwise true + +----------------------------------------------------------------------------- +*/ + + +TBool XtiTx::CheckMessageIdForStartWrite( TUint8 aMessageId ) + { + // Message type must be MCU Symbian trace message or MCU ASCII printf message or Phone Formatted + if( aMessageId == KOsmoMsgSymbianTrace || aMessageId == KOsmoMsgAsciiPrintf || aMessageId == KOsmoMsgPhoneFormatted ) + { + return ETrue; + } + return EFalse; + } + + +/* +---------------------------------------------------------------------------- + + XtiTx + + CheckRDC + + Checks R&D Certificate status bit in test ram + + @Return EFalse if traces not enabled in RDC, otherwise true + +----------------------------------------------------------------------------- +*/ + + +TBool XtiTx::CheckRDC() + { + return ETrue; + } + + +//=========================================================================== + +//- Global Functions -------------------------------------------------------- + +//--------------------------------------------------------------------------- +/** + The entry point for a standard extension. Creates XtiTx extension. + + @return KErrNone, if successful +*/ +DECLARE_STANDARD_EXTENSION() + { + TInt ret( KErrNoMemory ); + + if ( XtiTx::Instance() != NULL ) + { + ret = KErrNone; + } + + return ret; + } + +//- Namespace --------------------------------------------------------------- + +// End of File