// Borland C++ Builder
// Copyright (c) 1995, 2005 by Borland Software Corporation
// All rights reserved

// (DO NOT EDIT: machine generated header) 'Wcldriasd.pas' rev: 10.00

#ifndef WcldriasdHPP
#define WcldriasdHPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member functions
#pragma pack(push,8)
#include <System.hpp>	// Pascal unit
#include <Sysinit.hpp>	// Pascal unit
#include <Wcldricommon.hpp>	// Pascal unit
#include <Classes.hpp>	// Pascal unit

//-- user supplied -----------------------------------------------------------

namespace Wcldriasd
{
//-- type declarations -------------------------------------------------------
#pragma option push -b
enum TwclDriAsdMessageType { mtBasicId, mtLocation, mtAuth, mtSelfId, mtSystem, mtOperatorId };
#pragma option pop

#pragma option push -b
enum TwclDriAsdIdType { itNone, itSerialNumber, itCaaRegistrationId, itUtmAssignedUuid, itSpecificSessionId };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavType { utNone, utAeroplane, utCopter, utGyroplane, utHybridLift, utOrnithopter, utGlider, utKite, utFreeBalloon, utCaptiveBalloon, utAirship, utFreeFallParachute, utRocket, utTetheredPoweredAircraft, utGroundObstacle, utOther };
#pragma option pop

typedef DynamicArray<Byte >  TwclDriAsdId;

#pragma option push -b
enum TwclDriAsdDescriptionType { dtText, dtEmergency, dtExtended };
#pragma option pop

#pragma option push -b
enum TwclDriAsdOperatorLocationType { ltTakeOff, ltLiveGnss, ltFixed };
#pragma option pop

#pragma option push -b
enum TwclDriAsdOperatorClassification { ocUndeclared, ocEu };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavEuCategory { ucUndeclared, ucOpen, ucSpecific, ucCertified };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavEuClass { ucUnspecified, ucClass0, ucClass1, ucClass2, ucClass3, ucClass4, ucClass5, ucClass6 };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavStatus { usUndeclared, usGround, usAirborne, usEmergency, usFailure };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavHeightReference { hrTakeOff, hrGround };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavHorizontalAccuracy { haUnknown, ha10Nm, ha4Nm, ha2Nm, ha1Nm, ha05Nm, ha03Nm, ha01Nm, ha005Nm, ha30M, ha10M, ha3M, ha1M };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavVerticalAccuracy { vaUnknown, va150M, va45M, va25M, va10M, va3M, va1M };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavSpeedAccuracy { saUnknown, sa10MS, sa3MS, sa1Ms, sa03Ms };
#pragma option pop

#pragma option push -b
enum TwclDriAsdUavTimestampAccuracy { taUnknown, ta01s, ta02s, ta03s, ta04s, ta05s, ta06s, ta07s, ta08s, ta09s, ta1s, ta11s, ta12s, ta13s, ta14s, ta15s };
#pragma option pop

class DELPHICLASS TwclDriAsdMessage;
class PASCALIMPLEMENTATION TwclDriAsdMessage : public Wcldricommon::TwclDriMessage 
{
	typedef Wcldricommon::TwclDriMessage inherited;
	
private:
	Byte FCounter;
	TwclDriAsdMessageType FMessageType;
	Byte FVersion;
	
public:
	__fastcall virtual TwclDriAsdMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
	__property Byte Counter = {read=FCounter, nodefault};
	__property TwclDriAsdMessageType MessageType = {read=FMessageType, nodefault};
	__property Byte Version = {read=FVersion, nodefault};
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdIdMessage;
class PASCALIMPLEMENTATION TwclDriAsdIdMessage : public TwclDriAsdMessage 
{
	typedef TwclDriAsdMessage inherited;
	
private:
	DynamicArray<Byte >  FId;
	
public:
	__fastcall virtual TwclDriAsdIdMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
	__property TwclDriAsdId Id = {read=FId};
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdIdMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdBasicIdMessage;
class PASCALIMPLEMENTATION TwclDriAsdBasicIdMessage : public TwclDriAsdIdMessage 
{
	typedef TwclDriAsdIdMessage inherited;
	
private:
	TwclDriAsdIdType FIdType;
	TwclDriAsdUavType FUavType;
	
public:
	__fastcall virtual TwclDriAsdBasicIdMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
	__property TwclDriAsdIdType IdType = {read=FIdType, nodefault};
	__property TwclDriAsdUavType UavType = {read=FUavType, nodefault};
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdBasicIdMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdSelfIdMessage;
class PASCALIMPLEMENTATION TwclDriAsdSelfIdMessage : public TwclDriAsdMessage 
{
	typedef TwclDriAsdMessage inherited;
	
private:
	AnsiString FDescription;
	TwclDriAsdDescriptionType FDescriptionType;
	
public:
	__fastcall virtual TwclDriAsdSelfIdMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
	__property AnsiString Description = {read=FDescription};
	__property TwclDriAsdDescriptionType DescriptionType = {read=FDescriptionType, nodefault};
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdSelfIdMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdCoordinateMessage;
class PASCALIMPLEMENTATION TwclDriAsdCoordinateMessage : public TwclDriAsdMessage 
{
	typedef TwclDriAsdMessage inherited;
	
protected:
	float __fastcall DecodeAltitude(const Word Value);
	double __fastcall DecodeCoordinate(const int Value);
	
public:
	__fastcall virtual TwclDriAsdCoordinateMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdCoordinateMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdSystemMessage;
class PASCALIMPLEMENTATION TwclDriAsdSystemMessage : public TwclDriAsdCoordinateMessage 
{
	typedef TwclDriAsdCoordinateMessage inherited;
	
private:
	float FAreaCeiling;
	Word FAreaCount;
	float FAreaFloor;
	Word FAreaRadius;
	float FOperatorAltitude;
	TwclDriAsdOperatorClassification FOperatorClassification;
	double FOperatorLatitude;
	TwclDriAsdOperatorLocationType FOperatorLocation;
	double FOperatorLongitude;
	System::TDateTime FTimestamp;
	TwclDriAsdUavEuCategory FUavEuCategory;
	TwclDriAsdUavEuClass FUavEuClass;
	
public:
	__fastcall virtual TwclDriAsdSystemMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
	__property float AreaCeiling = {read=FAreaCeiling};
	__property Word AreaCount = {read=FAreaCount, nodefault};
	__property float AreaFloor = {read=FAreaFloor};
	__property Word AreaRadius = {read=FAreaRadius, nodefault};
	__property float OperatorAltitude = {read=FOperatorAltitude};
	__property TwclDriAsdOperatorClassification OperatorClassification = {read=FOperatorClassification, nodefault};
	__property double OperatorLatitude = {read=FOperatorLatitude};
	__property TwclDriAsdOperatorLocationType OperatorLocation = {read=FOperatorLocation, nodefault};
	__property double OperatorLongitude = {read=FOperatorLongitude};
	__property System::TDateTime Timestamp = {read=FTimestamp};
	__property TwclDriAsdUavEuCategory UavEuCategory = {read=FUavEuCategory, nodefault};
	__property TwclDriAsdUavEuClass UavEuClass = {read=FUavEuClass, nodefault};
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdSystemMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdOperatorIdMessage;
class PASCALIMPLEMENTATION TwclDriAsdOperatorIdMessage : public TwclDriAsdIdMessage 
{
	typedef TwclDriAsdIdMessage inherited;
	
private:
	Byte FIdType;
	
public:
	__fastcall virtual TwclDriAsdOperatorIdMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
	__property Byte IdType = {read=FIdType, nodefault};
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdOperatorIdMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdLocationMessage;
class PASCALIMPLEMENTATION TwclDriAsdLocationMessage : public TwclDriAsdCoordinateMessage 
{
	typedef TwclDriAsdCoordinateMessage inherited;
	
private:
	float FBaroAltitude;
	TwclDriAsdUavVerticalAccuracy FBaroAccuracy;
	Word FDirection;
	float FGeoAltitude;
	float FHeight;
	TwclDriAsdUavHeightReference FHeightReference;
	TwclDriAsdUavHorizontalAccuracy FHorizontalAccuracy;
	float FHorizontalSpeed;
	double FLatitude;
	double FLongitude;
	TwclDriAsdUavSpeedAccuracy FSpeedAccuracy;
	TwclDriAsdUavStatus FStatus;
	float FTimestamp;
	TwclDriAsdUavTimestampAccuracy FTimestampAccuracy;
	TwclDriAsdUavVerticalAccuracy FVerticalAccuracy;
	float FVerticalSpeed;
	Word __fastcall DecodeDirection(const Wcldricommon::TwclDriRawData Data);
	float __fastcall DecodeHorizontalSpeed(const Wcldricommon::TwclDriRawData Data);
	float __fastcall DecodeVertocalSpeed(const Wcldricommon::TwclDriRawData Data);
	float __fastcall DecodeTimestamp(const Wcldricommon::TwclDriRawData Data);
	
public:
	__fastcall virtual TwclDriAsdLocationMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data);
	__property float BaroAltitude = {read=FBaroAltitude};
	__property TwclDriAsdUavVerticalAccuracy BaroAccuracy = {read=FBaroAccuracy, nodefault};
	__property Word Direction = {read=FDirection, nodefault};
	__property float GeoAltitude = {read=FGeoAltitude};
	__property float Height = {read=FHeight};
	__property TwclDriAsdUavHeightReference HeightReference = {read=FHeightReference, nodefault};
	__property TwclDriAsdUavHorizontalAccuracy HorizontalAccuracy = {read=FHorizontalAccuracy, nodefault};
	__property float HorizontalSpeed = {read=FHorizontalSpeed};
	__property double Latitude = {read=FLatitude};
	__property double Longitude = {read=FLongitude};
	__property TwclDriAsdUavSpeedAccuracy SpeedAccuracy = {read=FSpeedAccuracy, nodefault};
	__property TwclDriAsdUavStatus Status = {read=FStatus, nodefault};
	__property float Timestamp = {read=FTimestamp};
	__property TwclDriAsdUavTimestampAccuracy TimestampAccuracy = {read=FTimestampAccuracy, nodefault};
	__property TwclDriAsdUavVerticalAccuracy VerticalAccuracy = {read=FVerticalAccuracy, nodefault};
	__property float VerticalSpeed = {read=FVerticalSpeed};
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdLocationMessage(void) { }
	#pragma option pop
	
};


class DELPHICLASS TwclDriAsdParser;
class PASCALIMPLEMENTATION TwclDriAsdParser : public System::TObject 
{
	typedef System::TObject inherited;
	
private:
	void __fastcall ParseAsdMessage(const Byte Counter, const Wcldricommon::TwclDriRawData Data, const Classes::TList* Messages);
	void __fastcall UnpackAsdMessages(const Byte Counter, const Wcldricommon::TwclDriRawData Data, const Classes::TList* Messages);
	void __fastcall ParseAsdMessages(const Wcldricommon::TwclDriRawData Data, const Classes::TList* Messages);
	
public:
	int __fastcall Parse(const Wcldricommon::TwclDriRawData Raw, const Classes::TList* Messages);
public:
	#pragma option push -w-inl
	/* TObject.Create */ inline __fastcall TwclDriAsdParser(void) : System::TObject() { }
	#pragma option pop
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TwclDriAsdParser(void) { }
	#pragma option pop
	
};


//-- var, const, procedure ---------------------------------------------------

}	/* namespace Wcldriasd */
using namespace Wcldriasd;
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// Wcldriasd
