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
--- a/MaximInterfaceDevices/DS9400.cpp	Mon Jul 22 11:44:07 2019 -0500
+++ b/MaximInterfaceDevices/DS9400.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"),
@@ -32,58 +32,46 @@
 
 #include "DS9400.hpp"
 
+#define TRY MaximInterfaceCore_TRY
+#define TRY_VALUE MaximInterfaceCore_TRY_VALUE
+
 namespace MaximInterfaceDevices {
 
 using namespace Core;
 
-error_code DS9400::waitAwake() {
-  error_code result;
+Result<void> DS9400::waitAwake() {
   uint_least8_t data;
   do {
-    result = uart->readByte(data);
-  } while (!result && data != 0xA5);
-  return result;
+    TRY_VALUE(data, uart->readByte());
+  } while (data != 0xA5);
+  return none;
 }
 
-error_code DS9400::start() { return uart->writeByte('S'); }
+Result<void> DS9400::start() { return uart->writeByte('S'); }
 
-error_code DS9400::start(uint_least8_t address) {
-  error_code result = start();
-  if (!result) {
-    result = writeByte(address);
-  }
-  return result;
+Result<void> DS9400::start(uint_least8_t address) {
+  TRY(start());
+  TRY(writeByte(address));
+  return none;
 }
 
-error_code DS9400::stop() { return uart->writeByte('P'); }
+Result<void> DS9400::stop() { return uart->writeByte('P'); }
 
-error_code DS9400::writeByte(uint_least8_t data) {
+Result<void> DS9400::writeByte(uint_least8_t data) {
   const uint_least8_t packet[] = {'Q', data};
-  error_code result = uart->clearReadBuffer();
-  if (!result) {
-    result = uart->writeBlock(packet);
-    if (!result) {
-      result = uart->readByte(data);
-      if (!result && data != 0) {
-        result = make_error_code(I2CMaster::NackError);
-      }
-    }
-  }
-  return result;
+  TRY(uart->clearReadBuffer());
+  TRY(uart->writeBlock(packet));
+  TRY_VALUE(data, uart->readByte());
+  return (data == 0) ? makeResult(none) : I2CMaster::NackError;
 }
 
-error_code DS9400::readByte(AckStatus status, uint_least8_t & data) {
-  error_code result = uart->clearReadBuffer();
-  if (!result) {
-    result = uart->writeByte(status == Ack ? 'R' : 'N');
-    if (!result) {
-      result = uart->readByte(data);
-    }
-  }
-  return result;
+Result<uint_least8_t> DS9400::readByte(DoAck doAck) {
+  TRY(uart->clearReadBuffer());
+  TRY(uart->writeByte(doAck == Ack ? 'R' : 'N'));
+  return uart->readByte();
 }
 
-error_code DS9400::configure(uint_least8_t config) {
+Result<void> DS9400::configure(uint_least8_t config) {
   const uint_least8_t packet[] = {'C', config};
   return uart->writeBlock(packet);
 }