PCF85063.h

Committer:
mcm
Date:
2019-02-19
Revision:
1:161eb44e3909
Parent:
0:f539e9fc9e78
Child:
4:a5c06ac163f1

File content as of revision 1:161eb44e3909:

/**
 * @brief       PCF85063.h
 * @details     Tiny Real-Time Clock/calendar.
 *              Header file.
 *
 *
 * @return      N/A
 *
 * @author      Manuel Caballero
 * @date        19/February/2019
 * @version     19/February/2019    The ORIGIN
 * @pre         N/A.
 * @warning     N/A
 * @pre         This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). All rights reserved.
 */
#ifndef PCF85063_H
#define PCF85063_H

#include "mbed.h"


/**
    Example:
@code

@endcode
*/


/*!
 Library for the PCF85063 Tiny Real-Time Clock/calendar.
*/
class PCF85063
{
public:
    /**
    * @brief   DEFAULT ADDRESS
    */
    typedef enum {
        PCF85063_ADDRESS     =   ( 0b1010001 << 1U )                        /*!<   I2C slave address byte                       */
    } PCF85063_address_t;



    /**
      * @brief   REGISTERS ORGANIZATION
      */
    typedef enum {
        /* CONTROL AND STATUS REGISTERS  */
        PCF85063_CONTROL_1  =   0x00,                                       /*!<  Control and status register 1                 */
        PCF85063_CONTROL_2  =   0x01,                                       /*!<  Control and status register 2                 */
        PCF85063_OFFSET     =   0x02,                                       /*!<  Offset register                               */
        PCF85063_RAM_BYTE   =   0x03,                                       /*!<  RAM byte register                             */

        /* TIME AND DATE REGISTERS  */
        PCF85063_SECONDS    =   0x04,                                       /*!<  Seconds register                              */
        PCF85063_MINUTES    =   0x05,                                       /*!<  Minutes register                              */
        PCF85063_HOURS      =   0x06,                                       /*!<  Hours register                                */
        PCF85063_DAYS       =   0x07,                                       /*!<  Days register                                 */
        PCF85063_WEEKDAYS   =   0x08,                                       /*!<  Weekdays register                             */
        PCF85063_MONTHS     =   0x09,                                       /*!<  Months register                               */
        PCF85063_YEARS      =   0x0A                                        /*!<  Years register                                */
    } PCF85063_registers_organization_t;



