blob: 0c908c30c6a4eb22def80f953d5cb752ef3dc1ff [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
// ----------------------------------------------------------------------
//
// This Software is an original work of authorship of PacketVideo Corporation.
// Portions of the Software were developed in collaboration with NTT DoCoMo,
// Inc. or were derived from the public domain or materials licensed from
// third parties. Title and ownership, including all intellectual property
// rights in and to the Software shall remain with PacketVideo Corporation
// and NTT DoCoMo, Inc.
//
// -----------------------------------------------------------------------
/************************************************************************/
/* file name : semt.h */
/* file contents : Multiplex Table Signalling Entity */
/* : Management Header */
/* draw : '96.11.11 */
/*----------------------------------------------------------------------*/
/* amendment : */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
#ifndef _SEMT_H_
#define _SEMT_H_
/************************************************************************/
/* Headerfile Include */
/************************************************************************/
#include "oscl_timer.h"
#include "oscl_map.h"
#include "h245pri.h"
#include "sebase.h"
#include "oscl_mem.h"
/************************************************************************/
/* Multuplex Table Status Definition */
/************************************************************************/
#define MT_OUTGOING_IDLE 0X00 /* Outgoing Idle */
#define MT_OUTGOING_AWTING_RPS 0X10 /* Outgoing Awaiting Response */
#define MT_INCOMING_IDLE 0X01 /* Incoming Idle */
#define MT_INCOMING_AWTING_RPS 0X11 /* Incoming Awaiting Response */
#define T104_TIMER_DURATION 30 /* In seconds */
/************************************************************************/
/* Entry Number Type Definition */
/************************************************************************/
#define MAX_MUX_ENTRIES 15
class MTEntries
{
public:
MTEntries()
{
Clear();
}
~MTEntries() {}
int32 SizeRead()
{
return SizeMuxTableEntries;
}
uint32* MuxTableEntriesRead()
{
return MuxTableEntries;
};
void Clear()
{
SizeMuxTableEntries = 0;
oscl_memset(MuxTableEntries, 0, sizeof(MuxTableEntries[0]));
}
void Write(PS_MultiplexEntryDescriptor descriptors, int32 size)
{
SizeMuxTableEntries = size;
for (int ii = 0; ii < size && ii < MAX_MUX_ENTRIES; ii++)
{
MuxTableEntries[ii] = descriptors->multiplexTableEntryNumber;
descriptors++;
}
}
private:
int32 SizeMuxTableEntries;
uint32 MuxTableEntries[ MAX_MUX_ENTRIES ];
};
/* This interface provides utility functions that will be required by multiplex entry send
state managers */
class MultiplexEntrySendUtility
{
public:
virtual ~MultiplexEntrySendUtility() {}
virtual void MsgMtSend(PS_MuxDescriptor, uint8 sn) = 0;
virtual void PtvTrfCfmSend(int32 sn) = 0;
virtual void PtvRjtIdcSend(S_InfHeader::TDirection dir, int32 Source , PS_MeRejectCause p_Cause, int32 sn) = 0;
virtual void MsgMtRlsSend(MTEntries& entries) = 0;
virtual void RequestT104Timer(int32 sn) = 0;
virtual void CancelT104Timer(int32 sn) = 0;
};
/* This class maintains state information about outgoing multiplex entry send requests */
//class MultiplexEntrySendMgr : public HeapBase
class MultiplexEntrySendMgr : public HeapBase
{
public:
MultiplexEntrySendMgr(int32 sn, MultiplexEntrySendUtility* util);
void TransferRequest(PS_MuxDescriptor p_MuxDescriptor);
void MultiplexEntrySendAck(PS_MultiplexEntrySendAck p_MultiplexEntrySendAck);
void MultiplexEntrySendReject(PS_MultiplexEntrySendReject p_MultiplexEntrySendReject);
void T104Timeout();
private:
void Write(PS_MultiplexEntryDescriptor descriptors, int32 size);
void StatusWrite(uint32 status);
void T104TimerStart(void) ;
void T104TimerStop(void) ;
MTEntries iOutMTEntries;
MultiplexEntrySendUtility* iUtil;
int32 iSn;
uint32 iStatus;
};
/************************************************************************/
/* Function Prototype Declare */
/************************************************************************/
typedef Oscl_Map<int32, MultiplexEntrySendMgr*, OsclMemAllocator> PendingMtSendMap;
class MT : public SEBase, public MultiplexEntrySendUtility, public OsclTimerObserver
{
public:
MT();
~MT()
{
Reset();
}
void Reset();
void TransferRequest(PS_MuxDescriptor) ;
void _0501_0001(PS_MultiplexEntrySend) ;
void _0501_0011(PS_MultiplexEntrySend) ;
void _0502_0011(uint32 sequenceNumber, PS_MuxDescriptor pMux) ;
void _0503_0011(PS_MeRejectCause) ;
void MultiplexEntrySendAck(PS_MultiplexEntrySendAck) ;
void MultiplexEntrySendReject(PS_MultiplexEntrySendReject) ;
void _0506_0010(int32) ;
void _0507_0011(void) ;
/* MultiplexEntrySendUtility virtuals */
void MsgMtSend(PS_MuxDescriptor, uint8 sn) ;
void PtvTrfCfmSend(int32 sn) ;
void PtvRjtIdcSend(S_InfHeader::TDirection dir, int32 Source , PS_MeRejectCause p_Cause, int32 sn);
void MsgMtRlsSend(MTEntries& entries) ;
void RequestT104Timer(int32 sn);
void CancelT104Timer(int32 sn);
/* OsclTimer virtuals */
void TimeoutOccurred(int32 timerID, int32 timeoutInfo);
private:
MT(const MT&);
void MsgMtAckSend(uint32 sequenceNumber, PS_MuxDescriptor pMux) ;
void MsgMtRjtSend(PS_MeRejectCause) ;
void PtvTrfIdcSend(PS_MultiplexEntrySend) ;
public:
uint8 StatusRead2(void)
{
return Status2;
}
private:
void StatusWrite(uint8 status)
{
if (status & 0x01) /* Incoming */
{
#ifdef PVANALYZER /* --------SE Analyzer Tool -------- */
StatusShow(Status2, status);
#endif /* --------------------------------- */
Status2 = status;
}
}
#ifdef PVANALYZER /* --------SE Analyzer Tool -------- */
void StatusShow(uint8 oldStatus, uint8 newStatus);
char* StateLabel(uint8 status);
#endif
void OutSqcClear(void)
{
OutSqc = 0;
}
void OutSqcInc(void)
{
OutSqc++;
}
int32 OutSqcRead(void)
{
return OutSqc;
}
void InSqcClear(void)
{
InSqc = 0;
}
void InSqcWrite(int32 insqc)
{
InSqc = insqc;
}
int32 InSqcRead(void)
{
return InSqc;
}
void TmrSqcNumberClear(void)
{
TmrSqcNumber = 0;
}
int32 TmrSqcNumberRead(void)
{
return TmrSqcNumber;
}
void TmrSqcNumberInc(void)
{
TmrSqcNumber++;
}
uint8 Status2;
int32 OutSqc;
int32 InSqc;
int32 TmrSqcNumber;
MTEntries InMTEntries;
PendingMtSendMap iPendingMtSend;
OsclTimer<OsclMemAllocator> iTimer;
};
#endif /* _SEMT_ */