Extended MaximInterface
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) {