// // DriveSpeedAccumulator.hpp // Clock Signal // // Created by Thomas Harte on 01/06/2019. // Copyright © 2019 Thomas Harte. All rights reserved. // #pragma once #include #include #include namespace Apple::Macintosh { class DriveSpeedAccumulator { public: /*! Accepts fetched motor control values. */ void post_sample(uint8_t sample); struct Delegate { virtual void drive_speed_accumulator_set_drive_speed(DriveSpeedAccumulator *, float speed) = 0; }; /*! Sets the delegate to receive drive speed changes. */ void set_delegate(Delegate *delegate) { delegate_ = delegate; } private: static constexpr int samples_per_bucket = 20; int sample_count_ = 0; int sample_total_ = 0; Delegate *delegate_ = nullptr; }; }