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.

202 lines
5.3 KiB
C++

/*
* FRAMDataObjects.cpp
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include "FRAM/FRAMDataObjects.h"
namespace FRAM
{
FRAMDataObjects::FRAMDataObjects():
m_address(0),
m_is_read_only(false),
m_pParam(0),
m_default_value()
//
{}//CONSTRUCTOR
//
void FRAMDataObjects::restore_default_value()
{
if(m_pParam != 0)
{
switch(m_default_value.get_type())
{
case FRAM::FRAM_VARIANT_FLOAT: { *((float*) m_pParam) = m_default_value.get_float(); break;}
case FRAM::FRAM_VARIANT_INT16: { *((int16_t*) m_pParam) = m_default_value.get_int16(); break;}
case FRAM::FRAM_VARIANT_INT32: { *((int32_t*) m_pParam) = m_default_value.get_int32(); break;}
case FRAM::FRAM_VARIANT_UINT16: { *((uint16_t*) m_pParam) = m_default_value.get_uint16(); break;}
case FRAM::FRAM_VARIANT_UINT32: { *((uint32_t*) m_pParam) = m_default_value.get_uint32(); break;}
case FRAM::FRAM_VARIANT_BOOL: { *((bool*) m_pParam) = m_default_value.get_bool(); break;}
default: {break;}
}//switch
}//if
}//
//
void FRAMDataObjects::add_register_float(uint16_t address, uint8_t readonly, float* pParam, float default_value)
{
m_address = address;
m_is_read_only = 0 != readonly ? true : false;
m_pParam = pParam;
m_default_value.set_float(default_value);
//
}//
//
void FRAMDataObjects::add_register_int16(uint16_t address, uint8_t readonly, int16_t* pParam, int16_t default_value)
{
m_address = address;
m_is_read_only = 0 != readonly ? true : false;
m_pParam = pParam;
m_default_value.set_int16(default_value);
//
}//
//
void FRAMDataObjects::add_register_int32(uint16_t address, uint8_t readonly, int32_t* pParam, int32_t default_value)
{
m_address = address;
m_is_read_only = 0 != readonly ? true : false;
m_pParam = pParam;
m_default_value.set_int32(default_value);
//
}//
//
void FRAMDataObjects::add_register_uint16(uint16_t address, uint8_t readonly, uint16_t* pParam, uint16_t default_value)
{
m_address = address;
m_is_read_only = 0 != readonly ? true : false;
m_pParam = pParam;
m_default_value.set_uint16(default_value);
//
}//
//
void FRAMDataObjects::add_register_uint32(uint16_t address, uint8_t readonly, uint32_t* pParam, uint32_t default_value)
{
m_address = address;
m_is_read_only = 0 != readonly ? true : false;
m_pParam = pParam;
m_default_value.set_uint32(default_value);
//
}//
//
void FRAMDataObjects::add_register_bool(uint16_t address, uint8_t readonly, bool* pParam, bool default_value)
{
m_address = address;
m_is_read_only = 0 != readonly ? true : false;
m_pParam = pParam;
m_default_value.set_bool(default_value);
//
}//
//
uint16_t FRAMDataObjects::get_address() const
{
return m_address;
//
}//
//
void FRAMDataObjects::write_parameter(const void *pBuffer, uint8_t buffer_size)
{
if((m_pParam != 0)&&
(pBuffer != 0) &&
(buffer_size > 0) &&
(m_is_read_only != true))
{
switch(m_default_value.get_type())
{
case FRAM::FRAM_VARIANT_FLOAT: { if(4 == buffer_size) *((float*) m_pParam) = *((float*) pBuffer); break;}
case FRAM::FRAM_VARIANT_INT16: { if(2 == buffer_size) *((int16_t*) m_pParam) = *((int16_t*) pBuffer); break;}
default: {break;}
}//switch
//
}//if
//
}//
//
void FRAMDataObjects::read_parameter(void *pBuffer, uint8_t buffer_size) const
{
if((m_pParam != 0) &&
(pBuffer != 0) &&
(buffer_size > 0))
{
switch(m_default_value.get_type())
{
case FRAM::FRAM_VARIANT_FLOAT: {if(4 == buffer_size) *((float*) pBuffer) = *((float*) m_pParam); break;}
case FRAM::FRAM_VARIANT_INT16: {if(2 == buffer_size) *((int16_t*) pBuffer) = *((int16_t*) m_pParam); break;}
default: {break;}
}//switch
//
}//if
}//
void FRAMDataObjects::fram_write_parameter()
{
if(m_pParam != 0)
{
switch(m_default_value.get_type())
{
case FRAM::FRAM_VARIANT_FLOAT:
{
writefloat(*((float*) m_pParam), m_address);
break;
}
case FRAM::FRAM_VARIANT_INT16:
{
writeint(*((int16_t*) m_pParam), m_address);
break;
}
default: {break;}
}//switch
//
}//if
}//
//
void FRAMDataObjects::fram_read_parameter()
{
if(m_pParam != 0)
{
switch(m_default_value.get_type())
{
case FRAM::FRAM_VARIANT_FLOAT:
{
*((float*) m_pParam) = readfloat(m_address);
break;
}
case FRAM::FRAM_VARIANT_INT16:
{
*((int16_t*) m_pParam) = readint(m_address);
break;
}
default: {break;}
}//switch
//
}//if
//
}//
//
void FRAMDataObjects::write_to_fram_data(Uint16 *Dest, Uint32 Length)
{
for(Uint16 i = 0; i < Length; i++)
{
writeint((*Dest++),i);
//
}//for
//
}//
//
void FRAMDataObjects::read_from_fram_data(Uint16 *BuffAddr, Uint32 Length)
{
for(Uint16 i = 0; i < Length; i++)
{
(*BuffAddr++) = readint(i);
//
}//for
//
}//
//
//
} /* namespace FRAM */