/**
 * @file	TimeMessage.h
 * @brief	This file defines the TimeMessage class.
 * @date	26.02.2013
 * @author	baetz
 */

#ifndef TIMEMESSAGE_H_
#define TIMEMESSAGE_H_

#include "../ipc/MessageQueueMessage.h"
#include "Clock.h"
#include <cstring>

class TimeMessage : public MessageQueueMessage {
protected:
	/**
	 * @brief	This call always returns the same fixed size of the message.
	 * @return	Returns HEADER_SIZE + \c sizeof(timeval) + sizeof(uint32_t).
	 */
	size_t getMinimumMessageSize();
public:

	/**
	 * @ brief the size of a TimeMessage
	 */
	static const uint32_t MAX_SIZE = HEADER_SIZE + sizeof(timeval) + sizeof(uint32_t);

	/**
	 * @brief	In the default constructor, only the message_size is set.
	 */
	TimeMessage();
	/**
	 * @brief	With this constructor, the passed time information is directly put
	 * 			into the message.
	 * @param 	setTime The time information to put into the message.
	 * @param 	counterValue The counterValue to put into the message (GPS PPS).
	 */
	TimeMessage( timeval setTime, uint32_t counterValue = 0 );
	/**
	 * @brief	The class's destructor is empty.
	 */
	~TimeMessage();
	/**
	 * @brief	This getter returns the time information in timeval format.
	 * @return	Returns the time stored in this packet.
	 */
	timeval getTime();
	/**
	 * @brief 	This getter returns the CounterValue in uint32_t format.
	 * @return 	Returns the CounterValue stored in this packet.
	 */
	uint32_t getCounterValue();
};

#endif /* TIMEMESSAGE_H_ */