def __init__(self, data: bytes, protocolVersion: int = 1): if len(data) != 16: raise ValueError self._startDate = OralBDate(data[0:4]).datetime durationS = struct.unpack("<H", data[4:6])[0] self._duration = timedelta(seconds=durationS) self._eventCount = data[6] self._prefMode = BrushMode(data[7]) durationS = struct.unpack("<H", data[8:10])[0] self._timeUnderPressure = timedelta(seconds=durationS) self._nPressure = data[10] self._finalBatteryState = data[11] if (protocolVersion == 1): self._parseProtocolV1(data) elif protocolVersion == 2 or protocolVersion == 3: self._parseProtocolV2Or3(data) elif protocolVersion == 4: self._parseProtocolV4(data)
def test_fromDatetimeConvertToOralBDate(self): byteSeq1 = b"\x00\x00\x00\x00" date1 = datetime(year=2000, month=1, day=1) oralb1 = OralBDate(byteSeq1) self.assertEqual(oralb1.toBytes(), byteSeq1) byteSeq2 = b"\x05\x00\x00\x00" date2 = datetime(year=2000, month=1, day=1, second=5) oralb2 = OralBDate(byteSeq2) self.assertEqual(oralb2.toBytes(), byteSeq2)
def test_theConstructorThrowIfTheDataAreLessThan4Bytes(self): with self.assertRaises(ValueError): OralBDate(b"\x00")
def test_toByteReturnTheOriginalSequence(self): byteSeq = b"\x01\x02\x03\x04" date = OralBDate(byteSeq) self.assertEqual(byteSeq, date.toBytes())
def test_theBytesAreInLittleEndian(self): date = OralBDate(b"\x01\x00\x00\x00") self.assertEqual(date.datetime, datetime(year=2000, month=1, day=1, second=1))
def test_theBytesAreTheSecondAfter2000gen1(self): date = OralBDate(b"\x00\x00\x00\x00") self.assertEqual(date.datetime, datetime(year=2000, month=1, day=1))
def _parseProtocolV1(self, data: bytes): self._lastCharge = OralBDate(data[12:16]).datetime self._sessionId = -1 self._userId = 0 self._sessionTargetTime = -1 self._numberOfSectors = -1
def setCurrentTime(self, now=datetime.now()): self._writeControl(0x37, 0x26) date = OralBDate.fromDatetime(now) self._currentDateChar.write(date.toBytes())
def readCurrentTime(self) -> datetime: # self._writeControl(0x01,0x00) #seemsnot needed... rawSecAfter2000 = self._currentDateChar.read() return OralBDate(rawSecAfter2000).datetime