summaryrefslogtreecommitdiffhomepage
path: root/tracker-trackhat/trackhat.hpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2021-10-18 05:19:49 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-03-29 00:04:48 +0200
commitc94045c007c7e91dd0cf5ecd8836dbf9f9d7c864 (patch)
tree0519845bef09d7ec4ab19da5bf20b760bbbf8603 /tracker-trackhat/trackhat.hpp
parent36baa265e59566550dceeb04808e5d10925e5107 (diff)
tracker/trackhat: simplify connection state tracking
Diffstat (limited to 'tracker-trackhat/trackhat.hpp')
-rw-r--r--tracker-trackhat/trackhat.hpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/tracker-trackhat/trackhat.hpp b/tracker-trackhat/trackhat.hpp
index b1118c1c..a5b4bb3c 100644
--- a/tracker-trackhat/trackhat.hpp
+++ b/tracker-trackhat/trackhat.hpp
@@ -24,6 +24,9 @@ namespace trackhat_impl
{
using namespace options;
+TH_ErrorCode log_error(TH_ErrorCode error, const char* source);
+#define th_check(expr) ::trackhat_impl::log_error((expr), #expr)
+
struct trackhat_settings : opts
{
trackhat_settings();
@@ -77,6 +80,24 @@ struct point
bool ok = false;
};
+struct camera_handle final
+{
+ OTR_DISABLE_MOVE_COPY(camera_handle);
+ trackHat_Device_t* operator->() { return &device_; }
+ trackHat_Device_t& operator*() { return device_; }
+
+ camera_handle() = default;
+ ~camera_handle() = default;
+
+ [[nodiscard]] bool ensure_connected();
+ [[nodiscard]] bool ensure_device_exists();
+ void disconnect();
+private:
+ trackHat_Device_t device_ = {};
+ enum state { st_stopped, st_detected, st_streaming, };
+ state state_ = st_stopped;
+};
+
struct trackhat_camera final : pt_camera
{
trackhat_camera();
@@ -100,17 +121,15 @@ struct trackhat_camera final : pt_camera
static constexpr int sensor_size = 2940;
static constexpr int sensor_fov = 52;
static constexpr int point_count = TRACK_HAT_NUMBER_OF_POINTS;
+ static constexpr bool debug_mode = true;
private:
- enum device_status { th_noinit, th_init, th_detect, th_connect, th_running, };
trackhat_impl::setting_receiver sig{true};
- [[nodiscard]] int init_regs();
+ [[nodiscard]] bool init_regs();
void set_pt_options();
- trackHat_Device_t device {};
- device_status status = th_noinit;
- TH_ErrorCode error_code = TH_SUCCESS;
+ camera_handle device;
pt_settings s{trackhat_metadata::module_name};
trackhat_settings t;
};