Implementation of 1-Wire with added Alarm Search Functionality

Dependents:   Max32630_One_Wire_Interface

Revision:
139:f0e0a7976846
Parent:
103:6dcbb5166da1
--- a/RomId/RomId.h	Fri Dec 02 19:21:55 2016 +0000
+++ b/RomId/RomId.h	Tue Dec 13 13:31:30 2016 -0800
@@ -38,108 +38,37 @@
 
 namespace OneWire
 {
-  /// Standard container for a 1-Wire ROM ID.
-  class RomId
-  {
-  public:
-      /// Length of the buffer in bytes.
-      static const size_t byteLen = 8;
-      
-      /// Built-in array representation.
-      typedef array<uint8_t, byteLen>::Buffer ByteBuffer;
+    /// Standard container for a 1-Wire ROM ID.
+    struct RomId
+    {
+        typedef array<uint8_t, 8> Buffer;
+    
+        /// Direct access to the buffer.
+        Buffer buffer;
+        /// @}
 
-  private:
-      static const size_t familyCodeIdx = 0;
-      static const size_t crc8Idx = 7;
-      
-      /// Default starting value is all bytes 0x00.
-      static const uint8_t defaultByteVal = 0x00;
-
-      array<uint8_t, byteLen> m_romId;
-
-  public:
-      RomId() { reset(); }
-      RomId(const RomId & romId) : m_romId(romId.m_romId) { }
-      RomId(const ByteBuffer & romIdBytes) : m_romId(romIdBytes) { }
+        /// @{
+        /// Access the Family Code byte.
+        uint8_t & familyCode() { return buffer.front(); }
+        const uint8_t & familyCode() const { return buffer.front(); }
+        /// @}
 
-      const RomId & operator=(const RomId & rhs)
-      {
-          this->m_romId = rhs.m_romId;
-          return rhs;
-      }
-      
-      bool operator==(const RomId & rhs) const
-      {
-          return (this->m_romId == rhs.m_romId);
-      }
-      
-      bool operator!=(const RomId & rhs) const
-      {
-          return !operator==(rhs);
-      }
-      
-      /// Conversion to array reference.
-      operator ByteBuffer &()
-      {
-          return m_romId;
-      }
-      
-      /// Conversion to const array reference.
-      operator const ByteBuffer &() const
-      {
-          return m_romId;
-      }
-
-      /// Reset to the default starting value.
-      void reset()
-      {
-          std::memset(m_romId, defaultByteVal, byteLen);
-      }
+        /// @{
+        /// Access the CRC8 byte.
+        uint8_t & crc8() { return buffer.back(); }
+        const uint8_t & crc8() const { return buffer.back(); }
+        /// @}
 
-      /// Read the Family Code byte.
-      uint8_t familyCode() const
-      {
-          return m_romId[familyCodeIdx];
-      }
-      
-      /// Set the family code byte.
-      void setFamilyCode(uint8_t familyCode)
-      {
-          m_romId[familyCodeIdx] = familyCode;
-      }
-
-      /// Read the CRC8 byte.
-      uint8_t crc8() const
-      {
-          return m_romId[crc8Idx];
-      }
-      
-      /// Set the CRC8 byte.
-      void setCrc8(uint8_t crc8)
-      {
-          m_romId[crc8Idx] = crc8;
-      }
-      
-      /// Check if the CRC8 is valid for the ROM ID.
-      /// @returns True if the CRC8 is valid.
-      bool crc8Valid() const
-      {
-          return (crc::calculateCrc8(m_romId, (byteLen - 1), 0x00) == crc8());
-      }
-      
-      /// Calculate and set the CRC8 for the ROM ID.
-      void setValidCrc8()
-      {
-          setCrc8(crc::calculateCrc8(m_romId, (byteLen - 1), 0x00));
-      }
-
-      /// Check if the ROM ID is valid (Family Code and CRC8 are both valid).
-      /// @returns True if the ROM ID is valid.
-      bool valid() const
-      {
-          return (crc8Valid() && (familyCode() != defaultByteVal));
-      }
-  };
+        /// Check if the ROM ID is valid (Family Code and CRC8 are both valid).
+        /// @returns True if the ROM ID is valid.
+        bool valid() const
+        {
+            return crc::calculateCrc8(buffer.data(), buffer.size() - 1, 0x00) == crc8();
+        }
+        
+        bool operator==(const RomId & rhs) const { return (this->buffer == rhs.buffer); }
+        bool operator!=(const RomId & rhs) const { return !operator==(rhs); }
+    };
 }
 
 #endif