blob: 1ff92d81ac5df331db955daebf53b91ff13515b5 [file] [log] [blame]
/*
* Copyright (c) 2022 Nordic Semiconductor
*
* SPDX-License-Identifier: Apache-2.0
*/
#define LOG_MODULE_NAME app_temp
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "modules.h"
#include <zephyr/drivers/hwinfo.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/net/lwm2m.h>
#include <zephyr/kernel.h>
#include <zephyr/random/rand32.h>
#include <stdint.h>
static struct k_work_delayable temp_work;
#define PERIOD K_MINUTES(2)
static void temp_work_cb(struct k_work *work)
{
double v;
if (IS_ENABLED(CONFIG_FXOS8700_TEMP)) {
const struct device *dev = device_get_binding("nxp_fxos8700");
struct sensor_value val;
if (!dev) {
LOG_ERR("device not ready.");
goto out;
}
if (sensor_sample_fetch(dev)) {
LOG_ERR("temperature data update failed");
goto out;
}
sensor_channel_get(dev, SENSOR_CHAN_DIE_TEMP, &val);
v = sensor_value_to_double(&val);
} else {
/* Generate dummy temperature data */
v = 20.0 + (double)sys_rand32_get() / UINT32_MAX * 5.0;
}
lwm2m_engine_set_float("3303/0/5700", &v);
out:
k_work_schedule(&temp_work, PERIOD);
}
void init_temp_sensor(void)
{
if (lwm2m_engine_create_obj_inst("3303/0") == 0) {
k_work_init_delayable(&temp_work, temp_work_cb);
k_work_schedule(&temp_work, K_NO_WAIT);
}
}