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.

Committer:
IanBenzMaxim
Date:
Fri Mar 25 11:11:59 2016 -0500
Revision:
27:d5aaefa252f1
Parent:
26:a361e3f42ba5
Child:
32:bce180b544ed
Do not reconfigure DS2465 if requested speed or level is already set. Use forward declarations to speed up compilation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 5:ce108eeb878d 1 /******************************************************************//**
j3 5:ce108eeb878d 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
j3 5:ce108eeb878d 3 *
j3 5:ce108eeb878d 4 * Permission is hereby granted, free of charge, to any person obtaining a
j3 5:ce108eeb878d 5 * copy of this software and associated documentation files (the "Software"),
j3 5:ce108eeb878d 6 * to deal in the Software without restriction, including without limitation
j3 5:ce108eeb878d 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 5:ce108eeb878d 8 * and/or sell copies of the Software, and to permit persons to whom the
j3 5:ce108eeb878d 9 * Software is furnished to do so, subject to the following conditions:
j3 5:ce108eeb878d 10 *
j3 5:ce108eeb878d 11 * The above copyright notice and this permission notice shall be included
j3 5:ce108eeb878d 12 * in all copies or substantial portions of the Software.
j3 5:ce108eeb878d 13 *
j3 5:ce108eeb878d 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 5:ce108eeb878d 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 5:ce108eeb878d 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 5:ce108eeb878d 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 5:ce108eeb878d 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 5:ce108eeb878d 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 5:ce108eeb878d 20 * OTHER DEALINGS IN THE SOFTWARE.
j3 5:ce108eeb878d 21 *
j3 5:ce108eeb878d 22 * Except as contained in this notice, the name of Maxim Integrated
j3 5:ce108eeb878d 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 5:ce108eeb878d 24 * Products, Inc. Branding Policy.
j3 5:ce108eeb878d 25 *
j3 5:ce108eeb878d 26 * The mere transfer of this software does not imply any licenses
j3 5:ce108eeb878d 27 * of trade secrets, proprietary technology, copyrights, patents,
j3 5:ce108eeb878d 28 * trademarks, maskwork rights, or any other form of intellectual
j3 5:ce108eeb878d 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 5:ce108eeb878d 30 * ownership rights.
j3 5:ce108eeb878d 31 **********************************************************************/
j3 5:ce108eeb878d 32
j3 5:ce108eeb878d 33
j3 15:f6cb0d906fb6 34 #ifndef ONEWIREMASTER_H
j3 15:f6cb0d906fb6 35 #define ONEWIREMASTER_H
j3 5:ce108eeb878d 36
IanBenzMaxim 27:d5aaefa252f1 37 #include <cstdint>
IanBenzMaxim 27:d5aaefa252f1 38 #include <cstddef>
j3 5:ce108eeb878d 39
IanBenzMaxim 27:d5aaefa252f1 40 class RomId;
j3 5:ce108eeb878d 41
j3 23:e8e403d61359 42 class OneWireMaster
IanBenzMaxim 27:d5aaefa252f1 43 {
IanBenzMaxim 24:8942d8478d68 44 public:
j3 23:e8e403d61359 45
j3 23:e8e403d61359 46 enum OW_SPEED
j3 23:e8e403d61359 47 {
j3 23:e8e403d61359 48 SPEED_STANDARD = 0x00,
j3 23:e8e403d61359 49 SPEED_OVERDRIVE = 0x01
j3 23:e8e403d61359 50 };
j3 23:e8e403d61359 51
j3 23:e8e403d61359 52 enum OW_LEVEL
j3 23:e8e403d61359 53 {
j3 23:e8e403d61359 54 LEVEL_NORMAL = 0x00,
j3 23:e8e403d61359 55 LEVEL_STRONG = 0x02
j3 23:e8e403d61359 56 };
j3 23:e8e403d61359 57
j3 23:e8e403d61359 58 enum CmdResult
j3 23:e8e403d61359 59 {
j3 23:e8e403d61359 60 Success,
j3 23:e8e403d61359 61 CommunicationWriteError,
j3 23:e8e403d61359 62 CommunicationReadError,
j3 23:e8e403d61359 63 TimeoutError,
j3 23:e8e403d61359 64 OperationFailure
j3 23:e8e403d61359 65 };
j3 23:e8e403d61359 66
IanBenzMaxim 27:d5aaefa252f1 67 static std::uint16_t calculateCRC16(std::uint16_t CRC16, std::uint16_t data);
j3 17:b646b1e3970b 68
IanBenzMaxim 27:d5aaefa252f1 69 static std::uint16_t calculateCRC16(const std::uint8_t * data, std::size_t data_offset, std::size_t data_len, std::uint16_t crc = 0);
j3 17:b646b1e3970b 70
IanBenzMaxim 26:a361e3f42ba5 71 virtual ~OneWireMaster() { }
IanBenzMaxim 26:a361e3f42ba5 72
j3 23:e8e403d61359 73
j3 23:e8e403d61359 74 /**********************************************************//**
j3 23:e8e403d61359 75 * @brief OWInitMaster()
j3 23:e8e403d61359 76 *
j3 23:e8e403d61359 77 * @details Initiializes particular master being instaniated.
j3 23:e8e403d61359 78 * Added to interface to provide a common 'init' function between
j3 23:e8e403d61359 79 * all masters
j3 23:e8e403d61359 80 *
j3 23:e8e403d61359 81 * On Entry:
j3 23:e8e403d61359 82 *
j3 23:e8e403d61359 83 * On Exit:
j3 23:e8e403d61359 84 *
j3 23:e8e403d61359 85 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 86 **************************************************************/
j3 23:e8e403d61359 87 virtual CmdResult OWInitMaster(void) = 0;
j3 23:e8e403d61359 88
j3 23:e8e403d61359 89
j3 23:e8e403d61359 90 /**********************************************************//**
j3 23:e8e403d61359 91 * @brief OWReset()
j3 23:e8e403d61359 92 *
j3 23:e8e403d61359 93 * @details Reset all of the devices on the 1-Wire Net and return
j3 23:e8e403d61359 94 * the result.
j3 23:e8e403d61359 95 *
j3 23:e8e403d61359 96 * On Entry:
j3 23:e8e403d61359 97 *
j3 23:e8e403d61359 98 * On Exit:
j3 23:e8e403d61359 99 *
j3 23:e8e403d61359 100 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 101 **************************************************************/
j3 23:e8e403d61359 102 virtual CmdResult OWReset(void) = 0;
j3 23:e8e403d61359 103
j3 23:e8e403d61359 104
j3 23:e8e403d61359 105 /**********************************************************//**
j3 23:e8e403d61359 106 * @brief OWTouchBit()
j3 23:e8e403d61359 107 *
j3 23:e8e403d61359 108 * @details Send 1 bit of communication to the 1-Wire Net and return
j3 23:e8e403d61359 109 * the result 1 bit read from the 1-Wire Net. The
j3 23:e8e403d61359 110 * parameter 'sendbit' least significant bit is used and
j3 23:e8e403d61359 111 * the least significant bit of the result is the return
j3 23:e8e403d61359 112 * bit.
j3 23:e8e403d61359 113 *
j3 23:e8e403d61359 114 * On Entry:
j3 23:e8e403d61359 115 * @param[in] 'sendbit' - the least significant bit is the bit to send
j3 23:e8e403d61359 116 *
j3 23:e8e403d61359 117 * On Exit:
j3 23:e8e403d61359 118 *
j3 23:e8e403d61359 119 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 120 **************************************************************/
IanBenzMaxim 27:d5aaefa252f1 121 virtual CmdResult OWTouchBit(std::uint8_t & sendrecvbit, OW_LEVEL after_level) = 0;
j3 23:e8e403d61359 122
j3 23:e8e403d61359 123
j3 23:e8e403d61359 124 /**********************************************************//**
j3 23:e8e403d61359 125 * @brief OWWRiteByte()
j3 23:e8e403d61359 126 *
j3 23:e8e403d61359 127 * @details Send 8 bits of communication to the 1-Wire Net and
j3 23:e8e403d61359 128 * verify that the 8 bits read from the 1-Wire Net is the
j3 23:e8e403d61359 129 * same (write operation).The parameter 'sendbyte' least
j3 23:e8e403d61359 130 * significant 8 bits are used.
j3 23:e8e403d61359 131 *
j3 23:e8e403d61359 132 * On Entry:
j3 23:e8e403d61359 133 * @param[in] 'sendbyte' - 8 bits to send (least significant byte)
j3 23:e8e403d61359 134 *
j3 23:e8e403d61359 135 * On Exit:
j3 23:e8e403d61359 136 *
j3 23:e8e403d61359 137 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 138 **************************************************************/
IanBenzMaxim 27:d5aaefa252f1 139 virtual CmdResult OWWriteByte(std::uint8_t sendbyte, OW_LEVEL after_level) = 0;
j3 23:e8e403d61359 140
j3 23:e8e403d61359 141
j3 23:e8e403d61359 142 /**********************************************************//**
j3 23:e8e403d61359 143 * @brief OWReadByte()
j3 23:e8e403d61359 144 *
j3 23:e8e403d61359 145 * @details Send 8 bits of read communication to the 1-Wire Net
j3 23:e8e403d61359 146 * and return the result 8 bits read from the 1-Wire Net.
j3 23:e8e403d61359 147 *
j3 23:e8e403d61359 148 * On Entry:
j3 23:e8e403d61359 149 *
j3 23:e8e403d61359 150 * On Exit:
j3 23:e8e403d61359 151 *
j3 23:e8e403d61359 152 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 153 **************************************************************/
IanBenzMaxim 27:d5aaefa252f1 154 virtual CmdResult OWReadByte(std::uint8_t & recvbyte, OW_LEVEL after_level) = 0;
j3 23:e8e403d61359 155
j3 23:e8e403d61359 156
j3 23:e8e403d61359 157 /**********************************************************//**
j3 23:e8e403d61359 158 * @brief OWWriteBlock()
j3 23:e8e403d61359 159 *
j3 23:e8e403d61359 160 * @details complements OWBlock, writes 'tran_len' bytes from
j3 23:e8e403d61359 161 * 'tran_buf' to 1-wire Net.
j3 23:e8e403d61359 162 *
j3 23:e8e403d61359 163 * On Entry:
j3 23:e8e403d61359 164 * @param[in] tran_buf - pointer to data to write
j3 23:e8e403d61359 165 * @param[in] tran_len - number of bytes to write
j3 23:e8e403d61359 166 *
j3 23:e8e403d61359 167 * On Exit:
j3 23:e8e403d61359 168 *
j3 23:e8e403d61359 169 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 170 **************************************************************/
IanBenzMaxim 27:d5aaefa252f1 171 virtual CmdResult OWWriteBlock(const std::uint8_t *tran_buf, std::uint8_t tran_len) = 0;
j3 23:e8e403d61359 172
j3 15:f6cb0d906fb6 173
j3 23:e8e403d61359 174 /**********************************************************//**
j3 23:e8e403d61359 175 * @brief OWReadBlock()
j3 23:e8e403d61359 176 *
j3 23:e8e403d61359 177 * @details complements OWBlock, reads 'recv_len' bytes from
j3 23:e8e403d61359 178 * 1-wire Net and puts them in 'recv_buf'.
j3 23:e8e403d61359 179 *
j3 23:e8e403d61359 180 * On Entry:
j3 23:e8e403d61359 181 * @param[in] recv_buf - pointer to receive buffer
j3 23:e8e403d61359 182 * @param[in] recv_len - number of bytes to read
j3 23:e8e403d61359 183 *
j3 23:e8e403d61359 184 * On Exit:
j3 23:e8e403d61359 185 *
j3 23:e8e403d61359 186 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 187 **************************************************************/
IanBenzMaxim 27:d5aaefa252f1 188 virtual CmdResult OWReadBlock(std::uint8_t *rx_buf, std::uint8_t rx_len) = 0;
j3 23:e8e403d61359 189
j3 23:e8e403d61359 190
j3 23:e8e403d61359 191 /**********************************************************//**
j3 23:e8e403d61359 192 * @brief OWSearch()
j3 23:e8e403d61359 193 *
j3 23:e8e403d61359 194 * @details The 'OWSearch' function does a general search. This
j3 23:e8e403d61359 195 * function continues from the previous search state. The
j3 23:e8e403d61359 196 * search state can be reset by using the 'OWFirst'
j3 23:e8e403d61359 197 * function. This function contains one parameter
j3 23:e8e403d61359 198 * 'alarm_only'. When 'alarm_only' is TRUE (1) the find
j3 23:e8e403d61359 199 * alarm command 0xEC is sent instead of the normal search
j3 23:e8e403d61359 200 * command 0xF0. Using the find alarm command 0xEC will
j3 23:e8e403d61359 201 * limit the search to only 1-Wire devices that are in an
j3 23:e8e403d61359 202 * 'alarm' state.
j3 23:e8e403d61359 203 *
j3 23:e8e403d61359 204 * On Entry:
j3 23:e8e403d61359 205 *
j3 23:e8e403d61359 206 * On Exit:
j3 23:e8e403d61359 207 *
j3 23:e8e403d61359 208 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 209 **************************************************************/
j3 23:e8e403d61359 210 virtual CmdResult OWSearch(RomId & romId) = 0;
j3 23:e8e403d61359 211
j3 23:e8e403d61359 212
j3 23:e8e403d61359 213 /**********************************************************//**
j3 23:e8e403d61359 214 * @brief OWSpeed()
j3 23:e8e403d61359 215 *
j3 23:e8e403d61359 216 * @details Set the 1-Wire Net communication speed.
j3 23:e8e403d61359 217 *
j3 23:e8e403d61359 218 * On Entry:
j3 23:e8e403d61359 219 * @param[in] 'new_speed' - new speed defined as
j3 23:e8e403d61359 220 * MODE_STANDARD 0x00
j3 23:e8e403d61359 221 * MODE_OVERDRIVE 0x01
j3 23:e8e403d61359 222 *
j3 23:e8e403d61359 223 * On Exit:
j3 23:e8e403d61359 224 *
j3 23:e8e403d61359 225 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 226 **************************************************************/
j3 23:e8e403d61359 227 virtual CmdResult OWSpeed(OW_SPEED new_speed) = 0;
j3 15:f6cb0d906fb6 228
j3 23:e8e403d61359 229 /**********************************************************//**
j3 23:e8e403d61359 230 * @brief OWLevel()
j3 23:e8e403d61359 231 *
j3 23:e8e403d61359 232 * @details Set the 1-Wire Net line level pull-up to normal. The
j3 23:e8e403d61359 233 * ds2484 does only allows enabling strong pull-up on a
j3 23:e8e403d61359 234 * bit or byte event. Consequently this function only
j3 23:e8e403d61359 235 * allows the MODE_STANDARD argument. To enable strong
j3 23:e8e403d61359 236 * pull-up use OWWriteBytePower or OWReadBitPower.
j3 23:e8e403d61359 237 *
j3 23:e8e403d61359 238 * On Entry:
j3 23:e8e403d61359 239 * @param[in] 'new_level' - new level defined as
j3 23:e8e403d61359 240 * MODE_STANDARD 0x00
j3 23:e8e403d61359 241 *
j3 23:e8e403d61359 242 * On Exit:
j3 23:e8e403d61359 243 *
j3 23:e8e403d61359 244 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 245 **************************************************************/
j3 23:e8e403d61359 246 virtual CmdResult OWLevel(OW_LEVEL new_level) = 0;
j3 23:e8e403d61359 247
IanBenzMaxim 27:d5aaefa252f1 248 CmdResult OWWriteBit(std::uint8_t sendbit, OW_LEVEL after_level) { return OWTouchBit(sendbit, after_level); }
IanBenzMaxim 27:d5aaefa252f1 249 CmdResult OWReadBit(std::uint8_t & recvbit, OW_LEVEL after_level) { recvbit = 0x01; return OWTouchBit(recvbit, after_level); }
j3 23:e8e403d61359 250
IanBenzMaxim 27:d5aaefa252f1 251 CmdResult OWWriteBit(std::uint8_t sendbit) { return OWWriteBit(sendbit, LEVEL_NORMAL); }
IanBenzMaxim 27:d5aaefa252f1 252 CmdResult OWReadBit(std::uint8_t & recvbit) { return OWReadBit(recvbit, LEVEL_NORMAL); }
IanBenzMaxim 27:d5aaefa252f1 253 CmdResult OWWriteBitPower(std::uint8_t sendbit) { return OWWriteBit(sendbit, LEVEL_STRONG); }
IanBenzMaxim 27:d5aaefa252f1 254 CmdResult OWReadBitPower(std::uint8_t & recvbit) { return OWReadBit(recvbit, LEVEL_STRONG); }
IanBenzMaxim 27:d5aaefa252f1 255 CmdResult OWWriteByte(std::uint8_t sendbyte) { return OWWriteByte(sendbyte, LEVEL_NORMAL); }
IanBenzMaxim 27:d5aaefa252f1 256 CmdResult OWReadByte(std::uint8_t & recvbyte) { return OWReadByte(recvbyte, LEVEL_NORMAL); }
IanBenzMaxim 27:d5aaefa252f1 257 CmdResult OWWriteBytePower(std::uint8_t sendbyte) { return OWWriteByte(sendbyte, LEVEL_STRONG); }
IanBenzMaxim 27:d5aaefa252f1 258 CmdResult OWReadBytePower(std::uint8_t & recvbyte) { return OWReadByte(recvbyte, LEVEL_STRONG); }
j3 23:e8e403d61359 259
j3 23:e8e403d61359 260
j3 23:e8e403d61359 261 /**********************************************************//**
j3 23:e8e403d61359 262 * @brief OWFirst()
j3 23:e8e403d61359 263 *
j3 23:e8e403d61359 264 * @details Find the 'first' devices on the 1-Wire network
j3 23:e8e403d61359 265 *
j3 23:e8e403d61359 266 * On Entry:
j3 23:e8e403d61359 267 *
j3 23:e8e403d61359 268 * On Exit:
j3 23:e8e403d61359 269 *
j3 23:e8e403d61359 270 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 271 **************************************************************/
IanBenzMaxim 24:8942d8478d68 272 CmdResult OWFirst(RomId & romId);
j3 23:e8e403d61359 273
j3 23:e8e403d61359 274
j3 23:e8e403d61359 275 /**********************************************************//**
j3 23:e8e403d61359 276 * @brief OWNext()
j3 23:e8e403d61359 277 *
j3 23:e8e403d61359 278 * @details Find the 'next' devices on the 1-Wire network
j3 23:e8e403d61359 279 *
j3 23:e8e403d61359 280 * On Entry:
j3 23:e8e403d61359 281 *
j3 23:e8e403d61359 282 * On Exit:
j3 23:e8e403d61359 283 *
j3 23:e8e403d61359 284 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 285 **************************************************************/
IanBenzMaxim 24:8942d8478d68 286 CmdResult OWNext(RomId & romId);
j3 23:e8e403d61359 287
j3 23:e8e403d61359 288
j3 23:e8e403d61359 289 /**********************************************************//**
j3 23:e8e403d61359 290 * @brief OWVerify()
j3 23:e8e403d61359 291 *
j3 23:e8e403d61359 292 * @details Verify the device with the ROM number in ROM_NO buffer
j3 23:e8e403d61359 293 * is present.
j3 23:e8e403d61359 294 *
j3 23:e8e403d61359 295 * On Entry:
j3 23:e8e403d61359 296 *
j3 23:e8e403d61359 297 * On Exit:
j3 23:e8e403d61359 298 *
j3 23:e8e403d61359 299 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 300 **************************************************************/
IanBenzMaxim 24:8942d8478d68 301 CmdResult OWVerify(const RomId & romId);
j3 23:e8e403d61359 302
j3 23:e8e403d61359 303
j3 23:e8e403d61359 304 /**********************************************************//**
j3 23:e8e403d61359 305 * @brief OWTargetSetup()
j3 23:e8e403d61359 306 *
j3 23:e8e403d61359 307 * @details Setup the search to find the device type 'family_code'
j3 23:e8e403d61359 308 * on the next call to OWNext() if it is present.
j3 23:e8e403d61359 309 *
j3 23:e8e403d61359 310 * On Entry:
j3 23:e8e403d61359 311 * @param[in] family_code - family code of device
j3 23:e8e403d61359 312 *
j3 23:e8e403d61359 313 * On Exit:
j3 23:e8e403d61359 314 *
j3 23:e8e403d61359 315 * @return
j3 23:e8e403d61359 316 **************************************************************/
IanBenzMaxim 24:8942d8478d68 317 void OWTargetSetup(RomId & romId);
j3 23:e8e403d61359 318
j3 23:e8e403d61359 319
j3 23:e8e403d61359 320 /**********************************************************//**
j3 23:e8e403d61359 321 * @brief OWFamilySkipSetup()
j3 23:e8e403d61359 322 *
j3 23:e8e403d61359 323 * @details Setup the search to skip the current device type on the
j3 23:e8e403d61359 324 * next call to OWNext().
j3 23:e8e403d61359 325 *
j3 23:e8e403d61359 326 * On Entry:
j3 23:e8e403d61359 327 *
j3 23:e8e403d61359 328 * On Exit:
j3 23:e8e403d61359 329 *
j3 23:e8e403d61359 330 * @return
j3 23:e8e403d61359 331 **************************************************************/
IanBenzMaxim 24:8942d8478d68 332 void OWFamilySkipSetup(void);
j3 15:f6cb0d906fb6 333
j3 23:e8e403d61359 334
j3 23:e8e403d61359 335 /**********************************************************//**
j3 23:e8e403d61359 336 * @brief OWReadROM()
j3 23:e8e403d61359 337 *
j3 23:e8e403d61359 338 * @details Only use this command with a single drop bus, data
j3 23:e8e403d61359 339 * collisions will occur if more than 1 device on bus.
j3 23:e8e403d61359 340 * Issues READ_ROM command, slave device will respond with ROM ID.
j3 23:e8e403d61359 341 *
j3 23:e8e403d61359 342 * On Entry:
j3 23:e8e403d61359 343 *
j3 23:e8e403d61359 344 * On Exit:
j3 23:e8e403d61359 345 *
j3 23:e8e403d61359 346 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 347 **************************************************************/
IanBenzMaxim 24:8942d8478d68 348 CmdResult OWReadROM(RomId & romId);
j3 23:e8e403d61359 349
j3 15:f6cb0d906fb6 350
j3 23:e8e403d61359 351 /**********************************************************//**
j3 23:e8e403d61359 352 * @brief OWSkipROM()
j3 23:e8e403d61359 353 *
j3 23:e8e403d61359 354 * @details Issue SKIP_ROM command on 1-wire bus
j3 23:e8e403d61359 355 *
j3 23:e8e403d61359 356 * On Entry:
j3 23:e8e403d61359 357 *
j3 23:e8e403d61359 358 * On Exit:
j3 23:e8e403d61359 359 *
j3 23:e8e403d61359 360 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 361 **************************************************************/
IanBenzMaxim 24:8942d8478d68 362 CmdResult OWSkipROM(void);
j3 23:e8e403d61359 363
j3 15:f6cb0d906fb6 364
j3 23:e8e403d61359 365 /**********************************************************//**
j3 23:e8e403d61359 366 * @brief OWMatchROM()
j3 23:e8e403d61359 367 *
j3 23:e8e403d61359 368 * @details Issues MATCH_ROM command on 1-wire bus and then sends
j3 23:e8e403d61359 369 * the rom id in _rom_number
j3 23:e8e403d61359 370 *
j3 23:e8e403d61359 371 * On Entry:
j3 23:e8e403d61359 372 *
j3 23:e8e403d61359 373 * On Exit:
j3 23:e8e403d61359 374 *
j3 23:e8e403d61359 375 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 376 **************************************************************/
IanBenzMaxim 24:8942d8478d68 377 CmdResult OWMatchROM(const RomId & romId);
j3 23:e8e403d61359 378
j3 15:f6cb0d906fb6 379
j3 23:e8e403d61359 380 /**********************************************************//**
j3 23:e8e403d61359 381 * @brief OWOverdriveSkipROM()
j3 23:e8e403d61359 382 *
j3 23:e8e403d61359 383 * @details Issues OVERDRIVE_SKIP rom command. DS248X OW speed
j3 23:e8e403d61359 384 * is set to SPEED_OVERDRIVE
j3 23:e8e403d61359 385 *
j3 23:e8e403d61359 386 * On Entry:
j3 23:e8e403d61359 387 *
j3 23:e8e403d61359 388 * On Exit:
j3 23:e8e403d61359 389 *
j3 23:e8e403d61359 390 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 391 **************************************************************/
IanBenzMaxim 24:8942d8478d68 392 CmdResult OWOverdriveSkipROM(void);
j3 15:f6cb0d906fb6 393
j3 15:f6cb0d906fb6 394
j3 23:e8e403d61359 395 /**********************************************************//**
j3 23:e8e403d61359 396 * @brief OWOverdriveMatchROM()
j3 23:e8e403d61359 397 *
j3 23:e8e403d61359 398 * @details Issues OVERDRIVE_MATCH rom command. DS248X OW speed
j3 23:e8e403d61359 399 * is set to SPEED_OVERDRIVE
j3 23:e8e403d61359 400 *
j3 23:e8e403d61359 401 * On Entry:
j3 23:e8e403d61359 402 *
j3 23:e8e403d61359 403 * On Exit:
j3 23:e8e403d61359 404 *
j3 23:e8e403d61359 405 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 406 **************************************************************/
IanBenzMaxim 24:8942d8478d68 407 CmdResult OWOverdriveMatchROM(const RomId & romId);
j3 23:e8e403d61359 408
j3 15:f6cb0d906fb6 409
j3 23:e8e403d61359 410 /**********************************************************//**
j3 23:e8e403d61359 411 * @brief OWResume()
j3 23:e8e403d61359 412 *
j3 23:e8e403d61359 413 * @details Issues RESUME command, very usefull. Is like skip
j3 23:e8e403d61359 414 * on a multidrop bus, however you must first select the device
j3 23:e8e403d61359 415 * you want to interface with using a MATCH, or SEARCH. The
j3 23:e8e403d61359 416 * device stays selected until another device is selected,
j3 23:e8e403d61359 417 * see slave datasheet for detailed explanation.
j3 23:e8e403d61359 418 *
j3 23:e8e403d61359 419 * On Entry:
j3 23:e8e403d61359 420 *
j3 23:e8e403d61359 421 * On Exit:
j3 23:e8e403d61359 422 *
j3 23:e8e403d61359 423 * @return CmdResult - zero on success, non-zero on failure
j3 23:e8e403d61359 424 **************************************************************/
IanBenzMaxim 24:8942d8478d68 425 CmdResult OWResume(void);
IanBenzMaxim 21:00c94aeb533e 426
IanBenzMaxim 24:8942d8478d68 427 protected:
IanBenzMaxim 24:8942d8478d68 428
IanBenzMaxim 24:8942d8478d68 429 enum OW_ROM_CMD
IanBenzMaxim 24:8942d8478d68 430 {
IanBenzMaxim 24:8942d8478d68 431 READ_ROM = 0x33,
IanBenzMaxim 24:8942d8478d68 432 MATCH_ROM = 0x55,
IanBenzMaxim 24:8942d8478d68 433 SEARCH_ROM = 0xF0,
IanBenzMaxim 24:8942d8478d68 434 SKIP_ROM = 0xCC,
IanBenzMaxim 24:8942d8478d68 435 RESUME = 0xA5,
IanBenzMaxim 24:8942d8478d68 436 OVERDRIVE_SKIP_ROM = 0x3C,
IanBenzMaxim 24:8942d8478d68 437 OVERDRIVE_MATCH_ROM = 0x69
IanBenzMaxim 24:8942d8478d68 438 };
j3 15:f6cb0d906fb6 439
j3 15:f6cb0d906fb6 440 // Search state
IanBenzMaxim 27:d5aaefa252f1 441 std::uint8_t _last_discrepancy;
IanBenzMaxim 27:d5aaefa252f1 442 std::uint8_t _last_family_discrepancy;
IanBenzMaxim 21:00c94aeb533e 443 bool _last_device_flag;
IanBenzMaxim 21:00c94aeb533e 444
IanBenzMaxim 24:8942d8478d68 445 private:
j3 17:b646b1e3970b 446
IanBenzMaxim 27:d5aaefa252f1 447 static const std::uint16_t _oddparity[16];
j3 15:f6cb0d906fb6 448 };
j3 15:f6cb0d906fb6 449
j3 15:f6cb0d906fb6 450
j3 15:f6cb0d906fb6 451
j3 5:ce108eeb878d 452
j3 5:ce108eeb878d 453
IanBenzMaxim 27:d5aaefa252f1 454 #endif /*ONEWIREMASTER_H*/