public void processLine(string line)
{
try
{
if (line.Length == 0)
{
return;
}
string[] items = line.Split(',', ':');
if (items[0].Contains("FMT"))
{
try
{
dflog.FMTLine(line);
}
catch
{
}
}
if (items[0].Contains("PARM"))
{
try
{
int nameindex = dflog.FindMessageOffset("PARM", "Name");
int valueindex = dflog.FindMessageOffset("PARM", "Value");
paramlist[items[nameindex].Trim()] = items[valueindex].Trim();
} catch
{
}
}
else if (items[0].Contains("CMD")) // "CMD", "QHHHfffffff","TimeUS,CTot,CNum,CId,Prm1,Prm2,Prm3,Prm4,Lat,Lng,Alt" }, \
{
cmdraw.Add(line);
int cidindex = dflog.FindMessageOffset("CMD", "CId");
if (int.Parse(items[cidindex]) <= (int)MAVLink.MAV_CMD.LAST) // wps
{
int cmdflatindex = dflog.FindMessageOffset("CMD", "Lat");
int cmdlngindex = dflog.FindMessageOffset("CMD", "Lng");
int cmdaltindex = dflog.FindMessageOffset("CMD", "Alt");
int cmdnumindex = dflog.FindMessageOffset("CMD", "CNum");
cmd.Add(new PointLatLngAlt(
double.Parse(items[cmdflatindex], CultureInfo.InvariantCulture),
double.Parse(items[cmdlngindex], CultureInfo.InvariantCulture),
double.Parse(items[cmdaltindex], CultureInfo.InvariantCulture), items[cmdnumindex]));
}
}
else if (items[0].Contains("MOD"))
{
positionindex++;
while (modelist.Count < positionindex + 1)
{
modelist.Add("");
}
int nameindex = dflog.FindMessageOffset("MODE", "Mode");
if (nameindex > 0)
{
modelist[positionindex] = items[nameindex];
}
else
{
if (items.Length == 4)
{
modelist[positionindex] = (items[2]);
}
else
{
modelist[positionindex] = (items[1]);
}
}
}
else if (items[0].Contains("GPS") && dflog.logformat.ContainsKey("GPS"))
{
if (items[0].Contains("GPS2"))
{
return;
}
if (int.Parse(items[dflog.FindMessageOffset("GPS", "Status")]) < 3)
{
return;
}
if (position[positionindex] == null)
{
position[positionindex] = new List <Point3D>();
}
double alt = double.Parse(items[dflog.FindMessageOffset("GPS", "Alt")], CultureInfo.InvariantCulture);
if (alt > 40000)
{
return;
}
double lng = double.Parse(items[dflog.FindMessageOffset("GPS", "Lng")], CultureInfo.InvariantCulture);
double lat = double.Parse(items[dflog.FindMessageOffset("GPS", "Lat")], CultureInfo.InvariantCulture);
if (lat < -90 || lat > 90)
{
return;
}
if (lng < -180 || lng > 180)
{
return;
}
position[positionindex].Add(new Point3D(lng, lat, alt));
oldlastpos = lastpos;
lastpos = (position[positionindex][position[positionindex].Count - 1]);
lastline = line;
}
else if (items[0].Contains("POS"))
{
if (dflog.logformat.ContainsKey("POS"))
{
int poslatindex = dflog.FindMessageOffset("POS", "Lat");
int poslngindex = dflog.FindMessageOffset("POS", "Lng");
int posaltindex = dflog.FindMessageOffset("POS", "Alt");
PosLatLngAlts.Add(
new PointLatLngAlt(
double.Parse(items[poslatindex], CultureInfo.InvariantCulture),
double.Parse(items[poslngindex], CultureInfo.InvariantCulture),
double.Parse(items[posaltindex], CultureInfo.InvariantCulture)));
}
}
else if (items[0].Contains("GRAW"))
{
gpsrawdata.Add(line);
}
else if (items[0].Contains("GRXH"))
{
gpsrawdata.Add(line);
}
else if (items[0].Contains("GRXS"))
{
gpsrawdata.Add(line);
}
else if (items[0].Contains("CTUN"))
{
ctunlast = items;
}
else if (items[0].Contains("NTUN"))
{
ntunlast = items;
try
{
// line = "ATT:" + double.Parse(ctunlast[3], new System.Globalization.CultureInfo("en-US")) * 100 + "," + double.Parse(ctunlast[6], new System.Globalization.CultureInfo("en-US")) * 100 + "," + double.Parse(items[1], new System.Globalization.CultureInfo("en-US")) * 100;
// items = line.Split(',', ':');
}
catch
{
}
}
else if (items[0].Contains("ATT"))
{
try
{
if (lastpos.X != 0 && oldlastpos.X != lastpos.X && oldlastpos.Y != lastpos.Y)
{
Data dat = new Data();
try
{
dat.datetime = dflog.GetTimeGPS(lastline);
}
catch
{
}
runmodel = new Model();
runmodel.Location.longitude = lastpos.X;
runmodel.Location.latitude = lastpos.Y;
runmodel.Location.altitude = lastpos.Z;
oldlastpos = lastpos;
runmodel.Orientation.roll =
double.Parse(items[dflog.FindMessageOffset("ATT", "Roll")], CultureInfo.InvariantCulture) / -1;
runmodel.Orientation.tilt =
double.Parse(items[dflog.FindMessageOffset("ATT", "Pitch")], CultureInfo.InvariantCulture) / -1;
runmodel.Orientation.heading =
double.Parse(items[dflog.FindMessageOffset("ATT", "Yaw")], CultureInfo.InvariantCulture) / 1;
dat.model = runmodel;
dat.ctun = ctunlast;
dat.ntun = ntunlast;
flightdata.Add(dat);
}
}
catch (Exception ex)
{
log.Error(ex);
}
}
}
catch (Exception)
{
// if items is to short or parse fails.. ignore
}
}