#ifndef POLLINGSEQUENCEFACTORY_H_
#define POLLINGSEQUENCEFACTORY_H_

#include <fsfw/returnvalues/HasReturnvaluesIF.h>

class FixedTimeslotTaskIF;

/**
 * All device handlers are scheduled by adding them into
 * Polling Sequence Tables (PST) to satisfy stricter timing requirements of
 * device communication, a device handler has four different communication steps:
 *   1. DeviceHandlerIF::SEND_WRITE -> Send write via interface
 *   2. DeviceHandlerIF::GET_WRITE -> Get confirmation for write
 *   3. DeviceHandlerIF::SEND_READ -> Send read request
 *   4. DeviceHandlerIF::GET_READ -> Read from interface
 * The PST specifies precisely when the respective ComIF functions are called
 * during the communication cycle time.
 * The task is created using the FixedTimeslotTaskIF,
 * which utilises the underlying Operating System Abstraction Layer (OSAL)
 *
 * @param thisSequence FixedTimeslotTaskIF * object is passed inside the
 * 					   Factory class when creating the PST
 * @return
 */
namespace pst {

/* 0.4 second period init*/
ReturnValue_t pollingSequenceInitDefault(FixedTimeslotTaskIF *thisSequence);

/**
 * @brief	This function creates the PST for all gomspace devices. They are
 * 			scheduled in a separate PST because the gomspace library uses
 * 			blocking calls when requesting data from devices.
 */
ReturnValue_t gomspacePstInit(FixedTimeslotTaskIF *thisSequence);

ReturnValue_t pollingSequenceAcsTest(FixedTimeslotTaskIF* thisSequence);

/**
 * @brief   This polling sequence will be created when the software is compiled for the TE0720.
 */
ReturnValue_t pollingSequenceTE0720(FixedTimeslotTaskIF* thisSequence);
}


#endif /* POLLINGSEQUENCEINIT_H_ */