summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2021-10-16 18:04:56 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-03-29 00:04:47 +0200
commitc2b1db1c6cbbcc58f69abf18ce6b704b6b767bac (patch)
tree1deb32f47ab1d68a4bee6755df4cbc2311467880
parentaab125f42116b993b5c03f451cf7fe377c2bc53b (diff)
tracker/trackhat: buffer flush
-rw-r--r--tracker-trackhat/camera.cpp17
-rw-r--r--tracker-trackhat/trackhat.hpp5
2 files changed, 16 insertions, 6 deletions
diff --git a/tracker-trackhat/camera.cpp b/tracker-trackhat/camera.cpp
index 1ec3bbe7..10feef47 100644
--- a/tracker-trackhat/camera.cpp
+++ b/tracker-trackhat/camera.cpp
@@ -90,7 +90,7 @@ error:
if (TH_ErrorCode status_ = (x); status_ != TH_SUCCESS) \
{ \
qDebug() << "trackhat: error" \
- << (void*)status_ << "in" << #x; \
+ << (void*)-status_ << "in" << #x; \
error_code = status_; \
goto error; \
} \
@@ -147,6 +147,7 @@ error:
bool trackhat_camera::start(const pt_settings&)
{
int attempts = 0;
+ constexpr int max_attempts = 5;
set_pt_options();
@@ -170,10 +171,18 @@ start:
return true;
error:
stop();
- if (++attempts < 5)
+ switch (error_code)
{
- portable::sleep(100);
- goto start;
+ case TH_ERROR_DEVICE_NOT_DETECTED:
+ case TH_ERROR_CAMERA_SELFT_TEST_FAILD:
+ case TH_ERROR_CAMERA_INTERNAL_BROKEN:
+ break;
+ default:
+ if (attempts++ < max_attempts)
+ {
+ portable::sleep(10);
+ goto start;
+ }
}
return false;
}
diff --git a/tracker-trackhat/trackhat.hpp b/tracker-trackhat/trackhat.hpp
index d8d66f0e..a6309f9c 100644
--- a/tracker-trackhat/trackhat.hpp
+++ b/tracker-trackhat/trackhat.hpp
@@ -85,8 +85,6 @@ struct trackhat_camera final : pt_camera
bool start(const pt_settings& s) override;
void stop() override;
- [[nodiscard]] int init_regs();
- void set_pt_options();
pt_camera::result get_frame(pt_frame& frame) override;
pt_camera::result get_info() const override;
@@ -106,6 +104,9 @@ private:
enum device_status { th_noinit, th_init, th_detect, th_connect, th_running, };
trackhat_impl::setting_receiver sig;
+ [[nodiscard]] int init_regs();
+ void set_pt_options();
+
trackHat_Device_t device {};
device_status status = th_noinit;
TH_ErrorCode error_code = TH_SUCCESS;