blob: cc2a1e69bccb5af7a67b25fa118aa113526e1c73 [file] [log] [blame]
/*
* Copyright (c) 2021 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* This file implements the thermometer abstraction that uses Zephyr sensor
* API for the die thermometer.
*
*/
#include "platform/nrf_802154_temperature.h"
#include <zephyr/device.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>
/** @brief Default temperature [C] reported if NRF_802154_TEMPERATURE_UPDATE is disabled. */
#define DEFAULT_TEMPERATURE 20
#define LOG_LEVEL LOG_LEVEL_INFO
#define LOG_MODULE_NAME nrf_802154_temperature
LOG_MODULE_REGISTER(LOG_MODULE_NAME);
static int8_t value = DEFAULT_TEMPERATURE;
#if defined(CONFIG_NRF_802154_TEMPERATURE_UPDATE)
static const struct device *const device = DEVICE_DT_GET(DT_NODELABEL(temp));
static struct k_work_delayable dwork;
static void work_handler(struct k_work *work)
{
struct sensor_value val;
int err;
err = sensor_sample_fetch(device);
if (!err) {
err = sensor_channel_get(device, SENSOR_CHAN_DIE_TEMP, &val);
}
if (!err && (value != val.val1)) {
value = val.val1;
nrf_802154_temperature_changed();
}
k_work_reschedule(&dwork, K_MSEC(CONFIG_NRF_802154_TEMPERATURE_UPDATE_PERIOD));
}
static int temperature_update_init(const struct device *dev)
{
ARG_UNUSED(dev);
__ASSERT_NO_MSG(device_is_ready(device));
k_work_init_delayable(&dwork, work_handler);
k_work_schedule(&dwork, K_NO_WAIT);
return 0;
}
SYS_INIT(temperature_update_init, POST_KERNEL, CONFIG_NRF_802154_TEMPERATURE_UPDATE_INIT_PRIO);
BUILD_ASSERT(CONFIG_SENSOR_INIT_PRIORITY < CONFIG_NRF_802154_TEMPERATURE_UPDATE_INIT_PRIO,
"CONFIG_SENSOR_INIT_PRIORITY must be lower than CONFIG_NRF_802154_TEMPERATURE_UPDATE_INIT_PRIO");
#endif /* defined(CONFIG_NRF_802154_TEMPERATURE_UPDATE) */
void nrf_802154_temperature_init(void)
{
/* Intentionally empty. */
}
void nrf_802154_temperature_deinit(void)
{
/* Intentionally empty. */
}
int8_t nrf_802154_temperature_get(void)
{
return value;
}