/* ------------------------------------------------------------------
* 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.
* -------------------------------------------------------------------
*/
#if !defined (TSC_H_INCLUDED)
#define TSC_H_INCLUDED
#include "pvt_params.h"
#ifndef PVMF_NODE_INTERFACE_H_INCLUDED
#include "pvmf_node_interface.h"
#endif
#define PV_2WAY_TSC_EXTENSIONINTERFACE_UUID PVUuid(0x50e23520,0xf8a3,0x11d9,0xbe,0xab,0x00,0x02,0xa5,0xd5,0xc5,0x1b)
enum TSCState
{
TSC_Idle = 0,
TSC_Connecting,
TSC_Communicating,
TSC_Disconnected
};
/** Observer interface for TSC extension interface **/
class TSCObserver
{
public:
virtual ~TSCObserver() {}
/* Responses to commands */
/* Indicates completion of a previously issued Connect command */
virtual void ConnectComplete(PVMFStatus status) = 0;
/* Unsolicited indications */
/* An internal error has occurred. User should disconnect and teardown */
virtual void InternalError() = 0;
/* Requests the user to stop av codecs. Logical channels will be closed by TSC */
virtual void DisconnectRequestReceived() = 0;
/* Indicates establishment of an outgoing logical channel by the stack */
virtual void OutgoingChannelEstablished(TPVChannelId aId,
PVCodecType_t aCodec,
uint8* aFormatSpecificInfo = NULL, uint32 aFormatSpecificInfoLen = 0) = 0;
/* Indicates establishment of an incoming logical channel by the stack */
virtual TPVStatusCode IncomingChannel(TPVChannelId aId,
PVCodecType_t aCodec,
uint8* aFormatSpecificInfo = NULL, uint32 aFormatSpecificInfoLen = 0) = 0;
/* Indicates closure of a logical channel by the stack */
virtual void ChannelClosed(TPVDirection direction,
TPVChannelId id,
PVCodecType_t codec,
PVMFStatus status = PVMFSuccess) = 0;
/* Requests the user to generate Intra content for the specified port/logical channel */
virtual void RequestFrameUpdate(PVMFPortInterface *port) = 0;
};
#define MAX_STACK_ELEMENTS 10
/** Abstract extension interface for all 2-way Terminal State Controllers **/
class TSC : public PVInterface
{
public:
virtual ~TSC() {};
/* Terminal wide commands */
/* Initializes the TSC with reference to mux and controls */
virtual TPVStatusCode InitTsc() = 0;
virtual TSCObserver* SetTscObserver(TSCObserver* aObserver)
{
if (!iObserver)
{
iObserver = aObserver;
return iObserver;
}
return NULL;
}
//virtual TPVStatusCode SetCapability(CapabilitySet* capabilities) = 0;
virtual CPvtTerminalCapability* GetRemoteCapability() = 0;
virtual TSCState GetTscState()
{
return iState;
}
virtual TPVStatusCode ResetTsc() = 0;
virtual TPVStatusCode Connect(uint16 info_len = 0, uint8* info_buf = NULL) = 0;
virtual TPVStatusCode SetTimerRes(uint32 timer_res) = 0;
virtual TPVStatusCode Disconnect() = 0;
virtual TPVStatusCode Abort() = 0;
/* Channel specific commands */
virtual TPVStatusCode SetTerminalParam(CPVTerminalParam* params) = 0;
virtual CPVTerminalParam* GetTerminalParam() = 0;
virtual TPVStatusCode SetOutgoingBitrate(int32 bitrate) = 0;
virtual TPVStatusCode RequestFrameUpdate(PVMFPortInterface* port) = 0;
/* Returns a pointer to the logical channels buffer. DO NOT DELETE */
virtual const uint8* GetFormatSpecificInfo(PVMFPortInterface* port, uint32* len) = 0;
virtual void SetLoopbackMode(TPVLoopbackMode aLoopbackMode) = 0;
virtual void ResetStats() = 0;
virtual void LogStats(TPVDirection dir) = 0;
virtual LogicalChannelInfo* GetLogicalChannelInfo(PVMFPortInterface& port) = 0;
virtual void SetDatapathLatency(TPVDirection aDir, PVMFPortInterface* aPort, uint32 aLatency) = 0;
virtual void SetSkewReference(PVMFPortInterface* aPort, PVMFPortInterface* aReferencePort) = 0;
protected:
TSC() : iState(TSC_Idle), iObserver(NULL)
{
}
TSCState iState;
TSCObserver* iObserver;
private:
};
#endif