Skip to content
Snippets Groups Projects
EventReportService.cpp 2.46 KiB
#include <Services/EventReportService.hpp>
#include "Services/EventReportService.hpp"
#include "Message.hpp"

/**
 * @todo: Add message type in TCs
 * @todo: this code is error prone, depending on parameters given, add fail safes (probably?)
 */
void EventReportService::informativeEventReport(Event eventID, const uint8_t *data,
                                                uint8_t length) {
	// TM[5,1]
	Message report = createTM(1);
	report.appendEnum16(eventID);
	report.appendString(length, data);

	storeMessage(report);
}

void
EventReportService::lowSeverityAnomalyReport(Event eventID, const uint8_t *data,
                                             uint8_t length) {
	// TM[5,2]
	Message report = createTM(2);
	report.appendEnum16(eventID);
	report.appendString(length, data);

	storeMessage(report);
}

void EventReportService::mediumSeverityAnomalyReport(Event eventID,
                                                     const uint8_t *data, uint8_t length) {
	// TM[5,3]
	Message report = createTM(3);
	report.appendEnum16(eventID);
	report.appendString(length, data);

	storeMessage(report);
}

void
EventReportService::highSeverityAnomalyReport(Event eventID, const uint8_t *data,
                                              uint8_t length) {
	// TM[5,4]
	Message report = createTM(4);
	report.appendEnum16(eventID);
	report.appendString(length, data);

	storeMessage(report);
}

void EventReportService::enableReportGeneration(uint16_t length, Event *eventID) {
	// TC[5,5]
	/**
	 * @todo: Report an error if length>numberOfEvents
	 */
	if (length <= numberOfEvents) {
		for (uint16_t i = 0; i < length; i++) {
			stateOfEvents[static_cast<uint16_t> (eventID[i])] = 1;
		}
	}
}

void EventReportService::disableReportGeneration(uint16_t length, Event *eventID) {
	// TC[5,6]
	/**
	 * @todo: Report an error if length>numberOfEvents
	 */
	if (length <= numberOfEvents) {
		for (uint16_t i = 0; i < length; i++) {
			stateOfEvents[static_cast<uint16_t> (eventID[i])] = 0;
		}
	}
}

void EventReportService::requestListOfDisabledEvents() {
	// TC[5,7]
	// I think this is all that is needed here.
	listOfDisabledEventsReport();
}

void EventReportService::listOfDisabledEventsReport() {
	// TM[5,8]
	Message report = createTM(8);

	uint16_t numberOfDisabledEvents = stateOfEvents.size() - stateOfEvents.count();
	report.appendByte(numberOfDisabledEvents);
	for (uint16_t i = 0; i < stateOfEvents.size(); i++) {
		if (stateOfEvents[i] == 0) {
			report.appendEnum16(i);
		}
	}

	storeMessage(report);
}