Branch data Line data Source code
1 : : /* 2 : : * Copyright (c) 2018 Oticon A/S 3 : : * 4 : : * SPDX-License-Identifier: Apache-2.0 5 : : */ 6 : : 7 : : /** 8 : : * API to the native_posix (Real) Time Clock 9 : : */ 10 : : 11 : : #include "native_rtc.h" 12 : : #include "hw_models_top.h" 13 : : #include "timer_model.h" 14 : : #include <zephyr/arch/posix/posix_trace.h> 15 : : 16 : : /** 17 : : * Return the (simulation) time in microseconds 18 : : * where clock_type is one of RTC_CLOCK_* 19 : : */ 20 : 0 : uint64_t native_rtc_gettime_us(int clock_type) 21 : : { 22 [ # # ]: 0 : if (clock_type == RTC_CLOCK_BOOT) { 23 : 0 : return hwm_get_time(); 24 [ # # ]: 0 : } else if (clock_type == RTC_CLOCK_REALTIME) { /* RTC_CLOCK_REALTIME */ 25 : 0 : return hwtimer_get_simu_rtc_time(); 26 [ # # ]: 0 : } else if (clock_type == RTC_CLOCK_PSEUDOHOSTREALTIME) { 27 : 0 : uint32_t nsec; 28 : 0 : uint64_t sec; 29 : : 30 : 0 : hwtimer_get_pseudohost_rtc_time(&nsec, &sec); 31 : 0 : return sec * 1000000UL + nsec / 1000U; 32 : : } 33 : : 34 : 0 : posix_print_error_and_exit("Unknown clock source %i\n", 35 : : clock_type); 36 : 0 : return 0; 37 : : } 38 : : 39 : : /** 40 : : * Similar to POSIX clock_gettime() 41 : : * get the simulation time split in nsec and seconds 42 : : * where clock_type is one of RTC_CLOCK_* 43 : : */ 44 : 0 : void native_rtc_gettime(int clock_type, uint32_t *nsec, uint64_t *sec) 45 : : { 46 [ # # ]: 0 : if (clock_type == RTC_CLOCK_BOOT || clock_type == RTC_CLOCK_REALTIME) { 47 : 0 : uint64_t us = native_rtc_gettime_us(clock_type); 48 : 0 : *nsec = (us % 1000000UL) * 1000U; 49 : 0 : *sec = us / 1000000UL; 50 : : } else { /* RTC_CLOCK_PSEUDOHOSTREALTIME */ 51 : 0 : hwtimer_get_pseudohost_rtc_time(nsec, sec); 52 : : } 53 : 0 : } 54 : : 55 : : /** 56 : : * Offset the real time clock by a number of microseconds. 57 : : * Note that this only affects the RTC_CLOCK_REALTIME and 58 : : * RTC_CLOCK_PSEUDOHOSTREALTIME clocks. 59 : : */ 60 : 0 : void native_rtc_offset(int64_t delta_us) 61 : : { 62 : 0 : hwtimer_adjust_rtc_offset(delta_us); 63 : 0 : } 64 : : 65 : : /** 66 : : * Adjust the speed of the clock source by a multiplicative factor 67 : : */ 68 : 0 : void native_rtc_adjust_clock(double clock_correction) 69 : : { 70 : 0 : hwtimer_adjust_rt_ratio(clock_correction); 71 : 0 : }