convertablet/daemon/accel_monitor.h

36 lines
800 B
C

#pragma once
#include <stdatomic.h>
#include <stdint.h>
#include <threads.h>
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*);