OSDN Git Service

Merge remote-tracking branch 'origin/abt/topic/gmin/l-dev/sensors/master' into mr1
authorViorel Suman <viorel.suman@intel.com>
Thu, 19 Mar 2015 11:44:25 +0000 (13:44 +0200)
committerViorel Suman <viorel.suman@intel.com>
Thu, 19 Mar 2015 11:45:00 +0000 (13:45 +0200)
git log --pretty=format:"%h %ad | %s%d [%an]" origin/abt/topic/gmin/l-dev/mr1/master..origin/abt/topic/gmin/l-dev/sensors/master:
  6aafc79 Tue Mar 17 09:34:57 2015 +0100 | Add support for proximity sensor supporting events. (origin/abt/topic/gmin/l-dev/sensors/master, m/abt/topic/gmin/l-dev/master, s-new) [Adriana]

git diff --stat origin/abt/topic/gmin/l-dev/mr1/master..HEAD:
  common.h      |  2 +-
  control.c     | 15 ++++++++++++++-
  enumeration.c | 36 ++++++++++++++++++++++++++++++++++++
  3 files changed, 51 insertions(+), 2 deletions(-)

Change-Id: If8d3b238ff43d81f123f499b6f6c197ba5a5f694
Signed-off-by: Viorel Suman <viorel.suman@intel.com>
common.h
control.c
enumeration.c

index a7a77d8..07bc3a1 100644 (file)
--- a/common.h
+++ b/common.h
@@ -151,7 +151,6 @@ enum iio_event_direction {
        IIO_EV_DIR_NONE,
 };
 
-
 typedef struct
 {
        const char *type; /* event type; e.g: transition */
@@ -355,6 +354,7 @@ typedef struct
         * 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
index 62b2cc3..24ed7ae 100644 (file)
--- a/control.c
+++ b/control.c
@@ -1304,6 +1304,7 @@ static int integrate_device_report_from_event(int dev_num, int fd)
        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;
@@ -1382,7 +1383,19 @@ static int propagate_sensor_report (int s, sensors_event_t *data)
        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;
index e5703e7..b839fda 100644 (file)
@@ -165,6 +165,42 @@ sensor_catalog_entry_t sensor_catalog[] = {
                        },
                },
        },
+       {
+               .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);