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: MaximInterfaceDevices/DS2482_DS2484.hpp
- Revision:
- 8:5ea891c7d1a1
- Parent:
- 7:9cd16581b578
--- a/MaximInterfaceDevices/DS2482_DS2484.hpp Mon Jul 22 11:44:07 2019 -0500 +++ b/MaximInterfaceDevices/DS2482_DS2484.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,8 +30,8 @@ * ownership rights. *******************************************************************************/ -#ifndef MaximInterfaceDevices_DS2482_DS2484 -#define MaximInterfaceDevices_DS2482_DS2484 +#ifndef MaximInterfaceDevices_DS2482_DS2484_hpp +#define MaximInterfaceDevices_DS2482_DS2484_hpp #include <MaximInterfaceCore/I2CMaster.hpp> #include <MaximInterfaceCore/OneWireMaster.hpp> @@ -146,31 +146,31 @@ void setAddress(uint_least8_t address) { address_ = address; } /// Initialize hardware for use. - MaximInterfaceDevices_EXPORT Core::error_code + MaximInterfaceDevices_EXPORT Core::Result<void> initialize(Config config = Config()); /// @brief Write a new configuration to the device. /// @param[in] config New configuration to write. - MaximInterfaceDevices_EXPORT Core::error_code writeConfig(Config config); + MaximInterfaceDevices_EXPORT Core::Result<void> writeConfig(Config config); - MaximInterfaceDevices_EXPORT virtual Core::error_code - triplet(TripletData & data); + MaximInterfaceDevices_EXPORT virtual Core::Result<TripletData> + triplet(bool sendBit); - MaximInterfaceDevices_EXPORT virtual Core::error_code reset(); + MaximInterfaceDevices_EXPORT virtual Core::Result<void> reset(); - MaximInterfaceDevices_EXPORT virtual Core::error_code - touchBitSetLevel(bool & sendRecvBit, Level afterLevel); + MaximInterfaceDevices_EXPORT virtual Core::Result<bool> + touchBitSetLevel(bool sendBit, Level afterLevel); - MaximInterfaceDevices_EXPORT virtual Core::error_code - readByteSetLevel(uint_least8_t & recvByte, Level afterLevel); + MaximInterfaceDevices_EXPORT virtual Core::Result<uint_least8_t> + readByteSetLevel(Level afterLevel); - MaximInterfaceDevices_EXPORT virtual Core::error_code + MaximInterfaceDevices_EXPORT virtual Core::Result<void> writeByteSetLevel(uint_least8_t sendByte, Level afterLevel); - MaximInterfaceDevices_EXPORT virtual Core::error_code + MaximInterfaceDevices_EXPORT virtual Core::Result<void> setSpeed(Speed newSpeed); - MaximInterfaceDevices_EXPORT virtual Core::error_code + MaximInterfaceDevices_EXPORT virtual Core::Result<void> setLevel(Level newLevel); MaximInterfaceDevices_EXPORT static const Core::error_category & @@ -181,40 +181,49 @@ : master(&master), address_(address) {} /// @note Allow marking const since not public. - Core::error_code sendCommand(uint_least8_t cmd) const; + Core::Result<void> sendCommand(uint_least8_t cmd) const; /// @note Allow marking const since not public. - Core::error_code sendCommand(uint_least8_t cmd, uint_least8_t param) const; + Core::Result<void> sendCommand(uint_least8_t cmd, uint_least8_t param) const; /// @brief Reads a register from the device. /// @param reg Register to read from. - /// @param[out] buf Buffer to hold read data. - Core::error_code readRegister(uint_least8_t reg, uint_least8_t & buf) const; + /// @returns Read data from register. + Core::Result<uint_least8_t> readRegister(uint_least8_t reg) const; /// @brief Reads the current register from the device. - /// @param[out] buf Buffer to hold read data. - Core::error_code readRegister(uint_least8_t & buf) const; + /// @returns Read data from register. + Core::Result<uint_least8_t> readRegister() const; private: /// @brief Performs a soft reset on the device. /// @note This is not a 1-Wire Reset. - Core::error_code resetDevice(); + Core::Result<void> resetDevice(); /// @brief /// Polls the device status waiting for the 1-Wire Busy bit (1WB) to be cleared. - /// @param[out] pStatus Optionally retrieve the status byte when 1WB cleared. - /// @returns Success or TimeoutError if poll limit reached. - Core::error_code pollBusy(uint_least8_t * pStatus = NULL); + /// @returns Status byte or TimeoutError if poll limit reached. + Core::Result<uint_least8_t> pollBusy(); /// @brief Ensure that the desired 1-Wire level is set in the configuration. /// @param level Desired 1-Wire level. - Core::error_code configureLevel(Level level); + Core::Result<void> configureLevel(Level level); Core::I2CMaster * master; uint_least8_t address_; Config curConfig; }; +} // namespace MaximInterfaceDevices +namespace MaximInterfaceCore { + +template <> +struct is_error_code_enum<MaximInterfaceDevices::DS2482_DS2484::ErrorValue> + : true_type {}; + +} // namespace MaximInterfaceCore +namespace MaximInterfaceDevices { + inline Core::error_code make_error_code(DS2482_DS2484::ErrorValue e) { return Core::error_code(e, DS2482_DS2484::errorCategory()); } @@ -233,7 +242,7 @@ /// @brief Select the active 1-Wire channel. /// @param channel Channel number to select from 0 to 7. - MaximInterfaceDevices_EXPORT Core::error_code selectChannel(int channel); + MaximInterfaceDevices_EXPORT Core::Result<void> selectChannel(int channel); }; /// DS2484 I2C to 1-Wire Master @@ -258,8 +267,8 @@ /// @brief Adjust 1-Wire port parameters. /// @param param Parameter to adjust. /// @param val New parameter value to set. Consult datasheet for value mappings. - MaximInterfaceDevices_EXPORT Core::error_code adjustPort(PortParameter param, - int val); + MaximInterfaceDevices_EXPORT Core::Result<void> + adjustPort(PortParameter param, int val); }; } // namespace MaximInterfaceDevices