27 return sizeof(m_buff);
34 const U8* getBuffAddr()
const {
46 this->m_fileName = file;
50 PrmDbComponentBase::init(queueDepth,instance);
53 void PrmDbImpl::clearDb() {
54 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
55 this->m_db[entry].used =
false;
56 this->m_db[entry].id = 0;
65 Fw::ParamValid stat = Fw::ParamValid::INVALID;
67 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
68 if (this->m_db[entry].used) {
69 if (this->m_db[entry].
id ==
id) {
70 val = this->m_db[entry].val;
71 stat = Fw::ParamValid::VALID;
78 if (Fw::ParamValid::INVALID == stat.e) {
79 this->log_WARNING_LO_PrmIdNotFound(
id);
91 bool existingEntry =
false;
94 for (
NATIVE_INT_TYPE entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
95 if ((this->m_db[entry].used) && (
id == this->m_db[entry].
id)) {
96 this->m_db[entry].val = val;
103 if (!existingEntry) {
104 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
105 if (!(this->m_db[entry].used)) {
106 this->m_db[entry].val = val;
107 this->m_db[entry].id = id;
108 this->m_db[entry].used =
true;
118 this->log_ACTIVITY_HI_PrmIdUpdated(
id);
119 }
else if (noSlots) {
120 this->log_FATAL_PrmDbFull(
id);
122 this->log_ACTIVITY_HI_PrmIdAdded(
id);
127 void PrmDbImpl::PRM_SAVE_FILE_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
134 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::OPEN,0,stat);
135 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
146 if (this->m_db[entry].used) {
148 static const U8 delim = PRMDB_ENTRY_DELIMITER;
150 stat = paramFile.
write(&delim,writeSize,
true);
153 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::DELIMITER,numRecords,stat);
154 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
157 if (writeSize !=
sizeof(delim)) {
159 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::DELIMITER_SIZE,numRecords,writeSize);
160 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
173 writeSize = buff.getBuffLength();
174 stat = paramFile.
write(buff.getBuffAddr(),writeSize,
true);
177 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::RECORD_SIZE,numRecords,stat);
178 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
181 if (writeSize !=
sizeof(writeSize)) {
183 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::RECORD_SIZE_SIZE,numRecords,writeSize);
184 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
193 serStat = buff.serialize(this->m_db[entry].
id);
198 writeSize = buff.getBuffLength();
199 stat = paramFile.
write(buff.getBuffAddr(),writeSize,
true);
202 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::PARAMETER_ID,numRecords,stat);
203 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
208 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::PARAMETER_ID_SIZE,numRecords,writeSize);
209 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
215 writeSize = this->m_db[entry].val.getBuffLength();
219 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::PARAMETER_VALUE,numRecords,stat);
220 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
225 this->log_WARNING_HI_PrmFileWriteError(PrmWriteError::PARAMETER_VALUE_SIZE,numRecords,writeSize);
226 this->cmdResponse_out(opCode,cmdSeq,Fw::CmdResponse::EXECUTION_ERROR);
234 this->log_ACTIVITY_HI_PrmFileSaveComplete(numRecords);
248 this->log_WARNING_HI_PrmFileReadError(PrmReadError::OPEN,0,stat);
258 for (
NATIVE_INT_TYPE entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
272 this->log_WARNING_HI_PrmFileReadError(PrmReadError::DELIMITER,recordNum,fStat);
276 if (
sizeof(delimiter) != readSize) {
277 this->log_WARNING_HI_PrmFileReadError(PrmReadError::DELIMITER_SIZE,recordNum,readSize);
281 if (PRMDB_ENTRY_DELIMITER != delimiter) {
282 this->log_WARNING_HI_PrmFileReadError(PrmReadError::DELIMITER_VALUE,recordNum,delimiter);
288 readSize =
sizeof(recordSize);
290 fStat = paramFile.
read(buff.getBuffAddr(),readSize,
true);
292 this->log_WARNING_HI_PrmFileReadError(PrmReadError::RECORD_SIZE,recordNum,fStat);
295 if (
sizeof(recordSize) != readSize) {
296 this->log_WARNING_HI_PrmFileReadError(PrmReadError::RECORD_SIZE_SIZE,recordNum,readSize);
311 this->log_WARNING_HI_PrmFileReadError(PrmReadError::RECORD_SIZE_VALUE,recordNum,recordSize);
319 fStat = paramFile.
read(buff.getBuffAddr(),readSize,
true);
321 this->log_WARNING_HI_PrmFileReadError(PrmReadError::PARAMETER_ID,recordNum,fStat);
325 this->log_WARNING_HI_PrmFileReadError(PrmReadError::PARAMETER_ID_SIZE,recordNum,readSize);
330 desStat = buff.setBuffLen(readSize);
339 this->m_db[entry].used =
true;
340 this->m_db[entry].id = parameterId;
341 readSize = recordSize-
sizeof(parameterId);
346 this->log_WARNING_HI_PrmFileReadError(PrmReadError::PARAMETER_VALUE,recordNum,fStat);
349 if (
static_cast<U32
>(readSize) != recordSize-
sizeof(parameterId)) {
350 this->log_WARNING_HI_PrmFileReadError(PrmReadError::PARAMETER_VALUE_SIZE,recordNum,readSize);
355 desStat = this->m_db[entry].val.setBuffLen(readSize);
362 this->log_ACTIVITY_HI_PrmFileLoadComplete(recordNum);
367 this->pingOut_out(0,key);