Extended MaximInterface

Dependents:   mbed_DS28EC20_GPIO

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