@@ -13,11 +13,12 @@ def getPiRevision():
1313 "Gets the version number of the Raspberry Pi board"
1414 # Courtesy quick2wire-python-api
1515 # https://github.com/quick2wire/quick2wire-python-api
16+ # Updated revision info from: http://elinux.org/RPi_HardwareHistory#Board_Revision_History
1617 try :
1718 with open ('/proc/cpuinfo' ,'r' ) as f :
1819 for line in f :
1920 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
2122 except :
2223 return 0
2324
@@ -114,22 +115,25 @@ def readS8(self, reg):
114115 except IOError , err :
115116 return self .errMsg ()
116117
117- def readU16 (self , reg ):
118+ def readU16 (self , reg , little_endian = True ):
118119 "Reads an unsigned 16-bit value from the I2C device"
119120 try :
120121 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 )
121126 if (self .debug ):
122127 print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self .address , result & 0xFFFF , reg )
123128 return result
124129 except IOError , err :
125130 return self .errMsg ()
126131
127- def readS16 (self , reg ):
132+ def readS16 (self , reg , little_endian = True ):
128133 "Reads a signed 16-bit value from the I2C device"
129134 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
133137 return result
134138 except IOError , err :
135139 return self .errMsg ()
0 commit comments