Skip to content

Commit 3589270

Browse files
authored
Merge pull request #26 from fpistm/unified
Unified API
2 parents 0df97f0 + 1e99a58 commit 3589270

File tree

4 files changed

+97
-116
lines changed

4 files changed

+97
-116
lines changed

README.md

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ _SubSeconds management_
4242
* **`void setSubSeconds(uint32_t subSeconds)`**
4343

4444
_Hour format (AM or PM)_
45-
* **`uint8_t getHours(AM_PM *period)`**
46-
* **`void setHours(uint8_t hours, AM_PM period)`**
47-
* **`void setTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds, AM_PM period)`**
48-
* **`void setAlarmHours(uint8_t hours, AM_PM period)`**
45+
* **`uint8_t getHours(AM_PM *period = nullptr)`**
46+
* **`void setHours(uint8_t hours, AM_PM period = AM)`**
47+
* **`void setTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds = 1000, AM_PM period = AM)`**
48+
* **`void setAlarmHours(uint8_t hours, AM_PM period = AM)`**
4949
* **`uint8_t getAlarmHours(AM_PM *period)`**
5050
* **`void setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds, AM_PM period)`**
5151

@@ -55,23 +55,50 @@ _Week day configuration_
5555
* **`void setDate(uint8_t weekDay, uint8_t day, uint8_t month, uint8_t year)`**
5656

5757
_Time and date configuration (added for convenience)_
58-
* **`void getTime(uint8_t *hours, uint8_t *minutes, uint8_t *seconds, uint32_t *subSeconds, AM_PM *period = NULL)`**
58+
* **`void getTime(uint8_t *hours, uint8_t *minutes, uint8_t *seconds, uint32_t *subSeconds, AM_PM *period = nullptr)`**
5959
* **`void getDate(uint8_t *weekDay, uint8_t *day, uint8_t *month, uint8_t *year)`**
6060

61-
### Since STM32RTC version > 1.0.3
61+
### Since STM32RTC version higher than 1.0.3
6262

63-
_SubSeconds alarm management_
63+
_SubSeconds alarm management_
6464

6565
* **`void setAlarmSubSeconds(uint32_t subSeconds)`**
6666

6767
* **Updated API:**
68-
* **`void setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds = 0)`**
68+
* **`void setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds = 0, AM_PM period = AM)`**
6969
* **`uint32_t getEpoch(uint32_t *subSeconds = nullptr)`**
7070
* **`void setEpoch(uint32_t ts, uint32_t subSeconds = 0)`**
7171
* **`void setAlarmEpoch(uint32_t ts, Alarm_Match match = MATCH_DHHMMSS, uint32_t subSeconds = 0)`**
7272

