Implementation of 1-Wire with added Alarm Search Functionality

Dependents:   Max32630_One_Wire_Interface

Committer:
IanBenzMaxim
Date:
Fri May 13 14:52:50 2016 -0500
Revision:
75:8b627804927c
Parent:
74:23be10c32fa3
Code cleanup.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IanBenzMaxim 75:8b627804927c 1 /******************************************************************//**
IanBenzMaxim 75:8b627804927c 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
IanBenzMaxim 75:8b627804927c 3 *
IanBenzMaxim 75:8b627804927c 4 * Permission is hereby granted, free of charge, to any person obtaining a
IanBenzMaxim 75:8b627804927c 5 * copy of this software and associated documentation files (the "Software"),
IanBenzMaxim 75:8b627804927c 6 * to deal in the Software without restriction, including without limitation
IanBenzMaxim 75:8b627804927c 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
IanBenzMaxim 75:8b627804927c 8 * and/or sell copies of the Software, and to permit persons to whom the
IanBenzMaxim 75:8b627804927c 9 * Software is furnished to do so, subject to the following conditions:
IanBenzMaxim 75:8b627804927c 10 *
IanBenzMaxim 75:8b627804927c 11 * The above copyright notice and this permission notice shall be included
IanBenzMaxim 75:8b627804927c 12 * in all copies or substantial portions of the Software.
IanBenzMaxim 75:8b627804927c 13 *
IanBenzMaxim 75:8b627804927c 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
IanBenzMaxim 75:8b627804927c 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
IanBenzMaxim 75:8b627804927c 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IanBenzMaxim 75:8b627804927c 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
IanBenzMaxim 75:8b627804927c 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
IanBenzMaxim 75:8b627804927c 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
IanBenzMaxim 75:8b627804927c 20 * OTHER DEALINGS IN THE SOFTWARE.
IanBenzMaxim 75:8b627804927c 21 *
IanBenzMaxim 75:8b627804927c 22 * Except as contained in this notice, the name of Maxim Integrated
IanBenzMaxim 75:8b627804927c 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
IanBenzMaxim 75:8b627804927c 24 * Products, Inc. Branding Policy.
IanBenzMaxim 75:8b627804927c 25 *
IanBenzMaxim 75:8b627804927c 26 * The mere transfer of this software does not imply any licenses
IanBenzMaxim 75:8b627804927c 27 * of trade secrets, proprietary technology, copyrights, patents,
IanBenzMaxim 75:8b627804927c 28 * trademarks, maskwork rights, or any other form of intellectual
IanBenzMaxim 75:8b627804927c 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
IanBenzMaxim 75:8b627804927c 30 * ownership rights.
IanBenzMaxim 75:8b627804927c 31 **********************************************************************/
IanBenzMaxim 75:8b627804927c 32
IanBenzMaxim 73:2cecc1372acc 33 #ifndef OneWire_array
IanBenzMaxim 73:2cecc1372acc 34 #define OneWire_array
IanBenzMaxim 33:a4c015046956 35
IanBenzMaxim 73:2cecc1372acc 36 #include <stdint.h>
IanBenzMaxim 73:2cecc1372acc 37 #include <stddef.h>
IanBenzMaxim 33:a4c015046956 38 #include <cstring>
IanBenzMaxim 33:a4c015046956 39
IanBenzMaxim 73:2cecc1372acc 40 namespace OneWire
IanBenzMaxim 33:a4c015046956 41 {
IanBenzMaxim 74:23be10c32fa3 42 /// Generic array class similar to std::array.
IanBenzMaxim 74:23be10c32fa3 43 template <typename T, size_t N>
IanBenzMaxim 74:23be10c32fa3 44 class array
IanBenzMaxim 73:2cecc1372acc 45 {
IanBenzMaxim 74:23be10c32fa3 46 public:
IanBenzMaxim 74:23be10c32fa3 47 /// Number of elements contained in the array.
IanBenzMaxim 74:23be10c32fa3 48 static const size_t length = N;
IanBenzMaxim 74:23be10c32fa3 49
IanBenzMaxim 74:23be10c32fa3 50 /// Built-in array representation.
IanBenzMaxim 74:23be10c32fa3 51 typedef T Buffer[N];
IanBenzMaxim 74:23be10c32fa3 52
IanBenzMaxim 74:23be10c32fa3 53 private:
IanBenzMaxim 74:23be10c32fa3 54 Buffer m_buffer;
IanBenzMaxim 74:23be10c32fa3 55
IanBenzMaxim 74:23be10c32fa3 56 public:
IanBenzMaxim 74:23be10c32fa3 57 const array<T, N> & operator=(const array<T, N> & rhs)
IanBenzMaxim 74:23be10c32fa3 58 {
IanBenzMaxim 74:23be10c32fa3 59 if (this != &rhs)
IanBenzMaxim 74:23be10c32fa3 60 {
IanBenzMaxim 74:23be10c32fa3 61 std::memcpy(this->m_buffer, rhs.m_buffer, N * sizeof(T));
IanBenzMaxim 74:23be10c32fa3 62 }
IanBenzMaxim 74:23be10c32fa3 63 return rhs;
IanBenzMaxim 74:23be10c32fa3 64 }
IanBenzMaxim 74:23be10c32fa3 65
IanBenzMaxim 74:23be10c32fa3 66 bool operator==(const array<T, N> & rhs) const
IanBenzMaxim 74:23be10c32fa3 67 {
IanBenzMaxim 74:23be10c32fa3 68 return (std::memcmp(this->m_buffer, rhs.m_buffer, N * sizeof(T)) == 0);
IanBenzMaxim 74:23be10c32fa3 69 }
IanBenzMaxim 74:23be10c32fa3 70
IanBenzMaxim 74:23be10c32fa3 71 bool operator!=(const array<T, N> & rhs) const
IanBenzMaxim 74:23be10c32fa3 72 {
IanBenzMaxim 74:23be10c32fa3 73 return !operator==(rhs);
IanBenzMaxim 74:23be10c32fa3 74 }
IanBenzMaxim 74:23be10c32fa3 75
IanBenzMaxim 74:23be10c32fa3 76 /// Conversion to array reference.
IanBenzMaxim 74:23be10c32fa3 77 operator Buffer &()
IanBenzMaxim 74:23be10c32fa3 78 {
IanBenzMaxim 74:23be10c32fa3 79 return m_buffer;
IanBenzMaxim 74:23be10c32fa3 80 }
IanBenzMaxim 74:23be10c32fa3 81
IanBenzMaxim 74:23be10c32fa3 82 /// Conversion to const array reference.
IanBenzMaxim 74:23be10c32fa3 83 operator const Buffer &() const
IanBenzMaxim 74:23be10c32fa3 84 {
IanBenzMaxim 74:23be10c32fa3 85 return m_buffer;
IanBenzMaxim 74:23be10c32fa3 86 }
IanBenzMaxim 74:23be10c32fa3 87
IanBenzMaxim 74:23be10c32fa3 88 array<T, N>() { }
IanBenzMaxim 74:23be10c32fa3 89
IanBenzMaxim 74:23be10c32fa3 90 array<T, N>(const array<T, N> & copy)
IanBenzMaxim 74:23be10c32fa3 91 {
IanBenzMaxim 74:23be10c32fa3 92 operator=(copy);
IanBenzMaxim 74:23be10c32fa3 93 }
IanBenzMaxim 74:23be10c32fa3 94
IanBenzMaxim 74:23be10c32fa3 95 array<T, N>(const Buffer & buffer)
IanBenzMaxim 74:23be10c32fa3 96 {
IanBenzMaxim 74:23be10c32fa3 97 std::memcpy(m_buffer, buffer, N * sizeof(T));
IanBenzMaxim 74:23be10c32fa3 98 }
IanBenzMaxim 74:23be10c32fa3 99 };
IanBenzMaxim 73:2cecc1372acc 100 }
IanBenzMaxim 33:a4c015046956 101
IanBenzMaxim 49:36954b62f503 102 #endif