222 lines
6.4 KiB
C
222 lines
6.4 KiB
C
/*
|
|
* Copyright (c) 2023-2024, Erich Styger
|
|
*
|
|
* Driver for the NXP PCF85063A I2C RTC.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef MCUPCF85063A_H_
|
|
#define MCUPCF85063A_H_
|
|
|
|
#include "McuPCF85063A_config.h"
|
|
#include "McuShell.h"
|
|
#include "McuTimeDate.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*!
|
|
* \brief Shell command line parser.
|
|
* \param cmd Shell command string
|
|
* \param handled Set to true if command was handled, untouched otherwise
|
|
* \param io Standard I/O handler to be used
|
|
* \return Error code, ERR_OK if no failure
|
|
*/
|
|
uint8_t McuPCF85063A_ParseCommand(const unsigned char *cmd, bool *handled, const McuShell_StdIOType *io);
|
|
|
|
/*!
|
|
* \brief Get the RTC time.
|
|
* \param time Pointer store the time information
|
|
* \return Error code, ERR_OK if no failure
|
|
*/
|
|
uint8_t McuPCF85063A_GetTime(TIMEREC *time);
|
|
|
|
/*!
|
|
* \brief Get the RTC date.
|
|
* \param date Pointer to store the date information
|
|
* \return Error code, ERR_OK if no failure
|
|
*/
|
|
uint8_t McuPCF85063A_GetDate(DATEREC *date);
|
|
|
|
/*!
|
|
* \brief Set the RTC time.
|
|
* \param time Pointer to time information
|
|
* \return Error code, ERR_OK if no failure
|
|
*/
|
|
uint8_t McuPCF85063A_SetTime(TIMEREC *time);
|
|
|
|
/*!
|
|
* \brief Set the RTC date.
|
|
* \param date Pointer to date information
|
|
* \return Error code, ERR_OK if no failure
|
|
*/
|
|
uint8_t McuPCF85063A_SetDate(DATEREC *date);
|
|
|
|
/*!
|
|
* \brief Get the current time and date from the RTC
|
|
* \param time Pointer where to store the time
|
|
* \param date Pointer where to store the date
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_GetTimeDate(TIMEREC *time, DATEREC *date);
|
|
|
|
/*!
|
|
* \brief Set the RTC time information
|
|
* \param Hour The hour, in the range of 0-23
|
|
* \param Min The minute, in the range of 0-59
|
|
* \param Sec The second, in the range of 0-59
|
|
* \praam Sec100 The 0.01 sec part, in the range of 0-99
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_SetTimeInfo(uint8_t Hour, uint8_t Min, uint8_t Sec, uint8_t Sec100);
|
|
|
|
/*!
|
|
* \brief set the RTC date information
|
|
* \param Year The year, for example 2024
|
|
* \param Month The month, for example 11
|
|
* \param Day The day of the month, in the range of 0-31, depending of the month
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_SetDateInfo(uint16_t Year, uint8_t Month, uint8_t Day);
|
|
|
|
/*! \brief different RTC clock output frequencies */
|
|
typedef enum McuPCF85063A_COF_Frequency_e {
|
|
McuPCF85063A_COF_FREQ_32768 = 0,
|
|
McuPCF85063A_COF_FREQ_16384 = 1,
|
|
McuPCF85063A_COF_FREQ_8192 = 2,
|
|
McuPCF85063A_COF_FREQ_4096 = 3,
|
|
McuPCF85063A_COF_FREQ_2048 = 4,
|
|
McuPCF85063A_COF_FREQ_1024 = 5,
|
|
McuPCF85063A_COF_FREQ_1 = 6,
|
|
McuPCF85063A_COF_FREQ_OFF = 7
|
|
} McuPCF85063A_COF_Frequency_e;
|
|
|
|
/*!
|
|
* \brief Configure a new clock output frequency
|
|
* \param Frequency Frequency to use
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteClockOutputFrequency(McuPCF85063A_COF_Frequency_e frequency);
|
|
|
|
/*!
|
|
* \brief Read the alarm second time value
|
|
* \param second Pointer to store the value
|
|
* \param enabled Returns if the alarm is enabled or not.
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_ReadAlarmSecond(uint8_t *second, bool *enabled);
|
|
|
|
/*!
|
|
* \brief Write the Alarm second time value
|
|
* \param second Second time alarm value
|
|
* \param enabled true to enable the alarm, false otherwise
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteAlarmSecond(uint8_t second, bool enable);
|
|
|
|
/*!
|
|
* \brief Read the alarm minute value
|
|
* \param minute Where to store the minute value
|
|
* \param enabled Returns if the alarm is enabled or not.
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_ReadAlarmMinute(uint8_t *minute, bool *enabled);
|
|
|
|
/*!
|
|
* \brief Write the alarm minute value
|
|
* \param minute Minute value to write
|
|
* \param enable If the alarm has to be enabled or not
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteAlarmMinute(uint8_t minute, bool enable);
|
|
|
|
/*!
|
|
* \brief Read the alarm hour value
|
|
* \param hour Where to store the alarm hour value
|
|
* \param enabled Returns if the alarm is enabled or not.
|
|
* \param is24h Returns true if the hour format is 24 hours, false otherwise
|
|
* \param isAM Returns true if the hour is an AM value, false otherwise
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_ReadAlarmHour(uint8_t *hour, bool *enabled, bool *is24h, bool *isAM);
|
|
|
|
/*!
|
|
* \brief Write the alarm hour value
|
|
* \param hour Hour value
|
|
* \param enable If the alarm has to be enabled or not
|
|
* \param is24h true if hour value is for 24h format, false otherwise
|
|
* \param isAM true if hour value is AM, false otherwise
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteAlarmHour(uint8_t hour, bool enable, bool is24h, bool isAM);
|
|
|
|
/*!
|
|
* \brief Read the alarm day
|
|
* \param day Used to store the alarm day value
|
|
* \param enabled Returns if the alarm is enabled or not.
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_ReadAlarmDay(uint8_t *day, bool *enabled);
|
|
|
|
/*!
|
|
* \brief Write the alarm day value
|
|
* \param day Day value for the alarm
|
|
* \param enable If the alarm has to be enabled or not
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteAlarmDay(uint8_t day, bool enable);
|
|
|
|
/*!
|
|
* \brief Read the alarm week day
|
|
* \param weekDay Used to store the day
|
|
* \param enabled Returns if the alarm is enabled or not.
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_ReadAlarmWeekDay(uint8_t *weekDay, bool *enabled);
|
|
|
|
/*!
|
|
* \brief Write the alarm week day
|
|
* \param weekDay The day of week (0-6)
|
|
* \param enable If alarm is enabled
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteAlarmWeekDay(uint8_t weekDay, bool enable);
|
|
|
|
/*!
|
|
* \brief Perform a software reset
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteSoftwareReset(void);
|
|
|
|
/*!
|
|
* \brief Write the alarm interrupt flag setting
|
|
* \param enable Use true to enable it, false otherwise
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteAlarmInterrupt(bool enable);
|
|
|
|
/*!
|
|
* \brief Reset the alarm interrupt flag
|
|
* \return Error code, ERR_OK if no failure.
|
|
*/
|
|
uint8_t McuPCF85063A_WriteResetAlarmInterrupt(void);
|
|
|
|
|
|
/*!
|
|
* \brief Driver de-initialization.
|
|
*/
|
|
void McuPCF85063A_Deinit(void);
|
|
|
|
/*!
|
|
* \brief Driver initialization.
|
|
*/
|
|
void McuPCF85063A_Init(void);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* MCUPCF85063A_H_ */
|