IIO_EV_DIR_NONE,
};
-
typedef struct
{
const char *type; /* event type; e.g: transition */
* more than one at a later time.
*/
sensors_event_t sample;
+ uint64_t event_id;
/*
* If the QUIRK_FIELD_ORDERING bit is set in quirks, the contents of this array are used in the finalization stage to swap sample fields
for (s = 0; s < MAX_SENSORS; s++)
if (sensor[s].dev_num == dev_num &&
is_enabled(s)) {
+ sensor[s].event_id = event.id;
sensor[s].report_ts = ts;
sensor[s].report_pending = 1;
sensor[s].report_initialized = 1;
if (sensor[s].mode == MODE_EVENT) {
ALOGV("Reporting event\n");
/* Android requires events to return 1.0 */
- data->data[0] = 1.0;
+ int dir = IIO_EVENT_CODE_EXTRACT_DIR(sensor[s].event_id);
+ switch (sensor[s].type) {
+ case SENSOR_TYPE_PROXIMITY:
+ if (dir == IIO_EV_DIR_FALLING)
+ data->data[0] = 0.0;
+ else
+ data->data[0] = 1.0;
+ break;
+ default:
+ data->data[0] = 1.0;
+ break;
+
+ }
data->data[1] = 0.0;
data->data[2] = 0.0;
return 1;
},
},
},
+ {
+ .tag = "proximity",
+ .type = SENSOR_TYPE_PROXIMITY,
+ .num_channels = 4,
+ .is_virtual = 0,
+ .channel = {
+ {
+ DECLARE_VOID_CHANNEL("proximity0")
+ .num_events = 1,
+ .event = {
+ { DECLARE_EVENT("proximity0", "_", "", "", "thresh", "_", "either") },
+ },
+ },
+ {
+ DECLARE_VOID_CHANNEL("proximity1")
+ .num_events = 1,
+ .event = {
+ { DECLARE_EVENT("proximity1", "_", "", "", "thresh", "_", "either") },
+ },
+ },
+ {
+ DECLARE_VOID_CHANNEL("proximity2")
+ .num_events = 1,
+ .event = {
+ { DECLARE_EVENT("proximity2", "_", "", "", "thresh", "_", "either") },
+ },
+ },
+ {
+ DECLARE_VOID_CHANNEL("proximity3")
+ .num_events = 1,
+ .event = {
+ { DECLARE_EVENT("proximity3", "_", "", "", "thresh", "_", "either") },
+ },
+ },
+ },
+ },
};
unsigned int catalog_size = ARRAY_SIZE(sensor_catalog);