Sensor Watch 0.0.2
A board replacement for the classic Casio F-91W wristwatch, powered by a Microchip SAM L22 microcontroller.
Loading...
Searching...
No Matches
watch_rtc.h
1/*
2 * MIT License
3 *
4 * Copyright (c) 2020 Joey Castillo
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#ifndef _WATCH_RTC_H_INCLUDED
25#define _WATCH_RTC_H_INCLUDED
27
28#include "watch.h"
29#include "hpl_calendar.h"
30
41
42#define WATCH_RTC_REFERENCE_YEAR (2020)
43
44typedef union {
45 struct {
46 uint32_t second : 6; // 0-59
47 uint32_t minute : 6; // 0-59
48 uint32_t hour : 5; // 0-23
49 uint32_t day : 5; // 1-31
50 uint32_t month : 4; // 1-12
51 uint32_t year : 6; // 0-63 (representing 2020-2083)
52 } unit;
53 uint32_t reg; // the bit-packed value as expected by the RTC peripheral's CLOCK register.
55
56typedef enum watch_rtc_alarm_match {
57 ALARM_MATCH_DISABLED = 0,
58 ALARM_MATCH_SS,
59 ALARM_MATCH_MMSS,
60 ALARM_MATCH_HHMMSS,
61} watch_rtc_alarm_match;
62
67
77
83
99void watch_rtc_register_alarm_callback(ext_irq_cb_t callback, watch_date_time alarm_time, watch_rtc_alarm_match mask);
100
104
112void watch_rtc_register_tick_callback(ext_irq_cb_t callback);
113
117
133void watch_rtc_register_periodic_callback(ext_irq_cb_t callback, uint8_t frequency);
134
139
145
149
153void watch_rtc_enable(bool en);
154
158void watch_rtc_freqcorr_write(int16_t value, int16_t sign);
159
161#endif
void watch_rtc_disable_all_periodic_callbacks(void)
Disables all periodic callbacks, including the once-per-second tick callback.
watch_date_time watch_rtc_get_date_time(void)
Returns the date and time.
bool _watch_rtc_is_enabled(void)
Called by main.c to check if the RTC is enabled. You may call this function, but outside of app_init,...
void watch_rtc_disable_periodic_callback(uint8_t frequency)
Disables the tick callback for the given period.
void watch_rtc_disable_tick_callback(void)
Disables the tick callback for the given period.
void watch_rtc_disable_alarm_callback(void)
Disables the alarm callback.
void watch_rtc_register_tick_callback(ext_irq_cb_t callback)
Registers a "tick" callback that will be called once per second.
void watch_rtc_register_alarm_callback(ext_irq_cb_t callback, watch_date_time alarm_time, watch_rtc_alarm_match mask)
Registers an alarm callback that will be called when the RTC time matches the target time,...
void watch_rtc_enable(bool en)
Enable/disable RTC while in-flight. This is quite dangerous operation, so we repeat writing register ...
void watch_rtc_disable_matching_periodic_callbacks(uint8_t mask)
Disables tick callbacks for the given periods (as a bitmask).
void watch_rtc_set_date_time(watch_date_time date_time)
Sets the date and time.
void watch_rtc_register_periodic_callback(ext_irq_cb_t callback, uint8_t frequency)
Registers a callback that will be called at a configurable period.
void watch_rtc_freqcorr_write(int16_t value, int16_t sign)
Adjusts frequency correction in single register write. Not waiting for syncronisation to save power -...
Definition watch_rtc.h:44