43 from datetime
import datetime, date, time
71 CON_DEFAULT = 0b00000011
78 I2C.__init__(self, 0x6F)
80 Memory.__init__(self, 64)
83 if not con
in range(0, 0xFF + 1):
84 raise ValueError(
"control value %d out of range [%d..%d]" % (con, 0x00, 0xFF))
87 self.__setCon__(self.CON_DEFAULT)
99 return [Clock.__family__(self), Memory.__family__(self)]
105 data = self.readRegister(self.SEC)
106 return self.BcdBits2Int(data & self.SEC_MASK)
110 secValue = self.Int2BcdBits(value)
111 secRegisterData = self.readRegister(self.SEC)
112 self.writeRegister(self.SEC, (secRegisterData & ~self.SEC_MASK) | (secValue & self.SEC_MASK))
115 data = self.readRegister(self.MIN)
116 return self.BcdBits2Int(data & self.MIN_MASK)
119 self.writeRegister(self.MIN, self.Int2BcdBits(value & self.MIN_MASK))
122 data = self.readRegister(self.HRS)
123 return self.BcdBits2Int(data & self.HRS_MASK)
127 hrsValue = self.Int2BcdBits(value)
128 hrsRegisterData = self.readRegister(self.HRS)
129 self.writeRegister(self.HRS, (hrsRegisterData & ~self.HRS_MASK) | (hrsValue & self.HRS_MASK))
132 data = self.readRegister(self.DAY)
133 return self.BcdBits2Int(data & self.DAY_MASK)
136 self.writeRegister(self.DAY, self.Int2BcdBits(value & self.DAY_MASK))
139 data = self.readRegister(self.MON)
140 return self.BcdBits2Int(data & self.MON_MASK)
144 monValue = self.Int2BcdBits(value)
145 monRegisterData = self.readRegister(self.MON)
146 self.writeRegister(self.MON, (monRegisterData & ~self.MON_MASK) | (monValue & self.MON_MASK))
149 data = self.readRegister(self.YRS)
150 return 2000 + self.BcdBits2Int(data & self.YRS_MASK)
153 self.writeRegister(self.YRS, self.Int2BcdBits((value - 2000) & self.YRS_MASK))
156 data = self.readRegister(self.DOW)
157 return self.BcdBits2Int(data & self.DOW_MASK)
161 dowValue = self.Int2BcdBits(value)
162 dowRegisterData = self.readRegister(self.DOW)
163 self.writeRegister(self.DOW, (dowRegisterData & ~self.DOW_MASK) | (dowValue & self.DOW_MASK))
173 data = self.readRegisters(self.SEC, 7)
174 second = self.BcdBits2Int(data[0] & self.SEC_MASK)
175 minute = self.BcdBits2Int(data[1] & self.MIN_MASK)
176 hour = self.BcdBits2Int(data[2] & self.HRS_MASK)
177 day = self.BcdBits2Int(data[4] & self.DAY_MASK)
178 month = self.BcdBits2Int(data[5] & self.MON_MASK)
179 year = self.BcdBits2Int(data[6] & self.YRS_MASK) + 2000
180 return datetime(year, month, day, hour, minute, second)
183 data = self.readRegisters(self.DAY, 3)
184 day = self.BcdBits2Int(data[0] & self.DAY_MASK)
185 month = self.BcdBits2Int(data[1] & self.MON_MASK)
186 year = self.BcdBits2Int(data[2] & self.YRS_MASK) + 2000
187 return date(year, month, day)
190 data = self.readRegisters(self.SEC, 3)
191 second = self.BcdBits2Int(data[0] & self.SEC_MASK)
192 minute = self.BcdBits2Int(data[1] & self.MIN_MASK)
193 hour = self.BcdBits2Int(data[2] & self.HRS_MASK)
194 return time(hour, minute, second)
200 return self.readRegister(self.RAM + address)
203 self.writeRegister(self.RAM + address, value)
206 data = self.readRegisters(self.RAM + address * 2, 2)
207 return (data[0] << 8) + data[1]
211 data[0] = (value >> 8) & 0xFF
212 data[1] = value & 0xFF
213 self.writeRegisters(self.RAM + address * 2, data)
216 data = self.readRegisters(self.RAM + address * 4, 4)
217 return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]
221 data[0] = (value >> 24) & 0xFF
222 data[1] = (value >> 16) & 0xFF
223 data[2] = (value >> 8) & 0xFF
224 data[3] = value & 0xFF
225 self.writeRegisters(self.RAM + address * 4, data)
233 secRegisterData = self.readRegister(self.SEC)
234 self.writeRegister(self.SEC, (secRegisterData | self.ST))
239 secRegisterData = self.readRegister(self.SEC)
240 self.writeRegister(self.SEC, (secRegisterData & ~self.ST))
245 data = self.readRegister(self.CON)
246 return (data & self.CON_MASK)
249 self.writeRegister(self.CON, (value & self.CON_MASK))