Tiny Real-Time Clock/calendar

Committer:
mcm
Date:
Fri Apr 12 14:08:54 2019 +0000
Revision:
4:a5c06ac163f1
Parent:
3:c3635fe3ca6f
The driver was completed and tested (using a NUCLEO-L152RE board), it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 2:9bf595cade4b 1 /**
mcm 2:9bf595cade4b 2 * @brief PCF85063.cpp
mcm 2:9bf595cade4b 3 * @details Tiny Real-Time Clock/calendar.
mcm 2:9bf595cade4b 4 * Function file.
mcm 2:9bf595cade4b 5 *
mcm 2:9bf595cade4b 6 *
mcm 2:9bf595cade4b 7 * @return N/A
mcm 2:9bf595cade4b 8 *
mcm 2:9bf595cade4b 9 * @author Manuel Caballero
mcm 2:9bf595cade4b 10 * @date 19/February/2019
mcm 2:9bf595cade4b 11 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 12 * @pre N/A.
mcm 2:9bf595cade4b 13 * @warning N/A
mcm 2:9bf595cade4b 14 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). All rights reserved.
mcm 2:9bf595cade4b 15 */
mcm 2:9bf595cade4b 16
mcm 2:9bf595cade4b 17 #include "PCF85063.h"
mcm 2:9bf595cade4b 18
mcm 2:9bf595cade4b 19
mcm 3:c3635fe3ca6f 20 PCF85063::PCF85063 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq )
mcm 3:c3635fe3ca6f 21 : _i2c ( sda, scl )
mcm 3:c3635fe3ca6f 22 , _PCF85063_Addr ( addr )
mcm 3:c3635fe3ca6f 23 {
mcm 3:c3635fe3ca6f 24 _i2c.frequency( freq );
mcm 3:c3635fe3ca6f 25 }
mcm 3:c3635fe3ca6f 26
mcm 3:c3635fe3ca6f 27
mcm 3:c3635fe3ca6f 28 PCF85063::~PCF85063()
mcm 3:c3635fe3ca6f 29 {
mcm 3:c3635fe3ca6f 30 }
mcm 3:c3635fe3ca6f 31
mcm 3:c3635fe3ca6f 32
mcm 3:c3635fe3ca6f 33
mcm 2:9bf595cade4b 34 /**
mcm 2:9bf595cade4b 35 * @brief PCF85063_SetTestMode ( PCF85063_control_1_ext_test_t )
mcm 2:9bf595cade4b 36 *
mcm 2:9bf595cade4b 37 * @details It sets the external clock test mod.
mcm 2:9bf595cade4b 38 *
mcm 2:9bf595cade4b 39 * @param[in] myEXT_TEST: External clock test mode.
mcm 2:9bf595cade4b 40 *
mcm 2:9bf595cade4b 41 * @param[out] N/A.
mcm 2:9bf595cade4b 42 *
mcm 2:9bf595cade4b 43 *
mcm 2:9bf595cade4b 44 * @return Status of PCF85063_SetTestMode.
mcm 2:9bf595cade4b 45 *
mcm 2:9bf595cade4b 46 *
mcm 2:9bf595cade4b 47 * @author Manuel Caballero
mcm 2:9bf595cade4b 48 * @date 19/February/2019
mcm 2:9bf595cade4b 49 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 50 * @pre N/A
mcm 2:9bf595cade4b 51 * @warning N/A.
mcm 2:9bf595cade4b 52 */
mcm 2:9bf595cade4b 53 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetTestMode ( PCF85063_control_1_ext_test_t myEXT_TEST )
mcm 2:9bf595cade4b 54 {
mcm 2:9bf595cade4b 55 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 56 uint32_t aux;
mcm 2:9bf595cade4b 57
mcm 2:9bf595cade4b 58 /* Read the register */
mcm 2:9bf595cade4b 59 cmd[0] = PCF85063_CONTROL_1;
mcm 2:9bf595cade4b 60 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 61 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 62
mcm 2:9bf595cade4b 63 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 64 cmd[1] = ( ( cmd[1] & ~CONTROL_1_EXT_TEST_MASK ) | myEXT_TEST );
mcm 2:9bf595cade4b 65 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 66
mcm 2:9bf595cade4b 67
mcm 2:9bf595cade4b 68
mcm 2:9bf595cade4b 69 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 70 {
mcm 2:9bf595cade4b 71 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 72 }
mcm 2:9bf595cade4b 73 else
mcm 2:9bf595cade4b 74 {
mcm 2:9bf595cade4b 75 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 76 }
mcm 2:9bf595cade4b 77 }
mcm 2:9bf595cade4b 78
mcm 2:9bf595cade4b 79
mcm 2:9bf595cade4b 80
mcm 2:9bf595cade4b 81 /**
mcm 2:9bf595cade4b 82 * @brief PCF85063_SetRTCMode ( PCF85063_control_1_stop_t )
mcm 2:9bf595cade4b 83 *
mcm 2:9bf595cade4b 84 * @details It sets the RTC clock mode.
mcm 2:9bf595cade4b 85 *
mcm 2:9bf595cade4b 86 * @param[in] mySTOP: External clock test mode.
mcm 2:9bf595cade4b 87 *
mcm 2:9bf595cade4b 88 * @param[out] N/A.
mcm 2:9bf595cade4b 89 *
mcm 2:9bf595cade4b 90 *
mcm 2:9bf595cade4b 91 * @return Status of PCF85063_SetRTCMode.
mcm 2:9bf595cade4b 92 *
mcm 2:9bf595cade4b 93 *
mcm 2:9bf595cade4b 94 * @author Manuel Caballero
mcm 2:9bf595cade4b 95 * @date 19/February/2019
mcm 2:9bf595cade4b 96 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 97 * @pre N/A
mcm 2:9bf595cade4b 98 * @warning N/A.
mcm 2:9bf595cade4b 99 */
mcm 2:9bf595cade4b 100 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetRTCMode ( PCF85063_control_1_stop_t mySTOP )
mcm 2:9bf595cade4b 101 {
mcm 2:9bf595cade4b 102 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 103 uint32_t aux;
mcm 2:9bf595cade4b 104
mcm 2:9bf595cade4b 105 /* Read the register */
mcm 2:9bf595cade4b 106 cmd[0] = PCF85063_CONTROL_1;
mcm 2:9bf595cade4b 107 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 108 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 109
mcm 2:9bf595cade4b 110 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 111 cmd[1] = ( ( cmd[1] & ~CONTROL_1_STOP_MASK ) | mySTOP );
mcm 2:9bf595cade4b 112 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 113
mcm 2:9bf595cade4b 114
mcm 2:9bf595cade4b 115
mcm 2:9bf595cade4b 116 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 117 {
mcm 2:9bf595cade4b 118 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 119 }
mcm 2:9bf595cade4b 120 else
mcm 2:9bf595cade4b 121 {
mcm 2:9bf595cade4b 122 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 123 }
mcm 2:9bf595cade4b 124 }
mcm 2:9bf595cade4b 125
mcm 2:9bf595cade4b 126
mcm 2:9bf595cade4b 127
mcm 2:9bf595cade4b 128 /**
mcm 2:9bf595cade4b 129 * @brief PCF85063_SoftwareReset ( void )
mcm 2:9bf595cade4b 130 *
mcm 2:9bf595cade4b 131 * @details It performs a software reset.
mcm 2:9bf595cade4b 132 *
mcm 2:9bf595cade4b 133 * @param[in] N/A.
mcm 2:9bf595cade4b 134 *
mcm 2:9bf595cade4b 135 * @param[out] N/A.
mcm 2:9bf595cade4b 136 *
mcm 2:9bf595cade4b 137 *
mcm 2:9bf595cade4b 138 * @return Status of PCF85063_SoftwareReset.
mcm 2:9bf595cade4b 139 *
mcm 2:9bf595cade4b 140 *
mcm 2:9bf595cade4b 141 * @author Manuel Caballero
mcm 2:9bf595cade4b 142 * @date 19/February/2019
mcm 2:9bf595cade4b 143 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 144 * @pre For a software reset, 01011000 (58h) must be sent to register Control_1. Datasheet p6,
mcm 2:9bf595cade4b 145 * Table 6. Control_1 - control and status register 1 (address 00h) bit description.
mcm 2:9bf595cade4b 146 *
mcm 2:9bf595cade4b 147 * The PCF85063TP resets to:
mcm 2:9bf595cade4b 148 * -Time — 00:00:00
mcm 2:9bf595cade4b 149 * -Date — 20000101
mcm 2:9bf595cade4b 150 * -Weekday — Saturday
mcm 2:9bf595cade4b 151 * @warning N/A.
mcm 2:9bf595cade4b 152 */
mcm 2:9bf595cade4b 153 PCF85063::PCF85063_status_t PCF85063::PCF85063_SoftwareReset ( void )
mcm 2:9bf595cade4b 154 {
mcm 2:9bf595cade4b 155 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 156 uint32_t aux;
mcm 2:9bf595cade4b 157
mcm 2:9bf595cade4b 158 /* Update the register */
mcm 2:9bf595cade4b 159 cmd[0] = PCF85063_CONTROL_1;
mcm 2:9bf595cade4b 160 cmd[1] = 0x58;
mcm 2:9bf595cade4b 161 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 162
mcm 2:9bf595cade4b 163
mcm 2:9bf595cade4b 164
mcm 2:9bf595cade4b 165 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 166 {
mcm 2:9bf595cade4b 167 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 168 }
mcm 2:9bf595cade4b 169 else
mcm 2:9bf595cade4b 170 {
mcm 2:9bf595cade4b 171 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 172 }
mcm 2:9bf595cade4b 173 }
mcm 2:9bf595cade4b 174
mcm 2:9bf595cade4b 175
mcm 2:9bf595cade4b 176
mcm 2:9bf595cade4b 177 /**
mcm 2:9bf595cade4b 178 * @brief PCF85063_SetCorrectionInterruptMode ( PCF85063_control_1_cie_t )
mcm 2:9bf595cade4b 179 *
mcm 2:9bf595cade4b 180 * @details It sets the correction interrupt mode.
mcm 2:9bf595cade4b 181 *
mcm 2:9bf595cade4b 182 * @param[in] myCIE: Correction interrupt enable.
mcm 2:9bf595cade4b 183 *
mcm 2:9bf595cade4b 184 * @param[out] N/A.
mcm 2:9bf595cade4b 185 *
mcm 2:9bf595cade4b 186 *
mcm 2:9bf595cade4b 187 * @return Status of PCF85063_SetCorrectionInterruptMode.
mcm 2:9bf595cade4b 188 *
mcm 2:9bf595cade4b 189 *
mcm 2:9bf595cade4b 190 * @author Manuel Caballero
mcm 2:9bf595cade4b 191 * @date 19/February/2019
mcm 2:9bf595cade4b 192 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 193 * @pre N/A
mcm 2:9bf595cade4b 194 * @warning N/A.
mcm 2:9bf595cade4b 195 */
mcm 2:9bf595cade4b 196 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetCorrectionInterruptMode ( PCF85063_control_1_cie_t myCIE )
mcm 2:9bf595cade4b 197 {
mcm 2:9bf595cade4b 198 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 199 uint32_t aux;
mcm 2:9bf595cade4b 200
mcm 2:9bf595cade4b 201 /* Read the register */
mcm 2:9bf595cade4b 202 cmd[0] = PCF85063_CONTROL_1;
mcm 2:9bf595cade4b 203 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 204 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 205
mcm 2:9bf595cade4b 206 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 207 cmd[1] = ( ( cmd[1] & ~CONTROL_1_CIE_MASK ) | myCIE );
mcm 2:9bf595cade4b 208 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 209
mcm 2:9bf595cade4b 210
mcm 2:9bf595cade4b 211
mcm 2:9bf595cade4b 212 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 213 {
mcm 2:9bf595cade4b 214 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 215 }
mcm 2:9bf595cade4b 216 else
mcm 2:9bf595cade4b 217 {
mcm 2:9bf595cade4b 218 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 219 }
mcm 2:9bf595cade4b 220 }
mcm 2:9bf595cade4b 221
mcm 2:9bf595cade4b 222
mcm 2:9bf595cade4b 223
mcm 2:9bf595cade4b 224 /**
mcm 2:9bf595cade4b 225 * @brief PCF85063_Set12_24_HourMode ( PCF85063_data_t )
mcm 2:9bf595cade4b 226 *
mcm 2:9bf595cade4b 227 * @details It sets 12 or 24 hour mode.
mcm 2:9bf595cade4b 228 *
mcm 2:9bf595cade4b 229 * @param[in] my12_24: 12 or 24 hour mode.
mcm 2:9bf595cade4b 230 *
mcm 2:9bf595cade4b 231 * @param[out] N/A.
mcm 2:9bf595cade4b 232 *
mcm 2:9bf595cade4b 233 *
mcm 2:9bf595cade4b 234 * @return Status of PCF85063_Set12_24_HourMode.
mcm 2:9bf595cade4b 235 *
mcm 2:9bf595cade4b 236 *
mcm 2:9bf595cade4b 237 * @author Manuel Caballero
mcm 2:9bf595cade4b 238 * @date 19/February/2019
mcm 2:9bf595cade4b 239 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 240 * @pre N/A
mcm 2:9bf595cade4b 241 * @warning N/A.
mcm 2:9bf595cade4b 242 */
mcm 2:9bf595cade4b 243 PCF85063::PCF85063_status_t PCF85063::PCF85063_Set12_24_HourMode ( PCF85063_data_t my12_24 )
mcm 2:9bf595cade4b 244 {
mcm 2:9bf595cade4b 245 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 246 uint32_t aux;
mcm 2:9bf595cade4b 247
mcm 2:9bf595cade4b 248 /* Read the register */
mcm 2:9bf595cade4b 249 cmd[0] = PCF85063_CONTROL_1;
mcm 2:9bf595cade4b 250 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 251 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 252
mcm 2:9bf595cade4b 253 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 254 cmd[1] = ( ( cmd[1] & ~CONTROL_1_12_24_MASK ) | my12_24.Time12H_24HMode );
mcm 2:9bf595cade4b 255 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 256
mcm 2:9bf595cade4b 257
mcm 2:9bf595cade4b 258
mcm 2:9bf595cade4b 259 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 260 {
mcm 2:9bf595cade4b 261 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 262 }
mcm 2:9bf595cade4b 263 else
mcm 2:9bf595cade4b 264 {
mcm 2:9bf595cade4b 265 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 266 }
mcm 2:9bf595cade4b 267 }
mcm 2:9bf595cade4b 268
mcm 2:9bf595cade4b 269
mcm 2:9bf595cade4b 270
mcm 2:9bf595cade4b 271 /**
mcm 2:9bf595cade4b 272 * @brief PCF85063_SetInternalOscillatorCapacitor ( PCF85063_control_1_cap_sel_t )
mcm 2:9bf595cade4b 273 *
mcm 2:9bf595cade4b 274 * @details It sets the internal oscillator capacitor.
mcm 2:9bf595cade4b 275 *
mcm 2:9bf595cade4b 276 * @param[in] myCAP_SEL: Internal oscillator capacitor selection.
mcm 2:9bf595cade4b 277 *
mcm 2:9bf595cade4b 278 * @param[out] N/A.
mcm 2:9bf595cade4b 279 *
mcm 2:9bf595cade4b 280 *
mcm 2:9bf595cade4b 281 * @return Status of PCF85063_SetInternalOscillatorCapacitor.
mcm 2:9bf595cade4b 282 *
mcm 2:9bf595cade4b 283 *
mcm 2:9bf595cade4b 284 * @author Manuel Caballero
mcm 2:9bf595cade4b 285 * @date 19/February/2019
mcm 2:9bf595cade4b 286 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 287 * @pre N/A
mcm 2:9bf595cade4b 288 * @warning N/A.
mcm 2:9bf595cade4b 289 */
mcm 2:9bf595cade4b 290 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetInternalOscillatorCapacitor ( PCF85063_control_1_cap_sel_t myCAP_SEL )
mcm 2:9bf595cade4b 291 {
mcm 2:9bf595cade4b 292 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 293 uint32_t aux;
mcm 2:9bf595cade4b 294
mcm 2:9bf595cade4b 295 /* Read the register */
mcm 2:9bf595cade4b 296 cmd[0] = PCF85063_CONTROL_1;
mcm 2:9bf595cade4b 297 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 298 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 299
mcm 2:9bf595cade4b 300 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 301 cmd[1] = ( ( cmd[1] & ~CONTROL_1_CAP_SEL_MASK ) | myCAP_SEL );
mcm 2:9bf595cade4b 302 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 303
mcm 2:9bf595cade4b 304
mcm 2:9bf595cade4b 305
mcm 2:9bf595cade4b 306 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 307 {
mcm 2:9bf595cade4b 308 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 309 }
mcm 2:9bf595cade4b 310 else
mcm 2:9bf595cade4b 311 {
mcm 2:9bf595cade4b 312 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 313 }
mcm 2:9bf595cade4b 314 }
mcm 2:9bf595cade4b 315
mcm 2:9bf595cade4b 316
mcm 2:9bf595cade4b 317
mcm 2:9bf595cade4b 318 /**
mcm 2:9bf595cade4b 319 * @brief PCF85063_SetMinuteInterrupts ( PCF85063_control_2_mi_t , PCF85063_control_2_hmi_t )
mcm 2:9bf595cade4b 320 *
mcm 2:9bf595cade4b 321 * @details It enables/disables minute/half minute interrupt.
mcm 2:9bf595cade4b 322 *
mcm 2:9bf595cade4b 323 * @param[in] myMI: Minute interrupt.
mcm 2:9bf595cade4b 324 * @param[in] myHMI: Half minute interrupt.
mcm 2:9bf595cade4b 325 *
mcm 2:9bf595cade4b 326 * @param[out] N/A.
mcm 2:9bf595cade4b 327 *
mcm 2:9bf595cade4b 328 *
mcm 2:9bf595cade4b 329 * @return Status of PCF85063_SetMinuteInterrupts.
mcm 2:9bf595cade4b 330 *
mcm 2:9bf595cade4b 331 *
mcm 2:9bf595cade4b 332 * @author Manuel Caballero
mcm 2:9bf595cade4b 333 * @date 19/February/2019
mcm 2:9bf595cade4b 334 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 335 * @pre N/A
mcm 2:9bf595cade4b 336 * @warning N/A.
mcm 2:9bf595cade4b 337 */
mcm 2:9bf595cade4b 338 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetMinuteInterrupts ( PCF85063_control_2_mi_t myMI, PCF85063_control_2_hmi_t myHMI )
mcm 2:9bf595cade4b 339 {
mcm 2:9bf595cade4b 340 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 341 uint32_t aux;
mcm 2:9bf595cade4b 342
mcm 2:9bf595cade4b 343 /* Read the register */
mcm 2:9bf595cade4b 344 cmd[0] = PCF85063_CONTROL_2;
mcm 2:9bf595cade4b 345 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 346 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 347
mcm 2:9bf595cade4b 348 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 349 cmd[1] = ( ( cmd[1] & ~( CONTROL_2_MI_MASK | CONTROL_2_HMI_MASK ) ) | myMI | myHMI );
mcm 2:9bf595cade4b 350 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 351
mcm 2:9bf595cade4b 352
mcm 2:9bf595cade4b 353
mcm 2:9bf595cade4b 354 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 355 {
mcm 2:9bf595cade4b 356 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 357 }
mcm 2:9bf595cade4b 358 else
mcm 2:9bf595cade4b 359 {
mcm 2:9bf595cade4b 360 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 361 }
mcm 2:9bf595cade4b 362 }
mcm 2:9bf595cade4b 363
mcm 2:9bf595cade4b 364
mcm 2:9bf595cade4b 365
mcm 2:9bf595cade4b 366 /**
mcm 2:9bf595cade4b 367 * @brief PCF85063_GetTimerFlag ( PCF85063_control_2_tf_t* )
mcm 2:9bf595cade4b 368 *
mcm 2:9bf595cade4b 369 * @details It gets the status of the timer flag.
mcm 2:9bf595cade4b 370 *
mcm 2:9bf595cade4b 371 * @param[in] N/A.
mcm 2:9bf595cade4b 372 *
mcm 2:9bf595cade4b 373 * @param[out] myTF: Timer flag.
mcm 2:9bf595cade4b 374 *
mcm 2:9bf595cade4b 375 *
mcm 2:9bf595cade4b 376 * @return Status of PCF85063_GetTimerFlag.
mcm 2:9bf595cade4b 377 *
mcm 2:9bf595cade4b 378 *
mcm 2:9bf595cade4b 379 * @author Manuel Caballero
mcm 2:9bf595cade4b 380 * @date 19/February/2019
mcm 2:9bf595cade4b 381 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 382 * @pre N/A
mcm 2:9bf595cade4b 383 * @warning N/A.
mcm 2:9bf595cade4b 384 */
mcm 2:9bf595cade4b 385 PCF85063::PCF85063_status_t PCF85063::PCF85063_GetTimerFlag ( PCF85063_control_2_tf_t* myTF )
mcm 2:9bf595cade4b 386 {
mcm 2:9bf595cade4b 387 char cmd = 0U;
mcm 2:9bf595cade4b 388 uint32_t aux;
mcm 2:9bf595cade4b 389
mcm 2:9bf595cade4b 390 /* Read the register */
mcm 2:9bf595cade4b 391 cmd = PCF85063_CONTROL_2;
mcm 2:9bf595cade4b 392 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 393 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 394
mcm 2:9bf595cade4b 395 /* Parse the data */
mcm 2:9bf595cade4b 396 *myTF = (PCF85063_control_2_tf_t)( cmd & CONTROL_2_TF_MASK );
mcm 2:9bf595cade4b 397
mcm 2:9bf595cade4b 398
mcm 2:9bf595cade4b 399
mcm 2:9bf595cade4b 400
mcm 2:9bf595cade4b 401 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 402 {
mcm 2:9bf595cade4b 403 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 404 }
mcm 2:9bf595cade4b 405 else
mcm 2:9bf595cade4b 406 {
mcm 2:9bf595cade4b 407 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 408 }
mcm 2:9bf595cade4b 409 }
mcm 2:9bf595cade4b 410
mcm 2:9bf595cade4b 411
mcm 2:9bf595cade4b 412
mcm 2:9bf595cade4b 413 /**
mcm 2:9bf595cade4b 414 * @brief PCF85063_ClearTimerFlag ( void )
mcm 2:9bf595cade4b 415 *
mcm 2:9bf595cade4b 416 * @details It resets the status of the timer flag.
mcm 2:9bf595cade4b 417 *
mcm 2:9bf595cade4b 418 * @param[in] N/A.
mcm 2:9bf595cade4b 419 *
mcm 2:9bf595cade4b 420 * @param[out] N/A.
mcm 2:9bf595cade4b 421 *
mcm 2:9bf595cade4b 422 *
mcm 2:9bf595cade4b 423 * @return Status of PCF85063_ClearTimerFlag.
mcm 2:9bf595cade4b 424 *
mcm 2:9bf595cade4b 425 *
mcm 2:9bf595cade4b 426 * @author Manuel Caballero
mcm 2:9bf595cade4b 427 * @date 19/February/2019
mcm 2:9bf595cade4b 428 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 429 * @pre N/A
mcm 2:9bf595cade4b 430 * @warning N/A.
mcm 2:9bf595cade4b 431 */
mcm 2:9bf595cade4b 432 PCF85063::PCF85063_status_t PCF85063::PCF85063_ClearTimerFlag ( void )
mcm 2:9bf595cade4b 433 {
mcm 2:9bf595cade4b 434 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 435 uint32_t aux;
mcm 2:9bf595cade4b 436
mcm 2:9bf595cade4b 437 /* Read the register */
mcm 2:9bf595cade4b 438 cmd[0] = PCF85063_CONTROL_2;
mcm 2:9bf595cade4b 439 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 440 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 441
mcm 2:9bf595cade4b 442 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 443 cmd[1] = ( cmd[1] & ~CONTROL_2_TF_MASK );
mcm 2:9bf595cade4b 444 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 445
mcm 2:9bf595cade4b 446
mcm 2:9bf595cade4b 447
mcm 2:9bf595cade4b 448
mcm 2:9bf595cade4b 449 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 450 {
mcm 2:9bf595cade4b 451 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 452 }
mcm 2:9bf595cade4b 453 else
mcm 2:9bf595cade4b 454 {
mcm 2:9bf595cade4b 455 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 456 }
mcm 2:9bf595cade4b 457 }
mcm 2:9bf595cade4b 458
mcm 2:9bf595cade4b 459
mcm 2:9bf595cade4b 460
mcm 2:9bf595cade4b 461 /**
mcm 2:9bf595cade4b 462 * @brief PCF85063_SetClockOutputFrequency ( PCF85063_control_2_cof_t )
mcm 2:9bf595cade4b 463 *
mcm 2:9bf595cade4b 464 * @details It sets the clock output frequency.
mcm 2:9bf595cade4b 465 *
mcm 2:9bf595cade4b 466 * @param[in] myCOF: CLKOUT control.
mcm 2:9bf595cade4b 467 *
mcm 2:9bf595cade4b 468 * @param[out] N/A.
mcm 2:9bf595cade4b 469 *
mcm 2:9bf595cade4b 470 *
mcm 2:9bf595cade4b 471 * @return Status of PCF85063_SetClockOutputFrequency.
mcm 2:9bf595cade4b 472 *
mcm 2:9bf595cade4b 473 *
mcm 2:9bf595cade4b 474 * @author Manuel Caballero
mcm 2:9bf595cade4b 475 * @date 19/February/2019
mcm 2:9bf595cade4b 476 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 477 * @pre N/A
mcm 2:9bf595cade4b 478 * @warning N/A.
mcm 2:9bf595cade4b 479 */
mcm 2:9bf595cade4b 480 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetClockOutputFrequency ( PCF85063_control_2_cof_t myCOF )
mcm 2:9bf595cade4b 481 {
mcm 2:9bf595cade4b 482 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 483 uint32_t aux;
mcm 2:9bf595cade4b 484
mcm 2:9bf595cade4b 485 /* Read the register */
mcm 2:9bf595cade4b 486 cmd[0] = PCF85063_CONTROL_2;
mcm 2:9bf595cade4b 487 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 488 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 489
mcm 2:9bf595cade4b 490 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 491 cmd[1] = ( cmd[1] & ~CONTROL_2_COF_MASK ) | myCOF;
mcm 2:9bf595cade4b 492 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 493
mcm 2:9bf595cade4b 494
mcm 2:9bf595cade4b 495
mcm 2:9bf595cade4b 496
mcm 2:9bf595cade4b 497 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 498 {
mcm 2:9bf595cade4b 499 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 500 }
mcm 2:9bf595cade4b 501 else
mcm 2:9bf595cade4b 502 {
mcm 2:9bf595cade4b 503 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 504 }
mcm 2:9bf595cade4b 505 }
mcm 2:9bf595cade4b 506
mcm 2:9bf595cade4b 507
mcm 2:9bf595cade4b 508
mcm 2:9bf595cade4b 509 /**
mcm 2:9bf595cade4b 510 * @brief PCF85063_SetOffset ( PCF85063_offset_mode_t , int8_t )
mcm 2:9bf595cade4b 511 *
mcm 2:9bf595cade4b 512 * @details It sets the offset.
mcm 2:9bf595cade4b 513 *
mcm 2:9bf595cade4b 514 * @param[in] myMODE: Offset mode.
mcm 2:9bf595cade4b 515 * @param[in] myOFFSET: from +63 to -64.
mcm 2:9bf595cade4b 516 *
mcm 2:9bf595cade4b 517 * @param[out] N/A.
mcm 2:9bf595cade4b 518 *
mcm 2:9bf595cade4b 519 *
mcm 2:9bf595cade4b 520 * @return Status of PCF85063_SetOffset.
mcm 2:9bf595cade4b 521 *
mcm 2:9bf595cade4b 522 *
mcm 2:9bf595cade4b 523 * @author Manuel Caballero
mcm 2:9bf595cade4b 524 * @date 19/February/2019
mcm 2:9bf595cade4b 525 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 526 * @pre N/A
mcm 2:9bf595cade4b 527 * @warning N/A.
mcm 2:9bf595cade4b 528 */
mcm 2:9bf595cade4b 529 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetOffset ( PCF85063_offset_mode_t myMODE, int8_t myOFFSET )
mcm 2:9bf595cade4b 530 {
mcm 2:9bf595cade4b 531 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 532 uint32_t aux;
mcm 2:9bf595cade4b 533
mcm 2:9bf595cade4b 534 /* Check offset values */
mcm 2:9bf595cade4b 535 if ( ( myOFFSET < -64 ) || ( myOFFSET > 63 ) )
mcm 2:9bf595cade4b 536 {
mcm 2:9bf595cade4b 537 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 538 }
mcm 2:9bf595cade4b 539 else
mcm 2:9bf595cade4b 540 {
mcm 2:9bf595cade4b 541 /* Read the register */
mcm 2:9bf595cade4b 542 cmd[0] = PCF85063_OFFSET;
mcm 2:9bf595cade4b 543 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 544 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 545
mcm 2:9bf595cade4b 546 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 547 cmd[1] = ( cmd[1] & ~( OFFSET_MODE_MASK | 0b01111111 ) ) | ( myMODE | myOFFSET );
mcm 2:9bf595cade4b 548 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 549 }
mcm 2:9bf595cade4b 550
mcm 2:9bf595cade4b 551
mcm 2:9bf595cade4b 552
mcm 2:9bf595cade4b 553 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 554 {
mcm 2:9bf595cade4b 555 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 556 }
mcm 2:9bf595cade4b 557 else
mcm 2:9bf595cade4b 558 {
mcm 2:9bf595cade4b 559 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 560 }
mcm 2:9bf595cade4b 561 }
mcm 2:9bf595cade4b 562
mcm 2:9bf595cade4b 563
mcm 2:9bf595cade4b 564
mcm 2:9bf595cade4b 565 /**
mcm 2:9bf595cade4b 566 * @brief PCF85063_WriteByteRAM ( PCF85063_data_t )
mcm 2:9bf595cade4b 567 *
mcm 2:9bf595cade4b 568 * @details It writes into the RAM byte register.
mcm 2:9bf595cade4b 569 *
mcm 2:9bf595cade4b 570 * @param[in] myData: Data to be written in the RAM byte register.
mcm 2:9bf595cade4b 571 *
mcm 2:9bf595cade4b 572 * @param[out] N/A.
mcm 2:9bf595cade4b 573 *
mcm 2:9bf595cade4b 574 *
mcm 2:9bf595cade4b 575 * @return Status of PCF85063_WriteByteRAM.
mcm 2:9bf595cade4b 576 *
mcm 2:9bf595cade4b 577 *
mcm 2:9bf595cade4b 578 * @author Manuel Caballero
mcm 2:9bf595cade4b 579 * @date 19/February/2019
mcm 2:9bf595cade4b 580 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 581 * @pre N/A
mcm 2:9bf595cade4b 582 * @warning N/A.
mcm 2:9bf595cade4b 583 */
mcm 2:9bf595cade4b 584 PCF85063::PCF85063_status_t PCF85063::PCF85063_WriteByteRAM ( PCF85063_data_t myData )
mcm 2:9bf595cade4b 585 {
mcm 2:9bf595cade4b 586 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 587 uint32_t aux;
mcm 2:9bf595cade4b 588
mcm 2:9bf595cade4b 589 /* Update the register */
mcm 2:9bf595cade4b 590 cmd[0] = PCF85063_RAM_BYTE;
mcm 2:9bf595cade4b 591 cmd[1] = myData.ramByte;
mcm 2:9bf595cade4b 592 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 593
mcm 2:9bf595cade4b 594
mcm 2:9bf595cade4b 595
mcm 2:9bf595cade4b 596
mcm 2:9bf595cade4b 597 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 598 {
mcm 2:9bf595cade4b 599 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 600 }
mcm 2:9bf595cade4b 601 else
mcm 2:9bf595cade4b 602 {
mcm 2:9bf595cade4b 603 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 604 }
mcm 2:9bf595cade4b 605 }
mcm 2:9bf595cade4b 606
mcm 2:9bf595cade4b 607
mcm 2:9bf595cade4b 608
mcm 2:9bf595cade4b 609 /**
mcm 2:9bf595cade4b 610 * @brief PCF85063_ReadByteRAM ( PCF85063_data_t* )
mcm 2:9bf595cade4b 611 *
mcm 2:9bf595cade4b 612 * @details It writes into the RAM byte register.
mcm 2:9bf595cade4b 613 *
mcm 2:9bf595cade4b 614 * @param[in] N/A.
mcm 2:9bf595cade4b 615 *
mcm 2:9bf595cade4b 616 * @param[out] myData: Data to be read from the RAM byte register.
mcm 2:9bf595cade4b 617 *
mcm 2:9bf595cade4b 618 *
mcm 2:9bf595cade4b 619 * @return Status of PCF85063_ReadByteRAM.
mcm 2:9bf595cade4b 620 *
mcm 2:9bf595cade4b 621 *
mcm 2:9bf595cade4b 622 * @author Manuel Caballero
mcm 2:9bf595cade4b 623 * @date 19/February/2019
mcm 2:9bf595cade4b 624 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 625 * @pre N/A
mcm 2:9bf595cade4b 626 * @warning N/A.
mcm 2:9bf595cade4b 627 */
mcm 2:9bf595cade4b 628 PCF85063::PCF85063_status_t PCF85063::PCF85063_ReadByteRAM ( PCF85063_data_t* myData )
mcm 2:9bf595cade4b 629 {
mcm 2:9bf595cade4b 630 char cmd = 0U;
mcm 2:9bf595cade4b 631 uint32_t aux;
mcm 2:9bf595cade4b 632
mcm 2:9bf595cade4b 633 /* Read the register */
mcm 2:9bf595cade4b 634 cmd = PCF85063_RAM_BYTE;
mcm 2:9bf595cade4b 635 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 636 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 637
mcm 2:9bf595cade4b 638 /* Parse the data */
mcm 2:9bf595cade4b 639 myData->ramByte = cmd;
mcm 2:9bf595cade4b 640
mcm 2:9bf595cade4b 641
mcm 2:9bf595cade4b 642
mcm 2:9bf595cade4b 643
mcm 2:9bf595cade4b 644 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 645 {
mcm 2:9bf595cade4b 646 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 647 }
mcm 2:9bf595cade4b 648 else
mcm 2:9bf595cade4b 649 {
mcm 2:9bf595cade4b 650 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 651 }
mcm 2:9bf595cade4b 652 }
mcm 2:9bf595cade4b 653
mcm 2:9bf595cade4b 654
mcm 2:9bf595cade4b 655
mcm 2:9bf595cade4b 656 /**
mcm 2:9bf595cade4b 657 * @brief PCF85063_CheckOscillatorClockIntegrityFlag ( PCF85063_data_t* )
mcm 2:9bf595cade4b 658 *
mcm 2:9bf595cade4b 659 * @details It checks oscillator clock integrity flag.
mcm 2:9bf595cade4b 660 *
mcm 2:9bf595cade4b 661 * @param[in] N/A.
mcm 2:9bf595cade4b 662 *
mcm 2:9bf595cade4b 663 * @param[out] myOS: CLKOUT control.
mcm 2:9bf595cade4b 664 *
mcm 2:9bf595cade4b 665 *
mcm 2:9bf595cade4b 666 * @return Status of PCF85063_CheckOscillatorClockIntegrityFlag.
mcm 2:9bf595cade4b 667 *
mcm 2:9bf595cade4b 668 *
mcm 2:9bf595cade4b 669 * @author Manuel Caballero
mcm 2:9bf595cade4b 670 * @date 19/February/2019
mcm 2:9bf595cade4b 671 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 672 * @pre N/A
mcm 2:9bf595cade4b 673 * @warning N/A.
mcm 2:9bf595cade4b 674 */
mcm 2:9bf595cade4b 675 PCF85063::PCF85063_status_t PCF85063::PCF85063_CheckOscillatorClockIntegrityFlag ( PCF85063_data_t* myOS )
mcm 2:9bf595cade4b 676 {
mcm 2:9bf595cade4b 677 char cmd = 0U;
mcm 2:9bf595cade4b 678 uint32_t aux;
mcm 2:9bf595cade4b 679
mcm 2:9bf595cade4b 680 /* Read the register */
mcm 2:9bf595cade4b 681 cmd = PCF85063_SECONDS;
mcm 2:9bf595cade4b 682 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 683 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 684
mcm 2:9bf595cade4b 685 /* Parse the data */
mcm 2:9bf595cade4b 686 myOS->os = (PCF85063_seconds_os_t)cmd;
mcm 2:9bf595cade4b 687
mcm 2:9bf595cade4b 688
mcm 2:9bf595cade4b 689
mcm 2:9bf595cade4b 690
mcm 2:9bf595cade4b 691 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 692 {
mcm 2:9bf595cade4b 693 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 694 }
mcm 2:9bf595cade4b 695 else
mcm 2:9bf595cade4b 696 {
mcm 2:9bf595cade4b 697 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 698 }
mcm 2:9bf595cade4b 699 }
mcm 2:9bf595cade4b 700
mcm 2:9bf595cade4b 701
mcm 2:9bf595cade4b 702
mcm 2:9bf595cade4b 703 /**
mcm 2:9bf595cade4b 704 * @brief PCF85063_ClearOscillatorClockIntegrityFlag ( void )
mcm 2:9bf595cade4b 705 *
mcm 2:9bf595cade4b 706 * @details It clears oscillator clock integrity flag.
mcm 2:9bf595cade4b 707 *
mcm 2:9bf595cade4b 708 * @param[in] N/A.
mcm 2:9bf595cade4b 709 *
mcm 2:9bf595cade4b 710 * @param[out] N/A.
mcm 2:9bf595cade4b 711 *
mcm 2:9bf595cade4b 712 *
mcm 2:9bf595cade4b 713 * @return Status of PCF85063_ClearOscillatorClockIntegrityFlag.
mcm 2:9bf595cade4b 714 *
mcm 2:9bf595cade4b 715 *
mcm 2:9bf595cade4b 716 * @author Manuel Caballero
mcm 2:9bf595cade4b 717 * @date 19/February/2019
mcm 2:9bf595cade4b 718 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 719 * @pre N/A
mcm 2:9bf595cade4b 720 * @warning N/A.
mcm 2:9bf595cade4b 721 */
mcm 2:9bf595cade4b 722 PCF85063::PCF85063_status_t PCF85063::PCF85063_ClearOscillatorClockIntegrityFlag ( void )
mcm 2:9bf595cade4b 723 {
mcm 2:9bf595cade4b 724 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 725 uint32_t aux;
mcm 2:9bf595cade4b 726
mcm 2:9bf595cade4b 727 /* Read the register */
mcm 2:9bf595cade4b 728 cmd[0] = PCF85063_SECONDS;
mcm 2:9bf595cade4b 729 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 730 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 731
mcm 2:9bf595cade4b 732 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 733 cmd[1] = ( cmd[1] & ~SECONDS_OS_MASK );
mcm 2:9bf595cade4b 734 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 735
mcm 2:9bf595cade4b 736
mcm 2:9bf595cade4b 737
mcm 2:9bf595cade4b 738
mcm 2:9bf595cade4b 739 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 740 {
mcm 2:9bf595cade4b 741 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 742 }
mcm 2:9bf595cade4b 743 else
mcm 2:9bf595cade4b 744 {
mcm 2:9bf595cade4b 745 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 746 }
mcm 2:9bf595cade4b 747 }
mcm 2:9bf595cade4b 748
mcm 2:9bf595cade4b 749
mcm 2:9bf595cade4b 750
mcm 2:9bf595cade4b 751 /**
mcm 2:9bf595cade4b 752 * @brief PCF85063_SetAM_PM_Indicator ( PCF85063_data_t )
mcm 2:9bf595cade4b 753 *
mcm 2:9bf595cade4b 754 * @details It sets the AM/PM indicator ( only for 12-hour mode ).
mcm 2:9bf595cade4b 755 *
mcm 2:9bf595cade4b 756 * @param[in] myAM_PM_Indicator: AM/PM indicator.
mcm 2:9bf595cade4b 757 *
mcm 2:9bf595cade4b 758 * @param[out] N/A.
mcm 2:9bf595cade4b 759 *
mcm 2:9bf595cade4b 760 *
mcm 2:9bf595cade4b 761 * @return Status of PCF85063_SetAM_PM_Indicator.
mcm 2:9bf595cade4b 762 *
mcm 2:9bf595cade4b 763 *
mcm 2:9bf595cade4b 764 * @author Manuel Caballero
mcm 2:9bf595cade4b 765 * @date 19/February/2019
mcm 2:9bf595cade4b 766 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 767 * @pre N/A
mcm 2:9bf595cade4b 768 * @warning This function only works when the device is set for 12-hour mode, otherwise it
mcm 2:9bf595cade4b 769 * will return FAILURE.
mcm 2:9bf595cade4b 770 */
mcm 2:9bf595cade4b 771 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetAM_PM_Indicator ( PCF85063_data_t myAM_PM_Indicator )
mcm 2:9bf595cade4b 772 {
mcm 2:9bf595cade4b 773 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 774 uint32_t aux;
mcm 2:9bf595cade4b 775
mcm 2:9bf595cade4b 776 /* This function only works when the device is set for 12-hour mode */
mcm 2:9bf595cade4b 777 if ( myAM_PM_Indicator.Time12H_24HMode == CONTROL_1_12_24_24_HOUR_MODE )
mcm 2:9bf595cade4b 778 {
mcm 2:9bf595cade4b 779 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 780 }
mcm 2:9bf595cade4b 781 else
mcm 2:9bf595cade4b 782 {
mcm 2:9bf595cade4b 783 /* Read the register */
mcm 2:9bf595cade4b 784 cmd[0] = PCF85063_HOURS;
mcm 2:9bf595cade4b 785 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 786 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 1U );
mcm 2:9bf595cade4b 787
mcm 2:9bf595cade4b 788 /* Mask it and update it with the new value */
mcm 2:9bf595cade4b 789 cmd[1] = ( cmd[1] & ~HOURS_AMPM_MASK ) | myAM_PM_Indicator.TimeAM_PM_Mode;
mcm 2:9bf595cade4b 790 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 791 }
mcm 2:9bf595cade4b 792
mcm 2:9bf595cade4b 793
mcm 2:9bf595cade4b 794
mcm 2:9bf595cade4b 795 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 796 {
mcm 2:9bf595cade4b 797 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 798 }
mcm 2:9bf595cade4b 799 else
mcm 2:9bf595cade4b 800 {
mcm 2:9bf595cade4b 801 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 802 }
mcm 2:9bf595cade4b 803 }
mcm 2:9bf595cade4b 804
mcm 2:9bf595cade4b 805
mcm 2:9bf595cade4b 806
mcm 2:9bf595cade4b 807 /**
mcm 2:9bf595cade4b 808 * @brief PCF85063_GetAM_PM_Indicator ( PCF85063_data_t* )
mcm 2:9bf595cade4b 809 *
mcm 2:9bf595cade4b 810 * @details It gets the AM/PM indicator ( only for 12-hour mode ).
mcm 2:9bf595cade4b 811 *
mcm 2:9bf595cade4b 812 * @param[in] N/A.
mcm 2:9bf595cade4b 813 *
mcm 2:9bf595cade4b 814 * @param[out] myAM_PM_Indicator: AM/PM indicator.
mcm 2:9bf595cade4b 815 *
mcm 2:9bf595cade4b 816 *
mcm 2:9bf595cade4b 817 * @return Status of PCF85063_GetAM_PM_Indicator.
mcm 2:9bf595cade4b 818 *
mcm 2:9bf595cade4b 819 *
mcm 2:9bf595cade4b 820 * @author Manuel Caballero
mcm 2:9bf595cade4b 821 * @date 19/February/2019
mcm 2:9bf595cade4b 822 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 823 * @pre N/A
mcm 2:9bf595cade4b 824 * @warning This function only works when the device is set for 12-hour mode, otherwise it
mcm 2:9bf595cade4b 825 * will return FAILURE.
mcm 2:9bf595cade4b 826 */
mcm 2:9bf595cade4b 827 PCF85063::PCF85063_status_t PCF85063::PCF85063_GetAM_PM_Indicator ( PCF85063_data_t* myAM_PM_Indicator )
mcm 2:9bf595cade4b 828 {
mcm 2:9bf595cade4b 829 char cmd = 0U;
mcm 2:9bf595cade4b 830 uint32_t aux;
mcm 2:9bf595cade4b 831
mcm 2:9bf595cade4b 832 /* This function only works when the device is set for 12-hour mode */
mcm 2:9bf595cade4b 833 if ( myAM_PM_Indicator->Time12H_24HMode == CONTROL_1_12_24_24_HOUR_MODE )
mcm 2:9bf595cade4b 834 {
mcm 2:9bf595cade4b 835 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 836 }
mcm 2:9bf595cade4b 837 else
mcm 2:9bf595cade4b 838 {
mcm 2:9bf595cade4b 839 /* Read the register */
mcm 2:9bf595cade4b 840 cmd = PCF85063_HOURS;
mcm 2:9bf595cade4b 841 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 842 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 843
mcm 2:9bf595cade4b 844 /* Parse the data */
mcm 2:9bf595cade4b 845 myAM_PM_Indicator->TimeAM_PM_Mode = (PCF85063_hours_ampm_t)cmd;
mcm 2:9bf595cade4b 846 }
mcm 2:9bf595cade4b 847
mcm 2:9bf595cade4b 848
mcm 2:9bf595cade4b 849
mcm 2:9bf595cade4b 850 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 851 {
mcm 2:9bf595cade4b 852 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 853 }
mcm 2:9bf595cade4b 854 else
mcm 2:9bf595cade4b 855 {
mcm 2:9bf595cade4b 856 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 857 }
mcm 2:9bf595cade4b 858 }
mcm 2:9bf595cade4b 859
mcm 2:9bf595cade4b 860
mcm 2:9bf595cade4b 861
mcm 2:9bf595cade4b 862 /**
mcm 2:9bf595cade4b 863 * @brief PCF85063_GetDay ( PCF85063_data_t* )
mcm 2:9bf595cade4b 864 *
mcm 2:9bf595cade4b 865 * @details It gets the day ( BCD format ).
mcm 2:9bf595cade4b 866 *
mcm 2:9bf595cade4b 867 * @param[in] N/A.
mcm 2:9bf595cade4b 868 *
mcm 2:9bf595cade4b 869 * @param[out] myActualDay: Current day.
mcm 2:9bf595cade4b 870 *
mcm 2:9bf595cade4b 871 *
mcm 2:9bf595cade4b 872 * @return Status of PCF85063_GetDay.
mcm 2:9bf595cade4b 873 *
mcm 2:9bf595cade4b 874 *
mcm 2:9bf595cade4b 875 * @author Manuel Caballero
mcm 2:9bf595cade4b 876 * @date 19/February/2019
mcm 2:9bf595cade4b 877 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 878 * @pre N/A
mcm 2:9bf595cade4b 879 * @warning N/A.
mcm 2:9bf595cade4b 880 */
mcm 2:9bf595cade4b 881 PCF85063::PCF85063_status_t PCF85063::PCF85063_GetDay ( PCF85063_data_t* myActualDay )
mcm 2:9bf595cade4b 882 {
mcm 2:9bf595cade4b 883 char cmd = 0U;
mcm 2:9bf595cade4b 884 uint32_t aux;
mcm 2:9bf595cade4b 885
mcm 2:9bf595cade4b 886 /* Read the register */
mcm 2:9bf595cade4b 887 cmd = PCF85063_DAYS;
mcm 2:9bf595cade4b 888 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 889 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 890
mcm 2:9bf595cade4b 891 /* Parse the data */
mcm 2:9bf595cade4b 892 myActualDay->BCDday = ( cmd & ( DAYS_DAYS_TEN_PLACE_MASK | DAYS_DAYS_UNIT_PLACE_MASK ) );
mcm 2:9bf595cade4b 893
mcm 2:9bf595cade4b 894
mcm 2:9bf595cade4b 895
mcm 2:9bf595cade4b 896
mcm 2:9bf595cade4b 897 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 898 {
mcm 2:9bf595cade4b 899 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 900 }
mcm 2:9bf595cade4b 901 else
mcm 2:9bf595cade4b 902 {
mcm 2:9bf595cade4b 903 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 904 }
mcm 2:9bf595cade4b 905 }
mcm 2:9bf595cade4b 906
mcm 2:9bf595cade4b 907
mcm 2:9bf595cade4b 908
mcm 2:9bf595cade4b 909 /**
mcm 2:9bf595cade4b 910 * @brief PCF85063_SetDay ( PCF85063_data_t )
mcm 2:9bf595cade4b 911 *
mcm 2:9bf595cade4b 912 * @details It sets the day ( BCD format ).
mcm 2:9bf595cade4b 913 *
mcm 2:9bf595cade4b 914 * @param[in] myNewDay: New day ( BCD format ).
mcm 2:9bf595cade4b 915 *
mcm 2:9bf595cade4b 916 * @param[out] N/A.
mcm 2:9bf595cade4b 917 *
mcm 2:9bf595cade4b 918 *
mcm 2:9bf595cade4b 919 * @return Status of PCF85063_SetDay.
mcm 2:9bf595cade4b 920 *
mcm 2:9bf595cade4b 921 *
mcm 2:9bf595cade4b 922 * @author Manuel Caballero
mcm 2:9bf595cade4b 923 * @date 19/February/2019
mcm 2:9bf595cade4b 924 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 925 * @pre N/A
mcm 2:9bf595cade4b 926 * @warning N/A.
mcm 2:9bf595cade4b 927 */
mcm 2:9bf595cade4b 928 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetDay ( PCF85063_data_t myNewDay )
mcm 2:9bf595cade4b 929 {
mcm 2:9bf595cade4b 930 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 931 uint32_t aux;
mcm 2:9bf595cade4b 932
mcm 2:9bf595cade4b 933 /* Update the register */
mcm 2:9bf595cade4b 934 cmd[0] = PCF85063_DAYS;
mcm 2:9bf595cade4b 935 cmd[1] = ( myNewDay.BCDday & ( DAYS_DAYS_TEN_PLACE_MASK | DAYS_DAYS_UNIT_PLACE_MASK ) );
mcm 2:9bf595cade4b 936 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 937
mcm 2:9bf595cade4b 938
mcm 2:9bf595cade4b 939
mcm 2:9bf595cade4b 940
mcm 2:9bf595cade4b 941 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 942 {
mcm 2:9bf595cade4b 943 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 944 }
mcm 2:9bf595cade4b 945 else
mcm 2:9bf595cade4b 946 {
mcm 2:9bf595cade4b 947 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 948 }
mcm 2:9bf595cade4b 949 }
mcm 2:9bf595cade4b 950
mcm 2:9bf595cade4b 951
mcm 2:9bf595cade4b 952
mcm 2:9bf595cade4b 953 /**
mcm 2:9bf595cade4b 954 * @brief PCF85063_GetWeekday ( PCF85063_data_t* )
mcm 2:9bf595cade4b 955 *
mcm 2:9bf595cade4b 956 * @details It gets the weekday.
mcm 2:9bf595cade4b 957 *
mcm 2:9bf595cade4b 958 * @param[in] N/A.
mcm 2:9bf595cade4b 959 *
mcm 2:9bf595cade4b 960 * @param[out] myActualWeekday: Current weekday.
mcm 2:9bf595cade4b 961 *
mcm 2:9bf595cade4b 962 *
mcm 2:9bf595cade4b 963 * @return Status of PCF85063_GetWeekday.
mcm 2:9bf595cade4b 964 *
mcm 2:9bf595cade4b 965 *
mcm 2:9bf595cade4b 966 * @author Manuel Caballero
mcm 2:9bf595cade4b 967 * @date 19/February/2019
mcm 2:9bf595cade4b 968 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 969 * @pre N/A
mcm 2:9bf595cade4b 970 * @warning N/A.
mcm 2:9bf595cade4b 971 */
mcm 2:9bf595cade4b 972 PCF85063::PCF85063_status_t PCF85063::PCF85063_GetWeekday ( PCF85063_data_t* myActualWeekday )
mcm 2:9bf595cade4b 973 {
mcm 2:9bf595cade4b 974 char cmd = 0U;
mcm 2:9bf595cade4b 975 uint32_t aux;
mcm 2:9bf595cade4b 976
mcm 2:9bf595cade4b 977 /* Read the register */
mcm 2:9bf595cade4b 978 cmd = PCF85063_WEEKDAYS;
mcm 2:9bf595cade4b 979 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 980 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 981
mcm 2:9bf595cade4b 982 /* Parse the data */
mcm 2:9bf595cade4b 983 myActualWeekday->weekday = (PCF85063_weekdays_weekdays_t)( cmd & WEEKDAYS_WEEKDAYS_MASK );
mcm 2:9bf595cade4b 984
mcm 2:9bf595cade4b 985
mcm 2:9bf595cade4b 986
mcm 2:9bf595cade4b 987
mcm 2:9bf595cade4b 988 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 989 {
mcm 2:9bf595cade4b 990 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 991 }
mcm 2:9bf595cade4b 992 else
mcm 2:9bf595cade4b 993 {
mcm 2:9bf595cade4b 994 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 995 }
mcm 2:9bf595cade4b 996 }
mcm 2:9bf595cade4b 997
mcm 2:9bf595cade4b 998
mcm 2:9bf595cade4b 999
mcm 2:9bf595cade4b 1000 /**
mcm 2:9bf595cade4b 1001 * @brief PCF85063_SetWeekday ( PCF85063_data_t )
mcm 2:9bf595cade4b 1002 *
mcm 2:9bf595cade4b 1003 * @details It sets the weekday.
mcm 2:9bf595cade4b 1004 *
mcm 2:9bf595cade4b 1005 * @param[in] myNewWeekday: New weekday.
mcm 2:9bf595cade4b 1006 *
mcm 2:9bf595cade4b 1007 * @param[out] N/A.
mcm 2:9bf595cade4b 1008 *
mcm 2:9bf595cade4b 1009 *
mcm 2:9bf595cade4b 1010 * @return Status of PCF85063_SetWeekday.
mcm 2:9bf595cade4b 1011 *
mcm 2:9bf595cade4b 1012 *
mcm 2:9bf595cade4b 1013 * @author Manuel Caballero
mcm 2:9bf595cade4b 1014 * @date 19/February/2019
mcm 2:9bf595cade4b 1015 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 1016 * @pre N/A
mcm 2:9bf595cade4b 1017 * @warning N/A.
mcm 2:9bf595cade4b 1018 */
mcm 2:9bf595cade4b 1019 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetWeekday ( PCF85063_data_t myNewWeekday )
mcm 2:9bf595cade4b 1020 {
mcm 2:9bf595cade4b 1021 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 1022 uint32_t aux;
mcm 2:9bf595cade4b 1023
mcm 2:9bf595cade4b 1024 /* Update the register */
mcm 2:9bf595cade4b 1025 cmd[0] = PCF85063_WEEKDAYS;
mcm 2:9bf595cade4b 1026 cmd[1] = myNewWeekday.weekday;
mcm 2:9bf595cade4b 1027 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 1028
mcm 2:9bf595cade4b 1029
mcm 2:9bf595cade4b 1030
mcm 2:9bf595cade4b 1031
mcm 2:9bf595cade4b 1032 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 1033 {
mcm 2:9bf595cade4b 1034 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 1035 }
mcm 2:9bf595cade4b 1036 else
mcm 2:9bf595cade4b 1037 {
mcm 2:9bf595cade4b 1038 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 1039 }
mcm 2:9bf595cade4b 1040 }
mcm 2:9bf595cade4b 1041
mcm 2:9bf595cade4b 1042
mcm 2:9bf595cade4b 1043
mcm 2:9bf595cade4b 1044 /**
mcm 2:9bf595cade4b 1045 * @brief PCF85063_GetMonth ( PCF85063_data_t* )
mcm 2:9bf595cade4b 1046 *
mcm 2:9bf595cade4b 1047 * @details It gets the month ( BCD format ).
mcm 2:9bf595cade4b 1048 *
mcm 2:9bf595cade4b 1049 * @param[in] N/A.
mcm 2:9bf595cade4b 1050 *
mcm 2:9bf595cade4b 1051 * @param[out] myActualMonth: Current month.
mcm 2:9bf595cade4b 1052 *
mcm 2:9bf595cade4b 1053 *
mcm 2:9bf595cade4b 1054 * @return Status of PCF85063_GetMonth.
mcm 2:9bf595cade4b 1055 *
mcm 2:9bf595cade4b 1056 *
mcm 2:9bf595cade4b 1057 * @author Manuel Caballero
mcm 2:9bf595cade4b 1058 * @date 19/February/2019
mcm 2:9bf595cade4b 1059 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 1060 * @pre N/A
mcm 2:9bf595cade4b 1061 * @warning N/A.
mcm 2:9bf595cade4b 1062 */
mcm 2:9bf595cade4b 1063 PCF85063::PCF85063_status_t PCF85063::PCF85063_GetMonth ( PCF85063_data_t* myActualMonth )
mcm 2:9bf595cade4b 1064 {
mcm 2:9bf595cade4b 1065 char cmd = 0U;
mcm 2:9bf595cade4b 1066 uint32_t aux;
mcm 2:9bf595cade4b 1067
mcm 2:9bf595cade4b 1068 /* Read the register */
mcm 2:9bf595cade4b 1069 cmd = PCF85063_MONTHS;
mcm 2:9bf595cade4b 1070 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 1071 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 1072
mcm 2:9bf595cade4b 1073 /* Parse the data */
mcm 2:9bf595cade4b 1074 myActualMonth->BCDmonth = (PCF85063_months_months_t)( cmd & MONTHS_MONTHS_MASK );
mcm 2:9bf595cade4b 1075
mcm 2:9bf595cade4b 1076
mcm 2:9bf595cade4b 1077
mcm 2:9bf595cade4b 1078
mcm 2:9bf595cade4b 1079 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 1080 {
mcm 2:9bf595cade4b 1081 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 1082 }
mcm 2:9bf595cade4b 1083 else
mcm 2:9bf595cade4b 1084 {
mcm 2:9bf595cade4b 1085 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 1086 }
mcm 2:9bf595cade4b 1087 }
mcm 2:9bf595cade4b 1088
mcm 2:9bf595cade4b 1089
mcm 2:9bf595cade4b 1090
mcm 2:9bf595cade4b 1091 /**
mcm 2:9bf595cade4b 1092 * @brief PCF85063_SetMonth ( PCF85063_data_t )
mcm 2:9bf595cade4b 1093 *
mcm 2:9bf595cade4b 1094 * @details It sets the month ( BCD format ).
mcm 2:9bf595cade4b 1095 *
mcm 2:9bf595cade4b 1096 * @param[in] myNewMonth: New month.
mcm 2:9bf595cade4b 1097 *
mcm 2:9bf595cade4b 1098 * @param[out] N/A.
mcm 2:9bf595cade4b 1099 *
mcm 2:9bf595cade4b 1100 *
mcm 2:9bf595cade4b 1101 * @return Status of PCF85063_SetMonth.
mcm 2:9bf595cade4b 1102 *
mcm 2:9bf595cade4b 1103 *
mcm 2:9bf595cade4b 1104 * @author Manuel Caballero
mcm 2:9bf595cade4b 1105 * @date 19/February/2019
mcm 2:9bf595cade4b 1106 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 1107 * @pre N/A
mcm 2:9bf595cade4b 1108 * @warning N/A.
mcm 2:9bf595cade4b 1109 */
mcm 2:9bf595cade4b 1110 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetMonth ( PCF85063_data_t myNewMonth )
mcm 2:9bf595cade4b 1111 {
mcm 2:9bf595cade4b 1112 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 1113 uint32_t aux;
mcm 2:9bf595cade4b 1114
mcm 2:9bf595cade4b 1115 /* Update the register */
mcm 2:9bf595cade4b 1116 cmd[0] = PCF85063_MONTHS;
mcm 2:9bf595cade4b 1117 cmd[1] = myNewMonth.BCDmonth;
mcm 2:9bf595cade4b 1118 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 1119
mcm 2:9bf595cade4b 1120
mcm 2:9bf595cade4b 1121
mcm 2:9bf595cade4b 1122
mcm 2:9bf595cade4b 1123 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 1124 {
mcm 2:9bf595cade4b 1125 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 1126 }
mcm 2:9bf595cade4b 1127 else
mcm 2:9bf595cade4b 1128 {
mcm 2:9bf595cade4b 1129 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 1130 }
mcm 2:9bf595cade4b 1131 }
mcm 2:9bf595cade4b 1132
mcm 2:9bf595cade4b 1133
mcm 2:9bf595cade4b 1134
mcm 2:9bf595cade4b 1135 /**
mcm 2:9bf595cade4b 1136 * @brief PCF85063_GetYear ( PCF85063_data_t* )
mcm 2:9bf595cade4b 1137 *
mcm 2:9bf595cade4b 1138 * @details It gets the year ( BCD format ).
mcm 2:9bf595cade4b 1139 *
mcm 2:9bf595cade4b 1140 * @param[in] N/A.
mcm 2:9bf595cade4b 1141 *
mcm 2:9bf595cade4b 1142 * @param[out] myActualYear: Current year.
mcm 2:9bf595cade4b 1143 *
mcm 2:9bf595cade4b 1144 *
mcm 2:9bf595cade4b 1145 * @return Status of PCF85063_GetYear.
mcm 2:9bf595cade4b 1146 *
mcm 2:9bf595cade4b 1147 *
mcm 2:9bf595cade4b 1148 * @author Manuel Caballero
mcm 2:9bf595cade4b 1149 * @date 19/February/2019
mcm 2:9bf595cade4b 1150 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 1151 * @pre N/A
mcm 2:9bf595cade4b 1152 * @warning N/A.
mcm 2:9bf595cade4b 1153 */
mcm 2:9bf595cade4b 1154 PCF85063::PCF85063_status_t PCF85063::PCF85063_GetYear ( PCF85063_data_t* myActualYear )
mcm 2:9bf595cade4b 1155 {
mcm 2:9bf595cade4b 1156 char cmd = 0U;
mcm 2:9bf595cade4b 1157 uint32_t aux;
mcm 2:9bf595cade4b 1158
mcm 2:9bf595cade4b 1159 /* Read the register */
mcm 2:9bf595cade4b 1160 cmd = PCF85063_YEARS;
mcm 2:9bf595cade4b 1161 aux = _i2c.write ( _PCF85063_Addr, &cmd, 1U, true );
mcm 4:a5c06ac163f1 1162 aux = _i2c.read ( _PCF85063_Addr, &cmd, 1U );
mcm 2:9bf595cade4b 1163
mcm 2:9bf595cade4b 1164 /* Parse the data */
mcm 2:9bf595cade4b 1165 myActualYear->BCDyear = cmd;
mcm 2:9bf595cade4b 1166
mcm 2:9bf595cade4b 1167
mcm 2:9bf595cade4b 1168
mcm 2:9bf595cade4b 1169
mcm 2:9bf595cade4b 1170 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 1171 {
mcm 2:9bf595cade4b 1172 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 1173 }
mcm 2:9bf595cade4b 1174 else
mcm 2:9bf595cade4b 1175 {
mcm 2:9bf595cade4b 1176 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 1177 }
mcm 2:9bf595cade4b 1178 }
mcm 2:9bf595cade4b 1179
mcm 2:9bf595cade4b 1180
mcm 2:9bf595cade4b 1181
mcm 2:9bf595cade4b 1182 /**
mcm 2:9bf595cade4b 1183 * @brief PCF85063_SetYear ( PCF85063_data_t )
mcm 2:9bf595cade4b 1184 *
mcm 2:9bf595cade4b 1185 * @details It sets the year ( BCD format ).
mcm 2:9bf595cade4b 1186 *
mcm 2:9bf595cade4b 1187 * @param[in] myNewYear: New year.
mcm 2:9bf595cade4b 1188 *
mcm 2:9bf595cade4b 1189 * @param[out] N/A.
mcm 2:9bf595cade4b 1190 *
mcm 2:9bf595cade4b 1191 *
mcm 2:9bf595cade4b 1192 * @return Status of PCF85063_SetYear.
mcm 2:9bf595cade4b 1193 *
mcm 2:9bf595cade4b 1194 *
mcm 2:9bf595cade4b 1195 * @author Manuel Caballero
mcm 2:9bf595cade4b 1196 * @date 19/February/2019
mcm 2:9bf595cade4b 1197 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 1198 * @pre N/A
mcm 2:9bf595cade4b 1199 * @warning N/A.
mcm 2:9bf595cade4b 1200 */
mcm 2:9bf595cade4b 1201 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetYear ( PCF85063_data_t myNewYear )
mcm 2:9bf595cade4b 1202 {
mcm 2:9bf595cade4b 1203 char cmd[2] = { 0U };
mcm 2:9bf595cade4b 1204 uint32_t aux;
mcm 2:9bf595cade4b 1205
mcm 2:9bf595cade4b 1206 /* Update the register */
mcm 2:9bf595cade4b 1207 cmd[0] = PCF85063_YEARS;
mcm 2:9bf595cade4b 1208 cmd[1] = myNewYear.BCDyear;
mcm 2:9bf595cade4b 1209 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 1210
mcm 2:9bf595cade4b 1211
mcm 2:9bf595cade4b 1212
mcm 2:9bf595cade4b 1213
mcm 2:9bf595cade4b 1214 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 1215 {
mcm 2:9bf595cade4b 1216 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 1217 }
mcm 2:9bf595cade4b 1218 else
mcm 2:9bf595cade4b 1219 {
mcm 2:9bf595cade4b 1220 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 1221 }
mcm 2:9bf595cade4b 1222 }
mcm 2:9bf595cade4b 1223
mcm 2:9bf595cade4b 1224
mcm 2:9bf595cade4b 1225
mcm 2:9bf595cade4b 1226 /**
mcm 2:9bf595cade4b 1227 * @brief PCF85063_GetTime ( PCF85063_data_t* )
mcm 2:9bf595cade4b 1228 *
mcm 2:9bf595cade4b 1229 * @details It gets the time ( BCD format ).
mcm 2:9bf595cade4b 1230 *
mcm 2:9bf595cade4b 1231 * @param[in] N/A.
mcm 2:9bf595cade4b 1232 *
mcm 2:9bf595cade4b 1233 * @param[out] myActualTime: Current time ( BCD format: HHMMSS ).
mcm 2:9bf595cade4b 1234 *
mcm 2:9bf595cade4b 1235 *
mcm 2:9bf595cade4b 1236 * @return Status of PCF85063_GetTime.
mcm 2:9bf595cade4b 1237 *
mcm 2:9bf595cade4b 1238 *
mcm 2:9bf595cade4b 1239 * @author Manuel Caballero
mcm 2:9bf595cade4b 1240 * @date 19/February/2019
mcm 2:9bf595cade4b 1241 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 1242 * @pre N/A
mcm 2:9bf595cade4b 1243 * @warning N/A.
mcm 2:9bf595cade4b 1244 */
mcm 2:9bf595cade4b 1245 PCF85063::PCF85063_status_t PCF85063::PCF85063_GetTime ( PCF85063_data_t* myActualTime )
mcm 2:9bf595cade4b 1246 {
mcm 2:9bf595cade4b 1247 char cmd[3] = { 0U };
mcm 2:9bf595cade4b 1248 uint32_t aux;
mcm 2:9bf595cade4b 1249
mcm 2:9bf595cade4b 1250 /* Read the register */
mcm 2:9bf595cade4b 1251 cmd[0] = PCF85063_SECONDS;
mcm 2:9bf595cade4b 1252 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 1253 aux = _i2c.read ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 2:9bf595cade4b 1254
mcm 2:9bf595cade4b 1255 /* Parse the data */
mcm 2:9bf595cade4b 1256 if ( myActualTime->Time12H_24HMode == CONTROL_1_12_24_24_HOUR_MODE )
mcm 2:9bf595cade4b 1257 {
mcm 2:9bf595cade4b 1258 myActualTime->BCDtime = ( cmd[2] & ( HOURS_24_HOUR_MODE_TEN_PLACE_MASK | HOURS_HOURS_UNIT_PLACE_MASK ) );
mcm 2:9bf595cade4b 1259 }
mcm 2:9bf595cade4b 1260 else
mcm 2:9bf595cade4b 1261 {
mcm 2:9bf595cade4b 1262 myActualTime->BCDtime = ( cmd[2] & ( HOURS_12_HOUR_MODE_TEN_PLACE_MASK | HOURS_HOURS_UNIT_PLACE_MASK ) );
mcm 2:9bf595cade4b 1263 }
mcm 2:9bf595cade4b 1264
mcm 2:9bf595cade4b 1265 myActualTime->BCDtime <<= 8U;
mcm 2:9bf595cade4b 1266 myActualTime->BCDtime |= ( cmd[1] & ( MINUTES_MINUTES_TEN_PLACE_MASK | MINUTES_MINUTES_UNIT_PLACE_MASK ) );
mcm 2:9bf595cade4b 1267 myActualTime->BCDtime <<= 8U;
mcm 2:9bf595cade4b 1268 myActualTime->BCDtime |= ( cmd[0] & ( SECONDS_SECONDS_TEN_PLACE_MASK | SECONDS_SECONDS_UNIT_PLACE_MASK ) );
mcm 2:9bf595cade4b 1269
mcm 2:9bf595cade4b 1270
mcm 2:9bf595cade4b 1271
mcm 2:9bf595cade4b 1272 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 1273 {
mcm 2:9bf595cade4b 1274 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 1275 }
mcm 2:9bf595cade4b 1276 else
mcm 2:9bf595cade4b 1277 {
mcm 2:9bf595cade4b 1278 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 1279 }
mcm 2:9bf595cade4b 1280 }
mcm 2:9bf595cade4b 1281
mcm 2:9bf595cade4b 1282
mcm 2:9bf595cade4b 1283
mcm 2:9bf595cade4b 1284 /**
mcm 2:9bf595cade4b 1285 * @brief PCF85063_SetTime ( PCF85063_data_t )
mcm 2:9bf595cade4b 1286 *
mcm 2:9bf595cade4b 1287 * @details It sets the time ( BCD format ).
mcm 2:9bf595cade4b 1288 *
mcm 2:9bf595cade4b 1289 * @param[in] myNewTime: New current time ( BCD format: HHMMSS ).
mcm 2:9bf595cade4b 1290 *
mcm 2:9bf595cade4b 1291 * @param[out] N/A.
mcm 2:9bf595cade4b 1292 *
mcm 2:9bf595cade4b 1293 *
mcm 2:9bf595cade4b 1294 * @return Status of PCF85063_SetTime.
mcm 2:9bf595cade4b 1295 *
mcm 2:9bf595cade4b 1296 *
mcm 2:9bf595cade4b 1297 * @author Manuel Caballero
mcm 2:9bf595cade4b 1298 * @date 19/February/2019
mcm 2:9bf595cade4b 1299 * @version 19/February/2019 The ORIGIN
mcm 2:9bf595cade4b 1300 * @pre N/A
mcm 2:9bf595cade4b 1301 * @warning N/A.
mcm 2:9bf595cade4b 1302 */
mcm 2:9bf595cade4b 1303 PCF85063::PCF85063_status_t PCF85063::PCF85063_SetTime ( PCF85063_data_t myNewTime )
mcm 2:9bf595cade4b 1304 {
mcm 2:9bf595cade4b 1305 char cmd[4] = { 0U };
mcm 2:9bf595cade4b 1306 uint32_t aux;
mcm 2:9bf595cade4b 1307
mcm 2:9bf595cade4b 1308 /* Read the register */
mcm 2:9bf595cade4b 1309 cmd[0] = PCF85063_SECONDS;
mcm 2:9bf595cade4b 1310 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], 1U, true );
mcm 4:a5c06ac163f1 1311 aux = _i2c.read ( _PCF85063_Addr, &cmd[1], 3U );
mcm 2:9bf595cade4b 1312
mcm 2:9bf595cade4b 1313 /* Mask it and update the register */
mcm 2:9bf595cade4b 1314 cmd[1] &= ~( SECONDS_SECONDS_TEN_PLACE_MASK | SECONDS_SECONDS_UNIT_PLACE_MASK );
mcm 2:9bf595cade4b 1315 cmd[1] |= (char)( myNewTime.BCDtime & 0x0000FF );
mcm 2:9bf595cade4b 1316 cmd[2] &= ~( MINUTES_MINUTES_TEN_PLACE_MASK | MINUTES_MINUTES_UNIT_PLACE_MASK );
mcm 2:9bf595cade4b 1317 cmd[2] |= (char)( ( myNewTime.BCDtime & 0x00FF00 ) >> 8U );
mcm 2:9bf595cade4b 1318
mcm 2:9bf595cade4b 1319 if ( myNewTime.Time12H_24HMode == CONTROL_1_12_24_24_HOUR_MODE )
mcm 2:9bf595cade4b 1320 {
mcm 2:9bf595cade4b 1321 cmd[3] &= ~( HOURS_24_HOUR_MODE_TEN_PLACE_MASK | HOURS_HOURS_UNIT_PLACE_MASK );
mcm 2:9bf595cade4b 1322 }
mcm 2:9bf595cade4b 1323 else
mcm 2:9bf595cade4b 1324 {
mcm 2:9bf595cade4b 1325 cmd[3] &= ~( HOURS_12_HOUR_MODE_TEN_PLACE_MASK | HOURS_HOURS_UNIT_PLACE_MASK );
mcm 2:9bf595cade4b 1326 }
mcm 2:9bf595cade4b 1327 cmd[3] |= (char)( ( myNewTime.BCDtime & 0xFF0000 ) >> 16U );
mcm 2:9bf595cade4b 1328 aux = _i2c.write ( _PCF85063_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:9bf595cade4b 1329
mcm 2:9bf595cade4b 1330
mcm 2:9bf595cade4b 1331
mcm 2:9bf595cade4b 1332
mcm 2:9bf595cade4b 1333 if ( aux == I2C_SUCCESS )
mcm 2:9bf595cade4b 1334 {
mcm 2:9bf595cade4b 1335 return PCF85063_SUCCESS;
mcm 2:9bf595cade4b 1336 }
mcm 2:9bf595cade4b 1337 else
mcm 2:9bf595cade4b 1338 {
mcm 2:9bf595cade4b 1339 return PCF85063_FAILURE;
mcm 2:9bf595cade4b 1340 }
mcm 2:9bf595cade4b 1341 }