#ifndef INCLUDED_DRIVER_ALLEGRO_4988 #define INCLUDED_DRIVER_ALLEGRO_4988 #define CFG_SAMPLE_RATE_US 5 #define CFG_PERIPHERAL_SRC_PCM 1 #define CFG_DEPRECATED_ARG 0 #include #include #include namespace simon { namespace a4988 { typedef struct { const unsigned gpio_en; const unsigned gpio_step; const unsigned gpio_dir; const unsigned gpio_microsteps; } a4988_settings_t; class c_cmd { public: explicit c_cmd(const std::string cmd) : m_cmd(cmd) {} bool operator==(const std::string& vgl) { return (vgl==m_cmd ? true : false); } virtual ~c_cmd(void) noexcept {} private: const std::string m_cmd; }; class c_move : public c_cmd { public: const unsigned steps; const bool dir; const unsigned period_us; c_move(const unsigned isteps, const bool idir, const unsigned iperiod_us) : c_cmd("move"), steps(isteps), dir(idir), period_us(iperiod_us){} }; class c_enable : public c_cmd { public: const bool enabled; explicit c_enable(const bool ienabled) : c_cmd("enable"), enabled(ienabled) {} }; class c_kill : public c_cmd { public: c_kill(void) : c_cmd("kill") {} }; class c_allegro_4988 { public: explicit c_allegro_4988(std::unique_ptr ptr_set); int enable(void); int disable(void); void kill(void); void post(std::shared_ptr cmd); void post_move(const unsigned steps, const bool dir, const unsigned period_us); void run(void); private: std::unique_ptr m_ptr_set; bool m_initialized; std::queue> m_queue; unsigned m_pwm_freq; bool m_alive; private: void initialize(void); int set_pwm_freq(const unsigned pwm_freq); }; } // namespace a4988 } // namespace simon #endif /*INCLUDED_DRIVER_ALLEGRO_4988*/