Implementation of 1-Wire with added Alarm Search Functionality
Dependents: Max32630_One_Wire_Interface
Diff: RomId/RomId.h
- 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