#ifndef __LOGGING_THREAD_H_INCLUDED__
#define __LOGGING_THREAD_H_INCLUDED__

#include <stdint.h>
#include "socket.h"
#include "threads.h"
#include "elmo.h"
#include "control_thread.h"
#include "motor_interogator.h"

class LoggingThread : public Thread {
public:
	LoggingThread (uint16_t	labviewPortNumber, ControlThread& controller, Elmo& winch, Elmo& levelWind)
		: m_LabviewPortNumber(labviewPortNumber), m_Controller(controller),m_Winch(winch),
		  m_LevelWind(levelWind), m_WinchInterogator("WM", winch),
		  m_LevelWindInterogator("LW", levelWind) {}

	~LoggingThread(void)
	{
		m_Winch.EchoOn();
		m_LevelWind.EchoOn();
	}

	void LoggingPeriod(double period);

protected:
	virtual void* Run(void*);

private:
	void				logData(tcp_socket labviewSocket);

	Mutex				m_ExclusiveAccess;
	uint16_t			m_LabviewPortNumber;
	ControlThread&		m_Controller;
	Elmo&				m_Winch;
	Elmo&				m_LevelWind;
	MotorInterogator	m_WinchInterogator;
	MotorInterogator	m_LevelWindInterogator;
	double				m_LoggingPeriod;
};

#endif
