Implementation of 1-Wire with added Alarm Search Functionality
Dependents: Max32630_One_Wire_Interface
Diff: OneWire_Masters/RomId.hpp
- Revision:
- 17:b646b1e3970b
diff -r 883becbd85f8 -r b646b1e3970b OneWire_Masters/RomId.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OneWire_Masters/RomId.hpp Fri Mar 18 20:21:05 2016 +0000 @@ -0,0 +1,114 @@ +/******************************************************************//** +* 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 _ROMID_HPP +#define _ROMID_HPP + +#include "mbed.h" +#include <cstdint> +#include <cstring> + +class RomId +{ +public: + static const std::size_t byteLen = 8; + typedef std::uint8_t byteBuffer[byteLen]; + + static std::uint8_t calculateCRC8(uint8_t crc8, uint8_t data); + static std::uint8_t calculateCRC8(const uint8_t * data, size_t data_len, uint8_t crc); + +private: + static const std::size_t familyCodeIdx = 0; + static const std::size_t crc8Idx = 7; + static const std::uint8_t defaultByteVal = 0x00; + + byteBuffer m_romId; + +public: + const RomId & operator=(const RomId & rhs) { + std::memcpy(this->m_romId, rhs.m_romId, byteLen); + return rhs; + } + bool operator==(const RomId & rhs) const { + return (std::memcmp(this->m_romId, rhs.m_romId, byteLen) == 0); + } + bool operator!=(const RomId & rhs) const { + return !operator==(rhs); + } + operator byteBuffer &() { + return m_romId; // Conversion to array reference + } + operator const byteBuffer &() const { + return m_romId; // Conversion to const array reference + } + + void reset() { + std::memset(m_romId, defaultByteVal, byteLen); + } + + RomId() { + reset(); + } + RomId(const RomId & romId) { + operator=(romId); + } + RomId(const byteBuffer & romIdBytes) { + std::memcpy(m_romId, romIdBytes, byteLen); + } + + std::uint8_t familyCode() const { + return m_romId[familyCodeIdx]; + } + void setFamilyCode(std::uint8_t familyCode) { + m_romId[familyCodeIdx] = familyCode; + } + + std::uint8_t crc8() const { + return m_romId[crc8Idx]; + } + void setCrc8(std::uint8_t crc8) { + m_romId[crc8Idx] = crc8; + } + bool crc8Valid() const { + return (calculateCRC8(m_romId, (byteLen - 1), 0x00) == crc8()); + } + void setValidCrc8() { + setCrc8(calculateCRC8(m_romId, (byteLen - 1), 0x00)); + } + + bool valid() const { + return (crc8Valid() && (familyCode() != defaultByteVal)); + } +}; + +#endif \ No newline at end of file