Skip to content
Snippets Groups Projects
Unverified Commit 90d90e6d authored by Dimitrios Stoupis's avatar Dimitrios Stoupis
Browse files

Fully functional dumpRawData subservice

parent 1ed0b177
No related branches found
No related tags found
No related merge requests found
...@@ -12,40 +12,67 @@ MemoryManagementService::RawDataMemoryManagement::RawDataMemoryManagement( ...@@ -12,40 +12,67 @@ MemoryManagementService::RawDataMemoryManagement::RawDataMemoryManagement(
// Function declarations for the raw data memory management subservice // Function declarations for the raw data memory management subservice
/*void MemoryManagementService::RawDataMemoryManagement::loadRawData(Message &request) { void MemoryManagementService::RawDataMemoryManagement::loadRawData(Message &request) {
/**
* Bare in mind that there is currently no error checking for invalid parameters.
* A future version will include error checking and the corresponding error report/notification,
* as the manual implies.
*
* @todo Add error checking and reporting for the parameters
* @todo Add failure reporting
*/
uint8_t memoryID = request.readEnum8(); // Read the memory ID from the request
uint8_t iterationCount = 0; // Get the iteration count
uint16_t dataLength = 0; // Data length to read (updated for each new iteration)
uint32_t startAddress = 0; // Start address for the memory read (updated in each new iteration)
}*/ // Read the packet's values
iterationCount = request.readUint8();
startAddress = request.readUint32();
if (memoryID == MemoryManagementService::MemoryID::RAM) {
for (std::size_t i = 0; i < dataLength; i++) {
//*(uint64_t *)startAddress = memoryData[i];
}
} else if (memoryID == MemoryManagementService::MemoryID::FLASH) {
}
}
void MemoryManagementService::RawDataMemoryManagement::dumpRawData(Message &request) { void MemoryManagementService::RawDataMemoryManagement::dumpRawData(Message &request) {
// Create the report message object of telemetry message subtype 6 // Create the report message object of telemetry message subtype 6
Message report = mainService->createTM(6); Message report = mainService->createTM(6);
uint8_t iterationCount = 0; // Get the iteration count // Variable declaration
//uint8_t *readData = nullptr; // Pointer to store the data read from the memory uint8_t *readData = nullptr; // Pointer to store the data read from the memory
uint16_t iterationCount = 0; // Get the iteration count
uint16_t readLength = 0; // Data length to read (updated for each new iteration) uint16_t readLength = 0; // Data length to read (updated for each new iteration)
uint32_t startAddress = 0; // Start address for the memory read (updated in each new iteration) uint64_t startAddress = 0; // Start address for the memory read (updated in each new iteration)
uint8_t memoryID = request.readEnum8(); // Read the memory ID from the request
// Read the packet's values // Read the packet's values
iterationCount = request.readUint8(); iterationCount = request.readUint16();
startAddress = request.readUint32(); startAddress = request.readUint64();
readLength = request.readUint16(); readLength = request.readUint16();
/*readData = (uint8_t *)malloc(static_cast<std::size_t >(readLength + 1)); // Append the data to report message
report.appendEnum8(memoryID); // Memory ID
report.appendUint16(iterationCount); // Iteration count
report.appendUint64(startAddress); // Start address
report.appendUint16(readLength); // Data read length
readData = static_cast<uint8_t *>( malloc(static_cast<std::size_t >(readLength)) );
for (std::size_t i = 0; i < readLength; i++) { for (std::size_t i = 0; i < readLength; i++) {
readData[i] = *(uint8_t *)(startAddress + i); readData[i] = *((uint8_t *)((std::size_t)startAddress) + i);
} }
readData[readLength] = '\0';*/
report.appendUint8(iterationCount); // Iteration count
report.appendUint32(startAddress); // Start address
report.appendUint16(readLength); // Data read length
//report.appendString(readLength, static_cast<const char *>(readData)); report.appendOctetString(readLength, readData);
// todo: add the rest of data fields
// todo: complete the function and fully specify it mainService->storeMessage(report); // Save the report message
mainService->storeMessage(report); report.resetRead(); // Reset the reading count
report.resetRead(); free(readData); // Free the allocated memory
} }
/*void MemoryManagementService::RawDataMemoryManagement::dumpedRawDataReport() { /*void MemoryManagementService::RawDataMemoryManagement::dumpedRawDataReport() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment