-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaccel.h
88 lines (71 loc) · 2.76 KB
/
accel.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#ifndef CPLAYGROUND_ACCEL_H
#define CPLAYGROUND_ACCEL_H
#include "device.h"
enum accel_conf_type {
accel_fsr,
accel_lpf,
accel_rate_hz,
};
enum accel_event_type {
accel_event_new_sample = (1 << 0),
accel_event_tap_detected = (1 << 1),
};
struct accel_new_sample {
int x, y, z;
};
struct accel_tap_detected {
int detect;
};
struct accel_event {
enum accel_event_type type;
union {
struct accel_new_sample new_sample;
struct accel_tap_detected tap_detected;
};
};
typedef void (*accel_event_handler)(struct device* dev, struct accel_event event);
struct accel_api {
int (*setup_conf)(struct device* dev, const void* conf);
int (*set_attrib)(struct device* dev, enum accel_conf_type type, void* data);
int (*get_attrib)(struct device* dev, enum accel_conf_type type, void* data);
int (*setup_event)(struct device* dev, enum accel_event_type events, int enable);
int (*register_data_cb)(struct device* dev, accel_event_handler event_handler);
int (*read_sample)(struct device* dev, void* sample);
int (*powerdown)(struct device* dev);
};
static inline int accel_setup_conf(struct device* dev, const void* conf);
static inline int accel_set_attrib(struct device* dev, enum accel_conf_type type, void* data);
static inline int accel_get_attrib(struct device* dev, enum accel_conf_type type, void* data);
static inline int accel_setup_event(struct device* dev, enum accel_event_type events, int enable);
static inline int accel_register_data_cb(struct device* dev, accel_event_handler event_handler);
static inline int accel_read_sample(struct device* dev, void* sample);
static inline int accel_powerdown(struct device* dev);
static inline int accel_setup_conf(struct device* dev, const void* conf) {
struct accel_api* api = dev->api;
return api->setup_conf(dev, conf);
}
static inline int accel_set_attrib(struct device* dev, enum accel_conf_type type, void* data) {
struct accel_api* api = dev->api;
return api->set_attrib(dev, type, data);
}
static inline int accel_get_attrib(struct device* dev, enum accel_conf_type type, void* data) {
struct accel_api* api = dev->api;
return api->get_attrib(dev, type, data);
}
static inline int accel_register_data_cb(struct device* dev, accel_event_handler event_handler) {
struct accel_api* api = dev->api;
return api->register_data_cb(dev, event_handler);
}
static inline int accel_powerdown(struct device* dev) {
struct accel_api* api = dev->api;
return api->powerdown(dev);
}
static inline int accel_read_sample(struct device* dev, void* sample) {
struct accel_api* api = dev->api;
return api->read_sample(dev, sample);
}
static inline int accel_setup_event(struct device* dev, enum accel_event_type events, int enable) {
struct accel_api* api = dev->api;
return api->setup_event(dev, events, enable);
}
#endif//CPLAYGROUND_ACCEL_H