rtc.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*!
  2. * Copyright (C) Fraunhofer-Institut for Photonic Microsystems (IPMS)
  3. * Maria-Reiche-Str. 2
  4. * 01109 Dresden
  5. *
  6. * Unauthorized copying of this file, via any medium is strictly prohibited
  7. * Proprietary and confidential
  8. *
  9. * \file rtc.h
  10. * \author zimmerli
  11. * \date 2020-01-13
  12. * \brief Real-Time-Clock generic driver
  13. *
  14. */
  15. #ifndef RTC_H_
  16. #define RTC_H_
  17. #include <stdint.h>
  18. #include <kernel/base/time64.h>
  19. /**
  20. * \brief RTC device driver
  21. *
  22. * RTC has local time.
  23. * Real-Time is local time plus real-time-offset.
  24. */
  25. struct rtc_s {
  26. uint32_t id; //!< RTC device driver id
  27. void *port; //!< pointer to tsn ep device driver
  28. void *prv; //!< pointer to private data
  29. void (*getLocalTime64)(struct rtc_s *rtc, struct timespec64 *localtime); //!< function pointer, get local time
  30. void (*getRtcOffset)(struct rtc_s *rtc, struct timespec64 *offset); //!< function pointer, get rtc offset
  31. void (*setRtcOffset)(struct rtc_s *rtc, struct timespec64 *offset); //!< function pointer, set rtc offset
  32. void (*adjFine)(struct rtc_s *rtc, int64_t ppb); //!< function pointer, fine adjust nominal frequency
  33. };
  34. struct rtc_s *rtc_register(void);
  35. struct rtc_s *rtc_default(void);
  36. void rtc_get_local_time64(struct rtc_s *rtc, struct timespec64 *localtime);
  37. void rtc_get_rtc_offset(struct rtc_s *rtc, struct timespec64 *offset);
  38. void rtc_set_rtc_offset(struct rtc_s *rtc, struct timespec64 *offset);
  39. void rtc_adjfine(struct rtc_s *rtc, int64_t ppb);
  40. #endif /* RTC_H_ */