--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/linklayerprotocols/ethernetnif/IRLAN/IRLANDLL.CPP Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,395 @@
+// 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:
+// Interface to IR-LAN
+//
+//
+
+/**
+ @file
+*/
+
+#include <nifman.h>
+#include <nifvar.h>
+#include <nifutl.h>
+#include <es_mbuf.h>
+#include "ETHINTER.H"
+#include "PKTDRV.H"
+#include "IRLAN.H"
+#include "IRLANUTL.H"
+#include "INTSOCK.H"
+#include "irlantimer.h"
+
+#ifdef __TRACEWIN__
+ #include <log.h>
+#else
+ #define LOG(a)
+#endif
+
+
+//#####################################################################
+
+/**
+Global Factory Function.
+@internalComponent
+*/
+extern "C"
+{
+ IMPORT_C CPktDrvFactory * NewIrlanPktDrvFactoryL(); // Force export
+}
+
+/**
+All PktDrv's export as their first Ordinal this global 'C' function.
+This function is called to create construct and return a pointer to an instance of the
+Ethint specific factory class CLANLinkFactory derived from CPktDrvFactory
+@return A pointer to CNifFactory object.
+@internalComponent
+*/
+EXPORT_C CPktDrvFactory* NewIrlanPktDrvFactoryL()
+{
+ CPktDrvFactory *f=new (ELeave) CIrlanPktDrvFactory;
+ LOG(Log::Printf(_L("IRLAN Creating instance of CIrlanPktDrvFactory\r\n")));
+ return f;
+}
+
+
+/**
+Need to switch here on the name and open the according driver DLL.
+@param aParent Pointer to the parent Ethint NIF class.
+@return A pointer to CPktDrvBase object.
+*/
+CPktDrvBase* CIrlanPktDrvFactory::NewDriverL(CLANLinkCommon* aParent)
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN CREATING A PKT DRV: CPktDrvFactory::NewDriverL\r\n")));
+#endif
+ CPktDrvBase *drv = new (ELeave) CIrlanPktDrv(*this);
+ CleanupStack::PushL(drv);
+ drv->ConstructL(aParent);
+ CleanupStack::Pop();
+ return drv;
+}
+
+
+/**
+Packet Driver version number.
+@return The client side version number
+*/
+TVersion CIrlanPktDrvFactory::Version() const
+{
+ return(TVersion(KIrlanMajorVersionNumber,KIrlanMinorVersionNumber,KIrlanBuildVersionNumber));
+}
+
+
+//#####################################################################
+
+/**
+Constructor.
+*/
+CIrlanPktDrv::CIrlanPktDrv(CPktDrvFactory& aFactory) : CPktDrvBase(aFactory)
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN CIrlanPktDrv constructor\r\n")));
+#endif
+ __DECLARE_NAME(_S("CIrlanPktDrv"));
+}
+
+/**
+Destructor.
+*/
+CIrlanPktDrv::~CIrlanPktDrv()
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN ~CIrlanPktDrv\r\n")));
+#endif
+ delete iControl;
+}
+
+/**
+Find and load protocol
+Pure Virtual Construction of the CPktDrvBase object.
+@param aParent Pointer to the CLANLinkCommon class.
+@bug unhandled error codes
+*/
+void CIrlanPktDrv::ConstructL(CLANLinkCommon* aParent)
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN CIrlanPktDrv::ConstructL\r\n")));
+#endif
+ TInt ret;
+ iParent=aParent;
+ // Creating the Irlan state machine
+ TRAP(ret,iControl=CIrlanControlEngine::NewL(this));
+ // Now kick off the Irlan state machine active object
+ TRAP(ret,iControl->StartL());
+}
+
+/**
+Downstack - Supplies the caller with information on the NIF written to the TNifIfInfo class
+defined in nifman.h.
+@param aInfo Class for returning information on the NIF
+@param aIndex PPP Specific
+*/
+TInt CIrlanPktDrv::Info(TNifIfInfo& /*aInfo*/, TInt /*aIndex*/) const
+{
+ return KErrNone;
+}
+
+/**
+This method is only for use when an interface does not have the correct MAC address when ARP
+is started
+*/
+void CIrlanPktDrv::FoundMACAddr()
+{
+ TRAPD(ret,iParent->FoundMACAddrL());
+ if (KErrNone != ret)
+ {
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN CIrlanPktDrv::FoundMACAddrL Failure: %d\r\n"),ret));
+#endif
+ }
+}
+
+
+/**
+Called after we have managed to get a reply to GetFilterConfigCmd
+*/
+void CIrlanPktDrv::LinkLayerUp()
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN CIrlanPktDrv::LinkLayerUp!\r\n")));
+#endif
+ iParent->LinkLayerUp();
+}
+
+
+/**
+This is where we would send out the first ethernet packets.
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::StartInterface()
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN PKTDRV:StartInterface\r\n")));
+#endif
+ return KErrNone;
+}
+
+/**
+Call to LDD or subordinate object to stop/de-initialise the Physical device
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::StopInterface()
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN PKTDRV:StopInterface\r\n")));
+#endif
+
+ return KErrNone;
+}
+
+/**
+Call to LDD or subordinate object to reset/re-initialise the Physical device
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::ResetInterface()
+{
+#ifdef __TRACEWIN__
+ LOG(Log::Printf(_L("IRLAN PKTDRV:ResetInterface\r\n")));
+#endif
+ return KErrNone;
+}
+
+
+/**
+Tx flow control stuff
+Sender Class is generic and does not want to know about RMBuf's
+Copy to a Heap Buffer and Free the packet. EtherII MAC layer comments
+Say we should free the packet buffer
+RMBuf could contain a chain so get into a contiguous buffer
+@param aPacket Reference to a chain of data buffers to be passed to the line.
+@return 0 Tells the higher layer to send no more data.
+ 1 Tells higher layer that it can send more data.
+*/
+TInt CIrlanPktDrv::Send(RMBufChain &aPacket)
+{
+ TInt ret = KErrNone;
+ TRAPD(err,ret = iControl->Send(aPacket));
+ if(err != KErrNone)
+ {
+ ret = err;
+ }
+ return ret;
+}
+
+/**
+Here what the pkt drv must do is go thro' it's list of MAC layers and
+keep trying to process until it gets back a KErrNone.
+@param aPdu A reference to the Packet to process.
+*/
+void CIrlanPktDrv::Process(RMBufChain& aPdu)
+{
+ iParent->Process(aPdu);
+}
+
+/**
+Call to LDD or subordinate object to set the receive mode of the LAN Device
+@param aMode The mode to be set for the LAN Device.
+@return KErrNotSupported LAN Device does not support.
+*/
+TInt CIrlanPktDrv::SetRxMode(TRxMode /*AMode*/)
+{
+ return KErrNotSupported;
+}
+
+/**
+Call to LDD or subordinate object to Get the receive mode of the LAN Device
+@return KErrNotSupported LAN Device does not support.
+*/
+TInt CIrlanPktDrv::GetRxMode() const
+{
+ return KErrNotSupported;
+}
+
+/**
+Specifies the AccessType.
+@return KErrNotSupported LAN Device does not support.
+*/
+TInt CIrlanPktDrv::AccessType()
+{
+ return KErrNotSupported;
+}
+
+/**
+Specifies the ReleaseType.
+@return KErrNotSupported LAN Device does not support.
+*/
+TInt CIrlanPktDrv::ReleaseType()
+{
+ return KErrNotSupported;
+}
+
+/**
+Call to LDD or subordinate object to get the Hardware address of the LAN Device
+@return NULL Failure.
+ (NULL Terminated Binary String) The Hardware Address of the interface. LAN Device
+ Specific
+*/
+TUint8* CIrlanPktDrv::GetInterfaceAddress()const
+{
+ return (iControl->GetInterfaceAddress());
+}
+
+/**
+Call to LDD or subordinate object to set the Hardware address of the LAN Device.
+@param THWAddr Address of where the Multicast list should be written.
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::SetInterfaceAddress(const THWAddr&)
+{
+ return KErrNotSupported;
+}
+
+/**
+This corresponds to getting the relevant values from IrLAN data model
+@param aAddr Address of where the Multicast list should be written.
+@param n Output Parameter , number of Addresses written
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::GetMulticastList(const THWAddr* /*aAddr*/, TInt& /*n*/) const
+{
+ return KErrNotSupported;
+}
+
+/**
+This corresponds to setting the relevant values from IrLAN data model
+@param aAddr Address of where the Multicast list should be written.
+@param n Output Parameter , number of Addresses written
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::SetMulticastList(const THWAddr* /*aAddr*/, TInt /*n*/)
+{
+ return KErrNotSupported;
+}
+
+/**
+Call to LDD or subordinate object to power up the LAN Device.
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::InterfacePowerUp()
+{
+ return KErrNotSupported;
+}
+
+/**
+Call to LDD or subordinate object to power down the LAN Device
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::InterfacePowerDown()
+{
+ return KErrNotSupported;
+}
+
+/**
+Call to LDD or subordinate object to suspend the LAN Device.
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::InterfaceSleep()
+{
+ return KErrNotSupported;
+}
+
+/**
+Call to LDD or subordinate object to resume the LAN Device.
+@return KErrNone if Successful
+ KErrNotSupported LAN Device does not support.
+ Implementation specific Error Code Failure
+*/
+TInt CIrlanPktDrv::InterfaceResume()
+{
+ return KErrNotSupported;
+}
+
+/**
+Receive notifications from agent
+*/
+TInt CIrlanPktDrv::Notification(enum TAgentToNifEventType /*aEvent*/, void* /*aInfo*/)
+{
+ return KErrNotSupported;
+}
+
+/**
+Receive Control() calls from agent/nifman/connection
+*/
+TInt CIrlanPktDrv::Control(TUint /*aLevel*/,TUint /*aName*/,TDes8& /*aOption*/, TAny* /*aSource*/)
+{
+ return KErrNotSupported;
+}