/*
 * Copyright 2010 Trident Microsystems (Far East) Ltd. All rights reserved.
 * All prior copyright rights in this work and the accompanying software
 * products transferred to Trident Microsystems (Far East) Ltd. by written
 * agreement.
 */
/*****************************************************************************/
/* Copyright (c) 2010 NXP B.V.  All rights are reserved.                     */
/*                                                                           */
/* Redistribution and use in source and binary forms, with or without        */
/* modification, are permitted provided that the following conditions        */
/* are met:                                                                  */
/*                                                                           */
/* Redistributions of source code must retain the above copyright            */
/* notice, this list of conditions and the following disclaimer.             */
/*                                                                           */
/* Redistributions in binary form must reproduce the above copyright         */
/* notice, this list of conditions and the following disclaimer in the       */
/* documentation and/or other materials provided with the distribution.      */
/*                                                                           */
/* Neither the name of NXP nor the names of its                              */
/* contributors may be used to endorse or promote products derived from      */
/* this software without specific prior written permission.                  */
/*                                                                           */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     */
/* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      */
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     */
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          */
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     */
/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     */
/* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       */
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE         */
/* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH          */
/* DAMAGE.                                                                   */
/*                                                                           */
/*****************************************************************************/
/**
    @file   phStbStreamingSystem_MSPPinClient.h
    @brief  MSP Client interface

@b  Component:  phStbStreamingSystem.

    MSPPinClient provides an MSP based streaming interface.

    MSP = MediaService Packet (see phIdspMediaService.h & DspClient-Server)
*//*

Rev Date        Author      Comments
--------------------------------------------------------------------------------
  1 20071108    barnish     Original
  2 20080205    F.Raiyat    Added pphStbStreamingSystem_MSP_InOut_t (moved from DspClient)
  3 20080626    burningh    Update license
  4 20090120    batelaan    Update file copyright/license text
--------------------------------------------------------------------------------
    For consistency and standardisation retain the Section Separators.
*/

#ifndef PHSTBSTREAMINGSYSTEM_MSPPINCLIENT_H
#define PHSTBSTREAMINGSYSTEM_MSPPINCLIENT_H

/*******************
* INCLUDE FILES    *
********************/

#include "tmNxTypes.h"
#include "phIdspMediaService.h"

#ifdef __cplusplus
extern "C"
{
#endif

/**************************************************************************
* EXPORTED MACROS         PH[<LNX|TM|NONE>]_IPSTBSTREAMINGSYSTEM_MSPSINKCLIENT_<_WORD>+        *
***************************************************************************/

/*********************************************************************
* EXPORTED TYPEDEFS       [p]ph[<lnx|tm|NONE>]StbStreamingSystem_MSPPinClient_<Word>+_t  *
**********************************************************************/

/** the context data passed between pins on connection */
typedef struct phStbStreamingSystem_MSPContext
{
    /** of actual type ::pphStbStreamingSystem_MSP_InOut_t */
    void    *pFunc;

    /** a context meaningful to the pFunc */
    uint32_t output;
}phStbStreamingSystem_MSPContext_t;


/** Possible operations using the MSPPinClient interface */
typedef enum phStbStreamingSystem_MSPPinClientOp
{
    /* Set MSP Function Pointer */
    phStbStreamingSystem_MSPPinClientOp_SetFuncPtr,
    /* Get MSP Function Pointer */
    phStbStreamingSystem_MSPPinClientOp_GetFuncPtr,
    /* Remove or uninstall MSP Function Pointer */
    phStbStreamingSystem_MSPPinClientOp_RemoveFuncPtr,
    /* Error, or invalid operation */
    phStbStreamingSystem_MSPPinClientOp_Guard
} phStbStreamingSystem_MSPPinClientOp_t;


/******************************************************************************/
/** Functions of this type transfer packets between sink/source pins.
    The packet is free/loaded depending on the flow direction.
    A source (output) pin would call this with buffers containing fresh output.
    A sink (input)  pin would call this with empty buffers.

    @param callerContext   @b IN   Cookie/context for the calling component
    @param calleeContext   @b IN   Cookie/context for the callee  component
    @param pPkt            @b IN   the pointer to the packet
    @param pAlreadyFull    @b OUT  Set to True if the callee is currently unable
                                   to handle this packet, else set to False.

    @retval TM_OK hopefully !
    @note
    THIS FUNCTION MUST NOT BLOCK.
*/
typedef tmErrorCode_t (*pphStbStreamingSystem_MSP_InOut_t) (
                            UInt32  callerContext,
                            UInt32  calleeContext,
                            pphIdspMediaService_Packet_t  pPkt,
                            Bool *  pAlreadyFull);

/******************************************************************************/
/** Performs a MSPPinClient action, depending on the value of the parameter "op"
    @see phStbStreamingSystem_MSPPinClientOp_t

    Constraints:  None

    @param op         IN  Operation to be performed
    @param pData      IN
                          op == SetBuffer:     MSP_CTL_BufferID
                          op == GetBuffer:     SBM_CTL_BufferID*
                          op == RemoveBuffer:  Not used

    @param pinID      IN  Pin index ID
    @param pUserData  IN  The user data that was defined on pin creation

    @retval None
*/
typedef tmErrorCode_t (*phStbStreamingSystem_MSPPinClient_t) (
                            phStbStreamingSystem_MSPPinClientOp_t op,
                            int   pinID,
                            void* pData,
                            void* pUserData);

/**************************************************************************
* EXPORTED DATA      g[k|p|kp|pk|kpk]ph[<lnx|tm|NONE>]StbStreamingSystem_MSPPinClient_<Word>+ *
***************************************************************************/

/****************************************************************************
* EXPORTED FUNCTION PROTOTYPES     ph[<lnx|tm|NONE>]StbStreamingSystem_MSPPinClient_[_<Word>+]   *
*****************************************************************************/

/******************************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* PHSTBSTREAMINGSYSTEM_MSPPINCLIENT_H      Do not add any thing below this line */

