/* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * java mavlink generator tool. It should not be modified by hand. */ package com.MAVLink.Messages; import com.MAVLink.MAVLinkPacket; import com.MAVLink.common.msg_radio_status; /** * Storage for MAVLink Packet and Error statistics * */ public class MAVLinkStats /* implements Serializable */{ public int receivedPacketCount; // total recieved packet count for all sources public int crcErrorCount; public int lostPacketCount; // total lost packet count for all sources public boolean ignoreRadioPackets; // stats are nil for a system id until a packet has been received from a system public SystemStat[] systemStats; // stats for each system that is known public MAVLinkStats() { this(false); } public MAVLinkStats(boolean ignoreRadioPackets) { this.ignoreRadioPackets = ignoreRadioPackets; resetStats(); } /** * Check the new received packet to see if has lost someone between this and * the last packet * * @param packet * Packet that should be checked */ public void newPacket(MAVLinkPacket packet) { if (ignoreRadioPackets && packet.msgid == msg_radio_status.MAVLINK_MSG_ID_RADIO_STATUS) { return; } if (systemStats[packet.sysid] == null) { // only allocate stats for systems that exsist on the network systemStats[packet.sysid] = new SystemStat(); } lostPacketCount += systemStats[packet.sysid].newPacket(packet); receivedPacketCount++; } /** * Called when a CRC error happens on the parser */ public void crcError() { crcErrorCount++; } public void resetStats() { crcErrorCount = 0; lostPacketCount = 0; receivedPacketCount = 0; systemStats = new SystemStat[256]; } // stat structure for every system id public static class SystemStat { public int lostPacketCount; // the lost count for this source public int receivedPacketCount; // stats are nil for a component id until a packet has been received from a system public ComponentStat[] componentStats; // stats for each component that is known public SystemStat() { resetStats(); } public int newPacket(MAVLinkPacket packet) { int newLostPackets = 0; if (componentStats[packet.compid] == null) { // only allocate stats for systems that exsist on the network componentStats[packet.compid] = new ComponentStat(); } newLostPackets = componentStats[packet.compid].newPacket(packet); lostPacketCount += newLostPackets; receivedPacketCount++; return newLostPackets; } public void resetStats() { lostPacketCount = 0; receivedPacketCount = 0; componentStats = new ComponentStat[256]; } } // stat structure for every system id public static class ComponentStat { public int lastPacketSeq; public int lostPacketCount; // the lost count for this source public int receivedPacketCount; public ComponentStat() { resetStats(); } public int newPacket(MAVLinkPacket packet) { int newLostPackets = 0; if (hasLostPackets(packet)) { newLostPackets = updateLostPacketCount(packet); } lastPacketSeq = packet.seq; advanceLastPacketSequence(packet.seq); receivedPacketCount++; return newLostPackets; } public void resetStats() { lastPacketSeq = -1; lostPacketCount = 0; receivedPacketCount = 0; } private int updateLostPacketCount(MAVLinkPacket packet) { int lostPackets; if (packet.seq - lastPacketSeq < 0) { lostPackets = (packet.seq - lastPacketSeq) + 255; } else { lostPackets = (packet.seq - lastPacketSeq); } lostPacketCount += lostPackets; return lostPackets; } private void advanceLastPacketSequence(int lastSeq) { // wrap from 255 to 0 if necessary lastPacketSeq = (lastSeq + 1) & 0xFF; } private boolean hasLostPackets(MAVLinkPacket packet) { return lastPacketSeq >= 0 && packet.seq != lastPacketSeq; } } }