samples: apds9960: rework APDS9960 sample

Rework APDS9960 sample.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
This commit is contained in:
Johann Fischer 2018-09-10 16:48:52 +02:00 committed by Maureen Helm
parent b192b2b575
commit cc56de7005
3 changed files with 64 additions and 26 deletions

View File

@ -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

View File

@ -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

View File

@ -1,6 +1,6 @@
/*
*
* Copyright (c) 2017 Intel Corporation
* Copyright (c) 2018 Phytec Messtechnik GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
@ -11,43 +11,68 @@
#include <stdio.h>
#include <misc/printk.h>
static void do_main(struct device *dev)
#ifdef CONFIG_APDS9960_TRIGGER
K_SEM_DEFINE(sem, 0, 1);
static void trigger_handler(struct device *dev, struct sensor_trigger *trigger)
{
struct sensor_value intensity, pdata;
ARG_UNUSED(dev);
ARG_UNUSED(trigger);
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);
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);
}
}