aboutsummaryrefslogtreecommitdiff
path: root/apps/drivers/device/i2c.cpp
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-01-14 00:18:05 -0800
committerpx4dev <px4@purgatory.org>2013-01-14 00:18:05 -0800
commit6e291ddedc8b2d7bfeae8029a37df0b581262796 (patch)
tree0b28019942cd153efd710799be0528783f70bc70 /apps/drivers/device/i2c.cpp
parent4e38615595abd9d27d0cb000caafb98cc3670abe (diff)
downloadpx4-firmware-6e291ddedc8b2d7bfeae8029a37df0b581262796.tar.gz
px4-firmware-6e291ddedc8b2d7bfeae8029a37df0b581262796.tar.bz2
px4-firmware-6e291ddedc8b2d7bfeae8029a37df0b581262796.zip
Add a mechanism for sending multi-part messages to the I2C driver base class.
Diffstat (limited to 'apps/drivers/device/i2c.cpp')
-rw-r--r--apps/drivers/device/i2c.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/apps/drivers/device/i2c.cpp b/apps/drivers/device/i2c.cpp
index 474190d83..c513ae2b6 100644
--- a/apps/drivers/device/i2c.cpp
+++ b/apps/drivers/device/i2c.cpp
@@ -166,4 +166,24 @@ I2C::transfer(const uint8_t *send, unsigned send_len, uint8_t *recv, unsigned re
}
+int
+I2C::transfer(i2c_msg_s *msgv, unsigned msgs)
+{
+ for (unsigned i = 0; i < msgs; i++)
+ msgv[i].addr = _address;
+
+ /*
+ * I2C architecture means there is an unavoidable race here
+ * if there are any devices on the bus with a different frequency
+ * preference. Really, this is pointless.
+ */
+ I2C_SETFREQUENCY(_dev, _frequency);
+ ret = I2C_TRANSFER(_dev, msgv, msgs);
+
+ if (ret != OK)
+ up_i2creset(_dev);
+
+ return ret;
+}
+
} // namespace device \ No newline at end of file