satengine/SatServer/Commands/GetChannelStatusCmd/src/CGetChannelStatusHandler.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/satengine/SatServer/Commands/GetChannelStatusCmd/src/CGetChannelStatusHandler.cpp Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2002-2007 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: Handles GetChannelStatus command
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "MSatApi.h"
+#include "MSatUtils.h"
+#include "MSatBIPUtils.h"
+#include "MSatBIPDataChannel.h"
+#include "CGetChannelStatusHandler.h"
+#include "SatLog.h"
+
+// CONSTANTS
+// length of channel status info
+const TUint8 KChannelStatusLength = 2;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGetChannelStatusHandler* CGetChannelStatusHandler::NewL( MSatUtils* aUtils )
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::NewL calling" )
+ CGetChannelStatusHandler* self = new( ELeave ) CGetChannelStatusHandler;
+
+ CleanupStack::PushL( self );
+ self->BaseConstructL( aUtils );
+ // ConstructL not needed.
+ CleanupStack::Pop( self );
+
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::NewL exiting" )
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::~CGetChannelStatusHandler
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CGetChannelStatusHandler::~CGetChannelStatusHandler()
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ CGetChannelStatusHandler calling" )
+
+ Cancel();
+
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ ~CGetChannelStatusHandler exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::DoCancel
+// Cancels the sat request.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGetChannelStatusHandler::DoCancel()
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ DoCancel calling" )
+
+ iUtils->USatAPI().NotifyGetChannelStatusCancel();
+
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ DoCancel exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::IssueUSATRequest
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGetChannelStatusHandler::IssueUSATRequest( TRequestStatus& aStatus )
+ {
+ LOG( SIMPLE,
+ "GETCHANNELSTATUS: CGetChannelStatusHandler::IssueUSATRequest calling" )
+
+ // Reset previously received data
+ new (&iGetChannelData) RSat::TGetChannelStatusV2();
+ iUtils->USatAPI().NotifyGetChannelStatus( aStatus, iGetChannelDataPckg );
+
+ LOG( SIMPLE,
+ "GETCHANNELSTATUS: CGetChannelStatusHandler::IssueUSATRequest exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::CommandAllowed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CGetChannelStatusHandler::CommandAllowed()
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::CommandAllowed \
+ calling - exiting" )
+ // Get channel status command is always allowed
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::NeedUiSession
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CGetChannelStatusHandler::NeedUiSession()
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::NeedUiSession\
+ calling - exiting" )
+ // This command doesn't need UI
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::HandleCommand
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGetChannelStatusHandler::HandleCommand()
+ {
+ LOG( SIMPLE,
+ "GETCHANNELSTATUS: CGetChannelStatusHandler::HandleCommand calling" )
+
+ iUtils->NotifyEvent( MSatUtils::EGetChannelStatusExecuting );
+ // Get data channels from BIP Utils
+ CArrayPtrFlat<MSatBIPDataChannel>* dataChannels(
+ iUtils->BipUtils().DataChannels() );
+
+ // Get number of data channels
+ const TInt channelCount( dataChannels->Count() );
+
+ // Create IPC package
+ iGetChannelRsp.SetPCmdNumber( iGetChannelData.PCmdNumber() );
+
+ // Check that count is more than 0
+ if ( channelCount > 0 )
+ {
+ LOG( NORMAL, "GETCHANNELSTATUS: CGetChannelStatusHandler::HandleCommand\
+ Gathering channel statuses" )
+
+ TRAPD( err, GetChannelStatusesL( channelCount ) );
+ if ( KErrNone == err )
+ {
+ // Result is success
+ iGetChannelRsp.iInfoType = RSat::KChannelStatusInfo;
+ iGetChannelRsp.iGeneralResult = RSat::KSuccess;
+ }
+ else
+ {
+ LOG2( NORMAL, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ HandleCommand with error: %i", err )
+ // Error
+ iGetChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
+ iGetChannelRsp.iInfoType = RSat::KMeProblem;
+ iGetChannelRsp.iAdditionalInfo.SetLength( 1 );
+ iGetChannelRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
+ }
+ }
+ else
+ {
+ LOG( NORMAL, "GETCHANNELSTATUS: CGetChannelStatusHandler::HandleCommand\
+ No data channels" )
+ // No data channels available, return one empty ChannelStatus object
+ iGetChannelRsp.iInfoType = RSat::KChannelStatusInfo;
+ iGetChannelRsp.iGeneralResult = RSat::KSuccess;
+ // No channels, return ChannelStatusInfo 00 00
+ iGetChannelRsp.iAdditionalInfo.SetLength( KChannelStatusLength );
+ iGetChannelRsp.iAdditionalInfo[0] = 0x00;
+ iGetChannelRsp.iAdditionalInfo[1] = 0x00;
+ }
+
+ // Send terminal response
+ TerminalRsp( RSat::EGetChannelStatus, iGetChannelRspPckg );
+
+ LOG( SIMPLE,
+ "GETCHANNELSTATUS: CGetChannelStatusHandler::HandleCommand exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::UiLaunchFailed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGetChannelStatusHandler::UiLaunchFailed()
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::UiLaunchFailed \
+ calling-exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::GetChannelStatusesL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGetChannelStatusHandler::GetChannelStatusesL( const TInt aChannelCount )
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ GetChannelStatuses calling" )
+
+ // Get data channels from BIP Utils
+ CArrayPtrFlat<MSatBIPDataChannel>* dataChannels(
+ iUtils->BipUtils().DataChannels() );
+
+ // Each data channel needs 2 slots in additional info
+ iGetChannelRsp.iAdditionalInfo.SetLength(
+ aChannelCount * KChannelStatusLength );
+
+ TInt addInfoIndex = 0;
+ LOG2( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ GetChannelStatusesL aChannelCount: %d", aChannelCount )
+ // Loop data channels
+ if ( dataChannels->Count() >= aChannelCount )
+ {
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ GetChannelStatusesL dataChannels->Count() >= aChannelCount" )
+ for ( TInt i = 0; i < aChannelCount; i++ )
+ {
+ // Get data channel from array
+ MSatBIPDataChannel* channel = dataChannels->At( i );
+ // Generate TChannelStatus
+ RSat::TChannelStatus status(
+ iUtils->BipUtils().GenerateChannelStatusL(
+ channel->ChannelId(), channel->Status() ) );
+
+ // Add first byte (channel ID and context activation state)
+ iGetChannelRsp.iAdditionalInfo[addInfoIndex++] = status[0];
+ // Add second byte (channel status)
+ iGetChannelRsp.iAdditionalInfo[addInfoIndex++] = status[1];
+ }
+ }
+
+ LOG( SIMPLE, "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ GetChannelStatuses exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CGetChannelStatusHandler::CGetChannelStatusHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGetChannelStatusHandler::CGetChannelStatusHandler() :
+ CSatCommandHandler(),
+ iGetChannelData(),
+ iGetChannelDataPckg( iGetChannelData ),
+ iGetChannelRsp(),
+ iGetChannelRspPckg( iGetChannelRsp )
+ {
+ LOG( SIMPLE,
+ "GETCHANNELSTATUS: CGetChannelStatusHandler::\
+ CGetChannelStatusHandler calling - exiting" )
+ }
+
+// End of File