/**
 *  \file nvsto.h
 *
 *
 */

/*
 *  Copyright (C) 2013. Mindtree Limited.
 *  All rights reserved.
 */

#ifndef _H_NVSTO_
#define _H_NVSTO_

/* --------------------------------------------- Header File Inclusion */
#include "EM_os.h"
#include "nvs.h"

/* --------------------------------------------- Global Definitions */
/** Number of partitions per bank in platform */
#define NVSTO_NUM_PARTITIONS                5

/* --------------------------------------------- Structures/Data Types */
/** NVSTO Handle type */
typedef UINT8   NVSTO_HANDLE;

/* --------------------------------------------- Macros */
/** Persistent storage access wrappers */
#define nvsto_register_ps(size, handle) \
    nvsto_register(NVS_BANK_PERSISTENT, (size), (handle))

#define nvsto_open_pswrite(handle) \
    nvsto_open(NVS_BANK_PERSISTENT, (handle), NVS_ACCESS_WRITE)

#define nvsto_open_psread(handle) \
    nvsto_open(NVS_BANK_PERSISTENT, (handle), NVS_ACCESS_READ)

#define nvsto_close_ps(handle) \
    nvsto_close(NVS_BANK_PERSISTENT, (handle))

#define nvsto_write_ps(handle, buffer, length) \
    nvsto_write(NVS_BANK_PERSISTENT, (handle), (buffer), (length))

#define nvsto_read_ps(handle, buffer, length) \
    nvsto_read(NVS_BANK_PERSISTENT, (handle), (buffer), (length))

#define nvsto_seek_ps(handle, offset) \
    nvsto_seek(NVS_BANK_PERSISTENT, (handle), (offset))

//by hq
#define nvsto_erase_ps(handle) \
    nvsto_erase(NVS_BANK_PERSISTENT, (handle))

#define nvsto_write_header_ps(handle,value) \
    nvsto_write_header(NVS_BANK_PERSISTENT, (handle),(value))

#define nvsto_read_crc16_ps(handle,buffer,length) \
    nvsto_read_crc16(NVS_BANK_PERSISTENT, (handle), (buffer),(length))





/* --------------------------------------------- Internal Functions */

/* --------------------------------------------- API Declarations */
/**
 *  \brief
 *
 *  \Description
 *
 *
 *  \param void
 *
 *  \return void
 */
void nvsto_init (void);

/**
 *  \brief
 *
 *  \Description
 *
 *
 *  \param void
 *
 *  \return void
 */
void nvsto_shutdown (void);

/**
 *  \fn nvsto_register
 *
 *  \brief
 *
 *  \Description
 *
 *
 *  \param storage
 *  \param size
 *  \param handle
 *
 *  \return void
 */
INT8 nvsto_register
     (
         /* IN */  UINT8     storage,
         /* IN */  UINT16    size,
         /* OUT */ UINT8   * handle
     );

/**
 *  \fn nvsto_open
 *
 *  \brief
 *
 *  \Description
 *
 *
 *  \param storage
 *  \param handle
 *  \param access
 *
 *  \return void
 */
INT16 nvsto_open
      (
          /* IN */ UINT8    storage,
          /* IN */ UINT8    handle,
          /* IN */ UINT8    access
      );

/**
 *  \fn nvsto_close
 *
 *  \brief
 *
 *  \Description
 *
 *
 *  \param storage
 *  \param handle
 *
 *  \return void
 */
INT16 nvsto_close
      (
          /* IN */ UINT8    storage,
          /* IN */ UINT8    handle
      );

/**
 *  \fn nvsto_write
 *
 *  \brief
 *
 *  \Description
 *
 *
 *  \param storage
 *  \param handle
 *  \param buffer
 *  \param length
 *
 *  \return Number of bytes written
 */
INT16 nvsto_write
      (
          /* IN */ UINT8    storage,
          /* IN */ UINT8    handle,
          /* IN */ void   * buffer,
          /* IN */ UINT16   length
      );

/**
 *  \fn nvsto_read
 *
 *  \brief
 *
 *  \Description
 *
 *
 *  \param storage
 *  \param handle
 *  \param buffer
 *  \param length
 *
 *  \return Number of bytes read
 */
INT16 nvsto_read
      (
          /* IN */ UINT8    storage,
          /* IN */ UINT8    handle,
          /* IN */ void   * buffer,
          /* IN */ UINT16   length
      );

  /**
   *  \fn nvsto_read_crc16
   *
   *  \brief
   *
   *  \Description
   *
   *
   *  \param storage
   *  \param handle
   *  \param buffer
   *  \param length
   *
   *  \return Number of bytes read
   */
  INT16 nvsto_read_crc16
        (
            /* IN */ UINT8    storage,
            /* IN */ UINT8    handle,
            /* IN */ UINT16   * buffer,
            /* IN */ UINT16   length
        );


/**
 *  \fn nvsto_seek
 *
 *  \brief
 *
 *  \Description
 *
 *
 *  \param storage
 *  \param handle
 *  \param offset
 *
 *  \return void
 */
INT16 nvsto_seek
      (
          /* IN */ UINT8    storage,
          /* IN */ UINT8    handle,
          /* IN */ UINT32   offset
      );


//by hq
/**
 *  \fn nvsto_write_flash
 *
 *  \brief
 *
 *  \Description
 *
 *
 *  \param storage
 *  \param handle
 *
 *  \return void
 */

INT16 nvsto_erase
      (
          /* IN */ UINT8    storage,
          /* IN */ UINT8    handle
      );

/**
*  \fn nvsto_erase
*
*  \brief
*
*  \Description
*
*
*  \param storage
*  \param handle
*
*  \return void
*/
INT16 nvsto_write_header
    (
        /* IN */ UINT8    storage,
        /* IN */ UINT8    handle,
        /* IN */ UINT32    value
    );

#endif /* _H_NVSTO_ */