Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbed_DS28EC20_GPIO
Diff: Links/I2CMaster.hpp
- Revision:
- 3:f818ea5172ed
- Parent:
- 0:f77ad7f72d04
- Child:
- 6:a8c83a2e6fa4
--- a/Links/I2CMaster.hpp Mon Nov 06 17:46:41 2017 -0600
+++ b/Links/I2CMaster.hpp Thu Jan 11 13:50:39 2018 -0600
@@ -40,41 +40,74 @@
namespace MaximInterface {
+/// I2C master interface.
class I2CMaster {
public:
enum ErrorValue {
NackError = 1 ///< Transaction stopped due to a NACK from the slave device.
};
- enum AckStatus { Ack = 1, Nack = 0 };
+ enum AckStatus { Nack, Ack };
virtual ~I2CMaster() {}
+ /// Send start condition and address on the bus.
+ /// @param address Address with R/W bit.
virtual error_code start(uint_least8_t address) = 0;
+
+ /// Send stop condition on the bus.
virtual error_code stop() = 0;
+
+ /// Write data byte to the bus.
virtual error_code writeByte(uint_least8_t data) = 0;
+
+ /// Write data block to the bus.
MaximInterface_EXPORT virtual error_code
writeBlock(const uint_least8_t * data, size_t dataLen);
- MaximInterface_EXPORT virtual error_code
- writePacket(uint_least8_t address, const uint_least8_t * data, size_t dataLen,
- bool sendStop);
+
+ /// Perform a complete write transaction on the bus with optional stop
+ /// condition.
+ /// @param address Address in 8-bit format.
+ /// @param sendStop
+ /// True to send a stop condition or false to set up a repeated start.
error_code writePacket(uint_least8_t address, const uint_least8_t * data,
- size_t dataLen) {
- return writePacket(address, data, dataLen, true);
+ size_t dataLen, bool sendStop = true) {
+ return writePacketImpl(address, data, dataLen, sendStop);
}
+
+ /// Read data byte from the bus.
+ /// @param status Determines whether an ACK or NACK is sent after reading.
+ /// @param[out] data Data read from the bus if successful.
virtual error_code readByte(AckStatus status, uint_least8_t & data) = 0;
+
+ /// Read data block from the bus.
+ /// @param status Determines whether an ACK or NACK is sent after reading.
+ /// @param[out] data Data read from the bus if successful.
+ /// @param dataLen Number of bytes to read and length of data.
MaximInterface_EXPORT virtual error_code
readBlock(AckStatus status, uint_least8_t * data, size_t dataLen);
- MaximInterface_EXPORT virtual error_code readPacket(uint_least8_t address,
- uint_least8_t * data,
- size_t dataLen,
- bool sendStop);
+
+ /// Perform a complete read transaction on the bus with optional stop
+ /// condition.
+ /// @param address Address in 8-bit format.
+ /// @param sendStop
+ /// True to send a stop condition or false to set up a repeated start.
error_code readPacket(uint_least8_t address, uint_least8_t * data,
- size_t dataLen) {
- return readPacket(address, data, dataLen, true);
+ size_t dataLen, bool sendStop = true) {
+ return readPacketImpl(address, data, dataLen, sendStop);
}
MaximInterface_EXPORT static const error_category & errorCategory();
+
+protected:
+ MaximInterface_EXPORT virtual error_code
+ writePacketImpl(uint_least8_t address, const uint_least8_t * data,
+ size_t dataLen, bool sendStop);
+
+ MaximInterface_EXPORT virtual error_code readPacketImpl(uint_least8_t address,
+ uint_least8_t * data,
+ size_t dataLen,
+ bool sendStop);
};
inline error_code make_error_code(I2CMaster::ErrorValue e) {