#pragma once #include #include #include struct accel_data { int16_t x; int16_t y; int16_t z; }; enum accel_rotation : uint8_t { ACCEL_ROTATION_0DEG = 0, ACCEL_ROTATION_90DEG, ACCEL_ROTATION_180DEG, ACCEL_ROTATION_270DEG, ACCEL_ROTATION_NO_CHANGE, }; struct accel_monitor { atomic_bool monitoring_thread_should_exit; atomic_bool monitoring_thread_is_ready; thrd_t monitoring_thread; char const* sysfs_device_path; mtx_t current_data_lock; struct accel_data current_data; atomic_bool data_is_ready; }; struct accel_monitor* accel_start_monitor(char const* const sysfs_device_path); enum accel_rotation accel_get_current_rotation(struct accel_monitor*); void accel_stop_monitor(struct accel_monitor*);