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/DS1920.hpp	Mon Jul 22 11:44:07 2019 -0500
+++ b/MaximInterfaceDevices/DS1920.hpp	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"),
@@ -30,10 +30,10 @@
 * ownership rights.
 *******************************************************************************/
 
-#ifndef MaximInterfaceDevices_DS1920
-#define MaximInterfaceDevices_DS1920
+#ifndef MaximInterfaceDevices_DS1920_hpp
+#define MaximInterfaceDevices_DS1920_hpp
 
-#include <MaximInterfaceCore/array_span.hpp>
+#include <MaximInterfaceCore/array.hpp>
 #include <MaximInterfaceCore/SelectRom.hpp>
 #include <MaximInterfaceCore/Sleep.hpp>
 #include "Config.hpp"
@@ -55,7 +55,7 @@
   enum ErrorValue { CrcError = 1, DataError };
 
   /// Holds the contents of the device scratchpad.
-  typedef Core::array_span<uint_least8_t, 8> Scratchpad;
+  typedef Core::array<uint_least8_t, 8> Scratchpad;
 
   DS1920(Core::Sleep & sleep, Core::OneWireMaster & master,
          const Core::SelectRom & selectRom)
@@ -77,28 +77,27 @@
   /// the alarm search command.
   /// @param[in] th 8-bit upper temperature threshold, MSB indicates sign.
   /// @param[in] tl 8-bit lower temperature threshold, MSB indicates sign.
-  MaximInterfaceDevices_EXPORT Core::error_code
+  MaximInterfaceDevices_EXPORT Core::Result<void>
   writeScratchpad(uint_least8_t th, uint_least8_t tl);
 
   /// @brief Read Scratchpad Command
-  /// @param[out] scratchpad Contents of scratchpad.
-  MaximInterfaceDevices_EXPORT Core::error_code
-  readScratchpad(Scratchpad::span scratchpad);
+  /// @returns Contents of scratchpad.
+  MaximInterfaceDevices_EXPORT Core::Result<Scratchpad> readScratchpad() const;
 
   /// @brief Copy Scratchpad Command
   /// @details This command copies from the scratchpad into the
   /// EEPROM of the DS1920, storing the temperature trigger bytes
   /// in nonvolatile memory.
-  MaximInterfaceDevices_EXPORT Core::error_code copyScratchpad();
+  MaximInterfaceDevices_EXPORT Core::Result<void> copyScratchpad();
 
   /// @brief Convert Temperature Command
   /// @details This command begins a temperature conversion.
-  MaximInterfaceDevices_EXPORT Core::error_code convertTemperature();
+  MaximInterfaceDevices_EXPORT Core::Result<void> convertTemperature();
 
   /// @brief Recall Command
   /// @details This command recalls the temperature trigger values
   /// stored in EEPROM to the scratchpad.
-  MaximInterfaceDevices_EXPORT Core::error_code recallEeprom();
+  MaximInterfaceDevices_EXPORT Core::Result<void> recallEeprom();
 
   MaximInterfaceDevices_EXPORT static const Core::error_category &
   errorCategory();
@@ -111,9 +110,18 @@
 
 /// @brief Reads the current temperature as an integer value.
 /// @param ds1920 Device to read.
-/// @param[out] temperature Temperature in degrees Celsius multiplied by 2.
-MaximInterfaceDevices_EXPORT Core::error_code
-readTemperature(DS1920 & ds1920, int & temperature);
+/// @returns Temperature in degrees Celsius multiplied by 2.
+MaximInterfaceDevices_EXPORT Core::Result<int> readTemperature(DS1920 & ds1920);
+
+} // namespace MaximInterfaceDevices
+namespace MaximInterfaceCore {
+
+template <>
+struct is_error_code_enum<MaximInterfaceDevices::DS1920::ErrorValue>
+    : true_type {};
+
+} // namespace MaximInterfaceCore
+namespace MaximInterfaceDevices {
 
 inline Core::error_code make_error_code(DS1920::ErrorValue e) {
   return Core::error_code(e, DS1920::errorCategory());