/** mbed Microcontroller Library
  ******************************************************************************
  * @file    timer_api.h
  * @author 
  * @version V1.0.0
  * @brief   This file provides following mbed I2C API
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2006-2013 ARM Limited
  *
  * 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.
  ****************************************************************************** 
  */


#include "device.h"

#ifndef __RTK_DCT_H__
#define __RTK_DCT_H__

#ifdef __cplusplus
extern "C" {
#endif

/** @addtogroup dct       DCT
 *  @ingroup    hal
 *  @brief      dct functions
 *  @{
 */

///@name Ameba Common 
///@{

 enum{
  DCT_SUCCESS = 0,     
  DCT_ERR = -1,       
  DCT_ERR_CRC = -2,     
  DCT_ERR_NO_SPACE = -3,   
  DCT_ERR_NO_MEMORY = -4,   
  DCT_ERR_FLASH_RW = -5,    
  DCT_ERR_NOT_FIND = -6,    
  DCT_ERR_INVALID = -7,   
  DCT_ERR_SIZE_OVER = -8,   
  DCT_ERR_MODULE_BUSY = -9,
};

enum{
  DCT_MODULE_STATE_INIT     = 0xFFFFFFFF,
  DCT_MODULE_STATE_VALID      = 0xFFFFFFFE,
  DCT_MODULE_STATE_DELETING   = 0xFFFFFFFC, 
  DCT_MODULE_STATE_DELETED    = 0xFFFFFFF8,
};




/**
  * @brief  Initialize device configuration table.
  * @param  none
  * @retval 32 bit 
  */
int32_t dct_init(void);

/**
 * @brief      Deinitialize device configuration table.
 * @retval     none
 */
void dct_deinit(void);

/**
 * @brief      Register module in DCT.
 * @param      module_name : module name
 * @retval     0  : SUCCESS
 * @retval     <0 : ERROR
 */
int32_t dct_register_module(char *module_name);

/**
 * @brief  Unregister and delete module in DCT.
 * @param  module_name : module name
 * @retval     0  : SUCCESS
 * @retval     <0 : ERROR
 */
int32_t dct_unregister_module(char *module_name);

/**
 * @brief  Open module in DCT.
 * @param  dct_handle : setup module informations in dct handler
 * @param  module_name : module name 
 * @retval     0  : SUCCESS
 * @retval     <0 : ERROR
 */
int32_t dct_open_module(dct_handle_t *dct_handle, char *module_name);

/**
 * @brief  Close module in DCT.
 * @param  dct_handle : dct handler
 * @retval     0  : SUCCESS
 * @retval     <0 : ERROR
 */
int32_t dct_close_module(dct_handle_t *dct_handle);

/**
 * @brief  Write variable name and value in opened module.
 * @param  dct_handle : dct handler
 * @param  variable_name : variable name which you want to store in module
 * @param  variable_value : variable value which you want to store in module
 * @retval     0  : SUCCESS
 * @retval     <0 : ERROR
 */
int32_t dct_set_variable(dct_handle_t *dct_handle, char *variable_name, char *variable_value);

/**
 * @brief  Read value of variable name in opened module.
 * @param  dct_handle : dct handler
 * @param  variable_name : variable name which you want to get from module
 * @param  buffer : read variable value
 * @param  buffer_size : the buffer size
 * @retval     0  : SUCCESS
 * @retval     <0 : ERROR
 */
int32_t dct_get_variable(dct_handle_t *dct_handle, char *variable_name, char *buffer, uint16_t buffer_size);

/**
 * @brief  Delete variable name and value in opened module.
 * @param  dct_handle : dct handler
 * @param  variable_name : variable name which you want to delete in module
 * @retval     0  : SUCCESS
 * @retval     <0 : ERROR
 */
int32_t dct_delete_variable(dct_handle_t *dct_handle, char *variable_name);




#ifdef __cplusplus
}
#endif

#endif/* MBED_TIMER_API_H */