Skip to content

Commit

Permalink
MainV2: remove periph version checking at connect
Browse files Browse the repository at this point in the history
CAN_FORWARD requests are not always safe to perform, e.g., if there is
more traffic on the bus than the telemetry link can handle. We should
only forward CAN messages if the user has explicitly asked for it by
going to the DroneCAN setup tab.
  • Loading branch information
robertlong13 committed Sep 24, 2024
1 parent 5c7185b commit d5d5af0
Showing 1 changed file with 0 additions and 126 deletions.
126 changes: 0 additions & 126 deletions MainV2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1703,132 +1703,6 @@ public void doConnect(MAVLinkInterface comPort, string portname, string baud, bo
}
});

// check for newer firmware - can peripheral
if (showui)
Task.Run(() =>
{
try
{
List<int> buses = new List<int> { 1, 2 };
foreach (var bus in buses)
{
using (var port = new CommsInjection())
{
var can = new DroneCAN.DroneCAN();
can.SourceNode = 127;
port.ReadBufferUpdate += (o, i) => { };
port.WriteCallback += (o, bytes) =>
{
var lines = ASCIIEncoding.ASCII.GetString(bytes.ToArray())
.Split(new[] { '\r' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
can.ReadMessageSLCAN(line);
}
};
// mavlink to slcan
var canref = MainV2.comPort.SubscribeToPacketType(MAVLink.MAVLINK_MSG_ID.CAN_FRAME, (m) =>
{
if (m.msgid == (uint)MAVLink.MAVLINK_MSG_ID.CAN_FRAME)
{
var canfd = false;
var pkt = (MAVLink.mavlink_can_frame_t)m.data;
var cf = new CANFrame(BitConverter.GetBytes(pkt.id));
var length = pkt.len;
var payload = new CANPayload(pkt.data);
var ans2 = String.Format("{0}{1}{2}{3}\r", canfd ? 'B' : 'T', cf.ToHex(), length.ToString("X")
, payload.ToHex(DroneCAN.DroneCAN.dlcToDataLength(length)));
port.AppendBuffer(ASCIIEncoding.ASCII.GetBytes(ans2));
}
else if (m.msgid == (uint)MAVLink.MAVLINK_MSG_ID.CANFD_FRAME)
{
var canfd = true;
var pkt = (MAVLink.mavlink_canfd_frame_t)m.data;
var cf = new CANFrame(BitConverter.GetBytes(pkt.id));
var length = pkt.len;
var payload = new CANPayload(pkt.data);
var ans2 = String.Format("{0}{1}{2}{3}\r", canfd ? 'B' : 'T', cf.ToHex(), length.ToString("X")
, payload.ToHex(DroneCAN.DroneCAN.dlcToDataLength(length)));
port.AppendBuffer(ASCIIEncoding.ASCII.GetBytes(ans2));
}
return true;
}, (byte)MainV2.comPort.sysidcurrent, (byte)MainV2.comPort.compidcurrent, false);
can.NodeAdded += (id, status) =>
{
Console.WriteLine(id + " Node status seen - request Node Info");
// get node info
DroneCAN.DroneCAN.uavcan_protocol_GetNodeInfo_req gnireq = new DroneCAN.DroneCAN.uavcan_protocol_GetNodeInfo_req() { };
var slcan = can.PackageMessageSLCAN((byte)id, 30, 0, gnireq);
can.WriteToStreamSLCAN(slcan);
};
// be invisible
can.NodeStatus = false;
can.StartSLCAN(port.BaseStream);
//start on bus
var ans = MainV2.comPort.doCommand((byte)MainV2.comPort.sysidcurrent,
(byte)MainV2.comPort.compidcurrent, MAVLink.MAV_CMD.CAN_FORWARD, bus, 0, 0, 0, 0, 0, 0,
false);
Thread.Sleep(5000);
// stop
MainV2.comPort.doCommand((byte)MainV2.comPort.sysidcurrent,
(byte)MainV2.comPort.compidcurrent, MAVLink.MAV_CMD.CAN_FORWARD, 0, 0, 0, 0, 0, 0, 0,
false);
foreach (var node in can.NodeInfo)
{
var devicename = can.GetNodeName((byte)node.Key);
var githash = can.NodeInfo[node.Key].software_version.vcs_commit.ToString("X");
//Version and githash
log.Info(node.ToJSON());
var option = APFirmware.Manifest.Firmware.Where(a =>
a.MavFirmwareVersionType == APFirmware.RELEASE_TYPES.OFFICIAL.ToString() &&
a.VehicleType == "AP_Periph" &&
a.Format == "bin" &&
a.MavType == "CAN_PERIPHERAL" &&
a.MavFirmwareVersionMajor >= node.Value.software_version.major &&
a.MavFirmwareVersionMinor >= node.Value.software_version.minor &&
node.Value.software_version.major != 0 &&
node.Value.software_version.minor != 0 &&
devicename.EndsWith(a.Platform) &&
!a.GitSha.StartsWith(githash, StringComparison.InvariantCultureIgnoreCase)
).FirstOrDefault();
if (option != default(APFirmware.FirmwareInfo))
{
Common.MessageShowAgain("New firmware", "New firmware for " + devicename + " " + option.MavFirmwareVersion + " " + option.GitSha + "\nUpdate via the dronecan screen");
}
}
can.Stop();
MainV2.comPort.UnSubscribeToPacketType(canref);
}
}
}
catch (Exception ex)
{
log.Error(ex);
}
});

this.BeginInvokeIfRequired(() =>
{
_connectionControl.UpdateSysIDS();
Expand Down

0 comments on commit d5d5af0

Please sign in to comment.