From bfab9f52e9885175800492a6d76c0835ce527d5c Mon Sep 17 00:00:00 2001 From: Michael Oborne Date: Fri, 16 Dec 2011 08:17:13 +0800 Subject: [PATCH] APM Planner 1.1.6 fix updater for recursive dirs add network kml = google earth 3d display remove ]]> from kml swap geo ref from ms image parse to custom --- .../ArdupilotMegaPlanner/ArdupilotMega.csproj | 3 + Tools/ArdupilotMegaPlanner/MainV2.cs | 110 +++++++++++++++--- Tools/ArdupilotMegaPlanner/MavlinkLog.cs | 4 +- .../Properties/AssemblyInfo.cs | 2 +- .../bin/Release/m3u/networklink.kml | 19 +++ 5 files changed, 122 insertions(+), 16 deletions(-) create mode 100644 Tools/ArdupilotMegaPlanner/bin/Release/m3u/networklink.kml diff --git a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj index f394484c2c..b0f33aff2c 100644 --- a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj +++ b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj @@ -556,6 +556,9 @@ Always + + Always + diff --git a/Tools/ArdupilotMegaPlanner/MainV2.cs b/Tools/ArdupilotMegaPlanner/MainV2.cs index 9698638b7c..dff779f139 100644 --- a/Tools/ArdupilotMegaPlanner/MainV2.cs +++ b/Tools/ArdupilotMegaPlanner/MainV2.cs @@ -14,7 +14,7 @@ using System.Net; using System.Text.RegularExpressions; using System.Web; using System.Diagnostics; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using System.Speech.Synthesis; using System.Globalization; using System.Threading; @@ -172,7 +172,7 @@ namespace ArdupilotMega if (MainV2.config["CHK_GDIPlus"] != null) GCSViews.FlightData.myhud.UseOpenGL = !bool.Parse(MainV2.config["CHK_GDIPlus"].ToString()); - changeunits(); + changeunits(); try { @@ -254,7 +254,7 @@ namespace ArdupilotMega if (MONO) { - devs = Directory.GetFiles("/dev/","*ACM*"); + devs = Directory.GetFiles("/dev/", "*ACM*"); } string[] ports = SerialPort.GetPortNames(); @@ -701,7 +701,7 @@ namespace ArdupilotMega comPort.logfile = new BinaryWriter(File.Open(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + ".tlog", FileMode.CreateNew)); } catch { MessageBox.Show("Failed to create log - wont log this session"); } // soft fail - + comPort.BaseStream.PortName = CMB_serialport.Text; comPort.Open(true); @@ -1123,7 +1123,7 @@ namespace ArdupilotMega if (heatbeatsend.Second != DateTime.Now.Second) { -// Console.WriteLine("remote lost {0}", cs.packetdropremote); + // Console.WriteLine("remote lost {0}", cs.packetdropremote); MAVLink.__mavlink_heartbeat_t htb = new MAVLink.__mavlink_heartbeat_t(); @@ -1325,7 +1325,7 @@ namespace ArdupilotMega if (url.Contains("websocket")) { - using (var writer = new StreamWriter(stream,Encoding.Default)) + using (var writer = new StreamWriter(stream, Encoding.Default)) { writer.WriteLine("HTTP/1.1 101 WebSocket Protocol Handshake"); writer.WriteLine("Upgrade: WebSocket"); @@ -1336,7 +1336,7 @@ namespace ArdupilotMega int end = head.IndexOf('\r', start); if (end == -1) end = head.IndexOf('\n', start); - string accept = ComputeWebSocketHandshakeSecurityHash09(head.Substring(start,end-start)); + string accept = ComputeWebSocketHandshakeSecurityHash09(head.Substring(start, end - start)); writer.WriteLine("Sec-WebSocket-Accept: " + accept); @@ -1369,14 +1369,98 @@ namespace ArdupilotMega packet[i++] = (byte)ch; } - stream.Write(packet,0,i); + stream.Write(packet, 0, i); //break; } } } - else if (url.Contains(".html")) + else if (url.Contains("network.kml")) { + string header = "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.google-earth.kml+xml\n\n"; + byte[] temp = encoding.GetBytes(header); + stream.Write(temp, 0, temp.Length); + + SharpKml.Dom.Document kml = new SharpKml.Dom.Document(); + + SharpKml.Dom.Placemark pmplane = new SharpKml.Dom.Placemark(); + pmplane.Name = "P/Q "; + + pmplane.Visibility = true; + + SharpKml.Dom.Location loc = new SharpKml.Dom.Location(); + loc.Latitude = cs.lat; + loc.Longitude = cs.lng; + loc.Altitude = cs.alt; + + if (loc.Altitude < 0) + loc.Altitude = 0.01; + + SharpKml.Dom.Orientation ori = new SharpKml.Dom.Orientation(); + ori.Heading = cs.yaw; + ori.Roll = -cs.roll; + ori.Tilt = -cs.pitch; + + SharpKml.Dom.Scale sca = new SharpKml.Dom.Scale(); + + sca.X = 2; + sca.Y = 2; + sca.Z = 2; + + SharpKml.Dom.Model model = new SharpKml.Dom.Model(); + model.Location = loc; + model.Orientation = ori; + model.AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute; + model.Scale = sca; + + SharpKml.Dom.Link link = new SharpKml.Dom.Link(); + link.Href = new Uri("block_plane_0.dae", UriKind.Relative); + + model.Link = link; + + pmplane.Geometry = model; + + SharpKml.Dom.LookAt la = new SharpKml.Dom.LookAt() + { Altitude = loc.Altitude.Value, Latitude = loc.Latitude.Value, Longitude = loc.Longitude.Value, Tilt = 80, + Heading = cs.yaw, AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute, Range = 50}; + + kml.Viewpoint = la; + + kml.AddFeature(pmplane); + + SharpKml.Base.Serializer serializer = new SharpKml.Base.Serializer(); + serializer.Serialize(kml); + + byte[] buffer = Encoding.ASCII.GetBytes(serializer.Xml); + + stream.Write(buffer, 0, buffer.Length); + + stream.Close(); + } + else if (url.Contains("block_plane_0.dae")) + { + string header = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\n\n"; + byte[] temp = encoding.GetBytes(header); + stream.Write(temp, 0, temp.Length); + + BinaryReader file = new BinaryReader(File.Open("block_plane_0.dae", FileMode.Open, FileAccess.Read, FileShare.Read)); + byte[] buffer = new byte[1024]; + while (file.PeekChar() != -1) + { + + int leng = file.Read(buffer, 0, buffer.Length); + + stream.Write(buffer, 0, leng); + } + file.Close(); + stream.Close(); + } + else if (url.Contains("hud.html")) + { + string header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\n\n"; + byte[] temp = encoding.GetBytes(header); + stream.Write(temp, 0, temp.Length); + BinaryReader file = new BinaryReader(File.Open("hud.html", FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.PeekChar() != -1) @@ -1524,7 +1608,7 @@ namespace ArdupilotMega catch (Exception ex) { MessageBox.Show("Update Failed " + ex.Message); } } - private static void updatelabel(Label loadinglabel,string text) + private static void updatelabel(Label loadinglabel, string text) { MainV2.instance.Invoke((MethodInvoker)delegate { @@ -1589,7 +1673,7 @@ namespace ArdupilotMega } if (file.EndsWith("/")) { - update = updatecheck(loadinglabel, baseurl + file, file) && update; + update = updatecheck(loadinglabel, baseurl + file, subdir.Replace("/", "\\") + file) && update; continue; } if (loadinglabel != null) @@ -1657,7 +1741,7 @@ namespace ArdupilotMega } } if (loadinglabel != null) - updatelabel(loadinglabel,"Getting " + file); + updatelabel(loadinglabel, "Getting " + file); // Create a request using a URL that can receive a post. request = WebRequest.Create(baseurl + file); @@ -1689,7 +1773,7 @@ namespace ArdupilotMega if (dt.Second != DateTime.Now.Second) { if (loadinglabel != null) - updatelabel(loadinglabel,"Getting " + file + ": " + Math.Abs(bytes) + " bytes");//(((double)(contlen - bytes) / (double)contlen) * 100).ToString("0.0") + "%"; + updatelabel(loadinglabel, "Getting " + file + ": " + Math.Abs(bytes) + " bytes");//(((double)(contlen - bytes) / (double)contlen) * 100).ToString("0.0") + "%"; dt = DateTime.Now; } } diff --git a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs index cb60509b09..7b17af0a54 100644 --- a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs +++ b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs @@ -227,8 +227,8 @@ namespace ArdupilotMega Pitch: " + model.Orientation.Tilt.Value.ToString("0.00") + @" Yaw: " + model.Orientation.Heading.Value.ToString("0.00") + @" Time: " + cs.datetime.ToString("HH:mm:sszzzzzz") + @" - - ]]>"; + "; +// ]]>"; pmplane.Description = desc; } diff --git a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs index 506a52024a..76e6c3166b 100644 --- a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs +++ b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs @@ -34,5 +34,5 @@ using System.Resources; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.1.5")] +[assembly: AssemblyFileVersion("1.1.6")] [assembly: NeutralResourcesLanguageAttribute("")] diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/m3u/networklink.kml b/Tools/ArdupilotMegaPlanner/bin/Release/m3u/networklink.kml new file mode 100644 index 0000000000..0f28d211d2 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/bin/Release/m3u/networklink.kml @@ -0,0 +1,19 @@ + + + + Network Links + 1 + + View Centered Placemark + 1 + 0 + 1 + + http://127.0.0.1:56781/network.kml + onInterval + 1 + 1 + + + +