Device interface library for multiple platforms including Mbed.

Dependents:   DeepCover Embedded Security in IoT MaximInterface MAXREFDES155#

Maxim Interface is a library framework focused on providing flexible and expressive hardware interfaces. Both communication interfaces such as I2C and 1-Wire and device interfaces such as DS18B20 are supported. Modern C++ concepts are used extensively while keeping compatibility with C++98/C++03 and requiring no external dependencies. The embedded-friendly design does not depend on exceptions or RTTI.

The full version of the project is hosted on GitLab: https://gitlab.com/iabenz/MaximInterface

Revision:
8:5ea891c7d1a1
Parent:
7:9cd16581b578
diff -r 9cd16581b578 -r 5ea891c7d1a1 MaximInterfaceMbed/I2CMaster.cpp
--- a/MaximInterfaceMbed/I2CMaster.cpp	Mon Jul 22 11:44:07 2019 -0500
+++ b/MaximInterfaceMbed/I2CMaster.cpp	Mon Sep 16 11:13:37 2019 -0500
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+* Copyright (C) Maxim Integrated Products, Inc., All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
@@ -36,40 +36,49 @@
 
 using namespace MaximInterfaceCore;
 
-error_code I2CMaster::start(uint_least8_t address) {
+Result<void> I2CMaster::start(uint_least8_t address) {
   i2c->start();
   return writeByte(address);
 }
 
-error_code I2CMaster::stop() {
+Result<void> I2CMaster::stop() {
   i2c->stop();
-  return error_code();
+  return none;
 }
 
-error_code I2CMaster::writeByte(uint_least8_t data) {
-  return (i2c->write(data) == 1) ? error_code() : make_error_code(NackError);
+Result<void> I2CMaster::writeByte(uint_least8_t data) {
+  return (i2c->write(data) == 1) ? makeResult(none) : NackError;
 }
 
-error_code I2CMaster::doWritePacket(uint_least8_t address,
+Result<void> I2CMaster::writePacket(uint_least8_t address,
                                     span<const uint_least8_t> data,
-                                    bool sendStop) {
-  return (i2c->write(address, reinterpret_cast<const char *>(data.data()),
-                     data.size(), !sendStop) == 0)
-             ? error_code()
-             : make_error_code(NackError);
+                                    DoStop doStop) {
+  const Result<void> result =
+      (i2c->write(address, reinterpret_cast<const char *>(data.data()),
+                  data.size(), doStop != Stop) == 0)
+          ? makeResult(none)
+          : NackError;
+  if (doStop == StopOnError && !result) {
+    i2c->stop();
+  }
+  return result;
 }
 
-error_code I2CMaster::readByte(AckStatus status, uint_least8_t & data) {
-  data = i2c->read(status == Ack);
-  return error_code();
+Result<uint_least8_t> I2CMaster::readByte(DoAck doAck) {
+  return i2c->read(doAck == Ack);
 }
 
-error_code I2CMaster::doReadPacket(uint_least8_t address,
-                                   span<uint_least8_t> data, bool sendStop) {
-  return (i2c->read(address, reinterpret_cast<char *>(data.data()), data.size(),
-                    !sendStop) == 0)
-             ? error_code()
-             : make_error_code(NackError);
+Result<void> I2CMaster::readPacket(uint_least8_t address,
+                                   span<uint_least8_t> data, DoStop doStop) {
+  const Result<void> result =
+      (i2c->read(address, reinterpret_cast<char *>(data.data()), data.size(),
+                 doStop != Stop) == 0)
+          ? makeResult(none)
+          : NackError;
+  if (doStop == StopOnError && !result) {
+    i2c->stop();
+  }
+  return result;
 }
 
 } // namespace MaximInterfaceMbed