diff -r 000000000000 -r af10295192d8 linklayerprotocols/ethernetnif/IRLAN/IRLANDLL.CPP --- /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 +#include +#include +#include +#include "ETHINTER.H" +#include "PKTDRV.H" +#include "IRLAN.H" +#include "IRLANUTL.H" +#include "INTSOCK.H" +#include "irlantimer.h" + +#ifdef __TRACEWIN__ + #include +#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; +}