MAX31341/2 RTC Driver

Committer:
Mahir Ozturk
Date:
Wed Apr 10 17:28:15 2019 +0300
Revision:
0:1efa49a69ff8
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mahir Ozturk 0:1efa49a69ff8 1 /*******************************************************************************
Mahir Ozturk 0:1efa49a69ff8 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
Mahir Ozturk 0:1efa49a69ff8 3 *
Mahir Ozturk 0:1efa49a69ff8 4 * Permission is hereby granted, free of charge, to any person obtaining a
Mahir Ozturk 0:1efa49a69ff8 5 * copy of this software and associated documentation files (the "Software"),
Mahir Ozturk 0:1efa49a69ff8 6 * to deal in the Software without restriction, including without limitation
Mahir Ozturk 0:1efa49a69ff8 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Mahir Ozturk 0:1efa49a69ff8 8 * and/or sell copies of the Software, and to permit persons to whom the
Mahir Ozturk 0:1efa49a69ff8 9 * Software is furnished to do so, subject to the following conditions:
Mahir Ozturk 0:1efa49a69ff8 10 *
Mahir Ozturk 0:1efa49a69ff8 11 * The above copyright notice and this permission notice shall be included
Mahir Ozturk 0:1efa49a69ff8 12 * in all copies or substantial portions of the Software.
Mahir Ozturk 0:1efa49a69ff8 13 *
Mahir Ozturk 0:1efa49a69ff8 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Mahir Ozturk 0:1efa49a69ff8 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Mahir Ozturk 0:1efa49a69ff8 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Mahir Ozturk 0:1efa49a69ff8 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Mahir Ozturk 0:1efa49a69ff8 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Mahir Ozturk 0:1efa49a69ff8 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Mahir Ozturk 0:1efa49a69ff8 20 * OTHER DEALINGS IN THE SOFTWARE.
Mahir Ozturk 0:1efa49a69ff8 21 *
Mahir Ozturk 0:1efa49a69ff8 22 * Except as contained in this notice, the name of Maxim Integrated
Mahir Ozturk 0:1efa49a69ff8 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Mahir Ozturk 0:1efa49a69ff8 24 * Products, Inc. Branding Policy.
Mahir Ozturk 0:1efa49a69ff8 25 *
Mahir Ozturk 0:1efa49a69ff8 26 * The mere transfer of this software does not imply any licenses
Mahir Ozturk 0:1efa49a69ff8 27 * of trade secrets, proprietary technology, copyrights, patents,
Mahir Ozturk 0:1efa49a69ff8 28 * trademarks, maskwork rights, or any other form of intellectual
Mahir Ozturk 0:1efa49a69ff8 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Mahir Ozturk 0:1efa49a69ff8 30 * ownership rights.
Mahir Ozturk 0:1efa49a69ff8 31 *******************************************************************************
Mahir Ozturk 0:1efa49a69ff8 32 */
Mahir Ozturk 0:1efa49a69ff8 33
Mahir Ozturk 0:1efa49a69ff8 34 #ifndef RTCBASE_H_
Mahir Ozturk 0:1efa49a69ff8 35 #define RTCBASE_H_
Mahir Ozturk 0:1efa49a69ff8 36
Mahir Ozturk 0:1efa49a69ff8 37 #include "mbed.h"
Mahir Ozturk 0:1efa49a69ff8 38 #include <ctime>
Mahir Ozturk 0:1efa49a69ff8 39
Mahir Ozturk 0:1efa49a69ff8 40
Mahir Ozturk 0:1efa49a69ff8 41 /**
Mahir Ozturk 0:1efa49a69ff8 42 * @brief RTC base driver class for Maxim Max3134x RTC series.
Mahir Ozturk 0:1efa49a69ff8 43 */
Mahir Ozturk 0:1efa49a69ff8 44 class RtcBase
Mahir Ozturk 0:1efa49a69ff8 45 {
Mahir Ozturk 0:1efa49a69ff8 46 public:
Mahir Ozturk 0:1efa49a69ff8 47 /**
Mahir Ozturk 0:1efa49a69ff8 48 * @brief Mode of the comparator
Mahir Ozturk 0:1efa49a69ff8 49 */
Mahir Ozturk 0:1efa49a69ff8 50 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 51 POW_MGMT_MODE_COMPARATOR, /**< Comparator */
Mahir Ozturk 0:1efa49a69ff8 52 POW_MGMT_MODE_POWER_MANAGEMENT, /**< Power Management / Trickle Charger Mode */
Mahir Ozturk 0:1efa49a69ff8 53 } power_mgmt_mode_t;
Mahir Ozturk 0:1efa49a69ff8 54
Mahir Ozturk 0:1efa49a69ff8 55 /**
Mahir Ozturk 0:1efa49a69ff8 56 * @brief Analog comparator threshold voltage
Mahir Ozturk 0:1efa49a69ff8 57 */
Mahir Ozturk 0:1efa49a69ff8 58 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 59 COMP_THRESH_1V4, /**< 1.4V */
Mahir Ozturk 0:1efa49a69ff8 60 COMP_THRESH_1V6, /**< 1.6V */
Mahir Ozturk 0:1efa49a69ff8 61 COMP_THRESH_1V8, /**< 1.8V */
Mahir Ozturk 0:1efa49a69ff8 62 COMP_THRESH_2V0, /**< 2.0V */
Mahir Ozturk 0:1efa49a69ff8 63 } comp_thresh_t;
Mahir Ozturk 0:1efa49a69ff8 64
Mahir Ozturk 0:1efa49a69ff8 65 /**
Mahir Ozturk 0:1efa49a69ff8 66 * @brief Supply voltage select.
Mahir Ozturk 0:1efa49a69ff8 67 */
Mahir Ozturk 0:1efa49a69ff8 68 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 69 POW_MGMT_SUPPLY_SEL_AUTO, /**< Circuit decides whether to use VCC or VBACKUP */
Mahir Ozturk 0:1efa49a69ff8 70 POW_MGMT_SUPPLY_SEL_VCC, /**< Use VCC as supply */
Mahir Ozturk 0:1efa49a69ff8 71 POW_MGMT_SUPPLY_SEL_AIN, /**< Use AIN as supply */
Mahir Ozturk 0:1efa49a69ff8 72 } power_mgmt_supply_t;
Mahir Ozturk 0:1efa49a69ff8 73
Mahir Ozturk 0:1efa49a69ff8 74 /**
Mahir Ozturk 0:1efa49a69ff8 75 * @brief Selection of charging path's resistor value
Mahir Ozturk 0:1efa49a69ff8 76 */
Mahir Ozturk 0:1efa49a69ff8 77 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 78 TRICKLE_CHARGER_3K5, /**< 3500 Ohm */
Mahir Ozturk 0:1efa49a69ff8 79 TRICKLE_CHARGER_3K5_2, /**< 3500 Ohm */
Mahir Ozturk 0:1efa49a69ff8 80 TRICKLE_CHARGER_7K, /**< 7000 Ohm */
Mahir Ozturk 0:1efa49a69ff8 81 TRICKLE_CHARGER_13K, /**< 13000 Ohm */
Mahir Ozturk 0:1efa49a69ff8 82 } trickle_charger_ohm_t;
Mahir Ozturk 0:1efa49a69ff8 83
Mahir Ozturk 0:1efa49a69ff8 84 /**
Mahir Ozturk 0:1efa49a69ff8 85 * @brief Timer frequency selection
Mahir Ozturk 0:1efa49a69ff8 86 */
Mahir Ozturk 0:1efa49a69ff8 87 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 88 TIMER_FREQ_1024HZ, /**< 1024Hz */
Mahir Ozturk 0:1efa49a69ff8 89 TIMER_FREQ_256HZ, /**< 256Hz */
Mahir Ozturk 0:1efa49a69ff8 90 TIMER_FREQ_64HZ, /**< 64Hz */
Mahir Ozturk 0:1efa49a69ff8 91 TIMER_FREQ_16HZ, /**< 16Hz */
Mahir Ozturk 0:1efa49a69ff8 92 } timer_freq_t;
Mahir Ozturk 0:1efa49a69ff8 93
Mahir Ozturk 0:1efa49a69ff8 94 /**
Mahir Ozturk 0:1efa49a69ff8 95 * @brief CLKIN frequency selection
Mahir Ozturk 0:1efa49a69ff8 96 */
Mahir Ozturk 0:1efa49a69ff8 97 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 98 CLKIN_FREQ_1HZ, /**< 1Hz*/
Mahir Ozturk 0:1efa49a69ff8 99 CLKIN_FREQ_50HZ, /**< 50Hz */
Mahir Ozturk 0:1efa49a69ff8 100 CLKIN_FREQ_60HZ, /**< 60Hz */
Mahir Ozturk 0:1efa49a69ff8 101 CLKIN_FREQ_32HZ768, /**< 32.768Hz */
Mahir Ozturk 0:1efa49a69ff8 102 } clkin_freq_t;
Mahir Ozturk 0:1efa49a69ff8 103
Mahir Ozturk 0:1efa49a69ff8 104 /**
Mahir Ozturk 0:1efa49a69ff8 105 * @brief Square wave output frequency selection on CLKOUT pin
Mahir Ozturk 0:1efa49a69ff8 106 */
Mahir Ozturk 0:1efa49a69ff8 107 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 108 SQUARE_WAVE_OUT_FREQ_1HZ, /**< 1Hz */
Mahir Ozturk 0:1efa49a69ff8 109 SQUARE_WAVE_OUT_FREQ_4096HZ, /**< 4.098kHz */
Mahir Ozturk 0:1efa49a69ff8 110 SQUARE_WAVE_OUT_FREQ_8192HZ, /**< 8.192kHz */
Mahir Ozturk 0:1efa49a69ff8 111 SQUARE_WAVE_OUT_FREQ_32768HZ, /**< 32.768kHz */
Mahir Ozturk 0:1efa49a69ff8 112 } square_wave_out_freq_t;
Mahir Ozturk 0:1efa49a69ff8 113
Mahir Ozturk 0:1efa49a69ff8 114 /**
Mahir Ozturk 0:1efa49a69ff8 115 * @brief Selection of interrupt ids
Mahir Ozturk 0:1efa49a69ff8 116 */
Mahir Ozturk 0:1efa49a69ff8 117 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 118 INTR_ID_ALARM1, /**< Alarm1 flag */
Mahir Ozturk 0:1efa49a69ff8 119 INTR_ID_ALARM2, /**< Alarm2 flag */
Mahir Ozturk 0:1efa49a69ff8 120 INTR_ID_TIMER, /**< Timer interrupt flag */
Mahir Ozturk 0:1efa49a69ff8 121 INTR_ID_RESERVED,
Mahir Ozturk 0:1efa49a69ff8 122 INTR_ID_EXTERNAL, /**< External interrupt flag for DIN1 */
Mahir Ozturk 0:1efa49a69ff8 123 INTR_ID_ANALOG, /**< Analog Interrupt flag / Power fail flag */
Mahir Ozturk 0:1efa49a69ff8 124 INTR_ID_OSF, /**< Oscillator stop flag */
Mahir Ozturk 0:1efa49a69ff8 125 INTR_ID_LOS, /**< Loss of signal */
Mahir Ozturk 0:1efa49a69ff8 126 INTR_ID_END,
Mahir Ozturk 0:1efa49a69ff8 127 } intr_id_t;
Mahir Ozturk 0:1efa49a69ff8 128
Mahir Ozturk 0:1efa49a69ff8 129
Mahir Ozturk 0:1efa49a69ff8 130 /**
Mahir Ozturk 0:1efa49a69ff8 131 * @brief Alarm number selection
Mahir Ozturk 0:1efa49a69ff8 132 */
Mahir Ozturk 0:1efa49a69ff8 133 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 134 ALARM1, /**< Alarm number 1 */
Mahir Ozturk 0:1efa49a69ff8 135 ALARM2, /**< Alarm number 2 */
Mahir Ozturk 0:1efa49a69ff8 136 } alarm_no_t;
Mahir Ozturk 0:1efa49a69ff8 137
Mahir Ozturk 0:1efa49a69ff8 138 /**
Mahir Ozturk 0:1efa49a69ff8 139 * @brief Alarm periodicity selection
Mahir Ozturk 0:1efa49a69ff8 140 */
Mahir Ozturk 0:1efa49a69ff8 141 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 142 ALARM_PERIOD_EVERYSECOND, /**< Once per second */
Mahir Ozturk 0:1efa49a69ff8 143 ALARM_PERIOD_EVERYMINUTE, /**< Second match / Once per minute */
Mahir Ozturk 0:1efa49a69ff8 144 ALARM_PERIOD_HOURLY, /**< Second and Minute match */
Mahir Ozturk 0:1efa49a69ff8 145 ALARM_PERIOD_DAILY, /**< Hour, Minute and Second match*/
Mahir Ozturk 0:1efa49a69ff8 146 ALARM_PERIOD_WEEKLY, /**< Day and Time match */
Mahir Ozturk 0:1efa49a69ff8 147 ALARM_PERIOD_MONTHLY, /**< Date and Time match */
Mahir Ozturk 0:1efa49a69ff8 148 ALARM_PERIOD_YEARLY, /**< Month, Date and Time match (Max31342 only) */
Mahir Ozturk 0:1efa49a69ff8 149 ALARM_PERIOD_ONETIME, /**< Year, Month, Date and Time match (Max31342 only) */
Mahir Ozturk 0:1efa49a69ff8 150 } alarm_period_t;
Mahir Ozturk 0:1efa49a69ff8 151
Mahir Ozturk 0:1efa49a69ff8 152 /**
Mahir Ozturk 0:1efa49a69ff8 153 * @brief Selection of INTA/CLKIN pin function
Mahir Ozturk 0:1efa49a69ff8 154 */
Mahir Ozturk 0:1efa49a69ff8 155 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 156 CONFIGURE_PIN_AS_INTA, /**< Configure pin as interrupt out */
Mahir Ozturk 0:1efa49a69ff8 157 CONFIGURE_PIN_AS_CLKIN, /**< Configure pin as external clock in */
Mahir Ozturk 0:1efa49a69ff8 158 } config_inta_clkin_pin_t;
Mahir Ozturk 0:1efa49a69ff8 159
Mahir Ozturk 0:1efa49a69ff8 160 /**
Mahir Ozturk 0:1efa49a69ff8 161 * @brief Selection of INTB/CLKOUT pin function
Mahir Ozturk 0:1efa49a69ff8 162 */
Mahir Ozturk 0:1efa49a69ff8 163 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 164 CONFIGURE_PIN_AS_CLKOUT, /**< Output is square wave */
Mahir Ozturk 0:1efa49a69ff8 165 CONFIGURE_PIN_AS_INTB, /**< Output is interrupt */
Mahir Ozturk 0:1efa49a69ff8 166 } config_intb_clkout_pin_t;
Mahir Ozturk 0:1efa49a69ff8 167
Mahir Ozturk 0:1efa49a69ff8 168 /**
Mahir Ozturk 0:1efa49a69ff8 169 * @brief Selection of sync delay
Mahir Ozturk 0:1efa49a69ff8 170 */
Mahir Ozturk 0:1efa49a69ff8 171 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 172 SYNC_DLY_LESS_THAN_1SEC = 0, /**< Sync delay less than 1 second, recommended for external 1Hz clock */
Mahir Ozturk 0:1efa49a69ff8 173 SYNC_DLY_LESS_THAN_100MS, /**< Sync delay less than 100 msec, recommended for external 50Hz/60Hz/32KHz clock */
Mahir Ozturk 0:1efa49a69ff8 174 SYNC_DLY_LESS_THAN_20MS, /**< Sync delay less than 20 msec, recommended for internal clock */
Mahir Ozturk 0:1efa49a69ff8 175 } sync_delay_t;
Mahir Ozturk 0:1efa49a69ff8 176
Mahir Ozturk 0:1efa49a69ff8 177 typedef enum {
Mahir Ozturk 0:1efa49a69ff8 178 TTS_INTERNAL_1SEC = 0,
Mahir Ozturk 0:1efa49a69ff8 179 TTS_INTERNAL_2SEC,
Mahir Ozturk 0:1efa49a69ff8 180 TTS_INTERNAL_4SEC,
Mahir Ozturk 0:1efa49a69ff8 181 TTS_INTERNAL_16SEC,
Mahir Ozturk 0:1efa49a69ff8 182 TTS_INTERNAL_32SEC,
Mahir Ozturk 0:1efa49a69ff8 183 TTS_INTERNAL_64SEC,
Mahir Ozturk 0:1efa49a69ff8 184 TTS_INTERNAL_128SEC,
Mahir Ozturk 0:1efa49a69ff8 185 } ttsint_t;
Mahir Ozturk 0:1efa49a69ff8 186
Mahir Ozturk 0:1efa49a69ff8 187 /**
Mahir Ozturk 0:1efa49a69ff8 188 * @brief Function pointer type to interrupt handler function
Mahir Ozturk 0:1efa49a69ff8 189 */
Mahir Ozturk 0:1efa49a69ff8 190 typedef void (*interrupt_handler_function)(void *);
Mahir Ozturk 0:1efa49a69ff8 191
Mahir Ozturk 0:1efa49a69ff8 192 /**
Mahir Ozturk 0:1efa49a69ff8 193 * @brief Read from a register.
Mahir Ozturk 0:1efa49a69ff8 194 *
Mahir Ozturk 0:1efa49a69ff8 195 * @param[in] reg Address of a register to be read.
Mahir Ozturk 0:1efa49a69ff8 196 * @param[out] value Pointer to save result value.
Mahir Ozturk 0:1efa49a69ff8 197 * @param[in] len Size of result to be read.
Mahir Ozturk 0:1efa49a69ff8 198 *
Mahir Ozturk 0:1efa49a69ff8 199 * @returns 0 on success, negative error code on failure.
Mahir Ozturk 0:1efa49a69ff8 200 */
Mahir Ozturk 0:1efa49a69ff8 201 int read_register(uint8_t reg, uint8_t *value, uint8_t len);
Mahir Ozturk 0:1efa49a69ff8 202
Mahir Ozturk 0:1efa49a69ff8 203 /**
Mahir Ozturk 0:1efa49a69ff8 204 * @brief Write to a register.
Mahir Ozturk 0:1efa49a69ff8 205 *
Mahir Ozturk 0:1efa49a69ff8 206 * @param[in] reg Address of a register to be written.
Mahir Ozturk 0:1efa49a69ff8 207 * @param[out] value Pointer of value to be written to register.
Mahir Ozturk 0:1efa49a69ff8 208 * @param[in] len Size of result to be written.
Mahir Ozturk 0:1efa49a69ff8 209 *
Mahir Ozturk 0:1efa49a69ff8 210 * @returns 0 on success, negative error code on failure.
Mahir Ozturk 0:1efa49a69ff8 211 */
Mahir Ozturk 0:1efa49a69ff8 212 int write_register(uint8_t reg, const uint8_t *value, uint8_t len);
Mahir Ozturk 0:1efa49a69ff8 213
Mahir Ozturk 0:1efa49a69ff8 214 /**
Mahir Ozturk 0:1efa49a69ff8 215 * @brief Read time info from RTC.
Mahir Ozturk 0:1efa49a69ff8 216 *
Mahir Ozturk 0:1efa49a69ff8 217 * @param[out] rtc_time Time info from RTC.
Mahir Ozturk 0:1efa49a69ff8 218 *
Mahir Ozturk 0:1efa49a69ff8 219 * @returns 0 on success, negative error code on failure.
Mahir Ozturk 0:1efa49a69ff8 220 */
Mahir Ozturk 0:1efa49a69ff8 221 int get_time(struct tm *rtc_ctime);
Mahir Ozturk 0:1efa49a69ff8 222
Mahir Ozturk 0:1efa49a69ff8 223 /**
Mahir Ozturk 0:1efa49a69ff8 224 * @brief Set time info to RTC.
Mahir Ozturk 0:1efa49a69ff8 225 *
Mahir Ozturk 0:1efa49a69ff8 226 * @param[in] rtc_time Time info to be written to RTC.
Mahir Ozturk 0:1efa49a69ff8 227 *
Mahir Ozturk 0:1efa49a69ff8 228 * @returns 0 on success, negative error code on failure.
Mahir Ozturk 0:1efa49a69ff8 229 */
Mahir Ozturk 0:1efa49a69ff8 230 int set_time(const struct tm *rtc_ctime);
Mahir Ozturk 0:1efa49a69ff8 231
Mahir Ozturk 0:1efa49a69ff8 232 /**
Mahir Ozturk 0:1efa49a69ff8 233 * @brief Non-volatile memory write
Mahir Ozturk 0:1efa49a69ff8 234 *
Mahir Ozturk 0:1efa49a69ff8 235 * @param[out] buffer Pointer to the data to be written
Mahir Ozturk 0:1efa49a69ff8 236 * @param[in] offset Offset of location in NVRAM
Mahir Ozturk 0:1efa49a69ff8 237 * @param[in] length Number of bytes to write
Mahir Ozturk 0:1efa49a69ff8 238 *
Mahir Ozturk 0:1efa49a69ff8 239 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 240 */
Mahir Ozturk 0:1efa49a69ff8 241 int nvram_write(const uint8_t *buffer, int offset, int length);
Mahir Ozturk 0:1efa49a69ff8 242
Mahir Ozturk 0:1efa49a69ff8 243 /**
Mahir Ozturk 0:1efa49a69ff8 244 * @brief Non-volatile memory read
Mahir Ozturk 0:1efa49a69ff8 245 *
Mahir Ozturk 0:1efa49a69ff8 246 * @param[in] buffer Buffer to read in to
Mahir Ozturk 0:1efa49a69ff8 247 * @param[in] offset Offset of location in NVRAM
Mahir Ozturk 0:1efa49a69ff8 248 * @param[in] length Number of bytes to read
Mahir Ozturk 0:1efa49a69ff8 249 *
Mahir Ozturk 0:1efa49a69ff8 250 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 251 */
Mahir Ozturk 0:1efa49a69ff8 252 int nvram_read(uint8_t *buffer, int offset, int length);
Mahir Ozturk 0:1efa49a69ff8 253
Mahir Ozturk 0:1efa49a69ff8 254 /**
Mahir Ozturk 0:1efa49a69ff8 255 * @brief NVRAM size of the part
Mahir Ozturk 0:1efa49a69ff8 256 *
Mahir Ozturk 0:1efa49a69ff8 257 * @return 0 if part does not have a NVRAM, otherwise returns size
Mahir Ozturk 0:1efa49a69ff8 258 */
Mahir Ozturk 0:1efa49a69ff8 259 int nvram_size();
Mahir Ozturk 0:1efa49a69ff8 260
Mahir Ozturk 0:1efa49a69ff8 261 /**
Mahir Ozturk 0:1efa49a69ff8 262 * @brief Set an alarm condition
Mahir Ozturk 0:1efa49a69ff8 263 *
Mahir Ozturk 0:1efa49a69ff8 264 * @param[in] alarm_no Alarm number, ALARM1 or ALARM2
Mahir Ozturk 0:1efa49a69ff8 265 * @param[in] alarm_time Pointer to alarm time to be set
Mahir Ozturk 0:1efa49a69ff8 266 * @param[in] period Alarm periodicity, one of ALARM_PERIOD_*
Mahir Ozturk 0:1efa49a69ff8 267 *
Mahir Ozturk 0:1efa49a69ff8 268 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 269 */
Mahir Ozturk 0:1efa49a69ff8 270 int set_alarm(alarm_no_t alarm_no, const struct tm *alarm_time, alarm_period_t period);
Mahir Ozturk 0:1efa49a69ff8 271
Mahir Ozturk 0:1efa49a69ff8 272 /**
Mahir Ozturk 0:1efa49a69ff8 273 * @brief Get alarm data & time
Mahir Ozturk 0:1efa49a69ff8 274 *
Mahir Ozturk 0:1efa49a69ff8 275 * @param[in] alarm_no Alarm number, ALARM1 or ALARM2
Mahir Ozturk 0:1efa49a69ff8 276 * @param[out] alarm_time Pointer to alarm time to be filled in
Mahir Ozturk 0:1efa49a69ff8 277 * @param[out] period Pointer to the period of alarm, one of ALARM_PERIOD_*
Mahir Ozturk 0:1efa49a69ff8 278 * @param[out] is_enabled Pointer to the state of alarm
Mahir Ozturk 0:1efa49a69ff8 279 *
Mahir Ozturk 0:1efa49a69ff8 280 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 281 */
Mahir Ozturk 0:1efa49a69ff8 282 int get_alarm(alarm_no_t alarm_no, struct tm *alarm_time, alarm_period_t *period, bool *is_enabled);
Mahir Ozturk 0:1efa49a69ff8 283
Mahir Ozturk 0:1efa49a69ff8 284 /**
Mahir Ozturk 0:1efa49a69ff8 285 * @brief Select power management mode of operation
Mahir Ozturk 0:1efa49a69ff8 286 *
Mahir Ozturk 0:1efa49a69ff8 287 * @param[in] mode Mode selection, one of COMP_MODE_*
Mahir Ozturk 0:1efa49a69ff8 288 *
Mahir Ozturk 0:1efa49a69ff8 289 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 290 */
Mahir Ozturk 0:1efa49a69ff8 291 int set_power_mgmt_mode(power_mgmt_mode_t mode);
Mahir Ozturk 0:1efa49a69ff8 292
Mahir Ozturk 0:1efa49a69ff8 293 /**
Mahir Ozturk 0:1efa49a69ff8 294 * @brief Set comparator threshold
Mahir Ozturk 0:1efa49a69ff8 295 *
Mahir Ozturk 0:1efa49a69ff8 296 * @param[in] th Set Analog Comparator Threshold level, one of COMP_THRESH_*
Mahir Ozturk 0:1efa49a69ff8 297 *
Mahir Ozturk 0:1efa49a69ff8 298 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 299 */
Mahir Ozturk 0:1efa49a69ff8 300 int comparator_threshold_level(comp_thresh_t th);
Mahir Ozturk 0:1efa49a69ff8 301
Mahir Ozturk 0:1efa49a69ff8 302 /**
Mahir Ozturk 0:1efa49a69ff8 303 * @brief Select device power source
Mahir Ozturk 0:1efa49a69ff8 304 *
Mahir Ozturk 0:1efa49a69ff8 305 * @param[in] supply Supply selection, one of POW_MGMT_SUPPLY_SEL_*
Mahir Ozturk 0:1efa49a69ff8 306 *
Mahir Ozturk 0:1efa49a69ff8 307 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 308 */
Mahir Ozturk 0:1efa49a69ff8 309 int supply_select(power_mgmt_supply_t supply);
Mahir Ozturk 0:1efa49a69ff8 310
Mahir Ozturk 0:1efa49a69ff8 311 /**
Mahir Ozturk 0:1efa49a69ff8 312 * @brief Configure trickle charger charging path, also enable it
Mahir Ozturk 0:1efa49a69ff8 313 *
Mahir Ozturk 0:1efa49a69ff8 314 * @param[in] res Value of resister
Mahir Ozturk 0:1efa49a69ff8 315 * @param[in] diode Enable diode
Mahir Ozturk 0:1efa49a69ff8 316 *
Mahir Ozturk 0:1efa49a69ff8 317 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 318 */
Mahir Ozturk 0:1efa49a69ff8 319 int trickle_charger_enable(trickle_charger_ohm_t res, bool diode);
Mahir Ozturk 0:1efa49a69ff8 320
Mahir Ozturk 0:1efa49a69ff8 321 /**
Mahir Ozturk 0:1efa49a69ff8 322 * @brief Disable trickle charger
Mahir Ozturk 0:1efa49a69ff8 323 *
Mahir Ozturk 0:1efa49a69ff8 324 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 325 */
Mahir Ozturk 0:1efa49a69ff8 326 int trickle_charger_disable();
Mahir Ozturk 0:1efa49a69ff8 327
Mahir Ozturk 0:1efa49a69ff8 328 /**
Mahir Ozturk 0:1efa49a69ff8 329 * @brief Select square wave output frequency selection
Mahir Ozturk 0:1efa49a69ff8 330 *
Mahir Ozturk 0:1efa49a69ff8 331 * @param[in] freq Clock frequency, one of CLKOUT_FREQ_*
Mahir Ozturk 0:1efa49a69ff8 332 *
Mahir Ozturk 0:1efa49a69ff8 333 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 334 */
Mahir Ozturk 0:1efa49a69ff8 335 int set_output_square_wave_frequency(square_wave_out_freq_t freq);
Mahir Ozturk 0:1efa49a69ff8 336
Mahir Ozturk 0:1efa49a69ff8 337 /**
Mahir Ozturk 0:1efa49a69ff8 338 * @brief Select external clock input frequency
Mahir Ozturk 0:1efa49a69ff8 339 *
Mahir Ozturk 0:1efa49a69ff8 340 * @param[in] freq Clock frequency, one of CLKIN_FREQ_*
Mahir Ozturk 0:1efa49a69ff8 341 *
Mahir Ozturk 0:1efa49a69ff8 342 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 343 */
Mahir Ozturk 0:1efa49a69ff8 344 int set_clkin_frequency(clkin_freq_t freq);
Mahir Ozturk 0:1efa49a69ff8 345
Mahir Ozturk 0:1efa49a69ff8 346 /**
Mahir Ozturk 0:1efa49a69ff8 347 * @brief Select direction of INTB/CLKOUT pin
Mahir Ozturk 0:1efa49a69ff8 348 *
Mahir Ozturk 0:1efa49a69ff8 349 * @param[in] sel Pin function, one of CONFIGURE_PIN_B3_AS_INTB or CONFIGURE_PIN_B3_AS_CLKOUT
Mahir Ozturk 0:1efa49a69ff8 350 *
Mahir Ozturk 0:1efa49a69ff8 351 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 352 */
Mahir Ozturk 0:1efa49a69ff8 353 int configure_intb_clkout_pin(config_intb_clkout_pin_t sel);
Mahir Ozturk 0:1efa49a69ff8 354
Mahir Ozturk 0:1efa49a69ff8 355 /**
Mahir Ozturk 0:1efa49a69ff8 356 * @brief Select direction of INTA/CLKIN pin
Mahir Ozturk 0:1efa49a69ff8 357 *
Mahir Ozturk 0:1efa49a69ff8 358 * @param[in] sel Pin function, one of CONFIGURE_PIN_B3_AS_INTA or CONFIGURE_PIN_B3_AS_CLKIN
Mahir Ozturk 0:1efa49a69ff8 359 *
Mahir Ozturk 0:1efa49a69ff8 360 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 361 */
Mahir Ozturk 0:1efa49a69ff8 362 int configure_inta_clkin_pin(config_inta_clkin_pin_t sel);
Mahir Ozturk 0:1efa49a69ff8 363
Mahir Ozturk 0:1efa49a69ff8 364 /**
Mahir Ozturk 0:1efa49a69ff8 365 * @brief Initialize timer
Mahir Ozturk 0:1efa49a69ff8 366 *
Mahir Ozturk 0:1efa49a69ff8 367 * @param[in] value Timer initial value
Mahir Ozturk 0:1efa49a69ff8 368 * @param[in] repeat Timer repeat mode enable/disable
Mahir Ozturk 0:1efa49a69ff8 369 * @param[in] freq Timer frequency, one of TIMER_FREQ_*
Mahir Ozturk 0:1efa49a69ff8 370 * @param[in] mode Timer mode, 0 or 1
Mahir Ozturk 0:1efa49a69ff8 371 *
Mahir Ozturk 0:1efa49a69ff8 372 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 373 *
Mahir Ozturk 0:1efa49a69ff8 374 * @note \p mode controls the countdown timer interrupt function
Mahir Ozturk 0:1efa49a69ff8 375 * along with \p repeat.
Mahir Ozturk 0:1efa49a69ff8 376 * Pulse interrupt when \p mode = 0, irrespective of \p repeat (true or false)
Mahir Ozturk 0:1efa49a69ff8 377 * Pulse interrupt when \p mode = 1 and \p repeat = true
Mahir Ozturk 0:1efa49a69ff8 378 * Level interrupt when \p mode = 1 and \p repeat = false
Mahir Ozturk 0:1efa49a69ff8 379 */
Mahir Ozturk 0:1efa49a69ff8 380 int timer_init(uint8_t value, bool repeat, timer_freq_t freq);
Mahir Ozturk 0:1efa49a69ff8 381
Mahir Ozturk 0:1efa49a69ff8 382 /**
Mahir Ozturk 0:1efa49a69ff8 383 * @brief Read timer value
Mahir Ozturk 0:1efa49a69ff8 384 *
Mahir Ozturk 0:1efa49a69ff8 385 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 386 */
Mahir Ozturk 0:1efa49a69ff8 387 uint8_t timer_get();
Mahir Ozturk 0:1efa49a69ff8 388
Mahir Ozturk 0:1efa49a69ff8 389 /**
Mahir Ozturk 0:1efa49a69ff8 390 * @brief Enable timer
Mahir Ozturk 0:1efa49a69ff8 391 *
Mahir Ozturk 0:1efa49a69ff8 392 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 393 */
Mahir Ozturk 0:1efa49a69ff8 394 int timer_start();
Mahir Ozturk 0:1efa49a69ff8 395
Mahir Ozturk 0:1efa49a69ff8 396 /**
Mahir Ozturk 0:1efa49a69ff8 397 * @brief Pause timer, timer value is preserved
Mahir Ozturk 0:1efa49a69ff8 398 *
Mahir Ozturk 0:1efa49a69ff8 399 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 400 */
Mahir Ozturk 0:1efa49a69ff8 401 int timer_pause();
Mahir Ozturk 0:1efa49a69ff8 402
Mahir Ozturk 0:1efa49a69ff8 403 /**
Mahir Ozturk 0:1efa49a69ff8 404 * @brief Start timer from the paused value
Mahir Ozturk 0:1efa49a69ff8 405 *
Mahir Ozturk 0:1efa49a69ff8 406 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 407 */
Mahir Ozturk 0:1efa49a69ff8 408 int timer_continue();
Mahir Ozturk 0:1efa49a69ff8 409
Mahir Ozturk 0:1efa49a69ff8 410 /**
Mahir Ozturk 0:1efa49a69ff8 411 * @brief Disable timer
Mahir Ozturk 0:1efa49a69ff8 412 *
Mahir Ozturk 0:1efa49a69ff8 413 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 414 */
Mahir Ozturk 0:1efa49a69ff8 415 int timer_stop();
Mahir Ozturk 0:1efa49a69ff8 416
Mahir Ozturk 0:1efa49a69ff8 417 /**
Mahir Ozturk 0:1efa49a69ff8 418 * @brief Put device into data retention mode
Mahir Ozturk 0:1efa49a69ff8 419 *
Mahir Ozturk 0:1efa49a69ff8 420 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 421 */
Mahir Ozturk 0:1efa49a69ff8 422 int data_retention_mode_enter();
Mahir Ozturk 0:1efa49a69ff8 423
Mahir Ozturk 0:1efa49a69ff8 424 /**
Mahir Ozturk 0:1efa49a69ff8 425 * @brief Remove device from data retention mode
Mahir Ozturk 0:1efa49a69ff8 426 *
Mahir Ozturk 0:1efa49a69ff8 427 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 428 */
Mahir Ozturk 0:1efa49a69ff8 429 int data_retention_mode_exit();
Mahir Ozturk 0:1efa49a69ff8 430
Mahir Ozturk 0:1efa49a69ff8 431 /**
Mahir Ozturk 0:1efa49a69ff8 432 * @brief Enable I2C bus timeout mechanism
Mahir Ozturk 0:1efa49a69ff8 433 *
Mahir Ozturk 0:1efa49a69ff8 434 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 435 */
Mahir Ozturk 0:1efa49a69ff8 436 int i2c_timeout_enable();
Mahir Ozturk 0:1efa49a69ff8 437
Mahir Ozturk 0:1efa49a69ff8 438 /**
Mahir Ozturk 0:1efa49a69ff8 439 * @brief Disable I2C bus timeout mechanism
Mahir Ozturk 0:1efa49a69ff8 440 *
Mahir Ozturk 0:1efa49a69ff8 441 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 442 */
Mahir Ozturk 0:1efa49a69ff8 443 int i2c_timeout_disable();
Mahir Ozturk 0:1efa49a69ff8 444
Mahir Ozturk 0:1efa49a69ff8 445 /**
Mahir Ozturk 0:1efa49a69ff8 446 * @brief Enable interrupt
Mahir Ozturk 0:1efa49a69ff8 447 *
Mahir Ozturk 0:1efa49a69ff8 448 * @param[in] id Interrupt id, one of INTR_ID_*
Mahir Ozturk 0:1efa49a69ff8 449 *
Mahir Ozturk 0:1efa49a69ff8 450 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 451 */
Mahir Ozturk 0:1efa49a69ff8 452 int irq_enable(intr_id_t id);
Mahir Ozturk 0:1efa49a69ff8 453
Mahir Ozturk 0:1efa49a69ff8 454 /**
Mahir Ozturk 0:1efa49a69ff8 455 * @brief Disable interrupt
Mahir Ozturk 0:1efa49a69ff8 456 *
Mahir Ozturk 0:1efa49a69ff8 457 * @param[in] id Interrupt id, one of INTR_ID_*
Mahir Ozturk 0:1efa49a69ff8 458 *
Mahir Ozturk 0:1efa49a69ff8 459 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 460 */
Mahir Ozturk 0:1efa49a69ff8 461 int irq_disable(intr_id_t id);
Mahir Ozturk 0:1efa49a69ff8 462
Mahir Ozturk 0:1efa49a69ff8 463 /**
Mahir Ozturk 0:1efa49a69ff8 464 * @brief Disable all interrupts
Mahir Ozturk 0:1efa49a69ff8 465 *
Mahir Ozturk 0:1efa49a69ff8 466 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 467 */
Mahir Ozturk 0:1efa49a69ff8 468 int irq_disable_all();
Mahir Ozturk 0:1efa49a69ff8 469
Mahir Ozturk 0:1efa49a69ff8 470 /**
Mahir Ozturk 0:1efa49a69ff8 471 * @brief Set interrupt handler for a specific interrupt id
Mahir Ozturk 0:1efa49a69ff8 472 *
Mahir Ozturk 0:1efa49a69ff8 473 * @param[in] id Interrupt id, one of INTR_ID_*
Mahir Ozturk 0:1efa49a69ff8 474 * @param[in] func Interrupt handler function
Mahir Ozturk 0:1efa49a69ff8 475 * @param[in] cb Interrupt handler data
Mahir Ozturk 0:1efa49a69ff8 476 */
Mahir Ozturk 0:1efa49a69ff8 477 void set_intr_handler(intr_id_t id, interrupt_handler_function func, void *cb);
Mahir Ozturk 0:1efa49a69ff8 478
Mahir Ozturk 0:1efa49a69ff8 479 /**
Mahir Ozturk 0:1efa49a69ff8 480 * @brief Put device into reset state
Mahir Ozturk 0:1efa49a69ff8 481 *
Mahir Ozturk 0:1efa49a69ff8 482 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 483 */
Mahir Ozturk 0:1efa49a69ff8 484 int sw_reset_assert();
Mahir Ozturk 0:1efa49a69ff8 485
Mahir Ozturk 0:1efa49a69ff8 486 /**
Mahir Ozturk 0:1efa49a69ff8 487 * @brief Release device from state state
Mahir Ozturk 0:1efa49a69ff8 488 *
Mahir Ozturk 0:1efa49a69ff8 489 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 490 */
Mahir Ozturk 0:1efa49a69ff8 491 int sw_reset_release();
Mahir Ozturk 0:1efa49a69ff8 492
Mahir Ozturk 0:1efa49a69ff8 493 /**
Mahir Ozturk 0:1efa49a69ff8 494 * @brief Enable the RTC oscillator
Mahir Ozturk 0:1efa49a69ff8 495 *
Mahir Ozturk 0:1efa49a69ff8 496 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 497 */
Mahir Ozturk 0:1efa49a69ff8 498 int rtc_start();
Mahir Ozturk 0:1efa49a69ff8 499
Mahir Ozturk 0:1efa49a69ff8 500 /**
Mahir Ozturk 0:1efa49a69ff8 501 * @brief Disable the RTC oscillator
Mahir Ozturk 0:1efa49a69ff8 502 *
Mahir Ozturk 0:1efa49a69ff8 503 * @return 0 on success, error code on failure
Mahir Ozturk 0:1efa49a69ff8 504 */
Mahir Ozturk 0:1efa49a69ff8 505 int rtc_stop();
Mahir Ozturk 0:1efa49a69ff8 506
Mahir Ozturk 0:1efa49a69ff8 507 /**
Mahir Ozturk 0:1efa49a69ff8 508 * @brief Base class destructor.
Mahir Ozturk 0:1efa49a69ff8 509 */
Mahir Ozturk 0:1efa49a69ff8 510 ~RtcBase();
Mahir Ozturk 0:1efa49a69ff8 511
Mahir Ozturk 0:1efa49a69ff8 512 protected:
Mahir Ozturk 0:1efa49a69ff8 513 typedef struct {
Mahir Ozturk 0:1efa49a69ff8 514 uint8_t config_reg1;
Mahir Ozturk 0:1efa49a69ff8 515 uint8_t config_reg2;
Mahir Ozturk 0:1efa49a69ff8 516 uint8_t int_ploarity_config;
Mahir Ozturk 0:1efa49a69ff8 517 uint8_t timer_config;
Mahir Ozturk 0:1efa49a69ff8 518 uint8_t int_en_reg;
Mahir Ozturk 0:1efa49a69ff8 519 uint8_t int_status_reg;
Mahir Ozturk 0:1efa49a69ff8 520 uint8_t seconds;
Mahir Ozturk 0:1efa49a69ff8 521 uint8_t minutes;
Mahir Ozturk 0:1efa49a69ff8 522 uint8_t hours;
Mahir Ozturk 0:1efa49a69ff8 523 uint8_t day;
Mahir Ozturk 0:1efa49a69ff8 524 uint8_t date;
Mahir Ozturk 0:1efa49a69ff8 525 uint8_t month;
Mahir Ozturk 0:1efa49a69ff8 526 uint8_t year;
Mahir Ozturk 0:1efa49a69ff8 527 uint8_t alm1_sec;
Mahir Ozturk 0:1efa49a69ff8 528 uint8_t alm1_min;
Mahir Ozturk 0:1efa49a69ff8 529 uint8_t alm1_hrs;
Mahir Ozturk 0:1efa49a69ff8 530 uint8_t alm1day_date;
Mahir Ozturk 0:1efa49a69ff8 531 uint8_t alm1_mon;
Mahir Ozturk 0:1efa49a69ff8 532 uint8_t alm1_year;
Mahir Ozturk 0:1efa49a69ff8 533 uint8_t alm2_min;
Mahir Ozturk 0:1efa49a69ff8 534 uint8_t alm2_hrs;
Mahir Ozturk 0:1efa49a69ff8 535 uint8_t alm2day_date;
Mahir Ozturk 0:1efa49a69ff8 536 uint8_t timer_count;
Mahir Ozturk 0:1efa49a69ff8 537 uint8_t timer_init;
Mahir Ozturk 0:1efa49a69ff8 538 uint8_t ram_start;
Mahir Ozturk 0:1efa49a69ff8 539 uint8_t ram_end;
Mahir Ozturk 0:1efa49a69ff8 540 uint8_t pwr_mgmt_reg;
Mahir Ozturk 0:1efa49a69ff8 541 uint8_t trickle_reg;
Mahir Ozturk 0:1efa49a69ff8 542 uint8_t clock_sync_delay;
Mahir Ozturk 0:1efa49a69ff8 543 uint8_t temp_msb;
Mahir Ozturk 0:1efa49a69ff8 544 uint8_t temp_lsb;
Mahir Ozturk 0:1efa49a69ff8 545 uint8_t ts_config;
Mahir Ozturk 0:1efa49a69ff8 546 } regmap_t;
Mahir Ozturk 0:1efa49a69ff8 547
Mahir Ozturk 0:1efa49a69ff8 548 typedef struct {
Mahir Ozturk 0:1efa49a69ff8 549 union {
Mahir Ozturk 0:1efa49a69ff8 550 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 551 struct {
Mahir Ozturk 0:1efa49a69ff8 552 unsigned char seconds : 4; /**< RTC seconds value. */
Mahir Ozturk 0:1efa49a69ff8 553 unsigned char sec_10 : 3; /**< RTC seconds in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 554 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 555 } bits;
Mahir Ozturk 0:1efa49a69ff8 556 struct {
Mahir Ozturk 0:1efa49a69ff8 557 unsigned char value : 7;
Mahir Ozturk 0:1efa49a69ff8 558 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 559 } bcd;
Mahir Ozturk 0:1efa49a69ff8 560 } seconds;
Mahir Ozturk 0:1efa49a69ff8 561
Mahir Ozturk 0:1efa49a69ff8 562 union {
Mahir Ozturk 0:1efa49a69ff8 563 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 564 struct {
Mahir Ozturk 0:1efa49a69ff8 565 unsigned char minutes : 4; /**< RTC minutes value */
Mahir Ozturk 0:1efa49a69ff8 566 unsigned char min_10 : 3; /**< RTC minutes in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 567 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 568 } bits;
Mahir Ozturk 0:1efa49a69ff8 569 struct {
Mahir Ozturk 0:1efa49a69ff8 570 unsigned char value : 7;
Mahir Ozturk 0:1efa49a69ff8 571 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 572 } bcd;
Mahir Ozturk 0:1efa49a69ff8 573 } minutes;
Mahir Ozturk 0:1efa49a69ff8 574
Mahir Ozturk 0:1efa49a69ff8 575 union {
Mahir Ozturk 0:1efa49a69ff8 576 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 577 struct {
Mahir Ozturk 0:1efa49a69ff8 578 unsigned char hour : 4; /**< RTC hours value */
Mahir Ozturk 0:1efa49a69ff8 579 unsigned char hr_10 : 2; /**< RTC hours in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 580 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 581 } bits;
Mahir Ozturk 0:1efa49a69ff8 582 struct {
Mahir Ozturk 0:1efa49a69ff8 583 unsigned char value : 6;
Mahir Ozturk 0:1efa49a69ff8 584 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 585 } bcd;
Mahir Ozturk 0:1efa49a69ff8 586 } hours;
Mahir Ozturk 0:1efa49a69ff8 587
Mahir Ozturk 0:1efa49a69ff8 588 union {
Mahir Ozturk 0:1efa49a69ff8 589 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 590 struct {
Mahir Ozturk 0:1efa49a69ff8 591 unsigned char day : 3; /**< RTC days */
Mahir Ozturk 0:1efa49a69ff8 592 unsigned char : 5;
Mahir Ozturk 0:1efa49a69ff8 593 } bits;
Mahir Ozturk 0:1efa49a69ff8 594 struct {
Mahir Ozturk 0:1efa49a69ff8 595 unsigned char value : 3;
Mahir Ozturk 0:1efa49a69ff8 596 unsigned char : 5;
Mahir Ozturk 0:1efa49a69ff8 597 } bcd;
Mahir Ozturk 0:1efa49a69ff8 598 } day;
Mahir Ozturk 0:1efa49a69ff8 599
Mahir Ozturk 0:1efa49a69ff8 600 union {
Mahir Ozturk 0:1efa49a69ff8 601 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 602 struct {
Mahir Ozturk 0:1efa49a69ff8 603 unsigned char date : 4; /**< RTC date */
Mahir Ozturk 0:1efa49a69ff8 604 unsigned char date_10 : 2; /**< RTC date in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 605 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 606 } bits;
Mahir Ozturk 0:1efa49a69ff8 607 struct {
Mahir Ozturk 0:1efa49a69ff8 608 unsigned char value : 6;
Mahir Ozturk 0:1efa49a69ff8 609 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 610 } bcd;
Mahir Ozturk 0:1efa49a69ff8 611 } date;
Mahir Ozturk 0:1efa49a69ff8 612
Mahir Ozturk 0:1efa49a69ff8 613 union {
Mahir Ozturk 0:1efa49a69ff8 614 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 615 struct {
Mahir Ozturk 0:1efa49a69ff8 616 unsigned char month : 4; /**< RTC months */
Mahir Ozturk 0:1efa49a69ff8 617 unsigned char month_10 : 1; /**< RTC month in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 618 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 619 unsigned char century : 1; /**< Century bit */
Mahir Ozturk 0:1efa49a69ff8 620 } bits;
Mahir Ozturk 0:1efa49a69ff8 621 struct {
Mahir Ozturk 0:1efa49a69ff8 622 unsigned char value : 5;
Mahir Ozturk 0:1efa49a69ff8 623 unsigned char : 3;
Mahir Ozturk 0:1efa49a69ff8 624 } bcd;
Mahir Ozturk 0:1efa49a69ff8 625 } month;
Mahir Ozturk 0:1efa49a69ff8 626
Mahir Ozturk 0:1efa49a69ff8 627 union {
Mahir Ozturk 0:1efa49a69ff8 628 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 629 struct {
Mahir Ozturk 0:1efa49a69ff8 630 unsigned char year : 4; /**< RTC years */
Mahir Ozturk 0:1efa49a69ff8 631 unsigned char year_10 : 4; /**< RTC year multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 632 } bits;
Mahir Ozturk 0:1efa49a69ff8 633 struct {
Mahir Ozturk 0:1efa49a69ff8 634 unsigned char value : 8;
Mahir Ozturk 0:1efa49a69ff8 635 } bcd;
Mahir Ozturk 0:1efa49a69ff8 636 } year;
Mahir Ozturk 0:1efa49a69ff8 637 } rtc_time_regs_t;
Mahir Ozturk 0:1efa49a69ff8 638
Mahir Ozturk 0:1efa49a69ff8 639 typedef struct {
Mahir Ozturk 0:1efa49a69ff8 640 union {
Mahir Ozturk 0:1efa49a69ff8 641 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 642 struct {
Mahir Ozturk 0:1efa49a69ff8 643 unsigned char seconds : 4; /**< Alarm1 seconds */
Mahir Ozturk 0:1efa49a69ff8 644 unsigned char sec_10 : 3; /**< Alarm1 seconds in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 645 unsigned char a1m1 : 1; /**< Alarm1 mask bit for minutes */
Mahir Ozturk 0:1efa49a69ff8 646 } bits;
Mahir Ozturk 0:1efa49a69ff8 647 struct {
Mahir Ozturk 0:1efa49a69ff8 648 unsigned char value : 7;
Mahir Ozturk 0:1efa49a69ff8 649 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 650 } bcd;
Mahir Ozturk 0:1efa49a69ff8 651 } sec;
Mahir Ozturk 0:1efa49a69ff8 652
Mahir Ozturk 0:1efa49a69ff8 653 union {
Mahir Ozturk 0:1efa49a69ff8 654 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 655 struct {
Mahir Ozturk 0:1efa49a69ff8 656 unsigned char minutes : 4; /**< Alarm1 minutes */
Mahir Ozturk 0:1efa49a69ff8 657 unsigned char min_10 : 3; /**< Alarm1 minutes in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 658 unsigned char a1m2 : 1; /**< Alarm1 mask bit for minutes */
Mahir Ozturk 0:1efa49a69ff8 659 } bits;
Mahir Ozturk 0:1efa49a69ff8 660 struct {
Mahir Ozturk 0:1efa49a69ff8 661 unsigned char value : 7;
Mahir Ozturk 0:1efa49a69ff8 662 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 663 } bcd;
Mahir Ozturk 0:1efa49a69ff8 664 } min;
Mahir Ozturk 0:1efa49a69ff8 665
Mahir Ozturk 0:1efa49a69ff8 666 union {
Mahir Ozturk 0:1efa49a69ff8 667 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 668 struct {
Mahir Ozturk 0:1efa49a69ff8 669 unsigned char hour : 4; /**< Alarm1 hours */
Mahir Ozturk 0:1efa49a69ff8 670 unsigned char hr_10 : 2; /**< Alarm1 hours in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 671 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 672 unsigned char a1m3 : 1; /**< Alarm1 mask bit for hours */
Mahir Ozturk 0:1efa49a69ff8 673 } bits;
Mahir Ozturk 0:1efa49a69ff8 674 struct {
Mahir Ozturk 0:1efa49a69ff8 675 unsigned char value : 6;
Mahir Ozturk 0:1efa49a69ff8 676 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 677 } bcd;
Mahir Ozturk 0:1efa49a69ff8 678 } hrs;
Mahir Ozturk 0:1efa49a69ff8 679
Mahir Ozturk 0:1efa49a69ff8 680 union {
Mahir Ozturk 0:1efa49a69ff8 681 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 682 struct {
Mahir Ozturk 0:1efa49a69ff8 683 unsigned char day_date : 4; /**< Alarm1 day/date */
Mahir Ozturk 0:1efa49a69ff8 684 unsigned char date_10 : 2; /**< Alarm1 date in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 685 unsigned char dy_dt : 1;
Mahir Ozturk 0:1efa49a69ff8 686 unsigned char a1m4 : 1; /**< Alarm1 mask bit for day/date */
Mahir Ozturk 0:1efa49a69ff8 687 } bits;
Mahir Ozturk 0:1efa49a69ff8 688 struct {
Mahir Ozturk 0:1efa49a69ff8 689 unsigned char value : 3;
Mahir Ozturk 0:1efa49a69ff8 690 unsigned char : 5;
Mahir Ozturk 0:1efa49a69ff8 691 } bcd_day;
Mahir Ozturk 0:1efa49a69ff8 692 struct {
Mahir Ozturk 0:1efa49a69ff8 693 unsigned char value : 6;
Mahir Ozturk 0:1efa49a69ff8 694 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 695 } bcd_date;
Mahir Ozturk 0:1efa49a69ff8 696 } day_date;
Mahir Ozturk 0:1efa49a69ff8 697
Mahir Ozturk 0:1efa49a69ff8 698 union {
Mahir Ozturk 0:1efa49a69ff8 699 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 700 struct {
Mahir Ozturk 0:1efa49a69ff8 701 unsigned char month : 4; /**< Alarm1 months */
Mahir Ozturk 0:1efa49a69ff8 702 unsigned char month_10 : 1; /**< Alarm1 months in multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 703 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 704 unsigned char a1m6 : 1; /**< Alarm1 mask bit for year */
Mahir Ozturk 0:1efa49a69ff8 705 unsigned char a1m5 : 1; /**< Alarm1 mask bit for month */
Mahir Ozturk 0:1efa49a69ff8 706 } bits;
Mahir Ozturk 0:1efa49a69ff8 707 struct {
Mahir Ozturk 0:1efa49a69ff8 708 unsigned char value : 5;
Mahir Ozturk 0:1efa49a69ff8 709 unsigned char : 3;
Mahir Ozturk 0:1efa49a69ff8 710 } bcd;
Mahir Ozturk 0:1efa49a69ff8 711 } mon;
Mahir Ozturk 0:1efa49a69ff8 712
Mahir Ozturk 0:1efa49a69ff8 713 union {
Mahir Ozturk 0:1efa49a69ff8 714 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 715 struct {
Mahir Ozturk 0:1efa49a69ff8 716 unsigned char year : 4; /* Alarm1 years */
Mahir Ozturk 0:1efa49a69ff8 717 unsigned char year_10 : 4; /* Alarm1 multiples of 10 */
Mahir Ozturk 0:1efa49a69ff8 718 } bits;
Mahir Ozturk 0:1efa49a69ff8 719 struct {
Mahir Ozturk 0:1efa49a69ff8 720 unsigned char value : 8;
Mahir Ozturk 0:1efa49a69ff8 721 } bcd;
Mahir Ozturk 0:1efa49a69ff8 722 } year;
Mahir Ozturk 0:1efa49a69ff8 723 } alarm_regs_t;
Mahir Ozturk 0:1efa49a69ff8 724
Mahir Ozturk 0:1efa49a69ff8 725 typedef union {
Mahir Ozturk 0:1efa49a69ff8 726 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 727 struct {
Mahir Ozturk 0:1efa49a69ff8 728 unsigned char swrstn : 1; /**< Software reset */
Mahir Ozturk 0:1efa49a69ff8 729 unsigned char rs : 2; /**< Square wave output frequency selection on CLKOUT pin */
Mahir Ozturk 0:1efa49a69ff8 730 unsigned char osconz : 1; /**< Oscillator is on when set to 0. Oscillator is off when set to 1. */
Mahir Ozturk 0:1efa49a69ff8 731 unsigned char clksel : 2; /**< Selects the CLKIN frequency */
Mahir Ozturk 0:1efa49a69ff8 732 unsigned char intcn : 1; /**< Interrupt control bit. Selects the direction of INTB/CLKOUT */
Mahir Ozturk 0:1efa49a69ff8 733 unsigned char eclk : 1; /**< Enable external clock input */
Mahir Ozturk 0:1efa49a69ff8 734 } bits;
Mahir Ozturk 0:1efa49a69ff8 735 } config_reg1_t;
Mahir Ozturk 0:1efa49a69ff8 736
Mahir Ozturk 0:1efa49a69ff8 737 typedef union {
Mahir Ozturk 0:1efa49a69ff8 738 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 739 struct {
Mahir Ozturk 0:1efa49a69ff8 740 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 741 unsigned char set_rtc : 1; /**< Set RTC */
Mahir Ozturk 0:1efa49a69ff8 742 unsigned char rd_rtc : 1; /**< Read RTC. */
Mahir Ozturk 0:1efa49a69ff8 743 unsigned char i2c_timeout : 1; /**< I2C timeout Enable */
Mahir Ozturk 0:1efa49a69ff8 744 unsigned char bref : 2; /**< BREF sets the analog comparator threshold voltage. */
Mahir Ozturk 0:1efa49a69ff8 745 unsigned char data_reten : 1; /**< Sets the circuit into data retention mode. */
Mahir Ozturk 0:1efa49a69ff8 746 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 747 } bits;
Mahir Ozturk 0:1efa49a69ff8 748 } config_reg2_t;
Mahir Ozturk 0:1efa49a69ff8 749
Mahir Ozturk 0:1efa49a69ff8 750 typedef union {
Mahir Ozturk 0:1efa49a69ff8 751 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 752 struct {
Mahir Ozturk 0:1efa49a69ff8 753 unsigned char tfs : 2; /**< Timer frequency selection */
Mahir Ozturk 0:1efa49a69ff8 754 unsigned char trpt : 1; /**< Timer repeat mode. It controls the timer interrupt function along with TM. */
Mahir Ozturk 0:1efa49a69ff8 755 unsigned char : 1;
Mahir Ozturk 0:1efa49a69ff8 756 unsigned char te : 1; /**< Timer enable */
Mahir Ozturk 0:1efa49a69ff8 757 unsigned char tpause : 1; /**< Timer Pause.*/
Mahir Ozturk 0:1efa49a69ff8 758 unsigned char : 2;
Mahir Ozturk 0:1efa49a69ff8 759 } bits;
Mahir Ozturk 0:1efa49a69ff8 760 } timer_config_t;
Mahir Ozturk 0:1efa49a69ff8 761
Mahir Ozturk 0:1efa49a69ff8 762 typedef union {
Mahir Ozturk 0:1efa49a69ff8 763 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 764 struct {
Mahir Ozturk 0:1efa49a69ff8 765 unsigned char d_mode : 2; /**< Sets the mode of the comparator to one of the two following: comparator mode, and power management mode/trickle charger mode. */
Mahir Ozturk 0:1efa49a69ff8 766 unsigned char d_man_sel : 1; /**< Default low. When this bit is low, input control block decides which supply to use. When this bit is high, user can manually select whether to use V<sub>CC</sub> or VBACKUP as supply. */
Mahir Ozturk 0:1efa49a69ff8 767 unsigned char d_vback_sel : 1; /**< : Default low. When this bit is low, and D_MANUAL_SEL is high, V<sub>CC</sub> is switched to supply. When this bit is high, and D_MANUAL_SEL is high, V<sub>BACKUP</sub> is switched to supply. */
Mahir Ozturk 0:1efa49a69ff8 768 unsigned char : 4;
Mahir Ozturk 0:1efa49a69ff8 769 } bits;
Mahir Ozturk 0:1efa49a69ff8 770 } pwr_mgmt_reg_t;
Mahir Ozturk 0:1efa49a69ff8 771
Mahir Ozturk 0:1efa49a69ff8 772 typedef union {
Mahir Ozturk 0:1efa49a69ff8 773 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 774 struct {
Mahir Ozturk 0:1efa49a69ff8 775 unsigned char sync_delay : 2; /* Sync delay to take for the internal countdown chain to reset after the rising edge of Set_RTC */
Mahir Ozturk 0:1efa49a69ff8 776 unsigned char : 6;
Mahir Ozturk 0:1efa49a69ff8 777 } bits;
Mahir Ozturk 0:1efa49a69ff8 778 } clock_sync_reg_t;
Mahir Ozturk 0:1efa49a69ff8 779
Mahir Ozturk 0:1efa49a69ff8 780 typedef union {
Mahir Ozturk 0:1efa49a69ff8 781 unsigned char raw;
Mahir Ozturk 0:1efa49a69ff8 782 struct {
Mahir Ozturk 0:1efa49a69ff8 783 unsigned char automode : 1; /**< Automatic mode of temperature measurement. This mode is valid only when ONESHOTMODE=0. */
Mahir Ozturk 0:1efa49a69ff8 784 unsigned char oneshotmode : 1; /**< One-shot user requested temp measurement in real-time. AUTOMODE must be 0 in one-shot measurement mode. */
Mahir Ozturk 0:1efa49a69ff8 785 unsigned char ttint : 3; /**< Set temp measurement interval to specified time for auto mode */
Mahir Ozturk 0:1efa49a69ff8 786 unsigned char : 3;
Mahir Ozturk 0:1efa49a69ff8 787 } bits;
Mahir Ozturk 0:1efa49a69ff8 788 } ts_config_t;
Mahir Ozturk 0:1efa49a69ff8 789
Mahir Ozturk 0:1efa49a69ff8 790 static const uint8_t REG_NOT_AVAILABLE = 0xFF;
Mahir Ozturk 0:1efa49a69ff8 791
Mahir Ozturk 0:1efa49a69ff8 792 /**
Mahir Ozturk 0:1efa49a69ff8 793 * @brief Base class constructor.
Mahir Ozturk 0:1efa49a69ff8 794 *
Mahir Ozturk 0:1efa49a69ff8 795 * @param[in] regmap Pointer to device register mappings.
Mahir Ozturk 0:1efa49a69ff8 796 * @param[in] i2c Pointer to I2C bus object for this device.
Mahir Ozturk 0:1efa49a69ff8 797 * @param[in] inta_pin MCU's pin number that device's INTA pin connected
Mahir Ozturk 0:1efa49a69ff8 798 * @param[in] intb_pin MCU's pin number that device's INTB pin connected
Mahir Ozturk 0:1efa49a69ff8 799 */
Mahir Ozturk 0:1efa49a69ff8 800 RtcBase(const regmap_t *regmap, I2C *i2c, PinName inta_pin, PinName intb_pin);
Mahir Ozturk 0:1efa49a69ff8 801
Mahir Ozturk 0:1efa49a69ff8 802 private:
Mahir Ozturk 0:1efa49a69ff8 803 /* PRIVATE TYPE DECLARATIONS */
Mahir Ozturk 0:1efa49a69ff8 804
Mahir Ozturk 0:1efa49a69ff8 805 /* PRIVATE VARIABLE DECLARATIONS */
Mahir Ozturk 0:1efa49a69ff8 806 I2C *i2c_handler;
Mahir Ozturk 0:1efa49a69ff8 807 InterruptIn *inta_pin;
Mahir Ozturk 0:1efa49a69ff8 808 InterruptIn *intb_pin;
Mahir Ozturk 0:1efa49a69ff8 809 const regmap_t *regmap;
Mahir Ozturk 0:1efa49a69ff8 810
Mahir Ozturk 0:1efa49a69ff8 811 /* PRIVATE CONSTANT VARIABLE DECLARATIONS */
Mahir Ozturk 0:1efa49a69ff8 812 static const uint8_t I2C_WRITE = 0;
Mahir Ozturk 0:1efa49a69ff8 813 static const uint8_t I2C_READ = 1;
Mahir Ozturk 0:1efa49a69ff8 814 static const uint8_t MAX3134X_I2C_ADDRESS = 0x69;
Mahir Ozturk 0:1efa49a69ff8 815 static const uint8_t MAX3134X_I2C_W = ((MAX3134X_I2C_ADDRESS << 1) | I2C_WRITE);
Mahir Ozturk 0:1efa49a69ff8 816 static const uint8_t MAX3134X_I2C_R = ((MAX3134X_I2C_ADDRESS << 1) | I2C_READ);
Mahir Ozturk 0:1efa49a69ff8 817
Mahir Ozturk 0:1efa49a69ff8 818 enum config_reg2_set_rtc {
Mahir Ozturk 0:1efa49a69ff8 819 CONFIG_REG2_SET_RTC_RTCRUN = 0, /**< Setting this bit to zero doesn't allow to write into the RTC */
Mahir Ozturk 0:1efa49a69ff8 820 CONFIG_REG2_SET_RTC_RTCPRGM, /**< This bit must be set to one, before writing into the RTC. i.e to set the initial time for the RTC this bit must be high. */
Mahir Ozturk 0:1efa49a69ff8 821 };
Mahir Ozturk 0:1efa49a69ff8 822
Mahir Ozturk 0:1efa49a69ff8 823 /* PRIVATE FUNCTION DECLARATIONS */
Mahir Ozturk 0:1efa49a69ff8 824 void interrupt_handler();
Mahir Ozturk 0:1efa49a69ff8 825
Mahir Ozturk 0:1efa49a69ff8 826 void (RtcBase::*funcptr)(void);
Mahir Ozturk 0:1efa49a69ff8 827
Mahir Ozturk 0:1efa49a69ff8 828 void post_interrupt_work();
Mahir Ozturk 0:1efa49a69ff8 829
Mahir Ozturk 0:1efa49a69ff8 830 Thread *post_intr_work_thread;
Mahir Ozturk 0:1efa49a69ff8 831
Mahir Ozturk 0:1efa49a69ff8 832 struct handler {
Mahir Ozturk 0:1efa49a69ff8 833 void (*func)(void *);
Mahir Ozturk 0:1efa49a69ff8 834 void *cb;
Mahir Ozturk 0:1efa49a69ff8 835 };
Mahir Ozturk 0:1efa49a69ff8 836
Mahir Ozturk 0:1efa49a69ff8 837 handler interrupt_handler_list[INTR_ID_END];
Mahir Ozturk 0:1efa49a69ff8 838
Mahir Ozturk 0:1efa49a69ff8 839 int tm_hour_to_rtc_hr12(int hours, bool *is_am);
Mahir Ozturk 0:1efa49a69ff8 840
Mahir Ozturk 0:1efa49a69ff8 841 int rtc_hr12_to_tm_hour(int hours, bool is_am);
Mahir Ozturk 0:1efa49a69ff8 842
Mahir Ozturk 0:1efa49a69ff8 843 int rtc_regs_to_time(struct tm *time, const rtc_time_regs_t *regs);
Mahir Ozturk 0:1efa49a69ff8 844
Mahir Ozturk 0:1efa49a69ff8 845 int time_to_rtc_regs(rtc_time_regs_t *regs, const struct tm *time);
Mahir Ozturk 0:1efa49a69ff8 846
Mahir Ozturk 0:1efa49a69ff8 847 int set_alarm_regs(alarm_no_t alarm_no, const alarm_regs_t *regs);
Mahir Ozturk 0:1efa49a69ff8 848
Mahir Ozturk 0:1efa49a69ff8 849 int get_alarm_regs(alarm_no_t alarm_no, alarm_regs_t *regs);
Mahir Ozturk 0:1efa49a69ff8 850
Mahir Ozturk 0:1efa49a69ff8 851 int time_to_alarm_regs(alarm_regs_t &regs, const struct tm *alarm_time);
Mahir Ozturk 0:1efa49a69ff8 852
Mahir Ozturk 0:1efa49a69ff8 853 int alarm_regs_to_time(struct tm *alarm_time, const alarm_regs_t *regs);
Mahir Ozturk 0:1efa49a69ff8 854
Mahir Ozturk 0:1efa49a69ff8 855 int set_alarm_period(alarm_no_t alarm_no, alarm_regs_t &regs, alarm_period_t period);
Mahir Ozturk 0:1efa49a69ff8 856
Mahir Ozturk 0:1efa49a69ff8 857 int set_rtc_time();
Mahir Ozturk 0:1efa49a69ff8 858
Mahir Ozturk 0:1efa49a69ff8 859 int data_retention_mode_config(int state);
Mahir Ozturk 0:1efa49a69ff8 860
Mahir Ozturk 0:1efa49a69ff8 861 int i2c_timeout_config(int enable);
Mahir Ozturk 0:1efa49a69ff8 862
Mahir Ozturk 0:1efa49a69ff8 863 int set_clock_sync_delay(sync_delay_t delay);
Mahir Ozturk 0:1efa49a69ff8 864 };
Mahir Ozturk 0:1efa49a69ff8 865
Mahir Ozturk 0:1efa49a69ff8 866 #endif /* RTCBASE_H_ */