6 #ifndef ACE_TIME_HW_DS3231_MODULE_H
7 #define ACE_TIME_HW_DS3231_MODULE_H
10 #include <AceCommon.h>
11 #include "HardwareDateTime.h"
12 #include "HardwareTemperature.h"
17 class HardwareDateTime;
18 class HardwareTemperature;
42 template <
typename T_WIREI>
45 static const uint8_t kAddress = 0x68;
50 : mWireInterface(wireInterface) {}
54 using ace_common::bcdToDec;
56 mWireInterface.beginTransmission(kAddress);
57 mWireInterface.write(0);
58 mWireInterface.endTransmission();
61 mWireInterface.requestFrom(kAddress, (uint8_t) 7);
62 dateTime->second = bcdToDec(mWireInterface.read() & 0x7F);
63 dateTime->minute = bcdToDec(mWireInterface.read());
64 dateTime->hour = bcdToDec(mWireInterface.read() & 0x3F);
65 dateTime->dayOfWeek = bcdToDec(mWireInterface.read());
66 dateTime->day = bcdToDec(mWireInterface.read());
67 dateTime->month = bcdToDec(mWireInterface.read());
68 dateTime->year = bcdToDec(mWireInterface.read());
73 using ace_common::decToBcd;
75 mWireInterface.beginTransmission(kAddress);
76 mWireInterface.write(0);
77 mWireInterface.write(decToBcd(dateTime.second));
78 mWireInterface.write(decToBcd(dateTime.minute));
79 mWireInterface.write(decToBcd(dateTime.hour));
80 mWireInterface.write(decToBcd(dateTime.dayOfWeek));
81 mWireInterface.write(decToBcd(dateTime.day));
82 mWireInterface.write(decToBcd(dateTime.month));
83 mWireInterface.write(decToBcd(dateTime.year));
84 mWireInterface.endTransmission();
89 mWireInterface.beginTransmission(kAddress);
90 mWireInterface.write(0x11);
91 mWireInterface.endTransmission();
93 mWireInterface.requestFrom(kAddress, (uint8_t) 2);
94 temperature->msb = mWireInterface.read();
95 temperature->lsb = mWireInterface.read();
99 T_WIREI mWireInterface;