using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace MKLiveView
{
static class Waypoints
{
public enum pointType
{
INVALID
= 255,
WP
= 0,
POI
= 1,
FS
= 2,
LAND
= 3
}
public enum status
{
INVALID
= 255,
NEW = 0,
DONE
= 1
}
public static string CAMAngle
(int iVal
)
{
if (iVal
== 255 | iVal
< 0)
return "Auto";
//if (iVal < 0)
// return "WP " + (Math.Abs(iVal)).ToString();
if (iVal
== 0)
return "- - -";
return iVal
.ToString("0 °");
}
public static string WPSpeed
(int iVal
)
{
if (iVal
== 0)
return "MAX";
if (iVal
> 0 && iVal
< 248)
return ((double)iVal
* 0.1).ToString("0.0 m/s");
if (iVal
> 247)
return "Poti" + (256 - iVal
).ToString();
return iVal
.ToString();
}
public static string Heading
(int iVal
)
{
if (iVal
== 0)
return "- - -";
if (iVal
> 0 && iVal
< 360)
return iVal
.ToString("0 °");
if (iVal
< 0)
return "WP " + (Math
.Abs(iVal
)).ToString();
return iVal
.ToString();
}
public static DataRow toDataRow
(byte[]data, DataRow dr
)
{
double longitude
= 0, latitude
= 0, altitude
= 0;
int pstatus
= 0, heading
= 0, tolRadius
= 0, holdTime
= 0, eventFlag
= 0, index
= 0, type
= 0, WPeventChanVal
= 0, altitudeRate
= 0, speed
= 0, camAngle
= 0, autoTrigger
=0;
string name
= "";
if (data
.Length >= 28)
{
int i_32, iVal
;
i_32
= data
[5];
iVal
= i_32
<< 24;
i_32
= data
[4];
iVal
+= i_32
<< 16;
i_32
= data
[3];
iVal
+= i_32
<< 8;
iVal
+= data
[2];
longitude
= (double)iVal
/ Math
.Pow(10,
7);
i_32
= data
[9];
iVal
= i_32
<< 24;
i_32
= data
[8];
iVal
+= i_32
<< 16;
i_32
= data
[7];
iVal
+= i_32
<< 8;
iVal
+= data
[6];
latitude
= (double)iVal
/ Math
.Pow(10,
7);
i_32
= data
[13];
iVal
= (i_32
<< 24);
i_32
= data
[12];
iVal
+= i_32
<< 16;
i_32
= data
[11];
iVal
+= i_32
<< 8;
iVal
+= data
[10];
altitude
= (double)iVal
/10;
pstatus
= data
[14];
i_32
= (int)(sbyte)data
[16];
iVal
= i_32
<< 8;
iVal
+= data
[15];
heading
= iVal
;
tolRadius
= data
[17];
holdTime
= data
[18];
eventFlag
= data
[19];
index
= data
[1];
// index = data[20];
type
= data
[21];
WPeventChanVal
= data
[22];
altitudeRate
= data
[23];
speed
= data
[24];
camAngle
= (int)(sbyte)data
[25];
name
= new string(ASCIIEncoding
.ASCII.GetChars(data,
26,
4)).Trim('\0');
autoTrigger
= data
[30];
dr
.ItemArray = new object[] { data
[1], type, name, latitude, longitude, altitude, heading, speed, altitudeRate, tolRadius, holdTime, autoTrigger, camAngle, eventFlag, WPeventChanVal, pstatus
};
// dr.ItemArray = new object[] { data[1], ((pointType)type).ToString(), name, longitude, latitude, altitude, heading, WPSpeed(speed), altitudeRate, tolRadius, holdTime, autoTrigger, CAMAngle(camAngle), eventFlag, WPeventChanVal, ((status)pstatus).ToString() };
// dr.ItemArray = new object[] {data[1],((pointType)type).ToString(),name,longitude,latitude,altitude,heading,speed,altitudeRate,tolRadius,holdTime,autoTrigger, CAMAngle(camAngle),((status)pstatus).ToString() };
return dr
;
}
return null;
}
}
}