1-Wire® library for mbed. Complete 1-Wire library that supports our silicon masters along with a bit-bang master on the MAX32600MBED platform with one common interface for mbed. Slave support has also been included and more slaves will be added as time permits.

Dependents:   MAXREFDES131_Qt_Demo MAX32630FTHR_iButton_uSD_Logger MAX32630FTHR_DS18B20_uSD_Logger MAXREFDES130_131_Demo ... more

Superseded by MaximInterface.

Revision:
73:2cecc1372acc
Parent:
72:6892702709ee
Child:
74:23be10c32fa3
diff -r 6892702709ee -r 2cecc1372acc Masters/DS248x/DS248x.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Masters/DS248x/DS248x.h	Thu May 12 14:38:16 2016 -0500
@@ -0,0 +1,299 @@
+/******************************************************************//**
+* Copyright (C) 2016 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"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+**********************************************************************/
+
+#ifndef OneWire_Masters_DS248x
+#define OneWire_Masters_DS248x
+
+#include "Masters/OneWireMaster.h"
+#include "PinNames.h"
+
+namespace mbed { class I2C; }
+
+namespace OneWire
+{
+    namespace Masters
+    {
+        class DS248x: public OneWireMaster
+        {
+        public:
+            enum Register
+            {
+                ConfigReg = 0xC3,
+                StatusReg = 0xF0,
+                ReadDataReg = 0xE1,
+                PortConfigReg = 0xB4,
+                ChannelSelectReg = 0xD2 // DS2482-800 only
+            };
+            
+            // DS2484 only
+            enum OwAdjustParam
+            {
+                tRSTL = 0,
+                tRSTL_OD,
+                tMSP,
+                tMSP_OD,
+                tW0L,
+                tW0L_OD,
+                tREC0, //OD NA
+                RWPU = 8 //OD NA, see DS2484 datasheet page 13
+            };
+            
+            /// Represents a DS2465 configuration.
+            class Config
+            {
+            public:
+                /// @{
+                /// 1-Wire Speed
+                bool get1WS() const { return m_1WS; }
+                void set1WS(bool new1WS) { m_1WS = new1WS; }
+                /// @}
+
+                /// @{
+                /// Strong Pullup
+                bool getSPU() const { return m_SPU; }
+                void setSPU(bool newSPU) { m_SPU = newSPU; }
+                /// @}
+
+                /// @{
+                /// 1-Wire Power Down
+                bool getPDN() const { return m_PDN; }
+                void setPDN(bool newPDN) { m_PDN = newPDN; }
+                /// @}
+
+                /// @{
+                /// Active Pullup
+                bool getAPU() const { return m_APU; }
+                void setAPU(bool newAPU) { m_APU = newAPU; }
+                /// @}
+
+                /// Byte representation that is read from the DS2465.
+                uint8_t readByte() const;
+                /// Byte respresentation that is written to the DS2465.
+                uint8_t writeByte() const;
+
+                /// Reset to the power-on default config.
+                void reset();
+                Config() { reset(); }
+
+            private:
+                bool m_1WS, m_SPU, m_PDN, m_APU;
+            };
+            
+            /**********************************************************//**
+            * @brief DS248x constructor
+            * 
+            * @details allows user to use existing I2C object
+            *
+            * On Entry:
+            *     @param[in] p_i2c_bus - pointer to existing I2C object
+            *
+            * On Exit:
+            *    @return 
+            **************************************************************/
+            DS248x(mbed::I2C & i2c_bus, uint8_t adrs);
+            
+            /**********************************************************//**
+            * @brief DS248x constructor
+            * 
+            * @details Object instantiates a new I2C object with no 
+            *          public access
+            *
+            * On Entry:
+            *     @param[in] sda - sda pin of I2C bus
+            *     @param[in] scl - scl pin of I2C bus
+            *
+            * On Exit:
+            *    @return 
+            **************************************************************/
+            DS248x(PinName sda, PinName scl, uint8_t adrs);
+            
+            /**********************************************************//**
+            * @brief DS248x destructor 
+            * 
+            * @details deletes I2C object if owner 
+            *
+            * On Entry:
+            *
+            * On Exit:
+            *    @return 
+            **************************************************************/
+            virtual ~DS248x();
+            
+            /**********************************************************//**
+            * @brief reset()
+            * 
+            * @details Perform a device reset on the DS248x
+            *
+            * On Entry:
+            *
+            * On Exit:
+            *    @return TRUE if device was reset
+            *            FALSE device not detected or failure to perform reset
+            **************************************************************/
+            OneWireMaster::CmdResult reset(void);
+            
+            /// Write a new configuration to the DS2465.
+            /// @param[in] config New configuration to write.
+            /// @param verify Verify that the configuration was written successfully.
+            OneWireMaster::CmdResult writeConfig(const Config & config, bool verify);
+
+            /// Read the current DS2465 configuration.
+            /// @returns The cached current configuration.
+            Config currentConfig() const { return m_curConfig; }
+            
+            
+            OneWireMaster::CmdResult readRegister(Register reg, uint8_t & buf, bool skipSetPointer = false) const;
+            
+            /**********************************************************//**
+            * @brief channel_select()
+            * 
+            * @details Select the 1-Wire channel on a DS2482-800. 
+            *          Min channel = 1
+            *
+            * On Entry:
+            *     @param[in] channel - desired channel of the DS2482
+            *
+            * On Exit:
+            *    @return TRUE if channel selected
+            *            FALSE device not detected or failure to perform select
+            **************************************************************/
+            OneWireMaster::CmdResult selectChannel(uint8_t channel);
+            
+            /**********************************************************//**
+            * @brief adjust_timing()
+            * 
+            * @details adjustable timming available in DS2484 only
+            *
+            * On Entry:
+            *     @param[in] param - 1 of 8 adjustable parameters
+            *     @param[in] val - new value for parameter, see datasheet 
+            *                      for codes
+            *
+            * On Exit:
+            *    @return TRUE: parameter successfully adjusted
+            *            FALSE: failed to adjust parameter
+            **************************************************************/
+            OneWireMaster::CmdResult adjustOwPort(OwAdjustParam param, uint8_t val);
+            
+            /**********************************************************//**
+            * @brief search_triplet()
+            * 
+            * @details Use the DS248x help command '1-Wire triplet' to perform 
+            *          one bit of a 1-Wire search. This command does two read 
+            *          bits and one write bit. The write bit is either the 
+            *          default direction (all device have same bit) or in case 
+            *          of a discrepancy, the 'search_direction' parameter is 
+            *          used. 
+            *
+            * On Entry:
+            *     @param[in] search_direction
+            *
+            * On Exit:
+            *    @return The DS248x status byte result from the triplet command
+            **************************************************************/
+            virtual OneWireMaster::CmdResult OWTriplet(SearchDirection & search_direction, uint8_t & sbr, uint8_t & tsb);
+            
+            //Part of OneWireMaster that should be implemented for each master
+            //See OneWireMaster.h for documentation
+            
+            /**********************************************************//**
+            * @brief
+            * 
+            * @details Detect routine that performs a device reset 
+            *          followed by writing the configuration byte to default 
+            *          values:
+            *          1-Wire speed (c1WS) = standard (0)
+            *          Strong pull-up (cSPU) = off (0)
+            *          Presence pulse masking (cPPM) = off (0)
+            *          Active pull-up (cAPU) = on (CONFIG_APU = 0x01)
+            *
+            * On Entry:
+            *
+            * On Exit:
+            *    @return TRUE if device was detected and written
+            *            FALSE device not detected or failure to write 
+            *            configuration byte
+            **************************************************************/
+            virtual OneWireMaster::CmdResult OWInitMaster(void);
+            
+            virtual OneWireMaster::CmdResult OWReset(void);
+            
+            virtual OneWireMaster::CmdResult OWTouchBitSetLevel(uint8_t & sendrecvbit, OWLevel after_level);
+            
+            virtual OneWireMaster::CmdResult OWReadByteSetLevel(uint8_t & recvbyte, OWLevel after_level);
+            
+            virtual OneWireMaster::CmdResult OWWriteByteSetLevel(uint8_t sendbyte, OWLevel after_level);
+
+            virtual OneWireMaster::CmdResult OWSetSpeed(OWSpeed new_speed);
+
+            virtual OneWireMaster::CmdResult OWSetLevel(OWLevel new_level);
+            
+        private:
+            enum DS248X_CMDS
+            {
+                CMD_DRST = 0xF0,
+                CMD_WCFG = 0xD2,
+                CMD_A1WP = 0xC3, // DS2484 only
+                CMD_CHSL = 0xC3, // DS2482-800 only
+                CMD_SRP = 0xE1,
+                CMD_1WRS = 0xB4,
+                CMD_1WWB = 0xA5,
+                CMD_1WRB = 0x96,
+                CMD_1WSB = 0x87,
+                CMD_1WT = 0x78
+            };
+            
+            mbed::I2C *_p_i2c_bus;
+            uint8_t _adrs;
+            bool _i2c_owner;
+            
+            Config m_curConfig;
+
+            /// Polls the DS2465 status waiting for the 1-Wire Busy bit (1WB) to be cleared.
+            /// @param[out] pStatus Optionally retrive the status byte when 1WB cleared.
+            /// @returns Success or TimeoutError if poll limit reached.
+            OneWireMaster::CmdResult pollBusy(uint8_t * pStatus = NULL);
+
+            /// Ensure that the desired 1-Wire level is set in the configuration.
+            /// @param level Desired 1-Wire level.
+            OneWireMaster::CmdResult configureLevel(OWLevel level);
+
+            /// @note Allow marking const since not public.
+            OneWireMaster::CmdResult sendCommand(DS248X_CMDS cmd) const;
+            
+            /// @note Allow marking const since not public.
+            OneWireMaster::CmdResult sendCommand(DS248X_CMDS cmd, uint8_t param) const;
+        };
+    }
+}
+
+#endif /*DS248X_H*/