Skip to content

Commit e6c0b45

Browse files
authored
Merge pull request #21 from ladyada/master
Handle multi-byte registers with aplomb
2 parents 94dcbb7 + 9a8090a commit e6c0b45

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

adafruit_register/i2c_bit.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ class RWBit:
4343
:param int register_width: The number of bytes in the register. Defaults to 1.
4444
"""
4545
def __init__(self, register_address, bit, register_width=1):
46-
self.bit_mask = 1 << bit
46+
self.bit_mask = 1 << (bit%8) # the bitmask *within* the byte!
4747
self.buffer = bytearray(1 + register_width)
4848
self.buffer[0] = register_address
49-
self.byte = bit // 8 + 1
49+
self.byte = bit // 8 + 1 # the byte number within the buffer
5050

5151
def __get__(self, obj, objtype=None):
5252
with obj.i2c_device as i2c:

adafruit_register/i2c_bits.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,13 @@ def __init__(self, num_bits, register_address, lowest_bit, register_width=1):
4848
self.bit_mask = 0
4949
for _ in range(num_bits):
5050
self.bit_mask = (self.bit_mask << 1) + 1
51-
self.bit_mask = self.bit_mask << lowest_bit
52-
if self.bit_mask >= (1 << 8):
53-
raise ValueError()
51+
self.bit_mask = self.bit_mask << (lowest_bit%8)
52+
if self.bit_mask >= 0xFF:
53+
raise ValueError("Cannot have more bits than fit in a single byte")
54+
5455
self.buffer = bytearray(1 + register_width)
5556
self.buffer[0] = register_address
56-
self.lowest_bit = lowest_bit
57+
self.lowest_bit = lowest_bit % 8 # lowest bit within byte
5758
self.byte = lowest_bit // 8 + 1
5859

5960
def __get__(self, obj, objtype=None):

0 commit comments

Comments
 (0)