@@ -106,25 +106,49 @@ def readU8(self, register):
106
106
107
107
def readS8 (self , register ):
108
108
"""Read a signed byte from the specified register."""
109
- result = self ._bus . read_byte_data ( self . _address , register ) & 0xFF
109
+ result = self .readU8 ( register )
110
110
if result > 127 :
111
111
result -= 256
112
- self ._logger .debug ("Read 0x%02X from register 0x%02X" ,
113
- result , register )
114
112
return result
115
113
116
- def readU16 (self , register ):
117
- """Read an unsigned 16-bit value from the specified register."""
114
+ def readU16 (self , register , little_endian = True ):
115
+ """Read an unsigned 16-bit value from the specified register, with the
116
+ specified endianness (default little endian, or least significant byte
117
+ first)."""
118
118
result = self ._bus .read_word_data (self ._address ,register ) & 0xFFFF
119
119
self ._logger .debug ("Read 0x%04X from register pair 0x%02X, 0x%02X" ,
120
- result , register , register + 1 )
120
+ result , register , register + 1 )
121
+ # Swap bytes if using big endian because read_word_data assumes little
122
+ # endian on ARM (little endian) systems.
123
+ if not little_endian :
124
+ result = ((result << 8 ) & 0xFF00 ) + (result >> 8 )
121
125
return result
122
126
123
- def readS16 (self , register ):
124
- """Read a signed 16-bit value from the specified register."""
125
- result = self ._bus .read_word_data (self ._address ,register )
127
+ def readS16 (self , register , little_endian = True ):
128
+ """Read a signed 16-bit value from the specified register, with the
129
+ specified endianness (default little endian, or least significant byte
130
+ first)."""
131
+ result = self .readU16 (register , little_endian )
126
132
if result > 32767 :
127
133
result -= 65536
128
- self ._logger .debug ("Read 0x%04X from register pair 0x%02X, 0x%02X" ,
129
- result , register , register + 1 )
130
134
return result
135
+
136
+ def readU16LE (self , register ):
137
+ """Read an unsigned 16-bit value from the specified register, in little
138
+ endian byte order."""
139
+ return self .readU16 (register , little_endian = True )
140
+
141
+ def readU16BE (self , register ):
142
+ """Read an unsigned 16-bit value from the specified register, in big
143
+ endian byte order."""
144
+ return self .readU16 (register , little_endian = False )
145
+
146
+ def readS16LE (self , register ):
147
+ """Read a signed 16-bit value from the specified register, in little
148
+ endian byte order."""
149
+ return self .readS16 (register , little_endian = True )
150
+
151
+ def readS16BE (self , register ):
152
+ """Read a signed 16-bit value from the specified register, in big
153
+ endian byte order."""
154
+ return self .readS16 (register , little_endian = False )
0 commit comments