/* 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.
 *
 *****************************************************************************/

/*-----------------------------------------------------------------------------
 * $RCSfile: x_flm.h,v $
 * $Revision: #1 $
 * $Date: 2015/05/29 $
 * $Author: brianpc.huang $
 *
 * Description:
 *         This header file contains Favorite List Manager (FLM) specific
 *         definitions, which are exported.
 *---------------------------------------------------------------------------*/

#ifndef _X_FLM_H_
#define _X_FLM_H_

/*-------------------------------------------------------------------------
                    include files
-------------------------------------------------------------------------*/

#include "x_fm.h"
#include "u_cdb.h"
#include "u_flm.h"

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


/* FLM handle type */
#define FLM_HANDLE (HT_GROUP_FLM + ((HANDLE_TYPE_T) 0))
/* handle for FLM master list change notifications */
#define FLM_MASTER_NOTIFY_HANDLE (HT_GROUP_FLM + ((HANDLE_TYPE_T) 1))

/*-------------------------------------------------------------------------
                    functions
 ------------------------------------------------------------------------*/

extern
INT32 x_flm_create
(
    CHAR*           ps_name,
    VOID*           pv_tag,
    pf_flm_nfy_func pf_flm_notify,
    HANDLE_T*       ph_fav_handle
);

extern
INT32 x_flm_delete
(
    HANDLE_T h_fav_handle
);

extern
INT32 x_flm_get_num_lists
(
    UINT16* pui2_numlists
);

extern
    INT32 x_flm_get_name_len_64
(
    UINT16  ui2_listnum,
    UINT64* pz_length
);

INT32 x_flm_get_name_len
(
    UINT16  ui2_listnum,
    SIZE_T* pz_length
);


extern
INT32 x_flm_get_name
(
    UINT16  ui2_listnum,
    CHAR*   ps_name,
    UINT32* pui4_master_version
);

extern
INT32 x_flm_open
(
    CHAR*           ps_name,
    VOID*           pv_tag,
    pf_flm_nfy_func pf_flm_notify,
    HANDLE_T*       ph_fav_handle
);

extern
INT32 x_flm_close
(
    HANDLE_T    h_fav_handle
);

extern
UINT16 x_flm_get_max_lists(VOID);

extern
UINT16 x_flm_get_max_size(VOID);

extern
INT32 x_flm_get_num_recs
(
    HANDLE_T    h_fav_handle,
    UINT16*     pui2_num_records,
    UINT32*     pui4_fav_version
);

extern
INT32 x_flm_lock
(
    HANDLE_T    h_fav_handle
);

extern
INT32 x_flm_unlock
(
    HANDLE_T    h_fav_handle
);

extern
INT32 x_flm_add_rec
(
    HANDLE_T      h_fav_handle,
    FLM_REC_T*    pt_record,
    UINT16*       pui2_position
);

extern
INT32 x_flm_del_rec
(
    HANDLE_T h_fav_handle,
    UINT16   ui2_position
);

extern
INT32 x_flm_get_rec
(
    HANDLE_T      h_fav_handle,
    UINT16        ui2_position,
    FLM_REC_T*    pt_rec,
    UINT32*       pui4_version
);

extern
INT32 x_flm_get_position
(
    HANDLE_T     h_fav_handle,
    UINT16*      pui2_position,
    FLM_REC_T*   pt_rec,
    UINT16       ui2_record_index,
    UINT32*      pui4_version
);

extern
INT32 x_flm_swap_rec
(
    HANDLE_T h_fav_handle,
    UINT16   ui2_from,
    UINT16   ui2_to
);

extern
INT32 x_flm_move_rec
(
    HANDLE_T h_fav_handle,
    UINT16   ui2_from_position,
    UINT16*  pui2_to_position
);

extern
INT32 x_flm_master_change_reg(
    VOID*           pv_tag,
    pf_flm_nfy_func pf_flm_notify,
    HANDLE_T*       ph_notify_handle
);

extern
INT32 x_flm_fs_load(
    HANDLE_T        h_dir,
    CHAR*           ps_pathname,
    CHAR*           ps_listname,
    VOID*           pv_tag,
    pf_flm_nfy_func pf_flm_notify,
    HANDLE_T*       ph_handle
);

extern
INT32 x_flm_fs_store(
    HANDLE_T h_dir,
    CHAR*    ps_pathname,
    HANDLE_T h_fav_handle
);

extern
INT32 x_flm_fs_qry(
    HANDLE_T h_dir,
    CHAR*    ps_pathname,
    UINT16   ui2_index,
    CHAR*    ps_listname
);

extern
INT32 x_flm_fs_del(
    HANDLE_T h_dir,
    CHAR*    ps_pathname,
    CHAR*    ps_listname
);

#endif

