kerneltest/e32test/ethernet/pump/activeio.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/ethernet/pump/activeio.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,183 @@
+/*
+* 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 the License "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:
+*
+*/
+#if (!defined __ACTIVEIO_H__)
+#define __ACTIVEIO_H__
+
+#include <e32base.h>
+
+class CIOBuffer : public CBase
+	{
+public:
+	~CIOBuffer();
+	HBufC8*	Data() const;
+	void FreeData();
+	TPtr8& Ptr();
+	void Assign(HBufC8* aBuffer = NULL);
+    static CIOBuffer* NewL(HBufC8* aBuf = NULL);
+    static CIOBuffer* NewL(const TInt aSize);
+	static TInt LinkOffset();
+
+private:
+	CIOBuffer();
+	void ConstructL(const TInt aSize);
+	void ConstructL(HBufC8* aBuffer);
+	
+	TSglQueLink iLink;
+	HBufC8* iBuf;
+	TPtr8 iBufPtr;
+	};
+
+///////
+// Pure Abstract 'M' interface classes that CDemoControl derives from
+class MWriterNotify
+	{
+public:
+	virtual void WriteCompleteL(const TInt aStatus) = 0;
+	};
+
+class MReaderNotify
+	{
+public:
+	virtual void ReadCompleteL(const TInt aStatus) = 0;
+	};
+///////
+
+class CDemoWriter : public CActive
+// Active object class for writing to the server
+	{
+public:
+	~CDemoWriter();
+
+	static CDemoWriter* NewL(MWriterNotify& aNotify,RBusDevEthernet& aCard);
+
+	void WriteL(const TDesC8& aBuffer);
+	void RunL();
+	void DoCancel();
+private:
+	// Construct with pointer to the notifier and reference to the server session
+
+
+	void ConstructL(MWriterNotify& aNotify,RBusDevEthernet& aCard);
+
+
+	CDemoWriter(TInt aPriority) : CActive(aPriority){};
+private:
+
+
+	RBusDevEthernet *iCard;
+
+	MWriterNotify* iNotify;
+	};
+
+class CDemoReader : public CActive
+	{
+public:
+	~CDemoReader();
+
+
+	static CDemoReader* NewL(MReaderNotify& aNotify,RBusDevEthernet& aCard);
+
+	void RunL();
+	void DoCancel();
+	void ReadL(TDes8& aBuffer);
+private:
+
+
+	void ConstructL(MReaderNotify& aNotify,RBusDevEthernet& aCard);
+
+
+	CDemoReader(TInt aPriority) : CActive(aPriority){};
+private:
+	MReaderNotify* iNotify;
+
+
+	RBusDevEthernet *iCard;
+
+	};
+
+
+// C Class derived fron CActive
+// CActive derived from CBase
+// See PSP Chapter 18 Active Objects
+class CDemoControl : public CActive , public MReaderNotify , public MWriterNotify
+	{
+public:
+	~CDemoControl();
+	static CDemoControl* NewLC();
+	// Mandatory Overrides of CActive pure virtuals
+	void RunL();
+	void DoCancel();
+
+	static TInt Callback(TAny* aCtrl);
+	void RequestCharacter();
+	virtual void WriteCompleteL(const TInt aStatus);
+	virtual void ReadCompleteL(const TInt aStatus);
+
+	void ReadAndSetDestMacL();
+	void ReadAndDisplaySettings();
+	CIOBuffer* CreateRandomPacketL(TInt aOffset);
+	void SendAndCompareEchoL();
+	void CompareEcho();
+	void HandleWriteCompleteSndCmpEchoModeL();
+	void HandleReadCompleteSndCmpEchoModeL();
+	
+private:
+	void ConstructL();
+	CDemoControl(TInt aPriority) : CActive(aPriority){};
+	void ProcessKeyPress(TChar aChar);
+	void HelpText() const;
+	void StartCardL();
+	void StopCard();
+	void EchoL();
+	void PumpL();
+	void ReadL();
+	void StopL();
+	void PrintError(TChar aChar);
+	void EmptyWriteQueue();
+	void HandleWriteCompleteEchoModeL();
+	void HandleReadCompleteEchoModeL();
+	void HandleWriteCompletePumpModeL();
+	void HandleReadCompletePumpModeL();
+	void HandleReadCompleteReadModeL();
+	void FlipMacAddresses(TDes8& aBuf);
+	CIOBuffer*  CreateSendPacketL();
+
+private:
+	enum TIfState {EIdle,EEcho,ERead,EPump,ESendAndCmpEcho};
+	TIfState iIfState;
+
+	CDemoWriter* iWriter;
+	CDemoReader* iReader;
+	TInt		iPacketsWritten;
+	TInt		iPacketsRead;
+	CPeriodic*	iTimer;
+
+	TBuf8<1600> iReadBuffer;
+
+
+	RBusDevEthernet iCard;
+	TBuf8<32>	iConfig;
+
+	TSglQue<CIOBuffer> iWriteQueue;
+
+	TBool iSendAndEchoSame;
+	TInt iIntRandomOffset;
+	TInt64 iIntSeed;
+	static TInt iSendAndEchoCmpCounter;
+	};
+
+#endif