Skip to content

Commit 5c0ec65

Browse files
ladyadadhalbert
authored andcommitted
use struct when available, change map() to list comp (#4)
1 parent 0034773 commit 5c0ec65

File tree

2 files changed

+18
-21
lines changed

2 files changed

+18
-21
lines changed

adafruit_fxos8700.py

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@
3131
3232
* Author(s): Tony DiCola
3333
"""
34-
import ustruct
34+
try:
35+
import ustruct as struct
36+
except ImportError:
37+
import struct
3538

3639
import adafruit_bus_device.i2c_device as i2c_device
3740
from micropython import const
@@ -146,9 +149,9 @@ def read_raw_accel_mag(self):
146149
self._BUFFER[0] = _FXOS8700_REGISTER_OUT_X_MSB
147150
i2c.write(self._BUFFER, end=1, stop=False)
148151
i2c.readinto(self._BUFFER, end=6)
149-
accel_raw_x = ustruct.unpack_from('>H', self._BUFFER[0:2])[0]
150-
accel_raw_y = ustruct.unpack_from('>H', self._BUFFER[2:4])[0]
151-
accel_raw_z = ustruct.unpack_from('>H', self._BUFFER[4:6])[0]
152+
accel_raw_x = struct.unpack_from('>H', self._BUFFER[0:2])[0]
153+
accel_raw_y = struct.unpack_from('>H', self._BUFFER[2:4])[0]
154+
accel_raw_z = struct.unpack_from('>H', self._BUFFER[4:6])[0]
152155
# Convert accelerometer data to signed 14-bit value from 16-bit
153156
# left aligned 2's compliment value.
154157
accel_raw_x = _twos_comp(accel_raw_x >> 2, 14)
@@ -160,38 +163,32 @@ def read_raw_accel_mag(self):
160163
self._BUFFER[0] = _FXOS8700_REGISTER_MOUT_X_MSB
161164
i2c.write(self._BUFFER, end=1, stop=False)
162165
i2c.readinto(self._BUFFER, end=6)
163-
mag_raw_x = ustruct.unpack_from('>h', self._BUFFER[0:2])[0]
164-
mag_raw_y = ustruct.unpack_from('>h', self._BUFFER[2:4])[0]
165-
mag_raw_z = ustruct.unpack_from('>h', self._BUFFER[4:6])[0]
166+
mag_raw_x = struct.unpack_from('>h', self._BUFFER[0:2])[0]
167+
mag_raw_y = struct.unpack_from('>h', self._BUFFER[2:4])[0]
168+
mag_raw_z = struct.unpack_from('>h', self._BUFFER[4:6])[0]
166169
return ((accel_raw_x, accel_raw_y, accel_raw_z),
167170
(mag_raw_x, mag_raw_y, mag_raw_z))
168171

169-
# pylint is confused and incorrectly marking this function as bad return
170-
# types. Perhaps it doesn't understand map returns an iterable value.
171-
# Disable the warning.
172-
# pylint: disable=inconsistent-return-statements
173172
@property
174173
def accelerometer(self):
175174
"""Read the acceleration from the accelerometer and return its X, Y, Z axis values as a
176175
3-tuple in m/s^2.
177176
"""
178177
accel_raw, _ = self.read_raw_accel_mag()
179178
# Convert accel values to m/s^2
179+
factor = 0
180180
if self._accel_range == ACCEL_RANGE_2G:
181-
return map(lambda x: x * _ACCEL_MG_LSB_2G * _SENSORS_GRAVITY_STANDARD,
182-
accel_raw)
181+
factor = _ACCEL_MG_LSB_2G
183182
elif self._accel_range == ACCEL_RANGE_4G:
184-
return map(lambda x: x * _ACCEL_MG_LSB_4G * _SENSORS_GRAVITY_STANDARD,
185-
accel_raw)
183+
factor = _ACCEL_MG_LSB_4G
186184
elif self._accel_range == ACCEL_RANGE_8G:
187-
return map(lambda x: x * _ACCEL_MG_LSB_8G * _SENSORS_GRAVITY_STANDARD,
188-
accel_raw)
189-
# pylint: enable=inconsistent-return-statements
185+
factor = _ACCEL_MG_LSB_8G
186+
return [x * factor * _SENSORS_GRAVITY_STANDARD for x in accel_raw]
190187

191188
@property
192189
def magnetometer(self):
193190
"""Read the magnetometer values and return its X, Y, Z axis values as a 3-tuple in uTeslas.
194191
"""
195192
_, mag_raw = self.read_raw_accel_mag()
196193
# Convert mag values to uTesla
197-
return map(lambda x: x * _MAG_UT_LSB, mag_raw)
194+
return [x * _MAG_UT_LSB for x in mag_raw]

examples/simpletest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
accel_x, accel_y, accel_z = sensor.accelerometer
2424
mag_x, mag_y, mag_z = sensor.magnetometer
2525
# Print values.
26-
print('Acceleration (m/s^2): ({0:0.3f},{1:0.3f},{2:0.3f})'.format(accel_x, accel_y, accel_z))
27-
print('Magnetometer (uTesla): ({0:0.3f},{1:0.3f},{2:0.3f})'.format(mag_x, mag_y, mag_z))
26+
print('Acceleration (m/s^2): ({0:0.3f}, {1:0.3f}, {2:0.3f})'.format(accel_x, accel_y, accel_z))
27+
print('Magnetometer (uTesla): ({0:0.3f}, {1:0.3f}, {2:0.3f})'.format(mag_x, mag_y, mag_z))
2828
# Delay for a second.
2929
time.sleep(1.0)

0 commit comments

Comments
 (0)