You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.7 KiB
C++

/*
* FRAMDATABASE.h
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include <math.h>
#include <stdint.h>
#include "framework.h"
#include "FRAM/FRAMDefinitions.h"
#include "FRAM/FRAMBuffer.h"
#include "FRAM/FRAMDataObjects.h"
#include "FRAM/FRAMVariant.h"
#include "SYSCTRL/SystemConfigurator.h"
#include "SYSCTRL/SystemDefinitions.h"
#ifndef FRAM_FRAMDATABASE_H_
#define FRAM_FRAMDATABASE_H_
namespace FRAM
{
class FRAMDATABASE
{
public:
enum mode_t {WAIT, READ, BURN, ERASE, VERIFY, RESTORE};
enum state_t {BUSY, FREE};
private:
mode_t m_mode;
state_t m_state;
private:
FRAM::FRAMBuffer m_fram_data_buffer;
uint16_t *m_buffer_pointer;
FRAM::FRAMDataObjects m_fram_object[NUMBER_FRAM_PARAMETERS];
uint16_t m_fram_size;
uint16_t m_fram_object_index;
uint16_t m_fram_object_address;
uint16_t m_fram_object_last_address;
uint16_t m_fram_rw_index;
FRAM::FRAMHeader m_header;
FRAM::FRAMFooter m_footer;
bool m_verify;
public:
FRAMDATABASE();
public:
mode_t get_mode();
bool compare_mode(mode_t mode);
state_t get_state();
bool compare_state(state_t state);
public:
bool is_free();
bool is_busy();
bool is_read();
bool is_burn();
bool is_erase();
bool is_restore();
bool is_verify();
public:
void set_read();
void set_burn();
void set_erase();
void set_verify();
void set_restore();
void set_break();
public:
void upload_configuration(SYSCTRL::SystemControlConfiguration *sys_config);
void update_buffer(const SYSCTRL::SystemControlConfiguration *sys_config);
void erase_fram_index();
void verify_fram_index();
void write_fram_index();
void read_fram_index();
void restore_fram_index();
void read_from_fram_to_buffer();
void write_to_fram_from_buffer();
void erase_fram_buffer();
public:
FRAM::FRAMHeader get_header();
FRAM::FRAMFooter get_footer();
void extract_system_configuration(SYSCTRL::SystemControlConfiguration *sys_config);
void implement_dafault_configuration();
//
//
private:
void add_float(uint8_t readonly, float* pParam, float default_value);
void add_int16(uint8_t readonly, int16_t* pParam, int16_t default_value);
void add_int32(uint8_t readonly, int32_t* pParam, int32_t default_value);
void add_uint16(uint8_t readonly, uint16_t* pParam, uint16_t default_value);
void add_uint32(uint8_t readonly, uint32_t* pParam, uint32_t default_value);
void add_bool(uint8_t readonly, bool* pParam, bool default_value);
public:
void register_configuration_parameters(SYSCTRL::SystemControlConfiguration *sys_config);
};//class FRAMDATABASE
} /* namespace FRAM */
#endif /* FRAM_FRAMDATABASE_H_ */