    /**
      * @brief   Register Control_1
      */
    /* EXT_TEST <7>: EXTERNAL CLOCK TEST MODE
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_1_EXT_TEST_MASK                     =   ( 1U << 7U ),     /*!<  EXT_TEST mask                                   */
        CONTROL_1_EXT_TEST_NORMAL_MODE              =   ( 0U << 7U ),     /*!<  EXT_TEST: normal mode               [ Default ] */
        CONTROL_1_EXT_TEST_EXTERNAL_CLOCK_TEST_MODE =   ( 1U << 7U )      /*!<  EXT_TEST: external clock test mode              */
    } PCF85063_control_1_ext_test_t;



    /* STOP <5>: STOP BIT
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_1_STOP_MASK                         =   ( 1U << 5U ),     /*!<  STOP mask                                       */
        CONTROL_1_STOP_RTC_CLOCK_RUNS               =   ( 0U << 5U ),     /*!<  STOP: RTC clock runs                [ Default ] */
        CONTROL_1_STOP_RTC_CLOCK_STOPPED            =   ( 1U << 5U )      /*!<  STOP: RTC clock is stopped                      */
    } PCF85063_control_1_stop_t;



    /* SR <4>: SOFTWARE RESET
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_1_SR_MASK                           =   ( 1U << 4U ),     /*!<  SR mask                                         */
        CONTROL_1_SR_NO_SOFTWARE_RESET              =   ( 0U << 4U ),     /*!<  SR: no software reset               [ Default ] */
        CONTROL_1_SR_SOFTWARE_RESET                 =   ( 1U << 4U )      /*!<  SR: initiate software reset                     */
    } PCF85063_control_1_sr_t;



    /* CIE <2>: CORRECTION INTERRUPT ENABLE
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_1_CIE_MASK                              =   ( 1U << 2U ), /*!<  CIE mask                                                      */
        CONTROL_1_CIE_NO_CORRECTION_INTERRUPT_GENERATED =   ( 0U << 2U ), /*!<  CIE: no correction interrupt generated [ Default ]            */
        CONTROL_1_CIE_INTERRUPT_PULSES_GENERATED        =   ( 1U << 2U )  /*!<  CIE: interrupt pulses are generated at every correction cycle */
    } PCF85063_control_1_cie_t;



    /* 12_24 <1>: SOFTWARE RESET
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_1_12_24_MASK                        =   ( 1U << 1U ),     /*!<  12_24 mask                                      */
        CONTROL_1_12_24_24_HOUR_MODE                =   ( 0U << 1U ),     /*!<  12_24: 24 hour mode is selected     [ Default ] */
        CONTROL_1_12_24_12_HOUR_MODE                =   ( 1U << 1U )      /*!<  12_24: 12 hour mode is selected                 */
    } PCF85063_control_1_12_24_t;



    /* CAP_SEL <0>: INTERNAL OSCILLATOR CAPACITOR SELECTION
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_1_CAP_SEL_MASK                      =   ( 1U << 0U ),     /*!<  CAP_SEL mask                                    */
        CONTROL_1_CAP_SEL_7_PF                      =   ( 0U << 0U ),     /*!<  CAP_SEL: 7 pF                       [ Default ] */
        CONTROL_1_CAP_SEL_12_5_PF                   =   ( 1U << 0U )      /*!<  CAP_SEL: 12.5 pF                                */
    } PCF85063_control_1_cap_sel_t;



    /**
      * @brief   Register Control_2
      */
    /* MI <5>: MINUTE INTERRUPT
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_2_MI_MASK                           =   ( 1U << 5U ),     /*!<  MI mask                                         */
        CONTROL_2_MI_MINUTE_INTERRUPT_DISABLED      =   ( 0U << 5U ),     /*!<  Minute interrupt disabled           [ Default ] */
        CONTROL_2_MI_MINUTE_INTERRUPT_ENABLED       =   ( 1U << 5U )      /*!<  Minute interrupt enabled                        */
    } PCF85063_control_2_mi_t;



    /* HMI <4>: HALF MINUTE INTERRUPT
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_2_HMI_MASK                            =   ( 1U << 4U ),   /*!<  HMI mask                                        */
        CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_DISABLED  =   ( 0U << 4U ),   /*!<  Half Minute interrupt disabled      [ Default ] */
        CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_ENABLED   =   ( 1U << 4U )    /*!<  Half Minute interrupt enabled                   */
    } PCF85063_control_2_hmi_t;



    /* TF <3>: TIMER FLAG
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_2_TF_MASK                           =   ( 1U << 3U ),     /*!<  TF mask                                         */
        CONTROL_2_TF_TIMER_INTERRUPT_NOT_GENERATED  =   ( 0U << 3U ),     /*!<  No Timer interrupt generated        [ Default ] */
        CONTROL_2_TF_TIMER_INTERRUPT_GENERATED      =   ( 1U << 3U )      /*!<  Timer interrupt generated                       */
    } PCF85063_control_2_tf_t;



    /* COF <2:0>: CLKOUT CONTROL
     *    NOTE: N/A.
     */
    typedef enum {
        CONTROL_2_COF_MASK                          =   ( 0b111 << 0U ),  /*!<  COF mask                                        */
        CONTROL_2_COF_CLKOUT_32768_HZ               =   ( 0b000 << 0U ),  /*!<  CLKOUT: 32768 Hz                    [ Default ] */
        CONTROL_2_COF_CLKOUT_16384_HZ               =   ( 0b001 << 0U ),  /*!<  CLKOUT: 16384 Hz                                */
        CONTROL_2_COF_CLKOUT_8192_HZ                =   ( 0b010 << 0U ),  /*!<  CLKOUT: 8192  Hz                                */
        CONTROL_2_COF_CLKOUT_4096_HZ                =   ( 0b011 << 0U ),  /*!<  CLKOUT: 4096  Hz                                */
        CONTROL_2_COF_CLKOUT_2048_HZ                =   ( 0b100 << 0U ),  /*!<  CLKOUT: 2048  Hz                                */
        CONTROL_2_COF_CLKOUT_1024_HZ                =   ( 0b101 << 0U ),  /*!<  CLKOUT: 1024  Hz                                */
        CONTROL_2_COF_CLKOUT_1_HZ                   =   ( 0b110 << 0U ),  /*!<  CLKOUT: 1     Hz                                */
        CONTROL_2_COF_CLKOUT_LOW                    =   ( 0b111 << 0U )   /*!<  CLKOUT: LOW                                     */
    } PCF85063_control_2_cof_t;



    /**
      * @brief   Register Offset
      */
    /* MODE <7>: OFFSET MODE
     *    NOTE: N/A.
     */
    typedef enum {
        OFFSET_MODE_MASK                            =   ( 1U << 7U ),     /*!<  MODE mask                                                   */
        OFFSET_MODE_NORMAL_MODE                     =   ( 0U << 7U ),     /*!<  Normal mode: offset is made once every two hours[ Default ] */
        OFFSET_MODE_COURSE_MODE                     =   ( 1U << 7U )      /*!<  Course mode: offset is made every 4 minutes                 */
    } PCF85063_offset_mode_t;



    /**
      * @brief   Register RAM_byte
      */
    /* B <7:0>: RAM CONTENT
     *    NOTE: N/A.
     */
    typedef enum {
        RAM_BYTE_B_MASK                             =   0xFF              /*!<  RAM_byte mask                                     */
    } PCF85063_ram_byte_b_t;



    /**
      * @brief   Register Seconds
      */
    /* OS <7>: OSCILLATOR STOP
     *    NOTE: N/A.
     */
    typedef enum {
        SECONDS_OS_MASK                           =   ( 1U << 7U ),     /*!<  OS mask                                                                                         */
        SECONDS_OS_CLOCK_INTEGRITY_IS_GUARANTEED  =   ( 0U << 7U ),     /*!<  Clock integrity is guaranteed                                                                   */
        SECONDS_OS_CLOCK_INTEGRITY_NOT_GUARANTEED =   ( 1U << 7U )      /*!<  Clock integrity is not guaranteed, oscillator has stopped or has been interrupted  [ Default ]  */
    } PCF85063_seconds_os_t;



    /* SECONDS, TEN'S PLACE <6:4>: ACTUAL SECONDS, TEN'S PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        SECONDS_SECONDS_TEN_PLACE_MASK            =   ( 0b111 << 4U )   /*!<  SECONDS TEN'S PLACE mask                              */
    } PCF85063_seconds_ten_place_t;



    /* SECONDS, UNIT PLACE <3:0>: ACTUAL SECONDS, UNIT PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        SECONDS_SECONDS_UNIT_PLACE_MASK           =   ( 0b1111 << 0U )  /*!<  SECONDS UNIT PLACE mask                               */
    } PCF85063_seconds_unit_place_t;



    /**
      * @brief   Register Minutes
      */
    /* MINUTES, TEN'S PLACE <6:4>: ACTUAL MINUTES, TEN'S PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        MINUTES_MINUTES_TEN_PLACE_MASK            =   ( 0b111 << 4U )   /*!<  MINUTES TEN'S PLACE mask                              */
    } PCF85063_minutes_ten_place_t;



    /* MINUTES, UNIT PLACE <3:0>: ACTUAL MINUTES, UNIT PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        MINUTES_MINUTES_UNIT_PLACE_MASK           =   ( 0b1111 << 0U )  /*!<  MINUTES UNIT PLACE mask                               */
    } PCF85063_minutes_unit_place_t;



    /**
      * @brief   Register HOURS
      */
    /* AMPM <5>: AM/PM INDICATOR
     *    NOTE: ONLY FOR 12-HOUR MODE.
     */
    typedef enum {
        HOURS_AMPM_MASK                           =   ( 1U << 5U ),     /*!<  AMPM mask                                             */
        HOURS_AMPM_AM                             =   ( 0U << 5U ),     /*!<  AMPM: AM mode                                         */
        HOURS_AMPM_PM                             =   ( 1U << 5U )      /*!<  AMPM: PM mode                                         */
    } PCF85063_hours_ampm_t;



    /* HOURS, TEN'S PLACE <4>: ACTUAL HOURS, TEN'S PLACE
     *    NOTE: ONLY FOR 12-HOUR MODE, CODED IN BCD FORMAT.
     */
    typedef enum {
        HOURS_12_HOUR_MODE_TEN_PLACE_MASK         =   ( 1U << 4U )      /*!<  Hours TEN'S PLACE mask                                */
    } PCF85063_12_hour_mode_ten_place_t;



    /* HOURS, TEN'S PLACE <5:4>: ACTUAL HOURS, TEN'S PLACE
     *    NOTE: ONLY FOR 24-HOUR MODE, CODED IN BCD FORMAT.
     */
    typedef enum {
        HOURS_24_HOUR_MODE_TEN_PLACE_MASK         =   ( 0b11 << 4U )    /*!<  Hours TEN'S PLACE mask                                */
    } PCF85063_24_hour_mode_ten_place_t;



    /* HOURS, UNIT PLACE <3:0>: ACTUAL HOURS, UNIT PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        HOURS_HOURS_UNIT_PLACE_MASK               =   ( 0b1111 << 0U )  /*!<  HOURS UNIT PLACE mask                                 */
    } PCF85063_hours_unit_place_t;



    /**
      * @brief   Register Days
      */
    /* DAYS, TEN'S PLACE <5:4>: ACTUAL DAYS, TEN'S PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        DAYS_DAYS_TEN_PLACE_MASK                  =   ( 0b11 << 4U )    /*!<  DAYS TEN'S PLACE mask                                 */
    } PCF85063_days_ten_place_t;



    /* DAYS, UNIT PLACE <3:0>: ACTUAL DAYS, UNIT PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        DAYS_DAYS_UNIT_PLACE_MASK                 =   ( 0b1111 << 0U )  /*!<  DAYS UNIT PLACE mask                                  */
    } PCF85063_days_unit_place_t;



    /**
      * @brief   Register Weekdays
      */
    /* WEEKDAYS <2:0>: ACTUAL WEEKDAY
     *    NOTE: N/A.
     */
    typedef enum {
        WEEKDAYS_WEEKDAYS_MASK                    =   ( 0b111 << 0U ),  /*!<  WEEKDAYS mask                                          */
        WEEKDAYS_WEEKDAYS_SUNDAY                  =   ( 0b000 << 0U ),  /*!<  WEEKDAYS Sunday                                        */
        WEEKDAYS_WEEKDAYS_MONDAY                  =   ( 0b001 << 0U ),  /*!<  WEEKDAYS Monday                                        */
        WEEKDAYS_WEEKDAYS_TUESDAY                 =   ( 0b010 << 0U ),  /*!<  WEEKDAYS Tuesday                                       */
        WEEKDAYS_WEEKDAYS_WEDNESDAY               =   ( 0b011 << 0U ),  /*!<  WEEKDAYS Wednesday                                     */
        WEEKDAYS_WEEKDAYS_THURSDAY                =   ( 0b100 << 0U ),  /*!<  WEEKDAYS Thursday                                      */
        WEEKDAYS_WEEKDAYS_FRIDAY                  =   ( 0b101 << 0U ),  /*!<  WEEKDAYS Friday                                        */
        WEEKDAYS_WEEKDAYS_SATURDAY                =   ( 0b111 << 0U )   /*!<  WEEKDAYS Saturday                          [ Default ] */
    } PCF85063_weekdays_weekdays_t;



    /**
      * @brief   Register Months
      */
    /* MONTHS <4:0>: ACTUAL MONTH
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        MONTHS_MONTHS_MASK                        =   ( 0b11111 << 0U ),  /*!<  MONTHS mask                                            */
        MONTHS_MONTHS_JANUARY                     =   ( 0b00001 << 0U ),  /*!<  MONTHS January                             [ Default ] */
        MONTHS_MONTHS_FEBRUARY                    =   ( 0b00010 << 0U ),  /*!<  MONTHS February                                        */
        MONTHS_MONTHS_MARCH                       =   ( 0b00011 << 0U ),  /*!<  MONTHS March                                           */
        MONTHS_MONTHS_APRIL                       =   ( 0b00100 << 0U ),  /*!<  MONTHS April                                           */
        MONTHS_MONTHS_MAY                         =   ( 0b00101 << 0U ),  /*!<  MONTHS May                                             */
        MONTHS_MONTHS_JUNE                        =   ( 0b00110 << 0U ),  /*!<  MONTHS June                                            */
        MONTHS_MONTHS_JULY                        =   ( 0b00111 << 0U ),  /*!<  MONTHS July                                            */
        MONTHS_MONTHS_AUGUST                      =   ( 0b01000 << 0U ),  /*!<  MONTHS August                                          */
        MONTHS_MONTHS_SEPTEMBER                   =   ( 0b01001 << 0U ),  /*!<  MONTHS September                                       */
        MONTHS_MONTHS_OCTOBER                     =   ( 0b10000 << 0U ),  /*!<  MONTHS October                                         */
        MONTHS_MONTHS_NOVEMBER                    =   ( 0b10001 << 0U ),  /*!<  MONTHS November                                        */
        MONTHS_MONTHS_DECEMBER                    =   ( 0b10010 << 0U )   /*!<  MONTHS December                                        */
    } PCF85063_months_months_t;



    /**
      * @brief   Register Years
      */
    /* YEARS, TEN'S PLACE <7:4>: ACTUAL YEARS, TEN'S PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        YEARS_YEARS_TEN_PLACE_MASK                =   ( 0b1111 << 4U )   /*!<  YEARS TEN'S PLACE mask                                 */
    } PCF85063_years_ten_place_t;



    /* YEARS, UNIT PLACE <3:0>: ACTUAL YEARS, UNIT PLACE
     *    NOTE: CODED IN BCD FORMAT.
     */
    typedef enum {
        YEARS_YEARS_UNIT_PLACE_MASK               =   ( 0b1111 << 0U )   /*!<  YEARS UNIT PLACE mask                                  */
    } PCF85063_years_unit_place_t;





