#ifndef FRAMEWORK_TASKS_FIXEDTIMESLOTTASKIF_H_
#define FRAMEWORK_TASKS_FIXEDTIMESLOTTASKIF_H_

#include "PeriodicTaskIF.h"
#include "../objectmanager/ObjectManagerIF.h"

/**
 * @brief Following the same principle as the base class IF.
 * This is the interface for a Fixed timeslot task
 */
class FixedTimeslotTaskIF : public PeriodicTaskIF {
public:
	virtual ~FixedTimeslotTaskIF() {}

	/**
	 * Add an object with a slot time and the execution step to the task.
	 * The execution step will be passed to the object (e.g. as an operation
	 * code in #performOperation)
	 * @param componentId
	 * @param slotTimeMs
	 * @param executionStep
	 * @return
	 */
	virtual ReturnValue_t addSlot(object_id_t componentId, uint32_t slotTimeMs,
	        int8_t executionStep) = 0;
	/**
	 * Check whether the sequence is valid and perform all other required
	 * initialization steps which are needed after task creation
	 */
	virtual ReturnValue_t checkSequence() const = 0;
};



#endif /* FRAMEWORK_TASKS_FIXEDTIMESLOTTASKIF_H_ */