--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/MobileTermination/CDatalinkPacketise.cpp Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2005-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:
+* System Includes
+*
+*/
+
+
+
+#include <stdio.h>
+#include <assert.h>
+
+
+/*******************************************************************************
+ *
+ * Local Includes
+ *
+ ******************************************************************************/
+#include "CDatalinkPacketise.h"
+
+
+/*******************************************************************************
+ *
+ * Definitions
+ *
+ ******************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Constructor - init state vars
+ *
+ ******************************************************************************/
+CDatalinkPacketise::CDatalinkPacketise( TPhoneData *aPhoneData, CLog *aLog ) : iIncomingFrame("CDatalinkPacketise::IncomingFrame"), iOutgoingFrame("CDatalinkPacketise::OutgoingFrame")
+{
+ // check params
+ assert( aPhoneData != NULL );
+ assert( aLog != NULL );
+
+ // set state
+ iAirInterface = NULL;
+ iTEChannel = NULL;
+ iPhoneData = aPhoneData;
+ iLog = aLog;
+}
+
+
+CDatalinkPacketise::~CDatalinkPacketise()
+{
+}
+
+
+/*******************************************************************************
+ *
+ * Access methods
+ *
+ ******************************************************************************/
+void CDatalinkPacketise::SetAirInterface( IAirInterface *aAirInterface )
+{
+ iAirInterface = aAirInterface;
+}
+
+void CDatalinkPacketise::SetTEChannel( ITEChannel *aTEChannel )
+{
+ iTEChannel = aTEChannel;
+}
+
+
+/*******************************************************************************
+ *
+ * Process data from the TEChannel
+ *
+ ******************************************************************************/
+TDataPathError CDatalinkPacketise::ProcessTEData( char *data, int len, int *aErrCode )
+{
+// int i;
+ int errcode;
+// int frame_size;
+// char *frame_pointer;
+// TFrameError ferr;
+// TFrameStatus fstatus;
+ TDataPathError derr = DPE_NONE;
+
+ // check the params
+ assert( aErrCode != NULL );
+ *aErrCode = 0;
+
+ // check that there is an air interface - not an error if not
+ if( iAirInterface == NULL ) {
+ return DPE_NONE;
+ }
+
+ // do not packetise the incoming interface
+ derr = iAirInterface->SendPacket( data, len, &errcode );
+ if( derr != DPE_NONE ) {
+ iLog->WriteLogEntry( SV_WARNING, "CDatalinkPacketise::ProcessTEData", "SendPacket returned error", derr, errcode );
+ }
+ return DPE_NONE;
+
+#if 0
+ // process each byte
+ for( i = 0; i < len; i++ ) {
+
+ // add the byte to the frame
+ ferr = iOutgoingFrame.AddByteToFrame( data[i] );
+
+ // if this overflows the buffer then we send whatever is in the frame and then add it again
+ if( ferr == FE_OVERFLOW ) {
+ frame_pointer = iOutgoingFrame.GetFrameBuffer( &frame_size );
+ derr = iAirInterface->SendPacket( frame_pointer, frame_size, &errcode );
+ if( derr != DPE_NONE ) {
+ iLog->WriteLogEntry( SV_WARNING, "CDatalinkPacketise::ProcessTEData", "SendPacket returned error", derr, errcode );
+ }
+ ferr = iOutgoingFrame.ClearFrameMemoryButNotState();
+ assert( ferr == FE_NONE );
+ ferr = iOutgoingFrame.AddByteToFrame( data[i] );
+ assert( ferr == FE_NONE );
+ continue;
+ }
+
+ // if the add was successful then check to see if the frame is complete and send it if it is
+ fstatus = iOutgoingFrame.GetFrameStatus();
+ if( fstatus == FS_COMPLETE ) {
+ frame_pointer = iOutgoingFrame.GetFrameBuffer( &frame_size );
+ derr = iAirInterface->SendPacket( frame_pointer, frame_size, &errcode );
+ if( derr != DPE_NONE ) {
+ iLog->WriteLogEntry( SV_WARNING, "CDatalinkPacketise::ProcessTEData", "SendPacket returned error", derr, errcode );
+ }
+ iOutgoingFrame.ClearFrame();
+ }
+ }
+#endif
+ // done
+ return DPE_NONE;
+}
+
+
+/*******************************************************************************
+ *
+ * Process data from the UU interface
+ *
+ ******************************************************************************/
+TDataPathError CDatalinkPacketise::ProcessUUData( char *data, int len, int *aErrCode )
+{
+ int i, errcode;
+ int frame_size;
+ char *frame_pointer;
+ TFrameError ferr;
+ TFrameStatus fstatus;
+ TDataPathError derr = DPE_NONE;
+
+ // check the params
+ assert( aErrCode != NULL );
+ *aErrCode = 0;
+
+ // check that there is an air interface - it is not unexpected or problematic if the
+ // channel is not defined so this is not an error.
+ if( iTEChannel == NULL ) {
+ return DPE_NONE;
+ }
+
+ // process each byte
+ for( i = 0; i < len; i++ ) {
+
+ // add the byte to the frame
+ ferr = iIncomingFrame.AddByteToFrame( data[i] );
+
+ // if this overflows the buffer then we send whatever is in the frame and then add it again
+ if( ferr == FE_OVERFLOW ) {
+ frame_pointer = iIncomingFrame.GetFrameBuffer( &frame_size );
+ derr = iTEChannel->SendPacket( frame_pointer, frame_size, &errcode );
+ if( derr != DPE_NONE ) {
+ iLog->WriteLogEntry( SV_WARNING, "CDatalinkPacketise::ProcessTEData", "SendPacket returned error", derr, errcode );
+ }
+ ferr = iIncomingFrame.ClearFrameMemoryButNotState();
+ assert( ferr == FE_NONE );
+ ferr = iIncomingFrame.AddByteToFrame( data[i] );
+ assert( ferr == FE_NONE );
+ continue;
+ }
+
+ // get the frame status -- if the frame is complete then send it
+ fstatus = iIncomingFrame.GetFrameStatus();
+ if( fstatus == FS_COMPLETE ) {
+ frame_pointer = iIncomingFrame.GetFrameBuffer( &frame_size );
+ derr = iTEChannel->SendPacket( frame_pointer, frame_size, &errcode );
+ if( derr != DPE_NONE ) {
+ iLog->WriteLogEntry( SV_WARNING, "CDatalinkPacketise::ProcessUUData", "SendPacket returned an error", derr, errcode );
+ }
+ iIncomingFrame.ClearFrame();
+ }
+ }
+
+ // done
+ return DPE_NONE;
+}