//=========================================================================
// Summary  :
// Filename : MMAlarm.h
// Author   : paley
// Project  :
// Revision : 1
// Created  : 2001/05/17
// Modified : 2001/05/17
//=========================================================================
// Description :  Alarm messages
//=========================================================================
#ifndef _MMALARM_H
#define _MMALARM_H

#include "ModemMessage.h"
#include "MMUtils.h"

#define AlarmMessageTimeOut 60

////////////////////////////////////////////////////
class MMWaterAlarm : public MMNumberedBoolean
{

public:
	MMWaterAlarm(const ModemMessage *pMM);
	MMWaterAlarm(int number, Boolean value);

	virtual ModemMessage::Type tGetMessageType() const
		{ return ModemMessage::tMMWaterAlarm; };
	virtual int iGetDefaultTimeout() const
		{ return AlarmMessageTimeOut; };
	virtual Priority pGetDefaultPriority() const
		{ return m_priority; };

	void toString(char* str);
	void setPriority(Priority priority) { m_priority = priority; };

	static int size() { return MMNumberedBoolean::size(); };

protected:
	Priority m_priority;

};

////////////////////////////////////////////////////
class MMWaterAlarmBatch : public MMBooleanArray
{

public:
	MMWaterAlarmBatch(const ModemMessage *pMM);
	MMWaterAlarmBatch(int number);

	virtual ModemMessage::Type tGetMessageType() const
		{ return ModemMessage::tMMWaterAlarmBatch; };
	virtual int iGetDefaultTimeout() const
		{ return AlarmMessageTimeOut; };
	virtual Priority pGetDefaultPriority() const
		{ return m_priority; };

	void toString(char* str, int number);
	void setPriority(Priority priority) { m_priority = priority; };

	static int size(int n) { return MMBooleanArray::size(n); };

protected:
	Priority m_priority;

};

////////////////////////////////////////////////////
class MMServerAlarm : public MMNumberedBoolean
{

public:

	enum Server
	{
		Navigation = 0,
		LayeredControl,
		TailCone,
		PowerSystem,
		WaterAlarm,
		DropWeight,
		DynamicControl,
		VehicleConfiguration,
		Ahrs,
		DepthSensor,
		Battery,
		Dvl,
		Homing,
		Gps,
		ExternalPosFix,
		RTCM,
		USBLFilter,
		//insert here
		numServers
	};

	static void getServerName(Server s, char *name);

	MMServerAlarm(const ModemMessage *pMM);
	MMServerAlarm(int number, Boolean value);

	virtual ModemMessage::Type tGetMessageType() const
		{ return ModemMessage::tMMServerAlarm; };
	virtual int iGetDefaultTimeout() const
		{ return AlarmMessageTimeOut; };
	virtual Priority pGetDefaultPriority() const
		{ return m_priority; };

	void toString(char* str);
	void setPriority(Priority priority) { m_priority = priority; };

	static int size() { return MMNumberedBoolean::size(); };

protected:
	Priority m_priority;

};

////////////////////////////////////////////////////
class MMServerAlarmBatch : public MMBooleanArray
{

public:
	MMServerAlarmBatch(const ModemMessage *pMM);
	MMServerAlarmBatch(int number);

	virtual ModemMessage::Type tGetMessageType() const
		{ return ModemMessage::tMMServerAlarmBatch; };
	virtual int iGetDefaultTimeout() const
		{ return AlarmMessageTimeOut; };
	virtual Priority pGetDefaultPriority() const
		{ return m_priority; };

	void toString(char* str, int number);
	void setPriority(Priority priority) { m_priority = priority; };

	static int size() { return MMBooleanArray::size(MMServerAlarm::numServers); };

protected:
	Priority m_priority;

};

#endif
