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/DS18B20.hpp	Mon Jul 22 11:44:07 2019 -0500
+++ b/MaximInterfaceDevices/DS18B20.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_DS18B20
-#define MaximInterfaceDevices_DS18B20
+#ifndef MaximInterfaceDevices_DS18B20_hpp
+#define MaximInterfaceDevices_DS18B20_hpp
 
-#include <MaximInterfaceCore/array_span.hpp>
+#include <MaximInterfaceCore/array.hpp>
 #include <MaximInterfaceCore/SelectRom.hpp>
 #include <MaximInterfaceCore/Sleep.hpp>
 #include "Config.hpp"
@@ -59,7 +59,7 @@
   static const uint_least8_t twelveBitResolution = 0x7F;
 
   /// Holds the contents of the device scratchpad.
-  typedef Core::array_span<uint_least8_t, 8> Scratchpad;
+  typedef Core::array<uint_least8_t, 8> Scratchpad;
 
   DS18B20(Core::Sleep & sleep, Core::OneWireMaster & master,
           const Core::SelectRom & selectRom)
@@ -74,7 +74,7 @@
   }
 
   /// Initializes the device for first time use.
-  MaximInterfaceDevices_EXPORT Core::error_code initialize();
+  MaximInterfaceDevices_EXPORT Core::Result<void> initialize() const;
 
   /// @brief Write Scratchpad Command
   /// @details If the result of a temperature measurement is higher
@@ -85,37 +85,35 @@
   /// @param[in] th 8-bit upper temperature threshold, MSB indicates sign.
   /// @param[in] tl 8-bit lower temperature threshold, LSB indicates sign.
   /// @param[in] res Resolution of the DS18B20.
-  MaximInterfaceDevices_EXPORT Core::error_code
+  MaximInterfaceDevices_EXPORT Core::Result<void>
   writeScratchpad(uint_least8_t th, uint_least8_t tl, uint_least8_t res);
 
   /// @brief Read Scratchpad Command
-  /// @param[out] scratchpad Contents of scratchpad.
-  MaximInterfaceDevices_EXPORT Core::error_code
-  readScratchpad(Scratchpad::span scratchpad);
+  /// @returns scratchpad 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 DS18B20, storing the temperature trigger bytes
   /// and resolution in nonvolatile memory.
-  MaximInterfaceDevices_EXPORT Core::error_code copyScratchpad();
+  MaximInterfaceDevices_EXPORT Core::Result<void> copyScratchpad();
 
   /// @brief Read Power Supply command
   /// @details This command determines if the DS18B20 is parasite
   /// powered or has a local supply
-  /// @param[out] localPower
+  /// @returns
   /// True if the device is powered by a local power supply, or false if the
   /// device is parasitically powered.
-  MaximInterfaceDevices_EXPORT Core::error_code
-  readPowerSupply(bool & localPower);
+  MaximInterfaceDevices_EXPORT Core::Result<bool> readPowerSupply() const;
 
   /// @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
   /// and resolution 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();
@@ -124,14 +122,24 @@
   Core::SelectRom selectRom;
   Core::OneWireMaster * master;
   const Core::Sleep * sleep;
-  uint_least8_t resolution;
+  mutable uint_least8_t resolution;
 };
 
 /// @brief Reads the current temperature as an integer value with decimal.
 /// @param ds18b20 Device to read.
-/// @param[out] temperature Temperature in degrees Celsius multiplied by 16.
-MaximInterfaceDevices_EXPORT Core::error_code
-readTemperature(DS18B20 & ds18b20, int & temperature);
+/// @returns Temperature in degrees Celsius multiplied by 16.
+MaximInterfaceDevices_EXPORT Core::Result<int>
+readTemperature(DS18B20 & ds18b20);
+
+} // namespace MaximInterfaceDevices
+namespace MaximInterfaceCore {
+
+template <>
+struct is_error_code_enum<MaximInterfaceDevices::DS18B20::ErrorValue>
+    : true_type {};
+
+} // namespace MaximInterfaceCore
+namespace MaximInterfaceDevices {
 
 inline Core::error_code make_error_code(DS18B20::ErrorValue e) {
   return Core::error_code(e, DS18B20::errorCategory());