/*
 * Copyright (c) 2018 Actions Semiconductor Co., Ltd
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file esd manager interface
 */

#ifndef __EDS_MANGER_H__
#define __EDS_MANGER_H__

/**
 * @defgroup esd_manager_apis esd manager APIs
 * @ingroup system_apis
 * @{
 */

/** esd device link state */
typedef enum
{
	/** esd device link single state */
	DEVICE_STATE_SINGLE_LINK = 1,
	/** esd device link double state */
    DEVICE_STATE_DOUBLE_LINK = 2,
	/** esd device link tws state */
    DEVICE_STATE_TWS = 4,
}esd_device_state_e;

/** esd tag info */
typedef enum
{
	/** tag of app */
    TAG_APP_ID,
	/** tag of play state */
    TAG_PLAY_STATE,
	/** tag of device state */
	TAG_DEVICE_STATE,
	/** tag of music bp info */
	TAG_BP_INFO,
	/** tag of volume info */
	TAG_VOLUME,
}esd_tag_info_e;

/**
 *
 * @brief init esd manager
 *
 * @details init the esd manager memory and manager struct stat
 *
 * @return N/A
 */
void esd_manager_init(void);
/**
 *
 * @brief check esd manager state
 *
 * @details check esd manager state, reset by esd or not reset by esd
 *
 * @return true current reset because of esd
 * @return false current reset not because of esd
 */
bool esd_manager_check_esd(void);
/**
 *
 * @brief reset esd manager
 *
 * @details reset esd manager state to init state,
 *  state saved before will be clear by this function 
 *
 * @return N/A
 */
void esd_manager_reset_finished(void);
/**
 *
 * @brief save current scene to esd mananger 
 * @param tag tag of esd tag info 
 * @param value valu of tag witch need to save
 * @param len max length of value.
 *
 * @return 0 success.
 * @return others failed.
 */
int esd_manager_save_scene(int tag, uint8_t *value , int len);
/**
 *
 * @brief restore current scene from esd mananger 
 * @param tag tag of esd tag info 
 * @param value valu of tag find from esd manager
 * @param len max length of value.
 *
 * @return 0 success.
 * @return others failed.
 */
int esd_manager_restore_scene(int tag, uint8_t *value , int len);
/**
 *
 * @brief deinit esd manager
 *
 * @details clear esd manager state and release manager memory
 *
 * @return N/A
 */
void esd_manager_deinit(void);

/**
 * @} end defgroup esd_manager_apis
 */
#endif