samples: apds9960: rework APDS9960 sample
Rework APDS9960 sample. Signed-off-by: Johann Fischer <j.fischer@phytec.de>
This commit is contained in:
parent
b192b2b575
commit
cc56de7005
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user