73+
_Library version management_
74+
75+
STM32 RTC library version is based on Semantic Versioning 2.0.0 (https://semver.org/)
76+
77+
This will ease some dependencies:
78+
79+
* `STM32_RTC_VERSION_MAJOR` -> major version
80+
* `STM32_RTC_VERSION_MINOR` -> minor version
81+
* `STM32_RTC_VERSION_PATCH` -> patch version
82+
* `STM32_RTC_VERSION_EXTRA` -> Extra label
83+
with:
84+
- 0: official release
85+
- [1-9]: release candidate
86+
- F[0-9]: development
87+
88+
* `STM32_RTC_VERSION` --> Full version number
89+
90+
`STM32_RTC_VERSION` can de used to handle some API change:
91+
```C++
92+
#if defined(STM32_RTC_VERSION) && (STM32_RTC_VERSION >= 0x01010000)
93+
rtc.setAlarmTime(alarmHours, alarmMinutes, alarmSeconds, 123);
94+
#else
95+
rtc.setAlarmTime(alarmHours, alarmMinutes, alarmSeconds);
96+
#endif
97+
```
98+
7399
### Since STM32 Core version > 1.5.0
74100
_Reset time management_
101+
75102
By default, if a time is set it will not be reset after a reboot.
76103

77104
Using `begin(true)` or `begin(true, HOUR_24)` will reset the RTC registers.

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=STM32duino RTC
2-
version=1.0.3
2+
version=1.1.0
33
author=STMicroelectronics, Wi6Labs
44
maintainer=stm32duino
55
sentence=Allows to use the RTC functionalities of STM32 based boards.

src/STM32RTC.cpp

Lines changed: 33 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ void STM32RTC::begin(bool resetTime, Hour_Format format)
7171
void STM32RTC::begin(Hour_Format format)
7272
{
7373
if (_configured == false) {
74+
_format = format;
7475
RTC_init((format == HOUR_12) ? HOUR_FORMAT_12 : HOUR_FORMAT_24,
7576
(_clockSource == LSE_CLOCK) ? ::LSE_CLOCK :
7677
(_clockSource == HSE_CLOCK) ? ::HSE_CLOCK : ::LSI_CLOCK
@@ -143,7 +144,7 @@ void STM32RTC::setClockSource(Source_Clock source)
143144
*/
144145
void STM32RTC::getPrediv(int8_t *predivA, int16_t *predivS)
145146
{
146-
if ((predivA != NULL) && (predivS != NULL)) {
147+
if ((predivA != nullptr) && (predivS != nullptr)) {
147148
RTC_getPrediv(predivA, predivS);
148149
}
149150
}
@@ -263,14 +264,14 @@ uint8_t STM32RTC::getMinutes(void)
263264

264265
/**
265266
* @brief get RTC hours.
266-
* @param format: optional (default: NULL)
267+
* @param format: optional (default: nullptr)
267268
* pointer to the current hour period set in the RTC: AM or PM
268269
* @retval return the current hours from the RTC.
269270
*/
270271
uint8_t STM32RTC::getHours(AM_PM *period)
271272
{
272273
syncTime();
273-
if (period != NULL) {
274+
if (period != nullptr) {
274275
*period = _hoursPeriod;
275276
}
276277
return _hours;
@@ -282,26 +283,26 @@ uint8_t STM32RTC::getHours(AM_PM *period)
282283
* @param minutes: pointer to the current minutes
283284
* @param seconds: pointer to the current seconds
284285
* @param subSeconds: pointer to the current subSeconds
285-
* @param period: optional (default: NULL)
286+
* @param period: optional (default: nullptr)
286287
* pointer to the current hour period set in the RTC: AM or PM
287288
* @retval none
288289
*/
289290
void STM32RTC::getTime(uint8_t *hours, uint8_t *minutes, uint8_t *seconds, uint32_t *subSeconds, AM_PM *period)
290291
{
291292
syncTime();
292-
if (hours != NULL) {
293+
if (hours != nullptr) {
293294
*hours = _hours;
294295
}
295-
if (minutes != NULL) {
296+
if (minutes != nullptr) {
296297
*minutes = _minutes;
297298
}
298-
if (seconds != NULL) {
299+
if (seconds != nullptr) {
299300
*seconds = _seconds;
300301
}
301-
if (subSeconds != NULL) {
302+
if (subSeconds != nullptr) {
302303
*subSeconds = _subSeconds;
303304
}
304-
if (period != NULL) {
305+
if (period != nullptr) {
305306
*period = _hoursPeriod;
306307
}
307308
}
@@ -357,16 +358,16 @@ uint8_t STM32RTC::getYear(void)
357358
void STM32RTC::getDate(uint8_t *weekDay, uint8_t *day, uint8_t *month, uint8_t *year)
358359
{
359360
syncDate();
360-
if (weekDay != NULL) {
361+
if (weekDay != nullptr) {
361362
*weekDay = _wday;
362363
}
363-
if (day != NULL) {
364+
if (day != nullptr) {
364365
*day = _day;
365366
}
366-
if (month != NULL) {
367+
if (month != nullptr) {
367368
*month = _month;
368369
}
369-
if (year != NULL) {
370+
if (year != nullptr) {
370371
*year = _year;
371372
}
372373
}
@@ -403,14 +404,14 @@ uint8_t STM32RTC::getAlarmMinutes(void)
403404

404405
/**
405406
* @brief get RTC alarm hour.
406-
* @param format: optional (default: NULL)
407+
* @param format: optional (default: nullptr)
407408
* pointer to the current hour format set in the RTC: AM or PM
408409
* @retval return the current alarm hour.
409410
*/
410411
uint8_t STM32RTC::getAlarmHours(AM_PM *period)
411412
{
412413
syncAlarmTime();
413-
if (period != NULL) {
414+
if (period != nullptr) {
414415
*period = _alarmPeriod;
415416
}
416417
return _alarmHours;
@@ -503,23 +504,7 @@ void STM32RTC::setMinutes(uint8_t minutes)
503504
/**
504505
* @brief set RTC hours.
505506
* @param hours: 0-23
506-
* @retval none
507-
*/
508-
void STM32RTC::setHours(uint8_t hours)
509-
{
510-
if (_configured) {
511-
syncTime();
512-
if (hours < 24) {
513-
_hours = hours;
514-
}
515-
RTC_SetTime(_hours, _minutes, _seconds, _subSeconds, (_hoursPeriod == AM) ? HOUR_AM : HOUR_PM);
516-
}
517-
}
518-
519-
/**
520-
* @brief set RTC hours.
521-
* @param hours: 0-23 or 0-12
522-
* @param hours format: AM or PM
507+
* @param period: hour format AM or PM (optional)
523508
* @retval none
524509
*/
525510
void STM32RTC::setHours(uint8_t hours, AM_PM period)
@@ -529,41 +514,20 @@ void STM32RTC::setHours(uint8_t hours, AM_PM period)
529514
if (hours < 24) {
530515
_hours = hours;
531516
}
532-
_hoursPeriod = period;
533-
RTC_SetTime(_hours, _minutes, _seconds, _subSeconds, (_hoursPeriod == AM) ? HOUR_AM : HOUR_PM);
534-
}
535-
}
536-
537-
/**
538-
* @brief set RTC time.
539-
* @param hours: 0-23
540-
* @param minutes: 0-59
541-
* @param seconds: 0-59
542-
* @retval none
543-
*/
544-
void STM32RTC::setTime(uint8_t hours, uint8_t minutes, uint8_t seconds)
545-
{
546-
if (_configured) {
547-
syncTime();
548-
if (seconds < 60) {
549-
_seconds = seconds;
550-
}
551-
if (minutes < 60) {
552-
_minutes = minutes;
553-
}
554-
if (hours < 24) {
555-
_hours = hours;
517+
if (_format == HOUR_12) {
518+
_hoursPeriod = period;
556519
}
557520
RTC_SetTime(_hours, _minutes, _seconds, _subSeconds, (_hoursPeriod == AM) ? HOUR_AM : HOUR_PM);
558521
}
559522
}
560523

561524
/**
562525
* @brief set RTC time.
563-
* @param hours: 0-23 or 0-12
526+
* @param hours: 0-23
564527
* @param minutes: 0-59
565528
* @param seconds: 0-59
566-
* @param hour format: AM or PM
529+
* @param subSeconds: 0-999 (optional)
530+
* @param period: hour format AM or PM (optional)
567531
* @retval none
568532
*/
569533
void STM32RTC::setTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds, AM_PM period)
@@ -582,7 +546,9 @@ void STM32RTC::setTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t
582546
if (hours < 24) {
583547
_hours = hours;
584548
}
585-
_hoursPeriod = period;
549+
if (_format == HOUR_12) {
550+
_hoursPeriod = period;
551+
}
586552
RTC_SetTime(_hours, _minutes, _seconds, _subSeconds, (_hoursPeriod == AM) ? HOUR_AM : HOUR_PM);
587553
}
588554
}
@@ -745,24 +711,10 @@ void STM32RTC::setAlarmMinutes(uint8_t minutes)
745711
}
746712
}
747713

748-
/**
749-
* @brief set RTC alarm hour.
750-
* @param hour: 0-23
751-
* @retval none
752-
*/
753-
void STM32RTC::setAlarmHours(uint8_t hours)
754-
{
755-
if (_configured) {
756-
if (hours < 24) {
757-
_alarmHours = hours;
758-
}
759-
}
760-
}
761-
762714
/**
763715
* @brief set RTC alarm hour.
764716
* @param hour: 0-23 or 0-12
765-
* @param hour format: AM or PM
717+
* @param period: hour format AM or PM (optional)
766718
* @retval none
767719
*/
768720
void STM32RTC::setAlarmHours(uint8_t hours, AM_PM period)
@@ -771,24 +723,9 @@ void STM32RTC::setAlarmHours(uint8_t hours, AM_PM period)
771723
if (hours < 24) {
772724
_alarmHours = hours;
773725
}
774-
_alarmPeriod = period;
775-
}
776-
}
777-
778-
/**
779-
* @brief set RTC alarm time.
780-
* @param hours: 0-23
781-
* @param minutes: 0-59
782-
* @param seconds: 0-59
783-
* @retval none
784-
*/
785-
void STM32RTC::setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds)
786-
{
787-
if (_configured) {
788-
setAlarmHours(hours);
789-
setAlarmMinutes(minutes);
790-
setAlarmSeconds(seconds);
791-
setAlarmSubSeconds(subSeconds);
726+
if (_format == HOUR_12) {
727+
_alarmPeriod = period;
728+
}
792729
}
793730
}
794731

@@ -797,15 +734,17 @@ void STM32RTC::setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uin
797734
* @param hours: 0-23
798735
* @param minutes: 0-59
799736
* @param seconds: 0-59
800-
* @param hour format: AM or PM
737+
* @param subSeconds: 0-999 (optional)
738+
* @param period: hour format AM or PM (optional)
801739
* @retval none
802740
*/
803-
void STM32RTC::setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds, AM_PM period)
741+
void STM32RTC::setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds, AM_PM period)
804742
{
805743
if (_configured) {
806744
setAlarmHours(hours, period);
807745
setAlarmMinutes(minutes);
808746
setAlarmSeconds(seconds);
747+
setAlarmSubSeconds(subSeconds);
809748
}
810749
}
811750

0 commit comments

Comments
 (0)