// Part of dump1090, a Mode S message decoder for RTLSDR devices. // // stats.c: statistics structures and prototypes. // // Copyright (c) 2015 Oliver Jowett // // This file is free software: you may copy, redistribute and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation, either version 2 of the License, or (at your // option) any later version. // // This file is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // This file incorporates work covered by the following copyright and // permission notice: // // Copyright (C) 2012 by Salvatore Sanfilippo // // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef DUMP1090_STATS_H #define DUMP1090_STATS_H struct stats { uint64_t start; uint64_t end; // Mode S demodulator counts: uint32_t demod_preambles; uint32_t demod_rejected_bad; uint32_t demod_rejected_unknown_icao; uint32_t demod_accepted[MODES_MAX_BITERRORS+1]; // Mode A/C demodulator counts: uint32_t demod_modeac; uint64_t samples_processed; uint64_t samples_dropped; // timing: struct timespec demod_cpu; struct timespec reader_cpu; struct timespec background_cpu; // noise floor: double noise_power_sum; uint64_t noise_power_count; // mean signal power: double signal_power_sum; uint64_t signal_power_count; // peak signal power seen double peak_signal_power; // number of signals with power > -3dBFS uint32_t strong_signal_count; // remote messages: uint32_t remote_received_modeac; uint32_t remote_received_modes; uint32_t remote_rejected_bad; uint32_t remote_rejected_unknown_icao; uint32_t remote_accepted[MODES_MAX_BITERRORS+1]; // total messages: uint32_t messages_total; // network: uint32_t http_requests; // CPR decoding: unsigned int cpr_surface; unsigned int cpr_airborne; unsigned int cpr_global_ok; unsigned int cpr_global_bad; unsigned int cpr_global_skipped; unsigned int cpr_global_range_checks; unsigned int cpr_global_speed_checks; unsigned int cpr_local_ok; unsigned int cpr_local_skipped; unsigned int cpr_local_range_checks; unsigned int cpr_local_speed_checks; unsigned int cpr_local_aircraft_relative; unsigned int cpr_local_receiver_relative; unsigned int cpr_filtered; // aircraft: // total "new" aircraft (i.e. not seen in the last 30 or 300s) unsigned int unique_aircraft; // we saw only a single message unsigned int single_message_aircraft; // range histogram #define RANGE_BUCKET_COUNT 76 uint32_t range_histogram[RANGE_BUCKET_COUNT]; }; void add_stats(const struct stats *st1, const struct stats *st2, struct stats *target); void display_stats(struct stats *st); void reset_stats(struct stats *st); void add_timespecs(const struct timespec *x, const struct timespec *y, struct timespec *z); #endif