testexecmgmt/ucc/Source/MobileTermination/CDatalinkPacketise.cpp
changeset 0 3da2a79470a7
--- /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;
+}