24 return sizeof(m_buff);
27 U8* getBuffAddr(
void) {
31 const U8* getBuffAddr(
void)
const {
43 this->m_fileName = file;
47 PrmDbComponentBase::init(queueDepth,instance);
50 void PrmDbImpl::clearDb(
void) {
51 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
52 this->m_db[entry].used =
false;
53 this->m_db[entry].id = 0;
62 Fw::ParamValid stat = Fw::PARAM_INVALID;
64 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
65 if (this->m_db[entry].used) {
66 if (this->m_db[entry].
id ==
id) {
67 val = this->m_db[entry].val;
68 stat = Fw::PARAM_VALID;
75 if (Fw::PARAM_INVALID == stat) {
76 this->log_WARNING_LO_PrmIdNotFound(
id);
88 bool existingEntry =
false;
91 for (
NATIVE_INT_TYPE entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
92 if ((this->m_db[entry].used) && (
id == this->m_db[entry].
id)) {
93 this->m_db[entry].val = val;
100 if (!existingEntry) {
101 for (I32 entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
102 if (!(this->m_db[entry].used)) {
103 this->m_db[entry].val = val;
104 this->m_db[entry].id = id;
105 this->m_db[entry].used =
true;
115 this->log_ACTIVITY_HI_PrmIdUpdated(
id);
116 }
else if (noSlots) {
117 this->log_FATAL_PrmDbFull(
id);
119 this->log_ACTIVITY_HI_PrmIdAdded(
id);
124 void PrmDbImpl::PRM_SAVE_FILE_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
131 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_OPEN,0,stat);
132 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
143 if (this->m_db[entry].used) {
145 static const U8 delim = PRMDB_ENTRY_DELIMITER;
147 stat = paramFile.
write(&delim,writeSize,
true);
150 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_DELIMITER,numRecords,stat);
151 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
154 if (writeSize !=
sizeof(delim)) {
156 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_DELIMITER_SIZE,numRecords,writeSize);
157 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
170 writeSize = buff.getBuffLength();
171 stat = paramFile.
write(buff.getBuffAddr(),writeSize,
true);
174 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_RECORD_SIZE,numRecords,stat);
175 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
178 if (writeSize !=
sizeof(writeSize)) {
180 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_RECORD_SIZE_SIZE,numRecords,writeSize);
181 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
190 serStat = buff.serialize(this->m_db[entry].
id);
195 writeSize = buff.getBuffLength();
196 stat = paramFile.
write(buff.getBuffAddr(),writeSize,
true);
199 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_ID,numRecords,stat);
200 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
205 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_ID_SIZE,numRecords,writeSize);
206 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
212 writeSize = this->m_db[entry].val.getBuffLength();
216 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_VALUE,numRecords,stat);
217 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
222 this->log_WARNING_HI_PrmFileWriteError(PRM_WRITE_PARAMETER_VALUE_SIZE,numRecords,writeSize);
223 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_EXECUTION_ERROR);
231 this->log_ACTIVITY_HI_PrmFileSaveComplete(numRecords);
232 this->cmdResponse_out(opCode,cmdSeq,Fw::COMMAND_OK);
245 this->log_WARNING_HI_PrmFileReadError(PRM_READ_OPEN,0,stat);
255 for (
NATIVE_INT_TYPE entry = 0; entry < PRMDB_NUM_DB_ENTRIES; entry++) {
269 this->log_WARNING_HI_PrmFileReadError(PRM_READ_DELIMITER,recordNum,fStat);
273 if (
sizeof(delimiter) != readSize) {
274 this->log_WARNING_HI_PrmFileReadError(PRM_READ_DELIMITER_SIZE,recordNum,readSize);
278 if (PRMDB_ENTRY_DELIMITER != delimiter) {
279 this->log_WARNING_HI_PrmFileReadError(PRM_READ_DELIMITER_VALUE,recordNum,delimiter);
285 readSize =
sizeof(recordSize);
287 fStat = paramFile.
read(buff.getBuffAddr(),readSize,
true);
289 this->log_WARNING_HI_PrmFileReadError(PRM_READ_RECORD_SIZE,recordNum,fStat);
292 if (
sizeof(recordSize) != readSize) {
293 this->log_WARNING_HI_PrmFileReadError(PRM_READ_RECORD_SIZE_SIZE,recordNum,readSize);
308 this->log_WARNING_HI_PrmFileReadError(PRM_READ_RECORD_SIZE_VALUE,recordNum,recordSize);
316 fStat = paramFile.
read(buff.getBuffAddr(),readSize,
true);
318 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_ID,recordNum,fStat);
322 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_ID_SIZE,recordNum,readSize);
327 desStat = buff.setBuffLen(readSize);
336 this->m_db[entry].used =
true;
337 this->m_db[entry].id = parameterId;
338 readSize = recordSize-
sizeof(parameterId);
343 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_VALUE,recordNum,fStat);
346 if (
static_cast<U32
>(readSize) != recordSize-
sizeof(parameterId)) {
347 this->log_WARNING_HI_PrmFileReadError(PRM_READ_PARAMETER_VALUE_SIZE,recordNum,readSize);
352 desStat = this->m_db[entry].val.setBuffLen(readSize);
359 this->log_ACTIVITY_HI_PrmFileLoadComplete(recordNum);
364 this->pingOut_out(0,key);