#pragma once // 3rdparty lib includes #include "graphdisplay.h" #include // local includes #include "globals.h" #include "bmsutils.h" #include "utils.h" namespace statistics { using ContainerType = ring_buffer; extern ContainerType gas, brems, avgSpeed, avgSpeedKmh, sumCurrent, frontVoltage, backVoltage, frontLeftCurrent, frontRightCurrent, backLeftCurrent, backRightCurrent, #ifdef FEATURE_BMS bmsVoltage, bmsCurrent, bmsPower, #endif rssi; } // namespace statistics void pushStats(); class StatisticsAccessorInterface { public: virtual const statistics::ContainerType &getBuffer() const = 0; }; template class BufferAccessorImpl : public virtual StatisticsAccessorInterface { public: const statistics::ContainerType &getBuffer() const override { return T; } }; using GasStatistics = BufferAccessorImpl; using BremsStatistics = BufferAccessorImpl; using AvgSpeedStatistics = BufferAccessorImpl; using AvgSpeedKmhStatistics = BufferAccessorImpl; using SumCurrentStatistics = BufferAccessorImpl; using FrontVoltageStatistics = BufferAccessorImpl; using BackVoltageStatistics = BufferAccessorImpl; #ifdef FEATURE_BMS using BmsVoltageStatistics = BufferAccessorImpl; using BmsCurrentStatistics = BufferAccessorImpl; using BmsPowerStatistics = BufferAccessorImpl; #endif using FrontLeftCurrentStatistics = BufferAccessorImpl; using FrontRightCurrentStatistics = BufferAccessorImpl; using BackLeftCurrentStatistics = BufferAccessorImpl; using BackRightCurrentStatistics = BufferAccessorImpl; using RssiStatistics = BufferAccessorImpl;