public MemoryStream GetLog(ushort no) { MemoryStream ms = new MemoryStream(); giveComport = true; byte[] buffer; if (Progress != null) { Progress((int)0, ""); } uint ofs = 0; uint count = 90; uint bps = 0; DateTime bpstimer = DateTime.Now; mavlink_log_request_data_t req = new mavlink_log_request_data_t(); req.target_component = MAV.compid; req.target_system = MAV.sysid; req.id = no; req.ofs = ofs; req.count = count; // request point generatePacket((byte)MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); DateTime start = DateTime.Now; int retrys = 3; while (true) { if (!(start.AddMilliseconds(700) > DateTime.Now)) { if (retrys > 0) { log.Info("GetLog Retry " + retrys + " - giv com " + giveComport); generatePacket((byte)MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); start = DateTime.Now; retrys--; continue; } giveComport = false; throw new Exception("Timeout on read - GetLog"); } buffer = readPacket(); if (buffer.Length > 5) { if (buffer[5] == (byte)MAVLINK_MSG_ID.LOG_DATA) { // reset retrys retrys = 3; start = DateTime.Now; var data = buffer.ByteArrayToStructure<mavlink_log_data_t>(); bps += data.count; ms.Seek((long)data.ofs, SeekOrigin.Begin); ms.Write(data.data, 0, data.count); if (data.count < count || data.count == 0) { if (Progress != null) { Progress((int)req.ofs, ""); } giveComport = false; return ms; } else { if (data.ofs < req.ofs) continue; if (Progress != null) { Progress((int)req.ofs,""); } if (bpstimer.Second != DateTime.Now.Second) { Console.WriteLine("log dl bps: "+ bps.ToString()); bpstimer = DateTime.Now; bps = 0; } req.ofs = data.ofs + data.count; Console.WriteLine("req "+ req.ofs + " " + req.count); generatePacket((byte)MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); } } } } }
public FileStream GetLog(ushort no) { FileStream ms = new FileStream(Path.GetTempFileName(), FileMode.Create, FileAccess.ReadWrite); Hashtable set = new Hashtable(); giveComport = true; MAVLinkMessage buffer; if (Progress != null) { Progress((int) 0, ""); } uint totallength = 0; uint ofs = 0; uint bps = 0; DateTime bpstimer = DateTime.Now; mavlink_log_request_data_t req = new mavlink_log_request_data_t(); req.target_component = MAV.compid; req.target_system = MAV.sysid; req.id = no; req.ofs = ofs; // entire log req.count = 0xFFFFFFFF; // request point generatePacket((byte) MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); DateTime start = DateTime.Now; int retrys = 3; while (true) { if (!(start.AddMilliseconds(1000) > DateTime.Now)) { if (retrys > 0) { log.Info("GetLog Retry " + retrys + " - giv com " + giveComport); generatePacket((byte) MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); start = DateTime.Now; retrys--; continue; } giveComport = false; throw new Exception("Timeout on read - GetLog"); } buffer = readPacket(); if (buffer.Length > 5) { if (buffer.msgid == (byte) MAVLINK_MSG_ID.LOG_DATA) { var data = buffer.ToStructure<mavlink_log_data_t>(); if (data.id != no) continue; // reset retrys retrys = 3; start = DateTime.Now; bps += data.count; // record what we have received set[(data.ofs/90).ToString()] = 1; ms.Seek((long) data.ofs, SeekOrigin.Begin); ms.Write(data.data, 0, data.count); // update new start point req.ofs = data.ofs + data.count; if (bpstimer.Second != DateTime.Now.Second) { if (Progress != null) { Progress((int) req.ofs, ""); } //Console.WriteLine("log dl bps: " + bps.ToString()); bpstimer = DateTime.Now; bps = 0; } // if data is less than max packet size or 0 > exit if (data.count < 90 || data.count == 0) { totallength = data.ofs + data.count; log.Info("start fillin len " + totallength + " count " + set.Count + " datalen " + data.count); break; } } } } log.Info("set count " + set.Count); log.Info("count total " + ((totallength)/90 + 1)); log.Info("totallength " + totallength); log.Info("current length " + ms.Length); while (true) { if (totallength == ms.Length && set.Count >= ((totallength) / 90 + 1)) { giveComport = false; return ms; } if (!(start.AddMilliseconds(200) > DateTime.Now)) { for (int a = 0; a < ((totallength)/90 + 1); a++) { if (!set.ContainsKey(a.ToString())) { // request large chunk if they are back to back uint bytereq = 90; int b = a + 1; while (!set.ContainsKey(b.ToString())) { bytereq += 90; b++; } req.ofs = (uint) (a*90); req.count = bytereq; log.Info("req missing " + req.ofs + " " + req.count); generatePacket((byte) MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); start = DateTime.Now; break; } } } buffer = readPacket(); if (buffer.Length > 5) { if (buffer.msgid == (byte) MAVLINK_MSG_ID.LOG_DATA) { var data = buffer.ToStructure<mavlink_log_data_t>(); if (data.id != no) continue; // reset retrys retrys = 3; start = DateTime.Now; bps += data.count; // record what we have received set[(data.ofs/90).ToString()] = 1; ms.Seek((long)data.ofs, SeekOrigin.Begin); ms.Write(data.data, 0, data.count); // update new start point req.ofs = data.ofs + data.count; if (bpstimer.Second != DateTime.Now.Second) { if (Progress != null) { Progress((int) req.ofs, ""); } //Console.WriteLine("log dl bps: " + bps.ToString()); bpstimer = DateTime.Now; bps = 0; } // check if we have next set and invalidate to request next packets if (set.ContainsKey(((data.ofs/90) + 1).ToString())) { start = DateTime.MinValue; } // if data is less than max packet size or 0 > exit if (data.count < 90 || data.count == 0) { continue; } } } } }
public MemoryStream GetLog(ushort no) { MemoryStream ms = new MemoryStream(); Hashtable set = new Hashtable(); giveComport = true; byte[] buffer; if (Progress != null) { Progress((int)0, ""); } bool fillin = false; uint totallength = 0; uint ofs = 0; uint bps = 0; DateTime bpstimer = DateTime.Now; mavlink_log_request_data_t req = new mavlink_log_request_data_t(); req.target_component = MAV.compid; req.target_system = MAV.sysid; req.id = no; req.ofs = ofs; // entire log req.count = 0xFFFFFFFF; // request point generatePacket((byte)MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); DateTime start = DateTime.Now; int retrys = 3; while (true) { if (!(start.AddMilliseconds(700) > DateTime.Now)) { if (retrys > 0) { log.Info("GetLog Retry " + retrys + " - giv com " + giveComport); generatePacket((byte)MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); start = DateTime.Now; retrys--; continue; } giveComport = false; throw new Exception("Timeout on read - GetLog"); } buffer = readPacket(); if (buffer.Length > 5) { if (buffer[5] == (byte)MAVLINK_MSG_ID.LOG_DATA) { var data = buffer.ByteArrayToStructure<mavlink_log_data_t>(); // reset retrys retrys = 3; start = DateTime.Now; bps += data.count; // record what we have received set[(data.ofs / 90).ToString()] = 1; ms.Seek((long)data.ofs, SeekOrigin.Begin); ms.Write(data.data, 0, data.count); // update new start point req.ofs = data.ofs + data.count; if (bpstimer.Second != DateTime.Now.Second) { if (Progress != null) { Progress((int)req.ofs, ""); } Console.WriteLine("log dl bps: " + bps.ToString()); bpstimer = DateTime.Now; bps = 0; } // if data is less than max packet size or 0 > exit if (data.count < 90 || data.count == 0) { totallength = data.ofs + data.count; fillin = true; break; } } } } while (true) { if (totallength == ms.Length && ((totallength) / 90 + 1) >= set.Count) { giveComport = false; return ms; } if (!(start.AddMilliseconds(200) > DateTime.Now)) { for (int a = 0; a < ((totallength) / 90 + 1); a++) { if (!set.ContainsKey(a.ToString())) { req.ofs = (uint)(a * 90); req.count = 90; Console.WriteLine("req missing " + req.ofs + " " + req.count); generatePacket((byte)MAVLINK_MSG_ID.LOG_REQUEST_DATA, req); break; } } } buffer = readPacket(); if (buffer.Length > 5) { if (buffer[5] == (byte)MAVLINK_MSG_ID.LOG_DATA) { var data = buffer.ByteArrayToStructure<mavlink_log_data_t>(); // reset retrys retrys = 3; start = DateTime.Now; bps += data.count; // record what we have received set[(data.ofs / 90).ToString()] = 1; ms.Seek((long)data.ofs, SeekOrigin.Begin); ms.Write(data.data, 0, data.count); // update new start point req.ofs = data.ofs + data.count; if (bpstimer.Second != DateTime.Now.Second) { if (Progress != null) { Progress((int)req.ofs, ""); } Console.WriteLine("log dl bps: " + bps.ToString()); bpstimer = DateTime.Now; bps = 0; } // if data is less than max packet size or 0 > exit if (data.count < 90 || data.count == 0) { continue; } } } } }