//
// * Copyright 2004 Neusoft America Inc.
// * All rights reserved.
// * This component and the accompanying materials are made available
// * under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available
// * at the URL "http://www.eclipse.org/legal/epl-v10.html".
// *
// * Contributors:
// * Keith Collins (Neusoft America Inc.) original software development and additional code and modifications.
// * Thomas Gahagen (Neusoft America Inc.) additional code and modifications.
// * Zhen Yuan (Neusoft America Inc.) additional code and modifications.
// *
// * Description: This file is the root of the module. This file contains the
// * declarations for the CPortFactory class and is derived from
// * C32's CSerial.
//
// PortFactory.h
/** @file PortFactory.h
*
*/
#ifndef _PORTFACTORY_H__
#define _PORTFACTORY_H__
#include <e32std.h>
#include <e32hal.h>
#include <c32comm.h>
#include <d32comm.h>
#include <cs_port.h>
#include <cdblen.h>
#include "CsyGlobals.h"
class CPortC32Interface;
class CPortC32InterfaceBase;
class CChannelMgrBase;
class CChannelMgrCtrl;
class CChannelMgrCmdData;
class CMux0710Protocol;
class CCommFrameWriterAo;
class CCommFrameReaderAo;
/** @class CPortFactory PortFactory.h "PortFactory.h"
* @brief This class provides the factory object which is used to
* construct port objects in the CSY. There is only one instance of
* this class in the CSY. CPortFactory is derived from C32's CSerial
* base class. CPortFactory is also responsible for allocating the
* CSY's multiplexer objects and LDD interface objects.
*/
class CPortFactory : public CSerial
{
public:
enum TC32ClientType
{
EC32ClientUndefined,
EC32ClientTsy,
EC32ClientNif,
EC32ClientIpNif
};
struct TC32PortInfo
{
TC32ClientType iClientType;
TInt iPortNumber;
};
public:
static CPortFactory* NewL();
~CPortFactory();
static void CloseObject(TAny* aObject);
inline TBool IsMultiplexerCreated();
TC32ClientType GetClientType(TInt aPortNum);
inline CCommFrameWriterAo* GetCommWriterAo() const;
inline CCommFrameReaderAo* GetCommReaderAo() const;
RBusDevComm* DTEPort(); // LDD
void ConnectControlChannel();
void DisconnectControlChannel();
void ChannelCtrlDoCancel();
CPortC32InterfaceBase* FindPortC32Interface(const TUint8 aDlcNum);
CChannelMgrCmdData* FindChannelMgrByDlcNum(const TUint8 aDlcNum);
inline CMux0710Protocol* GetMux0710Protocol() const;
inline CChannelMgrCtrl* GetControlChannel() const;
void RemoveC32Port(CPortC32InterfaceBase* aPort);
void ConnectIpNifPort(const TUint8 aDlcNum);
TSecurityPolicy PortPlatSecCapability(TUint aPort) const;
TBool FindDlcToEnable();
void FindActiveDataDlcToStop();
void StopAnyDlc();
TBool DecrementNumOfOpenPorts();
private:
CPortFactory();
void ConstructL();
void CreateCsyObjectsL();
// from CSerial
virtual CPort* NewPortL(const TUint aUnit);
virtual void Info(TSerialInfo& aSerialInfo);
// utility methods
CChannelMgrCmdData* FindChannelMgr(const TUint aC32PortNum);
TInt ConfigurePhysicalCommPortL();
private:
// attributes
TBool iMuxObjectsCreated;
// C32 interface ports
TSglQue<CPortC32InterfaceBase> iPortC32InterfaceList;
TSglQueIter<CPortC32InterfaceBase> iPortC32InterfaceIter;
// multiplexer framer
CMux0710Protocol* iMux0710Protocol;
// multiplexer Control channel
CChannelMgrCtrl* iChannelCtrl;
// multiplexer Command channels
TSglQue<CChannelMgrCmdData> iDataChannelList;
TSglQueIter<CChannelMgrCmdData> iDataChannelIter;
// interface to the serial port logical device driver
RBusDevComm iCommPort;
CCommFrameWriterAo* iCommWriterAo;
CCommFrameReaderAo* iCommReaderAo;
TBool iDisconnectInProgress;
TUint iLastDlcNum;
TUint iNumOfOpenPorts;
TBool iOpenPortFailed;
};
// Inline Methods
inline CCommFrameWriterAo* CPortFactory::GetCommWriterAo() const
/**
* Return a pointer to the CSY's comm writer object.
* @param void
* @return Pointer to the CSY's comm writer object
*/
{
return iCommWriterAo;
}
inline CCommFrameReaderAo* CPortFactory::GetCommReaderAo() const
/**
* Return a pointer to the CSY's comm reader object.
* @param void
* @return Pointer to the CSY's comm reader object
*/
{
return iCommReaderAo;
}
inline RBusDevComm* CPortFactory::DTEPort()
/**
* Return a pointer to the CSY's LDD port interface object.
* @param void
* @return Pointer to the CSY's LDD port interface object
*/
{
return (&iCommPort);
}
inline CMux0710Protocol* CPortFactory::GetMux0710Protocol() const
/**
* Return a pointer to the CSY's mux protocol object.
* @param void
* @return Pointer to the CSY's mux protocol object
*/
{
return iMux0710Protocol;
}
inline CChannelMgrCtrl* CPortFactory::GetControlChannel() const
/**
* Return a pointer to the CSY's control channel object.
* @param void
* @return Pointer to the CSY's control channel object
*/
{
return iChannelCtrl;
}
#endif // _PORTFACTORY_H__