#ifndef __ACCELEROMETER_THREAD_H__
#define __ACCELEROMETER_THREAD_H__

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

class AccelerometerSensorThread : public Thread {

public:

	AccelerometerSensorThread(ControlThread& controller);

	~AccelerometerSensorThread(void) {
		delete m_AccelerometerSensorSocket;
	}

	void Connect(string& ipAddress, uint16_t portNumber);

protected:
	virtual void* Run(void* parameter);

private:
	typedef enum { BigEndian, LittleEndian } Endian;

	void		collectAcceleration(void);
	void 		processAccelerationAndAngularRateResponse(const uint8_t *buffer);
	void 		readN(void *buffer, uint16_t length);
	uint16_t	checksum(const uint8_t *buffer, uint32_t length);
	void		determineEndianness(void);
	float		extractFloat(const uint8_t *bytes);
	uint16_t	extractReceivedChecksum(uint8_t* buffer);

	ControlThread&	m_Controller;
	tcp_socket*		m_AccelerometerSensorSocket;
	uint16_t		m_AccelerometerSensorPortNumber;
	Endian			m_CPU_ByteOrder;
};


#endif //__ACCELEROMETER_THREAD_H__
