Projects
domecam:swift
domecam
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 29
View file
domecam.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Fri Oct 6 13:21:23 UTC 2023 - Matwey V. Kornilov <matwey@sai.msu.ru> + +- Version 0.1.15 + +------------------------------------------------------------------- Fri Sep 22 08:58:17 UTC 2023 - Matwey V. Kornilov <matwey@sai.msu.ru> - Version 0.1.14
View file
_service
Changed
@@ -3,7 +3,7 @@ <param name="url">http://curl.sai.msu.ru/hg/home/matwey/domecam/</param> <param name="scm">hg</param> <param name="versionformat">{latesttag}</param> - <param name="revision">0.1.14</param> + <param name="revision">0.1.15</param> </service> <service name="tar" mode="buildtime" /> <service name="recompress" mode="buildtime">
View file
domecam-0.1.14.obscpio/.hgtags -> domecam-0.1.15.obscpio/.hgtags
Changed
@@ -12,3 +12,4 @@ 93fde07957df3453d10555f403039c3b02e27df3 0.1.11 f6f2cf7fc69c4b8853498a5242763da583ee9ca9 0.1.12 5dcf5bbc11e401e323d3faa68458878bfc6052b9 0.1.13 +8655a50fea3e634a2b099c77882009e08fd22ca1 0.1.14
View file
domecam-0.1.14.obscpio/CMakeLists.txt -> domecam-0.1.15.obscpio/CMakeLists.txt
Changed
@@ -1,5 +1,5 @@ cmake_minimum_required (VERSION 3.5) -project(domecam LANGUAGES C CXX VERSION 0.1.14) +project(domecam LANGUAGES C CXX VERSION 0.1.15) option(BUILD_DOMECAMD "build domecamd" ON) option(BUILD_DOMECAM_PROC "build domecam-proc" ON)
View file
domecam-0.1.14.obscpio/include/carriage.h -> domecam-0.1.15.obscpio/include/carriage.h
Changed
@@ -76,6 +76,10 @@ limit_reached(); }; + struct axis_not_homed: public error { + axis_not_homed(std::uint16_t axis); + }; + enum class direction: std::uint16_t { stop = 0x0000, cw = 0x0001, @@ -114,11 +118,11 @@ status_t& operator=(const status_t&) = default; status_t& operator=(status_t&&) = default; - operator std::uint16_t() const { + operator std::uint16_t() const noexcept { return status_; } - std::uint16_t limit_switch_mask(direction d) const { + std::uint16_t limit_switch_mask(direction d) const noexcept { assert(d != direction::stop); return (status_ & axis ? @@ -127,6 +131,47 @@ } }; + class user_t { + private: + std::uint16_t user_; + + public: + enum mask: std::uint16_t { + axis1_homed = 1 << 15, + axis0_homed = 1 << 14 + }; + + user_t(std::uint16_t); + user_t(const user_t&) = default; + user_t(user_t&&) = default; + user_t& operator=(const user_t&) = default; + user_t& operator=(user_t&&) = default; + + operator std::uint16_t() const noexcept { + return user_; + } + + constexpr std::uint16_t axis_homed_mask() const noexcept { + return axis1_homed | axis0_homed; + } + + std::uint16_t axis_homed_mask(status_t status) const noexcept { + return status & status_t::axis ? axis1_homed : axis0_homed; + } + + user_t flag_homed(status_t status) const noexcept { + return static_cast<std::uint16_t>(user_ | axis_homed_mask(status)); + } + + bool is_homed() const noexcept { + return user_ & axis_homed_mask(); + } + + bool is_homed(status_t status) const noexcept { + return user_ & axis_homed_mask(status); + } + }; + constexpr static std::uint16_t default_speed = 144; struct command { @@ -151,6 +196,9 @@ template<std::uint8_t tag, class T> typename reply_traits<unary_command<tag, T>>::result_type transaction(const unary_command<tag, T>& cmd); + void flag_axis_homed(); + void ensure_axis_homed(); + protected: virtual std::size_t available() = 0; virtual std::size_t drain() = 0; @@ -182,8 +230,8 @@ void accel(std::uint16_t a); std::uint16_t sync_mask(); void sync_mask(std::uint16_t mask); - std::uint16_t user_data(); - void user_data(std::uint16_t data); + user_t user_data(); + void user_data(user_t data); void axis(std::uint16_t a); void home(); };
View file
domecam-0.1.14.obscpio/src/carriage.cpp -> domecam-0.1.15.obscpio/src/carriage.cpp
Changed
@@ -133,6 +133,10 @@ constexpr abstract_carriage::serialized_type abstract_carriage::limit_reached::fingerprint; +abstract_carriage::axis_not_homed::axis_not_homed(std::uint16_t axis): + error(std::string("Axis ") + std::to_string(axis) + std::string(" is not homed")) { +} + abstract_carriage::command::~command() = default; @@ -329,6 +333,8 @@ explicit c(std::int16_t shift): nullary_command(encode('R', shift)) {} }; + ensure_axis_homed(); + return transaction(c{rpos}); } @@ -427,15 +433,15 @@ transaction(c{mask}); } -std::uint16_t abstract_carriage::user_data() { +abstract_carriage::user_t abstract_carriage::user_data() { struct c: public unary_command<'u', std::uint16_t> {}; return transaction(c{}); } -void abstract_carriage::user_data(std::uint16_t data) { +void abstract_carriage::user_data(user_t data) { struct c: public nullary_command { - explicit c(std::uint16_t data): nullary_command(encode('u', data)) {} + explicit c(user_t data): nullary_command(encode('u', data)) {} }; transaction(c{data}); @@ -452,6 +458,7 @@ void abstract_carriage::home() { sync_track(direction::ccw); reset_absolute(); + flag_axis_homed(); } abstract_carriage::serialized_type abstract_carriage::raw_transaction(const serialized_type& cmd) { @@ -488,12 +495,35 @@ return reply_traits<command_type>::parse_reply(cmd, raw_transaction(cmd.serialize())); } +void abstract_carriage::flag_axis_homed() { + const auto s = status(); + const auto u = user_data(); + + user_data(u.flag_homed(s)); +} + +void abstract_carriage::ensure_axis_homed() { + const auto u = user_data(); + + /* Shortcut: every axis is homed. */ + if (u.is_homed()) + return; + + /* Not every axis is homed. Which is current one? */ + if (const auto s = status(); !u.is_homed(s)) + throw axis_not_homed{!!(s & status_t::axis)}; +} + abstract_carriage::~abstract_carriage() = default; abstract_carriage::status_t::status_t(std::uint16_t status): status_(status) { } +abstract_carriage::user_t::user_t(std::uint16_t user): + user_(user) { +} + constexpr std::uint16_t abstract_carriage::default_speed; std::size_t carriage::available() {
View file
domecam-0.1.14.obscpio/src/executorfwd.cpp -> domecam-0.1.15.obscpio/src/executorfwd.cpp
Changed
@@ -40,7 +40,7 @@ std::cerr << "Accel: " << std::dec << c_.accel() << std::endl; std::cerr << "Path: " << std::dec << c_.path() << std::endl; std::cerr << "Sync mask: 0x" << std::hex << c_.sync_mask() << std::endl; - std::cerr << "User data: 0x" << std::hex << c_.user_data() << std::endl; + std::cerr << "User data: 0x" << std::hex << std::setfill('0') << std::setw(4) << static_cast<std::uint16_t>(c_.user_data()) << std::endl; } void carriage_executor::runner::run() {
View file
domecam.obsinfo
Changed
@@ -1,3 +1,3 @@ name: domecam -version: 0.1.14 -mtime: 1695372994 +version: 0.1.15 +mtime: 1696598209
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.