/**
 *  \file nvs.h
 *
 *
 */

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

#ifndef _H_NVS_
#define _H_NVS_

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

/* --------------------------------------------- Global Definitions */
/** NVS Bank types */
#define NVS_BANK_PERSISTENT             0
#define NVS_NUM_BANKS                   1

/** NVS Access modes */
#define NVS_ACCESS_WRITE                0
#define NVS_ACCESS_READ                 1

/** Bank size for the NVS in number of bytes */
#define NVS_BLOCK_SIZE                  4096
#define NVS_NUM_BLOCKS                  2

/* NVS bank states */
#define NVS_CLOSE                       0x00
#define NVS_WROPEN                      0x01
#define NVS_RDOPEN                      0x02

#define NVS_FLASH_BASE1         0x05000
#define NVS_FLASH_BASE2         0x07000
#define NVS_TOTAL_BASE          2
#define NVS_FLASH_UNUSED        0x07
#define NVS_FLASH_WRITING       0x03
#define NVS_FLASH_READY         0x01
#define NVS_FLASH_BAD           0x00
#define NVS_FLASH_FIRST_OK      1
#define NVS_FLASH_SECOND_OK     2
#define NVS_FLASH_INVAILD       0xFF
#define NVS_FLASH_SIZE          MS_PS_RECORD_CORE_MODULES_OFFSET


/* --------------------------------------------- Structures/Data Types */

/* --------------------------------------------- Macros */

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

/* --------------------------------------------- API Declarations */
UINT16 nvs_init (UINT8 bank);
void nvs_shutdown (UINT8 bank);
void nvs_reset (UINT8 bank);
INT8 nvs_open (UINT8 bank, UINT8 mode, UINT16 offset);
INT8 nvs_close (UINT8 bank);
INT16 nvs_write (UINT8 bank, void * buffer, UINT16 size);
INT16 nvs_read (UINT8 bank, void * buffer, UINT16 size);
INT16 nvs_seek(UINT8 bank, UINT32 offset);
INT16 nvs_write_header (UINT8 bank,UINT32 svalue);
INT16 nvs_read_crc16 (UINT8 bank, UINT16 * buffer, UINT16 size);
INT16 nvs_erase (UINT8 bank);



void nvs_test (void);
#endif /* _H_NVS_ */