@@ -208,9 +208,56 @@ bool RTCC_MCP7940N::IsOscillatorRunning()
208
208
return this ->GetFlag (0x03 , B100000);
209
209
}
210
210
211
- bool RTCC_MCP7940N::HasPowerFailed ()
212
- {
213
- return this ->GetFlag (0x03 , B10000);
211
+ bool RTCC_MCP7940N::HasPowerFailed (rtcc_time *dwTime, rtcc_time *upTime)
212
+ {
213
+ byte year;
214
+ bool pwFail;
215
+
216
+ year = this ->GetByte (0x06 );
217
+ pwFail = this ->GetFlag (0x03 , B10000);
218
+
219
+ if (pwFail) {
220
+
221
+ // set read address to POWER DOWN Time-Stamp
222
+ Wire.beginTransmission (this ->i2c_addr );
223
+ Wire.write (0x18 );
224
+ Wire.endTransmission ();
225
+
226
+ // Request 8 bytes for both Time-stamps
227
+ Wire.requestFrom (this ->i2c_addr , 8 , true );
228
+ byte time_data[8 ];
229
+ Wire.readBytes (time_data, 8 );
230
+
231
+ // convert
232
+ dwTime->secten = 0 ; // (time_data[0] & B1110000) >> 4;
233
+ dwTime->secone = 0 ; // time_data[0] & B1111;
234
+ dwTime->minten = (time_data[0 ] & B111000) >> 4 ;
235
+ dwTime->minone = time_data[0 ] & B1111;
236
+ dwTime->hrten = (time_data[1 ] & B110000) >> 4 ;
237
+ dwTime->hrone = time_data[1 ] & B1111;
238
+ dwTime->wkday = 0 ; // time_data[3] & B111; not provided
239
+ dwTime->dateten = (time_data[2 ] & B110000) >> 4 ;
240
+ dwTime->dateone = time_data[2 ] & B1111;
241
+ dwTime->mthten = (time_data[3 ] & B10000) >> 4 ;
242
+ dwTime->mthone = time_data[3 ] & B1111;
243
+ dwTime->yrten = (year & B11110000) >> 4 ;
244
+ dwTime->yrone = year & B1111;
245
+ dwTime->secten = 0 ; // (time_data[0] & B1110000) >> 4;
246
+ dwTime->secone = 0 ; // time_data[0] & B1111;
247
+ dwTime->minten = (time_data[4 ] & B111000) >> 4 ;
248
+ dwTime->minone = time_data[4 ] & B1111;
249
+ dwTime->hrten = (time_data[5 ] & B110000) >> 4 ;
250
+ dwTime->hrone = time_data[5 ] & B1111;
251
+ dwTime->wkday = 0 ; // time_data[3] & B111; not provided
252
+ dwTime->dateten = (time_data[6 ] & B110000) >> 4 ;
253
+ dwTime->dateone = time_data[6 ] & B1111;
254
+ dwTime->mthten = (time_data[7 ] & B10000) >> 4 ;
255
+ dwTime->mthone = time_data[7 ] & B1111;
256
+ dwTime->yrten = (year & B11110000) >> 4 ;
257
+ dwTime->yrone = year & B1111;
258
+ }
259
+
260
+ return pwFail;
214
261
}
215
262
216
263
bool RTCC_MCP7940N::GetBatteryEnabled ()
0 commit comments