blob: 05c21d22eaab526a2bfb1db5c77ed7967958e22e [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 : sertd.c */
/* file contents : Round Trip Deray Signalling Entity Management */
/* draw : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendment : */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
/************************************************************************/
/* Headerfile Include */
/************************************************************************/
#include "oscl_base.h"
#include "oscl_time.h"
#include "semsgque.h"
#include "rtd.h"
/************************************************************************/
/* function name : _0800_0000 */
/* function outline : Event TRANSFER.request */
/* : Status IDLE */
/* function discription: void Se_Rtd_0800_0000( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::_0800_0000(void)
{
/* Increment out-sequence number */
OutSqcInc() ;
/* RoundTripDelayRequest message send */
StatusWrite(RTD_AWTING_RPS) ;
MsgRequestSend() ;
/* Start mesurement of delay time */
StartMeasurement() ;
/* Start timer for waiting response */
T105TimerStart() ;
}
/************************************************************************/
/* function name : Se_Rtd_0800_0010 */
/* function outline : Event TRANSFER.request */
/* : Status AWAITING RESPONSE */
/* function discription: void Se_Rtd_0800_0010( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::_0800_0010(void)
{
/* Stop timer for waiting response */
T105TimerStop() ;
/* Increment out-sequence number */
OutSqcInc() ;
/* Update status */
StatusWrite(RTD_AWTING_RPS) ;
/* RoundTripDelayRequest message send */
MsgRequestSend() ;
/* Start mesurement of delay time */
StartMeasurement() ;
/* Start timer for waiting response */
T105TimerStart() ;
}
/************************************************************************/
/* function name : Se_Rtd_0801_0000 */
/* function outline : Event RoundTripDelayRequest */
/* : Status IDLE or AWAITING RESPONSE */
/* function discription: void Se_Rtd_0801_0000( */
/* PS_RoundTripDelayRequest ) */
/* input data : RoundTripDelayRequest message parameter */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::_0801_0000(PS_RoundTripDelayRequest pRoundTripDelayRequest)
{
/* RoundTripDelayResponse message send */
MsgResponseSend(pRoundTripDelayRequest) ;
}
/************************************************************************/
/* function name : Se_Rtd_0802_0010 */
/* function outline : Event RoundTripDelayResponse */
/* : Status AWAITING RESPONSE */
/* function discription: void Se_Rtd_0802_0010( */
/* PS_RoundTripDelayRequest ) */
/* input data : RoundTripDelayResponse message parameter */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::_0802_0010(PS_RoundTripDelayResponse pRoundTripDelayResponse)
{
int32 Delay ;
if (pRoundTripDelayResponse->sequenceNumber == OutSqcRead()) /* Ckeck Sequence number */
{
/* Stop timer for waiting response */
T105TimerStop() ;
/* Stop measurement and get delay time */
Delay = StopMeasurement() ;
/* Update status */
StatusWrite(RTD_IDLE) ;
/* TRANSFER.confirm send */
PtvTrnsCfmSend(Delay) ;
}
}
/************************************************************************/
/* function name : Se_Rtd_0803_0010 */
/* function outline : Event T105 Timeout */
/* : Status AWAITING RESPONSE */
/* function discription: void Se_Rtd_0803_0010( int32 ) */
/* input data : Timer sequence numeber */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::_0803_0010(int32 Param)
{
if (Param == TmrSqcNumberRead()) /* check timer-sequence number */
{
/* Update status */
StatusWrite(RTD_IDLE) ;
/* EXPIRY.indication send */
PtvExpIndSend() ;
}
}
/************************************************************************/
/* function name : Se_RtdMsgRequestSend */
/* function outline : RoundTripDelayRequest message edit & send */
/* function discription: void Se_RtdMsgRequestSend( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::MsgRequestSend(void)
{
S_RoundTripDelayRequest roundTripDelayRequest ;
S_H245Msg h245Msg ;
/* Allocate message parameter area and clear it */
oscl_memset(&roundTripDelayRequest, 0, sizeof(S_RoundTripDelayRequest)) ;
/* Set sequence number */
roundTripDelayRequest.sequenceNumber = (uint8) OutSqcRead() ;
/* Set message type (Request message) */
h245Msg.Type1 = H245_MSG_REQ ;
/* Set message id (RoundTripDelayRequest) */
h245Msg.Type2 = MSGTYP_RTD_REQ ;
/* Set parameter address */
h245Msg.pData = (uint8*) & roundTripDelayRequest ;
/* Send message to corder */
MessageSend(&h245Msg) ;
}
/************************************************************************/
/* function name : Se_RtdMsgResponseSend */
/* function outline : RoundTripDelayResponse message edit & send */
/* function discription: void Se_RtdMsgResponseSend( */
/* PS_RoundTripDelayRequest ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::MsgResponseSend(PS_RoundTripDelayRequest pRoundTripDelayRequest)
{
S_RoundTripDelayResponse roundTripDelayResponse ;
S_H245Msg h245Msg ;
oscl_memset(&roundTripDelayResponse, 0, sizeof(S_RoundTripDelayResponse)) ;
/* Set sequence number */
roundTripDelayResponse.sequenceNumber = pRoundTripDelayRequest->sequenceNumber ;
/* Set message type (Response message) */
h245Msg.Type1 = H245_MSG_RPS ;
/* Set message id (RoundTripDelayResponse) */
h245Msg.Type2 = MSGTYP_RTD_RPS ;
/* Set parameter address */
h245Msg.pData = (uint8*) & roundTripDelayResponse ;
/* Send message to corder */
MessageSend(&h245Msg) ;
}
/************************************************************************/
/* function name : Se_RtdPtvTrnsCfmSend */
/* function outline : TRANSFER.confirm primitive edit & send */
/* function discription: void Se_RtdPtvTrnsCfmSend( int32 ) */
/* input data : Delay time */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::PtvTrnsCfmSend(int32 Delay)
{
S_InfHeader header ;
S_Delay_Rtd delay_Rtd ;
/* Allocate primitive parameter area and clear it */
oscl_memset(&delay_Rtd , 0 , sizeof(S_Delay_Rtd)) ;
/* Set delay time */
delay_Rtd.Delay_Value = Delay ;
/* Set information type */
header.InfType = H245_PRIMITIVE ;
/* Set promitive id */
header.InfId = E_PtvId_Rtd_Trf_Cfm ;
/* clear supplement */
header.InfSupplement1 = 0 ;
header.InfSupplement2 = 0 ;
/* Set parameter address */
header.pParameter = (uint8*) & delay_Rtd ;
/* Set parameter size */
header.Size = sizeof(S_Delay_Rtd) ;
/* Send primitive to tsc */
PrimitiveSend(&header) ;
}
/************************************************************************/
/* function name : Se_RtdPtvExpIndSend */
/* function outline : EXPIRY.indication primitive edit & send */
/* function discription: void Se_RtdPtvExpIndSend( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::PtvExpIndSend(void)
{
S_InfHeader header ;
/* Set information type */
header.InfType = H245_PRIMITIVE ;
/* Set promitive id */
header.InfId = E_PtvId_Rtd_Exp_Idc ;
/* clear supplement */
header.InfSupplement1 = 0 ;
header.InfSupplement2 = 0 ;
/* Clear parameter address */
header.pParameter = NULL ;
/* Clear parameter size */
header.Size = 0 ;
/* Send primitive to tsc */
PrimitiveSend(&header) ;
}
#ifdef PVANALYZER /* --------SE Analyzer Tool -------- */
#define ANALYZER_SE 0x0020 // (Assume tag is fixed)
void Show245(uint16 tag, uint16 indent, char* inString);
// =========================================================
// Se_RtdStatusShow()
//
// This function displays state transition information for
// the RTD signaling entity.
// =========================================================
void RTD::StatusShow(uint8 oldStatus, uint8 newStatus)
{
char tempString[80];
Show245(ANALYZER_SE, 0, "RTD State Transition:");
sprintf(tempString, " from--> %s", StateLabel(oldStatus));
Show245(ANALYZER_SE, 0, tempString);
sprintf(tempString, " to--> %s", StateLabel(newStatus));
Show245(ANALYZER_SE, 0, tempString);
Show245(ANALYZER_SE, 0, " ");
}
// ==========================================================
// Se_RtdStateLabel()
//
// Returns a pointer to an approprate state label string.
// ==========================================================
char* RTD::StateLabel(uint8 status)
{
switch (status)
{
case RTD_IDLE:
return("IDLE");
break;
case RTD_AWTING_RPS:
return("AWAITING RESPONSE");
break;
default:
return("UNKNOWN STATE");
}
}
#endif /* --------------------------------- */
/************************************************************************/
/* function name : Se_RtdT105TimerStart */
/* function outline : T105 Timer Start */
/* function discription: void Se_RtdT105TimerStart( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::T105TimerStart(void)
{
/* Increment timer-sequence number */
TmrSqcNumberInc() ;
/* Start timer (T105) */
RequestTimer(E_TmrId_Rtd_T105 , TmrSqcNumberRead() ,
TimerDuration) ;
}
/************************************************************************/
/* function name : Se_RtdT105TimerStop */
/* function outline : T105 Timer Stop */
/* function discription: void Se_RtdT105TimerStop( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::T105TimerStop(void)
{
/* Stop timer (T105) */
CancelTimer(E_TmrId_Rtd_T105) ;
}
/************************************************************************/
/* function name : Se_RtdStartMeasurement */
/* function outline : Start mesurement of Round Trip Delay */
/* function discription: void Se_RtdStartMeasurement( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void RTD::StartMeasurement(void)
{
StartTime.set_to_current_time();
}
/************************************************************************/
/* function name : Se_RtdStopMeasurement */
/* function outline : Stop mesurement of Round Trip Delay */
/* function discription: int32 Se_RtdSStopMeasurement( void ) */
/* input data : None */
/* output data : Round Trip Delay time (milli second) */
/* draw time : '96.11.13 */
/*----------------------------------------------------------------------*/
/* amendent career : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
int32 RTD::StopMeasurement(void)
{
TimeValue StopTime;
StopTime.set_to_current_time();
return (StopTime.to_msec() - StartTime.to_msec());
}