25 return sizeof(m_buff);
28 U8* getBuffAddr(
void) {
32 const U8* getBuffAddr(
void)
const {
44 this->m_fileName = file;
48 PrmDbComponentBase::init(queueDepth,instance);
51 void PrmDbImpl::clearDb(
void) {
52 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
53 this->m_db[entry].used =
false;
54 this->m_db[entry].id = 0;
63 Fw::ParamValid stat = Fw::PARAM_INVALID;
65 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
66 if (this->m_db[entry].used) {
67 if (this->m_db[entry].
id ==
id) {
68 val = this->m_db[entry].val;
69 stat = Fw::PARAM_VALID;
76 if (Fw::PARAM_INVALID == stat) {
77 this->log_WARNING_LO_PrmIdNotFound(
id);
89 bool existingEntry =
false;
92 for (
NATIVE_INT_TYPE entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
93 if ((this->m_db[entry].used) && (
id == this->m_db[entry].
id)) {
94 this->m_db[entry].val = val;
101 if (!existingEntry) {
102 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
103 if (!(this->m_db[entry].used)) {
104 this->m_db[entry].val = val;
105 this->m_db[entry].id = id;
106 this->m_db[entry].used =
true;
116 this->log_ACTIVITY_HI_PrmIdUpdated(
id);
117 }
else if (noSlots) {
118 this->log_FATAL_PrmDbFull(
id);
120 this->log_ACTIVITY_HI_PrmIdAdded(
id);
125 void PrmDbImpl::PRM_SAVE_FILE_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
132 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_OPEN,0,stat);
133 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
144 if (this->m_db[entry].used) {
146 static const U8 delim = PRMDB_ENTRY_DELIMITER;
148 stat = paramFile.
write(&delim,writeSize,
true);
151 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_DELIMITER,numRecords,stat);
152 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
155 if (writeSize !=
sizeof(delim)) {
157 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_DELIMITER_SIZE,numRecords,writeSize);
158 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
171 writeSize = buff.getBuffLength();
172 stat = paramFile.
write(buff.getBuffAddr(),writeSize,
true);
175 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_RECORD_SIZE,numRecords,stat);
176 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
179 if (writeSize !=
sizeof(writeSize)) {
181 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_RECORD_SIZE_SIZE,numRecords,writeSize);
182 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
191 serStat = buff.serialize(this->m_db[entry].
id);
196 writeSize = buff.getBuffLength();
197 stat = paramFile.
write(buff.getBuffAddr(),writeSize,
true);
200 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_ID,numRecords,stat);
201 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
206 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_ID_SIZE,numRecords,writeSize);
207 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
213 writeSize = this->m_db[entry].val.getBuffLength();
217 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_VALUE,numRecords,stat);
218 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
223 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_VALUE_SIZE,numRecords,writeSize);
224 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
232 this->log_ACTIVITY_HI_PrmFileSaveComplete(numRecords);
233 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_OK);
246 this->log_WARNING_HI_PrmFileReadError(PRM_READ_OPEN,0,stat);
256 for (
NATIVE_INT_TYPE entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
270 this->log_WARNING_HI_PrmFileReadError(PRM_READ_DELIMITER,recordNum,fStat);
274 if (
sizeof(delimiter) != readSize) {
275 this->log_WARNING_HI_PrmFileReadError(PRM_READ_DELIMITER_SIZE,recordNum,readSize);
279 if (PRMDB_ENTRY_DELIMITER != delimiter) {
280 this->log_WARNING_HI_PrmFileReadError(PRM_READ_DELIMITER_VALUE,recordNum,delimiter);
286 readSize =
sizeof(recordSize);
288 fStat = paramFile.
read(buff.getBuffAddr(),readSize,
true);
290 this->log_WARNING_HI_PrmFileReadError(PRM_READ_RECORD_SIZE,recordNum,fStat);
293 if (
sizeof(recordSize) != readSize) {
294 this->log_WARNING_HI_PrmFileReadError(PRM_READ_RECORD_SIZE_SIZE,recordNum,readSize);
309 this->log_WARNING_HI_PrmFileReadError(PRM_READ_RECORD_SIZE_VALUE,recordNum,recordSize);
317 fStat = paramFile.
read(buff.getBuffAddr(),readSize,
true);
319 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_ID,recordNum,fStat);
323 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_ID_SIZE,recordNum,readSize);
328 desStat = buff.setBuffLen(readSize);
337 this->m_db[entry].used =
true;
338 this->m_db[entry].id = parameterId;
339 readSize = recordSize-
sizeof(parameterId);
344 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_VALUE,recordNum,fStat);
347 if (
static_cast<U32
>(readSize) != recordSize-
sizeof(parameterId)) {
348 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_VALUE_SIZE,recordNum,readSize);
353 desStat = this->m_db[entry].val.setBuffLen(readSize);
360 this->log_ACTIVITY_HI_PrmFileLoadComplete(recordNum);
365 this->pingOut_out(0,key);