static bool ReceviedPacket(MAVLink.MAVLinkMessage rawpacket)
{
if (rawpacket.msgid == (byte) MAVLink.MAVLINK_MSG_ID.SCALED_IMU2)
{
MAVLink.mavlink_scaled_imu2_t packet = rawpacket.ToStructure<MAVLink.mavlink_scaled_imu2_t>();
// filter dataset
string item = (int) (packet.xmag/div) + "," +
(int) (packet.ymag/div) + "," +
(int) (packet.zmag/div);
if (filtercompass2.ContainsKey(item))
{
filtercompass2[item] = (int) filtercompass2[item] + 1;
if ((int) filtercompass2[item] > 3)
return false;
}
else
{
filtercompass2[item] = 1;
}
// values - offsets are 0
float rawmx = packet.xmag;
float rawmy = packet.ymag;
float rawmz = packet.zmag;
// add data
lock (datacompass2)
{
if (rawmx == 0 || rawmy == 0 || rawmz == 0)
return true;
datacompass2.Add(new Tuple<float, float, float>(rawmx, rawmy, rawmz));
}
return true;
}
else if (rawpacket.msgid == (byte) MAVLink.MAVLINK_MSG_ID.SCALED_IMU3)
{
MAVLink.mavlink_scaled_imu3_t packet = rawpacket.ToStructure<MAVLink.mavlink_scaled_imu3_t>();
// filter dataset
string item = (int) (packet.xmag/div) + "," +
(int) (packet.ymag/div) + "," +
(int) (packet.zmag/div);
if (filtercompass3.ContainsKey(item))
{
filtercompass3[item] = (int) filtercompass3[item] + 1;
if ((int) filtercompass3[item] > 3)
return false;
}
else
{
filtercompass3[item] = 1;
}
// values - offsets are 0
float rawmx = packet.xmag;
float rawmy = packet.ymag;
float rawmz = packet.zmag;
// add data
lock (datacompass3)
{
if (rawmx == 0 || rawmy == 0 || rawmz == 0)
return true;
datacompass3.Add(new Tuple<float, float, float>(rawmx, rawmy, rawmz));
}
return true;
}
else if (rawpacket.msgid == (byte) MAVLink.MAVLINK_MSG_ID.RAW_IMU)
{
MAVLink.mavlink_raw_imu_t packet = rawpacket.ToStructure<MAVLink.mavlink_raw_imu_t>();
if (packet.xmag == 0 && packet.ymag == 0)
return false;
// filter dataset
string item = (int) (packet.xmag/div) + "," +
(int) (packet.ymag/div) + "," +
(int) (packet.zmag/div);
if (filtercompass1.ContainsKey(item))
{
filtercompass1[item] = (int) filtercompass1[item] + 1;
if ((int) filtercompass1[item] > 3)
return false;
}
else
{
filtercompass1[item] = 1;
}
// values
float rawmx = packet.xmag - (float) MainV2.comPort.MAV.cs.mag_ofs_x;
float rawmy = packet.ymag - (float) MainV2.comPort.MAV.cs.mag_ofs_y;
float rawmz = packet.zmag - (float) MainV2.comPort.MAV.cs.mag_ofs_z;
// add data
lock (datacompass1)
{
datacompass1.Add(new Tuple<float, float, float>(rawmx, rawmy, rawmz));
}
return true;
}
return true;
}