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++
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 */
|