linklayerprotocols/slipnif/SRC/SLIP.H
changeset 0 af10295192d8
child 5 1422c6cd3f0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/linklayerprotocols/slipnif/SRC/SLIP.H	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,159 @@
+/**
+* Copyright (c) 1997-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:
+*
+*/
+
+
+
+/**
+ @file SLIP.H
+ @internalComponent
+*/
+
+#if !defined(__SLIP_H__)
+#define __SLIP_H__
+
+#include <es_mbuf.h>
+#include <comms-infras/nifif.h>
+#include <nifutl.h>
+
+////////////////////////////////////////////////////////////////////////////////
+
+const TInt KSlipDefaultMtu = 576; ///< default Maximum transmit unit
+const TUint KSlipEndCh = 0300;    ///< End of frame
+const TUint KSlipEscCh = 0333;
+const TUint KSlipEscEndCh = 0334;
+const TUint KSlipEscEscCh = 0335;
+const TUint KSlipWriterPrority = 20;
+const TUint KSlipReaderPrority = 10;
+
+////////////////////////////////////////////////////////////////////////////////
+
+enum TSlipPanic {	PanicSlipAssert1,
+					PanicSlipAssert2,
+					PanicSlipAssert3,
+					PanicSlipAssert4,
+					PanicSlipAssert5,
+					PanicSlipAssert6,
+					PanicSlipAssert7,
+					PanicSlipAssert8
+
+				};
+void SlipPanic(TSlipPanic aPanic);
+
+enum TSlipFault {};
+
+void SlipFault(TSlipFault aFault);
+
+////////////////////////////////////////////////////////////////////////////////
+// SLIP Protocol Factory
+////////////////////////////////////////////////////////////////////////////////
+
+NONSHARABLE_CLASS(CSlipIfFactory) : public CNifIfFactory
+/**
+@internalComponent
+*/
+	{
+protected:
+	virtual void InstallL();
+	virtual CNifIfBase* NewInterfaceL(const TDesC& aName);
+	TInt Info(TNifIfInfo& aInfo, TInt aIndex) const;
+	};
+
+////////////////////////////////////////////////////////////////////////////////
+// Slip Interface
+////////////////////////////////////////////////////////////////////////////////
+
+const TUint KSlipBufSize = 1024;
+
+class TSlipBuf : public TBuf8<KSlipBufSize>
+/**
+@internalComponent
+*/
+	{
+public:
+#ifndef _DEBUG
+	inline const TUint8 &operator[](TInt aIndex) const
+		{ return iBuf[aIndex]; }
+	inline TUint8 &operator[](TInt aIndex)
+		{ return iBuf[aIndex]; }
+#endif
+	};
+
+const TUint KSlipIsUp = 0x01;
+const TUint KSlipSendBusy = 0x02;
+const TUint KSlipSendInUse = 0x04;
+const TUint KSlipRecvEscPend = 0x08;
+const TUint KSlipCommConfigOk = 0x10;
+
+NONSHARABLE_CLASS(CSlip) : public CNifIfLink, public MComm
+/**
+@internalComponent
+*/
+	{
+public:
+	CSlip(CNifIfFactory& aFactory);
+	~CSlip();
+
+	virtual void BindL(TAny *aId);
+	virtual TInt State();
+	virtual TInt Control(TUint aLevel,TUint aName,TDes8& aOption, TAny* aSource=0);
+	virtual TInt Send(RMBufChain& aPdu, TAny* aSource=0);
+	virtual TInt Start();
+	virtual void Stop(TInt aReason, MNifIfNotify::TAction aAction);
+	virtual CNifIfBase* GetBinderL(const TDesC& aName);
+	virtual void Info(TNifIfInfo& aInfo) const;
+	virtual TInt Notification(TAgentToNifEventType aEvent, void * aInfo);
+	virtual void Restart(CNifIfBase* aIf);
+	static void FillInInfo(TNifIfInfo& aInfo);
+	//
+	void CommReadComplete(TInt aStatus);
+	void CommWriteComplete(TInt aStatus);
+	
+	// Slip Family 
+	static void FillinInfo(TServerProtocolDesc &aEntry);
+private:
+	void DoRecv();
+	void DoSend();
+	void LinkDown(TInt aReason);
+	TInt PacketModeOn();
+	TInt PacketModeOff();
+	TInt SpeedMetric();
+private:
+	TCommConfig iOrigConfig;
+	TUint iFlags;
+	CProtocolBase* iIpProtocol;
+	
+	/** Sender */
+	CAsyncCallBack* iSendCallBack;
+
+	RMBufPktQ iSendPktQ;
+	RMBufChain iSendPkt;
+	RMBuf* iSendMBuf;
+	TUint8* iSendMPtr;
+	TSlipBuf iSendBuf;
+
+	TInt iSendMBufs;	///< Send current level 
+	TInt iSendLoWat;	///< Send flow on level 
+	TInt iSendHiWat;	///< Send flow off level 
+	TSlipBuf iRecvBuf;	///< Receiver 
+
+	TInt iRecvLen;
+	RMBuf* iRecvMBuf;
+	TUint8* iRecvMPtr;
+	RMBufQ iRecvQ;
+	};
+
+#endif