blob: 381f003ee0b8854ac268c5fbac714e617b53af9c [file] [log] [blame]
/*
* Copyright 2022 Bjarki Arge Andreasen
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/ztest.h>
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/rtc.h>
#define RTC_TEST_CAL_RANGE_LIMIT (200000)
#define RTC_TEST_CAL_RANGE_STEP (10000)
static const struct device *rtc = DEVICE_DT_GET(DT_ALIAS(rtc));
static int test_set_get_calibration(int32_t calibrate_set)
{
int32_t calibrate_get;
int ret;
ret = rtc_set_calibration(rtc, calibrate_set);
/* Check if calibration is within limits of hardware */
if (ret == -EINVAL) {
/* skip */
return -EINVAL;
}
/* Validate calibration was set */
zassert_true(ret == 0, "Failed to set calibration");
ret = rtc_get_calibration(rtc, &calibrate_get);
/* Validate calibration was gotten */
zassert_true(ret == 0, "Failed to get calibration");
/* Print comparison between set and get values */
printk("Calibrate (set,get): %i, %i\n", calibrate_set, calibrate_get);
return 0;
}
ZTEST(rtc_api, test_set_get_calibration)
{
int32_t calibrate_get;
int ret;
int32_t range_limit;
int32_t range_step;
ret = rtc_set_calibration(rtc, 0);
/* Validate calibration was set */
zassert_true(ret == 0, "Failed to set calibration");
ret = rtc_get_calibration(rtc, &calibrate_get);
/* Validate calibration was gotten */
zassert_true(ret == 0, "Failed to get calibration");
/* Validate edge values (0 already tested) */
test_set_get_calibration(1);
test_set_get_calibration(-1);
range_limit = RTC_TEST_CAL_RANGE_LIMIT;
range_step = RTC_TEST_CAL_RANGE_STEP;
/* Validate over negative range */
for (int32_t set = range_step; set <= range_limit; set += range_step) {
ret = test_set_get_calibration(-set);
if (ret < 0) {
/* Limit of hardware capabilties reached */
break;
}
}
/* Validate over positive range */
for (int32_t set = range_step; set <= range_limit; set += range_step) {
ret = test_set_get_calibration(set);
if (ret < 0) {
/* Limit of hardware capabilties reached */
break;
}
}
}