#ifndef PCF85063_VECTOR_STRUCT_H
#define PCF85063_VECTOR_STRUCT_H
    typedef struct {
        PCF85063_control_1_12_24_t    Time12H_24HMode;                    /*!<  Time mode: 12-hour or 24-hour mode                    */
        PCF85063_hours_ampm_t         TimeAM_PM_Mode;                     /*!<  AM/PM mode ( only for 12-hour mode )                  */

        uint32_t                      BCDtime;                            /*!<  Time ( HHMMSS ) in BCD format                         */
        uint8_t                       BCDday;                             /*!<  Day number in BCD format                              */
        PCF85063_weekdays_weekdays_t  weekday;                            /*!<  Weekday                                               */
        PCF85063_months_months_t      BCDmonth;                           /*!<  Month  in BCD format                                  */
        uint8_t                       BCDyear;                            /*!<  Year in BCD format                                    */

        int8_t                        ramByte;                            /*!<  RAM byte                                              */
        PCF85063_seconds_os_t         os;                                 /*!<  Oscillator flag                                       */
    } PCF85063_data_t;
#endif


    /**
      * @brief   INTERNAL CONSTANTS
      */
    typedef enum {
        PCF85063_SUCCESS    =       0,
        PCF85063_FAILURE    =       1,
        I2C_SUCCESS         =       0                                     /*!<   I2C communication was fine        */
    } PCF85063_status_t;




    /** Create an PCF85063 object connected to the specified I2C pins.
      *
      * @param sda     I2C data pin
      * @param scl     I2C clock pin
      * @param addr    I2C slave address
      * @param freq    I2C frequency
      */
    PCF85063 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );

    /** Delete PCF85063 object.
     */
    ~PCF85063();

    /** It sets the external clock test mode.
    */
    PCF85063_status_t  PCF85063_SetTestMode                       ( PCF85063_control_1_ext_test_t myEXT_TEST                      );

    /** It sets the RTC clock mode.
      */
    PCF85063_status_t  PCF85063_SetRTCMode                        ( PCF85063_control_1_stop_t mySTOP                              );

    /** It performs a software reset.
      */
    PCF85063_status_t  PCF85063_SoftwareReset                     ( void                                                          );

    /** It sets the correction interrupt mode.
      */
    PCF85063_status_t  PCF85063_SetCorrectionInterruptMode        ( PCF85063_control_1_cie_t myCIE                                );

    /** It sets 12 or 24 hour mode.
      */
    PCF85063_status_t  PCF85063_Set12_24_HourMode                 ( PCF85063_data_t my12_24                                       );

    /** It sets the internal oscillator capacitor.
      */
    PCF85063_status_t  PCF85063_SetInternalOscillatorCapacitor    ( PCF85063_control_1_cap_sel_t myCAP_SEL                        );

    /** It enables/disables minute/half minute interrupt.
      */
    PCF85063_status_t  PCF85063_SetMinuteInterrupts               ( PCF85063_control_2_mi_t myMI, PCF85063_control_2_hmi_t myHMI  );

    /** It gets the status of the timer flag.
      */
    PCF85063_status_t  PCF85063_GetTimerFlag                      ( PCF85063_control_2_tf_t* myTF                                 );

    /** It resets the status of the timer flag.
      */
    PCF85063_status_t  PCF85063_ClearTimerFlag                    ( void                                                          );

    /** It sets the clock output frequency.
      */
    PCF85063_status_t  PCF85063_SetClockOutputFrequency           ( PCF85063_control_2_cof_t myCOF                                );

    /** It sets the offset.
      */
    PCF85063_status_t  PCF85063_SetOffset                         ( PCF85063_offset_mode_t myMODE, int8_t myOFFSET                );

    /** It writes into the RAM byte register.
      */
    PCF85063_status_t  PCF85063_WriteByteRAM                      ( PCF85063_data_t myData                                        );

    /** It reads the RAM byte register.
      */
    PCF85063_status_t  PCF85063_ReadByteRAM                       ( PCF85063_data_t* myData                                       );

    /** It checks oscillator clock integrity flag.
      */
    PCF85063_status_t  PCF85063_CheckOscillatorClockIntegrityFlag ( PCF85063_data_t* myOS                                         );

    /** It clears oscillator clock integrity flag.
      */
    PCF85063_status_t  PCF85063_ClearOscillatorClockIntegrityFlag ( void                                                          );

    /** It sets the AM/PM indicator ( only for 12-hour mode ).
      */
    PCF85063_status_t  PCF85063_SetAM_PM_Indicator                ( PCF85063_data_t myAM_PM_Indicator                             );

    /** It gets the AM/PM indicator ( only for 12-hour mode ).
      */
    PCF85063_status_t  PCF85063_GetAM_PM_Indicator                ( PCF85063_data_t* myAM_PM_Indicator                            );

    /** It gets the day ( BCD format ).
      */
    PCF85063_status_t  PCF85063_GetDay                            ( PCF85063_data_t* myActualDay                                  );

    /** It sets the day ( BCD format ).
      */
    PCF85063_status_t  PCF85063_SetDay                            ( PCF85063_data_t myNewDay                                      );

    /** It gets the weekday.
      */
    PCF85063_status_t  PCF85063_GetWeekday                        ( PCF85063_data_t* myActualWeekday                              );

    /** It sets the weekday.
      */
    PCF85063_status_t  PCF85063_SetWeekday                        ( PCF85063_data_t myNewWeekday                                  );

    /** It gets the month ( BCD format ).
      */
    PCF85063_status_t  PCF85063_GetMonth                          ( PCF85063_data_t* myActualMonth                                );

    /** It sets the month ( BCD format ).
      */
    PCF85063_status_t  PCF85063_SetMonth                          ( PCF85063_data_t myNewMonth                                    );

    /** It gets the time ( BCD format ).
      */
    PCF85063_status_t  PCF85063_GetTime                           ( PCF85063_data_t* myActualTime                                 );

    /** It sets the time ( BCD format ).
      */
    PCF85063_status_t  PCF85063_SetTime                           ( PCF85063_data_t myNewTime                                     );

    /** It gets the year ( BCD format ).
      */
    PCF85063_status_t  PCF85063_GetYear                           ( PCF85063_data_t* myActualYear                                 );

    /** It sets the year ( BCD format ).
      */
    PCF85063_status_t  PCF85063_SetYear                           ( PCF85063_data_t myNewYear                                     );




private:
    I2C      _i2c;
    uint32_t _PCF85063_Addr;
};

#endif