/* SPDX-License-Identifier: LGPL-2.1-only OR BSD-3-Clause */
/******************************************************************************
 *
 * This file is provided under a dual license.  When you use or
 * distribute this software, you may choose to be licensed under
 * version 2.1 of the GNU Lesser General Public License
 * ("LGPLv2.1 License") or BSD License.
 *
 * LGPLv2.1 License
 *
 * Copyright(C) 2019 MediaTek Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2.1 of the GNU Lesser General Public
 * License as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html for more
 * details.
 *
 * BSD LICENSE
 *
 * Copyright(C) 2019 MediaTek Inc.
 * All rights 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 the copyright holder 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
 * HOLDER 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 c_hbbtv.h
 *  $RCSfile: $
 *  $Revision: #1 $
 *  $Date: 2015/06/01 $
 *  $Author: xingju.wang $
 *
 *  @par Description: This header file declares HBBTV exported APIs.
 */
/*----------------------------------------------------------------------------*/
#ifndef _C_OPERA_HBBTV_COMMON_H_
#define _C_OPERA_HBBTV_COMMON_H_

/*-----------------------------------------------------------------------------
                    include files
-----------------------------------------------------------------------------*/
#include "u_common.h"
#include "u_handle.h"
#include "x_os.h"
#include "u_opera_hbbtv.h"
#include "u_opera_hbbtv_common.h"
#include "u_opera_hbbtv_util.h"


/*-----------------------------------------------------------------------------
                    macros, defines, typedefs, enums
-----------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------
                    functions declarations
-----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
 * Name: c_opera_hbbtv_reg_dtv_nfy
 *
 * Description: This function registor notify function for dtv_svc notify status to opera(for Opera).
 *
 * Inputs: VOID
 *
 * Outputs: VOID
 *
 * Returns:
 *        OPERA_HBBTVR_OK        The routine is successful.
 *        OPERA_HBBTVR_FAIL      The routine is fail.
 *
 ----------------------------------------------------------------------------*/

extern INT32 c_opera_hbbtv_reg_dtv_nfy(
        OPERA_HBBTV_NFY_MASK_T            t_care_mask,
        x_opera_hbbtv_dtv_nfy_fct         pf_nfy_fct,
        VOID*                             pv_nfy_tag);

/*-----------------------------------------------------------------------------
 * Name: c_opera_hbbtv_unreg_dtv_nfy
 *
 * Description: This function unregistor notify function for dtv_svc notify status to opera(for Opera).
 *
 * Inputs: VOID
 *
 * Outputs: VOID
 *
 * Returns:
 *        OPERA_HBBTVR_OK        The routine is successful.
 *        OPERA_HBBTVR_FAIL      The routine is fail.
 *
 ----------------------------------------------------------------------------*/

extern INT32 c_opera_hbbtv_unreg_dtv_nfy(
        x_opera_hbbtv_dtv_nfy_fct         pf_nfy_fct,
        VOID*                             pv_nfy_tag);

/*-----------------------------------------------------------------------------
 * Name: c_opera_hbbtv_reg_com_nfy
 *
 * Description: This function registor notify function for receiveing status notify  from opera/MW(for comp).
 *
 * Inputs: VOID
 *
 * Outputs: VOID
 *
 * Returns:
 *        OPERA_HBBTVR_OK        The routine is successful.
 *        OPERA_HBBTVR_FAIL      The routine is fail.
 *
 ----------------------------------------------------------------------------*/

extern INT32 c_opera_hbbtv_reg_com_nfy(
        x_opera_hbbtv_com_nfy_fct       pf_nfy_fct,
        VOID*                           pv_nfy_tag);

/*-----------------------------------------------------------------------------
 * Name: c_opera_hbbtv_status_notify
 *
 * Description: This function send dtv status to Opera(for Comp).
 *
 * Inputs: VOID
 *
 * Outputs: VOID
 *
 * Returns:
 *        OPERA_HBBTVR_OK        The routine is successful.
 *        OPERA_HBBTVR_FAIL      The routine is fail.
 *
 ----------------------------------------------------------------------------*/
extern INT32 c_opera_hbbtv_status_notify(
            INT32                       i4_nfy_type,
            INT32                       i4_nfy_code,
            VOID*                       pv_data,
            UINT32                      ui4_data_len);


/*-----------------------------------------------------------------------------
 * Name: c_opera_hbbtv_3rd_status
 *
 * Description: This function send opera status to MW/AP (for Opera).
 *
 * Inputs: VOID
 *
 * Outputs: VOID
 *
 * Returns:
 *        OPERA_HBBTVR_OK        The routine is successful.
 *        OPERA_HBBTVR_FAIL      The routine is fail.
 *
 ----------------------------------------------------------------------------*/
extern INT32 c_opera_hbbtv_3rd_status(
        INT32                       i4_msg_type,
        VOID*                       pv_data,
        SIZE_T                      z_data_len);

/*-----------------------------------------------------------------------------
 * Name: c_opera_hbbtv_reg_stm_func
 *
 * Description: This function registor notify function for dtv_svc notify status to opera(for Opera).
 *
 * Inputs: VOID
 *
 * Outputs: VOID
 *
 * Returns:
 *        OPERA_HBBTVR_OK        The routine is successful.
 *        OPERA_HBBTVR_FAIL      The routine is fail.
 *
 ----------------------------------------------------------------------------*/

extern INT32 c_opera_hbbtv_reg_stm_cli(
        OPERA_HBBTV_NFY_MASK_T            t_care_mask,
        x_opera_hbbtv_stm_cli_fct         pf_nfy_fct,
        VOID*                             pv_nfy_tag);


extern INT32 c_opera_hbbtv_res_reset(OPERA_HBBTV_LOCK_OWNER      t_owner,
                                         OPERA_HBBTV_RES_TYPE         t_res_type,
                                         OPERA_HBBTV_LOCK_TYPE        t_lock_type,
                                         UINT32                       ui4_count);

extern INT32 c_opera_hbbtv_res_get(OPERA_HBBTV_LOCK_OWNER        t_owner,
                                        OPERA_HBBTV_RES_TYPE          t_res_type,
                                        SEMA_OPTION_T                 t_option,
                                        opera_hbbtv_res_client_cb_fct pf_client_cb_fct,
                                        VOID*                         pv_tag);

extern INT32 c_opera_hbbtv_res_put(OPERA_HBBTV_LOCK_OWNER t_owner, OPERA_HBBTV_RES_TYPE t_res_type);



#endif



