| /* |
| * 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; |
| } |
| } |
| } |