37 lines
801 B
C
37 lines
801 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*);
|