16 static_assert(std::numeric_limits<FwSizeType>::max() >= PRMDB_NUM_DB_ENTRIES,
17 "PRMDB_NUM_DB_ENTRIES must fit within range of FwSizeType");
27 FwSizeType getBuffCapacity()
const {
return sizeof(m_buff); }
29 U8* getBuffAddr() {
return m_buff; }
31 const U8* getBuffAddr()
const {
return m_buff; }
45 this->m_fileName = file;
48 void PrmDbImpl::clearDb() {
49 for (
FwSizeType entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
50 this->m_db[entry].used =
false;
51 this->m_db[entry].id = 0;
62 for (
FwSizeType entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
63 if (this->m_db[entry].used) {
64 if (this->m_db[entry].
id ==
id) {
65 val = this->m_db[entry].val;
85 bool existingEntry =
false;
88 for (
FwSizeType entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
89 if ((this->m_db[entry].used) && (
id == this->m_db[entry].
id)) {
90 this->m_db[entry].val = val;
98 for (
FwSizeType entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
99 if (!(this->m_db[entry].used)) {
100 this->m_db[entry].val = val;
101 this->m_db[entry].id = id;
102 this->m_db[entry].used =
true;
113 }
else if (noSlots) {
120 void PrmDbImpl::PRM_SAVE_FILE_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
139 if (this->m_db[entry].used) {
141 static const U8 delim = PRMDB_ENTRY_DELIMITER;
143 stat = paramFile.write(&delim, writeSize, Os::File::WaitType::WAIT);
150 if (writeSize !=
sizeof(delim)) {
153 static_cast<I32>(writeSize));
167 writeSize =
static_cast<FwSizeType>(buff.getBuffLength());
168 stat = paramFile.write(buff.getBuffAddr(), writeSize, Os::File::WaitType::WAIT);
175 if (writeSize !=
sizeof(recordSize)) {
178 static_cast<I32>(writeSize));
188 serStat = buff.serialize(this->m_db[entry].
id);
193 writeSize =
static_cast<FwSizeType>(buff.getBuffLength());
194 stat = paramFile.write(buff.getBuffAddr(), writeSize, Os::File::WaitType::WAIT);
201 if (writeSize != static_cast<FwSizeType>(buff.getBuffLength())) {
204 static_cast<I32>(writeSize));
211 writeSize =
static_cast<FwSizeType>(this->m_db[entry].val.getBuffLength());
212 stat = paramFile.write(this->m_db[entry].val.
getBuffAddr(), writeSize, Os::File::WaitType::WAIT);
220 if (writeSize != static_cast<FwSizeType>(this->m_db[entry].val.
getBuffLength())) {
223 static_cast<I32>(numRecords), static_cast<I32>(writeSize));
255 for (
FwSizeType entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
260 Os::File::Status fStat = paramFile.read(&delimiter, readSize, Os::File::WaitType::WAIT);
272 if (
sizeof(delimiter) != readSize) {
274 static_cast<I32>(readSize));
278 if (PRMDB_ENTRY_DELIMITER != delimiter) {
286 readSize =
sizeof(recordSize);
288 fStat = paramFile.read(buff.getBuffAddr(), readSize, Os::File::WaitType::WAIT);
293 if (
sizeof(recordSize) != readSize) {
295 static_cast<I32>(readSize));
299 Fw::SerializeStatus desStat = buff.setBuffLen(static_cast<Fw::Serializable::SizeType>(readSize));
305 desStat = buff.deserializeTo(recordSize);
312 static_cast<I32>(recordSize));
320 fStat = paramFile.read(buff.getBuffAddr(), readSize, Os::File::WaitType::WAIT);
325 if (
sizeof(parameterId) != static_cast<FwSizeType>(readSize)) {
327 static_cast<I32>(readSize));
332 desStat = buff.setBuffLen(static_cast<Fw::Serializable::SizeType>(readSize));
338 desStat = buff.deserializeTo(parameterId);
342 this->m_db[entry].used =
true;
343 this->m_db[entry].id = parameterId;
344 readSize = recordSize -
sizeof(parameterId);
346 fStat = paramFile.read(this->m_db[entry].val.
getBuffAddr(), readSize);
352 if (static_cast<U32>(readSize) != recordSize -
sizeof(parameterId)) {
354 static_cast<I32>(readSize));
359 desStat = this->m_db[entry].val.setBuffLen(static_cast<Fw::Serializable::SizeType>(readSize));
368 void PrmDbImpl::pingIn_handler(
FwIndexType portNum, U32 key) {
Serialization/Deserialization operation was successful.
U8 * getBuffAddr()
gets buffer address for data filling
FwIdType FwOpcodeType
The type of a command opcode.
PrmDb_PrmWriteError PrmWriteError
PlatformSizeType FwSizeType
void log_ACTIVITY_HI_PrmIdUpdated(FwPrmIdType Id) const
void readParamFile()
PrmDb file read function.
const char * toChar() const
FwIdType FwPrmIdType
The type of a parameter identifier.
void log_ACTIVITY_HI_PrmFileSaveComplete(U32 records) const
PrmDbImpl(const char *name)
PrmDb constructor.
Os::FileInterface::Status open(const char *path, Mode mode)
open file with supplied path and mode
void log_WARNING_HI_PrmFileWriteError(Svc::PrmDb_PrmWriteError stage, I32 record, I32 error) const
SerializeStatus
forward declaration for string
void log_ACTIVITY_HI_PrmFileLoadComplete(U32 records) const
virtual void lock()
Lock the guarded mutex.
void log_WARNING_HI_PrmFileReadError(Svc::PrmDb_PrmReadError stage, I32 record, I32 error) const
Serializable::SizeType getBuffLength() const
returns current buffer size
virtual void unLock()
Unlock the guarded mutex.
void log_ACTIVITY_HI_PrmIdAdded(FwPrmIdType Id) const
SizeType length() const
Get length of string.
#define FW_PARAM_BUFFER_MAX_SIZE
void configure(const char *file)
PrmDb configure method.
void log_FATAL_PrmDbFull(FwPrmIdType Id) const
Command successfully executed.
uint8_t U8
8-bit unsigned integer
void pingOut_out(FwIndexType portNum, U32 key)
Invoke output port pingOut.
Auto-generated base for PrmDb component.
PrmDb_PrmReadError PrmReadError
Command had execution error.
void log_WARNING_LO_PrmIdNotFound(FwPrmIdType Id)
Operation was successful.
PlatformIndexType FwIndexType
#define FW_NUM_ARRAY_ELEMENTS(a)
number of elements in an array
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
RateGroupDivider component implementation.
Enum representing parameter validity.
virtual ~PrmDbImpl()
PrmDb destructor.
Component for managing parameters.