RTC DS3231 impostare allarmi

ziopippo:
Ho risolto in parte il problema dell'anno (non so neanche io come ed il perchè ho dovuto mettere quelle strane sottrazioni di anni: tmpYear = year() - 1999; e tm.Year = tmpYear - 2018;) ma almeno ora mi memorizza l'anno da me scelto in modo corretto.

L'RTC come anno memorizza un valore compreso tra 0 e 99 (in formato BCD nel registro 0x06), in più il passaggio da 99 a 0 (quindi allo scadere del secolo) cambia il bit più alto del registro 0x05 (che normalmente contiene solo il mese da 1 a 12 sempre in BCD), per cui in teoria si potrebbe gestire un range di 200 anni.

Diciamo che lasciando perdere il prossimo secolo, almeno i valori da 0 (2000) a 99 (2099) li gestisce senza alcun problema.

Ma qui entra in gioco la libreria, che evidentemente "fa qualcosa" alterando i valori letti/scritti per rientrare in un altro range (che magari al programmatore sembrava più sensato). E il dubbio è lecito visto che nel post forum.arduino.cc/index.php?topic=545699.msg3737114#msg3737114 si evidenzia che la libreria effettua questa operazione:

Wire.write(dec2bcd(tmYearToY2k(tm.Year)));

Quindi mi domando, cosa fa la funzione 'tmYearToY2k' ? (e immagino vi sia anche la corrispondente in lettura che effettua l'operazione inversa).