Skip to content

Commit

Permalink
samples: apds9960: rework APDS9960 sample
Browse files Browse the repository at this point in the history
Rework APDS9960 sample.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
  • Loading branch information
jfischer-no authored and MaureenHelm committed Sep 21, 2018
1 parent b192b2b commit cc56de7
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 26 deletions.
8 changes: 7 additions & 1 deletion samples/sensor/apds9960/prj.conf
Expand Up @@ -2,5 +2,11 @@ CONFIG_PRINTK=y
CONFIG_GPIO=y
CONFIG_I2C=y
CONFIG_PRINTK=y
CONFIG_APDS9960=y
CONFIG_SENSOR=y

CONFIG_SYS_LOG=y
CONFIG_SYS_LOG_SENSOR_LEVEL=1
CONFIG_SYS_LOG_I2C_LEVEL=1

CONFIG_APDS9960=y
CONFIG_APDS9960_TRIGGER_GLOBAL_THREAD=n
7 changes: 7 additions & 0 deletions samples/sensor/apds9960/sample.yaml
Expand Up @@ -6,3 +6,10 @@ tests:
platform_whitelist: reel_board
tags: samples sensor
depends_on: i2c gpio
test-trigger:
harness: sensor
platform_whitelist: reel_board
tags: samples sensor
depends_on: i2c gpio
extra_configs:
- CONFIG_APDS9960_TRIGGER_GLOBAL_THREAD=y
75 changes: 50 additions & 25 deletions samples/sensor/apds9960/src/main.c
@@ -1,6 +1,6 @@
/*
*
* Copyright (c) 2017 Intel Corporation
* Copyright (c) 2018 Phytec Messtechnik GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand All @@ -11,43 +11,68 @@
#include <stdio.h>
#include <misc/printk.h>

static void do_main(struct device *dev)
{
struct sensor_value intensity, pdata;
#ifdef CONFIG_APDS9960_TRIGGER
K_SEM_DEFINE(sem, 0, 1);

while (1) {

if (sensor_sample_fetch(dev)) {
printk("sensor_sample fetch failed\n");
}

sensor_channel_get(dev, SENSOR_CHAN_LIGHT, &intensity);

printk("ambient light intensity without"
" trigger is %d\n", intensity.val1);

k_sleep(1000);

sensor_channel_get(dev, SENSOR_CHAN_PROX, &pdata);

printk("proxy without trigger is %d\n", pdata.val1);
static void trigger_handler(struct device *dev, struct sensor_trigger *trigger)
{
ARG_UNUSED(dev);
ARG_UNUSED(trigger);

k_sleep(1000);
}
k_sem_give(&sem);
}
#endif

void main(void)
{
struct device *dev;
struct sensor_value intensity, pdata;

printk("APDS9960 sample application\n");
dev = device_get_binding("APDS9960");

dev = device_get_binding(CONFIG_APDS9960_DRV_NAME);
if (!dev) {
printk("sensor: device not found.\n");
return;
}

do_main(dev);
#ifdef CONFIG_APDS9960_TRIGGER
struct sensor_value attr = {
.val1 = 127,
.val2 = 0,
};

if (sensor_attr_set(dev, SENSOR_CHAN_PROX,
SENSOR_ATTR_UPPER_THRESH, &attr)) {
printk("Could not set threshold\n");
return;
}

struct sensor_trigger trig = {
.type = SENSOR_TRIG_THRESHOLD,
.chan = SENSOR_CHAN_PROX,
};

if (sensor_trigger_set(dev, &trig, trigger_handler)) {
printk("Could not set trigger\n");
return;
}
#endif

while (true) {
#ifdef CONFIG_APDS9960_TRIGGER
printk("Waiting for a threshold event\n");
k_sem_take(&sem, K_FOREVER);
#else
k_sleep(5000);
#endif
if (sensor_sample_fetch(dev)) {
printk("sensor_sample fetch failed\n");
}

sensor_channel_get(dev, SENSOR_CHAN_LIGHT, &intensity);
sensor_channel_get(dev, SENSOR_CHAN_PROX, &pdata);

printk("ambient light intensity %d, proximity %d\n",
intensity.val1, pdata.val1);
}
}

0 comments on commit cc56de7

Please sign in to comment.