From 42f290209e9d462090e4458e49387ae628009dec Mon Sep 17 00:00:00 2001 From: Maximilian Stiefel Date: Sun, 21 Feb 2021 16:36:07 +0100 Subject: [PATCH] Implemented all features for now --- hal/stepper.cpp | 12 ++++++------ include/stepper.h | 3 ++- main.cpp | 32 +++++++++++++++++++++----------- settings.json | 2 +- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/hal/stepper.cpp b/hal/stepper.cpp index 57988ea..15ccda6 100644 --- a/hal/stepper.cpp +++ b/hal/stepper.cpp @@ -17,13 +17,13 @@ namespace simon { // TODO: Throw exception } extract_settings(j_set, axis); - m_thread = std::thread(std::bind(&a4988::c_allegro_4988::run, &(*m_ptr_a4988))); - for (int i=0; i<10; i++) { - rotate(90); - rotate(-90); - } + m_driver_thread = std::thread(std::bind(&a4988::c_allegro_4988::run, &(*m_ptr_a4988))); + } + + c_stepper::~c_stepper() + { m_ptr_a4988->kill(); - m_thread.join(); + m_driver_thread.join(); } void c_stepper::extract_settings(const json& j_set, const std::string& axis) diff --git a/include/stepper.h b/include/stepper.h index 8d48264..e115660 100644 --- a/include/stepper.h +++ b/include/stepper.h @@ -20,11 +20,12 @@ namespace simon { { public: c_stepper(const std::string& axis, const std::string& fname); + ~c_stepper(); float rotate(const float& degrees); private: settings_t m_stepper; std::unique_ptr m_ptr_a4988; - std::thread m_thread; + std::thread m_driver_thread; private: std::string read_file(const std::string& fname) const; void extract_settings(const json& j_set, const std::string& axis); diff --git a/main.cpp b/main.cpp index 35ee9ef..de6032a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,28 +1,38 @@ #include #include #include + int main(int argc, char *argv[]) { using namespace simon; namespace po = boost::program_options; - po::options_description desc("Allowed options"); + po::options_description desc("This small program allows to control SMcam. Allowed options"); desc.add_options() - ("help", "produce help message") - ("compression", po::value(), "set compression level"); + ("help", "Produce help message") + ("axis", po::value(), "Name of the axis to rotate") + ("settings", po::value(), "Settings file name") + ("rotate", po::value(), "Rotation in degrees. Positive means clockwise."); po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); if (vm.count("help")) { std::cout << desc << "\n"; - return 1; + return EXIT_FAILURE; } - if (vm.count("compression")) { - std::cout << "Compression level was set to " - << vm["compression"].as() << ".\n"; + stepper::c_stepper* ptr_stepper = nullptr; + if (vm.count("axis") && vm.count("settings")) { + auto axis = vm["axis"].as(); + auto fname_settings = vm["settings"].as(); + ptr_stepper = new stepper::c_stepper(axis, fname_settings); + if (vm.count("rotate")) { + auto degrees = vm["rotate"].as(); + ptr_stepper->rotate(degrees); + } } else { - std::cout << "Compression level was not set.\n"; + std::cerr << "Please specify axis and settings file.\n"; + return EXIT_FAILURE; } - stepper::c_stepper("azimuth", "settings.json"); - std::cout << "Hello camera :*" << std::endl; - return 0; + if (ptr_stepper != nullptr) + delete ptr_stepper; + return EXIT_SUCCESS; } diff --git a/settings.json b/settings.json index 0a7e913..49e6bb8 100644 --- a/settings.json +++ b/settings.json @@ -12,7 +12,7 @@ "gpio_en": 17, "gpio_step": 18 }, - "id": "azimuth" + "id": "elevation" } ] }