@@ -48,12 +48,13 @@ def __init__(self, num_bits, register_address, lowest_bit, register_width=1):
48
48
self .bit_mask = 0
49
49
for _ in range (num_bits ):
50
50
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
+
54
55
self .buffer = bytearray (1 + register_width )
55
56
self .buffer [0 ] = register_address
56
- self .lowest_bit = lowest_bit
57
+ self .lowest_bit = lowest_bit % 8 # lowest bit within byte
57
58
self .byte = lowest_bit // 8 + 1
58
59
59
60
def __get__ (self , obj , objtype = None ):
@@ -69,6 +70,7 @@ def __set__(self, obj, value):
69
70
with obj .i2c_device as i2c :
70
71
i2c .write (self .buffer , end = 1 , stop = False )
71
72
i2c .readinto (self .buffer , start = 1 )
73
+
72
74
# Set all of our bits to 1.
73
75
self .buffer [self .byte ] |= self .bit_mask
74
76
# Set all 0 bits to 0 by anding together.
@@ -88,4 +90,4 @@ class ROBits(RWBits):
88
90
:param int register_width: The number of bytes in the register. Defaults to 1.
89
91
"""
90
92
def __set__ (self , obj , value ):
91
- raise AttributeError ()
93
+ raise AttributeError ()
0 commit comments