@@ -13,11 +13,12 @@ def getPiRevision():
13
13
"Gets the version number of the Raspberry Pi board"
14
14
# Courtesy quick2wire-python-api
15
15
# https://github.com/quick2wire/quick2wire-python-api
16
+ # Updated revision info from: http://elinux.org/RPi_HardwareHistory#Board_Revision_History
16
17
try :
17
18
with open ('/proc/cpuinfo' ,'r' ) as f :
18
19
for line in f :
19
20
if line .startswith ('Revision' ):
20
- return 1 if line .rstrip ()[- 1 ] in ['1 ' ,'2 ' ] else 2
21
+ return 1 if line .rstrip ()[- 1 ] in ['2 ' ,'3 ' ] else 2
21
22
except :
22
23
return 0
23
24
@@ -114,22 +115,25 @@ def readS8(self, reg):
114
115
except IOError , err :
115
116
return self .errMsg ()
116
117
117
- def readU16 (self , reg ):
118
+ def readU16 (self , reg , little_endian = True ):
118
119
"Reads an unsigned 16-bit value from the I2C device"
119
120
try :
120
121
result = self .bus .read_word_data (self .address ,reg )
122
+ # Swap bytes if using big endian because read_word_data assumes little
123
+ # endian on ARM (little endian) systems.
124
+ if not little_endian :
125
+ result = ((result << 8 ) & 0xFF00 ) + (result >> 8 )
121
126
if (self .debug ):
122
127
print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self .address , result & 0xFFFF , reg )
123
128
return result
124
129
except IOError , err :
125
130
return self .errMsg ()
126
131
127
- def readS16 (self , reg ):
132
+ def readS16 (self , reg , little_endian = True ):
128
133
"Reads a signed 16-bit value from the I2C device"
129
134
try :
130
- result = self .bus .read_word_data (self .address ,reg )
131
- if (self .debug ):
132
- print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self .address , result & 0xFFFF , reg )
135
+ result = self .readU16 (reg ,little_endian )
136
+ if result > 32767 : result -= 65536
133
137
return result
134
138
except IOError , err :
135
139
return self .errMsg ()
0 commit comments