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
Diff: MaximInterfaceCore/RunCommand.hpp
- Revision:
- 8:5ea891c7d1a1
- Parent:
- 7:9cd16581b578
--- a/MaximInterfaceCore/RunCommand.hpp Mon Jul 22 11:44:07 2019 -0500 +++ b/MaximInterfaceCore/RunCommand.hpp Mon Sep 16 11:13:37 2019 -0500 @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (C) 2018 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,8 +30,8 @@ * ownership rights. *******************************************************************************/ -#ifndef MaximInterfaceCore_RunCommand -#define MaximInterfaceCore_RunCommand +#ifndef MaximInterfaceCore_RunCommand_hpp +#define MaximInterfaceCore_RunCommand_hpp #include "Config.hpp" #include "Function.hpp" @@ -45,8 +45,15 @@ class OneWireMaster; class Sleep; -typedef Function<error_code(span<const uint_least8_t>, int, - span<uint_least8_t> &)> +/// @brief +/// Runs a command sequence by writing the command request, waiting the +/// specified amount of time, and reading back the command response. +/// @details +/// The parameters for this function are the command request, the delay time in +/// milliseconds, and a mutable buffer for the command response. The actual +/// buffer used for the command response is returned. +typedef Function<Result<span<uint_least8_t> >(span<const uint_least8_t>, int, + span<uint_least8_t>)> RunCommand; class RunCommandWithOneWireMaster { @@ -68,9 +75,9 @@ this->selectRom = selectRom; } - MaximInterfaceCore_EXPORT error_code + MaximInterfaceCore_EXPORT Result<span<uint_least8_t> > operator()(span<const uint_least8_t> request, int delayTime, - span<uint_least8_t> & response) const; + span<uint_least8_t> response) const; private: SelectRom selectRom; @@ -78,6 +85,10 @@ const Sleep * sleep; }; +template <> +struct is_error_code_enum<RunCommandWithOneWireMaster::ErrorValue> + : true_type {}; + inline error_code make_error_code(RunCommandWithOneWireMaster::ErrorValue e) { return error_code(e, RunCommandWithOneWireMaster::errorCategory()); } @@ -101,9 +112,9 @@ void setAddress(uint_least8_t address) { address_ = address & 0xFE; } - MaximInterfaceCore_EXPORT error_code + MaximInterfaceCore_EXPORT Result<span<uint_least8_t> > operator()(span<const uint_least8_t> request, int delayTime, - span<uint_least8_t> & response) const; + span<uint_least8_t> response) const; private: const Sleep * sleep; @@ -111,6 +122,9 @@ uint_least8_t address_; }; +template <> +struct is_error_code_enum<RunCommandWithI2CMaster::ErrorValue> : true_type {}; + inline error_code make_error_code(RunCommandWithI2CMaster::ErrorValue e) { return error_code(e, RunCommandWithI2CMaster::errorCategory()); }